@@ -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
49835004end 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+
49855225subroutine WRITE_PARALLEL_L ( field , format )
49865226 logical , intent (in ) :: field
49875227 character (len=* ), intent (in ), optional :: format
0 commit comments