Skip to content

Commit 6eab468

Browse files
committed
Better isolation of FV3 settings from Jason to HWT-Krok
1 parent b7c4304 commit 6eab468

File tree

1 file changed

+266
-26
lines changed

1 file changed

+266
-26
lines changed

FV_StateMod.F90

Lines changed: 266 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -521,8 +521,6 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
521521
FV_Atm(1)%flagstruct%n_sponge = 18 ! ~0.2mb
522522
FV_Atm(1)%flagstruct%n_zfilter = 50 ! ~10mb
523523
endif
524-
FV_Atm(1)%flagstruct%n_sponge = 0
525-
!!!FV_Atm(1)%flagstruct%n_zfilter = FV_Atm(1)%flagstruct%npz
526524
FV_Atm(1)%flagstruct%remap_option = 0 ! Remap T in LogP
527525
if (FV_Atm(1)%flagstruct%npz == 72) then
528526
FV_Atm(1)%flagstruct%gmao_remap = 0 ! GFDL Schemes
@@ -543,20 +541,9 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
543541
FV_Atm(1)%flagstruct%ke_bg = 0.0
544542
! Rayleigh & Divergence Damping
545543
if (index(FV3_CONFIG,"HWT") > 0) then
546-
FV_Atm(1)%flagstruct%fv_sg_adj = min(3600.0,DT*4.0)
547-
if (FV_Atm(1)%flagstruct%npz >= 71) then
548-
FV_Atm(1)%flagstruct%n_zfilter = 37 ! ~100mb
549-
endif
550-
if (FV_Atm(1)%flagstruct%npz >= 90) then
551-
FV_Atm(1)%flagstruct%n_zfilter = 46 ! ~100mb
552-
endif
553-
if (FV_Atm(1)%flagstruct%npz >= 136) then
554-
FV_Atm(1)%flagstruct%n_zfilter = 60 ! ~100mb
555-
endif
556-
if (FV_Atm(1)%flagstruct%npz >= 180) then
557-
FV_Atm(1)%flagstruct%n_zfilter = 92 ! ~100mb
558-
endif
559-
FV_Atm(1)%flagstruct%do_sat_adj = .false. ! only valid when nwat >= 6
544+
FV_Atm(1)%flagstruct%fv_sg_adj = -1
545+
FV_Atm(1)%flagstruct%n_zfilter = -1
546+
FV_Atm(1)%flagstruct%do_sat_adj = .true. ! only valid when nwat >= 6
560547
FV_Atm(1)%flagstruct%dz_min = 6.0
561548
FV_Atm(1)%flagstruct%RF_fast = .true.
562549
if (FV_Atm(1)%flagstruct%npz == 72) then
@@ -565,12 +552,23 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
565552
FV_Atm(1)%flagstruct%tau = 2.0
566553
endif
567554
FV_Atm(1)%flagstruct%rf_cutoff = 0.35e2
568-
! 6th order default damping options
569-
FV_Atm(1)%flagstruct%nord = 3
570-
FV_Atm(1)%flagstruct%dddmp = 0.1
571-
FV_Atm(1)%flagstruct%d4_bg = 0.12
572-
FV_Atm(1)%flagstruct%d2_bg = 0.0
573-
FV_Atm(1)%flagstruct%d_ext = 0.0
555+
if (FV_Atm(1)%flagstruct%npx*CEILING(FV_Atm(1)%flagstruct%stretch_fac) >= 1440) then
556+
! 6th order default damping options
557+
FV_Atm(1)%flagstruct%nord = 3
558+
FV_Atm(1)%flagstruct%dddmp = 0.2
559+
FV_Atm(1)%flagstruct%d4_bg = 0.12
560+
FV_Atm(1)%flagstruct%d2_bg = 0.0
561+
FV_Atm(1)%flagstruct%d_ext = 0.0
562+
else
563+
! 4th order default damping options
564+
FV_Atm(1)%flagstruct%nord = 2
565+
FV_Atm(1)%flagstruct%dddmp = 0.2
566+
FV_Atm(1)%flagstruct%d4_bg = 0.12
567+
FV_Atm(1)%flagstruct%d2_bg = 0.0
568+
FV_Atm(1)%flagstruct%d_ext = 0.0
569+
endif
570+
! Sponge damping and TE conservation
571+
FV_Atm(1)%flagstruct%n_sponge = 0
574572
FV_Atm(1)%flagstruct%d2_bg_k1 = 0.20
575573
FV_Atm(1)%flagstruct%d2_bg_k2 = 0.15
576574
FV_Atm(1)%flagstruct%consv_te = 1.0
@@ -583,14 +581,14 @@ subroutine FV_Setup(GC,LAYOUT_FILE, RC)
583581
FV_Atm(1)%flagstruct%tau = 2.0
584582
endif
585583
FV_Atm(1)%flagstruct%rf_cutoff = 0.35e2
586-
! 6th order default damping options
584+
! 4th order default damping options
587585
FV_Atm(1)%flagstruct%nord = 2
588586
FV_Atm(1)%flagstruct%dddmp = 0.2
589587
FV_Atm(1)%flagstruct%d4_bg = 0.12
590588
FV_Atm(1)%flagstruct%d2_bg = 0.0
591589
FV_Atm(1)%flagstruct%d_ext = 0.0
592-
FV_Atm(1)%flagstruct%d2_bg_k1 = 0.15
593-
FV_Atm(1)%flagstruct%d2_bg_k2 = 0.02
590+
FV_Atm(1)%flagstruct%d2_bg_k1 = 0.20
591+
FV_Atm(1)%flagstruct%d2_bg_k2 = 0.06
594592
FV_Atm(1)%flagstruct%consv_te = 1.0
595593
endif
596594
! Some default time-splitting options
@@ -1217,6 +1215,9 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
12171215

