Skip to content

Commit

Permalink
changed amr for moving vortices to refine interface
Browse files Browse the repository at this point in the history
  • Loading branch information
pbosler committed Mar 3, 2015
1 parent 787a2c8 commit 4da4aff
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 13 deletions.
4 changes: 2 additions & 2 deletions AdvectMovingVortices.f90
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ program MovingVorticesAdvection
!
type(RemeshSetup) :: remesh
integer(kint) :: remeshInterval, resetAlphaInterval, amrLimit, remeshCounter
real(kreal) :: tracerMassTol, tracerVarTol, lagVarTol
real(kreal) :: tracerMassTol, tracerVarTol, lagVarTol, tracerRefVal, tracerRefTol
type(ReferenceSphere), pointer :: reference

!
Expand Down Expand Up @@ -88,7 +88,7 @@ program MovingVorticesAdvection
! namelists and user input
!
character(len=MAX_STRING_LENGTH) :: namelistFile = 'MovingVortices.namelist'
namelist /meshDefine/ initNest, AMR, panelKind, amrLimit, tracerMassTol, tracerVarTol, lagVarTol
namelist /meshDefine/ initNest, AMR, panelKind, amrLimit, tracerMassTol, tracerVarTol, lagVarTol, tracerRefVal, tracerRefTol
namelist /timestepping/ tfinal, dt, remeshInterval, resetAlphaInterval
namelist /fileIO/ outputDir, jobPrefix, frameOut

Expand Down
14 changes: 8 additions & 6 deletions MovingVortices.namelist
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
&meshDefine
initNest = 5
AMR = 0
AMR = 4
panelKind = 3
amrLimit = 0
tracerMassTol = 2.0
tracerVarTol = 0.25
lagVarTol = 1.0
tracerMassTol = 1.0e20
tracerVarTol = 1.0e20
lagVarTol = 1.0e20
tracerRefVal = 1.0
tracerRefTol = 0.01
/

&timestepping
Expand All @@ -17,6 +19,6 @@

&fileIO
outputDir = '~/modelData/'
jobPrefix = 'advMovingVorts_conv1_'
frameOut = 200
jobPrefix = 'advMovingVorts_interfaceAMR_'
frameOut = 2
/
63 changes: 58 additions & 5 deletions RefineRemesh2.f90
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ module RefineRemeshModule

private
public RefinementSetup
public New, Delete
public New, Delete, SetReferenceValues
public LagrangianRemesh !, DirectRemesh
public InitialRefinement
public NULL_REFINE, TRACER_REFINE, RELVORT_REFINE, FLOWMAP_REFINE
Expand All @@ -52,6 +52,9 @@ module RefineRemeshModule
type RefinementSetup
real(kreal) :: maxTol ! tolerance for extrema
real(kreal) :: varTol ! tolerance for variation
real(kreal) :: refVal ! reference value
real(kreal) :: refTol ! tolerance for difference from reference
logical(klog) :: useReferenceCriterion = .FALSE. ! true if reference val and reference tol are used
integer(kint) :: type = NULL_REFINE ! identifier for physical data field
integer(kint) :: tracerID
integer(kint) :: limit
Expand Down Expand Up @@ -155,6 +158,14 @@ subroutine DeletePrivate(self)
! Public functions
!----------------
!
subroutine SetReferenceValues( refineObj, refVal, refTol )
type(RefinementSetup), intent(inout) :: refineObj
real(kreal), intent(in) :: refVal, refTol
refineObj%refVal = refVal
refineObj%refTol = refTol
refineObj%useReferenceCriterion = .TRUE.
end subroutine

