1 !WRF:MEDIATION_LAYER:SOLVER
6 MODULE module_first_rk_step_part1
10 SUBROUTINE first_rk_step_part1 ( grid , config_flags &
11 , moist , moist_tend &
13 , scalar , scalar_tend &
15 , ru_tendf, rv_tendf &
17 , ph_tendf, mu_tendf &
19 , adapt_step_flag , curr_secs &
20 , psim , psih , wspd , gz1oz0 , br , chklowq &
21 , cu_act_flag , hol , th_phy &
22 , pi_phy , p_phy , t_phy , u_phy , v_phy &
23 , dz8w , p8w , t8w , rho_phy , rho &
25 , ids, ide, jds, jde, kds, kde &
26 , ims, ime, jms, jme, kms, kme &
27 , ips, ipe, jps, jpe, kps, kpe &
30 USE module_state_description
31 USE module_model_constants
32 USE module_domain, ONLY : domain, get_ijk_from_subgrid
33 USE module_configure, ONLY : grid_config_rec_type, model_config_rec
34 USE module_radiation_driver, ONLY : pre_radiation_driver, radiation_driver
35 USE module_surface_driver, ONLY : surface_driver
36 USE module_cumulus_driver, ONLY : cumulus_driver
37 USE module_pbl_driver, ONLY : pbl_driver
38 USE module_fr_sfire_driver
39 USE module_fddagd_driver, ONLY : fddagd_driver
40 USE module_em, ONLY : init_zero_tendency
41 USE module_big_step_utilities_em, ONLY : phy_prep
44 USE module_fr_sfire_util
47 TYPE ( domain ), INTENT(INOUT) :: grid
48 TYPE ( grid_config_rec_type ), INTENT(IN) :: config_flags
50 INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
51 ims, ime, jms, jme, kms, kme, &
52 ips, ipe, jps, jpe, kps, kpe
54 LOGICAL ,INTENT(IN) :: adapt_step_flag
55 REAL, INTENT(IN) :: curr_secs
56 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: moist
57 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: moist_tend
58 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: chem
59 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: chem_tend
60 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: scalar
61 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_moist),INTENT(INOUT) :: scalar_tend
62 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme,num_fdda3d),INTENT(INOUT) :: fdda3d
63 REAL ,DIMENSION(ims:ime,1:1,jms:jme,num_fdda2d),INTENT(INOUT) :: fdda2d
64 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: psim
65 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: psih
66 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: wspd
67 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: gz1oz0
68 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: br
69 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: chklowq
70 LOGICAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: cu_act_flag
71 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: hol
73 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: th_phy
74 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: pi_phy
75 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p_phy
76 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_phy
77 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: u_phy
78 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: v_phy
79 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: dz8w
80 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: p8w
81 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t8w
82 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho_phy
83 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rho
84 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: z_at_w
85 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: mu_3d
87 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ru_tendf
88 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rv_tendf
89 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: rw_tendf
90 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: ph_tendf
91 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: t_tendf
92 REAL ,DIMENSION(ims:ime,kms:kme,jms:jme), INTENT(INOUT) :: tke_tend
94 REAL ,DIMENSION(ims:ime,jms:jme), INTENT(INOUT) :: mu_tendf
96 INTEGER , INTENT(IN) :: k_start, k_end
100 REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
101 INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask
103 INTEGER num_roof_layers
104 INTEGER num_wall_layers
105 INTEGER num_road_layers
109 INTEGER :: sids , side , sjds , sjde , skds , skde , &
110 sims , sime , sjms , sjme , skms , skme , &
111 sips , sipe , sjps , sjpe , skps , skpe
113 ! fire related variables
114 INTEGER:: fire_num_ignitions,fire_ignition_longlat
115 integer, parameter::fire_max_ignitions=5
116 REAL, DIMENSION(fire_max_ignitions):: fire_ignition_start_x, &
117 fire_ignition_start_y, &
118 fire_ignition_end_x, &
119 fire_ignition_end_y, &
120 fire_ignition_time, &
124 CALL get_ijk_from_subgrid ( grid , &
125 sids, side, sjds, sjde, skds, skde, &
126 sims, sime, sjms, sjme, skms, skme, &
127 sips, sipe, sjps, sjpe, skps, skpe )
130 ! initialize all tendencies to zero in order to update physics
131 ! tendencies first (separate from dry dynamics).
135 BENCH_START(init_zero_tend_tim)
139 DO ij = 1 , grid%num_tiles
141 CALL wrf_debug ( 200 , ' call init_zero_tendency' )
142 CALL init_zero_tendency ( ru_tendf, rv_tendf, rw_tendf, &
143 ph_tendf, t_tendf, tke_tend, &
145 moist_tend,chem_tend,scalar_tend, &
146 num_moist,num_chem,num_scalar, &
148 ids, ide, jds, jde, kds, kde, &
149 ims, ime, jms, jme, kms, kme, &
150 grid%i_start(ij), grid%i_end(ij), &
151 grid%j_start(ij), grid%j_end(ij), &
155 !$OMP END PARALLEL DO
156 BENCH_END(init_zero_tend_tim)
159 # include "HALO_EM_PHYS_A.inc"
164 DO ij = 1 , grid%num_tiles
166 CALL wrf_debug ( 200 , ' call phy_prep' )
167 CALL phy_prep ( config_flags, &
168 grid%mut, grid%muu, grid%muv, grid%u_2, &
169 grid%v_2, grid%p, grid%pb, grid%alt, &
170 grid%ph_2, grid%phb, grid%t_2, grid%tsk, moist, num_moist, &
172 th_phy, p_phy, pi_phy, u_phy, v_phy, &
173 p8w, t_phy, t8w, grid%z, z_at_w, &
174 dz8w, grid%fnm, grid%fnp, &
176 grid%rthblten, grid%rublten, grid%rvblten, &
177 grid%rqvblten, grid%rqcblten, grid%rqiblten, &
178 grid%rthcuten, grid%rqvcuten, grid%rqccuten, &
179 grid%rqrcuten, grid%rqicuten, grid%rqscuten, &
180 grid%rthften, grid%rqvften, &
181 grid%RUNDGDTEN, grid%RVNDGDTEN, grid%RTHNDGDTEN, &
182 grid%RQVNDGDTEN, grid%RMUNDGDTEN, &
183 ids, ide, jds, jde, kds, kde, &
184 ims, ime, jms, jme, kms, kme, &
185 grid%i_start(ij), grid%i_end(ij), &
186 grid%j_start(ij), grid%j_end(ij), &
189 !$OMP END PARALLEL DO
191 BENCH_END(phy_prep_tim)
195 ! this driver is only needed to handle non-local shadowing effects
196 CALL pre_radiation_driver ( grid, config_flags &
197 & ,itimestep=grid%itimestep, ra_call_offset=grid%ra_call_offset &
198 & ,XLAT=grid%xlat, XLONG=grid%xlong, GMT=grid%gmt &
199 & ,julian=grid%julian, xtime=grid%xtime, RADT=grid%radt &
200 & ,STEPRA=grid%stepra &
201 & ,ht=grid%ht,dx=grid%dx,dy=grid%dy,sina=grid%sina,cosa=grid%cosa &
202 & ,shadowmask=shadowmask,slope_rad=config_flags%slope_rad &
203 & ,topo_shading=config_flags%topo_shading &
204 & ,shadlen=config_flags%shadlen,ht_shad=grid%ht_shad,ht_loc=ht_loc &
205 & ,ht_shad_bxs=grid%ht_shad_bxs, ht_shad_bxe=grid%ht_shad_bxe &
206 & ,ht_shad_bys=grid%ht_shad_bys, ht_shad_bye=grid%ht_shad_bye &
207 & ,nested=config_flags%nested, min_ptchsz=grid%min_ptchsz &
208 & ,spec_bdy_width=config_flags%spec_bdy_width &
210 & ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
211 & ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
212 & ,IPS=ips,IPE=ipe, JPS=jps,JPE=jpe, KPS=kps,KPE=kpe &
213 & ,i_start=grid%i_start,i_end=min(grid%i_end, ide-1) &
214 & ,j_start=grid%j_start,j_end=min(grid%j_end, jde-1) &
215 & ,kts=k_start, kte=min(k_end,kde-1) &
216 & ,num_tiles=grid%num_tiles )
218 CALL wrf_debug ( 200 , ' call radiation_driver' )
219 BENCH_START(rad_driver_tim)
221 CALL radiation_driver( &
222 & ACFRCV=grid%acfrcv ,ACFRST=grid%acfrst ,ALBEDO=grid%albedo &
223 & ,CFRACH=grid%cfrach ,CFRACL=grid%cfracl ,CFRACM=grid%cfracm &
224 & ,CUPPT=grid%cuppt ,CZMEAN=grid%czmean ,DT=grid%dt &
225 & ,DZ8W=dz8w ,EMISS=grid%emiss ,GLW=grid%glw &
226 & ,GMT=grid%gmt ,GSW=grid%gsw ,HBOT=grid%hbot &
227 & ,HTOP=grid%htop ,HBOTR=grid%hbotr ,HTOPR=grid%htopr &
228 & ,ICLOUD=config_flags%icloud &
229 & ,ITIMESTEP=grid%itimestep,JULDAY=grid%julday , JULIAN=grid%julian &
230 & ,JULYR=grid%julyr ,LW_PHYSICS=config_flags%ra_lw_physics &
231 & ,NCFRCV=grid%ncfrcv ,NCFRST=grid%ncfrst ,NPHS=1 &
232 & ,P8W=p8w ,P=p_phy ,PI=pi_phy &
233 & ,RADT=grid%radt ,RA_CALL_OFFSET=grid%ra_call_offset &
234 & ,RHO=rho ,RLWTOA=grid%rlwtoa &
235 & ,RSWTOA=grid%rswtoa ,RTHRATEN=grid%rthraten &
236 & ,RTHRATENLW=grid%rthratenlw ,RTHRATENSW=grid%rthratensw &
237 & ,SNOW=grid%snow ,STEPRA=grid%stepra ,SWDOWN=grid%swdown &
238 & ,SWDOWNC=grid%swdownc ,SW_PHYSICS=config_flags%ra_sw_physics &
239 & ,T8W=t8w ,T=t_phy ,TAUCLDC=grid%taucldc &
240 & ,TAUCLDI=grid%taucldi ,TSK=grid%tsk ,VEGFRA=grid%vegfra &
241 & ,WARM_RAIN=grid%warm_rain ,XICE=grid%xice ,XLAND=grid%xland &
242 & ,XLAT=grid%xlat ,XLONG=grid%xlong &
244 & ,DECLIN_URB=grid%declin_urb ,COSZ_URB2D=grid%cosz_urb2d &
245 & ,OMG_URB2D=grid%omg_urb2d &
248 & ,LEVSIZ=grid%levsiz, N_OZMIXM=num_ozmixm &
249 & ,N_AEROSOLC=num_aerosolc &
250 & ,PAERLEV=grid%paerlev &
251 & ,CAM_ABS_DIM1=grid%cam_abs_dim1, CAM_ABS_DIM2=grid%cam_abs_dim2 &
252 & ,CAM_ABS_FREQ_S=grid%cam_abs_freq_s &
253 & ,XTIME=grid%xtime &
254 ,CURR_SECS=curr_secs, ADAPT_STEP_FLAG=adapt_step_flag &
256 & ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
257 & ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
258 & ,i_start=grid%i_start,i_end=min(grid%i_end, ide-1) &
259 & ,j_start=grid%j_start,j_end=min(grid%j_end, jde-1) &
260 & ,kts=k_start, kte=min(k_end,kde-1) &
261 & ,num_tiles=grid%num_tiles &
263 & , CLDFRA=grid%cldfra &
265 & , F_ICE_PHY=grid%f_ice_phy,F_RAIN_PHY=grid%f_rain_phy &
266 & , QV=moist(ims,kms,jms,P_QV), F_QV=F_QV &
267 & , QC=moist(ims,kms,jms,P_QC), F_QC=F_QC &
268 & , QR=moist(ims,kms,jms,P_QR), F_QR=F_QR &
269 & , QI=moist(ims,kms,jms,P_QI), F_QI=F_QI &
270 & , QS=moist(ims,kms,jms,P_QS), F_QS=F_QS &
271 & , QG=moist(ims,kms,jms,P_QG), F_QG=F_QG &
272 & , QNDROP=scalar(ims,kms,jms,P_QNDROP), F_QNDROP=F_QNDROP &
274 & ,ACSWUPT=acswupt ,ACSWUPTC=acswuptc &
275 & ,ACSWDNT=acswdnt ,ACSWDNTC=acswdntc &
276 & ,ACSWUPB=acswupb ,ACSWUPBC=acswupbc &
277 & ,ACSWDNB=acswdnb ,ACSWDNBC=acswdnbc &
278 & ,ACLWUPT=aclwupt ,ACLWUPTC=aclwuptc &
279 & ,ACLWDNT=aclwdnt ,ACLWDNTC=aclwdntc &
280 & ,ACLWUPB=aclwupb ,ACLWUPBC=aclwupbc &
281 & ,ACLWDNB=aclwdnb ,ACLWDNBC=aclwdnbc &
282 & ,SWUPT=swupt ,SWUPTC=swuptc &
283 & ,SWDNT=swdnt ,SWDNTC=swdntc &
284 & ,SWUPB=swupb ,SWUPBC=swupbc &
285 & ,SWDNB=swdnb ,SWDNBC=swdnbc &
286 & ,LWUPT=lwupt ,LWUPTC=lwuptc &
287 & ,LWDNT=lwdnt ,LWDNTC=lwdntc &
288 & ,LWUPB=lwupb ,LWUPBC=lwupbc &
289 & ,LWDNB=lwdnb ,LWDNBC=lwdnbc &
294 & ,OZMIXM=grid%ozmixm, PIN=grid%pin &
295 & ,M_PS_1=grid%m_ps_1, M_PS_2=grid%m_ps_2, AEROSOLC_1=grid%aerosolc_1 &
296 & ,AEROSOLC_2=grid%aerosolc_2, M_HYBI0=grid%m_hybi &
297 & ,ABSTOT=grid%abstot, ABSNXT=grid%absnxt, EMSTOT=grid%emstot &
299 & ,CU_RAD_FEEDBACK=config_flags%cu_rad_feedback &
300 & ,AER_RA_FEEDBACK=config_flags%aer_ra_feedback &
301 & ,QC_ADJUST=grid%GD_CLOUD_B , QI_ADJUST=grid%GD_CLOUD2_B &
302 & ,PM2_5_DRY=grid%pm2_5_dry, PM2_5_WATER=grid%pm2_5_water &
303 & ,PM2_5_DRY_EC=grid%pm2_5_dry_ec &
304 & ,TAUAER300=grid%tauaer1, TAUAER400=grid%tauaer2 & ! jcb
305 & ,TAUAER600=grid%tauaer3, TAUAER999=grid%tauaer4 & ! jcb
306 & ,GAER300=grid%gaer1, GAER400=grid%gaer2, GAER600=grid%gaer3, GAER999=grid%gaer4 & ! jcb
307 & ,WAER300=grid%waer1, WAER400=grid%waer2, WAER600=grid%waer3, WAER999=grid%waer4 & ! jcb
309 & ,slope_rad=config_flags%slope_rad,topo_shading=config_flags%topo_shading &
310 & ,shadowmask=shadowmask,ht=grid%ht,dx=grid%dx,dy=grid%dy,sina=grid%sina,cosa=grid%cosa )
312 BENCH_END(rad_driver_tim)
314 !********* Surface driver
317 BENCH_START(surf_driver_tim)
319 !-----------------------------------------------------------------
320 ! urban related variable are added to arguments of surface_driver
321 !-----------------------------------------------------------------
322 num_roof_layers = grid%num_soil_layers !urban
323 num_wall_layers = grid%num_soil_layers !urban
324 num_road_layers = grid%num_soil_layers !urban
325 CALL nl_get_iswater(grid%id, iswater)
327 CALL wrf_debug ( 200 , ' call surface_driver' )
329 CALL surface_driver( &
330 & ACSNOM=grid%acsnom ,ACSNOW=grid%acsnow ,AKHS=grid%akhs &
331 & ,AKMS=grid%akms ,ALBBCK=grid%albbck ,ALBEDO=grid%albedo &
332 & ,EMBCK=grid%embck &
333 & ,BR=br ,CANWAT=grid%canwat ,CHKLOWQ=chklowq &
334 & ,CT=grid%ct ,DT=grid%dt ,DX=grid%dx &
335 & ,DZ8W=dz8w ,DZS=grid%dzs ,FLHC=grid%flhc &
336 & ,FLQC=grid%flqc ,GLW=grid%glw ,GRDFLX=grid%grdflx &
337 & ,GSW=grid%gsw ,SWDOWN=grid%swdown ,GZ1OZ0=gz1oz0 ,HFX=grid%hfx &
338 & ,HT=grid%ht ,IFSNOW=config_flags%ifsnow ,ISFFLX=config_flags%isfflx &
339 & ,ISLTYP=grid%isltyp ,ITIMESTEP=grid%itimestep &
340 & ,IVGTYP=grid%ivgtyp ,LH=grid%lh ,LOWLYR=grid%lowlyr &
341 & ,MAVAIL=grid%mavail ,NUM_SOIL_LAYERS=config_flags%num_soil_layers &
342 & ,P8W=p8w ,PBLH=grid%pblh ,PI_PHY=pi_phy &
343 & ,PSFC=grid%psfc ,PSHLTR=grid%pshltr ,PSIH=psih &
344 & ,BLDT=grid%bldt ,CURR_SECS=curr_secs, ADAPT_STEP_FLAG=adapt_step_flag &
345 & ,PSIM=psim ,P_PHY=p_phy ,Q10=grid%q10 &
346 & ,Q2=grid%q2 ,QFX=grid%qfx ,QSFC=grid%qsfc &
347 & ,QSHLTR=grid%qshltr ,QZ0=grid%qz0 ,RAINCV=grid%raincv &
348 & ,RA_LW_PHYSICS=config_flags%ra_lw_physics ,RHO=rho &
349 & ,RMOL=grid%rmol ,SFCEVP=grid%sfcevp ,SFCEXC=grid%sfcexc &
350 & ,SFCRUNOFF=grid%sfcrunoff &
351 & ,SF_SFCLAY_PHYSICS=config_flags%sf_sfclay_physics &
352 & ,SF_SURFACE_PHYSICS=config_flags%sf_surface_physics ,SH2O=grid%sh2o &
353 & ,SHDMAX=grid%shdmax ,SHDMIN=grid%shdmin ,SMOIS=grid%smois &
354 & ,SMSTAV=grid%smstav ,SMSTOT=grid%smstot ,SNOALB=grid%snoalb &
355 & ,SNOW=grid%snow ,SNOWC=grid%snowc ,SNOWH=grid%snowh &
356 & ,SST=grid%sst ,SST_UPDATE=grid%sst_update &
357 & ,STEPBL=grid%stepbl ,TH10=grid%th10 ,TH2=grid%th2 &
358 & ,THZ0=grid%thz0 ,TH_PHY=th_phy ,TKE_MYJ=grid%tke_myj &
359 & ,TMN=grid%tmn ,TSHLTR=grid%tshltr ,TSK=grid%tsk &
360 & ,TSLB=grid%tslb ,T_PHY=t_phy ,U10=grid%u10 &
361 & ,URATX=grid%uratx ,VRATX=grid%vratx ,TRATX=grid%tratx &
362 & ,UDRUNOFF=grid%udrunoff ,UST=grid%ust ,UZ0=grid%uz0 &
363 & ,U_FRAME=grid%u_frame ,U_PHY=u_phy ,V10=grid%v10 &
364 & ,VEGFRA=grid%vegfra ,VZ0=grid%vz0 ,V_FRAME=grid%v_frame &
365 & ,V_PHY=v_phy ,WARM_RAIN=grid%warm_rain &
366 & ,WSPD=wspd ,XICE=grid%xice ,XLAND=grid%xland &
367 & ,Z0=grid%z0 ,Z=grid%z ,ZNT=grid%znt &
368 & ,ZS=grid%zs ,XICEM=grid%xicem ,ISICE=grid%landuse_isice&
369 & ,USTM=grid%ustm ,CK=grid%ck ,CKA=grid%cka &
370 & ,CD=grid%cd ,CDA=grid%cda &
371 & ,ISFTCFLX=config_flags%isftcflx &
372 & ,OMLCALL=config_flags%omlcall ,OML_HML0=config_flags%oml_hml0 ,OML_GAMMA=config_flags%oml_gamma &
373 & ,TML=grid%tml, T0ML=grid%t0ml, HML=grid%hml, H0ML=grid%h0ml, HUML=grid%huml, HVML=grid%hvml, F=grid%f &
375 & ,DECLIN_URB=grid%declin_urb ,COSZ_URB2D=grid%cosz_urb2d & !I urban
376 & ,OMG_URB2D=grid%omg_urb2d ,xlat_urb2d=grid%XLAT & !I urban
377 & ,NUM_ROOF_LAYERS=num_roof_layers & !I urban
378 & ,NUM_WALL_LAYERS=num_wall_layers & !I urban
379 & ,NUM_ROAD_LAYERS=num_road_layers &
380 & ,DZR=grid%dzr ,DZB=grid%dzb ,DZG=grid%dzg & !I urban
381 & ,TR_URB2D=grid%tr_urb2d ,TB_URB2D=grid%tb_urb2d &
382 & ,TG_URB2D=grid%tg_urb2d & !H urban
383 & ,TC_URB2D=grid%tc_urb2d ,QC_URB2D=grid%qc_urb2d & !H urban
384 & ,UC_URB2D=grid%uc_urb2d & !H urban
385 & ,XXXR_URB2D=grid%xxxr_urb2d &
386 & ,XXXB_URB2D=grid%xxxb_urb2d & !H urban
387 & ,XXXG_URB2D=grid%xxxg_urb2d &
388 & ,XXXC_URB2D=grid%xxxc_urb2d & !H urban
389 & ,TRL_URB3D=grid%trl_urb3d ,TBL_URB3D=grid%tbl_urb3d & !H urban
390 & ,TGL_URB3D=grid%tgl_urb3d & !H urban
391 & ,SH_URB2D=grid%sh_urb2d ,LH_URB2D=grid%lh_urb2d &
392 & ,G_URB2D=grid%g_urb2d & !H urban
393 & ,RN_URB2D=grid%rn_urb2d , TS_URB2D=grid%ts_urb2d & !H urban
394 & ,FRC_URB2D=grid%frc_urb2d & !H urban
395 & ,UTYPE_URB2D=grid%utype_urb2d & !H urban
396 & ,ucmcall=grid%ucmcall & !H urban
398 & ,LANDUSEF=grid%landusef, SOILCTOP=grid%soilctop & ! P-X LSM
399 & ,SOILCBOT=grid%soilcbot & ! P-X LSM
400 & ,RA=grid%ra, RS=grid%rs, LAI=grid%lai & ! P-X LSM
401 & ,NLCAT=grid%num_land_cat, NSCAT=grid%num_soil_cat & ! P-X LSM
402 & ,VEGF_PX=grid%vegf_px, SNOWNCV=grid%snowncv & ! P-X LSM
403 & ,ANAL_INTERVAL=config_flags%interval_seconds & ! P-X LSM
404 & ,PXLSM_SMOIS_INIT=config_flags%pxlsm_smois_init & ! P-X LSM
405 & ,PXLSM_SOIL_NUDGE=config_flags%grid_fdda & ! P-X LSM
406 ! Optional PX LSM nudging
407 & ,t2_ndg_old=fdda2d(ims,1,jms,P_t2_ndg_old) &
408 & ,q2_ndg_old=fdda2d(ims,1,jms,P_q2_ndg_old) &
409 & ,t2_ndg_new=fdda2d(ims,1,jms,P_t2_ndg_new) &
410 & ,q2_ndg_new=fdda2d(ims,1,jms,P_q2_ndg_new) &
411 & ,sn_ndg_old=fdda2d(ims,1,jms,P_sn_ndg_old) &
412 & ,sn_ndg_new=fdda2d(ims,1,jms,P_sn_ndg_new) &
414 & ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
415 & ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
416 & , I_START=grid%i_start,I_END=min(grid%i_end, ide-1) &
417 & , J_START=grid%j_start,J_END=min(grid%j_end, jde-1) &
418 & , KTS=k_start, KTE=min(k_end,kde-1) &
419 & , NUM_TILES=grid%num_tiles &
421 & ,QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV &
422 & ,QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC &
423 & ,QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR &
424 & ,QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI &
425 & ,QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS &
426 & ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG &
427 & ,CAPG=grid%capg, EMISS=grid%emiss, HOL=hol,MOL=grid%mol &
428 & ,T2OBS=grid%t2obs, Q2OBS=grid%q2obs &
429 & ,RAINBL=grid%rainbl,SR=grid%sr &
430 & ,RAINNCV=grid%rainncv,REGIME=grid%regime,T2=grid%t2,THC=grid%thc &
431 & ,QSG=grid%qsg,QVG=grid%qvg,QCG=grid%qcg,SOILT1=grid%soilt1,TSNAV=grid%tsnav & ! ruc lsm
432 & ,SMFR3D=grid%smfr3d,KEEPFR3DFLAG=grid%keepfr3dflag & ! ruc lsm
433 & ,POTEVP=grid%POTEVP, SNOPCX=grid%SNOPCX, SOILTB=grid%SOILTB & ! ruc lsm
435 BENCH_END(surf_driver_tim)
440 CALL wrf_debug ( 200 , ' call pbl_driver' )
441 BENCH_START(pbl_driver_tim)
443 & AKHS=grid%akhs ,AKMS=grid%akms &
444 & ,BL_PBL_PHYSICS=config_flags%bl_pbl_physics &
445 & ,BLDT=grid%bldt, CURR_SECS=curr_secs, ADAPT_STEP_FLAG=adapt_step_flag &
446 & ,BR=br ,CHKLOWQ=chklowq ,CT=grid%ct &
447 & ,DT=grid%dt ,DX=grid%dx ,DZ8W=dz8w &
448 & ,EL_MYJ=grid%el_myj ,EXCH_H=grid%exch_h ,GRDFLX=grid%grdflx &
449 & ,GZ1OZ0=gz1oz0 ,HFX=grid%hfx ,HT=grid%ht &
450 & ,ITIMESTEP=grid%itimestep ,KPBL=grid%kpbl &
451 & ,LH=grid%lh ,LOWLYR=grid%lowlyr ,P8W=p8w &
452 & ,PBLH=grid%pblh ,PI_PHY=pi_phy ,PSIH=psih &
453 & ,PSIM=psim ,P_PHY=p_phy ,QFX=grid%qfx &
454 & ,QSFC=grid%qsfc ,QZ0=grid%qz0 &
455 & ,RA_LW_PHYSICS=config_flags%ra_lw_physics &
456 & ,RHO=rho ,RQCBLTEN=grid%rqcblten ,RQIBLTEN=grid%rqiblten &
457 & ,RQVBLTEN=grid%rqvblten ,RTHBLTEN=grid%rthblten ,RUBLTEN=grid%rublten &
458 & ,RVBLTEN=grid%rvblten ,SNOW=grid%snow ,STEPBL=grid%stepbl &
459 & ,THZ0=grid%thz0 ,TH_PHY=th_phy ,TKE_MYJ=grid%tke_myj &
460 & ,TSK=grid%tsk ,T_PHY=t_phy ,UST=grid%ust &
461 & ,U10=grid%u10 ,UZ0=grid%uz0 ,U_FRAME=grid%u_frame ,U_PHY=u_phy &
462 & ,V10=grid%v10 ,VZ0=grid%vz0 ,V_FRAME=grid%v_frame ,V_PHY=v_phy &
463 & ,WARM_RAIN=grid%warm_rain ,WSPD=wspd &
464 & ,XICE=grid%xice ,XLAND=grid%xland ,Z=grid%z &
466 & ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
467 & ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
468 & ,I_START=grid%i_start,I_END=min(grid%i_end, ide-1) &
469 & ,J_START=grid%j_start,J_END=min(grid%j_end, jde-1) &
470 & ,KTS=k_start, KTE=min(k_end,kde-1) &
471 & ,NUM_TILES=grid%num_tiles &
472 ! Variables Required by ACM PBL - jp
473 & ,ZNU=grid%znu,ZNW=grid%znw,MUT=grid%mut,P_TOP=grid%p_top &
475 & ,QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV &
476 & ,QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC &
477 & ,QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR &
478 & ,QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI &
479 & ,QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS &
480 & ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG &
481 & ,HOL=HOL, MOL=grid%mol, REGIME=grid%REGIME &
484 BENCH_END(pbl_driver_tim)
489 ! Jan Mandel's call to SFIRE
491 IF ((grid%sr_x > 0 .OR. grid%sr_y > 0) .AND. config_flags%ifire == 2) THEN
493 BENCH_START(fire_driver_tim)
494 if(config_flags%ifire.eq.2)then
495 call sfire_driver_em ( grid , config_flags &
496 ,ids,ide, kds,kde, jds,jde &
497 ,ims,ime, kms,kme, jms,jme &
498 ,ips,ipe, kps,kpe, jps,jpe &
499 ,sids,side, sjds,sjde &
500 ,sims,sime, sjms,sjme &
501 ,sips,sipe, sjps,sjpe &
505 BENCH_END(fire_driver_tim)
511 CALL wrf_debug ( 200 , ' call cumulus_driver' )
514 BENCH_START(cu_driver_tim)
515 CALL cumulus_driver(grid &
516 ! Prognostic variables
517 & ,U=u_phy ,V=v_phy ,TH=th_phy ,T=t_phy &
518 & ,W=grid%w_2 ,P=p_phy ,PI=pi_phy ,RHO=rho &
520 & ,ITIMESTEP=grid%itimestep ,DT=grid%dt ,DX=grid%dx &
521 & ,CUDT=grid%cudt,CURR_SECS=curr_secs,ADAPT_STEP_FLAG=adapt_step_flag &
522 & ,RAINC=grid%rainc ,RAINCV=grid%raincv ,PRATEC=grid%pratec &
524 & ,HTOP=grid%cutop ,HBOT=grid%cubot ,KPBL=grid%kpbl &
525 & ,DZ8W=dz8w ,P8W=p8w &
526 & ,W0AVG=grid%w0avg ,STEPCU=grid%stepcu &
527 & ,CLDEFI=grid%cldefi ,LOWLYR=grid%lowlyr ,XLAND=grid%xland &
528 & ,APR_GR=grid%apr_gr ,APR_W=grid%apr_w ,APR_MC=grid%apr_mc &
529 & ,APR_ST=grid%apr_st ,APR_AS=grid%apr_as ,APR_CAPMA=grid%apr_capma &
530 & ,APR_CAPME=grid%apr_capme ,APR_CAPMI=grid%apr_capmi &
531 & ,MASS_FLUX=grid%mass_flux ,XF_ENS=grid%xf_ens &
532 & ,PR_ENS=grid%pr_ens ,HT=grid%ht,EDT_OUT=grid%edt_out &
533 & ,imomentum=grid%imomentum,clos_choice=grid%clos_choice &
534 & ,cugd_tten=grid%cugd_tten,cugd_qvten=grid%cugd_qvten,cugd_qcten=grid%cugd_qcten &
535 & ,cugd_ttens=grid%cugd_ttens,cugd_qvtens=grid%cugd_qvtens &
536 & ,ENSDIM=config_flags%ensdim ,MAXIENS=config_flags%maxiens ,MAXENS=config_flags%maxens &
537 & ,MAXENS2=config_flags%maxens2 ,MAXENS3=config_flags%maxens3 &
538 & ,CU_ACT_FLAG=cu_act_flag ,WARM_RAIN=grid%warm_rain &
539 & ,GSW=grid%gsw,cugd_avedx=config_flags%cugd_avedx &
540 & ,PERIODIC_X=(config_flags%polar .OR. config_flags%periodic_x) &
541 & ,PERIODIC_Y=config_flags%periodic_y &
543 & ,CU_PHYSICS=config_flags%cu_physics &
544 ! Dimension arguments
545 & ,IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
546 & ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
547 & ,IPS=ips,IPE=ipe, JPS=jps,JPE=jpe, KPS=kps,KPE=kpe &
548 & ,I_START=grid%i_start,I_END=min(grid%i_end, ide-1) &
549 & ,J_START=grid%j_start,J_END=min(grid%j_end, jde-1) &
550 & ,KTS=k_start, KTE=min(k_end,kde-1) &
551 & ,NUM_TILES=grid%num_tiles &
552 ! Moisture tendency arguments
553 & ,RQVCUTEN=grid%rqvcuten , RQCCUTEN=grid%rqccuten &
554 & ,RQSCUTEN=grid%rqscuten , RQICUTEN=grid%rqicuten &
555 & ,RQRCUTEN=grid%rqrcuten , RQVBLTEN=grid%rqvblten &
556 & ,RQVFTEN=grid%rqvften &
557 ! Other tendency arguments
558 & ,RTHRATEN=grid%rthraten , RTHBLTEN=grid%rthblten &
559 & ,RTHCUTEN=grid%rthcuten , RTHFTEN=grid%rthften &
560 ! Moisture tracer arguments
561 & ,QV_CURR=moist(ims,kms,jms,P_QV), F_QV=F_QV &
562 & ,QC_CURR=moist(ims,kms,jms,P_QC), F_QC=F_QC &
563 & ,QR_CURR=moist(ims,kms,jms,P_QR), F_QR=F_QR &
564 & ,QI_CURR=moist(ims,kms,jms,P_QI), F_QI=F_QI &
565 & ,QS_CURR=moist(ims,kms,jms,P_QS), F_QS=F_QS &
566 & ,QG_CURR=moist(ims,kms,jms,P_QG), F_QG=F_QG &
568 & ,GD_CLOUD=grid%GD_CLOUD,GD_CLOUD2=grid%GD_CLOUD2 &
571 BENCH_END(cu_driver_tim)
573 CALL wrf_debug ( 200 , ' call fddagd_driver' )
575 BENCH_START(fdda_driver_tim)
576 CALL fddagd_driver(itimestep=grid%itimestep,dt=grid%dt,xtime=grid%XTIME, &
578 RUNDGDTEN=grid%rundgdten,RVNDGDTEN=grid%rvndgdten, &
579 RTHNDGDTEN=grid%rthndgdten,RQVNDGDTEN=grid%rqvndgdten, &
580 RMUNDGDTEN=grid%rmundgdten, &
581 u_ndg_old=fdda3d(ims,kms,jms,P_u_ndg_old), &
582 v_ndg_old=fdda3d(ims,kms,jms,P_v_ndg_old), &
583 t_ndg_old=fdda3d(ims,kms,jms,P_t_ndg_old), &
584 q_ndg_old=fdda3d(ims,kms,jms,P_q_ndg_old), &
585 mu_ndg_old=fdda2d(ims,1,jms,P_mu_ndg_old), &
586 u_ndg_new=fdda3d(ims,kms,jms,P_u_ndg_new), &
587 v_ndg_new=fdda3d(ims,kms,jms,P_v_ndg_new), &
588 t_ndg_new=fdda3d(ims,kms,jms,P_t_ndg_new), &
589 q_ndg_new=fdda3d(ims,kms,jms,P_q_ndg_new), &
590 mu_ndg_new=fdda2d(ims,1,jms,P_mu_ndg_new), &
591 u3d=grid%u_2,v3d=grid%v_2,th_phy=th_phy,rho=rho,moist=moist, &
592 p_phy=p_phy,pi_phy=pi_phy,p8w=p8w,t_phy=t_phy, &
593 dz8w=dz8w,z=grid%z,z_at_w=z_at_w, &
594 config_flags=config_flags,dx=grid%DX,n_moist=num_moist, &
595 STEPFG=grid%STEPFG, &
596 pblh=grid%pblh,ht=grid%ht, &
597 IDS=ids,IDE=ide, JDS=jds,JDE=jde, KDS=kds,KDE=kde &
598 ,IMS=ims,IME=ime, JMS=jms,JME=jme, KMS=kms,KME=kme &
599 ,I_START=grid%i_start,I_END=min(grid%i_end, ide-1) &
600 ,J_START=grid%j_start,J_END=min(grid%j_end, jde-1) &
601 ,KTS=k_start, KTE=min(k_end,kde-1) &
602 , num_tiles=grid%num_tiles )
603 BENCH_END(fdda_driver_tim)
605 END SUBROUTINE first_rk_step_part1
607 END MODULE module_first_rk_step_part1