diff --git a/src/2d/shallow/flag2refine2.f90 b/src/2d/shallow/flag2refine2.f90 index 6e3c20beb..7d4c1fa22 100644 --- a/src/2d/shallow/flag2refine2.f90 +++ b/src/2d/shallow/flag2refine2.f90 @@ -61,7 +61,7 @@ subroutine flag2refine2(mx,my,mbc,mbuff,meqn,maux,xlower,ylower,dx,dy,t,level, & ! Generic locals integer :: i,j,m - real(kind=8) :: x_c,y_c,x_low,y_low,x_hi,y_hi + real(kind=8) :: x_c,y_c,x_low,y_low,x_hi,y_hi,mth_level_wave_tolerance, mth_level_speed_tolerance real(kind=8) :: speed, eta, ds ! Storm specific variables @@ -175,27 +175,46 @@ subroutine flag2refine2(mx,my,mbc,mbuff,meqn,maux,xlower,ylower,dx,dy,t,level, & if (q(1,i,j) > dry_tolerance) then eta = q(1,i,j) + aux(1,i,j) - + ! Check wave criteria - if (abs(eta - sea_level) > wave_tolerance) then - ! Check to see if we are near shore - if (q(1,i,j) < deep_depth) then - amrflags(i,j) = DOFLAG - cycle x_loop - ! Check if we are allowed to flag in deep water - ! anyway - else if (level < max_level_deep) then - amrflags(i,j) = DOFLAG - cycle x_loop + + ! New method - level specific wave tolerance + do m=1,mxnest + if (m > size(wave_tolerance)) then + mth_level_wave_tolerance = wave_tolerance(size(wave_tolerance)) + else + mth_level_wave_tolerance = wave_tolerance(m) endif - endif + + if (abs(eta - sea_level) > mth_level_wave_tolerance .and. level <= m) then + ! Check to see if we are near shore + Print *, "Level is ", level + Print *, "Wave tolerance is ", mth_level_wave_tolerance + + if (q(1,i,j) < deep_depth) then + amrflags(i,j) = DOFLAG + cycle x_loop + ! Check if we are allowed to flag in deep water + ! anyway + else if (level < max_level_deep) then + amrflags(i,j) = DOFLAG + cycle x_loop + endif + endif + enddo ! Check speed criteria, note that it might be useful to ! also have a per layer criteria since this is not ! gradient based speed = sqrt(q(2,i,j)**2 + q(3,i,j)**2) / q(1,i,j) - do m=1,min(size(speed_tolerance),mxnest) - if (speed > speed_tolerance(m) .and. level <= m) then + do m=1,mxnest + if (m > size(speed_tolerance)) then + mth_level_speed_tolerance = speed_tolerance(size(speed_tolerance)) + else + mth_level_speed_tolerance = speed_tolerance(m) + endif + + if (speed > mth_level_speed_tolerance .and. level <= m) then amrflags(i,j) = DOFLAG cycle x_loop endif diff --git a/src/2d/shallow/refinement_module.f90 b/src/2d/shallow/refinement_module.f90 index ae5a8f298..0a97473a3 100644 --- a/src/2d/shallow/refinement_module.f90 +++ b/src/2d/shallow/refinement_module.f90 @@ -11,7 +11,7 @@ module refinement_module ! ======================================================================== ! Refinement Criteria ! ======================================================================== - real(kind=8) :: wave_tolerance + real(kind=8), allocatable :: wave_tolerance(:) real(kind=8), allocatable :: speed_tolerance(:) real(kind=8) :: deep_depth integer :: max_level_deep @@ -59,7 +59,9 @@ subroutine set_refinement(file_name) endif ! Basic criteria - read(unit,*) wave_tolerance + read(unit,'(a)') line + allocate(wave_tolerance(get_value_count(line))) + read(line,*) wave_tolerance read(unit,'(a)') line allocate(speed_tolerance(get_value_count(line))) read(line,*) speed_tolerance