Skip to content

Commit b846484

Browse files
authored
Merge pull request #263 from GEOS-ESM/feature/wmputman/KM_v11_4_0_All_NWP_Patches
NWP Patches
2 parents 29e0d79 + a0c8e32 commit b846484

File tree

1 file changed

+266
-34
lines changed

1 file changed

+266
-34
lines changed

FV_StateMod.F90

Lines changed: 266 additions & 34 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,54 +541,46 @@ 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
544+
FV_Atm(1)%flagstruct%fv_sg_adj = -1
545+
FV_Atm(1)%flagstruct%n_zfilter = -1
559546
FV_Atm(1)%flagstruct%do_sat_adj = .false. ! only valid when nwat >= 6
560547
FV_Atm(1)%flagstruct%dz_min = 6.0
561548
FV_Atm(1)%flagstruct%RF_fast = .true.
562-
if (FV_Atm(1)%flagstruct%npz == 72) then
563-
FV_Atm(1)%flagstruct%tau = 0.0
549+
FV_Atm(1)%flagstruct%tau = 2.0
550+
FV_Atm(1)%flagstruct%rf_cutoff = 0.35e2
551+
if (FV_Atm(1)%flagstruct%npx*CEILING(FV_Atm(1)%flagstruct%stretch_fac) >= 1440) then
552+
! 6th order default damping options
553+
FV_Atm(1)%flagstruct%nord = 3
554+
FV_Atm(1)%flagstruct%dddmp = 0.2
555+
FV_Atm(1)%flagstruct%d4_bg = 0.12
556+
FV_Atm(1)%flagstruct%d2_bg = 0.0
557+
FV_Atm(1)%flagstruct%d_ext = 0.0
564558
else
565-
FV_Atm(1)%flagstruct%tau = 2.0
559+
! 4th order default damping options
560+
FV_Atm(1)%flagstruct%nord = 2
561+
FV_Atm(1)%flagstruct%dddmp = 0.2
562+
FV_Atm(1)%flagstruct%d4_bg = 0.12
563+
FV_Atm(1)%flagstruct%d2_bg = 0.0
564+
FV_Atm(1)%flagstruct%d_ext = 0.0
566565
endif
567-
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
566+
! Sponge damping and TE conservation
567+
FV_Atm(1)%flagstruct%n_sponge = 0
574568
FV_Atm(1)%flagstruct%d2_bg_k1 = 0.20
575569
FV_Atm(1)%flagstruct%d2_bg_k2 = 0.15
576570
FV_Atm(1)%flagstruct%consv_te = 1.0
577571
else
578572
FV_Atm(1)%flagstruct%fv_sg_adj = DT
579573
FV_Atm(1)%flagstruct%RF_fast = .false.
580-
if (FV_Atm(1)%flagstruct%npz == 72) then
581-
FV_Atm(1)%flagstruct%tau = 0.0
582-
else
583-
FV_Atm(1)%flagstruct%tau = 2.0
584-
endif
574+
FV_Atm(1)%flagstruct%tau = 0.0
585575
FV_Atm(1)%flagstruct%rf_cutoff = 0.35e2
586-
! 6th order default damping options
576+
! 4th order default damping options
587577
FV_Atm(1)%flagstruct%nord = 2
588578
FV_Atm(1)%flagstruct%dddmp = 0.2
589579
FV_Atm(1)%flagstruct%d4_bg = 0.12
590580
FV_Atm(1)%flagstruct%d2_bg = 0.0
591581
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
582+
FV_Atm(1)%flagstruct%d2_bg_k1 = 0.20
583+
FV_Atm(1)%flagstruct%d2_bg_k2 = 0.06
594584
FV_Atm(1)%flagstruct%consv_te = 1.0
595585
endif
596586
! Some default time-splitting options
@@ -1217,6 +1207,9 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
12171207

12181208
real(REAL4), pointer :: PTR3D(:,:,:)
12191209

