1 !WRF:MODEL_LAYER:INITIALIZATION
4 ! This MODULE holds the routines which are used to perform model start-up operations
5 ! for the individual domains. This is the stage after inputting wrfinput and before
8 ! This MODULE CONTAINS the following routines:
11 MODULE module_physics_init
13 USE module_state_description
14 USE module_model_constants
15 USE module_configure, ONLY : grid_config_rec_type
16 ! USE module_ssib_veg , ONLY : init_module_ssib_veg !fds (SSiB constants)
21 !=================================================================
22 SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, &
23 p_top, TSK,RADT,BLDT,CUDT,MPDT, &
25 RTHCUTEN, RQVCUTEN, RQRCUTEN, &
26 RQCCUTEN, RQSCUTEN, RQICUTEN, &
27 RUSHTEN, RVSHTEN, RTHSHTEN, &
28 RQVSHTEN, RQRSHTEN, RQCSHTEN, &
29 RQSSHTEN, RQISHTEN, RQGSHTEN, &
30 RUBLTEN,RVBLTEN,RTHBLTEN, &
31 RQVBLTEN,RQCBLTEN,RQIBLTEN, &
32 RTHRATEN,RTHRATENLW,RTHRATENSW, &
33 STEPBL,STEPRA,STEPCU, &
34 W0AVG, RAINNC, RAINC, RAINCV, RAINNCV, &
35 SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV, &
40 CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new
42 landuse_ISICE, landuse_LUCATS, &
43 landuse_LUSEAS, landuse_ISN, &
45 XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
46 levsiz, n_ozmixm, n_aerosolc, paerlev, &
47 TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_PBL, &
48 EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
49 TSLB,ZS,DZS,num_soil_layers,warm_rain, &
51 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
52 APR_CAPMA,APR_CAPME,APR_CAPMI, &
53 XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV, &
54 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
55 ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS, &
56 SH2O, SNOWH, SMFR3D, & ! temporary
58 DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
59 mp_restart_state,tbpvs_state,tbpvs0_state,&
60 allowed_to_read, moved, start_of_simulation,&
62 ids, ide, jds, jde, kds, kde, &
63 ims, ime, jms, jme, kms, kme, &
64 its, ite, jts, jte, kts, kte, &
67 gd_cloud,gd_cloud2, & ! Optional
68 gd_cloud_a,gd_cloud2_a, & ! Optional
69 gd_cloud_b,gd_cloud2_b, & ! Optional
70 ozmixm,pin, & ! Optional
71 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
72 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, & ! Optional
73 RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, & ! Optional
74 FGDT,STEPFG, & ! Optional
75 cugd_tten,cugd_ttens,cugd_qvten, & ! Optional
76 cugd_qvtens,cugd_qcten, & ! Optional
77 ISNOWXY, ZSNSOXY, TSNOXY, & ! Optional Noah-MP
78 SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, & ! Optional Noah-MP
79 CANLIQXY, EAHXY, TAHXY, CMXY, & ! Optional Noah-MP
80 CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, & ! Optional Noah-MP
81 WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY, & ! Optional Noah-MP
82 STMASSXY, WOODXY, STBLCPXY, FASTCPXY, & ! Optional Noah-MP
83 XSAIXY, & ! Optional Noah-MP
84 T2MVXY, T2MBXY, CHSTARXY , & ! Optional Noah-MP
85 ! num_roof_layers,num_wall_layers, & !Optional urban
86 ! num_road_layers, & !Optional urban
87 DZR, DZB, DZG, & !Optional urban
88 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D, & !Optional urban
89 QC_URB2D, XXXR_URB2D,XXXB_URB2D, & !Optional urban
90 XXXG_URB2D, XXXC_URB2D, & !Optional urban
91 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
92 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
93 TS_URB2D, FRC_URB2D, UTYPE_URB2D, & !Optional urban
94 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
95 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
96 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
97 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
98 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
99 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
100 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
101 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
102 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
103 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
104 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
105 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
106 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
107 TML,T0ML,HML,H0ML,HUML,HVML,TMOML, & !Optional oml
108 itimestep, & !Optional obs fdda
110 fdob, & !Optional obs fdda
112 t00, p00, tlp, & !for obs-nudging
113 TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update, &
114 ACHFX,ACLHF,ACGRDFLX &
116 ,te_temf & ! WA 12/21/09
117 ,cf3d_temf & ! WA 9/27/10
118 ,wm_temf & ! WA 2/22/11
119 ,massflux_EDKF, entr_EDKF, detr_EDKF & ! Optional for qnse
120 ,thl_up, thv_up, rt_up & ! Optional for qnse
121 ,rv_up, rc_up, u_up, v_up, frac_up & ! Optional for qnse
124 !-----------------------------------------------------------------
127 USE module_wind_generic
128 USE module_wind_fitch
130 !-----------------------------------------------------------------
131 TYPE (grid_config_rec_type) :: config_flags
133 INTEGER , INTENT(IN) :: id
134 INTEGER , INTENT(IN) ,OPTIONAL :: tmn_update
135 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
136 ! LOGICAL , INTENT (IN) :: FNDSOILW, FNDSNOWH
137 LOGICAL, PARAMETER :: FNDSOILW=.true., FNDSNOWH=.true.
138 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
139 ims, ime, jms, jme, kms, kme, &
140 its, ite, jts, jte, kts, kte
142 INTEGER , INTENT(IN) :: num_soil_layers
143 INTEGER , INTENT(IN) :: lagday
144 INTEGER , INTENT(OUT) ,OPTIONAL :: nyear
145 REAL , INTENT(OUT) ,OPTIONAL :: nday
147 LOGICAL, INTENT(IN) :: start_of_simulation
148 REAL, INTENT(IN) :: DT, p_top, DX, DY
149 LOGICAL, INTENT(IN) :: restart
150 REAL, INTENT(IN) :: RADT,BLDT,CUDT,MPDT
151 REAL, INTENT(IN) :: swrad_scat
153 REAL, DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
154 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
156 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
157 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
159 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
160 INTENT(INOUT) :: OZMIXM
162 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
164 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
165 REAL, DIMENSION(paerlev), OPTIONAL,INTENT(INOUT) :: m_hybi
166 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
167 INTENT(INOUT) :: aerosolc_1, aerosolc_2
169 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
170 INTENT(INOUT) :: SMOIS, SH2O,TSLB
171 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
173 REAL, DIMENSION( ims:ime, jms:jme ) , &
174 INTENT(INOUT) :: SNOW, &
190 REAL, DIMENSION( ims:ime, jms:jme ) , &
191 OPTIONAL, INTENT(INOUT) :: ACHFX, &
195 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
196 INTENT(INOUT) :: IVGTYP, &
201 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
202 RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
204 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
207 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
208 GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK !EMBCK new
209 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: SNOALB
212 REAL, INTENT(IN) :: GMT
214 INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
215 INTEGER , INTENT(IN) :: JULYR, JULDAY
219 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
220 RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, &
221 RQSCUTEN, RQICUTEN, &
222 RUSHTEN, RVSHTEN, RTHSHTEN, RQVSHTEN, RQRSHTEN, RQCSHTEN, &
223 RQSSHTEN, RQISHTEN, RQGSHTEN
225 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
227 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX, &
228 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
229 APR_CAPMA,APR_CAPME,APR_CAPMI
231 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
234 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: &
235 RAINNC, RAINC, RAINCV, RAINNCV, &
236 SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV
238 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
240 INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
247 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
249 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
250 RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_PBL
252 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
253 massflux_EDKF, entr_EDKF, detr_EDKF &
254 ,thl_up, thv_up, rt_up &
255 ,rv_up, rc_up, u_up, v_up &
259 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
260 cugd_tten,cugd_ttens,cugd_qvten, &
261 cugd_qvtens,cugd_qcten
262 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
263 XLAND,ZNT,Z0,UST,MOL,LU_INDEX, &
264 PBLH,THC,MAVAIL,HFX,QFX,RAINBL
265 INTEGER , INTENT(INOUT) :: landuse_ISICE, landuse_LUCATS
266 INTEGER , INTENT(INOUT) :: landuse_LUSEAS, landuse_ISN
267 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
269 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
270 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
271 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
272 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
273 REAL, DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
276 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
279 gd_cloud, gd_cloud2, &
280 gd_cloud_a, gd_cloud2_a, &
281 gd_cloud_b, gd_cloud2_b
283 REAL, DIMENSION( ims:ime , jms:jme ) , &
290 INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
291 REAL, OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
292 REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
293 REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
294 REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
295 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
296 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
297 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
298 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
299 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
300 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
301 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
302 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
303 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
304 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
305 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
306 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
307 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
308 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
309 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
310 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
311 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
312 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
313 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
314 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
315 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
316 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
317 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
318 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
319 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
320 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
323 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
324 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
325 REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
326 LOGICAL, INTENT(IN) :: allowed_to_read, moved
329 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
330 TML,T0ML,HML,H0ML,HUML,HVML,TMOML
333 REAL, OPTIONAL, INTENT(IN) :: FGDT
334 INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
335 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
336 RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
337 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
341 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !urban
342 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !urban
343 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !urban
344 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !urban
345 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !urban
346 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !urban
348 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
349 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
350 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
351 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
352 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
353 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
354 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
355 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
356 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
358 ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
359 ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
360 ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
361 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
362 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
363 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
365 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
366 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
367 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
368 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
369 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
370 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
371 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
373 INTEGER , INTENT(IN) :: num_urban_layers
374 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
375 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
376 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
377 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
378 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
379 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
380 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
381 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
382 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
383 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
384 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
385 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
386 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
387 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
388 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
389 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
390 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
391 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
392 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
393 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
394 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
395 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
396 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
397 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
398 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
399 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
400 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
401 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
402 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
403 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
404 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
405 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
406 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
407 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
408 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
411 INTEGER, OPTIONAL, INTENT(IN) :: itimestep
413 TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
415 REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp ! for obs-nudging base-state calcn
418 REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
419 INTENT(OUT) :: te_temf, cf3d_temf
421 REAL,OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
422 INTENT(OUT) :: wm_temf
426 REAL :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
427 REAL, DIMENSION( kms:kme ) :: sfull, shalf
428 REAL :: obs_twindo_cg, obs_twindo
430 CHARACTER*256 :: MMINLU_loc
431 CHARACTER*80 :: message
435 INTEGER :: sf_urban_physics
442 INTEGER :: i, j, k, itf, jtf, ktf, n
445 !-----------------------------------------------------------------
447 sf_urban_physics=config_flags%sf_urban_physics
448 usemonalb=config_flags%usemonalb
449 rdmaxalb=config_flags%rdmaxalb
450 mfshconv=config_flags%mfshconv
452 obs_twindo_cg=model_config_rec%obs_twindo(1)
453 obs_twindo=config_flags%obs_twindo
454 oml_hml0=config_flags%oml_hml0
455 omlcall=config_flags%omlcall
458 !-- should be from the namelist
463 CALL wrf_debug(100,'top of phy_init')
465 WRITE(wrf_err_message,*) 'phy_init: start_of_simulation = ',start_of_simulation
466 CALL wrf_debug ( 100, TRIM(wrf_err_message) )
479 if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
482 CALL nl_get_cen_lat(id,cen_lat)
483 CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
484 CALL nl_get_iswater(id,iswater)
485 CALL nl_get_isice(id,isice)
486 CALL nl_get_isurban(id,isurban)
487 CALL nl_get_mminlu( 1, mminlu_loc )
488 CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
489 !-- temporary fix by ww
490 landuse_ISICE = isice
492 ! Added for Wind Turbine parameterization code -- This will only read in an optional
493 ! configuration file with information that will be used by inividual turbine init routines
494 ! as each domain is initialized.
495 IF ( id .EQ. 1 ) THEN
496 CALL init_module_wind_generic
497 CALL init_module_wind_fitch
502 !-- initialize common variables
504 IF ( .NOT. moved ) THEN
510 !-- initialize ust to a small value
521 DO k=kms,kme !wig, 17-May-2006: Added for idealized chem. runs
528 IF(PRESENT(TMN_UPDATE))THEN
529 if(tmn_update.eq.1) then
549 IF(XLAND(i,j) .LT. 1.5)THEN
550 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=ALBLND
552 ALBEDO(i,j)=ALBBCK(i,j)
553 EMISS(i,j)=EMBCK(i,j)
556 #if ! ( NMM_CORE == 1 )
561 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=0.08
562 ALBEDO(i,j)=ALBBCK(i,j)
564 EMISS(i,j)=EMBCK(i,j)
567 #if ! ( NMM_CORE == 1 )
576 if (config_flags%cu_diag == 1 )then
581 gd_cloud2(i,k,j) = 0.
582 gd_cloud_a(i,k,j) = 0.
583 gd_cloud2_a(i,k,j) = 0.
584 gd_cloud_b(i,k,j) = 0.
585 gd_cloud2_b(i,k,j) = 0.
598 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
600 IF(mminlu_loc .ne. ' ')THEN
601 !-- initialize surface properties
603 CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
604 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
605 TRIM ( mminlu_loc ) , &
606 landuse_ISICE, landuse_LUCATS, &
607 landuse_LUSEAS, landuse_ISN, &
608 config_flags%fractional_seaice, &
610 allowed_to_read , usemonalb , &
611 ids, ide, jds, jde, kds, kde, &
612 ims, ime, jms, jme, kms, kme, &
613 its, ite, jts, jte, kts, kte )
618 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
619 !-- zfull/zhalf may be either zeta or eta
620 !-- what is done here depends on coordinate (check this code if adding new coordinates)
621 CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
623 kds,kde,kms,kme,kts,kte)
625 !-- initialize physics
631 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
633 CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW, &
634 RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT, &
635 levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm, &
636 cldfra_old=cldfra_old, & ! Optional
637 ozmixm=ozmixm,pin=pin, & ! Optional
638 m_ps_1=m_ps_1,m_ps_2=m_ps_2,m_hybi=m_hybi,aerosolc_1=aerosolc_1,aerosolc_2=aerosolc_2, & ! Optional
639 paerlev=paerlev,n_aerosolc=n_aerosolc, &
640 sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top, &
641 config_flags=config_flags,restart=restart, &
642 allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation, &
643 ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, &
644 ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, &
645 its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte )
647 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
648 CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
649 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
650 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
651 num_soil_layers,TKE_PBL,mfshconv, &
652 massflux_EDKF, entr_EDKF, detr_EDKF, &
653 thl_up, thv_up, rt_up, &
654 rv_up, rc_up, u_up, v_up, &
657 SNOW,SNOWC, CANWAT,SMSTAV, &
658 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
659 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL, &
660 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
668 ISNOWXY, ZSNSOXY, TSNOXY, &
669 SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, &
670 CANLIQXY, EAHXY, TAHXY, CMXY, &
671 CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, &
672 WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
673 STMASSXY, WOODXY, STBLCPXY, FASTCPXY, &
675 T2MVXY,T2MBXY,CHSTARXY , &
677 start_of_simulation , &
678 te_temf,cf3d_temf,wm_temf, & ! WA
679 DZR, DZB, DZG, & !Optional urban
680 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
681 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
682 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
683 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
684 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
685 SF_URBAN_PHYSICS, & !Optional urban
686 NUM_URBAN_LAYERS, & !Optional multi-layer urban
687 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
688 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
689 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
690 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
691 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
692 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
693 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
694 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
695 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
696 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
697 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
698 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
699 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
700 ids, ide, jds, jde, kds, kde, &
701 ims, ime, jms, jme, kms, kme, &
702 its, ite, jts, jte, kts, kte, &
703 ACHFX,ACLHF,ACGRDFLX, &
704 oml_hml0, omlcall, & !Optional oml
705 TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
707 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
709 CALL cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
710 RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN, &
711 NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
712 CLDEFI,LOWLYR,MASS_FLUX, &
714 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
715 APR_CAPMA,APR_CAPME,APR_CAPMI, &
716 cugd_tten,cugd_ttens,cugd_qvten, &
717 cugd_qvtens,cugd_qcten, &
718 allowed_to_read, start_of_simulation, &
719 ids, ide, jds, jde, kds, kde, &
720 ims, ime, jms, jme, kms, kme, &
721 its, ite, jts, jte, kts, kte )
723 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to shcu_init' )
725 CALL shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
726 RQVSHTEN,RQRSHTEN,RQCSHTEN, &
727 RQSSHTEN,RQISHTEN,RQGSHTEN, &
728 NCA,RAINC,RAINCV,config_flags,restart, &
729 allowed_to_read, start_of_simulation, &
730 ids, ide, jds, jde, kds, kde, &
731 ims, ime, jms, jme, kms, kme, &
732 its, ite, jts, jte, kts, kte )
734 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
736 CALL mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
738 MPDT, DT, DX, DY, LOWLYR, &
739 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
740 mp_restart_state,tbpvs_state,tbpvs0_state, &
741 allowed_to_read, start_of_simulation, &
742 ids, ide, jds, jde, kds, kde, &
743 ims, ime, jms, jme, kms, kme, &
744 its, ite, jts, jte, kts, kte )
747 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
749 CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
750 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
751 config_flags,restart, &
753 ids, ide, jds, jde, kds, kde, &
754 ims, ime, jms, jme, kms, kme, &
755 its, ite, jts, jte, kts, kte )
757 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
759 CALL fdob_init(model_config_rec%obs_nudge_opt, &
760 model_config_rec%max_dom, &
762 model_config_rec%parent_id, &
763 model_config_rec%obs_idynin, &
764 model_config_rec%obs_dtramp, &
765 model_config_rec%fdda_end, &
766 model_config_rec%restart, &
767 obs_twindo_cg, obs_twindo, &
769 model_config_rec%obs_no_pbl_nudge_uv, &
770 model_config_rec%obs_no_pbl_nudge_t, &
771 model_config_rec%obs_no_pbl_nudge_q, &
772 model_config_rec%obs_sfc_scheme_horiz, &
773 model_config_rec%obs_sfc_scheme_vert, &
774 model_config_rec%obs_max_sndng_gap, &
775 model_config_rec%obs_sfcfact, &
776 model_config_rec%obs_sfcfacr, &
777 model_config_rec%obs_dpsmx, &
778 model_config_rec%obs_nudge_wind, &
779 model_config_rec%obs_nudge_temp, &
780 model_config_rec%obs_nudge_mois, &
781 model_config_rec%obs_nudgezfullr1_uv, &
782 model_config_rec%obs_nudgezrampr1_uv, &
783 model_config_rec%obs_nudgezfullr2_uv, &
784 model_config_rec%obs_nudgezrampr2_uv, &
785 model_config_rec%obs_nudgezfullr4_uv, &
786 model_config_rec%obs_nudgezrampr4_uv, &
787 model_config_rec%obs_nudgezfullr1_t, &
788 model_config_rec%obs_nudgezrampr1_t, &
789 model_config_rec%obs_nudgezfullr2_t, &
790 model_config_rec%obs_nudgezrampr2_t, &
791 model_config_rec%obs_nudgezfullr4_t, &
792 model_config_rec%obs_nudgezrampr4_t, &
793 model_config_rec%obs_nudgezfullr1_q, &
794 model_config_rec%obs_nudgezrampr1_q, &
795 model_config_rec%obs_nudgezfullr2_q, &
796 model_config_rec%obs_nudgezrampr2_q, &
797 model_config_rec%obs_nudgezfullr4_q, &
798 model_config_rec%obs_nudgezrampr4_q, &
799 model_config_rec%obs_nudgezfullmin, &
800 model_config_rec%obs_nudgezrampmin, &
801 model_config_rec%obs_nudgezmax, &
804 model_config_rec%start_year(id), &
805 model_config_rec%start_month(id), &
806 model_config_rec%start_day(id), &
807 model_config_rec%start_hour(id), &
808 model_config_rec%start_minute(id), &
809 model_config_rec%start_second(id), &
813 model_config_rec%obs_ipf_init, &
814 ids, ide, jds, jde, kds, kde, &
815 ims, ime, jms, jme, kms, kme, &
816 its, ite, jts, jte, kts, kte )
820 END SUBROUTINE phy_init
822 !=====================================================================
823 SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
824 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu, &
825 ISICE, LUCATS, LUSEAS, ISN, &
828 allowed_to_read , usemonalb , &
829 ids, ide, jds, jde, kds, kde, &
830 ims, ime, jms, jme, kms, kme, &
831 its, ite, jts, jte, kts, kte )
836 !---------------------------------------------------------------------
837 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
838 ims, ime, jms, jme, kms, kme, &
839 its, ite, jts, jte, kts, kte
841 INTEGER , INTENT(IN) :: iswater, julday
842 REAL , INTENT(IN) :: cen_lat
843 CHARACTER(LEN=*), INTENT(IN) :: mminlu
844 LOGICAL, INTENT(IN) :: allowed_to_read , usemonalb
845 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: lu_index, snowc, xice, snoalb
846 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: albedo, albbck, mavail, emiss, &
848 znt, Z0, thc, xland, xicem
849 INTEGER , INTENT(INOUT) :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
850 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
852 REAL :: xice_threshold
853 !---------------------------------------------------------------------
856 CHARACTER*80 :: message
857 INTEGER :: landuse_unit, LS, LC, LI, LUN, NSN
858 INTEGER :: i, j, itf, jtf, is, cats, seas, curs
859 INTEGER , PARAMETER :: OPEN_OK = 0
861 INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
862 REAL , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
863 REAL , DIMENSION( max_cats ) :: SCFX
864 ! save these fields in case nest moves or has to be reinitialized
865 ! and this routine is called with allowed_to_read set to false
866 ! note that by saving these, we're locking in the same landuse for
867 ! the duration of a run; possible implications for long climate runs
868 LOGICAL :: found_lu, end_of_file
869 LOGICAL, EXTERNAL :: wrf_dm_on_monitor
871 !---------------------------------------------------------------------
873 CALL wrf_debug( 100 , 'top of landuse_init' )
875 NSN=-1 ! set this to suppress uninitalized data messages from tools
877 if ( fractional_seaice == 0 ) then
879 else if ( fractional_seaice == 1 ) then
880 xice_threshold = 0.02
883 ! recover LU variables from state
884 IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
885 WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
888 DO cats = 1, max_cats
889 SCFX(cats) = lu_state(curs) ; curs = curs + 1
890 DO seas = 1, max_seas
891 ALBD(cats,seas) = lu_state(curs) ; curs = curs + 1
892 SLMO(cats,seas) = lu_state(curs) ; curs = curs + 1
893 SFEM(cats,seas) = lu_state(curs) ; curs = curs + 1
894 SFZ0(cats,seas) = lu_state(curs) ; curs = curs + 1
895 SFHC(cats,seas) = lu_state(curs) ; curs = curs + 1
896 THERIN(cats,seas) = lu_state(curs) ; curs = curs + 1
900 ! Determine season (summer=1, winter=2)
902 IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
903 IF(CEN_LAT.LT.0.0)ISN=3-ISN
906 IF ( allowed_to_read ) THEN
908 IF ( wrf_dm_on_monitor() ) THEN
909 OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
910 IF ( ierr .NE. OPEN_OK ) THEN
911 WRITE(message,FMT='(A)') &
912 'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
913 CALL wrf_error_fatal ( message )
917 ! Read info from file LANDUSE.TBL
918 ! IF(MMINLU.EQ.'OLD ')THEN
921 ! ELSE IF(MMINLU.EQ.'USGS')THEN
924 ! ELSE IF(MMINLU.EQ.'SiB ')THEN
927 ! ELSE IF(MMINLU.EQ.'LW12')THEN
930 ! ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
933 ! call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
935 call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
937 end_of_file = .FALSE.
938 !!! BEGINNING OF 1999 LOOP
940 IF ( wrf_dm_on_monitor() ) THEN
941 READ (landuse_unit,*,END=2002)LUTYPE
944 CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
947 IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
948 FOUND_LU = LUTYPE.EQ.MMINLU
950 CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
951 IF ( .NOT. end_of_file ) THEN
952 CALL wrf_dm_bcast_string(lutype, 256)
953 CALL wrf_dm_bcast_bytes (lucats, IWORDSIZE )
954 CALL wrf_dm_bcast_bytes (luseas, IWORDSIZE )
955 CALL wrf_dm_bcast_bytes (found_lu, LWORDSIZE )
959 IF(LUTYPE.NE.'SSIB') THEN !this is not really true for ssib lsm (fds)
960 PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND', &
961 LUCATS,' CATEGORIES',LUSEAS,' SEASONS', &
962 ' WATER CATEGORY = ',ISWATER, &
963 ' SNOW CATEGORY = ',ISICE
967 if ( wrf_dm_on_monitor() ) then
968 READ (landuse_unit,*)
972 IF ( wrf_dm_on_monitor() ) THEN
973 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS), &
974 SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
976 CALL wrf_dm_bcast_bytes (LI, IWORDSIZE )
977 IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
979 IF ( wrf_dm_on_monitor() ) THEN
980 READ (landuse_unit,*)
985 IF(NSN.EQ.1.AND.FOUND_LU) THEN
988 CALL wrf_dm_bcast_bytes (albd, max_cats * max_seas * RWORDSIZE )
989 CALL wrf_dm_bcast_bytes (slmo, max_cats * max_seas * RWORDSIZE )
990 CALL wrf_dm_bcast_bytes (sfem, max_cats * max_seas * RWORDSIZE )
991 CALL wrf_dm_bcast_bytes (sfz0, max_cats * max_seas * RWORDSIZE )
992 CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
993 CALL wrf_dm_bcast_bytes (sfhc, max_cats * max_seas * RWORDSIZE )
994 CALL wrf_dm_bcast_bytes (scfx, max_cats * RWORDSIZE )
997 IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
1000 IF(.NOT. found_lu .OR. end_of_file )THEN
1001 CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
1003 ENDIF ! allowed_to_read
1006 ! Set arrays according to lu_index
1007 itf = min0(ite, ide-1)
1008 jtf = min0(jte, jde-1)
1009 IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
1012 IS=nint(lu_index(i,j))
1013 ! only do this check on read-in data
1014 IF(allowed_to_read)THEN
1015 IF(IS.LT.0.OR.IS.GT.LUN)THEN
1016 WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
1017 CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
1020 ! SET NO-DATA POINTS (IS=0) TO WATER
1024 IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
1025 ALBEDO(I,J)=ALBBCK(I,J)
1026 IF(SNOWC(I,J) .GT. 0.5) THEN
1028 ALBEDO(I,J)=SNOALB(I,J)
1030 ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
1033 THC(I,J)=THERIN(IS,ISN)/100.
1034 Z0(I,J)=SFZ0(IS,ISN)/100.
1036 EMBCK(I,J)=SFEM(IS,ISN)
1037 EMISS(I,J)=EMBCK(I,J)
1038 MAVAIL(I,J)=SLMO(IS,ISN)
1039 IF(IS.NE.ISWATER)THEN
1044 ! SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
1045 XICEM(I,J)=XICE(I,J)
1046 IF(XICE(I,J).GE.xice_threshold)THEN
1048 ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
1049 EMBCK(I,J)=SFEM(ISICE,ISN)
1050 IF (FRACTIONAL_SEAICE == 1) THEN
1051 ! The 0.08 value is the albedo over open water.
1052 ! The 0.98 value is the emissivity over open water.
1053 ALBEDO(I,J) = ( XICE(I,J) * ALBBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.08 )
1054 EMISS(I,J) = ( XICE(I,J) * EMBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.98 )
1056 ALBEDO(I,J)=ALBBCK(I,J)
1057 EMISS(I,J)=EMBCK(I,J)
1059 THC(I,J)=THERIN(ISICE,ISN)/100.
1060 Z0(I,J)=SFZ0(ISICE,ISN)/100.
1062 MAVAIL(I,J)=SLMO(ISICE,ISN)
1067 if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
1068 CLOSE (landuse_unit)
1070 CALL wrf_debug( 100 , 'returning from of landuse_init' )
1072 ! restore LU variables from state
1074 DO cats = 1, max_cats
1075 lu_state(curs) = SCFX(cats) ; curs = curs + 1
1076 DO seas = 1, max_seas
1077 lu_state(curs) = ALBD(cats,seas) ; curs = curs + 1
1078 lu_state(curs) = SLMO(cats,seas) ; curs = curs + 1
1079 lu_state(curs) = SFEM(cats,seas) ; curs = curs + 1
1080 lu_state(curs) = SFZ0(cats,seas) ; curs = curs + 1
1081 lu_state(curs) = SFHC(cats,seas) ; curs = curs + 1
1082 lu_state(curs) = THERIN(cats,seas) ; curs = curs + 1
1087 !-- SSIB's 12-category vegetation parameters are defined in module_ssib_veg
1088 !-- Data in LANDUSE.TBL is only used temporarily until the first
1089 !-- call to SSIB, and also to set water/ice points properties
1090 ! IF(MMINLU.EQ.'SSIB')THEN
1091 ! CALL init_module_ssib_veg
1092 ! CALL wrf_message ( 'READING SSIB VEGETATION PARAMETERS' )
1096 END SUBROUTINE landuse_init
1098 !=====================================================================
1099 SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW, &
1100 RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT, &
1101 levsiz,XLAT,n_ozmixm, &
1102 cldfra_old, & ! Optional
1103 ozmixm,pin, & ! Optional
1104 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2, & ! Optional
1105 paerlev,n_aerosolc, &
1106 sfull,shalf,pptop,swrad_scat,p_top, &
1107 config_flags,restart, &
1108 allowed_to_read, start_of_simulation, &
1109 ids, ide, jds, jde, kds, kde, &
1110 ims, ime, jms, jme, kms, kme, &
1111 its, ite, jts, jte, kts, kte )
1112 !---------------------------------------------------------------------
1113 USE module_ra_rrtm , ONLY : rrtminit
1114 USE module_ra_rrtmg_lw , ONLY : rrtmg_lwinit
1115 USE module_ra_rrtmg_sw , ONLY : rrtmg_swinit
1116 USE module_ra_cam , ONLY : camradinit
1117 USE module_ra_sw , ONLY : swinit
1118 USE module_ra_gsfcsw , ONLY : gsfc_swinit
1119 USE module_ra_gfdleta , ONLY : gfdletainit
1121 USE module_ra_hwrf , ONLY : hwrfrainit
1123 USE module_ra_hs , ONLY : hsinit
1125 !---------------------------------------------------------------------
1127 !---------------------------------------------------------------------
1128 INTEGER, INTENT(IN) :: id
1129 TYPE (grid_config_rec_type) :: config_flags
1130 LOGICAL , INTENT(IN) :: restart
1131 LOGICAL, INTENT(IN) :: allowed_to_read
1133 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1134 ims, ime, jms, jme, kms, kme, &
1135 its, ite, jts, jte, kts, kte
1137 INTEGER , INTENT(IN) :: JULDAY,JULYR
1138 REAL , INTENT(IN) :: DT, RADT, cen_lat, GMT, pptop, &
1140 LOGICAL, INTENT(IN) :: start_of_simulation
1142 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
1143 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
1145 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: XLAT
1147 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
1148 INTENT(INOUT) :: OZMIXM
1150 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
1151 REAL, DIMENSION(paerlev), OPTIONAL, INTENT(INOUT) :: m_hybi
1152 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
1153 INTENT(INOUT) :: aerosolc_1, aerosolc_2
1155 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
1157 INTEGER , INTENT(INOUT) :: STEPRA
1160 REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
1161 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1167 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
1170 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
1171 LOGICAL :: etalw = .false.
1172 LOGICAL :: hwrflw= .false.
1173 LOGICAL :: camlw = .false.
1174 ! LOGICAL :: etamp = .false.
1175 LOGICAL :: acswalloc = .false.
1176 LOGICAL :: aclwalloc = .false.
1177 integer :: month,iday
1178 INTEGER :: i, j, k, itf, jtf, ktf
1179 !---------------------------------------------------------------------
1185 !---------------------------------------------------------------------
1187 !-- calculate radiation time step
1189 STEPRA = nint(RADT*60./DT)
1190 STEPRA = max(STEPRA,1)
1194 IF(start_of_simulation)THEN
1199 RTHRATENLW(i,k,j)=0.
1200 RTHRATENSW(i,k,j)=0.
1206 if( present(cldfra_old) ) then
1210 cldfra_old(i,k,j) = 0.
1217 !-- find out which microphysics option is used first
1219 ! mp_select: SELECT CASE(config_flags%mp_physics)
1224 ! END SELECT mp_select
1226 !-- chose long wave radiation scheme
1228 lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
1232 p_top, allowed_to_read , &
1233 ids, ide, jds, jde, kds, kde, &
1234 ims, ime, jms, jme, kms, kme, &
1235 its, ite, jts, jte, kts, kte )
1239 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1241 IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
1242 PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND. &
1243 PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1) &
1244 .AND. PRESENT(AEROSOLC_2)) THEN
1246 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1247 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1248 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1249 paerlev, n_aerosolc, &
1250 ids, ide, jds, jde, kds, kde, &
1251 ims, ime, jms, jme, kms, kme, &
1252 its, ite, jts, jte, kts, kte )
1254 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
1260 CASE (RRTMG_LWSCHEME)
1261 CALL rrtmg_lwinit( &
1262 p_top, allowed_to_read , &
1263 ids, ide, jds, jde, kds, kde, &
1264 ims, ime, jms, jme, kms, kme, &
1265 its, ite, jts, jte, kts, kte )
1270 CALL nl_get_start_month(id,month)
1271 CALL nl_get_start_day(id,iday)
1272 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1273 julyr,month,iday,gmt, &
1274 config_flags,allowed_to_read, &
1275 ids, ide, jds, jde, kds, kde, &
1276 ims, ime, jms, jme, kms, kme, &
1277 its, ite, jts, jte, kts, kte )
1281 CALL nl_get_start_month(id,month)
1282 CALL nl_get_start_day(id,iday)
1283 ! test this with standard jul-day calls
1284 ! CALL nl_get_start_year(id,start_year)
1285 ! CALL nl_get_start_month(id,start_month)
1286 ! CALL nl_get_start_day(id,start_day)
1287 ! CALL nl_get_start_hour(id,start_hour)
1288 ! CALL nl_get_start_minute(id,start_minute)
1289 ! CALL nl_get_start_second(id,start_second)
1290 ! CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
1291 ! CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
1292 ! julyr_start=start_year
1293 ! julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
1294 ! gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
1295 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1296 ! CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
1297 config_flags,allowed_to_read , &
1298 kds, kde, kms, kme, kts, kte )
1302 CALL hsinit(RTHRATEN,restart, &
1303 ids, ide, jds, jde, kds, kde, &
1304 ims, ime, jms, jme, kms, kme, &
1305 its, ite, jts, jte, kts, kte )
1311 END SELECT lwrad_select
1312 !-- initialize short wave radiation scheme
1314 swrad_select: SELECT CASE(config_flags%ra_sw_physics)
1320 ids, ide, jds, jde, kds, kde, &
1321 ims, ime, jms, jme, kms, kme, &
1322 its, ite, jts, jte, kts, kte )
1326 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1330 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1331 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1332 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1333 paerlev, n_aerosolc, &
1334 ids, ide, jds, jde, kds, kde, &
1335 ims, ime, jms, jme, kms, kme, &
1336 its, ite, jts, jte, kts, kte )
1341 CALL gsfc_swinit(cen_lat, allowed_to_read )
1343 CASE (RRTMG_SWSCHEME)
1344 CALL rrtmg_swinit( &
1346 ids, ide, jds, jde, kds, kde, &
1347 ims, ime, jms, jme, kms, kme, &
1348 its, ite, jts, jte, kts, kte )
1354 CALL nl_get_start_month(id,month)
1355 CALL nl_get_start_day(id,iday)
1356 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1357 julyr,month,iday,gmt, &
1358 config_flags,allowed_to_read, &
1359 ids, ide, jds, jde, kds, kde, &
1360 ims, ime, jms, jme, kms, kme, &
1361 its, ite, jts, jte, kts, kte )
1366 CALL nl_get_start_month(id,month)
1367 CALL nl_get_start_day(id,iday)
1368 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1369 config_flags,allowed_to_read, &
1370 kds, kde, kms, kme, kts, kte )
1377 END SELECT swrad_select
1379 #if ( EM_CORE == 1 )
1380 ! test for conditionally allocated arrays when using bucket_J
1382 IF(config_flags%bucket_J .gt. 0.0)THEN
1383 IF(.not. (acswalloc .and. aclwalloc))THEN
1384 CALL wrf_error_fatal ( 'Need CAM or RRTMG radiation for bucket_J option')
1389 END SUBROUTINE ra_init
1391 SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
1392 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
1393 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
1394 num_soil_layers,TKE_PBL,mfshconv, &
1395 massflux_EDKF, entr_EDKF, detr_EDKF, &
1396 thl_up, thv_up, rt_up, &
1397 rv_up, rc_up, u_up, v_up, &
1400 SNOW,SNOWC, CANWAT,SMSTAV, &
1401 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
1402 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail, &
1403 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
1404 #if ( NMM_CORE == 1 )
1411 ISNOWXY, ZSNSOXY, TSNOXY, &
1412 SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, &
1413 CANLIQXY, EAHXY, TAHXY, CMXY, &
1414 CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, &
1415 WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
1416 STMASSXY, WOODXY, STBLCPXY, FASTCPXY, &
1418 T2MVXY, T2MBXY ,CHSTARXY, &
1420 start_of_simulation, &
1421 te_temf,cf3d_temf,wm_temf, & ! WA
1422 ! num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1423 DZR, DZB, DZG, & !Optional urban
1424 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
1425 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
1426 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
1427 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, & !Optional urban
1428 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
1429 SF_URBAN_PHYSICS, & !Optional urban
1430 NUM_URBAN_LAYERS, & !Optional multi-layer urban
1431 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
1432 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
1433 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
1434 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
1435 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
1436 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
1437 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
1438 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
1439 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
1440 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
1441 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
1442 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
1443 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
1444 ids, ide, jds, jde, kds, kde, &
1445 ims, ime, jms, jme, kms, kme, &
1446 its, ite, jts, jte, kts, kte, &
1447 ACHFX,ACLHF,ACGRDFLX, &
1448 oml_hml0, omlcall, & !Optional oml
1449 TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
1450 !--------------------------------------------------------------------
1451 USE module_sf_sfclay
1452 USE module_sf_sfclayrev
1454 USE module_sf_pxsfclay
1458 USE module_bl_gfs2011, only : gfs2011init
1460 USE module_sf_myjsfc
1461 USE module_sf_qnsesfc
1462 USE module_sf_noahdrv
1463 USE module_sf_noahmpdrv
1465 USE module_sf_bep !BEP
1466 USE module_sf_bep_bem
1467 USE module_sf_ruclsm
1470 USE module_bl_myjpbl
1471 USE module_bl_myjurb
1472 USE module_bl_boulac
1473 USE module_bl_camuwpbl_driver, ONLY : camuwpblinit
1474 USE module_bl_qnsepbl
1475 USE module_bl_qnsepbl09
1476 USE module_bl_mfshconvpbl
1477 #if ( EM_CORE == 1 )
1480 USE module_sf_temfsfclay
1487 !--------------------------------------------------------------------
1489 !--------------------------------------------------------------------
1490 TYPE (grid_config_rec_type) :: config_flags
1491 LOGICAL , INTENT(IN) :: restart
1492 LOGICAL, INTENT(IN) :: FNDSOILW, FNDSNOWH
1493 LOGICAL, INTENT(IN) :: RDMAXALB
1495 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1496 ims, ime, jms, jme, kms, kme, &
1497 its, ite, jts, jte, kts, kte
1498 INTEGER , INTENT(IN) :: num_soil_layers
1499 INTEGER , INTENT(IN) :: SF_URBAN_PHYSICS
1501 REAL , INTENT(IN) :: DT, BLDT
1502 INTEGER , INTENT(INOUT) :: STEPBL
1504 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), &
1505 INTENT(OUT) :: SMFR3D
1507 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1508 INTENT(INOUT) :: SMOIS,SH2O,TSLB
1510 REAL, DIMENSION( ims:ime, jms:jme ) , &
1511 INTENT(INOUT) :: SNOW, &
1527 #if ( NMM_CORE == 1 )
1535 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
1536 INTENT(INOUT) :: IVGTYP, &
1541 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
1543 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1552 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
1553 massflux_EDKF, entr_EDKF, detr_EDKF &
1554 ,thl_up, thv_up, rt_up &
1555 ,rv_up, rc_up, u_up, v_up &
1558 INTEGER, INTENT(IN) :: mfshconv ! WRF JP
1560 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK
1561 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
1562 CHARACTER(LEN=*), INTENT(IN) :: MMINLU
1563 LOGICAL, INTENT(IN) :: allowed_to_read
1564 INTEGER, INTENT(IN) :: ISURBAN
1565 INTEGER :: isn, isfc
1568 REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
1569 INTENT(OUT) :: te_temf, cf3d_temf !WA
1570 REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
1571 INTENT(OUT) :: wm_temf
1575 INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
1576 REAL, OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
1577 REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
1578 REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
1579 REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
1580 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
1581 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
1582 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
1583 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
1584 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
1585 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
1586 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
1587 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
1588 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
1589 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
1590 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
1591 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
1592 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
1593 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
1594 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
1595 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
1596 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
1597 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
1598 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
1599 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
1600 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
1601 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
1602 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
1603 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
1604 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
1605 REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
1608 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !Optional urban
1609 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !Optional urban
1610 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !Optional urban
1611 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !Optional urban
1612 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !Optional urban
1613 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !Optional urban
1614 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1615 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1616 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1617 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1618 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1619 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1620 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1621 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1622 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1623 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1624 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1625 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1626 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1627 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1628 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1629 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1630 ! REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1631 ! REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1632 ! REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1633 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1634 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1635 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1637 INTEGER , INTENT(IN) :: num_urban_layers
1638 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
1639 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
1640 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
1641 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
1642 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
1643 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
1644 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
1645 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
1646 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
1647 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
1648 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
1649 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
1650 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
1651 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
1652 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
1653 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
1654 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
1655 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
1656 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
1657 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
1658 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
1659 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
1660 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
1661 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
1662 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
1663 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
1664 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
1665 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
1666 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
1667 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
1668 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
1669 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
1670 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
1671 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
1672 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
1674 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1675 ACHFX,ACLHF,ACGRDFLX
1676 ! Optional OML variables
1677 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1678 TML,T0ML,HML,H0ML,HUML,HVML,TMOML
1679 INTEGER, OPTIONAL, INTENT(IN) :: omlcall
1680 REAL, OPTIONAL, INTENT(IN) :: oml_hml0
1681 LOGICAL, INTENT(IN) :: start_of_simulation
1685 #if ( EM_CORE == 1 )
1687 INTEGER :: mynn_closure_level
1690 !-- calculate pbl time step
1692 STEPBL = nint(BLDT*60./DT)
1693 STEPBL = max(STEPBL,1)
1696 IF(PRESENT(ACHFX))THEN
1697 IF(.not.restart)THEN
1709 !-- initialize surface layer scheme
1711 sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1714 CALL sfclayinit( allowed_to_read )
1716 CASE (SFCLAYREVSCHEME)
1717 ! CALL sfclayinit( allowed_to_read )
1720 CALL pxsfclayinit( allowed_to_read )
1723 CALL myjsfcinit(LOWLYR,UST, &
1724 #if ( NMM_CORE == 1 )
1732 ids, ide, jds, jde, kds, kde, &
1733 ims, ime, jms, jme, kms, kme, &
1734 its, ite, jts, jte, kts, kte )
1737 CASE (QNSESFCSCHEME)
1738 CALL qnsesfcinit(LOWLYR,UST, &
1739 #if ( NMM_CORE == 1 )
1747 ids, ide, jds, jde, kds, kde, &
1748 ims, ime, jms, jme, kms, kme, &
1749 its, ite, jts, jte, kts, kte )
1753 CALL myjsfcinit(LOWLYR,UST, &
1754 #if ( NMM_CORE == 1 )
1762 ids, ide, jds, jde, kds, kde, &
1763 ims, ime, jms, jme, kms, kme, &
1764 its, ite, jts, jte, kts, kte )
1767 CASE (GFDLSFCSCHEME)
1768 CALL myjsfcinit(LOWLYR,UST, &
1773 ids, ide, jds, jde, kds, kde, &
1774 ims, ime, jms, jme, kms, kme, &
1775 its, ite, jts, jte, kts, kte )
1779 #if ( EM_CORE == 1 )
1782 CASE (MYNNSFCSCHEME)
1784 CALL mynn_sf_init_driver(allowed_to_read)
1788 CASE (TEMFSFCSCHEME)
1789 CALL wrf_debug( 100, 'calling temfsfclayinit' )
1790 CALL temfsfclayinit( restart, allowed_to_read , &
1792 ids, ide, jds, jde, kds, kde, &
1793 ims, ime, jms, jme, kms, kme, &
1794 its, ite, jts, jte, kts, kte )
1799 END SELECT sfclay_select
1802 !-- initialize surface scheme
1804 sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1808 CALL slabinit(TSK,TMN, &
1809 TSLB,ZS,DZS,num_soil_layers, &
1810 allowed_to_read ,start_of_simulation ,&
1811 ids, ide, jds, jde, kds, kde, &
1812 ims, ime, jms, jme, kms, kme, &
1813 its, ite, jts, jte, kts, kte )
1817 CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1818 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW, &
1819 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP, &
1823 ids,ide, jds,jde, kds,kde, &
1824 ims,ime, jms,jme, kms,kme, &
1825 its,ite, jts,jte, kts,kte )
1829 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1830 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1831 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1833 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1834 num_soil_layers, restart, &
1836 ids,ide, jds,jde, kds,kde, &
1837 ims,ime, jms,jme, kms,kme, &
1838 its,ite, jts,jte, kts,kte )
1841 IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1843 IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1845 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers, & !urban
1847 ! num_roof_layers,num_wall_layers,road_soil_layers) !urban
1850 CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban
1851 ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban
1852 ! num_roof_layers,num_wall_layers,num_road_layers, & !urban
1853 restart,sf_urban_physics, & !urban
1854 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban
1855 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban
1856 TRL_URB3D,TBL_URB3D,TGL_URB3D, & !urban
1857 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D, & !urban
1858 num_urban_layers, & !urban
1859 TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban
1860 TLEV_URB3D,QLEV_URB3D, & !urban
1861 TW1LEV_URB3D,TW2LEV_URB3D, & !urban
1862 TGLEV_URB3D,TFLEV_URB3D, & !urban
1863 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !urban
1864 SFVENT_URB3D,LFVENT_URB3D, & !urban
1865 SFWIN1_URB3D,SFWIN2_URB3D, & !urban
1866 SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban
1867 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !multi-layer urban
1868 A_E_BEP,B_U_BEP,B_V_BEP, & !multi-layer urban
1869 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban
1870 DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban
1871 FRC_URB2D, UTYPE_URB2D) !urban
1873 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1878 CALL NOAHMP_INIT(MMINLU, SNOW,SNOWH,CANWAT,ISLTYP, &
1879 TSLB,SMOIS,SH2O,DZS, FNDSOILW, FNDSNOWH, &
1880 TSK,isnowxy ,tvxy ,tgxy ,canicexy , &
1881 canliqxy ,eahxy ,tahxy ,cmxy ,chxy , &
1882 fwetxy ,sneqvoxy ,alboldxy ,qsnowxy ,wslakexy ,zwtxy ,waxy , &
1883 wtxy ,tsnoxy ,zsnsoxy ,snicexy ,snliqxy ,lfmassxy ,rtmassxy , &
1884 stmassxy ,woodxy ,stblcpxy ,fastcpxy ,xsaixy , &
1885 t2mvxy ,t2mbxy ,chstarxy , &
1886 num_soil_layers, restart, &
1888 ids,ide, jds,jde, kds,kde, &
1889 ims,ime, jms,jme, kms,kme, &
1890 its,ite, jts,jte, kts,kte )
1893 ! if(isfc .ne. 2)CALL wrf_error_fatal &
1894 ! ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1895 CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,MMINLU,XICE, &
1896 mavail,num_soil_layers, config_flags%iswater, &
1898 config_flags%isice, z0, restart, &
1900 config_flags%isice, znt, restart, &
1903 ids,ide, jds,jde, kds,kde, &
1904 ims,ime, jms,jme, kms,kme, &
1905 its,ite, jts,jte, kts,kte )
1908 if(config_flags%num_land_cat .ne. 24) CALL wrf_error_fatal &
1909 ( 'module_physics_init: 24 cat USGS must be used with PX LSM option' )
1910 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1911 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1912 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1914 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1915 num_soil_layers, restart, &
1917 ids,ide, jds,jde, kds,kde, &
1918 ims,ime, jms,jme, kms,kme, &
1919 its,ite, jts,jte, kts,kte )
1921 !--------------fds (06/2010)-----------------------------------
1923 !SSiB only works with sfclay and YSU schemes. Check this here!
1924 if(isfc .ne. 1)CALL wrf_error_fatal &
1925 ( 'module_physics_init: use sfclay scheme with SSiB' )
1926 if(config_flags%bl_pbl_physics .ne. 1)CALL wrf_error_fatal &
1927 ( 'module_physics_init: use ysu scheme with SSiB' )
1928 ! Add radiation scheme 4 (RRTMg) for SSiB, By Zhenxin 2011-06-20 ************************
1929 if(config_flags%ra_lw_physics .eq. 2 .or. config_flags%ra_lw_physics .gt. 4)CALL wrf_error_fatal &
1930 ( 'module_physics_init: SSiB only works with rrtm, cam scheme or rrtmg scheme (lw_phys=1,3,4)' )
1931 if(config_flags%ra_sw_physics .eq. 2 .or. config_flags%ra_sw_physics .gt. 4)CALL wrf_error_fatal &
1932 ( 'module_physics_init: SSiB only works with rrtm, cam scheme or rrtmg scheme (sw_phys=1,3,4)' )
1933 ! End of Adding radiation scheme 4 (RRTMg) for SSiB, By Zhenxin 2011-06-20 **************
1934 !--------------------------------------------------------------
1938 END SELECT sfc_select
1940 IF(PRESENT(OMLCALL))THEN
1941 IF (omlcall .EQ. 1) THEN
1942 CALL omlinit(oml_hml0, tsk, &
1943 tml,t0ml,hml,h0ml,huml,hvml,tmoml, &
1944 allowed_to_read, start_of_simulation, &
1945 ids,ide, jds,jde, kds,kde, &
1946 ims,ime, jms,jme, kms,kme, &
1947 its,ite, jts,jte, kts,kte )
1951 !-- initialize pbl scheme
1953 pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1956 if(isfc .ne. 1)CALL wrf_error_fatal &
1957 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1958 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1959 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1960 CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1961 RQCBLTEN,RQIBLTEN,P_QI, &
1962 PARAM_FIRST_SCALAR, &
1965 ids, ide, jds, jde, kds, kde, &
1966 ims, ime, jms, jme, kms, kme, &
1967 its, ite, jts, jte, kts, kte )
1969 if(isfc .ne. 1)CALL wrf_error_fatal &
1970 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1971 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1972 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1973 CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1974 RQCBLTEN,RQIBLTEN,P_QI, &
1975 PARAM_FIRST_SCALAR, &
1978 ids, ide, jds, jde, kds, kde, &
1979 ims, ime, jms, jme, kms, kme, &
1980 its, ite, jts, jte, kts, kte )
1982 if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
1983 ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
1984 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1985 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1986 CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1987 RQCBLTEN,RQIBLTEN,P_QI, &
1988 PARAM_FIRST_SCALAR, &
1991 ids, ide, jds, jde, kds, kde, &
1992 ims, ime, jms, jme, kms, kme, &
1993 its, ite, jts, jte, kts, kte )
1995 if(isfc .ne. 2)CALL wrf_error_fatal &
1996 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1997 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1998 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1999 CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2000 RQCBLTEN,RQIBLTEN,P_QI, &
2001 PARAM_FIRST_SCALAR, &
2004 ids, ide, jds, jde, kds, kde, &
2005 ims, ime, jms, jme, kms, kme, &
2006 its, ite, jts, jte, kts, kte )
2008 CASE (GFS2011SCHEME)
2009 if(isfc .ne. 2)CALL wrf_error_fatal &
2010 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
2011 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2012 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2013 CALL gfs2011init(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,&
2014 RQCBLTEN,RQIBLTEN,P_QI, &
2015 PARAM_FIRST_SCALAR, &
2018 ids, ide, jds, jde, kds, kde, &
2019 ims, ime, jms, jme, kms, kme, &
2020 its, ite, jts, jte, kts, kte )
2023 if(isfc .ne. 2)CALL wrf_error_fatal &
2024 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
2025 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
2026 CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2027 TKE_PBL,EXCH_H,restart, &
2029 ids, ide, jds, jde, kds, kde, &
2030 ims, ime, jms, jme, kms, kme, &
2031 its, ite, jts, jte, kts, kte )
2034 CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2035 TKE_PBL,EXCH_H,restart, &
2037 ids, ide, jds, jde, kds, kde, &
2038 ims, ime, jms, jme, kms, kme, &
2039 its, ite, jts, jte, kts, kte )
2041 CASE (QNSEPBLSCHEME)
2042 if(isfc .ne. 4)CALL wrf_error_fatal &
2043 ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
2044 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2045 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2046 CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2047 TKE_PBL,EXCH_H,restart, &
2049 ids, ide, jds, jde, kds, kde, &
2050 ims, ime, jms, jme, kms, kme, &
2051 its, ite, jts, jte, kts, kte )
2053 ! IF ( PRESENT (mfshconv) ) THEN
2054 if (mfshconv.EQ.1) &
2055 CALL mfshconvpblinit( massflux_EDKF, entr_EDKF, detr_EDKF &
2056 ,thl_up, thv_up, rt_up &
2057 ,rv_up, rc_up, u_up, v_up &
2058 ,frac_up, restart, &
2060 ids, ide, jds, jde, kds, kde, &
2061 ims, ime, jms, jme, kms, kme, &
2062 its, ite, jts, jte, kts, kte )
2065 CASE (QNSEPBL09SCHEME)
2066 if(isfc .ne. 4)CALL wrf_error_fatal &
2067 ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
2068 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2069 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2070 CALL qnsepblinit09(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2071 TKE_PBL,EXCH_H,restart, &
2073 ids, ide, jds, jde, kds, kde, &
2074 ims, ime, jms, jme, kms, kme, &
2075 its, ite, jts, jte, kts, kte )
2079 if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
2080 ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
2081 CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2082 TKE_PBL,EXCH_H,restart, &
2084 ids, ide, jds, jde, kds, kde, &
2085 ims, ime, jms, jme, kms, kme, &
2086 its, ite, jts, jte, kts, kte )
2087 CASE (CAMUWPBLSCHEME)
2088 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2089 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2090 CALL camuwpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2091 restart,TKE_PBL,config_flags%grid_id, &
2092 ids, ide, jds, jde, kds, kde, &
2093 ims, ime, jms, jme, kms, kme, &
2094 its, ite, jts, jte, kts, kte )
2097 #if ( EM_CORE == 1 )
2101 CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
2102 IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
2103 ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
2104 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2105 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2107 SELECT CASE(config_flags%bl_pbl_physics)
2109 CASE(MYNNPBLSCHEME2)
2110 mynn_closure_level=2
2112 CASE(MYNNPBLSCHEME3)
2113 mynn_closure_level=3
2119 CALL mynn_bl_init_driver(&
2120 &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
2121 &,restart,allowed_to_read,mynn_closure_level &
2122 &,IDS,IDE,JDS,JDE,KDS,KDE &
2123 &,IMS,IME,JMS,JME,KMS,KME &
2124 &,ITS,ITE,JTS,JTE,KTS,KTE)
2126 CASE (TEMFPBLSCHEME)
2127 ! if(isfc .ne. 0)CALL wrf_error_fatal &
2128 ! ( 'module_physics_init: use sfclay scheme = 0 for this pbl option' )
2129 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2130 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2131 IF ( PRESENT( te_temf ) .AND. PRESENT( cf3d_temf )) THEN
2132 CALL temfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2133 RQCBLTEN,RQIBLTEN,P_QI, &
2134 PARAM_FIRST_SCALAR, &
2137 te_temf,cf3d_temf, & ! WA
2138 ids, ide, jds, jde, kds, kde, &
2139 ims, ime, jms, jme, kms, kme, &
2140 its, ite, jts, jte, kts, kte )
2142 CALL wrf_error_fatal ( 'arguments not present for calling TEMF scheme' )
2149 END SELECT pbl_select
2152 END SUBROUTINE bl_init
2154 !==================================================================
2155 SUBROUTINE cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
2156 RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,&
2157 NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
2158 CLDEFI,LOWLYR,MASS_FLUX, &
2160 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
2161 APR_CAPMA,APR_CAPME,APR_CAPMI, &
2162 cugd_tten,cugd_ttens,cugd_qvten, &
2163 cugd_qvtens,cugd_qcten, &
2164 allowed_to_read, start_of_simulation, &
2165 ids, ide, jds, jde, kds, kde, &
2166 ims, ime, jms, jme, kms, kme, &
2167 its, ite, jts, jte, kts, kte )
2168 !------------------------------------------------------------------
2172 USE module_cu_gd, ONLY : GDINIT
2173 USE module_cu_g3, ONLY : G3INIT
2176 USE module_cu_camzm_driver, ONLY : zm_conv_init
2178 USE module_cu_tiedtke
2179 !------------------------------------------------------------------
2181 !------------------------------------------------------------------
2182 TYPE (grid_config_rec_type) :: config_flags
2183 LOGICAL , INTENT(IN) :: restart
2186 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2187 ims, ime, jms, jme, kms, kme, &
2188 its, ite, jts, jte, kts, kte
2190 REAL , INTENT(IN) :: DT, CUDT
2191 LOGICAL , INTENT(IN) :: start_of_simulation
2192 LOGICAL , INTENT(IN) :: allowed_to_read
2193 INTEGER , INTENT(INOUT) :: STEPCU
2195 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
2196 RUCUTEN, RVCUTEN, RTHCUTEN, &
2197 RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
2198 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
2199 cugd_tten,cugd_ttens,cugd_qvten, &
2200 cugd_qvtens,cugd_qcten
2202 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
2204 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2207 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
2209 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
2211 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2213 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX, &
2214 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
2215 APR_CAPMA,APR_CAPME,APR_CAPMI
2217 INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
2221 INTEGER :: i,j,itf,jtf
2223 !--------------------------------------------------------------------
2225 !-- calculate cumulus parameterization time step
2230 STEPCU = nint(CUDT*60./DT)
2231 STEPCU = max(STEPCU,1)
2235 IF(start_of_simulation)THEN
2244 !-- deep convection and hybrid deep-shallow convection schemes
2245 cps_select: SELECT CASE(config_flags%cu_physics)
2248 CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
2249 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
2250 PARAM_FIRST_SCALAR,restart, &
2252 ids, ide, jds, jde, kds, kde, &
2253 ims, ime, jms, jme, kms, kme, &
2254 its, ite, jts, jte, kts, kte )
2257 CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
2258 CLDEFI,LOWLYR,cp,r_d,restart, &
2260 ids, ide, jds, jde, kds, kde, &
2261 ims, ime, jms, jme, kms, kme, &
2262 its, ite, jts, jte, kts, kte )
2265 CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
2266 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
2267 SVP1,SVP2,SVP3,SVPT0, &
2268 PARAM_FIRST_SCALAR,restart, &
2270 ids, ide, jds, jde, kds, kde, &
2271 ims, ime, jms, jme, kms, kme, &
2272 its, ite, jts, jte, kts, kte )
2274 CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2275 MASS_FLUX,cp,restart, &
2276 P_QC,P_QI,PARAM_FIRST_SCALAR, &
2278 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
2279 APR_CAPMA,APR_CAPME,APR_CAPMI, &
2281 ids, ide, jds, jde, kds, kde, &
2282 ims, ime, jms, jme, kms, kme, &
2283 its, ite, jts, jte, kts, kte )
2285 CALL nsasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2287 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2289 ids, ide, jds, jde, kds, kde, &
2290 ims, ime, jms, jme, kms, kme, &
2291 its, ite, jts, jte, kts, kte )
2293 #if ( EM_CORE == 1 )
2295 CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2296 MASS_FLUX,cp,restart, &
2297 P_QC,P_QI,PARAM_FIRST_SCALAR, &
2299 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
2300 APR_CAPMA,APR_CAPME,APR_CAPMI, &
2301 cugd_tten,cugd_ttens,cugd_qvten, &
2302 cugd_qvtens,cugd_qcten, &
2304 ids, ide, jds, jde, kds, kde, &
2305 ims, ime, jms, jme, kms, kme, &
2306 its, ite, jts, jte, kts, kte )
2309 CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2310 RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
2311 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2313 ids, ide, jds, jde, kds, kde, &
2314 ims, ime, jms, jme, kms, kme, &
2315 its, ite, jts, jte, kts, kte )
2318 CALL osasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2319 RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
2320 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2322 ids, ide, jds, jde, kds, kde, &
2323 ims, ime, jms, jme, kms, kme, &
2324 its, ite, jts, jte, kts, kte )
2327 CALL zm_conv_init(rucuten, rvcuten, rthcuten, rqvcuten, &
2328 rqccuten, rqicuten, &
2329 p_qc, p_qi, param_first_scalar, &
2331 ids, ide, jds, jde, kds, kde, &
2332 ims, ime, jms, jme, kms, kme, &
2333 its, ite, jts, jte, kts, kte )
2335 ! Tiedtke Scheme - ZCX&YQW
2336 CASE (TIEDTKESCHEME)
2337 CALL tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2339 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2341 ids, ide, jds, jde, kds, kde, &
2342 ims, ime, jms, jme, kms, kme, &
2343 its, ite, jts, jte, kts, kte )
2347 END SELECT cps_select
2349 END SUBROUTINE cu_init
2351 !==================================================================
2352 SUBROUTINE shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
2353 RQVSHTEN,RQRSHTEN,RQCSHTEN, &
2354 RQSSHTEN,RQISHTEN,RQGSHTEN, &
2355 NCA,RAINC,RAINCV,config_flags,restart, &
2356 allowed_to_read, start_of_simulation, &
2357 ids, ide, jds, jde, kds, kde, &
2358 ims, ime, jms, jme, kms, kme, &
2359 its, ite, jts, jte, kts, kte )
2360 !------------------------------------------------------------------
2361 USE uwshcu, ONLY: init_uwshcu
2362 USE physconst, ONLY: cpair, gravit, latice, latvap, mwdry, mwh2o, &
2364 USE shr_kind_mod, ONLY: r8 => shr_kind_r8
2366 !------------------------------------------------------------------
2368 !------------------------------------------------------------------
2369 TYPE (grid_config_rec_type) :: config_flags
2370 LOGICAL , INTENT(IN) :: restart
2373 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2374 ims, ime, jms, jme, kms, kme, &
2375 its, ite, jts, jte, kts, kte
2377 REAL , INTENT(IN) :: DT, CUDT
2378 LOGICAL , INTENT(IN) :: start_of_simulation
2379 LOGICAL , INTENT(IN) :: allowed_to_read
2380 INTEGER , INTENT(INOUT) :: STEPCU
2382 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
2383 RUSHTEN, RVSHTEN, RTHSHTEN, &
2384 RQVSHTEN, RQCSHTEN, RQRSHTEN, RQISHTEN, RQSSHTEN, RQGSHTEN
2386 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
2388 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2392 INTEGER :: i,j,itf,jtf
2394 !--------------------------------------------------------------------
2396 ! Some of this stuff is redundant with deep convection, but redo it
2397 ! in case deep is turned off...
2399 !-- calculate cumulus parameterization time step
2404 STEPCU = nint(CUDT*60./DT)
2405 STEPCU = max(STEPCU,1)
2409 IF(start_of_simulation)THEN
2418 !-- independent shallow convection schemes
2419 shcu_select: SELECT CASE(config_flags%shcu_physics)
2421 CASE (CAMUWSHCUSCHEME)
2422 CALL init_uwshcu(r8,latvap,cpair,latice,zvir,rair,gravit, &
2424 rushten, rvshten, rthshten, rqvshten, &
2425 rqcshten, rqrshten, rqishten, rqsshten, rqgshten, &
2426 p_qc, p_qr, p_qi, p_qs, p_qg, &
2427 config_flags%bl_pbl_physics, param_first_scalar, restart, &
2428 config_flags%grid_id, &
2429 ids, ide, jds, jde, kds, kde, &
2430 ims, ime, jms, jme, kms, kme, &
2431 its, ite, jts, jte, kts, kte )
2435 END SELECT shcu_select
2437 END SUBROUTINE shcu_init
2439 !==================================================================
2440 SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
2442 MPDT, DT, DX, DY, LOWLYR, & ! for eta mp
2443 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, & ! for eta mp
2444 mp_restart_state,tbpvs_state,tbpvs0_state, & ! eta mp
2445 allowed_to_read, start_of_simulation, &
2446 ids, ide, jds, jde, kds, kde, &
2447 ims, ime, jms, jme, kms, kme, &
2448 its, ite, jts, jte, kts, kte )
2449 !------------------------------------------------------------------
2453 USE module_mp_etanew
2454 USE module_mp_etaold
2458 USE module_mp_thompson
2459 USE module_mp_morr_two_moment
2460 USE module_mp_milbrandt2mom
2461 ! USE module_mp_milbrandt3mom
2465 USE module_mp_nssl_2mom
2467 !------------------------------------------------------------------
2469 !------------------------------------------------------------------
2471 TYPE (grid_config_rec_type) :: config_flags
2472 LOGICAL , INTENT(IN) :: restart
2473 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
2474 REAL , INTENT(IN) :: MPDT, DT, DX, DY
2475 LOGICAL , INTENT(IN) :: start_of_simulation
2477 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2478 ims, ime, jms, jme, kms, kme, &
2479 its, ite, jts, jte, kts, kte
2481 INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT) :: LOWLYR
2482 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC,SNOWNC,GRAUPELNC
2483 REAL, DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
2484 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
2485 REAL , DIMENSION(:) ,INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
2486 LOGICAL , INTENT(IN) :: allowed_to_read
2489 INTEGER :: i, j, itf, jtf
2492 adv_moist_cond = .true.
2496 IF(start_of_simulation)THEN
2506 mp_select: SELECT CASE(config_flags%mp_physics)
2508 CASE (KESSLERSCHEME)
2511 CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2513 CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2515 CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2517 adv_moist_cond = .false.
2518 CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart, &
2519 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2520 mp_restart_state,tbpvs_state,tbpvs0_state,&
2522 ids, ide, jds, jde, kds, kde, &
2523 ims, ime, jms, jme, kms, kme, &
2524 its, ite, jts, jte, kts, kte )
2527 CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart, &
2528 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2530 ids, ide, jds, jde, kds, kde, &
2531 ims, ime, jms, jme, kms, kme, &
2532 its, ite, jts, jte, kts, kte )
2535 ! Cycling the WRF forecast with moving nests will cause this initialization to be
2536 ! called for each nest move. This is potentially very computationally expensive.
2537 IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
2539 CASE (MORR_TWO_MOMENT)
2540 CALL morr_two_moment_init
2541 CASE (MILBRANDT2MOM)
2542 CALL milbrandt2mom_init
2543 ! CASE (MILBRANDT3MOM)
2544 ! CALL milbrandt3mom_init
2546 CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2548 CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2551 CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme)
2553 CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme)
2556 adv_moist_cond = .false.
2557 CALL etaoldinit (MPDT,DT,DX,DY,LOWLYR,restart, &
2558 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2559 mp_restart_state,tbpvs_state,tbpvs0_state,&
2561 ids, ide, jds, jde, kds, kde, &
2562 ims, ime, jms, jme, kms, kme, &
2563 its, ite, jts, jte, kts, kte )
2567 END SELECT mp_select
2569 END SUBROUTINE mp_init
2571 #if ( EM_CORE == 1 )
2572 !==========================================================
2573 SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
2574 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
2575 config_flags,restart, &
2577 ids, ide, jds, jde, kds, kde, &
2578 ims, ime, jms, jme, kms, kme, &
2579 its, ite, jts, jte, kts, kte )
2582 !--------------------------------------------------------------------
2583 USE module_fdda_psufddagd
2584 USE module_fdda_spnudging, ONLY : fddaspnudginginit
2585 !--------------------------------------------------------------------
2587 !--------------------------------------------------------------------
2588 TYPE (grid_config_rec_type) :: config_flags
2589 LOGICAL , INTENT(IN) :: restart
2591 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2592 ims, ime, jms, jme, kms, kme, &
2593 its, ite, jts, jte, kts, kte
2595 REAL , INTENT(IN) :: DT, FGDT
2596 INTEGER , INTENT(IN) :: id
2597 INTEGER , INTENT(INOUT) :: STEPFG
2598 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2604 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
2606 LOGICAL, INTENT(IN) :: allowed_to_read
2607 !--------------------------------------------------------------------
2609 !-- calculate pbl time step
2611 STEPFG = nint(FGDT*60./DT)
2612 STEPFG = max(STEPFG,1)
2615 !-- initialize fdda scheme
2617 fdda_select: SELECT CASE(config_flags%grid_fdda)
2620 CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
2621 config_flags%run_hours, &
2622 config_flags%if_no_pbl_nudging_uv, &
2623 config_flags%if_no_pbl_nudging_t, &
2624 config_flags%if_no_pbl_nudging_q, &
2625 config_flags%if_zfac_uv, &
2626 config_flags%k_zfac_uv, &
2627 config_flags%if_zfac_t, &
2628 config_flags%k_zfac_t, &
2629 config_flags%if_zfac_q, &
2630 config_flags%k_zfac_q, &
2632 config_flags%gt, config_flags%gq, &
2633 config_flags%if_ramping, config_flags%dtramp_min, &
2634 config_flags%auxinput10_end_h, &
2635 config_flags%grid_sfdda, &
2636 config_flags%guv_sfc, &
2637 config_flags%gt_sfc, &
2638 config_flags%gq_sfc, &
2639 restart, allowed_to_read, &
2640 ids, ide, jds, jde, kds, kde, &
2641 ims, ime, jms, jme, kms, kme, &
2642 its, ite, jts, jte, kts, kte )
2645 CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
2646 config_flags%run_hours, &
2647 config_flags%if_no_pbl_nudging_uv, &
2648 config_flags%if_no_pbl_nudging_t, &
2649 config_flags%if_no_pbl_nudging_ph, &
2650 config_flags%if_zfac_uv, &
2651 config_flags%k_zfac_uv, &
2652 config_flags%dk_zfac_uv, &
2653 config_flags%if_zfac_t, &
2654 config_flags%k_zfac_t, &
2655 config_flags%dk_zfac_t, &
2656 config_flags%if_zfac_ph, &
2657 config_flags%k_zfac_ph, &
2658 config_flags%dk_zfac_ph, &
2660 config_flags%gt, config_flags%gph, &
2661 config_flags%if_ramping, config_flags%dtramp_min, &
2662 config_flags%auxinput9_end_h, &
2663 config_flags%xwavenum,config_flags%ywavenum, &
2664 restart, allowed_to_read, &
2665 ids, ide, jds, jde, kds, kde, &
2666 ims, ime, jms, jme, kms, kme, &
2667 its, ite, jts, jte, kts, kte )
2671 END SELECT fdda_select
2673 END SUBROUTINE fg_init
2675 !-------------------------------------------------------------------
2676 SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid, &
2677 idynin, dtramp, fdaend, restart, &
2678 obs_twindo_cg, obs_twindo, itimestep, &
2682 sfc_scheme_horiz, sfc_scheme_vert, &
2684 sfcfact, sfcfacr, dpsmx, &
2685 nudge_wind, nudge_temp, nudge_mois, &
2686 nudgezfullr1_uv, nudgezrampr1_uv, &
2687 nudgezfullr2_uv, nudgezrampr2_uv, &
2688 nudgezfullr4_uv, nudgezrampr4_uv, &
2689 nudgezfullr1_t, nudgezrampr1_t, &
2690 nudgezfullr2_t, nudgezrampr2_t, &
2691 nudgezfullr4_t, nudgezrampr4_t, &
2692 nudgezfullr1_q, nudgezrampr1_q, &
2693 nudgezfullr2_q, nudgezrampr2_q, &
2694 nudgezfullr4_q, nudgezrampr4_q, &
2695 nudgezfullmin, nudgezrampmin, nudgezmax, &
2697 start_year, start_month, start_day, &
2698 start_hour, start_minute, start_second, &
2702 ids, ide, jds, jde, kds, kde, &
2703 ims, ime, jms, jme, kms, kme, &
2704 its, ite, jts, jte, kts, kte )
2706 !--------------------------------------------------------------------
2708 USE module_fddaobs_rtfdda
2710 !--------------------------------------------------------------------
2712 !--------------------------------------------------------------------
2713 INTEGER , INTENT(IN) :: maxdom
2714 INTEGER , INTENT(IN) :: obs_nudge_opt(maxdom)
2715 INTEGER , INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
2716 ims,ime, jms,jme, kms,kme, &
2717 its,ite, jts,jte, kts,kte
2718 INTEGER , INTENT(IN) :: inest
2719 INTEGER , INTENT(IN) :: parid(maxdom)
2720 INTEGER , INTENT(IN) :: idynin ! flag for dynamic initialization
2721 REAL , INTENT(IN) :: dtramp ! time period for ramping (idynin)
2722 REAL , INTENT(IN) :: fdaend(maxdom) ! nudging end time for domain (min)
2723 LOGICAL , INTENT(IN) :: restart
2724 REAL , INTENT(IN) :: obs_twindo_cg ! twindo on course grid
2725 REAL , INTENT(IN) :: obs_twindo
2726 INTEGER , INTENT(IN) :: itimestep
2727 INTEGER , INTENT(IN) :: no_pbl_nudge_uv(maxdom) ! flags for no wind nudging in pbl
2728 INTEGER , INTENT(IN) :: no_pbl_nudge_t(maxdom) ! flags for no temperature nudging in pbl
2729 INTEGER , INTENT(IN) :: no_pbl_nudge_q(maxdom) ! flags for no moisture nudging in pbl
2730 INTEGER , INTENT(IN) :: sfc_scheme_horiz ! horizontal spreading scheme for surf obs (wrf or orig mm5)
2731 INTEGER , INTENT(IN) :: sfc_scheme_vert ! vertical spreading scheme for surf obs (orig or regime vif)
2732 REAL , INTENT(IN) :: maxsnd_gap ! max allowed pressure gap in soundings for interp (centibars)
2733 REAL , INTENT(IN) :: sfcfact ! scale factor applied to time window for surface obs
2734 REAL , INTENT(IN) :: sfcfacr ! scale fac applied to horiz rad of infl for sfc obs
2735 REAL , INTENT(IN) :: dpsmx ! max pressure change allowed within horiz. infl. range
2736 INTEGER , INTENT(IN) :: nudge_wind(maxdom) ! wind-nudging flag
2737 INTEGER , INTENT(IN) :: nudge_temp(maxdom) ! temperature-nudging flag
2738 INTEGER , INTENT(IN) :: nudge_mois(maxdom) ! moisture-nudging flag
2739 REAL , INTENT(IN) :: nudgezfullr1_uv ! vert infl fcn, regime=1 full-wt hght, winds
2740 REAL , INTENT(IN) :: nudgezrampr1_uv ! vert infl fcn, regime=1 ramp down hght, winds
2741 REAL , INTENT(IN) :: nudgezfullr2_uv ! vert infl fcn, regime=2 full-wt hght, winds
2742 REAL , INTENT(IN) :: nudgezrampr2_uv ! vert infl fcn, regime=2 ramp down hght, winds
2743 REAL , INTENT(IN) :: nudgezfullr4_uv ! vert infl fcn, regime=4 full-wt hght, winds
2744 REAL , INTENT(IN) :: nudgezrampr4_uv ! vert infl fcn, regime=4 ramp down hght, winds
2745 REAL , INTENT(IN) :: nudgezfullr1_t ! vert infl fcn, regime=1 full-wt hght, temp
2746 REAL , INTENT(IN) :: nudgezrampr1_t ! vert infl fcn, regime=1 ramp down hght, temp
2747 REAL , INTENT(IN) :: nudgezfullr2_t ! vert infl fcn, regime=2 full-wt hght, temp
2748 REAL , INTENT(IN) :: nudgezrampr2_t ! vert infl fcn, regime=2 ramp down hght, temp
2749 REAL , INTENT(IN) :: nudgezfullr4_t ! vert infl fcn, regime=4 full-wt hght, temp
2750 REAL , INTENT(IN) :: nudgezrampr4_t ! vert infl fcn, regime=4 ramp down hght, temp
2751 REAL , INTENT(IN) :: nudgezfullr1_q ! vert infl fcn, regime=1 full-wt hght, mois
2752 REAL , INTENT(IN) :: nudgezrampr1_q ! vert infl fcn, regime=1 ramp down hght, mois
2753 REAL , INTENT(IN) :: nudgezfullr2_q ! vert infl fcn, regime=2 full-wt hght, mois
2754 REAL , INTENT(IN) :: nudgezrampr2_q ! vert infl fcn, regime=2 ramp down hght, mois
2755 REAL , INTENT(IN) :: nudgezfullr4_q ! vert infl fcn, regime=4 full-wt hght, mois
2756 REAL , INTENT(IN) :: nudgezrampr4_q ! vert infl fcn, regime=4 ramp down hght, mois
2757 REAL , INTENT(IN) :: nudgezfullmin ! min dpth thru which vert infl fcn remains 1.0 (m)
2758 REAL , INTENT(IN) :: nudgezrampmin ! min dpth thru which vif decreases 1.0 to 0.0 (m)
2759 REAL , INTENT(IN) :: nudgezmax ! max dpth in which vif is nonzero (m)
2760 REAL , INTENT(IN) :: xlat ( ims:ime, jms:jme ) ! latitudes on mass-point grid
2761 REAL , INTENT(IN) :: xlong( ims:ime, jms:jme ) ! longitudes on mass-point grid
2762 INTEGER , INTENT(INOUT) :: start_year
2763 INTEGER , INTENT(INOUT) :: start_month
2764 INTEGER , INTENT(INOUT) :: start_day
2765 INTEGER , INTENT(INOUT) :: start_hour
2766 INTEGER , INTENT(INOUT) :: start_minute
2767 INTEGER , INTENT(INOUT) :: start_second
2768 REAL , INTENT(IN) :: p00 ! base state pressure
2769 REAL , INTENT(IN) :: t00 ! base state temperature
2770 REAL , INTENT(IN) :: tlp ! base state lapse rate
2771 REAL , INTENT(IN) :: znu( kms:kme ) ! eta values on half (mass) levels
2772 REAL , INTENT(IN) :: p_top ! pressure at top of model
2773 TYPE(fdob_type), INTENT(INOUT) :: fdob
2775 INTEGER :: e_sn ! ending north-south grid index
2776 LOGICAL :: ipf_init ! print warnings detected at initialzn
2777 !--------------------------------------------------------------------
2778 !-- initialize fdda obs-nudging scheme
2780 IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
2783 CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid, &
2784 idynin, dtramp, fdaend, restart, &
2786 obs_twindo, itimestep, &
2790 sfc_scheme_horiz, sfc_scheme_vert, &
2792 sfcfact, sfcfacr, dpsmx, &
2793 nudge_wind, nudge_temp, nudge_mois, &
2794 nudgezfullr1_uv, nudgezrampr1_uv, &
2795 nudgezfullr2_uv, nudgezrampr2_uv, &
2796 nudgezfullr4_uv, nudgezrampr4_uv, &
2797 nudgezfullr1_t, nudgezrampr1_t, &
2798 nudgezfullr2_t, nudgezrampr2_t, &
2799 nudgezfullr4_t, nudgezrampr4_t, &
2800 nudgezfullr1_q, nudgezrampr1_q, &
2801 nudgezfullr2_q, nudgezrampr2_q, &
2802 nudgezfullr4_q, nudgezrampr4_q, &
2803 nudgezfullmin, nudgezrampmin, nudgezmax, &
2805 start_year, start_month, start_day, &
2806 start_hour, start_minute, start_second, &
2810 ids,ide, jds,jde, kds,kde, &
2811 ims,ime, jms,jme, kms,kme, &
2812 its,ite, jts,jte, kts,kte)
2814 END SUBROUTINE fdob_init
2817 !--------------------------------------------------------------------
2818 SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
2820 kds,kde,kms,kme,kts,kte)
2823 INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
2824 REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
2825 REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
2826 REAL , INTENT(IN) :: p_top
2827 REAL , INTENT(OUT) :: pptop
2828 TYPE (grid_config_rec_type) :: config_flags
2829 LOGICAL , INTENT(IN) :: allowed_to_read
2831 REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
2834 IF(zf(kde/2) .GT. 1.0)THEN
2835 ! Height levels assumed (zeta coordinate)
2836 ! Convert to sigma using standard atmosphere for pressure-height relation
2837 ! constants for standard atmosphere definition
2844 tstrat=ts+gamma*ztrop
2845 ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
2852 p=ps*(t/ts)**(-g/(gamma*r))
2855 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2861 sf(k)=(p-ptop)/(ps-ptop)
2864 z=0.5*(zf(k)+zf(k-1))
2867 p=ps*(t/ts)**(-g/(gamma*r))
2870 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2872 sh(k-1)=(p-ptop)/(ps-ptop)
2877 ! Levels are already sigma/eta
2879 ! sf(k)=zf(kde-k+kds)
2880 ! if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
2882 if(k .ne. kde)sh(k)=zh(k)
2888 END SUBROUTINE z2sigma
2890 END MODULE module_physics_init