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, &
48 EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
49 TSLB,ZS,DZS,num_soil_layers,warm_rain, &
51 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
52 APR_CAPMA,APR_CAPME,APR_CAPMI, &
53 XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV, &
54 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
55 ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS, &
56 SH2O, SNOWH, SMFR3D, & ! temporary
58 DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
59 mp_restart_state,tbpvs_state,tbpvs0_state,&
60 allowed_to_read, moved, start_of_simulation,&
62 ids, ide, jds, jde, kds, kde, &
63 ims, ime, jms, jme, kms, kme, &
64 its, ite, jts, jte, kts, kte, &
66 ozmixm,pin, & ! Optional
67 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
68 RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, & ! Optional
69 RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, & ! Optional
70 FGDT,STEPFG, & ! Optional
71 cugd_tten,cugd_ttens,cugd_qvten, & ! Optional
72 cugd_qvtens,cugd_qcten, & ! Optional
73 ! num_roof_layers,num_wall_layers, & !Optional urban
74 ! num_road_layers, & !Optional urban
75 DZR, DZB, DZG, & !Optional urban
76 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D, & !Optional urban
77 QC_URB2D, XXXR_URB2D,XXXB_URB2D, & !Optional urban
78 XXXG_URB2D, XXXC_URB2D, & !Optional urban
79 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
80 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
81 TS_URB2D, FRC_URB2D, UTYPE_URB2D, & !Optional urban
82 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
83 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
84 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
85 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
86 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
87 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
88 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
89 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
90 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
91 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
92 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
93 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
94 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
95 TML,T0ML,HML,H0ML,HUML,HVML, & !Optional oml
96 itimestep, & !Optional obs fdda
98 fdob, & !Optional obs fdda
100 t00, p00, tlp, & !for obs-nudging
101 TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update, &
102 ACHFX,ACLHF,ACGRDFLX &
105 !-----------------------------------------------------------------
109 !-----------------------------------------------------------------
110 TYPE (grid_config_rec_type) :: config_flags
112 INTEGER , INTENT(IN) :: id
113 INTEGER , INTENT(IN) ,OPTIONAL :: tmn_update
114 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
115 ! LOGICAL , INTENT (IN) :: FNDSOILW, FNDSNOWH
116 LOGICAL, PARAMETER :: FNDSOILW=.true., FNDSNOWH=.true.
117 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
118 ims, ime, jms, jme, kms, kme, &
119 its, ite, jts, jte, kts, kte
121 INTEGER , INTENT(IN) :: num_soil_layers
122 INTEGER , INTENT(IN) :: lagday
123 INTEGER , INTENT(OUT) ,OPTIONAL :: nyear, nday
125 LOGICAL, INTENT(IN) :: start_of_simulation
126 REAL, INTENT(IN) :: DT, p_top, DX, DY
127 LOGICAL, INTENT(IN) :: restart
128 REAL, INTENT(IN) :: RADT,BLDT,CUDT,MPDT
129 REAL, INTENT(IN) :: swrad_scat
131 REAL, DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
132 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
134 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
135 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
137 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
138 INTENT(INOUT) :: OZMIXM
140 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
142 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
143 REAL, DIMENSION(paerlev), OPTIONAL,INTENT(INOUT) :: m_hybi
144 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
145 INTENT(INOUT) :: aerosolc_1, aerosolc_2
147 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
148 INTENT(INOUT) :: SMOIS, SH2O,TSLB
149 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
151 REAL, DIMENSION( ims:ime, jms:jme ) , &
152 INTENT(INOUT) :: SNOW, &
168 REAL, DIMENSION( ims:ime, jms:jme ) , &
169 OPTIONAL, INTENT(INOUT) :: ACHFX, &
173 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
174 INTENT(INOUT) :: IVGTYP, &
179 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
180 RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
182 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
185 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
186 GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK !EMBCK new
187 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: SNOALB
190 REAL, INTENT(IN) :: GMT
192 INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
193 INTEGER , INTENT(IN) :: JULYR, JULDAY
197 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
198 RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, RQSCUTEN, &
201 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
203 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX, &
204 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
205 APR_CAPMA,APR_CAPME,APR_CAPMI
207 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
210 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: &
211 RAINNC, RAINC, RAINCV, RAINNCV
213 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
215 INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
222 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
224 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
225 RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_MYJ
227 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: TKE_PBL
230 REAL, DIMENSION(IMS:IME,JMS:JME,KMS:KME), INTENT(INOUT) :: &
233 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
234 cugd_tten,cugd_ttens,cugd_qvten, &
235 cugd_qvtens,cugd_qcten
236 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
237 XLAND,ZNT,Z0,UST,MOL,LU_INDEX, &
238 PBLH,THC,MAVAIL,HFX,QFX,RAINBL
239 INTEGER , INTENT(INOUT) :: landuse_ISICE, landuse_LUCATS
240 INTEGER , INTENT(INOUT) :: landuse_LUSEAS, landuse_ISN
241 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
243 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
244 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
245 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
246 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
247 REAL, DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
250 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
251 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
252 REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
253 LOGICAL, INTENT(IN) :: allowed_to_read, moved
256 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
257 TML,T0ML,HML,H0ML,HUML,HVML
260 REAL, OPTIONAL, INTENT(IN) :: FGDT
261 INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
262 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
263 RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
264 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
268 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !urban
269 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !urban
270 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !urban
271 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !urban
272 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !urban
273 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !urban
275 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
276 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
277 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
278 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
279 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
280 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
281 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
282 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
283 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
285 ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
286 ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
287 ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
288 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
289 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
290 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
292 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
293 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
294 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
295 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
296 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
297 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
298 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
300 INTEGER , INTENT(IN) :: num_urban_layers
301 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
302 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
303 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
304 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
305 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
306 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
307 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
308 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
309 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
310 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
311 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
312 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
313 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
314 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
315 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
316 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
317 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
318 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
319 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
320 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
321 REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
322 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
323 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
324 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
325 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
326 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
327 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
328 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
329 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
330 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
331 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
332 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
333 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
334 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
335 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
338 INTEGER, OPTIONAL, INTENT(IN) :: itimestep
340 TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
342 REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp ! for obs-nudging base-state calcn
346 REAL :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
347 REAL, DIMENSION( kms:kme ) :: sfull, shalf
348 REAL :: obs_twindo_cg, obs_twindo
350 CHARACTER*256 :: MMINLU_loc
351 CHARACTER*80 :: message
355 INTEGER :: sf_urban_physics
361 INTEGER :: i, j, k, itf, jtf, n
364 !-----------------------------------------------------------------
366 sf_urban_physics=config_flags%sf_urban_physics
367 usemonalb=config_flags%usemonalb
368 rdmaxalb=config_flags%rdmaxalb
370 obs_twindo_cg=model_config_rec%obs_twindo(1)
371 obs_twindo=config_flags%obs_twindo
372 oml_hml0=config_flags%oml_hml0
373 omlcall=config_flags%omlcall
376 !-- should be from the namelist
381 CALL wrf_debug(100,'top of phy_init')
383 WRITE(wrf_err_message,*) 'phy_init: start_of_simulation = ',start_of_simulation
384 CALL wrf_debug ( 100, TRIM(wrf_err_message) )
396 if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
399 CALL nl_get_cen_lat(id,cen_lat)
400 CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
401 CALL nl_get_iswater(id,iswater)
402 CALL nl_get_isice(id,isice)
403 CALL nl_get_isurban(id,isurban)
404 CALL nl_get_mminlu( 1, mminlu_loc )
405 CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
406 !-- temporary fix by ww
407 landuse_ISICE = isice
410 !-- initialize common variables
412 IF ( .NOT. moved ) THEN
426 DO k=kms,kme !wig, 17-May-2006: Added for idealized chem. runs
433 IF(PRESENT(TMN_UPDATE))THEN
434 if(tmn_update.eq.1) then
454 IF(XLAND(i,j) .LT. 1.5)THEN
455 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=ALBLND
457 ALBEDO(i,j)=ALBBCK(i,j)
458 EMISS(i,j)=EMBCK(i,j)
461 #if ! ( NMM_CORE == 1 )
466 IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=0.08
467 ALBEDO(i,j)=ALBBCK(i,j)
469 EMISS(i,j)=EMBCK(i,j)
472 #if ! ( NMM_CORE == 1 )
481 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
483 IF(mminlu_loc .ne. ' ')THEN
484 !-- initialize surface properties
486 CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
487 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
488 TRIM ( mminlu_loc ) , &
489 landuse_ISICE, landuse_LUCATS, &
490 landuse_LUSEAS, landuse_ISN, &
491 config_flags%fractional_seaice, &
493 allowed_to_read , usemonalb , &
494 ids, ide, jds, jde, kds, kde, &
495 ims, ime, jms, jme, kms, kme, &
496 its, ite, jts, jte, kts, kte )
501 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
502 !-- zfull/zhalf may be either zeta or eta
503 !-- what is done here depends on coordinate (check this code if adding new coordinates)
504 CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
506 kds,kde,kms,kme,kts,kte)
508 !-- initialize physics
514 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
516 CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW, &
517 RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT, &
518 levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm, &
519 cldfra_old=cldfra_old, & ! Optional
520 ozmixm=ozmixm,pin=pin, & ! Optional
521 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
522 paerlev=paerlev,n_aerosolc=n_aerosolc, &
523 sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat, &
524 config_flags=config_flags,restart=restart, &
525 allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation, &
526 ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, &
527 ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, &
528 its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte )
530 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
531 CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
532 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
533 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
534 num_soil_layers,TKE_MYJ, &
539 SNOW,SNOWC, CANWAT,SMSTAV, &
540 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
541 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL, &
542 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
551 start_of_simulation , &
552 DZR, DZB, DZG, & !Optional urban
553 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
554 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
555 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
556 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
557 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
558 SF_URBAN_PHYSICS, & !Optional urban
559 NUM_URBAN_LAYERS, & !Optional multi-layer urban
560 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
561 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
562 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
563 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
564 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
565 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
566 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
567 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
568 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
569 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
570 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
571 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
572 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
573 ids, ide, jds, jde, kds, kde, &
574 ims, ime, jms, jme, kms, kme, &
575 its, ite, jts, jte, kts, kte, &
576 ACHFX,ACLHF,ACGRDFLX, &
577 oml_hml0, omlcall, & !Optional oml
578 TML,T0ML,HML,H0ML,HUML,HVML ) !Optional oml
580 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
582 CALL cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN, &
583 RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC, &
587 RAINCV,W0AVG,config_flags,restart, &
588 CLDEFI,LOWLYR,MASS_FLUX, &
590 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
591 APR_CAPMA,APR_CAPME,APR_CAPMI, &
592 cugd_tten,cugd_ttens,cugd_qvten, &
593 cugd_qvtens,cugd_qcten, &
594 allowed_to_read, start_of_simulation, &
595 ids, ide, jds, jde, kds, kde, &
596 ims, ime, jms, jme, kms, kme, &
597 its, ite, jts, jte, kts, kte )
599 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
601 CALL mp_init(RAINNC,config_flags,restart,warm_rain, &
603 MPDT, DT, DX, DY, LOWLYR, &
604 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
605 mp_restart_state,tbpvs_state,tbpvs0_state, &
606 allowed_to_read, start_of_simulation, &
607 ids, ide, jds, jde, kds, kde, &
608 ims, ime, jms, jme, kms, kme, &
609 its, ite, jts, jte, kts, kte )
612 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
614 CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
615 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
616 config_flags,restart, &
618 ids, ide, jds, jde, kds, kde, &
619 ims, ime, jms, jme, kms, kme, &
620 its, ite, jts, jte, kts, kte )
622 CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
624 CALL fdob_init(model_config_rec%obs_nudge_opt, &
625 model_config_rec%max_dom, &
627 model_config_rec%parent_id, &
628 model_config_rec%obs_idynin, &
629 model_config_rec%obs_dtramp, &
630 model_config_rec%fdda_end, &
631 model_config_rec%restart, &
632 obs_twindo_cg, obs_twindo, &
634 model_config_rec%obs_no_pbl_nudge_uv, &
635 model_config_rec%obs_no_pbl_nudge_t, &
636 model_config_rec%obs_no_pbl_nudge_q, &
637 model_config_rec%obs_sfcfact, &
638 model_config_rec%obs_sfcfacr, &
639 model_config_rec%obs_dpsmx, &
640 model_config_rec%obs_nudgezfullr1_uv, &
641 model_config_rec%obs_nudgezrampr1_uv, &
642 model_config_rec%obs_nudgezfullr2_uv, &
643 model_config_rec%obs_nudgezrampr2_uv, &
644 model_config_rec%obs_nudgezfullr4_uv, &
645 model_config_rec%obs_nudgezrampr4_uv, &
646 model_config_rec%obs_nudgezfullr1_t, &
647 model_config_rec%obs_nudgezrampr1_t, &
648 model_config_rec%obs_nudgezfullr2_t, &
649 model_config_rec%obs_nudgezrampr2_t, &
650 model_config_rec%obs_nudgezfullr4_t, &
651 model_config_rec%obs_nudgezrampr4_t, &
652 model_config_rec%obs_nudgezfullr1_q, &
653 model_config_rec%obs_nudgezrampr1_q, &
654 model_config_rec%obs_nudgezfullr2_q, &
655 model_config_rec%obs_nudgezrampr2_q, &
656 model_config_rec%obs_nudgezfullr4_q, &
657 model_config_rec%obs_nudgezrampr4_q, &
658 model_config_rec%obs_nudgezfullmin, &
659 model_config_rec%obs_nudgezrampmin, &
660 model_config_rec%obs_nudgezmax, &
663 model_config_rec%start_year(id), &
664 model_config_rec%start_month(id), &
665 model_config_rec%start_day(id), &
666 model_config_rec%start_hour(id), &
667 model_config_rec%start_minute(id), &
668 model_config_rec%start_second(id), &
672 model_config_rec%obs_ipf_init, &
673 ids, ide, jds, jde, kds, kde, &
674 ims, ime, jms, jme, kms, kme, &
675 its, ite, jts, jte, kts, kte )
679 END SUBROUTINE phy_init
681 !=====================================================================
682 SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
683 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu, &
684 ISICE, LUCATS, LUSEAS, ISN, &
687 allowed_to_read , usemonalb , &
688 ids, ide, jds, jde, kds, kde, &
689 ims, ime, jms, jme, kms, kme, &
690 its, ite, jts, jte, kts, kte )
695 !---------------------------------------------------------------------
696 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
697 ims, ime, jms, jme, kms, kme, &
698 its, ite, jts, jte, kts, kte
700 INTEGER , INTENT(IN) :: iswater, julday
701 REAL , INTENT(IN) :: cen_lat
702 CHARACTER(LEN=*), INTENT(IN) :: mminlu
703 LOGICAL, INTENT(IN) :: allowed_to_read , usemonalb
704 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: lu_index, snowc, xice, snoalb
705 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: albedo, albbck, mavail, emiss, &
707 znt, Z0, thc, xland, xicem
708 INTEGER , INTENT(INOUT) :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
709 REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
711 REAL :: xice_threshold
712 !---------------------------------------------------------------------
715 CHARACTER*80 :: message
716 INTEGER :: landuse_unit, LS, LC, LI, LUN, NSN
717 INTEGER :: i, j, itf, jtf, is, cats, seas, curs
718 INTEGER , PARAMETER :: OPEN_OK = 0
720 INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
721 REAL , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
722 REAL , DIMENSION( max_cats ) :: SCFX
723 ! save these fields in case nest moves or has to be reinitialized
724 ! and this routine is called with allowed_to_read set to false
725 ! note that by saving these, we're locking in the same landuse for
726 ! the duration of a run; possible implications for long climate runs
727 LOGICAL :: found_lu, end_of_file
728 LOGICAL, EXTERNAL :: wrf_dm_on_monitor
730 !---------------------------------------------------------------------
732 CALL wrf_debug( 100 , 'top of landuse_init' )
734 NSN=-1 ! set this to suppress uninitalized data messages from tools
736 if ( fractional_seaice == 0 ) then
738 else if ( fractional_seaice == 1 ) then
739 xice_threshold = 0.02
742 ! recover LU variables from state
743 IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
744 WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
747 DO cats = 1, max_cats
748 SCFX(cats) = lu_state(curs) ; curs = curs + 1
749 DO seas = 1, max_seas
750 ALBD(cats,seas) = lu_state(curs) ; curs = curs + 1
751 SLMO(cats,seas) = lu_state(curs) ; curs = curs + 1
752 SFEM(cats,seas) = lu_state(curs) ; curs = curs + 1
753 SFZ0(cats,seas) = lu_state(curs) ; curs = curs + 1
754 SFHC(cats,seas) = lu_state(curs) ; curs = curs + 1
755 THERIN(cats,seas) = lu_state(curs) ; curs = curs + 1
759 ! Determine season (summer=1, winter=2)
761 IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
762 IF(CEN_LAT.LT.0.0)ISN=3-ISN
765 IF ( allowed_to_read ) THEN
767 IF ( wrf_dm_on_monitor() ) THEN
768 OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
769 IF ( ierr .NE. OPEN_OK ) THEN
770 WRITE(message,FMT='(A)') &
771 'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
772 CALL wrf_error_fatal ( message )
776 ! Read info from file LANDUSE.TBL
777 ! IF(MMINLU.EQ.'OLD ')THEN
780 ! ELSE IF(MMINLU.EQ.'USGS')THEN
783 ! ELSE IF(MMINLU.EQ.'SiB ')THEN
786 ! ELSE IF(MMINLU.EQ.'LW12')THEN
789 ! ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
792 ! call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
794 call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
796 end_of_file = .FALSE.
797 !!! BEGINNING OF 1999 LOOP
799 IF ( wrf_dm_on_monitor() ) THEN
800 READ (landuse_unit,*,END=2002)LUTYPE
803 CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
806 IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
807 FOUND_LU = LUTYPE.EQ.MMINLU
809 CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
810 IF ( .NOT. end_of_file ) THEN
811 CALL wrf_dm_bcast_string(lutype, 256)
812 CALL wrf_dm_bcast_bytes (lucats, IWORDSIZE )
813 CALL wrf_dm_bcast_bytes (luseas, IWORDSIZE )
814 CALL wrf_dm_bcast_bytes (found_lu, LWORDSIZE )
818 PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND', &
819 LUCATS,' CATEGORIES',LUSEAS,' SEASONS', &
820 ' WATER CATEGORY = ',ISWATER, &
821 ' SNOW CATEGORY = ',ISICE
824 if ( wrf_dm_on_monitor() ) then
825 READ (landuse_unit,*)
829 IF ( wrf_dm_on_monitor() ) THEN
830 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS), &
831 SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
833 CALL wrf_dm_bcast_bytes (LI, IWORDSIZE )
834 IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
836 IF ( wrf_dm_on_monitor() ) THEN
837 READ (landuse_unit,*)
842 IF(NSN.EQ.1.AND.FOUND_LU) THEN
845 CALL wrf_dm_bcast_bytes (albd, max_cats * max_seas * RWORDSIZE )
846 CALL wrf_dm_bcast_bytes (slmo, max_cats * max_seas * RWORDSIZE )
847 CALL wrf_dm_bcast_bytes (sfem, max_cats * max_seas * RWORDSIZE )
848 CALL wrf_dm_bcast_bytes (sfz0, max_cats * max_seas * RWORDSIZE )
849 CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
850 CALL wrf_dm_bcast_bytes (sfhc, max_cats * max_seas * RWORDSIZE )
851 CALL wrf_dm_bcast_bytes (scfx, max_cats * RWORDSIZE )
854 IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
857 IF(.NOT. found_lu .OR. end_of_file )THEN
858 CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
860 ENDIF ! allowed_to_read
863 ! Set arrays according to lu_index
864 itf = min0(ite, ide-1)
865 jtf = min0(jte, jde-1)
866 IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
869 IS=nint(lu_index(i,j))
870 ! only do this check on read-in data
871 IF(IS.LT.0.OR.IS.GT.LUN.AND.allowed_to_read)THEN
872 WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
873 CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
875 ! SET NO-DATA POINTS (IS=0) TO WATER
879 IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
880 ALBEDO(I,J)=ALBBCK(I,J)
881 IF(SNOWC(I,J) .GT. 0.5) THEN
883 ALBEDO(I,J)=SNOALB(I,J)
885 ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
888 THC(I,J)=THERIN(IS,ISN)/100.
889 Z0(I,J)=SFZ0(IS,ISN)/100.
891 EMBCK(I,J)=SFEM(IS,ISN)
892 EMISS(I,J)=EMBCK(I,J)
893 MAVAIL(I,J)=SLMO(IS,ISN)
894 IF(IS.NE.ISWATER)THEN
899 ! SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
901 IF(XICE(I,J).GE.xice_threshold)THEN
903 ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
904 ALBEDO(I,J)=ALBBCK(I,J)
905 THC(I,J)=THERIN(ISICE,ISN)/100.
906 Z0(I,J)=SFZ0(ISICE,ISN)/100.
908 EMBCK(I,J)=SFEM(ISICE,ISN)
909 EMISS(I,J)=EMBCK(I,J)
910 MAVAIL(I,J)=SLMO(ISICE,ISN)
915 if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
918 CALL wrf_debug( 100 , 'returning from of landuse_init' )
920 ! restore LU variables from state
922 DO cats = 1, max_cats
923 lu_state(curs) = SCFX(cats) ; curs = curs + 1
924 DO seas = 1, max_seas
925 lu_state(curs) = ALBD(cats,seas) ; curs = curs + 1
926 lu_state(curs) = SLMO(cats,seas) ; curs = curs + 1
927 lu_state(curs) = SFEM(cats,seas) ; curs = curs + 1
928 lu_state(curs) = SFZ0(cats,seas) ; curs = curs + 1
929 lu_state(curs) = SFHC(cats,seas) ; curs = curs + 1
930 lu_state(curs) = THERIN(cats,seas) ; curs = curs + 1
935 END SUBROUTINE landuse_init
937 !=====================================================================
938 SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW, &
939 RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT, &
940 levsiz,XLAT,n_ozmixm, &
941 cldfra_old, & ! Optional
942 ozmixm,pin, & ! Optional
943 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2, & ! Optional
944 paerlev,n_aerosolc, &
945 sfull,shalf,pptop,swrad_scat, &
946 config_flags,restart, &
947 allowed_to_read, start_of_simulation, &
948 ids, ide, jds, jde, kds, kde, &
949 ims, ime, jms, jme, kms, kme, &
950 its, ite, jts, jte, kts, kte )
951 !---------------------------------------------------------------------
952 USE module_ra_rrtm , ONLY : rrtminit
953 USE module_ra_rrtmg_lw , ONLY : rrtmg_lwinit
954 USE module_ra_rrtmg_sw , ONLY : rrtmg_swinit
955 USE module_ra_cam , ONLY : camradinit
956 USE module_ra_sw , ONLY : swinit
957 USE module_ra_gsfcsw , ONLY : gsfc_swinit
958 USE module_ra_gfdleta , ONLY : gfdletainit
960 USE module_ra_hwrf , ONLY : hwrfrainit
962 USE module_ra_hs , ONLY : hsinit
964 !---------------------------------------------------------------------
966 !---------------------------------------------------------------------
967 INTEGER, INTENT(IN) :: id
968 TYPE (grid_config_rec_type) :: config_flags
969 LOGICAL , INTENT(IN) :: restart
970 LOGICAL, INTENT(IN) :: allowed_to_read
972 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
973 ims, ime, jms, jme, kms, kme, &
974 its, ite, jts, jte, kts, kte
976 INTEGER , INTENT(IN) :: JULDAY,JULYR
977 REAL , INTENT(IN) :: DT, RADT, cen_lat, GMT, pptop, &
979 LOGICAL, INTENT(IN) :: start_of_simulation
981 INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
982 INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
984 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: XLAT
986 REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
987 INTENT(INOUT) :: OZMIXM
989 REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
990 REAL, DIMENSION(paerlev), OPTIONAL, INTENT(INOUT) :: m_hybi
991 REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
992 INTENT(INOUT) :: aerosolc_1, aerosolc_2
994 REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
996 INTEGER , INTENT(INOUT) :: STEPRA
999 REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
1000 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1006 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
1009 REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
1010 LOGICAL :: etalw = .false.
1011 LOGICAL :: hwrflw= .false.
1012 LOGICAL :: camlw = .false.
1013 LOGICAL :: etamp = .false.
1014 integer :: month,iday
1015 INTEGER :: i, j, k, itf, jtf, ktf
1016 !---------------------------------------------------------------------
1022 !---------------------------------------------------------------------
1024 !-- calculate radiation time step
1026 STEPRA = nint(RADT*60./DT)
1027 STEPRA = max(STEPRA,1)
1031 IF(start_of_simulation)THEN
1036 RTHRATENLW(i,k,j)=0.
1037 RTHRATENSW(i,k,j)=0.
1043 if( present(cldfra_old) ) then
1047 cldfra_old(i,k,j) = 0.
1054 !-- find out which microphysics option is used first
1056 mp_select: SELECT CASE(config_flags%mp_physics)
1061 END SELECT mp_select
1063 !-- chose long wave radiation scheme
1065 lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
1070 ids, ide, jds, jde, kds, kde, &
1071 ims, ime, jms, jme, kms, kme, &
1072 its, ite, jts, jte, kts, kte )
1076 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1078 IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
1079 PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND. &
1080 PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1) &
1081 .AND. PRESENT(AEROSOLC_2)) THEN
1083 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1084 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1085 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1086 paerlev, n_aerosolc, &
1087 ids, ide, jds, jde, kds, kde, &
1088 ims, ime, jms, jme, kms, kme, &
1089 its, ite, jts, jte, kts, kte )
1091 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
1096 CASE (RRTMG_LWSCHEME)
1097 CALL rrtmg_lwinit( &
1099 ids, ide, jds, jde, kds, kde, &
1100 ims, ime, jms, jme, kms, kme, &
1101 its, ite, jts, jte, kts, kte )
1104 CALL nl_get_start_month(id,month)
1105 CALL nl_get_start_day(id,iday)
1106 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1107 julyr,month,iday,gmt, &
1108 config_flags,allowed_to_read, &
1109 ids, ide, jds, jde, kds, kde, &
1110 ims, ime, jms, jme, kms, kme, &
1111 its, ite, jts, jte, kts, kte )
1115 CALL nl_get_start_month(id,month)
1116 CALL nl_get_start_day(id,iday)
1117 ! test this with standard jul-day calls
1118 ! CALL nl_get_start_year(id,start_year)
1119 ! CALL nl_get_start_month(id,start_month)
1120 ! CALL nl_get_start_day(id,start_day)
1121 ! CALL nl_get_start_hour(id,start_hour)
1122 ! CALL nl_get_start_minute(id,start_minute)
1123 ! CALL nl_get_start_second(id,start_second)
1124 ! CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
1125 ! CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
1126 ! julyr_start=start_year
1127 ! julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
1128 ! gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
1129 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1130 ! CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
1132 kds, kde, kms, kme, kts, kte )
1136 CALL hsinit(RTHRATEN,restart, &
1137 ids, ide, jds, jde, kds, kde, &
1138 ims, ime, jms, jme, kms, kme, &
1139 its, ite, jts, jte, kts, kte )
1142 END SELECT lwrad_select
1143 !-- initialize short wave radiation scheme
1145 swrad_select: SELECT CASE(config_flags%ra_sw_physics)
1151 ids, ide, jds, jde, kds, kde, &
1152 ims, ime, jms, jme, kms, kme, &
1153 its, ite, jts, jte, kts, kte )
1157 CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1161 R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1162 ozmixm,pin,levsiz,XLAT,n_ozmixm, &
1163 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1164 paerlev, n_aerosolc, &
1165 ids, ide, jds, jde, kds, kde, &
1166 ims, ime, jms, jme, kms, kme, &
1167 its, ite, jts, jte, kts, kte )
1171 CALL gsfc_swinit(cen_lat, allowed_to_read )
1173 CASE (RRTMG_SWSCHEME)
1174 CALL rrtmg_swinit( &
1176 ids, ide, jds, jde, kds, kde, &
1177 ims, ime, jms, jme, kms, kme, &
1178 its, ite, jts, jte, kts, kte )
1182 CALL nl_get_start_month(id,month)
1183 CALL nl_get_start_day(id,iday)
1184 CALL gfdletainit(emiss,sfull,shalf,pptop, &
1185 julyr,month,iday,gmt, &
1186 config_flags,allowed_to_read, &
1187 ids, ide, jds, jde, kds, kde, &
1188 ims, ime, jms, jme, kms, kme, &
1189 its, ite, jts, jte, kts, kte )
1194 CALL nl_get_start_month(id,month)
1195 CALL nl_get_start_day(id,iday)
1196 CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1198 kds, kde, kms, kme, kts, kte )
1203 END SELECT swrad_select
1205 END SUBROUTINE ra_init
1207 SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
1208 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
1209 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
1210 num_soil_layers,TKE_MYJ, &
1215 SNOW,SNOWC, CANWAT,SMSTAV, &
1216 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
1217 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail, &
1218 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
1219 #if ( NMM_CORE == 1 )
1227 start_of_simulation, &
1228 ! num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1229 DZR, DZB, DZG, & !Optional urban
1230 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
1231 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
1232 TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
1233 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, & !Optional urban
1234 TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
1235 SF_URBAN_PHYSICS, & !Optional urban
1236 NUM_URBAN_LAYERS, & !Optional multi-layer urban
1237 TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
1238 TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
1239 TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
1240 TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
1241 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
1242 SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
1243 SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
1244 SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
1245 SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
1246 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
1247 A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
1248 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
1249 DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
1250 ids, ide, jds, jde, kds, kde, &
1251 ims, ime, jms, jme, kms, kme, &
1252 its, ite, jts, jte, kts, kte, &
1253 ACHFX,ACLHF,ACGRDFLX, &
1254 oml_hml0, omlcall, & !Optional oml
1255 TML,T0ML,HML,H0ML,HUML,HVML ) !Optional oml
1256 !--------------------------------------------------------------------
1257 USE module_sf_sfclay
1259 USE module_sf_pxsfclay
1264 USE module_sf_myjsfc
1265 USE module_sf_qnsesfc
1266 USE module_sf_noahdrv
1268 USE module_sf_bep !BEP
1269 USE module_sf_bep_bem
1270 USE module_sf_ruclsm
1273 USE module_bl_myjpbl
1274 USE module_bl_myjurb
1275 USE module_bl_boulac
1276 USE module_bl_qnsepbl
1277 #if ( EM_CORE == 1 )
1285 !--------------------------------------------------------------------
1287 !--------------------------------------------------------------------
1288 TYPE (grid_config_rec_type) :: config_flags
1289 LOGICAL , INTENT(IN) :: restart
1290 LOGICAL, INTENT(IN) :: FNDSOILW, FNDSNOWH
1291 LOGICAL, INTENT(IN) :: RDMAXALB
1293 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1294 ims, ime, jms, jme, kms, kme, &
1295 its, ite, jts, jte, kts, kte
1296 INTEGER , INTENT(IN) :: num_soil_layers
1297 INTEGER , INTENT(IN) :: SF_URBAN_PHYSICS
1299 REAL , INTENT(IN) :: DT, BLDT
1300 INTEGER , INTENT(INOUT) :: STEPBL
1302 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), &
1303 INTENT(OUT) :: SMFR3D
1305 REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1306 INTENT(INOUT) :: SMOIS,SH2O,TSLB
1308 REAL, DIMENSION( ims:ime, jms:jme ) , &
1309 INTENT(INOUT) :: SNOW, &
1325 #if ( NMM_CORE == 1 )
1333 INTEGER, DIMENSION( ims:ime, jms:jme ) , &
1334 INTENT(INOUT) :: IVGTYP, &
1339 REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
1341 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1351 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1354 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK
1355 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
1356 CHARACTER(LEN=*), INTENT(IN) :: MMINLU
1357 LOGICAL, INTENT(IN) :: allowed_to_read
1358 INTEGER, INTENT(IN) :: ISURBAN
1359 INTEGER :: isn, isfc
1363 ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !Optional urban
1364 ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !Optional urban
1365 ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !Optional urban
1366 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !Optional urban
1367 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !Optional urban
1368 REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !Optional urban
1369 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1370 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1371 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1372 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1373 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1374 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1375 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1376 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1377 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1378 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1379 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1380 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1381 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1382 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1383 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1384 INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1385 ! REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1386 ! REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1387 ! REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1388 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1389 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1390 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1392 INTEGER , INTENT(IN) :: num_urban_layers
1393 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
1394 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
1395 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
1396 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
1397 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
1398 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
1399 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
1400 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
1401 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
1402 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
1403 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
1404 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
1405 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
1406 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
1407 REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
1408 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
1409 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
1410 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
1411 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
1412 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
1413 REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
1414 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
1415 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
1416 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
1417 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
1418 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
1419 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
1420 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
1421 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
1422 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
1423 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
1424 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
1425 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
1426 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
1427 REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
1429 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1430 ACHFX,ACLHF,ACGRDFLX
1431 ! Optional OML variables
1432 REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1433 TML,T0ML,HML,H0ML,HUML,HVML
1434 INTEGER, OPTIONAL, INTENT(IN) :: omlcall
1435 REAL, OPTIONAL, INTENT(IN) :: oml_hml0
1436 LOGICAL, INTENT(IN) :: start_of_simulation
1440 #if ( EM_CORE == 1 )
1442 INTEGER :: mynn_closure_level
1445 !-- calculate pbl time step
1447 STEPBL = nint(BLDT*60./DT)
1448 STEPBL = max(STEPBL,1)
1451 IF(PRESENT(ACHFX))THEN
1452 IF(.not.restart)THEN
1464 !-- initialize surface layer scheme
1466 sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1469 CALL sfclayinit( allowed_to_read )
1472 CALL pxsfclayinit( allowed_to_read )
1475 CALL myjsfcinit(LOWLYR,UST, &
1476 #if ( NMM_CORE == 1 )
1484 ids, ide, jds, jde, kds, kde, &
1485 ims, ime, jms, jme, kms, kme, &
1486 its, ite, jts, jte, kts, kte )
1489 CASE (QNSESFCSCHEME)
1490 CALL qnsesfcinit(LOWLYR,UST, &
1491 #if ( NMM_CORE == 1 )
1499 ids, ide, jds, jde, kds, kde, &
1500 ims, ime, jms, jme, kms, kme, &
1501 its, ite, jts, jte, kts, kte )
1505 CALL myjsfcinit(LOWLYR,UST, &
1506 #if ( NMM_CORE == 1 )
1514 ids, ide, jds, jde, kds, kde, &
1515 ims, ime, jms, jme, kms, kme, &
1516 its, ite, jts, jte, kts, kte )
1519 CASE (GFDLSFCSCHEME)
1520 CALL myjsfcinit(LOWLYR,UST, &
1525 ids, ide, jds, jde, kds, kde, &
1526 ims, ime, jms, jme, kms, kme, &
1527 its, ite, jts, jte, kts, kte )
1531 #if ( EM_CORE == 1 )
1534 CASE (MYNNSFCSCHEME)
1536 CALL mynn_sf_init_driver(allowed_to_read)
1544 END SELECT sfclay_select
1547 !-- initialize surface scheme
1549 sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1553 CALL slabinit(TSK,TMN, &
1554 TSLB,ZS,DZS,num_soil_layers, &
1555 allowed_to_read ,start_of_simulation ,&
1556 ids, ide, jds, jde, kds, kde, &
1557 ims, ime, jms, jme, kms, kme, &
1558 its, ite, jts, jte, kts, kte )
1562 CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1563 SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW, &
1564 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP, &
1568 ids,ide, jds,jde, kds,kde, &
1569 ims,ime, jms,jme, kms,kme, &
1570 its,ite, jts,jte, kts,kte )
1574 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1575 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1576 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1578 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1579 num_soil_layers, restart, &
1581 ids,ide, jds,jde, kds,kde, &
1582 ims,ime, jms,jme, kms,kme, &
1583 its,ite, jts,jte, kts,kte )
1586 IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1588 IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1590 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers & !urban
1592 ! num_roof_layers,num_wall_layers,road_soil_layers) !urban
1595 CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban
1596 ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban
1597 ! num_roof_layers,num_wall_layers,num_road_layers, & !urban
1598 restart,sf_urban_physics, & !urban
1599 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban
1600 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban
1601 TRL_URB3D,TBL_URB3D,TGL_URB3D, & !urban
1602 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D, & !urban
1603 num_urban_layers, & !urban
1604 TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban
1605 TLEV_URB3D,QLEV_URB3D, & !urban
1606 TW1LEV_URB3D,TW2LEV_URB3D, & !urban
1607 TGLEV_URB3D,TFLEV_URB3D, & !urban
1608 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !urban
1609 SFVENT_URB3D,LFVENT_URB3D, & !urban
1610 SFWIN1_URB3D,SFWIN2_URB3D, & !urban
1611 SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban
1612 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !multi-layer urban
1613 A_E_BEP,B_U_BEP,B_V_BEP, & !multi-layer urban
1614 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban
1615 DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban
1616 FRC_URB2D, UTYPE_URB2D) !urban
1618 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1623 ! if(isfc .ne. 2)CALL wrf_error_fatal &
1624 ! ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1625 CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,XICE, &
1626 mavail,num_soil_layers, config_flags%iswater, &
1627 config_flags%isice, restart, &
1629 ids,ide, jds,jde, kds,kde, &
1630 ims,ime, jms,jme, kms,kme, &
1631 its,ite, jts,jte, kts,kte )
1634 CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV, &
1635 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW, &
1636 ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1638 SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB, &
1639 num_soil_layers, restart, &
1641 ids,ide, jds,jde, kds,kde, &
1642 ims,ime, jms,jme, kms,kme, &
1643 its,ite, jts,jte, kts,kte )
1647 END SELECT sfc_select
1649 IF(PRESENT(OMLCALL))THEN
1650 IF (omlcall .EQ. 1) THEN
1651 CALL omlinit(oml_hml0, tsk, &
1652 tml,t0ml,hml,h0ml,huml,hvml, &
1653 allowed_to_read, start_of_simulation, &
1654 ids,ide, jds,jde, kds,kde, &
1655 ims,ime, jms,jme, kms,kme, &
1656 its,ite, jts,jte, kts,kte )
1660 !-- initialize pbl scheme
1662 pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1665 if(isfc .ne. 1)CALL wrf_error_fatal &
1666 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1667 CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1668 RQCBLTEN,RQIBLTEN,P_QI, &
1669 PARAM_FIRST_SCALAR, &
1672 ids, ide, jds, jde, kds, kde, &
1673 ims, ime, jms, jme, kms, kme, &
1674 its, ite, jts, jte, kts, kte )
1676 if(isfc .ne. 1)CALL wrf_error_fatal &
1677 ( 'module_physics_init: use sfclay scheme for this pbl option' )
1678 CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1679 RQCBLTEN,RQIBLTEN,P_QI, &
1680 PARAM_FIRST_SCALAR, &
1683 ids, ide, jds, jde, kds, kde, &
1684 ims, ime, jms, jme, kms, kme, &
1685 its, ite, jts, jte, kts, kte )
1687 if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
1688 ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
1689 CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1690 RQCBLTEN,RQIBLTEN,P_QI, &
1691 PARAM_FIRST_SCALAR, &
1694 ids, ide, jds, jde, kds, kde, &
1695 ims, ime, jms, jme, kms, kme, &
1696 its, ite, jts, jte, kts, kte )
1698 if(isfc .ne. 2)CALL wrf_error_fatal &
1699 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1700 CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1701 RQCBLTEN,RQIBLTEN,P_QI, &
1702 PARAM_FIRST_SCALAR, &
1705 ids, ide, jds, jde, kds, kde, &
1706 ims, ime, jms, jme, kms, kme, &
1707 its, ite, jts, jte, kts, kte )
1709 if(isfc .ne. 2)CALL wrf_error_fatal &
1710 ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1711 IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1712 CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1713 TKE_MYJ,EXCH_H,restart, &
1715 ids, ide, jds, jde, kds, kde, &
1716 ims, ime, jms, jme, kms, kme, &
1717 its, ite, jts, jte, kts, kte )
1720 CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1721 TKE_MYJ,EXCH_H,restart, &
1723 ids, ide, jds, jde, kds, kde, &
1724 ims, ime, jms, jme, kms, kme, &
1725 its, ite, jts, jte, kts, kte )
1727 CASE (QNSEPBLSCHEME)
1728 if(isfc .ne. 4)CALL wrf_error_fatal &
1729 ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
1730 CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1731 TKE_MYJ,EXCH_H,restart, &
1733 ids, ide, jds, jde, kds, kde, &
1734 ims, ime, jms, jme, kms, kme, &
1735 its, ite, jts, jte, kts, kte )
1738 if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
1739 ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
1740 CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1741 TKE_PBL,EXCH_H,restart, &
1743 ids, ide, jds, jde, kds, kde, &
1744 ims, ime, jms, jme, kms, kme, &
1745 its, ite, jts, jte, kts, kte )
1748 #if ( EM_CORE == 1 )
1752 CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
1753 IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
1754 ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
1756 SELECT CASE(config_flags%bl_pbl_physics)
1758 CASE(MYNNPBLSCHEME2)
1759 mynn_closure_level=2
1761 CASE(MYNNPBLSCHEME3)
1762 mynn_closure_level=3
1768 CALL mynn_bl_init_driver(&
1769 &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
1770 &,restart,allowed_to_read,mynn_closure_level &
1771 &,IDS,IDE,JDS,JDE,KDS,KDE &
1772 &,IMS,IME,JMS,JME,KMS,KME &
1773 &,ITS,ITE,JTS,JTE,KTS,KTE)
1779 END SELECT pbl_select
1782 END SUBROUTINE bl_init
1784 !==================================================================
1785 SUBROUTINE cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN, &
1786 RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC, &
1790 RAINCV,W0AVG,config_flags,restart, &
1791 CLDEFI,LOWLYR,MASS_FLUX, &
1793 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1794 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1795 cugd_tten,cugd_ttens,cugd_qvten, &
1796 cugd_qvtens,cugd_qcten, &
1797 allowed_to_read, start_of_simulation, &
1798 ids, ide, jds, jde, kds, kde, &
1799 ims, ime, jms, jme, kms, kme, &
1800 its, ite, jts, jte, kts, kte )
1801 !------------------------------------------------------------------
1805 USE module_cu_gd, ONLY : GDINIT
1806 USE module_cu_g3, ONLY : G3INIT
1808 !------------------------------------------------------------------
1810 !------------------------------------------------------------------
1811 TYPE (grid_config_rec_type) :: config_flags
1812 LOGICAL , INTENT(IN) :: restart
1815 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1816 ims, ime, jms, jme, kms, kme, &
1817 its, ite, jts, jte, kts, kte
1819 REAL , INTENT(IN) :: DT, CUDT
1820 LOGICAL , INTENT(IN) :: start_of_simulation
1821 LOGICAL , INTENT(IN) :: allowed_to_read
1822 INTEGER , INTENT(INOUT) :: STEPCU
1824 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) :: &
1825 RTHCUTEN, RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
1826 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
1827 cugd_tten,cugd_ttens,cugd_qvten, &
1828 cugd_qvtens,cugd_qcten
1830 REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
1832 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
1835 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
1837 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
1839 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
1841 REAL , DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX, &
1842 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1843 APR_CAPMA,APR_CAPME,APR_CAPMI
1845 INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
1847 REAL, DIMENSION(IMS:IME,JMS:JME,KMS:KME), INTENT(INOUT) :: &
1853 INTEGER :: i,j,itf,jtf
1855 !--------------------------------------------------------------------
1857 !-- calculate cumulus parameterization time step
1862 STEPCU = nint(CUDT*60./DT)
1863 STEPCU = max(STEPCU,1)
1867 IF(start_of_simulation)THEN
1876 cps_select: SELECT CASE(config_flags%cu_physics)
1879 CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1880 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
1881 PARAM_FIRST_SCALAR,restart, &
1883 ids, ide, jds, jde, kds, kde, &
1884 ims, ime, jms, jme, kms, kme, &
1885 its, ite, jts, jte, kts, kte )
1888 CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1889 CLDEFI,LOWLYR,cp,r_d,restart, &
1891 ids, ide, jds, jde, kds, kde, &
1892 ims, ime, jms, jme, kms, kme, &
1893 its, ite, jts, jte, kts, kte )
1896 CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN, &
1897 RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS, &
1898 SVP1,SVP2,SVP3,SVPT0, &
1899 PARAM_FIRST_SCALAR,restart, &
1901 ids, ide, jds, jde, kds, kde, &
1902 ims, ime, jms, jme, kms, kme, &
1903 its, ite, jts, jte, kts, kte )
1905 CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
1906 MASS_FLUX,cp,restart, &
1907 P_QC,P_QI,PARAM_FIRST_SCALAR, &
1909 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1910 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1912 ids, ide, jds, jde, kds, kde, &
1913 ims, ime, jms, jme, kms, kme, &
1914 its, ite, jts, jte, kts, kte )
1915 #if ( EM_CORE == 1 )
1917 CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
1918 MASS_FLUX,cp,restart, &
1919 P_QC,P_QI,PARAM_FIRST_SCALAR, &
1921 APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
1922 APR_CAPMA,APR_CAPME,APR_CAPMI, &
1923 cugd_tten,cugd_ttens,cugd_qvten, &
1924 cugd_qvtens,cugd_qcten, &
1926 ids, ide, jds, jde, kds, kde, &
1927 ims, ime, jms, jme, kms, kme, &
1928 its, ite, jts, jte, kts, kte )
1930 CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN, &
1932 RUCUTEN,RVCUTEN, & ! gopal's doing for SAS
1934 restart,P_QC,P_QI,PARAM_FIRST_SCALAR, &
1936 ids, ide, jds, jde, kds, kde, &
1937 ims, ime, jms, jme, kms, kme, &
1938 its, ite, jts, jte, kts, kte )
1942 END SELECT cps_select
1944 END SUBROUTINE cu_init
1946 !==================================================================
1947 SUBROUTINE mp_init(RAINNC,config_flags,restart,warm_rain, &
1949 MPDT, DT, DX, DY, LOWLYR, & ! for eta mp
1950 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, & ! for eta mp
1951 mp_restart_state,tbpvs_state,tbpvs0_state, & ! eta mp
1952 allowed_to_read, start_of_simulation, &
1953 ids, ide, jds, jde, kds, kde, &
1954 ims, ime, jms, jme, kms, kme, &
1955 its, ite, jts, jte, kts, kte )
1956 !------------------------------------------------------------------
1960 USE module_mp_etanew
1964 USE module_mp_thompson
1965 USE module_mp_thompson07
1966 USE module_mp_morr_two_moment
1967 USE module_mp_milbrandt2mom
1968 ! USE module_mp_milbrandt3mom
1971 !------------------------------------------------------------------
1973 !------------------------------------------------------------------
1975 TYPE (grid_config_rec_type) :: config_flags
1976 LOGICAL , INTENT(IN) :: restart
1977 LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
1978 REAL , INTENT(IN) :: MPDT, DT, DX, DY
1979 LOGICAL , INTENT(IN) :: start_of_simulation
1981 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
1982 ims, ime, jms, jme, kms, kme, &
1983 its, ite, jts, jte, kts, kte
1985 INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT) :: LOWLYR
1986 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC
1987 REAL, DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
1988 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
1989 REAL , DIMENSION(:) ,INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
1990 LOGICAL , INTENT(IN) :: allowed_to_read
1993 INTEGER :: i, j, itf, jtf
1996 adv_moist_cond = .true.
2000 IF(start_of_simulation)THEN
2008 mp_select: SELECT CASE(config_flags%mp_physics)
2010 CASE (KESSLERSCHEME)
2013 CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2015 CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2017 CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2019 adv_moist_cond = .false.
2020 CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart, &
2021 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2022 mp_restart_state,tbpvs_state,tbpvs0_state,&
2024 ids, ide, jds, jde, kds, kde, &
2025 ims, ime, jms, jme, kms, kme, &
2026 its, ite, jts, jte, kts, kte )
2029 CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart, &
2030 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
2032 ids, ide, jds, jde, kds, kde, &
2033 ims, ime, jms, jme, kms, kme, &
2034 its, ite, jts, jte, kts, kte )
2037 ! Cycling the WRF forecast with moving nests will cause this initialization to be
2038 ! called for each nest move. This is potentially very computationally expensive.
2039 IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
2042 IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson07_init
2044 CASE (MORR_TWO_MOMENT)
2045 CALL morr_two_moment_init
2046 CASE (MILBRANDT2MOM)
2047 CALL milbrandt2mom_init
2048 ! CASE (MILBRANDT3MOM)
2049 ! CALL milbrandt3mom_init
2051 CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2053 CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2057 END SELECT mp_select
2059 END SUBROUTINE mp_init
2061 #if ( EM_CORE == 1 )
2062 !==========================================================
2063 SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
2064 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
2065 config_flags,restart, &
2067 ids, ide, jds, jde, kds, kde, &
2068 ims, ime, jms, jme, kms, kme, &
2069 its, ite, jts, jte, kts, kte )
2072 !--------------------------------------------------------------------
2073 USE module_fdda_psufddagd
2074 USE module_fdda_spnudging, ONLY : fddaspnudginginit
2075 !--------------------------------------------------------------------
2077 !--------------------------------------------------------------------
2078 TYPE (grid_config_rec_type) :: config_flags
2079 LOGICAL , INTENT(IN) :: restart
2081 INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
2082 ims, ime, jms, jme, kms, kme, &
2083 its, ite, jts, jte, kts, kte
2085 REAL , INTENT(IN) :: DT, FGDT
2086 INTEGER , INTENT(IN) :: id
2087 INTEGER , INTENT(INOUT) :: STEPFG
2088 REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
2094 REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
2096 LOGICAL, INTENT(IN) :: allowed_to_read
2097 !--------------------------------------------------------------------
2099 !-- calculate pbl time step
2101 STEPFG = nint(FGDT*60./DT)
2102 STEPFG = max(STEPFG,1)
2105 !-- initialize fdda scheme
2107 fdda_select: SELECT CASE(config_flags%grid_fdda)
2110 CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
2111 config_flags%run_hours, &
2112 config_flags%if_no_pbl_nudging_uv, &
2113 config_flags%if_no_pbl_nudging_t, &
2114 config_flags%if_no_pbl_nudging_q, &
2115 config_flags%if_zfac_uv, &
2116 config_flags%k_zfac_uv, &
2117 config_flags%if_zfac_t, &
2118 config_flags%k_zfac_t, &
2119 config_flags%if_zfac_q, &
2120 config_flags%k_zfac_q, &
2122 config_flags%gt, config_flags%gq, &
2123 config_flags%if_ramping, config_flags%dtramp_min, &
2124 config_flags%auxinput10_end_h, &
2125 config_flags%grid_sfdda, &
2126 config_flags%guv_sfc, &
2127 config_flags%gt_sfc, &
2128 config_flags%gq_sfc, &
2129 restart, allowed_to_read, &
2130 ids, ide, jds, jde, kds, kde, &
2131 ims, ime, jms, jme, kms, kme, &
2132 its, ite, jts, jte, kts, kte )
2135 CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
2136 config_flags%run_hours, &
2137 config_flags%if_no_pbl_nudging_uv, &
2138 config_flags%if_no_pbl_nudging_t, &
2139 config_flags%if_no_pbl_nudging_ph, &
2140 config_flags%if_zfac_uv, &
2141 config_flags%k_zfac_uv, &
2142 config_flags%dk_zfac_uv, &
2143 config_flags%if_zfac_t, &
2144 config_flags%k_zfac_t, &
2145 config_flags%dk_zfac_t, &
2146 config_flags%if_zfac_ph, &
2147 config_flags%k_zfac_ph, &
2148 config_flags%dk_zfac_ph, &
2150 config_flags%gt, config_flags%gph, &
2151 config_flags%if_ramping, config_flags%dtramp_min, &
2152 config_flags%auxinput9_end_h, &
2153 config_flags%xwavenum,config_flags%ywavenum, &
2154 restart, allowed_to_read, &
2155 ids, ide, jds, jde, kds, kde, &
2156 ims, ime, jms, jme, kms, kme, &
2157 its, ite, jts, jte, kts, kte )
2161 END SELECT fdda_select
2163 END SUBROUTINE fg_init
2165 !-------------------------------------------------------------------
2166 SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid, &
2167 idynin, dtramp, fdaend, restart, &
2168 obs_twindo_cg, obs_twindo, itimestep, &
2172 sfcfact, sfcfacr, dpsmx, &
2173 nudgezfullr1_uv, nudgezrampr1_uv, &
2174 nudgezfullr2_uv, nudgezrampr2_uv, &
2175 nudgezfullr4_uv, nudgezrampr4_uv, &
2176 nudgezfullr1_t, nudgezrampr1_t, &
2177 nudgezfullr2_t, nudgezrampr2_t, &
2178 nudgezfullr4_t, nudgezrampr4_t, &
2179 nudgezfullr1_q, nudgezrampr1_q, &
2180 nudgezfullr2_q, nudgezrampr2_q, &
2181 nudgezfullr4_q, nudgezrampr4_q, &
2182 nudgezfullmin, nudgezrampmin, nudgezmax, &
2184 start_year, start_month, start_day, &
2185 start_hour, start_minute, start_second, &
2189 ids, ide, jds, jde, kds, kde, &
2190 ims, ime, jms, jme, kms, kme, &
2191 its, ite, jts, jte, kts, kte )
2193 !--------------------------------------------------------------------
2195 USE module_fddaobs_rtfdda
2197 !--------------------------------------------------------------------
2199 !--------------------------------------------------------------------
2200 INTEGER , INTENT(IN) :: maxdom
2201 INTEGER , INTENT(IN) :: obs_nudge_opt(maxdom)
2202 INTEGER , INTENT(IN) :: ids,ide, jds,jde, kds,kde, &
2203 ims,ime, jms,jme, kms,kme, &
2204 its,ite, jts,jte, kts,kte
2205 INTEGER , INTENT(IN) :: inest
2206 INTEGER , INTENT(IN) :: parid(maxdom)
2207 INTEGER , INTENT(IN) :: idynin ! flag for dynamic initialization
2208 REAL , INTENT(IN) :: dtramp ! time period for ramping (idynin)
2209 REAL , INTENT(IN) :: fdaend(maxdom) ! nudging end time for domain (min)
2210 LOGICAL , INTENT(IN) :: restart
2211 REAL , INTENT(IN) :: obs_twindo_cg ! twindo on course grid
2212 REAL , INTENT(IN) :: obs_twindo
2213 INTEGER , INTENT(IN) :: itimestep
2214 INTEGER , INTENT(IN) :: no_pbl_nudge_uv(maxdom) ! flags for no wind nudging in pbl
2215 INTEGER , INTENT(IN) :: no_pbl_nudge_t(maxdom) ! flags for no temperature nudging in pbl
2216 INTEGER , INTENT(IN) :: no_pbl_nudge_q(maxdom) ! flags for no moisture nudging in pbl
2217 REAL , INTENT(IN) :: sfcfact ! scale factor applied to time window for surface obs
2218 REAL , INTENT(IN) :: sfcfacr ! scale fac applied to horiz rad of infl for sfc obs
2219 REAL , INTENT(IN) :: dpsmx ! max pressure change allowed within horiz. infl. range
2220 REAL , INTENT(IN) :: nudgezfullr1_uv ! vert infl fcn, regime=1 full-wt hght, winds
2221 REAL , INTENT(IN) :: nudgezrampr1_uv ! vert infl fcn, regime=1 ramp down hght, winds
2222 REAL , INTENT(IN) :: nudgezfullr2_uv ! vert infl fcn, regime=2 full-wt hght, winds
2223 REAL , INTENT(IN) :: nudgezrampr2_uv ! vert infl fcn, regime=2 ramp down hght, winds
2224 REAL , INTENT(IN) :: nudgezfullr4_uv ! vert infl fcn, regime=4 full-wt hght, winds
2225 REAL , INTENT(IN) :: nudgezrampr4_uv ! vert infl fcn, regime=4 ramp down hght, winds
2226 REAL , INTENT(IN) :: nudgezfullr1_t ! vert infl fcn, regime=1 full-wt hght, temp
2227 REAL , INTENT(IN) :: nudgezrampr1_t ! vert infl fcn, regime=1 ramp down hght, temp
2228 REAL , INTENT(IN) :: nudgezfullr2_t ! vert infl fcn, regime=2 full-wt hght, temp
2229 REAL , INTENT(IN) :: nudgezrampr2_t ! vert infl fcn, regime=2 ramp down hght, temp
2230 REAL , INTENT(IN) :: nudgezfullr4_t ! vert infl fcn, regime=4 full-wt hght, temp
2231 REAL , INTENT(IN) :: nudgezrampr4_t ! vert infl fcn, regime=4 ramp down hght, temp
2232 REAL , INTENT(IN) :: nudgezfullr1_q ! vert infl fcn, regime=1 full-wt hght, mois
2233 REAL , INTENT(IN) :: nudgezrampr1_q ! vert infl fcn, regime=1 ramp down hght, mois
2234 REAL , INTENT(IN) :: nudgezfullr2_q ! vert infl fcn, regime=2 full-wt hght, mois
2235 REAL , INTENT(IN) :: nudgezrampr2_q ! vert infl fcn, regime=2 ramp down hght, mois
2236 REAL , INTENT(IN) :: nudgezfullr4_q ! vert infl fcn, regime=4 full-wt hght, mois
2237 REAL , INTENT(IN) :: nudgezrampr4_q ! vert infl fcn, regime=4 ramp down hght, mois
2238 REAL , INTENT(IN) :: nudgezfullmin ! min dpth thru which vert infl fcn remains 1.0 (m)
2239 REAL , INTENT(IN) :: nudgezrampmin ! min dpth thru which vif decreases 1.0 to 0.0 (m)
2240 REAL , INTENT(IN) :: nudgezmax ! max dpth in which vif is nonzero (m)
2241 REAL , INTENT(IN) :: xlat ( ims:ime, jms:jme ) ! latitudes on mass-point grid
2242 REAL , INTENT(IN) :: xlong( ims:ime, jms:jme ) ! longitudes on mass-point grid
2243 INTEGER , INTENT(INOUT) :: start_year
2244 INTEGER , INTENT(INOUT) :: start_month
2245 INTEGER , INTENT(INOUT) :: start_day
2246 INTEGER , INTENT(INOUT) :: start_hour
2247 INTEGER , INTENT(INOUT) :: start_minute
2248 INTEGER , INTENT(INOUT) :: start_second
2249 REAL , INTENT(IN) :: p00 ! base state pressure
2250 REAL , INTENT(IN) :: t00 ! base state temperature
2251 REAL , INTENT(IN) :: tlp ! base state lapse rate
2252 REAL , INTENT(IN) :: znu( kms:kme ) ! eta values on half (mass) levels
2253 REAL , INTENT(IN) :: p_top ! pressure at top of model
2254 TYPE(fdob_type), INTENT(INOUT) :: fdob
2256 INTEGER :: e_sn ! ending north-south grid index
2257 LOGICAL :: ipf_init ! print warnings detected at initialzn
2258 !--------------------------------------------------------------------
2259 !-- initialize fdda obs-nudging scheme
2261 IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
2264 CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid, &
2265 idynin, dtramp, fdaend, restart, &
2267 obs_twindo, itimestep, &
2271 sfcfact, sfcfacr, dpsmx, &
2272 nudgezfullr1_uv, nudgezrampr1_uv, &
2273 nudgezfullr2_uv, nudgezrampr2_uv, &
2274 nudgezfullr4_uv, nudgezrampr4_uv, &
2275 nudgezfullr1_t, nudgezrampr1_t, &
2276 nudgezfullr2_t, nudgezrampr2_t, &
2277 nudgezfullr4_t, nudgezrampr4_t, &
2278 nudgezfullr1_q, nudgezrampr1_q, &
2279 nudgezfullr2_q, nudgezrampr2_q, &
2280 nudgezfullr4_q, nudgezrampr4_q, &
2281 nudgezfullmin, nudgezrampmin, nudgezmax, &
2283 start_year, start_month, start_day, &
2284 start_hour, start_minute, start_second, &
2288 ids,ide, jds,jde, kds,kde, &
2289 ims,ime, jms,jme, kms,kme, &
2290 its,ite, jts,jte, kts,kte)
2292 END SUBROUTINE fdob_init
2295 !--------------------------------------------------------------------
2296 SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
2298 kds,kde,kms,kme,kts,kte)
2301 INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
2302 REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
2303 REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
2304 REAL , INTENT(IN) :: p_top
2305 REAL , INTENT(OUT) :: pptop
2306 TYPE (grid_config_rec_type) :: config_flags
2307 LOGICAL , INTENT(IN) :: allowed_to_read
2309 REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
2312 IF(zf(kde/2) .GT. 1.0)THEN
2313 ! Height levels assumed (zeta coordinate)
2314 ! Convert to sigma using standard atmosphere for pressure-height relation
2315 ! constants for standard atmosphere definition
2322 tstrat=ts+gamma*ztrop
2323 ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
2330 p=ps*(t/ts)**(-g/(gamma*r))
2333 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2339 sf(k)=(p-ptop)/(ps-ptop)
2342 z=0.5*(zf(k)+zf(k-1))
2345 p=ps*(t/ts)**(-g/(gamma*r))
2348 p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2350 sh(k-1)=(p-ptop)/(ps-ptop)
2355 ! Levels are already sigma/eta
2357 ! sf(k)=zf(kde-k+kds)
2358 ! if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
2360 if(k .ne. kde)sh(k)=zh(k)
2366 END SUBROUTINE z2sigma
2368 END MODULE module_physics_init