1210+
real(FVPRC), allocatable :: DEBUG_ARRAY(:,:,:)
1211+
real(FVPRC) :: fac1 = 1.0
1212+
12201213
real(REAL4), pointer :: LONS(:,:), LATS(:,:)
12211214
real(REAL8), pointer :: lonptr(:,:), latptr(:,:)
12221215
real(REAL4), allocatable :: griddiffs(:,:)
@@ -1845,7 +1838,10 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
18451838
if ( .not. FV_Atm(1)%flagstruct%hydrostatic ) then
18461839
if (all(FV_Atm(1)%w(isc:iec,jsc:jec,:) == 0.0)) FV_Atm(1)%flagstruct%Make_NH = .true.
18471840
if ( FV_Atm(1)%flagstruct%Make_NH ) then
1841+
if (FV_Atm(1)%flagstruct%na_init == 0) FV_Atm(1)%flagstruct%na_init = max(1,CEILING(900/myDT))
18481842
if (mpp_pe()==0) print*, 'fv_first_run: FV3 is making Non-Hydrostatic W and DZ'
1843+
if (mpp_pe()==0) print*, ' FV3 will run fwd-bck restart for NH spinup'
1844+
FV_Atm(1)%w = 0.0
18491845
call p_var(FV_Atm(1)%npz, isc, iec, jsc, jec, FV_Atm(1)%ptop, ptop_min, &
18501846
FV_Atm(1)%delp, FV_Atm(1)%delz, FV_Atm(1)%pt, FV_Atm(1)%ps, FV_Atm(1)%pe, FV_Atm(1)%peln, &
18511847
FV_Atm(1)%pk, FV_Atm(1)%pkz, kappa, FV_Atm(1)%q, FV_Atm(1)%ng, &
@@ -1915,7 +1911,8 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
19151911
endif
19161912
endif
19171913

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.)
1914+
massD = g_sum(FV_Atm(1)%domain, mass-tqtot, isc, iec, jsc, jec, state%grid%ng, &
1915+
fv_atm(1)%gridstruct%area_64, 1, reproduce=.true.)
19191916

19201917
! If PSDRY is negative, set to use the incoming drymass.
19211918
! NOTE: THIS WILL NOT TIME REGRESS
@@ -1980,6 +1977,20 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
19801977
! write(6,*) 'Advecting tracers: ', FV_Atm(1)%ncnst, STATE%GRID%NQ
19811978
! endif
19821979

1980+
call MAPL_TimerOn(MAPL,"--NH_ADIABATIC_INIT")
1981+
if ((.not. FV_Atm(1)%flagstruct%hydrostatic) .and. (FV_Atm(1)%flagstruct%na_init>0)) then
1982+
allocate( DEBUG_ARRAY(isc:iec,jsc:jec,NPZ) )
1983+
call nullify_domain ( )
1984+
DEBUG_ARRAY(:,:,1:npz) = FV_Atm(1)%w(isc:iec,jsc:jec,:)
1985+
call prt_maxmin('Before adiabatic_init W: ', DEBUG_ARRAY, isc, iec, jsc, jec, 0, npz, fac1 )
1986+
call adiabatic_init(myDT,DEBUG_ARRAY,fac1)
1987+
DEBUG_ARRAY(:,:,1:npz) = FV_Atm(1)%w(isc:iec,jsc:jec,:)
1988+
call prt_maxmin('After adiabatic_init W: ', DEBUG_ARRAY, isc, iec, jsc, jec, 0, npz, fac1 )
1989+
deallocate( DEBUG_ARRAY )
1990+
FV_Atm(1)%flagstruct%na_init=0
1991+
endif
1992+
call MAPL_TimerOff(MAPL,"--NH_ADIABATIC_INIT")
1993+
19831994
call MAPL_TimerOn(MAPL,"--FV_DYNAMICS")
19841995
if (.not. FV_OFF) then
19851996
call set_domain(FV_Atm(1)%domain) ! needed for diagnostic output done in fv_dynamics
@@ -1996,6 +2007,7 @@ subroutine FV_Run (STATE, EXPORT, CLOCK, GC, RC)
19962007
if (run_gtfv3 == 0) then
19972008
call cpu_time(start)
19982009
#endif
2010+
19992011
call fv_dynamics( &
20002012
FV_Atm(1)%npx, FV_Atm(1)%npy, FV_Atm(1)%npz, FV_Atm(1)%ncnst, FV_Atm(1)%ng, myDT, &
20012013
FV_Atm(1)%flagstruct%consv_te, FV_Atm(1)%flagstruct%fill, FV_Atm(1)%flagstruct%reproduce_sum, &
@@ -4917,6 +4929,7 @@ subroutine echo_fv3_setup()
49174929
call WRITE_PARALLEL ( FV_Atm(1)%flagstruct%nf_omega ,format='("FV3 nf_omega: ",(I7))' )
49184930
call WRITE_PARALLEL ( FV_Atm(1)%flagstruct%fv_sg_adj ,format='("FV3 fv_sg_adj: ",(I7))' )
49194931
! integer :: na_init = 0 ! Perform adiabatic initialization
4932+
call WRITE_PARALLEL ( FV_Atm(1)%flagstruct%na_init ,format='("FV3 na_init: ",(I7))' )
49204933
! real(FVPRC) :: p_ref = 1.E5
49214934
! real(FVPRC) :: dry_mass = 98290.
49224935
! integer :: nt_prog = 0
@@ -4982,6 +4995,225 @@ subroutine echo_fv3_setup()
49824995

49834996
end subroutine echo_fv3_setup
49844997

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

0 commit comments

Comments
 (0)