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, &
24 RTHCUTEN, RQVCUTEN, RQRCUTEN, &
25 RQCCUTEN, RQSCUTEN, RQICUTEN, &
26 RUSHTEN, RVSHTEN, RTHSHTEN, &
27 RQVSHTEN, RQRSHTEN, RQCSHTEN, &
28 RQSSHTEN, RQISHTEN, RQGSHTEN, &
29 RUBLTEN,RVBLTEN,RTHBLTEN, &
30 RQVBLTEN,RQCBLTEN,RQIBLTEN, &
31 RTHRATEN,RTHRATENLW,RTHRATENSW, &
32 STEPBL,STEPRA,STEPCU, &
33 W0AVG, RAINNC, RAINC, RAINCV, RAINNCV, &
34 SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV, &
39 CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new
41 landuse_ISICE, landuse_LUCATS, &
42 landuse_LUSEAS, landuse_ISN, &
44 XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
45 levsiz, n_ozmixm, n_aerosolc, paerlev, &
46 TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_PBL, &
47 EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
48 TSLB,ZS,DZS,num_soil_layers,warm_rain, &
50 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
51 APR_CAPMA,APR_CAPME,APR_CAPMI, &
52 XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV, &
53 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
54 ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS, &
55 SH2O, SNOWH, SMFR3D, & ! temporary
57 DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
58 mp_restart_state,tbpvs_state,tbpvs0_state,&
59 allowed_to_read, moved, start_of_simulation,&
61 ids, ide, jds, jde, kds, kde, &
62 ims, ime, jms, jme, kms, kme, &
63 its, ite, jts, jte, kts, kte, &
65 ozmixm,pin, & ! Optional
66 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
67 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, & ! Optional
68 RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, & ! Optional
69 FGDT,STEPFG, & ! Optional
70 cugd_tten,cugd_ttens,cugd_qvten, & ! Optional
71 cugd_qvtens,cugd_qcten, & ! Optional
72 ! num_roof_layers,num_wall_layers, & !Optional urban
73 ! num_road_layers, & !Optional urban
74 DZR, DZB, DZG, & !Optional urban
75 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D, & !Optional urban
76 QC_URB2D, XXXR_URB2D,XXXB_URB2D, & !Optional urban
77 XXXG_URB2D, XXXC_URB2D, & !Optional urban
78 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
79 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
80 TS_URB2D, FRC_URB2D, UTYPE_URB2D, & !Optional urban
81 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
82 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
83 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
84 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
85 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
86 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
87 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
88 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
89 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
90 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
91 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
92 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
93 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
94 TML,T0ML,HML,H0ML,HUML,HVML,TMOML, & !Optional oml
95 itimestep, & !Optional obs fdda
97 fdob, & !Optional obs fdda
99 t00, p00, tlp, & !for obs-nudging
100 TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update, &
101 ACHFX,ACLHF,ACGRDFLX &
103 ,te_temf & ! WA 12/21/09
104 ,cf3d_temf & ! WA 9/27/10
105 ,wm_temf & ! WA 2/22/11
108 !-----------------------------------------------------------------
111 USE module_wind_generic
112 USE module_wind_fitch
114 !-----------------------------------------------------------------
115 TYPE (grid_config_rec_type) :: config_flags
117 INTEGER , INTENT(IN) :: id
118 INTEGER , INTENT(IN) ,OPTIONAL :: tmn_update
119 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
120 ! LOGICAL , INTENT (IN) :: FNDSOILW, FNDSNOWH
121 LOGICAL, PARAMETER :: FNDSOILW=.true., FNDSNOWH=.true.
122 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
123 ims, ime, jms, jme, kms, kme, &
124 its, ite, jts, jte, kts, kte
126 INTEGER , INTENT(IN) :: num_soil_layers
127 INTEGER , INTENT(IN) :: lagday
128 INTEGER , INTENT(OUT) ,OPTIONAL :: nyear
129 REAL , INTENT(OUT) ,OPTIONAL :: nday
131 LOGICAL, INTENT(IN) :: start_of_simulation
132 REAL, INTENT(IN) :: DT, p_top, DX, DY
133 LOGICAL, INTENT(IN) :: restart
134 REAL, INTENT(IN) :: RADT,BLDT,CUDT,MPDT
135 REAL, INTENT(IN) :: swrad_scat
137 REAL, DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
138 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
140 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
141 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
143 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
144 INTENT(INOUT) :: OZMIXM
146 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
148 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
149 REAL, DIMENSION(paerlev), OPTIONAL,INTENT(INOUT) :: m_hybi
150 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
151 INTENT(INOUT) :: aerosolc_1, aerosolc_2
153 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
154 INTENT(INOUT) :: SMOIS, SH2O,TSLB
155 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
157 REAL, DIMENSION( ims:ime, jms:jme ) , &
158 INTENT(INOUT) :: SNOW, &
174 REAL, DIMENSION( ims:ime, jms:jme ) , &
175 OPTIONAL, INTENT(INOUT) :: ACHFX, &
179 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
180 INTENT(INOUT) :: IVGTYP, &
185 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
186 RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
188 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
191 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
192 GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK !EMBCK new
193 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: SNOALB
196 REAL, INTENT(IN) :: GMT
198 INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
199 INTEGER , INTENT(IN) :: JULYR, JULDAY
203 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
204 RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, &
205 RQSCUTEN, RQICUTEN, &
206 RUSHTEN, RVSHTEN, RTHSHTEN, RQVSHTEN, RQRSHTEN, RQCSHTEN, &
207 RQSSHTEN, RQISHTEN, RQGSHTEN
209 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
211 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX, &
212 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
213 APR_CAPMA,APR_CAPME,APR_CAPMI
215 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
218 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: &
219 RAINNC, RAINC, RAINCV, RAINNCV, &
220 SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV
222 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
224 INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
231 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
233 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
234 RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_PBL
235 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
236 cugd_tten,cugd_ttens,cugd_qvten, &
237 cugd_qvtens,cugd_qcten
238 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
239 XLAND,ZNT,Z0,UST,MOL,LU_INDEX, &
240 PBLH,THC,MAVAIL,HFX,QFX,RAINBL
241 INTEGER , INTENT(INOUT) :: landuse_ISICE, landuse_LUCATS
242 INTEGER , INTENT(INOUT) :: landuse_LUSEAS, landuse_ISN
243 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
245 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
246 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
247 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
248 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
249 REAL, DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
252 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
253 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
254 REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
255 LOGICAL, INTENT(IN) :: allowed_to_read, moved
258 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
259 TML,T0ML,HML,H0ML,HUML,HVML,TMOML
262 REAL, OPTIONAL, INTENT(IN) :: FGDT
263 INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
264 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
265 RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
266 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
270 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !urban
271 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !urban
272 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !urban
273 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !urban
274 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !urban
275 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !urban
277 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
278 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
279 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
280 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
281 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
282 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
283 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
284 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
285 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
287 ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
288 ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
289 ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
290 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
291 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
292 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
294 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
295 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
296 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
297 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
298 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
299 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
300 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
302 INTEGER , INTENT(IN) :: num_urban_layers
303 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
304 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
305 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
306 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
307 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
308 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
309 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
310 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
311 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
312 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
313 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
314 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
315 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
316 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
317 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
318 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
319 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
320 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
321 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
322 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
323 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
324 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
325 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
326 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
327 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
328 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
329 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
330 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
331 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
332 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
333 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
334 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
335 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
336 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
337 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
340 INTEGER, OPTIONAL, INTENT(IN) :: itimestep
342 TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
344 REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp ! for obs-nudging base-state calcn
347 REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
348 INTENT(OUT) :: te_temf, cf3d_temf
350 REAL,OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
351 INTENT(OUT) :: wm_temf
355 REAL :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
356 REAL, DIMENSION( kms:kme ) :: sfull, shalf
357 REAL :: obs_twindo_cg, obs_twindo
359 CHARACTER*256 :: MMINLU_loc
360 CHARACTER*80 :: message
364 INTEGER :: sf_urban_physics
370 INTEGER :: i, j, k, itf, jtf, n
373 !-----------------------------------------------------------------
375 sf_urban_physics=config_flags%sf_urban_physics
376 usemonalb=config_flags%usemonalb
377 rdmaxalb=config_flags%rdmaxalb
379 obs_twindo_cg=model_config_rec%obs_twindo(1)
380 obs_twindo=config_flags%obs_twindo
381 oml_hml0=config_flags%oml_hml0
382 omlcall=config_flags%omlcall
385 !-- should be from the namelist
390 CALL wrf_debug(100,'top of phy_init')
392 WRITE(wrf_err_message,*) 'phy_init: start_of_simulation = ',start_of_simulation
393 CALL wrf_debug ( 100, TRIM(wrf_err_message) )
405 if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
408 CALL nl_get_cen_lat(id,cen_lat)
409 CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
410 CALL nl_get_iswater(id,iswater)
411 CALL nl_get_isice(id,isice)
412 CALL nl_get_isurban(id,isurban)
413 CALL nl_get_mminlu( 1, mminlu_loc )
414 CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
415 !-- temporary fix by ww
416 landuse_ISICE = isice
418 ! Added for Wind Turbine parameterization code -- This will only read in an optional
419 ! configuration file with information that will be used by inividual turbine init routines
420 ! as each domain is initialized.
421 IF ( id .EQ. 1 ) THEN
422 CALL init_module_wind_generic
423 CALL init_module_wind_fitch
428 !-- initialize common variables
430 IF ( .NOT. moved ) THEN
436 !-- initialize ust to a small value
447 DO k=kms,kme !wig, 17-May-2006: Added for idealized chem. runs
454 IF(PRESENT(TMN_UPDATE))THEN
455 if(tmn_update.eq.1) then
475 IF(XLAND(i,j) .LT. 1.5)THEN
476 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=ALBLND
478 ALBEDO(i,j)=ALBBCK(i,j)
479 EMISS(i,j)=EMBCK(i,j)
482 #if ! ( NMM_CORE == 1 )
487 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=0.08
488 ALBEDO(i,j)=ALBBCK(i,j)
490 EMISS(i,j)=EMBCK(i,j)
493 #if ! ( NMM_CORE == 1 )
502 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
504 IF(mminlu_loc .ne. ' ')THEN
505 !-- initialize surface properties
507 CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
508 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
509 TRIM ( mminlu_loc ) , &
510 landuse_ISICE, landuse_LUCATS, &
511 landuse_LUSEAS, landuse_ISN, &
512 config_flags%fractional_seaice, &
514 allowed_to_read , usemonalb , &
515 ids, ide, jds, jde, kds, kde, &
516 ims, ime, jms, jme, kms, kme, &
517 its, ite, jts, jte, kts, kte )
522 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
523 !-- zfull/zhalf may be either zeta or eta
524 !-- what is done here depends on coordinate (check this code if adding new coordinates)
525 CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
527 kds,kde,kms,kme,kts,kte)
529 !-- initialize physics
535 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
537 CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW, &
538 RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT, &
539 levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm, &
540 cldfra_old=cldfra_old, & ! Optional
541 ozmixm=ozmixm,pin=pin, & ! Optional
542 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
543 paerlev=paerlev,n_aerosolc=n_aerosolc, &
544 sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top, &
545 config_flags=config_flags,restart=restart, &
546 allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation, &
547 ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, &
548 ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, &
549 its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte )
551 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
552 CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
553 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
554 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
555 num_soil_layers,TKE_PBL, &
557 SNOW,SNOWC, CANWAT,SMSTAV, &
558 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
559 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL, &
560 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
569 start_of_simulation , &
570 te_temf,cf3d_temf,wm_temf, & ! WA
571 DZR, DZB, DZG, & !Optional urban
572 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
573 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
574 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
575 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
576 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
577 SF_URBAN_PHYSICS, & !Optional urban
578 NUM_URBAN_LAYERS, & !Optional multi-layer urban
579 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
580 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
581 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
582 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
583 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
584 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
585 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
586 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
587 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
588 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
589 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
590 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
591 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
592 ids, ide, jds, jde, kds, kde, &
593 ims, ime, jms, jme, kms, kme, &
594 its, ite, jts, jte, kts, kte, &
595 ACHFX,ACLHF,ACGRDFLX, &
596 oml_hml0, omlcall, & !Optional oml
597 TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
599 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
601 CALL cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
602 RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN, &
603 NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
604 CLDEFI,LOWLYR,MASS_FLUX, &
606 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
607 APR_CAPMA,APR_CAPME,APR_CAPMI, &
608 cugd_tten,cugd_ttens,cugd_qvten, &
609 cugd_qvtens,cugd_qcten, &
610 allowed_to_read, start_of_simulation, &
611 ids, ide, jds, jde, kds, kde, &
612 ims, ime, jms, jme, kms, kme, &
613 its, ite, jts, jte, kts, kte )
615 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to shcu_init' )
617 CALL shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
618 RQVSHTEN,RQRSHTEN,RQCSHTEN, &
619 RQSSHTEN,RQISHTEN,RQGSHTEN, &
620 NCA,RAINC,RAINCV,config_flags,restart, &
621 allowed_to_read, start_of_simulation, &
622 ids, ide, jds, jde, kds, kde, &
623 ims, ime, jms, jme, kms, kme, &
624 its, ite, jts, jte, kts, kte )
626 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
628 CALL mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
630 MPDT, DT, DX, DY, LOWLYR, &
631 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
632 mp_restart_state,tbpvs_state,tbpvs0_state, &
633 allowed_to_read, start_of_simulation, &
634 ids, ide, jds, jde, kds, kde, &
635 ims, ime, jms, jme, kms, kme, &
636 its, ite, jts, jte, kts, kte )
639 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
641 CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
642 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
643 config_flags,restart, &
645 ids, ide, jds, jde, kds, kde, &
646 ims, ime, jms, jme, kms, kme, &
647 its, ite, jts, jte, kts, kte )
649 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
651 CALL fdob_init(model_config_rec%obs_nudge_opt, &
652 model_config_rec%max_dom, &
654 model_config_rec%parent_id, &
655 model_config_rec%obs_idynin, &
656 model_config_rec%obs_dtramp, &
657 model_config_rec%fdda_end, &
658 model_config_rec%restart, &
659 obs_twindo_cg, obs_twindo, &
661 model_config_rec%obs_no_pbl_nudge_uv, &
662 model_config_rec%obs_no_pbl_nudge_t, &
663 model_config_rec%obs_no_pbl_nudge_q, &
664 model_config_rec%obs_sfc_scheme_horiz, &
665 model_config_rec%obs_sfc_scheme_vert, &
666 model_config_rec%obs_max_sndng_gap, &
667 model_config_rec%obs_sfcfact, &
668 model_config_rec%obs_sfcfacr, &
669 model_config_rec%obs_dpsmx, &
670 model_config_rec%obs_nudge_wind, &
671 model_config_rec%obs_nudge_temp, &
672 model_config_rec%obs_nudge_mois, &
673 model_config_rec%obs_nudgezfullr1_uv, &
674 model_config_rec%obs_nudgezrampr1_uv, &
675 model_config_rec%obs_nudgezfullr2_uv, &
676 model_config_rec%obs_nudgezrampr2_uv, &
677 model_config_rec%obs_nudgezfullr4_uv, &
678 model_config_rec%obs_nudgezrampr4_uv, &
679 model_config_rec%obs_nudgezfullr1_t, &
680 model_config_rec%obs_nudgezrampr1_t, &
681 model_config_rec%obs_nudgezfullr2_t, &
682 model_config_rec%obs_nudgezrampr2_t, &
683 model_config_rec%obs_nudgezfullr4_t, &
684 model_config_rec%obs_nudgezrampr4_t, &
685 model_config_rec%obs_nudgezfullr1_q, &
686 model_config_rec%obs_nudgezrampr1_q, &
687 model_config_rec%obs_nudgezfullr2_q, &
688 model_config_rec%obs_nudgezrampr2_q, &
689 model_config_rec%obs_nudgezfullr4_q, &
690 model_config_rec%obs_nudgezrampr4_q, &
691 model_config_rec%obs_nudgezfullmin, &
692 model_config_rec%obs_nudgezrampmin, &
693 model_config_rec%obs_nudgezmax, &
696 model_config_rec%start_year(id), &
697 model_config_rec%start_month(id), &
698 model_config_rec%start_day(id), &
699 model_config_rec%start_hour(id), &
700 model_config_rec%start_minute(id), &
701 model_config_rec%start_second(id), &
705 model_config_rec%obs_ipf_init, &
706 ids, ide, jds, jde, kds, kde, &
707 ims, ime, jms, jme, kms, kme, &
708 its, ite, jts, jte, kts, kte )
712 END SUBROUTINE phy_init
714 !=====================================================================
715 SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
716 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu, &
717 ISICE, LUCATS, LUSEAS, ISN, &
720 allowed_to_read , usemonalb , &
721 ids, ide, jds, jde, kds, kde, &
722 ims, ime, jms, jme, kms, kme, &
723 its, ite, jts, jte, kts, kte )
728 !---------------------------------------------------------------------
729 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
730 ims, ime, jms, jme, kms, kme, &
731 its, ite, jts, jte, kts, kte
733 INTEGER , INTENT(IN) :: iswater, julday
734 REAL , INTENT(IN) :: cen_lat
735 CHARACTER(LEN=*), INTENT(IN) :: mminlu
736 LOGICAL, INTENT(IN) :: allowed_to_read , usemonalb
737 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: lu_index, snowc, xice, snoalb
738 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: albedo, albbck, mavail, emiss, &
740 znt, Z0, thc, xland, xicem
741 INTEGER , INTENT(INOUT) :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
742 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
744 REAL :: xice_threshold
745 !---------------------------------------------------------------------
748 CHARACTER*80 :: message
749 INTEGER :: landuse_unit, LS, LC, LI, LUN, NSN
750 INTEGER :: i, j, itf, jtf, is, cats, seas, curs
751 INTEGER , PARAMETER :: OPEN_OK = 0
753 INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
754 REAL , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
755 REAL , DIMENSION( max_cats ) :: SCFX
756 ! save these fields in case nest moves or has to be reinitialized
757 ! and this routine is called with allowed_to_read set to false
758 ! note that by saving these, we're locking in the same landuse for
759 ! the duration of a run; possible implications for long climate runs
760 LOGICAL :: found_lu, end_of_file
761 LOGICAL, EXTERNAL :: wrf_dm_on_monitor
763 !---------------------------------------------------------------------
765 CALL wrf_debug( 100 , 'top of landuse_init' )
767 NSN=-1 ! set this to suppress uninitalized data messages from tools
769 if ( fractional_seaice == 0 ) then
771 else if ( fractional_seaice == 1 ) then
772 xice_threshold = 0.02
775 ! recover LU variables from state
776 IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
777 WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
780 DO cats = 1, max_cats
781 SCFX(cats) = lu_state(curs) ; curs = curs + 1
782 DO seas = 1, max_seas
783 ALBD(cats,seas) = lu_state(curs) ; curs = curs + 1
784 SLMO(cats,seas) = lu_state(curs) ; curs = curs + 1
785 SFEM(cats,seas) = lu_state(curs) ; curs = curs + 1
786 SFZ0(cats,seas) = lu_state(curs) ; curs = curs + 1
787 SFHC(cats,seas) = lu_state(curs) ; curs = curs + 1
788 THERIN(cats,seas) = lu_state(curs) ; curs = curs + 1
792 ! Determine season (summer=1, winter=2)
794 IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
795 IF(CEN_LAT.LT.0.0)ISN=3-ISN
798 IF ( allowed_to_read ) THEN
800 IF ( wrf_dm_on_monitor() ) THEN
801 OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
802 IF ( ierr .NE. OPEN_OK ) THEN
803 WRITE(message,FMT='(A)') &
804 'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
805 CALL wrf_error_fatal ( message )
809 ! Read info from file LANDUSE.TBL
810 ! IF(MMINLU.EQ.'OLD ')THEN
813 ! ELSE IF(MMINLU.EQ.'USGS')THEN
816 ! ELSE IF(MMINLU.EQ.'SiB ')THEN
819 ! ELSE IF(MMINLU.EQ.'LW12')THEN
822 ! ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
825 ! call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
827 call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
829 end_of_file = .FALSE.
830 !!! BEGINNING OF 1999 LOOP
832 IF ( wrf_dm_on_monitor() ) THEN
833 READ (landuse_unit,*,END=2002)LUTYPE
836 CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
839 IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
840 FOUND_LU = LUTYPE.EQ.MMINLU
842 CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
843 IF ( .NOT. end_of_file ) THEN
844 CALL wrf_dm_bcast_string(lutype, 256)
845 CALL wrf_dm_bcast_bytes (lucats, IWORDSIZE )
846 CALL wrf_dm_bcast_bytes (luseas, IWORDSIZE )
847 CALL wrf_dm_bcast_bytes (found_lu, LWORDSIZE )
851 PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND', &
852 LUCATS,' CATEGORIES',LUSEAS,' SEASONS', &
853 ' WATER CATEGORY = ',ISWATER, &
854 ' SNOW CATEGORY = ',ISICE
857 if ( wrf_dm_on_monitor() ) then
858 READ (landuse_unit,*)
862 IF ( wrf_dm_on_monitor() ) THEN
863 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS), &
864 SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
866 CALL wrf_dm_bcast_bytes (LI, IWORDSIZE )
867 IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
869 IF ( wrf_dm_on_monitor() ) THEN
870 READ (landuse_unit,*)
875 IF(NSN.EQ.1.AND.FOUND_LU) THEN
878 CALL wrf_dm_bcast_bytes (albd, max_cats * max_seas * RWORDSIZE )
879 CALL wrf_dm_bcast_bytes (slmo, max_cats * max_seas * RWORDSIZE )
880 CALL wrf_dm_bcast_bytes (sfem, max_cats * max_seas * RWORDSIZE )
881 CALL wrf_dm_bcast_bytes (sfz0, max_cats * max_seas * RWORDSIZE )
882 CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
883 CALL wrf_dm_bcast_bytes (sfhc, max_cats * max_seas * RWORDSIZE )
884 CALL wrf_dm_bcast_bytes (scfx, max_cats * RWORDSIZE )
887 IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
890 IF(.NOT. found_lu .OR. end_of_file )THEN
891 CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
893 ENDIF ! allowed_to_read
896 ! Set arrays according to lu_index
897 itf = min0(ite, ide-1)
898 jtf = min0(jte, jde-1)
899 IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
902 IS=nint(lu_index(i,j))
903 ! only do this check on read-in data
904 IF(IS.LT.0.OR.IS.GT.LUN.AND.allowed_to_read)THEN
905 WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
906 CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
908 ! SET NO-DATA POINTS (IS=0) TO WATER
912 IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
913 ALBEDO(I,J)=ALBBCK(I,J)
914 IF(SNOWC(I,J) .GT. 0.5) THEN
916 ALBEDO(I,J)=SNOALB(I,J)
918 ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
921 THC(I,J)=THERIN(IS,ISN)/100.
922 Z0(I,J)=SFZ0(IS,ISN)/100.
924 EMBCK(I,J)=SFEM(IS,ISN)
925 EMISS(I,J)=EMBCK(I,J)
926 MAVAIL(I,J)=SLMO(IS,ISN)
927 IF(IS.NE.ISWATER)THEN
932 ! SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
934 IF(XICE(I,J).GE.xice_threshold)THEN
936 ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
937 EMBCK(I,J)=SFEM(ISICE,ISN)
938 IF (FRACTIONAL_SEAICE == 1) THEN
939 ! The 0.08 value is the albedo over open water.
940 ! The 0.98 value is the emissivity over open water.
941 ALBEDO(I,J) = ( XICE(I,J) * ALBBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.08 )
942 EMISS(I,J) = ( XICE(I,J) * EMBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.98 )
944 ALBEDO(I,J)=ALBBCK(I,J)
945 EMISS(I,J)=EMBCK(I,J)
947 THC(I,J)=THERIN(ISICE,ISN)/100.
948 Z0(I,J)=SFZ0(ISICE,ISN)/100.
950 MAVAIL(I,J)=SLMO(ISICE,ISN)
955 if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
958 CALL wrf_debug( 100 , 'returning from of landuse_init' )
960 ! restore LU variables from state
962 DO cats = 1, max_cats
963 lu_state(curs) = SCFX(cats) ; curs = curs + 1
964 DO seas = 1, max_seas
965 lu_state(curs) = ALBD(cats,seas) ; curs = curs + 1
966 lu_state(curs) = SLMO(cats,seas) ; curs = curs + 1
967 lu_state(curs) = SFEM(cats,seas) ; curs = curs + 1
968 lu_state(curs) = SFZ0(cats,seas) ; curs = curs + 1
969 lu_state(curs) = SFHC(cats,seas) ; curs = curs + 1
970 lu_state(curs) = THERIN(cats,seas) ; curs = curs + 1
975 END SUBROUTINE landuse_init
977 !=====================================================================
978 SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW, &
979 RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT, &
980 levsiz,XLAT,n_ozmixm, &
981 cldfra_old, & ! Optional
982 ozmixm,pin, & ! Optional
983 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2, & ! Optional
984 paerlev,n_aerosolc, &
985 sfull,shalf,pptop,swrad_scat,p_top, &
986 config_flags,restart, &
987 allowed_to_read, start_of_simulation, &
988 ids, ide, jds, jde, kds, kde, &
989 ims, ime, jms, jme, kms, kme, &
990 its, ite, jts, jte, kts, kte )
991 !---------------------------------------------------------------------
992 USE module_ra_rrtm , ONLY : rrtminit
993 USE module_ra_rrtmg_lw , ONLY : rrtmg_lwinit
994 USE module_ra_rrtmg_sw , ONLY : rrtmg_swinit
995 USE module_ra_cam , ONLY : camradinit
996 USE module_ra_sw , ONLY : swinit
997 USE module_ra_gsfcsw , ONLY : gsfc_swinit
998 USE module_ra_gfdleta , ONLY : gfdletainit
1000 USE module_ra_hwrf , ONLY : hwrfrainit
1002 USE module_ra_hs , ONLY : hsinit
1004 !---------------------------------------------------------------------
1006 !---------------------------------------------------------------------
1007 INTEGER, INTENT(IN) :: id
1008 TYPE (grid_config_rec_type) :: config_flags
1009 LOGICAL , INTENT(IN) :: restart
1010 LOGICAL, INTENT(IN) :: allowed_to_read
1012 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1013 ims, ime, jms, jme, kms, kme, &
1014 its, ite, jts, jte, kts, kte
1016 INTEGER , INTENT(IN) :: JULDAY,JULYR
1017 REAL , INTENT(IN) :: DT, RADT, cen_lat, GMT, pptop, &
1019 LOGICAL, INTENT(IN) :: start_of_simulation
1021 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
1022 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
1024 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: XLAT
1026 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
1027 INTENT(INOUT) :: OZMIXM
1029 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
1030 REAL, DIMENSION(paerlev), OPTIONAL, INTENT(INOUT) :: m_hybi
1031 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
1032 INTENT(INOUT) :: aerosolc_1, aerosolc_2
1034 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
1036 INTEGER , INTENT(INOUT) :: STEPRA
1039 REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
1040 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1046 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
1049 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
1050 LOGICAL :: etalw = .false.
1051 LOGICAL :: hwrflw= .false.
1052 LOGICAL :: camlw = .false.
1053 LOGICAL :: etamp = .false.
1054 LOGICAL :: acswalloc = .false.
1055 LOGICAL :: aclwalloc = .false.
1056 integer :: month,iday
1057 INTEGER :: i, j, k, itf, jtf, ktf
1058 !---------------------------------------------------------------------
1064 !---------------------------------------------------------------------
1066 !-- calculate radiation time step
1068 STEPRA = nint(RADT*60./DT)
1069 STEPRA = max(STEPRA,1)
1073 IF(start_of_simulation)THEN
1078 RTHRATENLW(i,k,j)=0.
1079 RTHRATENSW(i,k,j)=0.
1085 if( present(cldfra_old) ) then
1089 cldfra_old(i,k,j) = 0.
1096 !-- find out which microphysics option is used first
1098 mp_select: SELECT CASE(config_flags%mp_physics)
1103 END SELECT mp_select
1105 !-- chose long wave radiation scheme
1107 lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
1111 p_top, allowed_to_read , &
1112 ids, ide, jds, jde, kds, kde, &
1113 ims, ime, jms, jme, kms, kme, &
1114 its, ite, jts, jte, kts, kte )
1118 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1120 IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
1121 PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND. &
1122 PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1) &
1123 .AND. PRESENT(AEROSOLC_2)) THEN
1125 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1126 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1127 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1128 paerlev, n_aerosolc, &
1129 ids, ide, jds, jde, kds, kde, &
1130 ims, ime, jms, jme, kms, kme, &
1131 its, ite, jts, jte, kts, kte )
1133 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
1139 CASE (RRTMG_LWSCHEME)
1140 CALL rrtmg_lwinit( &
1141 p_top, allowed_to_read , &
1142 ids, ide, jds, jde, kds, kde, &
1143 ims, ime, jms, jme, kms, kme, &
1144 its, ite, jts, jte, kts, kte )
1149 CALL nl_get_start_month(id,month)
1150 CALL nl_get_start_day(id,iday)
1151 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1152 julyr,month,iday,gmt, &
1153 config_flags,allowed_to_read, &
1154 ids, ide, jds, jde, kds, kde, &
1155 ims, ime, jms, jme, kms, kme, &
1156 its, ite, jts, jte, kts, kte )
1160 CALL nl_get_start_month(id,month)
1161 CALL nl_get_start_day(id,iday)
1162 ! test this with standard jul-day calls
1163 ! CALL nl_get_start_year(id,start_year)
1164 ! CALL nl_get_start_month(id,start_month)
1165 ! CALL nl_get_start_day(id,start_day)
1166 ! CALL nl_get_start_hour(id,start_hour)
1167 ! CALL nl_get_start_minute(id,start_minute)
1168 ! CALL nl_get_start_second(id,start_second)
1169 ! CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
1170 ! CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
1171 ! julyr_start=start_year
1172 ! julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
1173 ! gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
1174 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1175 ! CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
1176 config_flags,allowed_to_read , &
1177 kds, kde, kms, kme, kts, kte )
1181 CALL hsinit(RTHRATEN,restart, &
1182 ids, ide, jds, jde, kds, kde, &
1183 ims, ime, jms, jme, kms, kme, &
1184 its, ite, jts, jte, kts, kte )
1187 END SELECT lwrad_select
1188 !-- initialize short wave radiation scheme
1190 swrad_select: SELECT CASE(config_flags%ra_sw_physics)
1196 ids, ide, jds, jde, kds, kde, &
1197 ims, ime, jms, jme, kms, kme, &
1198 its, ite, jts, jte, kts, kte )
1202 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1206 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1207 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1208 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1209 paerlev, n_aerosolc, &
1210 ids, ide, jds, jde, kds, kde, &
1211 ims, ime, jms, jme, kms, kme, &
1212 its, ite, jts, jte, kts, kte )
1217 CALL gsfc_swinit(cen_lat, allowed_to_read )
1219 CASE (RRTMG_SWSCHEME)
1220 CALL rrtmg_swinit( &
1222 ids, ide, jds, jde, kds, kde, &
1223 ims, ime, jms, jme, kms, kme, &
1224 its, ite, jts, jte, kts, kte )
1230 CALL nl_get_start_month(id,month)
1231 CALL nl_get_start_day(id,iday)
1232 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1233 julyr,month,iday,gmt, &
1234 config_flags,allowed_to_read, &
1235 ids, ide, jds, jde, kds, kde, &
1236 ims, ime, jms, jme, kms, kme, &
1237 its, ite, jts, jte, kts, kte )
1242 CALL nl_get_start_month(id,month)
1243 CALL nl_get_start_day(id,iday)
1244 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1245 config_flags,allowed_to_read, &
1246 kds, kde, kms, kme, kts, kte )
1251 END SELECT swrad_select
1253 #if ( EM_CORE == 1 )
1254 ! test for conditionally allocated arrays when using bucket_J
1256 IF(config_flags%bucket_J .gt. 0.0)THEN
1257 IF(.not. (acswalloc .and. aclwalloc))THEN
1258 CALL wrf_error_fatal ( 'Need CAM or RRTMG radiation for bucket_J option')
1263 END SUBROUTINE ra_init
1265 SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
1266 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
1267 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
1268 num_soil_layers,TKE_PBL, &
1270 SNOW,SNOWC, CANWAT,SMSTAV, &
1271 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
1272 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail, &
1273 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
1274 #if ( NMM_CORE == 1 )
1282 start_of_simulation, &
1283 te_temf,cf3d_temf,wm_temf, & ! WA
1284 ! num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1285 DZR, DZB, DZG, & !Optional urban
1286 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
1287 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
1288 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
1289 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, & !Optional urban
1290 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
1291 SF_URBAN_PHYSICS, & !Optional urban
1292 NUM_URBAN_LAYERS, & !Optional multi-layer urban
1293 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
1294 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
1295 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
1296 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
1297 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
1298 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
1299 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
1300 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
1301 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
1302 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
1303 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
1304 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
1305 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
1306 ids, ide, jds, jde, kds, kde, &
1307 ims, ime, jms, jme, kms, kme, &
1308 its, ite, jts, jte, kts, kte, &
1309 ACHFX,ACLHF,ACGRDFLX, &
1310 oml_hml0, omlcall, & !Optional oml
1311 TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
1312 !--------------------------------------------------------------------
1313 USE module_sf_sfclay
1315 USE module_sf_pxsfclay
1320 USE module_sf_myjsfc
1321 USE module_sf_qnsesfc
1322 USE module_sf_noahdrv
1324 USE module_sf_bep !BEP
1325 USE module_sf_bep_bem
1326 USE module_sf_ruclsm
1329 USE module_bl_myjpbl
1330 USE module_bl_myjurb
1331 USE module_bl_boulac
1332 USE module_bl_camuwpbl_driver, ONLY : camuwpblinit
1333 USE module_bl_qnsepbl
1334 #if ( EM_CORE == 1 )
1337 USE module_sf_temfsfclay
1344 !--------------------------------------------------------------------
1346 !--------------------------------------------------------------------
1347 TYPE (grid_config_rec_type) :: config_flags
1348 LOGICAL , INTENT(IN) :: restart
1349 LOGICAL, INTENT(IN) :: FNDSOILW, FNDSNOWH
1350 LOGICAL, INTENT(IN) :: RDMAXALB
1352 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1353 ims, ime, jms, jme, kms, kme, &
1354 its, ite, jts, jte, kts, kte
1355 INTEGER , INTENT(IN) :: num_soil_layers
1356 INTEGER , INTENT(IN) :: SF_URBAN_PHYSICS
1358 REAL , INTENT(IN) :: DT, BLDT
1359 INTEGER , INTENT(INOUT) :: STEPBL
1361 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), &
1362 INTENT(OUT) :: SMFR3D
1364 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1365 INTENT(INOUT) :: SMOIS,SH2O,TSLB
1367 REAL, DIMENSION( ims:ime, jms:jme ) , &
1368 INTENT(INOUT) :: SNOW, &
1384 #if ( NMM_CORE == 1 )
1392 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
1393 INTENT(INOUT) :: IVGTYP, &
1398 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
1400 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1409 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK
1410 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
1411 CHARACTER(LEN=*), INTENT(IN) :: MMINLU
1412 LOGICAL, INTENT(IN) :: allowed_to_read
1413 INTEGER, INTENT(IN) :: ISURBAN
1414 INTEGER :: isn, isfc
1417 REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
1418 INTENT(OUT) :: te_temf, cf3d_temf !WA
1419 REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
1420 INTENT(OUT) :: wm_temf
1423 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !Optional urban
1424 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !Optional urban
1425 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !Optional urban
1426 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !Optional urban
1427 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !Optional urban
1428 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !Optional urban
1429 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1430 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1431 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1432 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1433 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1434 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1435 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1436 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1437 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1438 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1439 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1440 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1441 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1442 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1443 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1444 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1445 ! REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1446 ! REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1447 ! REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1448 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1449 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1450 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1452 INTEGER , INTENT(IN) :: num_urban_layers
1453 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
1454 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
1455 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
1456 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
1457 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
1458 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
1459 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
1460 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
1461 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
1462 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
1463 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
1464 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
1465 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
1466 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
1467 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
1468 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
1469 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
1470 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
1471 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
1472 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
1473 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
1474 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
1475 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
1476 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
1477 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
1478 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
1479 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
1480 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
1481 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
1482 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
1483 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
1484 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
1485 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
1486 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
1487 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
1489 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1490 ACHFX,ACLHF,ACGRDFLX
1491 ! Optional OML variables
1492 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1493 TML,T0ML,HML,H0ML,HUML,HVML,TMOML
1494 INTEGER, OPTIONAL, INTENT(IN) :: omlcall
1495 REAL, OPTIONAL, INTENT(IN) :: oml_hml0
1496 LOGICAL, INTENT(IN) :: start_of_simulation
1500 #if ( EM_CORE == 1 )
1502 INTEGER :: mynn_closure_level
1505 !-- calculate pbl time step
1507 STEPBL = nint(BLDT*60./DT)
1508 STEPBL = max(STEPBL,1)
1511 IF(PRESENT(ACHFX))THEN
1512 IF(.not.restart)THEN
1524 !-- initialize surface layer scheme
1526 sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1529 CALL sfclayinit( allowed_to_read )
1532 CALL pxsfclayinit( allowed_to_read )
1535 CALL myjsfcinit(LOWLYR,UST, &
1536 #if ( NMM_CORE == 1 )
1544 ids, ide, jds, jde, kds, kde, &
1545 ims, ime, jms, jme, kms, kme, &
1546 its, ite, jts, jte, kts, kte )
1549 CASE (QNSESFCSCHEME)
1550 CALL qnsesfcinit(LOWLYR,UST, &
1551 #if ( NMM_CORE == 1 )
1559 ids, ide, jds, jde, kds, kde, &
1560 ims, ime, jms, jme, kms, kme, &
1561 its, ite, jts, jte, kts, kte )
1565 CALL myjsfcinit(LOWLYR,UST, &
1566 #if ( NMM_CORE == 1 )
1574 ids, ide, jds, jde, kds, kde, &
1575 ims, ime, jms, jme, kms, kme, &
1576 its, ite, jts, jte, kts, kte )
1579 CASE (GFDLSFCSCHEME)
1580 CALL myjsfcinit(LOWLYR,UST, &
1585 ids, ide, jds, jde, kds, kde, &
1586 ims, ime, jms, jme, kms, kme, &
1587 its, ite, jts, jte, kts, kte )
1591 #if ( EM_CORE == 1 )
1594 CASE (MYNNSFCSCHEME)
1596 CALL mynn_sf_init_driver(allowed_to_read)
1600 CASE (TEMFSFCSCHEME)
1601 CALL wrf_debug( 100, 'calling temfsfclayinit' )
1602 CALL temfsfclayinit( restart, allowed_to_read , &
1604 ids, ide, jds, jde, kds, kde, &
1605 ims, ime, jms, jme, kms, kme, &
1606 its, ite, jts, jte, kts, kte )
1611 END SELECT sfclay_select
1614 !-- initialize surface scheme
1616 sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1620 CALL slabinit(TSK,TMN, &
1621 TSLB,ZS,DZS,num_soil_layers, &
1622 allowed_to_read ,start_of_simulation ,&
1623 ids, ide, jds, jde, kds, kde, &
1624 ims, ime, jms, jme, kms, kme, &
1625 its, ite, jts, jte, kts, kte )
1629 CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1630 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW, &
1631 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP, &
1635 ids,ide, jds,jde, kds,kde, &
1636 ims,ime, jms,jme, kms,kme, &
1637 its,ite, jts,jte, kts,kte )
1641 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1642 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1643 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1645 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1646 num_soil_layers, restart, &
1648 ids,ide, jds,jde, kds,kde, &
1649 ims,ime, jms,jme, kms,kme, &
1650 its,ite, jts,jte, kts,kte )
1653 IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1655 IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1657 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers, & !urban
1659 ! num_roof_layers,num_wall_layers,road_soil_layers) !urban
1662 CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban
1663 ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban
1664 ! num_roof_layers,num_wall_layers,num_road_layers, & !urban
1665 restart,sf_urban_physics, & !urban
1666 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban
1667 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban
1668 TRL_URB3D,TBL_URB3D,TGL_URB3D, & !urban
1669 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D, & !urban
1670 num_urban_layers, & !urban
1671 TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban
1672 TLEV_URB3D,QLEV_URB3D, & !urban
1673 TW1LEV_URB3D,TW2LEV_URB3D, & !urban
1674 TGLEV_URB3D,TFLEV_URB3D, & !urban
1675 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !urban
1676 SFVENT_URB3D,LFVENT_URB3D, & !urban
1677 SFWIN1_URB3D,SFWIN2_URB3D, & !urban
1678 SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban
1679 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !multi-layer urban
1680 A_E_BEP,B_U_BEP,B_V_BEP, & !multi-layer urban
1681 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban
1682 DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban
1683 FRC_URB2D, UTYPE_URB2D) !urban
1685 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1690 ! if(isfc .ne. 2)CALL wrf_error_fatal &
1691 ! ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1692 CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,XICE, &
1693 mavail,num_soil_layers, config_flags%iswater, &
1694 config_flags%isice, restart, &
1696 ids,ide, jds,jde, kds,kde, &
1697 ims,ime, jms,jme, kms,kme, &
1698 its,ite, jts,jte, kts,kte )
1701 if(config_flags%num_land_cat .ne. 24) CALL wrf_error_fatal &
1702 ( 'module_physics_init: 24 cat USGS must be used with PX LSM option' )
1703 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1704 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1705 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1707 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1708 num_soil_layers, restart, &
1710 ids,ide, jds,jde, kds,kde, &
1711 ims,ime, jms,jme, kms,kme, &
1712 its,ite, jts,jte, kts,kte )
1716 END SELECT sfc_select
1718 IF(PRESENT(OMLCALL))THEN
1719 IF (omlcall .EQ. 1) THEN
1720 CALL omlinit(oml_hml0, tsk, &
1721 tml,t0ml,hml,h0ml,huml,hvml,tmoml, &
1722 allowed_to_read, start_of_simulation, &
1723 ids,ide, jds,jde, kds,kde, &
1724 ims,ime, jms,jme, kms,kme, &
1725 its,ite, jts,jte, kts,kte )
1729 !-- initialize pbl scheme
1731 pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1734 if(isfc .ne. 1)CALL wrf_error_fatal &
1735 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1736 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1737 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1738 CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1739 RQCBLTEN,RQIBLTEN,P_QI, &
1740 PARAM_FIRST_SCALAR, &
1743 ids, ide, jds, jde, kds, kde, &
1744 ims, ime, jms, jme, kms, kme, &
1745 its, ite, jts, jte, kts, kte )
1747 if(isfc .ne. 1)CALL wrf_error_fatal &
1748 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1749 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1750 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1751 CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1752 RQCBLTEN,RQIBLTEN,P_QI, &
1753 PARAM_FIRST_SCALAR, &
1756 ids, ide, jds, jde, kds, kde, &
1757 ims, ime, jms, jme, kms, kme, &
1758 its, ite, jts, jte, kts, kte )
1760 if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
1761 ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
1762 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1763 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1764 CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1765 RQCBLTEN,RQIBLTEN,P_QI, &
1766 PARAM_FIRST_SCALAR, &
1769 ids, ide, jds, jde, kds, kde, &
1770 ims, ime, jms, jme, kms, kme, &
1771 its, ite, jts, jte, kts, kte )
1773 if(isfc .ne. 2)CALL wrf_error_fatal &
1774 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1775 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1776 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1777 CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1778 RQCBLTEN,RQIBLTEN,P_QI, &
1779 PARAM_FIRST_SCALAR, &
1782 ids, ide, jds, jde, kds, kde, &
1783 ims, ime, jms, jme, kms, kme, &
1784 its, ite, jts, jte, kts, kte )
1786 if(isfc .ne. 2)CALL wrf_error_fatal &
1787 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1788 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1789 CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1790 TKE_PBL,EXCH_H,restart, &
1792 ids, ide, jds, jde, kds, kde, &
1793 ims, ime, jms, jme, kms, kme, &
1794 its, ite, jts, jte, kts, kte )
1797 CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1798 TKE_PBL,EXCH_H,restart, &
1800 ids, ide, jds, jde, kds, kde, &
1801 ims, ime, jms, jme, kms, kme, &
1802 its, ite, jts, jte, kts, kte )
1804 CASE (QNSEPBLSCHEME)
1805 if(isfc .ne. 4)CALL wrf_error_fatal &
1806 ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
1807 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1808 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1809 CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1810 TKE_PBL,EXCH_H,restart, &
1812 ids, ide, jds, jde, kds, kde, &
1813 ims, ime, jms, jme, kms, kme, &
1814 its, ite, jts, jte, kts, kte )
1817 if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
1818 ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
1819 CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1820 TKE_PBL,EXCH_H,restart, &
1822 ids, ide, jds, jde, kds, kde, &
1823 ims, ime, jms, jme, kms, kme, &
1824 its, ite, jts, jte, kts, kte )
1825 CASE (CAMUWPBLSCHEME)
1826 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1827 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1828 CALL camuwpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1829 restart,TKE_PBL,config_flags%grid_id, &
1830 ids, ide, jds, jde, kds, kde, &
1831 ims, ime, jms, jme, kms, kme, &
1832 its, ite, jts, jte, kts, kte )
1835 #if ( EM_CORE == 1 )
1839 CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
1840 IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
1841 ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
1842 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1843 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1845 SELECT CASE(config_flags%bl_pbl_physics)
1847 CASE(MYNNPBLSCHEME2)
1848 mynn_closure_level=2
1850 CASE(MYNNPBLSCHEME3)
1851 mynn_closure_level=3
1857 CALL mynn_bl_init_driver(&
1858 &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
1859 &,restart,allowed_to_read,mynn_closure_level &
1860 &,IDS,IDE,JDS,JDE,KDS,KDE &
1861 &,IMS,IME,JMS,JME,KMS,KME &
1862 &,ITS,ITE,JTS,JTE,KTS,KTE)
1864 CASE (TEMFPBLSCHEME)
1865 ! if(isfc .ne. 0)CALL wrf_error_fatal &
1866 ! ( 'module_physics_init: use sfclay scheme = 0 for this pbl option' )
1867 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1868 ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1869 IF ( PRESENT( te_temf ) .AND. PRESENT( cf3d_temf )) THEN
1870 CALL temfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1871 RQCBLTEN,RQIBLTEN,P_QI, &
1872 PARAM_FIRST_SCALAR, &
1875 te_temf,cf3d_temf, & ! WA
1876 ids, ide, jds, jde, kds, kde, &
1877 ims, ime, jms, jme, kms, kme, &
1878 its, ite, jts, jte, kts, kte )
1880 CALL wrf_error_fatal ( 'arguments not present for calling TEMF scheme' )
1887 END SELECT pbl_select
1890 END SUBROUTINE bl_init
1892 !==================================================================
1893 SUBROUTINE cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
1894 RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,&
1895 NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
1896 CLDEFI,LOWLYR,MASS_FLUX, &
1898 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1899 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1900 cugd_tten,cugd_ttens,cugd_qvten, &
1901 cugd_qvtens,cugd_qcten, &
1902 allowed_to_read, start_of_simulation, &
1903 ids, ide, jds, jde, kds, kde, &
1904 ims, ime, jms, jme, kms, kme, &
1905 its, ite, jts, jte, kts, kte )
1906 !------------------------------------------------------------------
1910 USE module_cu_gd, ONLY : GDINIT
1911 USE module_cu_g3, ONLY : G3INIT
1914 USE module_cu_camzm_driver, ONLY : zm_conv_init
1916 USE module_cu_tiedtke
1917 !------------------------------------------------------------------
1919 !------------------------------------------------------------------
1920 TYPE (grid_config_rec_type) :: config_flags
1921 LOGICAL , INTENT(IN) :: restart
1924 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1925 ims, ime, jms, jme, kms, kme, &
1926 its, ite, jts, jte, kts, kte
1928 REAL , INTENT(IN) :: DT, CUDT
1929 LOGICAL , INTENT(IN) :: start_of_simulation
1930 LOGICAL , INTENT(IN) :: allowed_to_read
1931 INTEGER , INTENT(INOUT) :: STEPCU
1933 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
1934 RUCUTEN, RVCUTEN, RTHCUTEN, &
1935 RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
1936 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1937 cugd_tten,cugd_ttens,cugd_qvten, &
1938 cugd_qvtens,cugd_qcten
1940 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
1942 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1945 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
1947 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
1949 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
1951 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX, &
1952 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1953 APR_CAPMA,APR_CAPME,APR_CAPMI
1955 INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
1959 INTEGER :: i,j,itf,jtf
1961 !--------------------------------------------------------------------
1963 !-- calculate cumulus parameterization time step
1968 STEPCU = nint(CUDT*60./DT)
1969 STEPCU = max(STEPCU,1)
1973 IF(start_of_simulation)THEN
1982 !-- deep convection and hybrid deep-shallow convection schemes
1983 cps_select: SELECT CASE(config_flags%cu_physics)
1986 CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1987 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
1988 PARAM_FIRST_SCALAR,restart, &
1990 ids, ide, jds, jde, kds, kde, &
1991 ims, ime, jms, jme, kms, kme, &
1992 its, ite, jts, jte, kts, kte )
1995 CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1996 CLDEFI,LOWLYR,cp,r_d,restart, &
1998 ids, ide, jds, jde, kds, kde, &
1999 ims, ime, jms, jme, kms, kme, &
2000 its, ite, jts, jte, kts, kte )
2003 CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
2004 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
2005 SVP1,SVP2,SVP3,SVPT0, &
2006 PARAM_FIRST_SCALAR,restart, &
2008 ids, ide, jds, jde, kds, kde, &
2009 ims, ime, jms, jme, kms, kme, &
2010 its, ite, jts, jte, kts, kte )
2012 CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2013 MASS_FLUX,cp,restart, &
2014 P_QC,P_QI,PARAM_FIRST_SCALAR, &
2016 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
2017 APR_CAPMA,APR_CAPME,APR_CAPMI, &
2019 ids, ide, jds, jde, kds, kde, &
2020 ims, ime, jms, jme, kms, kme, &
2021 its, ite, jts, jte, kts, kte )
2023 CALL nsasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2025 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2027 ids, ide, jds, jde, kds, kde, &
2028 ims, ime, jms, jme, kms, kme, &
2029 its, ite, jts, jte, kts, kte )
2031 #if ( EM_CORE == 1 )
2033 CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2034 MASS_FLUX,cp,restart, &
2035 P_QC,P_QI,PARAM_FIRST_SCALAR, &
2037 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
2038 APR_CAPMA,APR_CAPME,APR_CAPMI, &
2039 cugd_tten,cugd_ttens,cugd_qvten, &
2040 cugd_qvtens,cugd_qcten, &
2042 ids, ide, jds, jde, kds, kde, &
2043 ims, ime, jms, jme, kms, kme, &
2044 its, ite, jts, jte, kts, kte )
2047 CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2048 RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
2049 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2051 ids, ide, jds, jde, kds, kde, &
2052 ims, ime, jms, jme, kms, kme, &
2053 its, ite, jts, jte, kts, kte )
2056 CALL osasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2057 RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
2058 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2060 ids, ide, jds, jde, kds, kde, &
2061 ims, ime, jms, jme, kms, kme, &
2062 its, ite, jts, jte, kts, kte )
2065 CALL zm_conv_init(rucuten, rvcuten, rthcuten, rqvcuten, &
2066 rqccuten, rqicuten, &
2067 p_qc, p_qi, param_first_scalar, &
2069 ids, ide, jds, jde, kds, kde, &
2070 ims, ime, jms, jme, kms, kme, &
2071 its, ite, jts, jte, kts, kte )
2073 ! Tiedtke Scheme - ZCX&YQW
2074 CASE (TIEDTKESCHEME)
2075 CALL tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
2077 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
2079 ids, ide, jds, jde, kds, kde, &
2080 ims, ime, jms, jme, kms, kme, &
2081 its, ite, jts, jte, kts, kte )
2085 END SELECT cps_select
2087 END SUBROUTINE cu_init
2089 !==================================================================
2090 SUBROUTINE shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
2091 RQVSHTEN,RQRSHTEN,RQCSHTEN, &
2092 RQSSHTEN,RQISHTEN,RQGSHTEN, &
2093 NCA,RAINC,RAINCV,config_flags,restart, &
2094 allowed_to_read, start_of_simulation, &
2095 ids, ide, jds, jde, kds, kde, &
2096 ims, ime, jms, jme, kms, kme, &
2097 its, ite, jts, jte, kts, kte )
2098 !------------------------------------------------------------------
2099 USE uwshcu, ONLY: init_uwshcu
2100 USE physconst, ONLY: cpair, gravit, latice, latvap, mwdry, mwh2o, &
2102 USE shr_kind_mod, ONLY: r8 => shr_kind_r8
2104 !------------------------------------------------------------------
2106 !------------------------------------------------------------------
2107 TYPE (grid_config_rec_type) :: config_flags
2108 LOGICAL , INTENT(IN) :: restart
2111 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2112 ims, ime, jms, jme, kms, kme, &
2113 its, ite, jts, jte, kts, kte
2115 REAL , INTENT(IN) :: DT, CUDT
2116 LOGICAL , INTENT(IN) :: start_of_simulation
2117 LOGICAL , INTENT(IN) :: allowed_to_read
2118 INTEGER , INTENT(INOUT) :: STEPCU
2120 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
2121 RUSHTEN, RVSHTEN, RTHSHTEN, &
2122 RQVSHTEN, RQCSHTEN, RQRSHTEN, RQISHTEN, RQSSHTEN, RQGSHTEN
2124 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
2126 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2130 INTEGER :: i,j,itf,jtf
2132 !--------------------------------------------------------------------
2134 ! Some of this stuff is redundant with deep convection, but redo it
2135 ! in case deep is turned off...
2137 !-- calculate cumulus parameterization time step
2142 STEPCU = nint(CUDT*60./DT)
2143 STEPCU = max(STEPCU,1)
2147 IF(start_of_simulation)THEN
2156 !-- independent shallow convection schemes
2157 shcu_select: SELECT CASE(config_flags%shcu_physics)
2159 CASE (CAMUWSHCUSCHEME)
2160 CALL init_uwshcu(r8,latvap,cpair,latice,zvir,rair,gravit, &
2162 rushten, rvshten, rthshten, rqvshten, &
2163 rqcshten, rqrshten, rqishten, rqsshten, rqgshten, &
2164 p_qc, p_qr, p_qi, p_qs, p_qg, &
2165 config_flags%bl_pbl_physics, param_first_scalar, restart, &
2166 config_flags%grid_id, &
2167 ids, ide, jds, jde, kds, kde, &
2168 ims, ime, jms, jme, kms, kme, &
2169 its, ite, jts, jte, kts, kte )
2173 END SELECT shcu_select
2175 END SUBROUTINE shcu_init
2177 !==================================================================
2178 SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
2180 MPDT, DT, DX, DY, LOWLYR, & ! for eta mp
2181 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, & ! for eta mp
2182 mp_restart_state,tbpvs_state,tbpvs0_state, & ! eta mp
2183 allowed_to_read, start_of_simulation, &
2184 ids, ide, jds, jde, kds, kde, &
2185 ims, ime, jms, jme, kms, kme, &
2186 its, ite, jts, jte, kts, kte )
2187 !------------------------------------------------------------------
2191 USE module_mp_etanew
2195 USE module_mp_thompson
2196 USE module_mp_morr_two_moment
2197 USE module_mp_milbrandt2mom
2198 ! USE module_mp_milbrandt3mom
2201 !------------------------------------------------------------------
2203 !------------------------------------------------------------------
2205 TYPE (grid_config_rec_type) :: config_flags
2206 LOGICAL , INTENT(IN) :: restart
2207 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
2208 REAL , INTENT(IN) :: MPDT, DT, DX, DY
2209 LOGICAL , INTENT(IN) :: start_of_simulation
2211 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2212 ims, ime, jms, jme, kms, kme, &
2213 its, ite, jts, jte, kts, kte
2215 INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT) :: LOWLYR
2216 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC,SNOWNC,GRAUPELNC
2217 REAL, DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
2218 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
2219 REAL , DIMENSION(:) ,INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
2220 LOGICAL , INTENT(IN) :: allowed_to_read
2223 INTEGER :: i, j, itf, jtf
2226 adv_moist_cond = .true.
2230 IF(start_of_simulation)THEN
2240 mp_select: SELECT CASE(config_flags%mp_physics)
2242 CASE (KESSLERSCHEME)
2245 CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2247 CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2249 CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2251 adv_moist_cond = .false.
2252 CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart, &
2253 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2254 mp_restart_state,tbpvs_state,tbpvs0_state,&
2256 ids, ide, jds, jde, kds, kde, &
2257 ims, ime, jms, jme, kms, kme, &
2258 its, ite, jts, jte, kts, kte )
2261 CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart, &
2262 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2264 ids, ide, jds, jde, kds, kde, &
2265 ims, ime, jms, jme, kms, kme, &
2266 its, ite, jts, jte, kts, kte )
2269 ! Cycling the WRF forecast with moving nests will cause this initialization to be
2270 ! called for each nest move. This is potentially very computationally expensive.
2271 IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
2273 CASE (MORR_TWO_MOMENT)
2274 CALL morr_two_moment_init
2275 CASE (MILBRANDT2MOM)
2276 CALL milbrandt2mom_init
2277 ! CASE (MILBRANDT3MOM)
2278 ! CALL milbrandt3mom_init
2280 CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2282 CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2286 END SELECT mp_select
2288 END SUBROUTINE mp_init
2290 #if ( EM_CORE == 1 )
2291 !==========================================================
2292 SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
2293 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
2294 config_flags,restart, &
2296 ids, ide, jds, jde, kds, kde, &
2297 ims, ime, jms, jme, kms, kme, &
2298 its, ite, jts, jte, kts, kte )
2301 !--------------------------------------------------------------------
2302 USE module_fdda_psufddagd
2303 USE module_fdda_spnudging, ONLY : fddaspnudginginit
2304 !--------------------------------------------------------------------
2306 !--------------------------------------------------------------------
2307 TYPE (grid_config_rec_type) :: config_flags
2308 LOGICAL , INTENT(IN) :: restart
2310 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2311 ims, ime, jms, jme, kms, kme, &
2312 its, ite, jts, jte, kts, kte
2314 REAL , INTENT(IN) :: DT, FGDT
2315 INTEGER , INTENT(IN) :: id
2316 INTEGER , INTENT(INOUT) :: STEPFG
2317 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2323 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
2325 LOGICAL, INTENT(IN) :: allowed_to_read
2326 !--------------------------------------------------------------------
2328 !-- calculate pbl time step
2330 STEPFG = nint(FGDT*60./DT)
2331 STEPFG = max(STEPFG,1)
2334 !-- initialize fdda scheme
2336 fdda_select: SELECT CASE(config_flags%grid_fdda)
2339 CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
2340 config_flags%run_hours, &
2341 config_flags%if_no_pbl_nudging_uv, &
2342 config_flags%if_no_pbl_nudging_t, &
2343 config_flags%if_no_pbl_nudging_q, &
2344 config_flags%if_zfac_uv, &
2345 config_flags%k_zfac_uv, &
2346 config_flags%if_zfac_t, &
2347 config_flags%k_zfac_t, &
2348 config_flags%if_zfac_q, &
2349 config_flags%k_zfac_q, &
2351 config_flags%gt, config_flags%gq, &
2352 config_flags%if_ramping, config_flags%dtramp_min, &
2353 config_flags%auxinput10_end_h, &
2354 config_flags%grid_sfdda, &
2355 config_flags%guv_sfc, &
2356 config_flags%gt_sfc, &
2357 config_flags%gq_sfc, &
2358 restart, allowed_to_read, &
2359 ids, ide, jds, jde, kds, kde, &
2360 ims, ime, jms, jme, kms, kme, &
2361 its, ite, jts, jte, kts, kte )
2364 CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
2365 config_flags%run_hours, &
2366 config_flags%if_no_pbl_nudging_uv, &
2367 config_flags%if_no_pbl_nudging_t, &
2368 config_flags%if_no_pbl_nudging_ph, &
2369 config_flags%if_zfac_uv, &
2370 config_flags%k_zfac_uv, &
2371 config_flags%dk_zfac_uv, &
2372 config_flags%if_zfac_t, &
2373 config_flags%k_zfac_t, &
2374 config_flags%dk_zfac_t, &
2375 config_flags%if_zfac_ph, &
2376 config_flags%k_zfac_ph, &
2377 config_flags%dk_zfac_ph, &
2379 config_flags%gt, config_flags%gph, &
2380 config_flags%if_ramping, config_flags%dtramp_min, &
2381 config_flags%auxinput9_end_h, &
2382 config_flags%xwavenum,config_flags%ywavenum, &
2383 restart, allowed_to_read, &
2384 ids, ide, jds, jde, kds, kde, &
2385 ims, ime, jms, jme, kms, kme, &
2386 its, ite, jts, jte, kts, kte )
2390 END SELECT fdda_select
2392 END SUBROUTINE fg_init
2394 !-------------------------------------------------------------------
2395 SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid, &
2396 idynin, dtramp, fdaend, restart, &
2397 obs_twindo_cg, obs_twindo, itimestep, &
2401 sfc_scheme_horiz, sfc_scheme_vert, &
2403 sfcfact, sfcfacr, dpsmx, &
2404 nudge_wind, nudge_temp, nudge_mois, &
2405 nudgezfullr1_uv, nudgezrampr1_uv, &
2406 nudgezfullr2_uv, nudgezrampr2_uv, &
2407 nudgezfullr4_uv, nudgezrampr4_uv, &
2408 nudgezfullr1_t, nudgezrampr1_t, &
2409 nudgezfullr2_t, nudgezrampr2_t, &
2410 nudgezfullr4_t, nudgezrampr4_t, &
2411 nudgezfullr1_q, nudgezrampr1_q, &
2412 nudgezfullr2_q, nudgezrampr2_q, &
2413 nudgezfullr4_q, nudgezrampr4_q, &
2414 nudgezfullmin, nudgezrampmin, nudgezmax, &
2416 start_year, start_month, start_day, &
2417 start_hour, start_minute, start_second, &
2421 ids, ide, jds, jde, kds, kde, &
2422 ims, ime, jms, jme, kms, kme, &
2423 its, ite, jts, jte, kts, kte )
2425 !--------------------------------------------------------------------
2427 USE module_fddaobs_rtfdda
2429 !--------------------------------------------------------------------
2431 !--------------------------------------------------------------------
2432 INTEGER , INTENT(IN) :: maxdom
2433 INTEGER , INTENT(IN) :: obs_nudge_opt(maxdom)
2434 INTEGER , INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
2435 ims,ime, jms,jme, kms,kme, &
2436 its,ite, jts,jte, kts,kte
2437 INTEGER , INTENT(IN) :: inest
2438 INTEGER , INTENT(IN) :: parid(maxdom)
2439 INTEGER , INTENT(IN) :: idynin ! flag for dynamic initialization
2440 REAL , INTENT(IN) :: dtramp ! time period for ramping (idynin)
2441 REAL , INTENT(IN) :: fdaend(maxdom) ! nudging end time for domain (min)
2442 LOGICAL , INTENT(IN) :: restart
2443 REAL , INTENT(IN) :: obs_twindo_cg ! twindo on course grid
2444 REAL , INTENT(IN) :: obs_twindo
2445 INTEGER , INTENT(IN) :: itimestep
2446 INTEGER , INTENT(IN) :: no_pbl_nudge_uv(maxdom) ! flags for no wind nudging in pbl
2447 INTEGER , INTENT(IN) :: no_pbl_nudge_t(maxdom) ! flags for no temperature nudging in pbl
2448 INTEGER , INTENT(IN) :: no_pbl_nudge_q(maxdom) ! flags for no moisture nudging in pbl
2449 INTEGER , INTENT(IN) :: sfc_scheme_horiz ! horizontal spreading scheme for surf obs (wrf or orig mm5)
2450 INTEGER , INTENT(IN) :: sfc_scheme_vert ! vertical spreading scheme for surf obs (orig or regime vif)
2451 REAL , INTENT(IN) :: maxsnd_gap ! max allowed pressure gap in soundings for interp (centibars)
2452 REAL , INTENT(IN) :: sfcfact ! scale factor applied to time window for surface obs
2453 REAL , INTENT(IN) :: sfcfacr ! scale fac applied to horiz rad of infl for sfc obs
2454 REAL , INTENT(IN) :: dpsmx ! max pressure change allowed within horiz. infl. range
2455 INTEGER , INTENT(IN) :: nudge_wind(maxdom) ! wind-nudging flag
2456 INTEGER , INTENT(IN) :: nudge_temp(maxdom) ! temperature-nudging flag
2457 INTEGER , INTENT(IN) :: nudge_mois(maxdom) ! moisture-nudging flag
2458 REAL , INTENT(IN) :: nudgezfullr1_uv ! vert infl fcn, regime=1 full-wt hght, winds
2459 REAL , INTENT(IN) :: nudgezrampr1_uv ! vert infl fcn, regime=1 ramp down hght, winds
2460 REAL , INTENT(IN) :: nudgezfullr2_uv ! vert infl fcn, regime=2 full-wt hght, winds
2461 REAL , INTENT(IN) :: nudgezrampr2_uv ! vert infl fcn, regime=2 ramp down hght, winds
2462 REAL , INTENT(IN) :: nudgezfullr4_uv ! vert infl fcn, regime=4 full-wt hght, winds
2463 REAL , INTENT(IN) :: nudgezrampr4_uv ! vert infl fcn, regime=4 ramp down hght, winds
2464 REAL , INTENT(IN) :: nudgezfullr1_t ! vert infl fcn, regime=1 full-wt hght, temp
2465 REAL , INTENT(IN) :: nudgezrampr1_t ! vert infl fcn, regime=1 ramp down hght, temp
2466 REAL , INTENT(IN) :: nudgezfullr2_t ! vert infl fcn, regime=2 full-wt hght, temp
2467 REAL , INTENT(IN) :: nudgezrampr2_t ! vert infl fcn, regime=2 ramp down hght, temp
2468 REAL , INTENT(IN) :: nudgezfullr4_t ! vert infl fcn, regime=4 full-wt hght, temp
2469 REAL , INTENT(IN) :: nudgezrampr4_t ! vert infl fcn, regime=4 ramp down hght, temp
2470 REAL , INTENT(IN) :: nudgezfullr1_q ! vert infl fcn, regime=1 full-wt hght, mois
2471 REAL , INTENT(IN) :: nudgezrampr1_q ! vert infl fcn, regime=1 ramp down hght, mois
2472 REAL , INTENT(IN) :: nudgezfullr2_q ! vert infl fcn, regime=2 full-wt hght, mois
2473 REAL , INTENT(IN) :: nudgezrampr2_q ! vert infl fcn, regime=2 ramp down hght, mois
2474 REAL , INTENT(IN) :: nudgezfullr4_q ! vert infl fcn, regime=4 full-wt hght, mois
2475 REAL , INTENT(IN) :: nudgezrampr4_q ! vert infl fcn, regime=4 ramp down hght, mois
2476 REAL , INTENT(IN) :: nudgezfullmin ! min dpth thru which vert infl fcn remains 1.0 (m)
2477 REAL , INTENT(IN) :: nudgezrampmin ! min dpth thru which vif decreases 1.0 to 0.0 (m)
2478 REAL , INTENT(IN) :: nudgezmax ! max dpth in which vif is nonzero (m)
2479 REAL , INTENT(IN) :: xlat ( ims:ime, jms:jme ) ! latitudes on mass-point grid
2480 REAL , INTENT(IN) :: xlong( ims:ime, jms:jme ) ! longitudes on mass-point grid
2481 INTEGER , INTENT(INOUT) :: start_year
2482 INTEGER , INTENT(INOUT) :: start_month
2483 INTEGER , INTENT(INOUT) :: start_day
2484 INTEGER , INTENT(INOUT) :: start_hour
2485 INTEGER , INTENT(INOUT) :: start_minute
2486 INTEGER , INTENT(INOUT) :: start_second
2487 REAL , INTENT(IN) :: p00 ! base state pressure
2488 REAL , INTENT(IN) :: t00 ! base state temperature
2489 REAL , INTENT(IN) :: tlp ! base state lapse rate
2490 REAL , INTENT(IN) :: znu( kms:kme ) ! eta values on half (mass) levels
2491 REAL , INTENT(IN) :: p_top ! pressure at top of model
2492 TYPE(fdob_type), INTENT(INOUT) :: fdob
2494 INTEGER :: e_sn ! ending north-south grid index
2495 LOGICAL :: ipf_init ! print warnings detected at initialzn
2496 !--------------------------------------------------------------------
2497 !-- initialize fdda obs-nudging scheme
2499 IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
2502 CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid, &
2503 idynin, dtramp, fdaend, restart, &
2505 obs_twindo, itimestep, &
2509 sfc_scheme_horiz, sfc_scheme_vert, &
2511 sfcfact, sfcfacr, dpsmx, &
2512 nudge_wind, nudge_temp, nudge_mois, &
2513 nudgezfullr1_uv, nudgezrampr1_uv, &
2514 nudgezfullr2_uv, nudgezrampr2_uv, &
2515 nudgezfullr4_uv, nudgezrampr4_uv, &
2516 nudgezfullr1_t, nudgezrampr1_t, &
2517 nudgezfullr2_t, nudgezrampr2_t, &
2518 nudgezfullr4_t, nudgezrampr4_t, &
2519 nudgezfullr1_q, nudgezrampr1_q, &
2520 nudgezfullr2_q, nudgezrampr2_q, &
2521 nudgezfullr4_q, nudgezrampr4_q, &
2522 nudgezfullmin, nudgezrampmin, nudgezmax, &
2524 start_year, start_month, start_day, &
2525 start_hour, start_minute, start_second, &
2529 ids,ide, jds,jde, kds,kde, &
2530 ims,ime, jms,jme, kms,kme, &
2531 its,ite, jts,jte, kts,kte)
2533 END SUBROUTINE fdob_init
2536 !--------------------------------------------------------------------
2537 SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
2539 kds,kde,kms,kme,kts,kte)
2542 INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
2543 REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
2544 REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
2545 REAL , INTENT(IN) :: p_top
2546 REAL , INTENT(OUT) :: pptop
2547 TYPE (grid_config_rec_type) :: config_flags
2548 LOGICAL , INTENT(IN) :: allowed_to_read
2550 REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
2553 IF(zf(kde/2) .GT. 1.0)THEN
2554 ! Height levels assumed (zeta coordinate)
2555 ! Convert to sigma using standard atmosphere for pressure-height relation
2556 ! constants for standard atmosphere definition
2563 tstrat=ts+gamma*ztrop
2564 ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
2571 p=ps*(t/ts)**(-g/(gamma*r))
2574 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2580 sf(k)=(p-ptop)/(ps-ptop)
2583 z=0.5*(zf(k)+zf(k-1))
2586 p=ps*(t/ts)**(-g/(gamma*r))
2589 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2591 sh(k-1)=(p-ptop)/(ps-ptop)
2596 ! Levels are already sigma/eta
2598 ! sf(k)=zf(kde-k+kds)
2599 ! if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
2601 if(k .ne. kde)sh(k)=zh(k)
2607 END SUBROUTINE z2sigma
2609 END MODULE module_physics_init