merge standard release WRF/WPS V3.0.1.1 into wrffire
[wrffire.git] / wrfv2_fire / dyn_em / module_first_rk_step_part1.F
blobda8a0f09aefed6c5a4ffd4d7b4d6b727996179b9
1 !WRF:MEDIATION_LAYER:SOLVER
3 #define BENCH_START(A)
4 #define BENCH_END(A)
6 MODULE module_first_rk_step_part1
8 CONTAINS
10   SUBROUTINE first_rk_step_part1 (   grid , config_flags              &
11                              , moist , moist_tend               &
12                              , chem  , chem_tend                &
13                              , scalar , scalar_tend             &
14                              , fdda3d, fdda2d                   &
15                              , ru_tendf, rv_tendf               &
16                              , rw_tendf, t_tendf                &
17                              , ph_tendf, mu_tendf               &
18                              , tke_tend                         &
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           &
24                              , z_at_w , mu_3d                   &
25                              , ids, ide, jds, jde, kds, kde     &
26                              , ims, ime, jms, jme, kms, kme     &
27                              , ips, ipe, jps, jpe, kps, kpe     &
28                              , k_start , k_end                  &
29                             )
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
42     USE module_dm
43 ! jm debug
44     USE module_fr_sfire_util
45     IMPLICIT NONE
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
98 ! Local
100     REAL, DIMENSION( ims:ime, jms:jme ) :: ht_loc
101     INTEGER, DIMENSION( ims:ime, jms:jme ) :: shadowmask 
102     INTEGER                             :: ij
103     INTEGER  num_roof_layers
104     INTEGER  num_wall_layers
105     INTEGER  num_road_layers
106     INTEGER  iswater
107     INTEGER  rk_step 
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, &
121         fire_ignition_radius
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).
133     rk_step = 1
135 BENCH_START(init_zero_tend_tim)
136        !$OMP PARALLEL DO   &
137        !$OMP PRIVATE ( ij )
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,      &
144                                    mu_tendf,                         &
145                                    moist_tend,chem_tend,scalar_tend, &
146                                    num_moist,num_chem,num_scalar,       &
147                                    rk_step,                          &
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), &
152                                    k_start, k_end                   )
154        END DO
155        !$OMP END PARALLEL DO
156 BENCH_END(init_zero_tend_tim)
158 #ifdef DM_PARALLEL
159 #     include "HALO_EM_PHYS_A.inc"
160 #endif
162       !$OMP PARALLEL DO   &
163       !$OMP PRIVATE ( ij )
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,   &
171                         mu_3d, rho,                             &
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,                         &    
175                         grid%rthraten,                               &
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),       &
187                         k_start, k_end                         )
188       ENDDO
189       !$OMP END PARALLEL DO
191 BENCH_END(phy_prep_tim)
193 ! radiation
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                      &
209             ! indexes
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        &
243 !Optional urban
244      &        ,DECLIN_URB=grid%declin_urb        ,COSZ_URB2D=grid%cosz_urb2d   &
245      &        ,OMG_URB2D=grid%omg_urb2d                                        &
247      &        ,Z=grid%z                                                   &
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       &
255             ! indexes
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                                   &
262             ! Optional                          
263      &        , CLDFRA=grid%cldfra                                        &
264      &        , PB=grid%pb                                                     &
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    &
273 #ifdef ACFLUX
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                              &
290 #endif
291      &        ,LWCF=grid%lwcf                                                  &
292      &        ,SWCF=grid%swcf                                                  &
293      &        ,OLR=grid%olr                                                    &
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                &
298 #ifdef WRF_CHEM
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
308 #endif
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
315 ! surface
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 &
374      &        ,ISWATER=iswater &
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
397            ! P-X LSM Variables
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)                  &
413            ! Indexes
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                                  &
420            ! Optional
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
434      &                                                              )
435 BENCH_END(surf_driver_tim)
437 !*********
438 ! pbl
440       CALL wrf_debug ( 200 , ' call pbl_driver' )
441 BENCH_START(pbl_driver_tim)
442       CALL pbl_driver(                                                    &
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                &
465      &        ,ZNT=grid%znt                                                    &
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    &
474           ! optional
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                  &
482      &                                                          )
484 BENCH_END(pbl_driver_tim)
486 !*****
487 ! fire 
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                        &
502             ,rho,z_at_w,dz8w)
503         endif
505 BENCH_END(fire_driver_tim)
506        ENDIF
509 ! cumulus para.
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             &
519                  ! Other arguments
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         &
523      &             , NCA=grid%nca                                         &
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  &
542                  ! Selection flag
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            &
567 #ifdef WRF_CHEM
568      &             ,GD_CLOUD=grid%GD_CLOUD,GD_CLOUD2=grid%GD_CLOUD2                          &
569 #endif
570      &                                                          )
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,   &
577                   id=grid%id,      &
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