subroutine InitialRefinement(aMesh, refineTracer, updateTracerOnMesh, tracerDef, &
refineRelVort, updateVorticityOnMesh, vortDef)
type(SphereMesh), intent(inout) :: aMesh
Expand Down Expand Up @@ -201,7 +212,11 @@ subroutine InitialRefinement(aMesh, refineTracer, updateTracerOnMesh, tracerDef,
startIndex = 1
if ( refineTracer%type /= NULL_REFINE ) then
limit = max(limit,refineTracer%limit)
call FlagPanelsForTracerMaxRefinement(refineFlag,aMesh,refineTracer,startIndex)
if ( refineTracer%useReferenceCriterion ) then
call FlagPanelsForTracerInterfaceRefinement(refineFlag, aMesh, refineTracer, startIndex)
else
call FlagPanelsForTracerMaxRefinement(refineFlag,aMesh,refineTracer,startIndex)
endif
counter1 = count(refineFlag)
call FlagPanelsForTracerVariationRefinement(refineFlag,aMesh,refineTracer,startIndex)
counter2 = count(refineFlag) - counter1
Expand Down Expand Up @@ -291,7 +306,11 @@ subroutine InitialRefinement(aMesh, refineTracer, updateTracerOnMesh, tracerDef,
startIndex = nOldPanels+1
nOldPanels = aPanels%N
if ( refineTracer%type /= NULL_REFINE ) then
call FlagPanelsForTracerMaxRefinement(refineFlag,aMesh,refineTracer,startIndex)
if ( refineTracer%useReferenceCriterion ) then
call FlagPanelsForTracerInterfaceRefinement(refineFlag, aMesh, refineTracer, startIndex)
else
call FlagPanelsForTracerMaxRefinement(refineFlag,aMesh,refineTracer,startIndex)
endif
counter1 = count(refineFlag)
call FlagPanelsForTracerVariationRefinement(refineFlag,aMesh,refineTracer,startIndex)
counter2 = count(refineFlag) - counter1
Expand Down Expand Up @@ -451,7 +470,11 @@ subroutine LagrangianRemeshPrivate(aMesh, setVorticity, vortDef, vortRefine, &
!
if ( refineTracer ) then
limit = max(limit,tracerRefine%limit)
call FlagPanelsForTracerMaxRefinement(refineFlag,newMesh,tracerRefine,startIndex)
if ( refineTracer%useReferenceCriterion ) then
call FlagPanelsForTracerInterfaceRefinement(refineFlag, aMesh, refineTracer, startIndex)
else
call FlagPanelsForTracerMaxRefinement(refineFlag,newMesh,tracerRefine,startIndex)
endif
counter1 = count(refineFlag)
call FlagPanelsForTracerVariationRefinement(refineFlag,newMesh,tracerRefine,startIndex)
counter2 = count(refineFlag) - counter1
Expand Down Expand Up @@ -560,7 +583,11 @@ subroutine LagrangianRemeshPrivate(aMesh, setVorticity, vortDef, vortRefine, &
nOldPanels = newPanels%N
if ( refineTracer ) then
limit = max(limit,tracerRefine%limit)
call FlagPanelsForTracerMaxRefinement(refineFlag,newMesh,tracerRefine,startIndex)
if ( refineTracer%useReferenceCriterion ) then
call FlagPanelsForTracerInterfaceRefinement(refineFlag, aMesh, refineTracer, startIndex)
else
call FlagPanelsForTracerMaxRefinement(refineFlag,newMesh,tracerRefine,startIndex)
endif
counter1 = count(refineFlag)
call FlagPanelsForTracerVariationRefinement(refineFlag,newMesh,tracerRefine,startIndex)
counter2 = count(refineFlag) - counter1
Expand Down Expand Up @@ -789,6 +816,32 @@ subroutine FlagPanelsForTracerMaxRefinement(refineFlag,aMesh,refineTracer,startI
enddo
end subroutine

subroutine FlagPanelsForTracerInterfaceRefinement(refineFlag, aMesh, refineTracer, startIndex)
logical(klog), intent(inout) :: refineFlag(:)
type(SphereMesh), intent(in) :: aMesh
type(RefinementSetup), intent(in) :: refineTracer
integer(kint), intent(in) :: startIndex
!local variables
type(Panels), pointer :: aPanels
integer(kint) :: j
if ( refineTracer%type /= TRACER_REFINE ) then
call LogMessage(log,ERROR_LOGGING_LEVEL,'FlagPanelsTracerInterface ERROR :',' invalid refinement type.')
return
endif
if ( .NOT. refineTracer%useReferenceCriterion ) then
call LogMessage(log, WARNING_LOGGING_LEVEL, 'FlagPanelsTracerInterface WARNING : ', 'reference values not set.')
return
endif

aPanels => aMesh%panels
do j = startIndex, aPanels%N
if ( .NOT. aPanels%hasChildren(j) ) then
if ( abs( aPanels%tracer(j,refineTracer%tracerID) - refineTracer%refVal ) < refineTracer%refTol ) &
refineFlage(j) = .TRUE.
endif
enddo
end subroutine

subroutine FlagPanelsForCirculationRefinement(refineFlag,aMesh,refineRelVort,startIndex)
logical(klog), intent(inout) :: refineFlag(:)
type(SphereMesh), intent(in) :: aMesh
Expand Down

0 comments on commit 4da4aff

Please sign in to comment.