@@ -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
49834996end 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+
49855217subroutine WRITE_PARALLEL_L ( field , format )
49865218 logical , intent (in ) :: field
49875219 character (len=* ), intent (in ), optional :: format
0 commit comments