@@ -74,6 +74,7 @@ module FV_StateMod
7474 logical :: fix_mass = .true.
7575 integer :: CASE_ID = 11
7676 integer :: AdvCore_Advection = 0
77+ integer :: FV3_QSPLIT = 0
7778 character (LEN= ESMF_MAXSTR) :: FV3_CONFIG
7879
7980 public FV_Atm
@@ -437,6 +438,8 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
437438 call MAPL_GetResource( MAPL, AdvCore_Advection, label= ' AdvCore_Advection:' , default= AdvCore_Advection, rc= status )
438439 VERIFY_(STATUS)
439440
441+ call MAPL_GetResource( MAPL, FV3_QSPLIT, label= ' FV3_QSPLIT:' , default= FV3_QSPLIT, rc= status )
442+ VERIFY_(STATUS)
440443 call MAPL_GetResource( MAPL, ADJUST_DT, label= ' ADJUST_DT:' , default= ADJUST_DT, rc= status )
441444 VERIFY_(STATUS)
442445 call MAPL_GetResource( MAPL, INT_fix_mass, label= ' fix_mass:' , default= INT_fix_mass, rc= status )
@@ -642,9 +645,10 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
642645 FV_Atm(1 )% flagstruct% rf_cutoff = 0.35e2
643646 ! 6th order divergence default damping options
644647 FV_Atm(1 )% flagstruct% nord = 2
645- FV_Atm(1 )% flagstruct% dddmp = 0.2 ! Smagorinsky damping
646- FV_Atm(1 )% flagstruct% d4_bg = 0.12
647- FV_Atm(1 )% flagstruct% d2_bg = 0.0
648+ FV_Atm(1 )% flagstruct% dddmp = 0.2 ! Smagorinsky damping coef
649+ FV_Atm(1 )% flagstruct% d4_bg_top = 0.12 ! High-order Divg Damping coef
650+ FV_Atm(1 )% flagstruct% d4_bg_bot = 0.12 ! High-order Divg Damping coef
651+ FV_Atm(1 )% flagstruct% d2_bg = 0.0 ! 2nd order Divg Damping coef
648652 FV_Atm(1 )% flagstruct% d_ext = 0.0 ! External damping
649653 ! Local Richardson-number turbulent mixing
650654 FV_Atm(1 )% flagstruct% fv_sg_adj = DT* 4
@@ -720,7 +724,8 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
720724 ! 2nd order damping
721725 FV_Atm(1 )% flagstruct% nord = 0
722726 FV_Atm(1 )% flagstruct% dddmp = 0.2
723- FV_Atm(1 )% flagstruct% d4_bg = 0.0
727+ FV_Atm(1 )% flagstruct% d4_bg_top = 0.0
728+ FV_Atm(1 )% flagstruct% d4_bg_bot = 0.0
724729 FV_Atm(1 )% flagstruct% d2_bg = 0.0075
725730 FV_Atm(1 )% flagstruct% d_ext = 0.02
726731 ! disable vorticity damping
@@ -1942,13 +1947,13 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, PLE0, RC)
19421947 if (run_gtfv3 == 0 ) then
19431948 call cpu_time(start)
19441949#endif
1945-
1950+ if (FV3_QSPLIT == 0 ) FV3_QSPLIT = FV_Atm( 1 ) % flagstruct % q_split
19461951 call fv_dynamics( &
19471952 FV_Atm(1 )% npx, FV_Atm(1 )% npy, FV_Atm(1 )% npz, FV_Atm(1 )% ncnst, FV_Atm(1 )% ng, myDT, &
19481953 FV_Atm(1 )% flagstruct% consv_te, FV_Atm(1 )% flagstruct% fill, &
19491954 kappa, cp, zvir, &
19501955 FV_Atm(1 )% ptop, FV_Atm(1 )% ks, FV_Atm(1 )% flagstruct% ncnst, &
1951- state% ksplit, state% nsplit, FV_Atm( 1 ) % flagstruct % q_split , &
1956+ state% ksplit, state% nsplit, FV3_QSPLIT , &
19521957 FV_Atm(1 )% u, FV_Atm(1 )% v, FV_Atm(1 )% w, FV_Atm(1 )% delz, &
19531958 FV_Atm(1 )% flagstruct% hydrostatic, &
19541959 FV_Atm(1 )% pt, FV_Atm(1 )% delp, FV_Atm(1 )% q, &
@@ -2335,24 +2340,14 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, PLE0, RC)
23352340 if (mpp_pe()==0 ) print * ,' '
23362341 if (mpp_pe()==0 ) print * ,' -------------- FV3 Tracer Debug After DYN --------------'
23372342 allocate ( DEBUG_ARRAY(isc:iec,jsc:jec,npz) )
2338- endif
2339- do n= 1 ,STATE% GRID% NQ
2340- if (state% vars% tracer(n)% is_r4 ) then
2341- where (state% vars% tracer(n)% content_r4 < tiny (0.0 ))
2342- state% vars% tracer(n)% content_r4 = 0.0
2343- end where
2344- if (DEBUG_ADV) DEBUG_ARRAY(:,:,1 :npz) = state% vars% tracer(n)% content_r4
2345- else
2346- where (state% vars% tracer(n)% content < tiny (0.0 ))
2347- state% vars% tracer(n)% content = 0.0
2348- end where
2349- if (DEBUG_ADV) DEBUG_ARRAY(:,:,1 :npz) = state% vars% tracer(n)% content
2350- endif
2351- if (DEBUG_ADV) then
2352- call prt_maxmin(TRIM (state% vars% tracer(n)% tname), DEBUG_ARRAY, isc, iec, jsc, jec, 0 , npz, fac1)
2353- endif
2354- enddo
2355- if (DEBUG_ADV) then
2343+ do n= 1 ,STATE% GRID% NQ
2344+ if (state% vars% tracer(n)% is_r4 ) then
2345+ DEBUG_ARRAY(:,:,1 :npz) = state% vars% tracer(n)% content_r4
2346+ else
2347+ DEBUG_ARRAY(:,:,1 :npz) = state% vars% tracer(n)% content
2348+ endif
2349+ call prt_maxmin(TRIM (state% vars% tracer(n)% tname), DEBUG_ARRAY, isc, iec, jsc, jec, 0 , npz, fac1)
2350+ enddo
23562351 deallocate ( DEBUG_ARRAY )
23572352 if (mpp_pe()==0 ) print * ,' -------------- FV3 Tracer Debug After DYN --------------'
23582353 if (mpp_pe()==0 ) print * ,' '
@@ -4832,7 +4827,8 @@ subroutine echo_fv3_setup()
48324827 call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% nord ,format = ' ("FV3 nord: ",(I3))' )
48334828 call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% dddmp ,format = ' ("FV3 dddmp: ",(F7.5))' )
48344829 call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% d2_bg ,format = ' ("FV3 d2_bg: ",(F7.5))' )
4835- call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% d4_bg ,format = ' ("FV3 d4_bg: ",(F7.5))' )
4830+ call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% d4_bg_top ,format = ' ("FV3 d4_bg_top: ",(F7.5))' )
4831+ call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% d4_bg_bot ,format = ' ("FV3 d4_bg_bot: ",(F7.5))' )
48364832 call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% vtdm4 ,format = ' ("FV3 vtdm4: ",(F7.5))' )
48374833 call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% d2_bg_k1 ,format = ' ("FV3 d2_bg_k1: ",(F7.5))' )
48384834 call WRITE_PARALLEL ( FV_Atm(1 )% flagstruct% d2_bg_k2 ,format = ' ("FV3 d2_bg_k2: ",(F7.5))' )
@@ -4981,19 +4977,21 @@ subroutine adiabatic_init(myDT,DEBUG_ARRAY,fac1)
49814977 real (FVPRC), allocatable :: w_dt(:,:,:)
49824978
49834979 integer :: nord
4984- real (FVPRC):: dddmp, d4_bg , d2_bg, d_ext
4980+ real (FVPRC):: dddmp, d4_bg_top, d4_bg_bot , d2_bg, d_ext
49854981
49864982! Save input damping state
49874983 nord = FV_Atm(1 )% flagstruct% nord
49884984 dddmp = FV_Atm(1 )% flagstruct% dddmp
4989- d4_bg = FV_Atm(1 )% flagstruct% d4_bg
4985+ d4_bg_top = FV_Atm(1 )% flagstruct% d4_bg_top
4986+ d4_bg_bot = FV_Atm(1 )% flagstruct% d4_bg_bot
49904987 d2_bg = FV_Atm(1 )% flagstruct% d2_bg
49914988 d_ext = FV_Atm(1 )% flagstruct% d_ext
49924989
49934990! Use 2nd order damping for spinup
49944991 FV_Atm(1 )% flagstruct% nord = 0
49954992 FV_Atm(1 )% flagstruct% dddmp = 0.2
4996- FV_Atm(1 )% flagstruct% d4_bg = 0.0
4993+ FV_Atm(1 )% flagstruct% d4_bg_top = 0.0
4994+ FV_Atm(1 )% flagstruct% d4_bg_bot = 0.0
49974995 FV_Atm(1 )% flagstruct% d2_bg = 0.0075
49984996 FV_Atm(1 )% flagstruct% d_ext = 0.02
49994997
@@ -5188,7 +5186,8 @@ subroutine adiabatic_init(myDT,DEBUG_ARRAY,fac1)
51885186! Reset input damping parameters
51895187 FV_Atm(1 )% flagstruct% nord = nord
51905188 FV_Atm(1 )% flagstruct% dddmp = dddmp
5191- FV_Atm(1 )% flagstruct% d4_bg = d4_bg
5189+ FV_Atm(1 )% flagstruct% d4_bg_top = d4_bg_top
5190+ FV_Atm(1 )% flagstruct% d4_bg_bot = d4_bg_bot
51925191 FV_Atm(1 )% flagstruct% d2_bg = d2_bg
51935192 FV_Atm(1 )% flagstruct% d_ext = d_ext
51945193
0 commit comments