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
20 !=================================================================
21 SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, &
22 p_top, TSK,RADT,BLDT,CUDT,MPDT, &
23 RTHCUTEN, RQVCUTEN, RQRCUTEN, &
24 RQCCUTEN, RQSCUTEN, RQICUTEN, &
25 RUBLTEN,RVBLTEN,RTHBLTEN, &
26 RQVBLTEN,RQCBLTEN,RQIBLTEN, &
27 RTHRATEN,RTHRATENLW,RTHRATENSW, &
28 STEPBL,STEPRA,STEPCU, &
29 W0AVG, RAINNC, RAINC, RAINCV, RAINNCV, &
34 CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new
36 landuse_ISICE, landuse_LUCATS, &
37 landuse_LUSEAS, landuse_ISN, &
39 XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
40 levsiz, n_ozmixm, n_aerosolc, paerlev, &
41 TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_MYJ, &
46 EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
47 TSLB,ZS,DZS,num_soil_layers,warm_rain, &
49 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
50 APR_CAPMA,APR_CAPME,APR_CAPMI, &
51 XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV, &
52 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
53 ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS, &
54 SH2O, SNOWH, SMFR3D, & ! temporary
56 DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
57 mp_restart_state,tbpvs_state,tbpvs0_state,&
58 allowed_to_read, moved, start_of_simulation,&
60 ids, ide, jds, jde, kds, kde, &
61 ims, ime, jms, jme, kms, kme, &
62 its, ite, jts, jte, kts, kte, &
64 ozmixm,pin, & ! Optional
65 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
66 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, & ! Optional
67 RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, & ! Optional
68 FGDT,STEPFG, & ! Optional
69 cugd_tten,cugd_ttens,cugd_qvten, & ! Optional
70 cugd_qvtens,cugd_qcten, & ! Optional
71 ! num_roof_layers,num_wall_layers, & !Optional urban
72 ! num_road_layers, & !Optional urban
73 DZR, DZB, DZG, & !Optional urban
74 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D, & !Optional urban
75 QC_URB2D, XXXR_URB2D,XXXB_URB2D, & !Optional urban
76 XXXG_URB2D, XXXC_URB2D, & !Optional urban
77 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
78 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
79 TS_URB2D, FRC_URB2D, UTYPE_URB2D, & !Optional urban
80 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
81 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
82 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
83 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
84 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
85 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
86 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
87 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
88 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
89 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
90 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
91 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
92 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
93 TML,T0ML,HML,H0ML,HUML,HVML,TMOML, & !Optional oml
94 itimestep, & !Optional obs fdda
96 fdob, & !Optional obs fdda
98 t00, p00, tlp, & !for obs-nudging
99 TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update, &
100 ACHFX,ACLHF,ACGRDFLX &
102 ,te_temf & ! WA 12/21/09
103 ,cf3d_temf & ! WA 9/27/10
106 !-----------------------------------------------------------------
109 USE module_wind_generic
110 USE module_wind_fitch
112 !-----------------------------------------------------------------
113 TYPE (grid_config_rec_type) :: config_flags
115 INTEGER , INTENT(IN) :: id
116 INTEGER , INTENT(IN) ,OPTIONAL :: tmn_update
117 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
118 ! LOGICAL , INTENT (IN) :: FNDSOILW, FNDSNOWH
119 LOGICAL, PARAMETER :: FNDSOILW=.true., FNDSNOWH=.true.
120 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
121 ims, ime, jms, jme, kms, kme, &
122 its, ite, jts, jte, kts, kte
124 INTEGER , INTENT(IN) :: num_soil_layers
125 INTEGER , INTENT(IN) :: lagday
126 INTEGER , INTENT(OUT) ,OPTIONAL :: nyear, nday
128 LOGICAL, INTENT(IN) :: start_of_simulation
129 REAL, INTENT(IN) :: DT, p_top, DX, DY
130 LOGICAL, INTENT(IN) :: restart
131 REAL, INTENT(IN) :: RADT,BLDT,CUDT,MPDT
132 REAL, INTENT(IN) :: swrad_scat
134 REAL, DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
135 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
137 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
138 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
140 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
141 INTENT(INOUT) :: OZMIXM
143 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
145 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
146 REAL, DIMENSION(paerlev), OPTIONAL,INTENT(INOUT) :: m_hybi
147 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
148 INTENT(INOUT) :: aerosolc_1, aerosolc_2
150 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
151 INTENT(INOUT) :: SMOIS, SH2O,TSLB
152 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
154 REAL, DIMENSION( ims:ime, jms:jme ) , &
155 INTENT(INOUT) :: SNOW, &
171 REAL, DIMENSION( ims:ime, jms:jme ) , &
172 OPTIONAL, INTENT(INOUT) :: ACHFX, &
176 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
177 INTENT(INOUT) :: IVGTYP, &
182 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
183 RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
185 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
188 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
189 GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK !EMBCK new
190 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: SNOALB
193 REAL, INTENT(IN) :: GMT
195 INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
196 INTEGER , INTENT(IN) :: JULYR, JULDAY
200 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
201 RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, RQSCUTEN, &
204 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
206 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX, &
207 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
208 APR_CAPMA,APR_CAPME,APR_CAPMI
210 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
213 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: &
214 RAINNC, RAINC, RAINCV, RAINNCV
216 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
218 INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
225 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
227 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
228 RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_MYJ
230 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: TKE_PBL
232 REAL, DIMENSION(IMS:IME,JMS:JME,KMS:KME) , INTENT(OUT) :: &
234 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
235 cugd_tten,cugd_ttens,cugd_qvten, &
236 cugd_qvtens,cugd_qcten
237 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
238 XLAND,ZNT,Z0,UST,MOL,LU_INDEX, &
239 PBLH,THC,MAVAIL,HFX,QFX,RAINBL
240 INTEGER , INTENT(INOUT) :: landuse_ISICE, landuse_LUCATS
241 INTEGER , INTENT(INOUT) :: landuse_LUSEAS, landuse_ISN
242 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
244 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
245 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
246 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
247 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
248 REAL, DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
251 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
252 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
253 REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
254 LOGICAL, INTENT(IN) :: allowed_to_read, moved
257 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
258 TML,T0ML,HML,H0ML,HUML,HVML,TMOML
261 REAL, OPTIONAL, INTENT(IN) :: FGDT
262 INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
263 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
264 RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
265 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
269 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !urban
270 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !urban
271 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !urban
272 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !urban
273 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !urban
274 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !urban
276 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
277 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
278 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
279 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
280 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
281 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
282 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
283 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
284 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
286 ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
287 ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
288 ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
289 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
290 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
291 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
293 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
294 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
295 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
296 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
297 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
298 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
299 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
301 INTEGER , INTENT(IN) :: num_urban_layers
302 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
303 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
304 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
305 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
306 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
307 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
308 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
309 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
310 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
311 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
312 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
313 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
314 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
315 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
316 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
317 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
318 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
319 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
320 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
321 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
322 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
323 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
324 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
325 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
326 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
327 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
328 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
329 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
330 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
331 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
332 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
333 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
334 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
335 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
336 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
339 INTEGER, OPTIONAL, INTENT(IN) :: itimestep
341 TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
343 REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp ! for obs-nudging base-state calcn
346 REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
347 INTENT(OUT) :: te_temf, cf3d_temf
351 REAL :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
352 REAL, DIMENSION( kms:kme ) :: sfull, shalf
353 REAL :: obs_twindo_cg, obs_twindo
355 CHARACTER*256 :: MMINLU_loc
356 CHARACTER*80 :: message
360 INTEGER :: sf_urban_physics
366 INTEGER :: i, j, k, itf, jtf, n
369 !-----------------------------------------------------------------
371 sf_urban_physics=config_flags%sf_urban_physics
372 usemonalb=config_flags%usemonalb
373 rdmaxalb=config_flags%rdmaxalb
375 obs_twindo_cg=model_config_rec%obs_twindo(1)
376 obs_twindo=config_flags%obs_twindo
377 oml_hml0=config_flags%oml_hml0
378 omlcall=config_flags%omlcall
381 !-- should be from the namelist
386 CALL wrf_debug(100,'top of phy_init')
388 WRITE(wrf_err_message,*) 'phy_init: start_of_simulation = ',start_of_simulation
389 CALL wrf_debug ( 100, TRIM(wrf_err_message) )
401 if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
404 CALL nl_get_cen_lat(id,cen_lat)
405 CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
406 CALL nl_get_iswater(id,iswater)
407 CALL nl_get_isice(id,isice)
408 CALL nl_get_isurban(id,isurban)
409 CALL nl_get_mminlu( 1, mminlu_loc )
410 CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
411 !-- temporary fix by ww
412 landuse_ISICE = isice
414 ! Added for Wind Turbine parameterization code -- This will only read in an optional
415 ! configuration file with information that will be used by inividual turbine init routines
416 ! as each domain is initialized.
417 IF ( id .EQ. 1 ) THEN
418 CALL init_module_wind_generic
419 CALL init_module_wind_fitch
424 !-- initialize common variables
426 IF ( .NOT. moved ) THEN
432 !-- initialize ust to a small value
441 DO k=kms,kme !wig, 17-May-2006: Added for idealized chem. runs
448 IF(PRESENT(TMN_UPDATE))THEN
449 if(tmn_update.eq.1) then
469 IF(XLAND(i,j) .LT. 1.5)THEN
470 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=ALBLND
472 ALBEDO(i,j)=ALBBCK(i,j)
473 EMISS(i,j)=EMBCK(i,j)
476 #if ! ( NMM_CORE == 1 )
481 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=0.08
482 ALBEDO(i,j)=ALBBCK(i,j)
484 EMISS(i,j)=EMBCK(i,j)
487 #if ! ( NMM_CORE == 1 )
496 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
498 IF(mminlu_loc .ne. ' ')THEN
499 !-- initialize surface properties
501 CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
502 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
503 TRIM ( mminlu_loc ) , &
504 landuse_ISICE, landuse_LUCATS, &
505 landuse_LUSEAS, landuse_ISN, &
506 config_flags%fractional_seaice, &
508 allowed_to_read , usemonalb , &
509 ids, ide, jds, jde, kds, kde, &
510 ims, ime, jms, jme, kms, kme, &
511 its, ite, jts, jte, kts, kte )
516 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
517 !-- zfull/zhalf may be either zeta or eta
518 !-- what is done here depends on coordinate (check this code if adding new coordinates)
519 CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
521 kds,kde,kms,kme,kts,kte)
523 !-- initialize physics
529 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
531 CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW, &
532 RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT, &
533 levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm, &
534 cldfra_old=cldfra_old, & ! Optional
535 ozmixm=ozmixm,pin=pin, & ! Optional
536 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
537 paerlev=paerlev,n_aerosolc=n_aerosolc, &
538 sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top, &
539 config_flags=config_flags,restart=restart, &
540 allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation, &
541 ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, &
542 ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, &
543 its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte )
545 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
546 CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
547 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
548 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
549 num_soil_layers,TKE_MYJ, &
554 SNOW,SNOWC, CANWAT,SMSTAV, &
555 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
556 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL, &
557 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
566 start_of_simulation , &
567 te_temf,cf3d_temf, & ! WA
568 DZR, DZB, DZG, & !Optional urban
569 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
570 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
571 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
572 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
573 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
574 SF_URBAN_PHYSICS, & !Optional urban
575 NUM_URBAN_LAYERS, & !Optional multi-layer urban
576 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
577 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
578 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
579 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
580 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
581 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
582 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
583 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
584 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
585 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
586 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
587 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
588 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
589 ids, ide, jds, jde, kds, kde, &
590 ims, ime, jms, jme, kms, kme, &
591 its, ite, jts, jte, kts, kte, &
592 ACHFX,ACLHF,ACGRDFLX, &
593 oml_hml0, omlcall, & !Optional oml
594 TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
596 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
598 CALL cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN, &
599 RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC, &
601 RAINCV,W0AVG,config_flags,restart, &
602 CLDEFI,LOWLYR,MASS_FLUX, &
604 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
605 APR_CAPMA,APR_CAPME,APR_CAPMI, &
606 cugd_tten,cugd_ttens,cugd_qvten, &
607 cugd_qvtens,cugd_qcten, &
608 allowed_to_read, start_of_simulation, &
609 ids, ide, jds, jde, kds, kde, &
610 ims, ime, jms, jme, kms, kme, &
611 its, ite, jts, jte, kts, kte )
613 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
615 CALL mp_init(RAINNC,config_flags,restart,warm_rain, &
617 MPDT, DT, DX, DY, LOWLYR, &
618 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
619 mp_restart_state,tbpvs_state,tbpvs0_state, &
620 allowed_to_read, start_of_simulation, &
621 ids, ide, jds, jde, kds, kde, &
622 ims, ime, jms, jme, kms, kme, &
623 its, ite, jts, jte, kts, kte )
626 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
628 CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
629 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
630 config_flags,restart, &
632 ids, ide, jds, jde, kds, kde, &
633 ims, ime, jms, jme, kms, kme, &
634 its, ite, jts, jte, kts, kte )
636 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
638 CALL fdob_init(model_config_rec%obs_nudge_opt, &
639 model_config_rec%max_dom, &
641 model_config_rec%parent_id, &
642 model_config_rec%obs_idynin, &
643 model_config_rec%obs_dtramp, &
644 model_config_rec%fdda_end, &
645 model_config_rec%restart, &
646 obs_twindo_cg, obs_twindo, &
648 model_config_rec%obs_no_pbl_nudge_uv, &
649 model_config_rec%obs_no_pbl_nudge_t, &
650 model_config_rec%obs_no_pbl_nudge_q, &
651 model_config_rec%obs_sfcfact, &
652 model_config_rec%obs_sfcfacr, &
653 model_config_rec%obs_dpsmx, &
654 model_config_rec%obs_nudge_wind, &
655 model_config_rec%obs_nudge_temp, &
656 model_config_rec%obs_nudge_mois, &
657 model_config_rec%obs_nudgezfullr1_uv, &
658 model_config_rec%obs_nudgezrampr1_uv, &
659 model_config_rec%obs_nudgezfullr2_uv, &
660 model_config_rec%obs_nudgezrampr2_uv, &
661 model_config_rec%obs_nudgezfullr4_uv, &
662 model_config_rec%obs_nudgezrampr4_uv, &
663 model_config_rec%obs_nudgezfullr1_t, &
664 model_config_rec%obs_nudgezrampr1_t, &
665 model_config_rec%obs_nudgezfullr2_t, &
666 model_config_rec%obs_nudgezrampr2_t, &
667 model_config_rec%obs_nudgezfullr4_t, &
668 model_config_rec%obs_nudgezrampr4_t, &
669 model_config_rec%obs_nudgezfullr1_q, &
670 model_config_rec%obs_nudgezrampr1_q, &
671 model_config_rec%obs_nudgezfullr2_q, &
672 model_config_rec%obs_nudgezrampr2_q, &
673 model_config_rec%obs_nudgezfullr4_q, &
674 model_config_rec%obs_nudgezrampr4_q, &
675 model_config_rec%obs_nudgezfullmin, &
676 model_config_rec%obs_nudgezrampmin, &
677 model_config_rec%obs_nudgezmax, &
680 model_config_rec%start_year(id), &
681 model_config_rec%start_month(id), &
682 model_config_rec%start_day(id), &
683 model_config_rec%start_hour(id), &
684 model_config_rec%start_minute(id), &
685 model_config_rec%start_second(id), &
689 model_config_rec%obs_ipf_init, &
690 ids, ide, jds, jde, kds, kde, &
691 ims, ime, jms, jme, kms, kme, &
692 its, ite, jts, jte, kts, kte )
696 END SUBROUTINE phy_init
698 !=====================================================================
699 SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
700 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu, &
701 ISICE, LUCATS, LUSEAS, ISN, &
704 allowed_to_read , usemonalb , &
705 ids, ide, jds, jde, kds, kde, &
706 ims, ime, jms, jme, kms, kme, &
707 its, ite, jts, jte, kts, kte )
712 !---------------------------------------------------------------------
713 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
714 ims, ime, jms, jme, kms, kme, &
715 its, ite, jts, jte, kts, kte
717 INTEGER , INTENT(IN) :: iswater, julday
718 REAL , INTENT(IN) :: cen_lat
719 CHARACTER(LEN=*), INTENT(IN) :: mminlu
720 LOGICAL, INTENT(IN) :: allowed_to_read , usemonalb
721 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: lu_index, snowc, xice, snoalb
722 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: albedo, albbck, mavail, emiss, &
724 znt, Z0, thc, xland, xicem
725 INTEGER , INTENT(INOUT) :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
726 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
728 REAL :: xice_threshold
729 !---------------------------------------------------------------------
732 CHARACTER*80 :: message
733 INTEGER :: landuse_unit, LS, LC, LI, LUN, NSN
734 INTEGER :: i, j, itf, jtf, is, cats, seas, curs
735 INTEGER , PARAMETER :: OPEN_OK = 0
737 INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
738 REAL , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
739 REAL , DIMENSION( max_cats ) :: SCFX
740 ! save these fields in case nest moves or has to be reinitialized
741 ! and this routine is called with allowed_to_read set to false
742 ! note that by saving these, we're locking in the same landuse for
743 ! the duration of a run; possible implications for long climate runs
744 LOGICAL :: found_lu, end_of_file
745 LOGICAL, EXTERNAL :: wrf_dm_on_monitor
747 !---------------------------------------------------------------------
749 CALL wrf_debug( 100 , 'top of landuse_init' )
751 NSN=-1 ! set this to suppress uninitalized data messages from tools
753 if ( fractional_seaice == 0 ) then
755 else if ( fractional_seaice == 1 ) then
756 xice_threshold = 0.02
759 ! recover LU variables from state
760 IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
761 WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
764 DO cats = 1, max_cats
765 SCFX(cats) = lu_state(curs) ; curs = curs + 1
766 DO seas = 1, max_seas
767 ALBD(cats,seas) = lu_state(curs) ; curs = curs + 1
768 SLMO(cats,seas) = lu_state(curs) ; curs = curs + 1
769 SFEM(cats,seas) = lu_state(curs) ; curs = curs + 1
770 SFZ0(cats,seas) = lu_state(curs) ; curs = curs + 1
771 SFHC(cats,seas) = lu_state(curs) ; curs = curs + 1
772 THERIN(cats,seas) = lu_state(curs) ; curs = curs + 1
776 ! Determine season (summer=1, winter=2)
778 IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
779 IF(CEN_LAT.LT.0.0)ISN=3-ISN
782 IF ( allowed_to_read ) THEN
784 IF ( wrf_dm_on_monitor() ) THEN
785 OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
786 IF ( ierr .NE. OPEN_OK ) THEN
787 WRITE(message,FMT='(A)') &
788 'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
789 CALL wrf_error_fatal ( message )
793 ! Read info from file LANDUSE.TBL
794 ! IF(MMINLU.EQ.'OLD ')THEN
797 ! ELSE IF(MMINLU.EQ.'USGS')THEN
800 ! ELSE IF(MMINLU.EQ.'SiB ')THEN
803 ! ELSE IF(MMINLU.EQ.'LW12')THEN
806 ! ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
809 ! call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
811 call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
813 end_of_file = .FALSE.
814 !!! BEGINNING OF 1999 LOOP
816 IF ( wrf_dm_on_monitor() ) THEN
817 READ (landuse_unit,*,END=2002)LUTYPE
820 CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
823 IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
824 FOUND_LU = LUTYPE.EQ.MMINLU
826 CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
827 IF ( .NOT. end_of_file ) THEN
828 CALL wrf_dm_bcast_string(lutype, 256)
829 CALL wrf_dm_bcast_bytes (lucats, IWORDSIZE )
830 CALL wrf_dm_bcast_bytes (luseas, IWORDSIZE )
831 CALL wrf_dm_bcast_bytes (found_lu, LWORDSIZE )
835 PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND', &
836 LUCATS,' CATEGORIES',LUSEAS,' SEASONS', &
837 ' WATER CATEGORY = ',ISWATER, &
838 ' SNOW CATEGORY = ',ISICE
841 if ( wrf_dm_on_monitor() ) then
842 READ (landuse_unit,*)
846 IF ( wrf_dm_on_monitor() ) THEN
847 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS), &
848 SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
850 CALL wrf_dm_bcast_bytes (LI, IWORDSIZE )
851 IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
853 IF ( wrf_dm_on_monitor() ) THEN
854 READ (landuse_unit,*)
859 IF(NSN.EQ.1.AND.FOUND_LU) THEN
862 CALL wrf_dm_bcast_bytes (albd, max_cats * max_seas * RWORDSIZE )
863 CALL wrf_dm_bcast_bytes (slmo, max_cats * max_seas * RWORDSIZE )
864 CALL wrf_dm_bcast_bytes (sfem, max_cats * max_seas * RWORDSIZE )
865 CALL wrf_dm_bcast_bytes (sfz0, max_cats * max_seas * RWORDSIZE )
866 CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
867 CALL wrf_dm_bcast_bytes (sfhc, max_cats * max_seas * RWORDSIZE )
868 CALL wrf_dm_bcast_bytes (scfx, max_cats * RWORDSIZE )
871 IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
874 IF(.NOT. found_lu .OR. end_of_file )THEN
875 CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
877 ENDIF ! allowed_to_read
880 ! Set arrays according to lu_index
881 itf = min0(ite, ide-1)
882 jtf = min0(jte, jde-1)
883 IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
886 IS=nint(lu_index(i,j))
887 ! only do this check on read-in data
888 IF(IS.LT.0.OR.IS.GT.LUN.AND.allowed_to_read)THEN
889 WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
890 CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
892 ! SET NO-DATA POINTS (IS=0) TO WATER
896 IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
897 ALBEDO(I,J)=ALBBCK(I,J)
898 IF(SNOWC(I,J) .GT. 0.5) THEN
900 ALBEDO(I,J)=SNOALB(I,J)
902 ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
905 THC(I,J)=THERIN(IS,ISN)/100.
906 Z0(I,J)=SFZ0(IS,ISN)/100.
908 EMBCK(I,J)=SFEM(IS,ISN)
909 EMISS(I,J)=EMBCK(I,J)
910 MAVAIL(I,J)=SLMO(IS,ISN)
911 IF(IS.NE.ISWATER)THEN
916 ! SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
918 IF(XICE(I,J).GE.xice_threshold)THEN
920 ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
921 EMBCK(I,J)=SFEM(ISICE,ISN)
922 IF (FRACTIONAL_SEAICE == 1) THEN
923 ! The 0.08 value is the albedo over open water.
924 ! The 0.98 value is the emissivity over open water.
925 ALBEDO(I,J) = ( XICE(I,J) * ALBBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.08 )
926 EMISS(I,J) = ( XICE(I,J) * EMBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.98 )
928 ALBEDO(I,J)=ALBBCK(I,J)
929 EMISS(I,J)=EMBCK(I,J)
931 THC(I,J)=THERIN(ISICE,ISN)/100.
932 Z0(I,J)=SFZ0(ISICE,ISN)/100.
934 MAVAIL(I,J)=SLMO(ISICE,ISN)
939 if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
942 CALL wrf_debug( 100 , 'returning from of landuse_init' )
944 ! restore LU variables from state
946 DO cats = 1, max_cats
947 lu_state(curs) = SCFX(cats) ; curs = curs + 1
948 DO seas = 1, max_seas
949 lu_state(curs) = ALBD(cats,seas) ; curs = curs + 1
950 lu_state(curs) = SLMO(cats,seas) ; curs = curs + 1
951 lu_state(curs) = SFEM(cats,seas) ; curs = curs + 1
952 lu_state(curs) = SFZ0(cats,seas) ; curs = curs + 1
953 lu_state(curs) = SFHC(cats,seas) ; curs = curs + 1
954 lu_state(curs) = THERIN(cats,seas) ; curs = curs + 1
959 END SUBROUTINE landuse_init
961 !=====================================================================
962 SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW, &
963 RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT, &
964 levsiz,XLAT,n_ozmixm, &
965 cldfra_old, & ! Optional
966 ozmixm,pin, & ! Optional
967 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2, & ! Optional
968 paerlev,n_aerosolc, &
969 sfull,shalf,pptop,swrad_scat,p_top, &
970 config_flags,restart, &
971 allowed_to_read, start_of_simulation, &
972 ids, ide, jds, jde, kds, kde, &
973 ims, ime, jms, jme, kms, kme, &
974 its, ite, jts, jte, kts, kte )
975 !---------------------------------------------------------------------
976 USE module_ra_rrtm , ONLY : rrtminit
977 USE module_ra_rrtmg_lw , ONLY : rrtmg_lwinit
978 USE module_ra_rrtmg_sw , ONLY : rrtmg_swinit
979 USE module_ra_cam , ONLY : camradinit
980 USE module_ra_sw , ONLY : swinit
981 USE module_ra_gsfcsw , ONLY : gsfc_swinit
982 USE module_ra_gfdleta , ONLY : gfdletainit
984 USE module_ra_hwrf , ONLY : hwrfrainit
986 USE module_ra_hs , ONLY : hsinit
988 !---------------------------------------------------------------------
990 !---------------------------------------------------------------------
991 INTEGER, INTENT(IN) :: id
992 TYPE (grid_config_rec_type) :: config_flags
993 LOGICAL , INTENT(IN) :: restart
994 LOGICAL, INTENT(IN) :: allowed_to_read
996 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
997 ims, ime, jms, jme, kms, kme, &
998 its, ite, jts, jte, kts, kte
1000 INTEGER , INTENT(IN) :: JULDAY,JULYR
1001 REAL , INTENT(IN) :: DT, RADT, cen_lat, GMT, pptop, &
1003 LOGICAL, INTENT(IN) :: start_of_simulation
1005 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
1006 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
1008 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: XLAT
1010 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
1011 INTENT(INOUT) :: OZMIXM
1013 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
1014 REAL, DIMENSION(paerlev), OPTIONAL, INTENT(INOUT) :: m_hybi
1015 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
1016 INTENT(INOUT) :: aerosolc_1, aerosolc_2
1018 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
1020 INTEGER , INTENT(INOUT) :: STEPRA
1023 REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
1024 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1030 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
1033 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
1034 LOGICAL :: etalw = .false.
1035 LOGICAL :: hwrflw= .false.
1036 LOGICAL :: camlw = .false.
1037 LOGICAL :: etamp = .false.
1038 LOGICAL :: acswalloc = .false.
1039 LOGICAL :: aclwalloc = .false.
1040 integer :: month,iday
1041 INTEGER :: i, j, k, itf, jtf, ktf
1042 !---------------------------------------------------------------------
1048 !---------------------------------------------------------------------
1050 !-- calculate radiation time step
1052 STEPRA = nint(RADT*60./DT)
1053 STEPRA = max(STEPRA,1)
1057 IF(start_of_simulation)THEN
1062 RTHRATENLW(i,k,j)=0.
1063 RTHRATENSW(i,k,j)=0.
1069 if( present(cldfra_old) ) then
1073 cldfra_old(i,k,j) = 0.
1080 !-- find out which microphysics option is used first
1082 mp_select: SELECT CASE(config_flags%mp_physics)
1087 END SELECT mp_select
1089 !-- chose long wave radiation scheme
1091 lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
1095 p_top, allowed_to_read , &
1096 ids, ide, jds, jde, kds, kde, &
1097 ims, ime, jms, jme, kms, kme, &
1098 its, ite, jts, jte, kts, kte )
1102 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1104 IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
1105 PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND. &
1106 PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1) &
1107 .AND. PRESENT(AEROSOLC_2)) THEN
1109 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1110 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1111 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1112 paerlev, n_aerosolc, &
1113 ids, ide, jds, jde, kds, kde, &
1114 ims, ime, jms, jme, kms, kme, &
1115 its, ite, jts, jte, kts, kte )
1117 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
1123 CASE (RRTMG_LWSCHEME)
1124 CALL rrtmg_lwinit( &
1126 ids, ide, jds, jde, kds, kde, &
1127 ims, ime, jms, jme, kms, kme, &
1128 its, ite, jts, jte, kts, kte )
1133 CALL nl_get_start_month(id,month)
1134 CALL nl_get_start_day(id,iday)
1135 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1136 julyr,month,iday,gmt, &
1137 config_flags,allowed_to_read, &
1138 ids, ide, jds, jde, kds, kde, &
1139 ims, ime, jms, jme, kms, kme, &
1140 its, ite, jts, jte, kts, kte )
1144 CALL nl_get_start_month(id,month)
1145 CALL nl_get_start_day(id,iday)
1146 ! test this with standard jul-day calls
1147 ! CALL nl_get_start_year(id,start_year)
1148 ! CALL nl_get_start_month(id,start_month)
1149 ! CALL nl_get_start_day(id,start_day)
1150 ! CALL nl_get_start_hour(id,start_hour)
1151 ! CALL nl_get_start_minute(id,start_minute)
1152 ! CALL nl_get_start_second(id,start_second)
1153 ! CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
1154 ! CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
1155 ! julyr_start=start_year
1156 ! julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
1157 ! gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
1158 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1159 ! CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
1161 kds, kde, kms, kme, kts, kte )
1165 CALL hsinit(RTHRATEN,restart, &
1166 ids, ide, jds, jde, kds, kde, &
1167 ims, ime, jms, jme, kms, kme, &
1168 its, ite, jts, jte, kts, kte )
1171 END SELECT lwrad_select
1172 !-- initialize short wave radiation scheme
1174 swrad_select: SELECT CASE(config_flags%ra_sw_physics)
1180 ids, ide, jds, jde, kds, kde, &
1181 ims, ime, jms, jme, kms, kme, &
1182 its, ite, jts, jte, kts, kte )
1186 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1190 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1191 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1192 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1193 paerlev, n_aerosolc, &
1194 ids, ide, jds, jde, kds, kde, &
1195 ims, ime, jms, jme, kms, kme, &
1196 its, ite, jts, jte, kts, kte )
1201 CALL gsfc_swinit(cen_lat, allowed_to_read )
1203 CASE (RRTMG_SWSCHEME)
1204 CALL rrtmg_swinit( &
1206 ids, ide, jds, jde, kds, kde, &
1207 ims, ime, jms, jme, kms, kme, &
1208 its, ite, jts, jte, kts, kte )
1214 CALL nl_get_start_month(id,month)
1215 CALL nl_get_start_day(id,iday)
1216 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1217 julyr,month,iday,gmt, &
1218 config_flags,allowed_to_read, &
1219 ids, ide, jds, jde, kds, kde, &
1220 ims, ime, jms, jme, kms, kme, &
1221 its, ite, jts, jte, kts, kte )
1226 CALL nl_get_start_month(id,month)
1227 CALL nl_get_start_day(id,iday)
1228 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1230 kds, kde, kms, kme, kts, kte )
1235 END SELECT swrad_select
1237 #if ( EM_CORE == 1 )
1238 ! test for conditionally allocated arrays when using bucket_J
1240 IF(config_flags%bucket_J .gt. 0.0)THEN
1241 IF(.not. (acswalloc .and. aclwalloc))THEN
1242 CALL wrf_error_fatal ( 'Need CAM or RRTMG radiation for bucket_J option')
1247 END SUBROUTINE ra_init
1249 SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
1250 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
1251 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
1252 num_soil_layers,TKE_MYJ, &
1257 SNOW,SNOWC, CANWAT,SMSTAV, &
1258 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
1259 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail, &
1260 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
1261 #if ( NMM_CORE == 1 )
1269 start_of_simulation, &
1270 te_temf,cf3d_temf, & ! WA
1271 ! num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1272 DZR, DZB, DZG, & !Optional urban
1273 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
1274 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
1275 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
1276 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, & !Optional urban
1277 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
1278 SF_URBAN_PHYSICS, & !Optional urban
1279 NUM_URBAN_LAYERS, & !Optional multi-layer urban
1280 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
1281 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
1282 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
1283 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
1284 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
1285 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
1286 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
1287 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
1288 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
1289 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
1290 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
1291 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
1292 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
1293 ids, ide, jds, jde, kds, kde, &
1294 ims, ime, jms, jme, kms, kme, &
1295 its, ite, jts, jte, kts, kte, &
1296 ACHFX,ACLHF,ACGRDFLX, &
1297 oml_hml0, omlcall, & !Optional oml
1298 TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
1299 !--------------------------------------------------------------------
1300 USE module_sf_sfclay
1302 USE module_sf_pxsfclay
1307 USE module_sf_myjsfc
1308 USE module_sf_qnsesfc
1309 USE module_sf_noahdrv
1311 USE module_sf_bep !BEP
1312 USE module_sf_bep_bem
1313 USE module_sf_ruclsm
1316 USE module_bl_myjpbl
1317 USE module_bl_myjurb
1318 USE module_bl_boulac
1319 USE module_bl_qnsepbl
1320 #if ( EM_CORE == 1 )
1329 !--------------------------------------------------------------------
1331 !--------------------------------------------------------------------
1332 TYPE (grid_config_rec_type) :: config_flags
1333 LOGICAL , INTENT(IN) :: restart
1334 LOGICAL, INTENT(IN) :: FNDSOILW, FNDSNOWH
1335 LOGICAL, INTENT(IN) :: RDMAXALB
1337 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1338 ims, ime, jms, jme, kms, kme, &
1339 its, ite, jts, jte, kts, kte
1340 INTEGER , INTENT(IN) :: num_soil_layers
1341 INTEGER , INTENT(IN) :: SF_URBAN_PHYSICS
1343 REAL , INTENT(IN) :: DT, BLDT
1344 INTEGER , INTENT(INOUT) :: STEPBL
1346 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), &
1347 INTENT(OUT) :: SMFR3D
1349 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1350 INTENT(INOUT) :: SMOIS,SH2O,TSLB
1352 REAL, DIMENSION( ims:ime, jms:jme ) , &
1353 INTENT(INOUT) :: SNOW, &
1369 #if ( NMM_CORE == 1 )
1377 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
1378 INTENT(INOUT) :: IVGTYP, &
1383 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
1385 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1395 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1398 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK
1399 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
1400 CHARACTER(LEN=*), INTENT(IN) :: MMINLU
1401 LOGICAL, INTENT(IN) :: allowed_to_read
1402 INTEGER, INTENT(IN) :: ISURBAN
1403 INTEGER :: isn, isfc
1406 REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
1407 INTENT(OUT) :: te_temf, cf3d_temf !WA
1410 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !Optional urban
1411 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !Optional urban
1412 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !Optional urban
1413 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !Optional urban
1414 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !Optional urban
1415 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !Optional urban
1416 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1417 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1418 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1419 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1420 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1421 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1422 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1423 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1424 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1425 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1426 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1427 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1428 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1429 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1430 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1431 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1432 ! REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1433 ! REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1434 ! REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1435 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1436 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1437 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1439 INTEGER , INTENT(IN) :: num_urban_layers
1440 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
1441 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
1442 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
1443 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
1444 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
1445 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
1446 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
1447 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
1448 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
1449 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
1450 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
1451 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
1452 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
1453 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
1454 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
1455 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
1456 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
1457 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
1458 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
1459 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
1460 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
1461 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
1462 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
1463 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
1464 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
1465 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
1466 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
1467 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
1468 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
1469 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
1470 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
1471 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
1472 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
1473 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
1474 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
1476 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1477 ACHFX,ACLHF,ACGRDFLX
1478 ! Optional OML variables
1479 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1480 TML,T0ML,HML,H0ML,HUML,HVML,TMOML
1481 INTEGER, OPTIONAL, INTENT(IN) :: omlcall
1482 REAL, OPTIONAL, INTENT(IN) :: oml_hml0
1483 LOGICAL, INTENT(IN) :: start_of_simulation
1487 #if ( EM_CORE == 1 )
1489 INTEGER :: mynn_closure_level
1492 !-- calculate pbl time step
1494 STEPBL = nint(BLDT*60./DT)
1495 STEPBL = max(STEPBL,1)
1498 IF(PRESENT(ACHFX))THEN
1499 IF(.not.restart)THEN
1511 !-- initialize surface layer scheme
1513 sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1516 CALL sfclayinit( allowed_to_read )
1519 CALL pxsfclayinit( allowed_to_read )
1522 CALL myjsfcinit(LOWLYR,UST, &
1523 #if ( NMM_CORE == 1 )
1531 ids, ide, jds, jde, kds, kde, &
1532 ims, ime, jms, jme, kms, kme, &
1533 its, ite, jts, jte, kts, kte )
1536 CASE (QNSESFCSCHEME)
1537 CALL qnsesfcinit(LOWLYR,UST, &
1538 #if ( NMM_CORE == 1 )
1546 ids, ide, jds, jde, kds, kde, &
1547 ims, ime, jms, jme, kms, kme, &
1548 its, ite, jts, jte, kts, kte )
1552 CALL myjsfcinit(LOWLYR,UST, &
1553 #if ( NMM_CORE == 1 )
1561 ids, ide, jds, jde, kds, kde, &
1562 ims, ime, jms, jme, kms, kme, &
1563 its, ite, jts, jte, kts, kte )
1566 CASE (GFDLSFCSCHEME)
1567 CALL myjsfcinit(LOWLYR,UST, &
1572 ids, ide, jds, jde, kds, kde, &
1573 ims, ime, jms, jme, kms, kme, &
1574 its, ite, jts, jte, kts, kte )
1578 #if ( EM_CORE == 1 )
1581 CASE (MYNNSFCSCHEME)
1583 CALL mynn_sf_init_driver(allowed_to_read)
1591 END SELECT sfclay_select
1594 !-- initialize surface scheme
1596 sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1600 CALL slabinit(TSK,TMN, &
1601 TSLB,ZS,DZS,num_soil_layers, &
1602 allowed_to_read ,start_of_simulation ,&
1603 ids, ide, jds, jde, kds, kde, &
1604 ims, ime, jms, jme, kms, kme, &
1605 its, ite, jts, jte, kts, kte )
1609 CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1610 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW, &
1611 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP, &
1615 ids,ide, jds,jde, kds,kde, &
1616 ims,ime, jms,jme, kms,kme, &
1617 its,ite, jts,jte, kts,kte )
1621 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1622 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1623 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1625 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1626 num_soil_layers, restart, &
1628 ids,ide, jds,jde, kds,kde, &
1629 ims,ime, jms,jme, kms,kme, &
1630 its,ite, jts,jte, kts,kte )
1633 IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1635 IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1637 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers, & !urban
1639 ! num_roof_layers,num_wall_layers,road_soil_layers) !urban
1642 CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban
1643 ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban
1644 ! num_roof_layers,num_wall_layers,num_road_layers, & !urban
1645 restart,sf_urban_physics, & !urban
1646 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban
1647 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban
1648 TRL_URB3D,TBL_URB3D,TGL_URB3D, & !urban
1649 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D, & !urban
1650 num_urban_layers, & !urban
1651 TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban
1652 TLEV_URB3D,QLEV_URB3D, & !urban
1653 TW1LEV_URB3D,TW2LEV_URB3D, & !urban
1654 TGLEV_URB3D,TFLEV_URB3D, & !urban
1655 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !urban
1656 SFVENT_URB3D,LFVENT_URB3D, & !urban
1657 SFWIN1_URB3D,SFWIN2_URB3D, & !urban
1658 SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban
1659 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !multi-layer urban
1660 A_E_BEP,B_U_BEP,B_V_BEP, & !multi-layer urban
1661 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban
1662 DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban
1663 FRC_URB2D, UTYPE_URB2D) !urban
1665 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1670 ! if(isfc .ne. 2)CALL wrf_error_fatal &
1671 ! ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1672 CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,XICE, &
1673 mavail,num_soil_layers, config_flags%iswater, &
1674 config_flags%isice, restart, &
1676 ids,ide, jds,jde, kds,kde, &
1677 ims,ime, jms,jme, kms,kme, &
1678 its,ite, jts,jte, kts,kte )
1681 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1682 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1683 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1685 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1686 num_soil_layers, restart, &
1688 ids,ide, jds,jde, kds,kde, &
1689 ims,ime, jms,jme, kms,kme, &
1690 its,ite, jts,jte, kts,kte )
1694 END SELECT sfc_select
1696 IF(PRESENT(OMLCALL))THEN
1697 IF (omlcall .EQ. 1) THEN
1698 CALL omlinit(oml_hml0, tsk, &
1699 tml,t0ml,hml,h0ml,huml,hvml,tmoml, &
1700 allowed_to_read, start_of_simulation, &
1701 ids,ide, jds,jde, kds,kde, &
1702 ims,ime, jms,jme, kms,kme, &
1703 its,ite, jts,jte, kts,kte )
1707 !-- initialize pbl scheme
1709 pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1712 if(isfc .ne. 1)CALL wrf_error_fatal &
1713 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1714 CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1715 RQCBLTEN,RQIBLTEN,P_QI, &
1716 PARAM_FIRST_SCALAR, &
1719 ids, ide, jds, jde, kds, kde, &
1720 ims, ime, jms, jme, kms, kme, &
1721 its, ite, jts, jte, kts, kte )
1723 if(isfc .ne. 1)CALL wrf_error_fatal &
1724 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1725 CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1726 RQCBLTEN,RQIBLTEN,P_QI, &
1727 PARAM_FIRST_SCALAR, &
1730 ids, ide, jds, jde, kds, kde, &
1731 ims, ime, jms, jme, kms, kme, &
1732 its, ite, jts, jte, kts, kte )
1734 if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
1735 ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
1736 CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1737 RQCBLTEN,RQIBLTEN,P_QI, &
1738 PARAM_FIRST_SCALAR, &
1741 ids, ide, jds, jde, kds, kde, &
1742 ims, ime, jms, jme, kms, kme, &
1743 its, ite, jts, jte, kts, kte )
1745 if(isfc .ne. 2)CALL wrf_error_fatal &
1746 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1747 CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1748 RQCBLTEN,RQIBLTEN,P_QI, &
1749 PARAM_FIRST_SCALAR, &
1752 ids, ide, jds, jde, kds, kde, &
1753 ims, ime, jms, jme, kms, kme, &
1754 its, ite, jts, jte, kts, kte )
1756 if(isfc .ne. 2)CALL wrf_error_fatal &
1757 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1758 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1759 CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1760 TKE_MYJ,EXCH_H,restart, &
1762 ids, ide, jds, jde, kds, kde, &
1763 ims, ime, jms, jme, kms, kme, &
1764 its, ite, jts, jte, kts, kte )
1767 CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1768 TKE_MYJ,EXCH_H,restart, &
1770 ids, ide, jds, jde, kds, kde, &
1771 ims, ime, jms, jme, kms, kme, &
1772 its, ite, jts, jte, kts, kte )
1774 CASE (QNSEPBLSCHEME)
1775 if(isfc .ne. 4)CALL wrf_error_fatal &
1776 ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
1777 CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1778 TKE_MYJ,EXCH_H,restart, &
1780 ids, ide, jds, jde, kds, kde, &
1781 ims, ime, jms, jme, kms, kme, &
1782 its, ite, jts, jte, kts, kte )
1785 if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
1786 ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
1787 CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1788 TKE_PBL,EXCH_H,restart, &
1790 ids, ide, jds, jde, kds, kde, &
1791 ims, ime, jms, jme, kms, kme, &
1792 its, ite, jts, jte, kts, kte )
1795 #if ( EM_CORE == 1 )
1799 CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
1800 IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
1801 ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
1803 SELECT CASE(config_flags%bl_pbl_physics)
1805 CASE(MYNNPBLSCHEME2)
1806 mynn_closure_level=2
1808 CASE(MYNNPBLSCHEME3)
1809 mynn_closure_level=3
1815 CALL mynn_bl_init_driver(&
1816 &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
1817 &,restart,allowed_to_read,mynn_closure_level &
1818 &,IDS,IDE,JDS,JDE,KDS,KDE &
1819 &,IMS,IME,JMS,JME,KMS,KME &
1820 &,ITS,ITE,JTS,JTE,KTS,KTE)
1822 CASE (TEMFPBLSCHEME)
1823 ! if(isfc .ne. 0)CALL wrf_error_fatal &
1824 ! ( 'module_physics_init: use sfclay scheme = 0 for this pbl option' )
1825 IF ( PRESENT( te_temf ) .AND. PRESENT( cf3d_temf )) THEN
1826 CALL temfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1827 RQCBLTEN,RQIBLTEN,P_QI, &
1828 PARAM_FIRST_SCALAR, &
1831 te_temf,cf3d_temf, & ! WA
1832 ids, ide, jds, jde, kds, kde, &
1833 ims, ime, jms, jme, kms, kme, &
1834 its, ite, jts, jte, kts, kte )
1836 CALL wrf_error_fatal ( 'arguments not present for calling TEMF scheme' )
1843 END SELECT pbl_select
1846 END SUBROUTINE bl_init
1848 !==================================================================
1849 SUBROUTINE cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN, &
1850 RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC, &
1852 RAINCV,W0AVG,config_flags,restart, &
1853 CLDEFI,LOWLYR,MASS_FLUX, &
1855 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1856 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1857 cugd_tten,cugd_ttens,cugd_qvten, &
1858 cugd_qvtens,cugd_qcten, &
1859 allowed_to_read, start_of_simulation, &
1860 ids, ide, jds, jde, kds, kde, &
1861 ims, ime, jms, jme, kms, kme, &
1862 its, ite, jts, jte, kts, kte )
1863 !------------------------------------------------------------------
1867 USE module_cu_gd, ONLY : GDINIT
1868 USE module_cu_g3, ONLY : G3INIT
1871 USE module_cu_tiedtke
1872 !------------------------------------------------------------------
1874 !------------------------------------------------------------------
1875 TYPE (grid_config_rec_type) :: config_flags
1876 LOGICAL , INTENT(IN) :: restart
1879 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1880 ims, ime, jms, jme, kms, kme, &
1881 its, ite, jts, jte, kts, kte
1883 REAL , INTENT(IN) :: DT, CUDT
1884 LOGICAL , INTENT(IN) :: start_of_simulation
1885 LOGICAL , INTENT(IN) :: allowed_to_read
1886 INTEGER , INTENT(INOUT) :: STEPCU
1888 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
1889 RTHCUTEN, RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
1890 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1891 cugd_tten,cugd_ttens,cugd_qvten, &
1892 cugd_qvtens,cugd_qcten
1894 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
1896 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1899 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
1901 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
1903 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
1905 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX, &
1906 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1907 APR_CAPMA,APR_CAPME,APR_CAPMI
1909 INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
1911 REAL, DIMENSION(IMS:IME,JMS:JME,KMS:KME), INTENT(INOUT) :: &
1916 INTEGER :: i,j,itf,jtf
1918 !--------------------------------------------------------------------
1920 !-- calculate cumulus parameterization time step
1925 STEPCU = nint(CUDT*60./DT)
1926 STEPCU = max(STEPCU,1)
1930 IF(start_of_simulation)THEN
1939 cps_select: SELECT CASE(config_flags%cu_physics)
1942 CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1943 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
1944 PARAM_FIRST_SCALAR,restart, &
1946 ids, ide, jds, jde, kds, kde, &
1947 ims, ime, jms, jme, kms, kme, &
1948 its, ite, jts, jte, kts, kte )
1951 CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1952 CLDEFI,LOWLYR,cp,r_d,restart, &
1954 ids, ide, jds, jde, kds, kde, &
1955 ims, ime, jms, jme, kms, kme, &
1956 its, ite, jts, jte, kts, kte )
1959 CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1960 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
1961 SVP1,SVP2,SVP3,SVPT0, &
1962 PARAM_FIRST_SCALAR,restart, &
1964 ids, ide, jds, jde, kds, kde, &
1965 ims, ime, jms, jme, kms, kme, &
1966 its, ite, jts, jte, kts, kte )
1968 CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
1969 MASS_FLUX,cp,restart, &
1970 P_QC,P_QI,PARAM_FIRST_SCALAR, &
1972 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1973 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1975 ids, ide, jds, jde, kds, kde, &
1976 ims, ime, jms, jme, kms, kme, &
1977 its, ite, jts, jte, kts, kte )
1979 CALL nsasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
1981 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
1983 ids, ide, jds, jde, kds, kde, &
1984 ims, ime, jms, jme, kms, kme, &
1985 its, ite, jts, jte, kts, kte )
1987 #if ( EM_CORE == 1 )
1989 CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
1990 MASS_FLUX,cp,restart, &
1991 P_QC,P_QI,PARAM_FIRST_SCALAR, &
1993 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1994 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1995 cugd_tten,cugd_ttens,cugd_qvten, &
1996 cugd_qvtens,cugd_qcten, &
1998 ids, ide, jds, jde, kds, kde, &
1999 ims, ime, jms, jme, kms, kme, &
2000 its, ite, jts, jte, kts, kte )
2003 CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2004 RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
2005 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2007 ids, ide, jds, jde, kds, kde, &
2008 ims, ime, jms, jme, kms, kme, &
2009 its, ite, jts, jte, kts, kte )
2011 ! Tiedtke Scheme - ZCX&YQW
2012 CASE (TIEDTKESCHEME)
2013 CALL tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2015 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2017 ids, ide, jds, jde, kds, kde, &
2018 ims, ime, jms, jme, kms, kme, &
2019 its, ite, jts, jte, kts, kte )
2023 END SELECT cps_select
2025 END SUBROUTINE cu_init
2027 !==================================================================
2028 SUBROUTINE mp_init(RAINNC,config_flags,restart,warm_rain, &
2030 MPDT, DT, DX, DY, LOWLYR, & ! for eta mp
2031 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, & ! for eta mp
2032 mp_restart_state,tbpvs_state,tbpvs0_state, & ! eta mp
2033 allowed_to_read, start_of_simulation, &
2034 ids, ide, jds, jde, kds, kde, &
2035 ims, ime, jms, jme, kms, kme, &
2036 its, ite, jts, jte, kts, kte )
2037 !------------------------------------------------------------------
2041 USE module_mp_etanew
2045 USE module_mp_thompson
2046 USE module_mp_thompson07
2047 USE module_mp_morr_two_moment
2048 USE module_mp_milbrandt2mom
2049 ! USE module_mp_milbrandt3mom
2052 !------------------------------------------------------------------
2054 !------------------------------------------------------------------
2056 TYPE (grid_config_rec_type) :: config_flags
2057 LOGICAL , INTENT(IN) :: restart
2058 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
2059 REAL , INTENT(IN) :: MPDT, DT, DX, DY
2060 LOGICAL , INTENT(IN) :: start_of_simulation
2062 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2063 ims, ime, jms, jme, kms, kme, &
2064 its, ite, jts, jte, kts, kte
2066 INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT) :: LOWLYR
2067 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC
2068 REAL, DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
2069 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
2070 REAL , DIMENSION(:) ,INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
2071 LOGICAL , INTENT(IN) :: allowed_to_read
2074 INTEGER :: i, j, itf, jtf
2077 adv_moist_cond = .true.
2081 IF(start_of_simulation)THEN
2089 mp_select: SELECT CASE(config_flags%mp_physics)
2091 CASE (KESSLERSCHEME)
2094 CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2096 CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2098 CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2100 adv_moist_cond = .false.
2101 CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart, &
2102 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2103 mp_restart_state,tbpvs_state,tbpvs0_state,&
2105 ids, ide, jds, jde, kds, kde, &
2106 ims, ime, jms, jme, kms, kme, &
2107 its, ite, jts, jte, kts, kte )
2110 CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart, &
2111 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2113 ids, ide, jds, jde, kds, kde, &
2114 ims, ime, jms, jme, kms, kme, &
2115 its, ite, jts, jte, kts, kte )
2118 ! Cycling the WRF forecast with moving nests will cause this initialization to be
2119 ! called for each nest move. This is potentially very computationally expensive.
2120 IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
2123 IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson07_init
2125 CASE (MORR_TWO_MOMENT)
2126 CALL morr_two_moment_init
2127 CASE (MILBRANDT2MOM)
2128 CALL milbrandt2mom_init
2129 ! CASE (MILBRANDT3MOM)
2130 ! CALL milbrandt3mom_init
2132 CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2134 CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2138 END SELECT mp_select
2140 END SUBROUTINE mp_init
2142 #if ( EM_CORE == 1 )
2143 !==========================================================
2144 SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
2145 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
2146 config_flags,restart, &
2148 ids, ide, jds, jde, kds, kde, &
2149 ims, ime, jms, jme, kms, kme, &
2150 its, ite, jts, jte, kts, kte )
2153 !--------------------------------------------------------------------
2154 USE module_fdda_psufddagd
2155 USE module_fdda_spnudging, ONLY : fddaspnudginginit
2156 !--------------------------------------------------------------------
2158 !--------------------------------------------------------------------
2159 TYPE (grid_config_rec_type) :: config_flags
2160 LOGICAL , INTENT(IN) :: restart
2162 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2163 ims, ime, jms, jme, kms, kme, &
2164 its, ite, jts, jte, kts, kte
2166 REAL , INTENT(IN) :: DT, FGDT
2167 INTEGER , INTENT(IN) :: id
2168 INTEGER , INTENT(INOUT) :: STEPFG
2169 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2175 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
2177 LOGICAL, INTENT(IN) :: allowed_to_read
2178 !--------------------------------------------------------------------
2180 !-- calculate pbl time step
2182 STEPFG = nint(FGDT*60./DT)
2183 STEPFG = max(STEPFG,1)
2186 !-- initialize fdda scheme
2188 fdda_select: SELECT CASE(config_flags%grid_fdda)
2191 CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
2192 config_flags%run_hours, &
2193 config_flags%if_no_pbl_nudging_uv, &
2194 config_flags%if_no_pbl_nudging_t, &
2195 config_flags%if_no_pbl_nudging_q, &
2196 config_flags%if_zfac_uv, &
2197 config_flags%k_zfac_uv, &
2198 config_flags%if_zfac_t, &
2199 config_flags%k_zfac_t, &
2200 config_flags%if_zfac_q, &
2201 config_flags%k_zfac_q, &
2203 config_flags%gt, config_flags%gq, &
2204 config_flags%if_ramping, config_flags%dtramp_min, &
2205 config_flags%auxinput10_end_h, &
2206 config_flags%grid_sfdda, &
2207 config_flags%guv_sfc, &
2208 config_flags%gt_sfc, &
2209 config_flags%gq_sfc, &
2210 restart, allowed_to_read, &
2211 ids, ide, jds, jde, kds, kde, &
2212 ims, ime, jms, jme, kms, kme, &
2213 its, ite, jts, jte, kts, kte )
2216 CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
2217 config_flags%run_hours, &
2218 config_flags%if_no_pbl_nudging_uv, &
2219 config_flags%if_no_pbl_nudging_t, &
2220 config_flags%if_no_pbl_nudging_ph, &
2221 config_flags%if_zfac_uv, &
2222 config_flags%k_zfac_uv, &
2223 config_flags%dk_zfac_uv, &
2224 config_flags%if_zfac_t, &
2225 config_flags%k_zfac_t, &
2226 config_flags%dk_zfac_t, &
2227 config_flags%if_zfac_ph, &
2228 config_flags%k_zfac_ph, &
2229 config_flags%dk_zfac_ph, &
2231 config_flags%gt, config_flags%gph, &
2232 config_flags%if_ramping, config_flags%dtramp_min, &
2233 config_flags%auxinput9_end_h, &
2234 config_flags%xwavenum,config_flags%ywavenum, &
2235 restart, allowed_to_read, &
2236 ids, ide, jds, jde, kds, kde, &
2237 ims, ime, jms, jme, kms, kme, &
2238 its, ite, jts, jte, kts, kte )
2242 END SELECT fdda_select
2244 END SUBROUTINE fg_init
2246 !-------------------------------------------------------------------
2247 SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid, &
2248 idynin, dtramp, fdaend, restart, &
2249 obs_twindo_cg, obs_twindo, itimestep, &
2253 sfcfact, sfcfacr, dpsmx, &
2254 nudge_wind, nudge_temp, nudge_mois, &
2255 nudgezfullr1_uv, nudgezrampr1_uv, &
2256 nudgezfullr2_uv, nudgezrampr2_uv, &
2257 nudgezfullr4_uv, nudgezrampr4_uv, &
2258 nudgezfullr1_t, nudgezrampr1_t, &
2259 nudgezfullr2_t, nudgezrampr2_t, &
2260 nudgezfullr4_t, nudgezrampr4_t, &
2261 nudgezfullr1_q, nudgezrampr1_q, &
2262 nudgezfullr2_q, nudgezrampr2_q, &
2263 nudgezfullr4_q, nudgezrampr4_q, &
2264 nudgezfullmin, nudgezrampmin, nudgezmax, &
2266 start_year, start_month, start_day, &
2267 start_hour, start_minute, start_second, &
2271 ids, ide, jds, jde, kds, kde, &
2272 ims, ime, jms, jme, kms, kme, &
2273 its, ite, jts, jte, kts, kte )
2275 !--------------------------------------------------------------------
2277 USE module_fddaobs_rtfdda
2279 !--------------------------------------------------------------------
2281 !--------------------------------------------------------------------
2282 INTEGER , INTENT(IN) :: maxdom
2283 INTEGER , INTENT(IN) :: obs_nudge_opt(maxdom)
2284 INTEGER , INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
2285 ims,ime, jms,jme, kms,kme, &
2286 its,ite, jts,jte, kts,kte
2287 INTEGER , INTENT(IN) :: inest
2288 INTEGER , INTENT(IN) :: parid(maxdom)
2289 INTEGER , INTENT(IN) :: idynin ! flag for dynamic initialization
2290 REAL , INTENT(IN) :: dtramp ! time period for ramping (idynin)
2291 REAL , INTENT(IN) :: fdaend(maxdom) ! nudging end time for domain (min)
2292 LOGICAL , INTENT(IN) :: restart
2293 REAL , INTENT(IN) :: obs_twindo_cg ! twindo on course grid
2294 REAL , INTENT(IN) :: obs_twindo
2295 INTEGER , INTENT(IN) :: itimestep
2296 INTEGER , INTENT(IN) :: no_pbl_nudge_uv(maxdom) ! flags for no wind nudging in pbl
2297 INTEGER , INTENT(IN) :: no_pbl_nudge_t(maxdom) ! flags for no temperature nudging in pbl
2298 INTEGER , INTENT(IN) :: no_pbl_nudge_q(maxdom) ! flags for no moisture nudging in pbl
2299 REAL , INTENT(IN) :: sfcfact ! scale factor applied to time window for surface obs
2300 REAL , INTENT(IN) :: sfcfacr ! scale fac applied to horiz rad of infl for sfc obs
2301 REAL , INTENT(IN) :: dpsmx ! max pressure change allowed within horiz. infl. range
2302 INTEGER , INTENT(IN) :: nudge_wind(maxdom) ! wind-nudging flag
2303 INTEGER , INTENT(IN) :: nudge_temp(maxdom) ! temperature-nudging flag
2304 INTEGER , INTENT(IN) :: nudge_mois(maxdom) ! moisture-nudging flag
2305 REAL , INTENT(IN) :: nudgezfullr1_uv ! vert infl fcn, regime=1 full-wt hght, winds
2306 REAL , INTENT(IN) :: nudgezrampr1_uv ! vert infl fcn, regime=1 ramp down hght, winds
2307 REAL , INTENT(IN) :: nudgezfullr2_uv ! vert infl fcn, regime=2 full-wt hght, winds
2308 REAL , INTENT(IN) :: nudgezrampr2_uv ! vert infl fcn, regime=2 ramp down hght, winds
2309 REAL , INTENT(IN) :: nudgezfullr4_uv ! vert infl fcn, regime=4 full-wt hght, winds
2310 REAL , INTENT(IN) :: nudgezrampr4_uv ! vert infl fcn, regime=4 ramp down hght, winds
2311 REAL , INTENT(IN) :: nudgezfullr1_t ! vert infl fcn, regime=1 full-wt hght, temp
2312 REAL , INTENT(IN) :: nudgezrampr1_t ! vert infl fcn, regime=1 ramp down hght, temp
2313 REAL , INTENT(IN) :: nudgezfullr2_t ! vert infl fcn, regime=2 full-wt hght, temp
2314 REAL , INTENT(IN) :: nudgezrampr2_t ! vert infl fcn, regime=2 ramp down hght, temp
2315 REAL , INTENT(IN) :: nudgezfullr4_t ! vert infl fcn, regime=4 full-wt hght, temp
2316 REAL , INTENT(IN) :: nudgezrampr4_t ! vert infl fcn, regime=4 ramp down hght, temp
2317 REAL , INTENT(IN) :: nudgezfullr1_q ! vert infl fcn, regime=1 full-wt hght, mois
2318 REAL , INTENT(IN) :: nudgezrampr1_q ! vert infl fcn, regime=1 ramp down hght, mois
2319 REAL , INTENT(IN) :: nudgezfullr2_q ! vert infl fcn, regime=2 full-wt hght, mois
2320 REAL , INTENT(IN) :: nudgezrampr2_q ! vert infl fcn, regime=2 ramp down hght, mois
2321 REAL , INTENT(IN) :: nudgezfullr4_q ! vert infl fcn, regime=4 full-wt hght, mois
2322 REAL , INTENT(IN) :: nudgezrampr4_q ! vert infl fcn, regime=4 ramp down hght, mois
2323 REAL , INTENT(IN) :: nudgezfullmin ! min dpth thru which vert infl fcn remains 1.0 (m)
2324 REAL , INTENT(IN) :: nudgezrampmin ! min dpth thru which vif decreases 1.0 to 0.0 (m)
2325 REAL , INTENT(IN) :: nudgezmax ! max dpth in which vif is nonzero (m)
2326 REAL , INTENT(IN) :: xlat ( ims:ime, jms:jme ) ! latitudes on mass-point grid
2327 REAL , INTENT(IN) :: xlong( ims:ime, jms:jme ) ! longitudes on mass-point grid
2328 INTEGER , INTENT(INOUT) :: start_year
2329 INTEGER , INTENT(INOUT) :: start_month
2330 INTEGER , INTENT(INOUT) :: start_day
2331 INTEGER , INTENT(INOUT) :: start_hour
2332 INTEGER , INTENT(INOUT) :: start_minute
2333 INTEGER , INTENT(INOUT) :: start_second
2334 REAL , INTENT(IN) :: p00 ! base state pressure
2335 REAL , INTENT(IN) :: t00 ! base state temperature
2336 REAL , INTENT(IN) :: tlp ! base state lapse rate
2337 REAL , INTENT(IN) :: znu( kms:kme ) ! eta values on half (mass) levels
2338 REAL , INTENT(IN) :: p_top ! pressure at top of model
2339 TYPE(fdob_type), INTENT(INOUT) :: fdob
2341 INTEGER :: e_sn ! ending north-south grid index
2342 LOGICAL :: ipf_init ! print warnings detected at initialzn
2343 !--------------------------------------------------------------------
2344 !-- initialize fdda obs-nudging scheme
2346 IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
2349 CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid, &
2350 idynin, dtramp, fdaend, restart, &
2352 obs_twindo, itimestep, &
2356 sfcfact, sfcfacr, dpsmx, &
2357 nudge_wind, nudge_temp, nudge_mois, &
2358 nudgezfullr1_uv, nudgezrampr1_uv, &
2359 nudgezfullr2_uv, nudgezrampr2_uv, &
2360 nudgezfullr4_uv, nudgezrampr4_uv, &
2361 nudgezfullr1_t, nudgezrampr1_t, &
2362 nudgezfullr2_t, nudgezrampr2_t, &
2363 nudgezfullr4_t, nudgezrampr4_t, &
2364 nudgezfullr1_q, nudgezrampr1_q, &
2365 nudgezfullr2_q, nudgezrampr2_q, &
2366 nudgezfullr4_q, nudgezrampr4_q, &
2367 nudgezfullmin, nudgezrampmin, nudgezmax, &
2369 start_year, start_month, start_day, &
2370 start_hour, start_minute, start_second, &
2374 ids,ide, jds,jde, kds,kde, &
2375 ims,ime, jms,jme, kms,kme, &
2376 its,ite, jts,jte, kts,kte)
2378 END SUBROUTINE fdob_init
2381 !--------------------------------------------------------------------
2382 SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
2384 kds,kde,kms,kme,kts,kte)
2387 INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
2388 REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
2389 REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
2390 REAL , INTENT(IN) :: p_top
2391 REAL , INTENT(OUT) :: pptop
2392 TYPE (grid_config_rec_type) :: config_flags
2393 LOGICAL , INTENT(IN) :: allowed_to_read
2395 REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
2398 IF(zf(kde/2) .GT. 1.0)THEN
2399 ! Height levels assumed (zeta coordinate)
2400 ! Convert to sigma using standard atmosphere for pressure-height relation
2401 ! constants for standard atmosphere definition
2408 tstrat=ts+gamma*ztrop
2409 ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
2416 p=ps*(t/ts)**(-g/(gamma*r))
2419 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2425 sf(k)=(p-ptop)/(ps-ptop)
2428 z=0.5*(zf(k)+zf(k-1))
2431 p=ps*(t/ts)**(-g/(gamma*r))
2434 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2436 sh(k-1)=(p-ptop)/(ps-ptop)
2441 ! Levels are already sigma/eta
2443 ! sf(k)=zf(kde-k+kds)
2444 ! if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
2446 if(k .ne. kde)sh(k)=zh(k)
2452 END SUBROUTINE z2sigma
2454 END MODULE module_physics_init