@@ -482,64 +482,122 @@ subroutine OverEnrichRegions(overenriching,mesh,NNew,Nmax,Nmin)
482482 integer :: cornerID ! Corner counter
483483 logical :: enriched(mesh % no_of_elements)
484484 logical :: is_inside
485+ integer :: i
485486 !- --------------------------------------
486487
487488 if (.not. allocated (overenriching) ) return
488489
489490 enriched = .FALSE.
490491
491- do oID = 1 , size (overenriching)
492- associate (box = > overenriching(oID) )
493-
494- element_loop: do eID= 1 , mesh % no_of_elements
492+ if (.not. allocated (mesh % elements_aerodynamics)) then
493+ do oID = 1 , size (overenriching)
494+ associate (box = > overenriching(oID) )
495495
496- if ( enriched(eID) ) cycle element_loop
496+ element_loop: do eID= 1 , mesh % no_of_elements
497+
498+ if ( enriched(eID) ) cycle element_loop
499+
500+ associate ( corners = > mesh % elements(eID) % hexMap % corners )
501+
502+ !
503+ ! Enrich element if any of the corners is inside the region
504+ ! ---------------------------------------------------------
505+ corner_loop: do cornerID= 1 , 8
506+
507+ is_inside = ( (corners(1 ,cornerID) > box % x_span(1 ) .and. corners(1 ,cornerID) < box % x_span(2 )) .and. &
508+ (corners(2 ,cornerID) > box % y_span(1 ) .and. corners(2 ,cornerID) < box % y_span(2 )) .and. &
509+ (corners(3 ,cornerID) > box % z_span(1 ) .and. corners(3 ,cornerID) < box % z_span(2 )) )
510+
511+ if ( (box % region == 1 .and. is_inside) .or. (box % region == 2 .and. (.not. is_inside))) then
512+
513+ if (box % mode == 1 ) then ! Increase mode
514+ NNew(1 ,eID) = max (min (NNew(1 ,eID) + box % order, Nmax(1 )), Nmin(1 ))
515+ NNew(2 ,eID) = max (min (NNew(2 ,eID) + box % order, Nmax(2 )), Nmin(2 ))
516+ NNew(3 ,eID) = max (min (NNew(3 ,eID) + box % order, Nmax(3 )), Nmin(3 ))
517+ else if (box % mode == 2 ) then ! Set mode
518+ NNew(1 ,eID) = max (min (box % polynomial(1 ), Nmax(1 )), Nmin(1 ))
519+ NNew(2 ,eID) = max (min (box % polynomial(2 ), Nmax(2 )), Nmin(2 ))
520+ NNew(3 ,eID) = max (min (box % polynomial(3 ), Nmax(3 )), Nmin(3 ))
521+ else if (box % mode == 3 ) then ! Max mode
522+ NNew(1 ,eID) = min (max (NNew(1 ,eID), box % polynomial(1 )), Nmax(1 ))
523+ NNew(2 ,eID) = min (max (NNew(2 ,eID), box % polynomial(2 )), Nmax(2 ))
524+ NNew(3 ,eID) = min (max (NNew(3 ,eID), box % polynomial(3 )), Nmax(3 ))
525+ else if (box % mode == 4 ) then ! Min mode
526+ NNew(1 ,eID) = max (min (NNew(1 ,eID), box % polynomial(1 )), Nmin(1 ))
527+ NNew(2 ,eID) = max (min (NNew(2 ,eID), box % polynomial(2 )), Nmin(2 ))
528+ NNew(3 ,eID) = max (min (NNew(3 ,eID), box % polynomial(3 )), Nmin(3 ))
529+ else if (box % mode == 5 ) then ! Freeze mode
530+ NNew(1 ,eID) = mesh % elements(eID) % Nxyz(1 )
531+ NNew(2 ,eID) = mesh % elements(eID) % Nxyz(2 )
532+ NNew(3 ,eID) = mesh % elements(eID) % Nxyz(3 )
533+ end if
534+
535+ enriched(eID) = .TRUE.
536+ exit corner_loop
537+ end if
538+ end do corner_loop
539+
540+ end associate
541+ end do element_loop
497542
498- associate ( corners = > mesh % elements(eID) % hexMap % corners )
543+ end associate
544+ end do
545+ else
546+ do oID = 1 , size (overenriching)
547+ associate (box = > overenriching(oID) )
499548
500- !
501- ! Enrich element if any of the corners is inside the region
502- ! ---------------------------------------------------------
503- corner_loop: do cornerID= 1 , 8
549+ element_loop: do i = 1 , size (mesh % elements_aerodynamics)
550+
551+ eID = mesh % elements_aerodynamics(i)
552+
553+ if ( enriched(eID) ) cycle element_loop
554+
555+ associate ( corners = > mesh % elements(eID) % hexMap % corners )
556+
557+ !
558+ ! Enrich element if any of the corners is inside the region
559+ ! ---------------------------------------------------------
560+ corner_loop: do cornerID= 1 , 8
504561
505- is_inside = ( (corners(1 ,cornerID) > box % x_span(1 ) .and. corners(1 ,cornerID) < box % x_span(2 )) .and. &
506- (corners(2 ,cornerID) > box % y_span(1 ) .and. corners(2 ,cornerID) < box % y_span(2 )) .and. &
507- (corners(3 ,cornerID) > box % z_span(1 ) .and. corners(3 ,cornerID) < box % z_span(2 )) )
562+ is_inside = ( (corners(1 ,cornerID) > box % x_span(1 ) .and. corners(1 ,cornerID) < box % x_span(2 )) .and. &
563+ (corners(2 ,cornerID) > box % y_span(1 ) .and. corners(2 ,cornerID) < box % y_span(2 )) .and. &
564+ (corners(3 ,cornerID) > box % z_span(1 ) .and. corners(3 ,cornerID) < box % z_span(2 )) )
508565
509- if ( (box % region == 1 .and. is_inside) .or. (box % region == 2 .and. (.not. is_inside))) then
566+ if ( (box % region == 1 .and. is_inside) .or. (box % region == 2 .and. (.not. is_inside))) then
510567
511- if (box % mode == 1 ) then ! Increase mode
512- NNew(1 ,eID) = max (min (NNew(1 ,eID) + box % order, Nmax(1 )), Nmin(1 ))
513- NNew(2 ,eID) = max (min (NNew(2 ,eID) + box % order, Nmax(2 )), Nmin(2 ))
514- NNew(3 ,eID) = max (min (NNew(3 ,eID) + box % order, Nmax(3 )), Nmin(3 ))
515- else if (box % mode == 2 ) then ! Set mode
516- NNew(1 ,eID) = max (min (box % polynomial(1 ), Nmax(1 )), Nmin(1 ))
517- NNew(2 ,eID) = max (min (box % polynomial(2 ), Nmax(2 )), Nmin(2 ))
518- NNew(3 ,eID) = max (min (box % polynomial(3 ), Nmax(3 )), Nmin(3 ))
519- else if (box % mode == 3 ) then ! Max mode
520- NNew(1 ,eID) = min (max (NNew(1 ,eID), box % polynomial(1 )), Nmax(1 ))
521- NNew(2 ,eID) = min (max (NNew(2 ,eID), box % polynomial(2 )), Nmax(2 ))
522- NNew(3 ,eID) = min (max (NNew(3 ,eID), box % polynomial(3 )), Nmax(3 ))
523- else if (box % mode == 4 ) then ! Min mode
524- NNew(1 ,eID) = max (min (NNew(1 ,eID), box % polynomial(1 )), Nmin(1 ))
525- NNew(2 ,eID) = max (min (NNew(2 ,eID), box % polynomial(2 )), Nmin(2 ))
526- NNew(3 ,eID) = max (min (NNew(3 ,eID), box % polynomial(3 )), Nmin(3 ))
527- else if (box % mode == 5 ) then ! Freeze mode
528- NNew(1 ,eID) = mesh % elements(eID) % Nxyz(1 )
529- NNew(2 ,eID) = mesh % elements(eID) % Nxyz(2 )
530- NNew(3 ,eID) = mesh % elements(eID) % Nxyz(3 )
531- end if
532-
533- enriched(eID) = .TRUE.
534- exit corner_loop
535- end if
536- end do corner_loop
568+ if (box % mode == 1 ) then ! Increase mode
569+ NNew(1 ,eID) = max (min (NNew(1 ,eID) + box % order, Nmax(1 )), Nmin(1 ))
570+ NNew(2 ,eID) = max (min (NNew(2 ,eID) + box % order, Nmax(2 )), Nmin(2 ))
571+ NNew(3 ,eID) = max (min (NNew(3 ,eID) + box % order, Nmax(3 )), Nmin(3 ))
572+ else if (box % mode == 2 ) then ! Set mode
573+ NNew(1 ,eID) = max (min (box % polynomial(1 ), Nmax(1 )), Nmin(1 ))
574+ NNew(2 ,eID) = max (min (box % polynomial(2 ), Nmax(2 )), Nmin(2 ))
575+ NNew(3 ,eID) = max (min (box % polynomial(3 ), Nmax(3 )), Nmin(3 ))
576+ else if (box % mode == 3 ) then ! Max mode
577+ NNew(1 ,eID) = min (max (NNew(1 ,eID), box % polynomial(1 )), Nmax(1 ))
578+ NNew(2 ,eID) = min (max (NNew(2 ,eID), box % polynomial(2 )), Nmax(2 ))
579+ NNew(3 ,eID) = min (max (NNew(3 ,eID), box % polynomial(3 )), Nmax(3 ))
580+ else if (box % mode == 4 ) then ! Min mode
581+ NNew(1 ,eID) = max (min (NNew(1 ,eID), box % polynomial(1 )), Nmin(1 ))
582+ NNew(2 ,eID) = max (min (NNew(2 ,eID), box % polynomial(2 )), Nmin(2 ))
583+ NNew(3 ,eID) = max (min (NNew(3 ,eID), box % polynomial(3 )), Nmin(3 ))
584+ else if (box % mode == 5 ) then ! Freeze mode
585+ NNew(1 ,eID) = mesh % elements(eID) % Nxyz(1 )
586+ NNew(2 ,eID) = mesh % elements(eID) % Nxyz(2 )
587+ NNew(3 ,eID) = mesh % elements(eID) % Nxyz(3 )
588+ end if
589+
590+ enriched(eID) = .TRUE.
591+ exit corner_loop
592+ end if
593+ end do corner_loop
594+
595+ end associate
596+ end do element_loop
537597
538598 end associate
539- end do element_loop
540-
541- end associate
542- end do
599+ end do
600+ end if
543601
544602 end subroutine OverEnrichRegions
545603!
0 commit comments