12181216
real(REAL4), pointer :: PTR3D(:,:,:)
12191217

1218+
real(FVPRC), allocatable :: DEBUG_ARRAY(:,:,:)
1219+
real(FVPRC) :: fac1 = 1.0
1220+
12201221
real(REAL4), pointer :: LONS(:,:), LATS(:,:)
12211222
real(REAL8), pointer :: lonptr(:,:), latptr(:,:)
12221223
real(REAL4), allocatable :: griddiffs(:,:)
@@ -1845,7 +1846,10 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
18451846
if ( .not. FV_Atm(1)%flagstruct%hydrostatic ) then
18461847
if (all(FV_Atm(1)%w(isc:iec,jsc:jec,:) == 0.0)) FV_Atm(1)%flagstruct%Make_NH = .true.
18471848
if ( FV_Atm(1)%flagstruct%Make_NH ) then
1849+
if (FV_Atm(1)%flagstruct%na_init == 0) FV_Atm(1)%flagstruct%na_init = max(1,CEILING(900/myDT))
18481850
if (mpp_pe()==0) print*, 'fv_first_run: FV3 is making Non-Hydrostatic W and DZ'
1851+
if (mpp_pe()==0) print*, ' FV3 will run fwd-bck restart for NH spinup'
1852+
FV_Atm(1)%w = 0.0
18491853
call p_var(FV_Atm(1)%npz, isc, iec, jsc, jec, FV_Atm(1)%ptop, ptop_min, &
18501854
FV_Atm(1)%delp, FV_Atm(1)%delz, FV_Atm(1)%pt, FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%peln, &
18511855
FV_Atm(1)%pk, FV_Atm(1)%pkz, kappa, FV_Atm(1)%q, FV_Atm(1)%ng, &
@@ -1915,7 +1919,8 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
19151919
endif
19161920
endif
19171921

1918-
massD = g_sum(FV_Atm(1)%domain, mass-tqtot, isc, iec, jsc, jec, state%grid%ng, fv_atm(1)%gridstruct%area_64, 1, reproduce = .true.)
1922+
massD = g_sum(FV_Atm(1)%domain, mass-tqtot, isc, iec, jsc, jec, state%grid%ng, &
1923+
fv_atm(1)%gridstruct%area_64, 1, reproduce=.true.)
19191924

19201925
! If PSDRY is negative, set to use the incoming drymass.
19211926
! NOTE: THIS WILL NOT TIME REGRESS
@@ -1980,6 +1985,20 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
19801985
! write(6,*) 'Advecting tracers: ', FV_Atm(1)%ncnst, STATE%GRID%NQ
19811986
! endif
19821987

1988+
call MAPL_TimerOn(MAPL,"--NH_ADIABATIC_INIT")
1989+
if ((.not. FV_Atm(1)%flagstruct%hydrostatic) .and. (FV_Atm(1)%flagstruct%na_init>0)) then
1990+
allocate( DEBUG_ARRAY(isc:iec,jsc:jec,NPZ) )
1991+
call nullify_domain ( )
1992+
DEBUG_ARRAY(:,:,1:npz) = FV_Atm(1)%w(isc:iec,jsc:jec,:)
1993+
call prt_maxmin('Before adiabatic_init W: ', DEBUG_ARRAY, isc, iec, jsc, jec, 0, npz, fac1 )
1994+
call adiabatic_init(myDT,DEBUG_ARRAY,fac1)
1995+
DEBUG_ARRAY(:,:,1:npz) = FV_Atm(1)%w(isc:iec,jsc:jec,:)
1996+
call prt_maxmin('After adiabatic_init W: ', DEBUG_ARRAY, isc, iec, jsc, jec, 0, npz, fac1 )
1997+
deallocate( DEBUG_ARRAY )
1998+
FV_Atm(1)%flagstruct%na_init=0
1999+
endif
2000+
call MAPL_TimerOff(MAPL,"--NH_ADIABATIC_INIT")
2001+
19832002
call MAPL_TimerOn(MAPL,"--FV_DYNAMICS")
19842003
if (.not. FV_OFF) then
19852004
call set_domain(FV_Atm(1)%domain) ! needed for diagnostic output done in fv_dynamics
@@ -1996,6 +2015,7 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
19962015
if (run_gtfv3 == 0) then
19972016
call cpu_time(start)
19982017
#endif
2018+
19992019
call fv_dynamics( &
20002020
FV_Atm(1)%npx, FV_Atm(1)%npy, FV_Atm(1)%npz, FV_Atm(1)%ncnst, FV_Atm(1)%ng, myDT, &
20012021
FV_Atm(1)%flagstruct%consv_te, FV_Atm(1)%flagstruct%fill, FV_Atm(1)%flagstruct%reproduce_sum, &
@@ -4917,6 +4937,7 @@ subroutine echo_fv3_setup()
49174937
call WRITE_PARALLEL ( FV_Atm(1)%flagstruct%nf_omega ,format='("FV3 nf_omega: ",(I7))' )
49184938
call WRITE_PARALLEL ( FV_Atm(1)%flagstruct%fv_sg_adj ,format='("FV3 fv_sg_adj: ",(I7))' )
49194939
! integer :: na_init = 0 ! Perform adiabatic initialization
4940+
call WRITE_PARALLEL ( FV_Atm(1)%flagstruct%na_init ,format='("FV3 na_init: ",(I7))' )
49204941
! real(FVPRC) :: p_ref = 1.E5
49214942
! real(FVPRC) :: dry_mass = 98290.
49224943
! integer :: nt_prog = 0
@@ -4982,6 +5003,225 @@ subroutine echo_fv3_setup()
49825003

49835004
end subroutine echo_fv3_setup
49845005

5006+
subroutine adiabatic_init(myDT,DEBUG_ARRAY,fac1)
5007+
use fv_nwp_nudge_mod, only: do_adiabatic_init
5008+
real(FVPRC), intent(IN ) :: myDT
5009+
real(FVPRC), intent(INOUT) :: DEBUG_ARRAY(:,:,:)
5010+
real(FVPRC), intent(IN ) :: fac1
5011+
real(FVPRC), allocatable, dimension(:,:,:):: u0, v0, t0, dp0
5012+
real(FVPRC), parameter:: wt = 2.
5013+
!***********
5014+
! Haloe Data
5015+
!***********
5016+
real(FVPRC), parameter:: q1_h2o = 2.2E-6
5017+
real(FVPRC), parameter:: q7_h2o = 3.8E-6
5018+
real(FVPRC), parameter:: q100_h2o = 3.8E-6
5019+
real(FVPRC), parameter:: q1000_h2o = 3.1E-6
5020+
real(FVPRC), parameter:: q2000_h2o = 2.8E-6
5021+
real(FVPRC), parameter:: q3000_h2o = 3.0E-6
5022+
real(FVPRC):: xt, p00, q00
5023+
integer:: isc, iec, jsc, jec, npz
5024+
integer:: m, n, i,j,k
5025+
integer :: sphum=1
5026+
5027+
real(FVPRC) :: time_total
5028+
5029+
real(FVPRC), allocatable :: u_dt(:,:,:)
5030+
real(FVPRC), allocatable :: v_dt(:,:,:)
5031+
real(FVPRC), allocatable :: t_dt(:,:,:)
5032+
real(FVPRC), allocatable :: w_dt(:,:,:)
5033+
5034+
xt = 1./(1.+wt)
5035+
5036+
npz = FV_Atm(1)%npz
5037+
5038+
isc = FV_Atm(1)%bd%isc
5039+
iec = FV_Atm(1)%bd%iec
5040+
jsc = FV_Atm(1)%bd%jsc
5041+
jec = FV_Atm(1)%bd%jec
5042+
5043+
allocate ( u_dt(isc:iec,jsc:jec,npz) )
5044+
allocate ( v_dt(isc:iec,jsc:jec,npz) )
5045+
allocate ( t_dt(isc:iec,jsc:jec,npz) )
5046+
allocate ( w_dt(isc:iec,jsc:jec,npz) )
5047+
u_dt(:,:,:) = 0.0
5048+
v_dt(:,:,:) = 0.0
5049+
t_dt(:,:,:) = 0.0
5050+
w_dt(:,:,:) = 0.0
5051+
5052+
do_adiabatic_init = .true.
5053+
5054+
allocate ( u0(isc:iec, jsc:jec+1, npz) )
5055+
allocate ( v0(isc:iec+1,jsc:jec, npz) )
5056+
allocate ( t0(isc:iec,jsc:jec, npz) )
5057+
allocate (dp0(isc:iec,jsc:jec, npz) )
5058+
5059+
!$omp parallel do default (none) &
5060+
!$omp shared (npz, jsc, jec, isc, iec, n, sphum, u0, v0, t0, dp0, FV_Atm, zvir) &
5061+
!$omp private (k, j, i)
5062+
do k=1,npz
5063+
do j=jsc,jec+1
5064+
do i=isc,iec
5065+
u0(i,j,k) = FV_Atm(1)%u(i,j,k)
5066+
enddo
5067+
enddo
5068+
do j=jsc,jec
5069+
do i=isc,iec+1
5070+
v0(i,j,k) = FV_Atm(1)%v(i,j,k)
5071+
enddo
5072+
enddo
5073+
do j=jsc,jec
5074+
do i=isc,iec
5075+
t0(i,j,k) = FV_Atm(1)%pt(i,j,k)*(1.+zvir*FV_Atm(1)%q(i,j,k,sphum)) ! virt T
5076+
dp0(i,j,k) = FV_Atm(1)%delp(i,j,k)
5077+
enddo
5078+
enddo
5079+
enddo
5080+
5081+
do m=1,FV_Atm(1)%flagstruct%na_init
5082+
call WRITE_PARALLEL ( (/m,FV_Atm(1)%flagstruct%na_init/) ,format='("FV3 adiabatic_init: step ",(I7)," of ",(I7))' )
5083+
! Forward call
5084+
call fv_dynamics( &
5085+
FV_Atm(1)%npx, FV_Atm(1)%npy, FV_Atm(1)%npz, FV_Atm(1)%ncnst, FV_Atm(1)%ng, myDT, 0.0, &
5086+
FV_Atm(1)%flagstruct%fill, FV_Atm(1)%flagstruct%reproduce_sum, &
5087+
kappa, cp, zvir, &
5088+
FV_Atm(1)%ptop, FV_Atm(1)%ks, FV_Atm(1)%flagstruct%ncnst, &
5089+
FV_Atm(1)%flagstruct%k_split, FV_Atm(1)%flagstruct%n_split, FV_Atm(1)%flagstruct%q_split, &
5090+
FV_Atm(1)%u, FV_Atm(1)%v, FV_Atm(1)%w, FV_Atm(1)%delz, &
5091+
FV_Atm(1)%flagstruct%hydrostatic, &
5092+
FV_Atm(1)%pt, FV_Atm(1)%delp, FV_Atm(1)%q, &
5093+
FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%pk, FV_Atm(1)%peln, FV_Atm(1)%pkz, &
5094+
FV_Atm(1)%phis, FV_Atm(1)%varflt, FV_Atm(1)%q_con, FV_Atm(1)%omga, &
5095+
FV_Atm(1)%ua, FV_Atm(1)%va, FV_Atm(1)%uc, FV_Atm(1)%vc, &
5096+
FV_Atm(1)%ak, FV_Atm(1)%bk, &
5097+
FV_Atm(1)%mfx, FV_Atm(1)%mfy, FV_Atm(1)%cx, FV_Atm(1)%cy, &
5098+
FV_Atm(1)%ze0, FV_Atm(1)%flagstruct%hybrid_z, FV_Atm(1)%gridstruct, FV_Atm(1)%flagstruct, &
5099+
FV_Atm(1)%neststruct, FV_Atm(1)%idiag, FV_Atm(1)%bd, FV_Atm(1)%parent_grid, FV_Atm(1)%domain, &
5100+
FV_Atm(1)%diss_est, u_dt, v_dt, w_dt, t_dt, &
5101+
time_total)
5102+
! Backward
5103+
call fv_dynamics( &
5104+
FV_Atm(1)%npx, FV_Atm(1)%npy, FV_Atm(1)%npz, FV_Atm(1)%ncnst, FV_Atm(1)%ng, -myDT, 0.0, &
5105+
FV_Atm(1)%flagstruct%fill, FV_Atm(1)%flagstruct%reproduce_sum, &
5106+
kappa, cp, zvir, &
5107+
FV_Atm(1)%ptop, FV_Atm(1)%ks, FV_Atm(1)%flagstruct%ncnst, &
5108+
FV_Atm(1)%flagstruct%k_split, FV_Atm(1)%flagstruct%n_split, FV_Atm(1)%flagstruct%q_split, &
5109+
FV_Atm(1)%u, FV_Atm(1)%v, FV_Atm(1)%w, FV_Atm(1)%delz, &
5110+
FV_Atm(1)%flagstruct%hydrostatic, &
5111+
FV_Atm(1)%pt, FV_Atm(1)%delp, FV_Atm(1)%q, &
5112+
FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%pk, FV_Atm(1)%peln, FV_Atm(1)%pkz, &
5113+
FV_Atm(1)%phis, FV_Atm(1)%varflt, FV_Atm(1)%q_con, FV_Atm(1)%omga, &
5114+
FV_Atm(1)%ua, FV_Atm(1)%va, FV_Atm(1)%uc, FV_Atm(1)%vc, &
5115+
FV_Atm(1)%ak, FV_Atm(1)%bk, &
5116+
FV_Atm(1)%mfx, FV_Atm(1)%mfy, FV_Atm(1)%cx, FV_Atm(1)%cy, &
5117+
FV_Atm(1)%ze0, FV_Atm(1)%flagstruct%hybrid_z, FV_Atm(1)%gridstruct, FV_Atm(1)%flagstruct, &
5118+
FV_Atm(1)%neststruct, FV_Atm(1)%idiag, FV_Atm(1)%bd, FV_Atm(1)%parent_grid, FV_Atm(1)%domain, &
5119+
FV_Atm(1)%diss_est, u_dt, v_dt, w_dt, t_dt, &
5120+
time_total)
5121+
!Nudging back to IC
5122+
!$omp parallel do default (none) &
5123+
!$omp shared (npz, jsc, jec, isc, iec, n, sphum, FV_Atm, u0, v0, t0, dp0, xt, zvir) &
5124+
!$omp private (i, j, k, p00, q00)
5125+
do k=1,npz
5126+
do j=jsc,jec+1
5127+
do i=isc,iec
5128+
FV_Atm(1)%u(i,j,k) = xt*(FV_Atm(1)%u(i,j,k) + wt*u0(i,j,k))
5129+
enddo
5130+
enddo
5131+
do j=jsc,jec
5132+
do i=isc,iec+1
5133+
FV_Atm(1)%v(i,j,k) = xt*(FV_Atm(1)%v(i,j,k) + wt*v0(i,j,k))
5134+
enddo
5135+
enddo
5136+
do j=jsc,jec
5137+
do i=isc,iec
5138+
FV_Atm(1)%pt(i,j,k) = xt*(FV_Atm(1)%pt(i,j,k) + wt*t0(i,j,k)/(1.+zvir*FV_Atm(1)%q(i,j,k,sphum)))
5139+
FV_Atm(1)%delp(i,j,k) = xt*(FV_Atm(1)%delp(i,j,k) + wt*dp0(i,j,k))
5140+
enddo
5141+
enddo
5142+
enddo
5143+
5144+
! Backward
5145+
call fv_dynamics( &
5146+
FV_Atm(1)%npx, FV_Atm(1)%npy, FV_Atm(1)%npz, FV_Atm(1)%ncnst, FV_Atm(1)%ng, -myDT, 0.0, &
5147+
FV_Atm(1)%flagstruct%fill, FV_Atm(1)%flagstruct%reproduce_sum, &
5148+
kappa, cp, zvir, &
5149+
FV_Atm(1)%ptop, FV_Atm(1)%ks, FV_Atm(1)%flagstruct%ncnst, &
5150+
FV_Atm(1)%flagstruct%k_split, FV_Atm(1)%flagstruct%n_split, FV_Atm(1)%flagstruct%q_split, &
5151+
FV_Atm(1)%u, FV_Atm(1)%v, FV_Atm(1)%w, FV_Atm(1)%delz, &
5152+
FV_Atm(1)%flagstruct%hydrostatic, &
5153+
FV_Atm(1)%pt, FV_Atm(1)%delp, FV_Atm(1)%q, &
5154+
FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%pk, FV_Atm(1)%peln, FV_Atm(1)%pkz, &
5155+
FV_Atm(1)%phis, FV_Atm(1)%varflt, FV_Atm(1)%q_con, FV_Atm(1)%omga, &
5156+
FV_Atm(1)%ua, FV_Atm(1)%va, FV_Atm(1)%uc, FV_Atm(1)%vc, &
5157+
FV_Atm(1)%ak, FV_Atm(1)%bk, &
5158+
FV_Atm(1)%mfx, FV_Atm(1)%mfy, FV_Atm(1)%cx, FV_Atm(1)%cy, &
5159+
FV_Atm(1)%ze0, FV_Atm(1)%flagstruct%hybrid_z, FV_Atm(1)%gridstruct, FV_Atm(1)%flagstruct, &
5160+
FV_Atm(1)%neststruct, FV_Atm(1)%idiag, FV_Atm(1)%bd, FV_Atm(1)%parent_grid, FV_Atm(1)%domain, &
5161+
FV_Atm(1)%diss_est, u_dt, v_dt, w_dt, t_dt, &
5162+
time_total)
5163+
! Forward call
5164+
call fv_dynamics( &
5165+
FV_Atm(1)%npx, FV_Atm(1)%npy, FV_Atm(1)%npz, FV_Atm(1)%ncnst, FV_Atm(1)%ng, myDT, 0.0, &
5166+
FV_Atm(1)%flagstruct%fill, FV_Atm(1)%flagstruct%reproduce_sum, &
5167+
kappa, cp, zvir, &
5168+
FV_Atm(1)%ptop, FV_Atm(1)%ks, FV_Atm(1)%flagstruct%ncnst, &
5169+
FV_Atm(1)%flagstruct%k_split, FV_Atm(1)%flagstruct%n_split, FV_Atm(1)%flagstruct%q_split, &
5170+
FV_Atm(1)%u, FV_Atm(1)%v, FV_Atm(1)%w, FV_Atm(1)%delz, &
5171+
FV_Atm(1)%flagstruct%hydrostatic, &
5172+
FV_Atm(1)%pt, FV_Atm(1)%delp, FV_Atm(1)%q, &
5173+
FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%pk, FV_Atm(1)%peln, FV_Atm(1)%pkz, &
5174+
FV_Atm(1)%phis, FV_Atm(1)%varflt, FV_Atm(1)%q_con, FV_Atm(1)%omga, &
5175+
FV_Atm(1)%ua, FV_Atm(1)%va, FV_Atm(1)%uc, FV_Atm(1)%vc, &
5176+
FV_Atm(1)%ak, FV_Atm(1)%bk, &
5177+
FV_Atm(1)%mfx, FV_Atm(1)%mfy, FV_Atm(1)%cx, FV_Atm(1)%cy, &
5178+
FV_Atm(1)%ze0, FV_Atm(1)%flagstruct%hybrid_z, FV_Atm(1)%gridstruct, FV_Atm(1)%flagstruct, &
5179+
FV_Atm(1)%neststruct, FV_Atm(1)%idiag, FV_Atm(1)%bd, FV_Atm(1)%parent_grid, FV_Atm(1)%domain, &
5180+
FV_Atm(1)%diss_est, u_dt, v_dt, w_dt, t_dt, &
5181+
time_total)
5182+
! Nudging back to IC
5183+
!$omp parallel do default (none) &
5184+
!$omp shared (npz, jsc, jec, isc, iec, n, sphum, FV_Atm, u0, v0, t0, dp0, xt, zvir) &
5185+
!$omp private (i, j, k)
5186+
do k=1,npz
5187+
do j=jsc,jec+1
5188+
do i=isc,iec
5189+
FV_Atm(1)%u(i,j,k) = xt*(FV_Atm(1)%u(i,j,k) + wt*u0(i,j,k))
5190+
enddo
5191+
enddo
5192+
do j=jsc,jec
5193+
do i=isc,iec+1
5194+
FV_Atm(1)%v(i,j,k) = xt*(FV_Atm(1)%v(i,j,k) + wt*v0(i,j,k))
5195+
enddo
5196+
enddo
5197+
do j=jsc,jec
5198+
do i=isc,iec
5199+
FV_Atm(1)%pt(i,j,k) = xt*(FV_Atm(1)%pt(i,j,k) + wt*t0(i,j,k)/(1.+zvir*FV_Atm(1)%q(i,j,k,sphum)))
5200+
FV_Atm(1)%delp(i,j,k) = xt*(FV_Atm(1)%delp(i,j,k) + wt*dp0(i,j,k))
5201+
enddo
5202+
enddo
5203+
enddo
5204+
5205+
DEBUG_ARRAY(:,:,1:npz) = FV_Atm(1)%w(isc:iec,jsc:jec,:)
5206+
call prt_maxmin('Before adiabatic_init W: ', DEBUG_ARRAY, isc, iec, jsc, jec, 0, npz, fac1 )
5207+
5208+
enddo
5209+
5210+
deallocate ( u0 )
5211+
deallocate ( v0 )
5212+
deallocate ( t0 )
5213+
deallocate (dp0 )
5214+
5215+
deallocate ( u_dt )
5216+
deallocate ( v_dt )
5217+
deallocate ( t_dt )
5218+
deallocate ( w_dt )
5219+
5220+
do_adiabatic_init = .false.
5221+
5222+
end subroutine adiabatic_init
5223+
5224+
49855225
subroutine WRITE_PARALLEL_L ( field, format )
49865226
logical, intent(in) :: field
49875227
character(len=*), intent(in ), optional :: format

0 commit comments

Comments
 (0)