r4627 | gill | 2010-12-29 16:29:58 -0700 (Wed, 29 Dec 2010) | 5 lines
[wrffire.git] / wrfv2_fire / phys / module_physics_init.F
blobe103ff78b9df98e89aab147f3af58c7209ffae0d
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
6 !  calling 'integrate'.
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
17 CONTAINS
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,  &
30                          NCA,swrad_scat,                         &
31                          CLDEFI,LOWLYR,                          &
32                          MASS_FLUX,                              &
33                          RTHFTEN, RQVFTEN,                       &
34                          CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK,  & !EMBCK new
35                          LU_INDEX,                               &
36                          landuse_ISICE, landuse_LUCATS,          &
37                          landuse_LUSEAS, landuse_ISN,            &
38                          lu_state,                               &
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,  &
42 #if (NMM_CORE != 1)
43                          TKE_PBL,  &
44 #endif
45                          RUCUTEN,  RVCUTEN,                      &
46                          EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
47                          TSLB,ZS,DZS,num_soil_layers,warm_rain,  &
48                          adv_moist_cond,                         &
49                          APR_GR,APR_W,APR_MC,APR_ST,APR_AS,      &
50                          APR_CAPMA,APR_CAPME,APR_CAPMI,          &
51                          XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV,   &
52                          SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
53                          ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS,    &
54                          SH2O, SNOWH, SMFR3D,                    &  ! temporary
55                          SNOALB,                                 &
56                          DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
57                          mp_restart_state,tbpvs_state,tbpvs0_state,&
58                          allowed_to_read, moved, start_of_simulation,&
59                          LAGDAY,                                 &
60                          ids, ide, jds, jde, kds, kde,           &
61                          ims, ime, jms, jme, kms, kme,           &
62                          its, ite, jts, jte, kts, kte,           &
63                          NUM_URBAN_LAYERS,                       &
64                          ozmixm,pin,                             &    ! Optional
65                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
66                          RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,         &    ! Optional
67                          RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,       &    ! Optional
68                          FGDT,STEPFG,                            &    ! Optional
69                          cugd_tten,cugd_ttens,cugd_qvten,        &    ! Optional
70                          cugd_qvtens,cugd_qcten,                 &    ! Optional
71 !                        num_roof_layers,num_wall_layers,        & !Optional urban
72 !                        num_road_layers,                        & !Optional urban
73                          DZR, DZB, DZG,                          & !Optional urban
74                          TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,    & !Optional urban
75                          QC_URB2D, XXXR_URB2D,XXXB_URB2D,        & !Optional urban
76                          XXXG_URB2D, XXXC_URB2D,                 & !Optional urban
77                          TRL_URB3D, TBL_URB3D, TGL_URB3D,        & !Optional urban
78                          SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,  & !Optional urban
79                          TS_URB2D, FRC_URB2D, UTYPE_URB2D,       & !Optional urban
80                          TRB_URB4D,TW1_URB4D,TW2_URB4D,          & !Optional multi-layer urban
81                          TGB_URB4D,TLEV_URB3D,QLEV_URB3D,        & !Optional multi-layer urban
82                          TW1LEV_URB3D,TW2LEV_URB3D,              & !Optional multi-layer urban
83                          TGLEV_URB3D,TFLEV_URB3D,                & !Optional multi-layer urban
84                          SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,    & !Optional multi-layer urban
85                          SFVENT_URB3D,LFVENT_URB3D,              & !Optional multi-layer urban
86                          SFWIN1_URB3D,SFWIN2_URB3D,              & !Optional multi-layer urban
87                          SFW1_URB3D,SFW2_URB3D,                  & !Optional multi-layer urban
88                          SFR_URB3D,SFG_URB3D,                    & !Optional multi-layer urban
89                          A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,        & !Optional multi-layer urban
90                          A_E_BEP,B_U_BEP,B_V_BEP,                & !Optional multi-layer urban
91                          B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,        & !Optional multi-layer urban
92                          DL_U_BEP,SF_BEP,VL_BEP,                 & !Optional multi-layer urban
93                          TML,T0ML,HML,H0ML,HUML,HVML,TMOML,      & !Optional oml
94                          itimestep,                              & !Optional obs fdda
95 #if ( EM_CORE == 1 )
96                          fdob,                                   & !Optional obs fdda
97 #endif
98                          t00, p00, tlp,                          & !for obs-nudging
99                          TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update,   &
100                          ACHFX,ACLHF,ACGRDFLX                    &
101    ! OPTIONAL 
102                          ,te_temf          & ! WA 12/21/09
103                          ,cf3d_temf        & ! WA 9/27/10
104                          )
106 !-----------------------------------------------------------------
107    USE module_domain
108    USE module_wrf_error
109    USE module_wind_generic
110    USE module_wind_fitch
111    IMPLICIT NONE
112 !-----------------------------------------------------------------
113    TYPE (grid_config_rec_type)              :: config_flags
115    INTEGER , INTENT(IN)        :: id
116    INTEGER , INTENT(IN) ,OPTIONAL       :: tmn_update
117    LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
118 !   LOGICAL , INTENT (IN)       :: FNDSOILW, FNDSNOWH
119    LOGICAL, PARAMETER          :: FNDSOILW=.true., FNDSNOWH=.true.
120    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,  &
121                                   ims, ime, jms, jme, kms, kme,  &
122                                   its, ite, jts, jte, kts, kte
124    INTEGER , INTENT(IN)        :: num_soil_layers
125    INTEGER , INTENT(IN)        :: lagday
126    INTEGER , INTENT(OUT) ,OPTIONAL      :: nyear, nday
128    LOGICAL,  INTENT(IN)        :: start_of_simulation
129    REAL,     INTENT(IN)        :: DT, p_top, DX, DY
130    LOGICAL,  INTENT(IN)        :: restart
131    REAL,     INTENT(IN)        :: RADT,BLDT,CUDT,MPDT
132    REAL,     INTENT(IN)        :: swrad_scat
134    REAL,     DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
135    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
137    INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
138    INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
140    REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
141           INTENT(INOUT) ::                                  OZMIXM
143    REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::        PIN
145    REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
146    REAL,  DIMENSION(paerlev), OPTIONAL,INTENT(INOUT)  ::          m_hybi
147    REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
148           INTENT(INOUT) ::                    aerosolc_1, aerosolc_2
150    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
151                  INTENT(INOUT) :: SMOIS, SH2O,TSLB
152    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
154    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
155             INTENT(INOUT)    ::                           SNOW, &
156                                                          SNOWC, &
157                                                          SNOWH, &
158                                                         CANWAT, &
159                                                         SMSTAV, &
160                                                         SMSTOT, &
161                                                      SFCRUNOFF, &
162                                                       UDRUNOFF, &
163                                                         SFCEVP, &
164                                                         GRDFLX, &
165                                                         ACSNOW, &
166                                                           XICE, &
167                                                          XICEM, &
168                                                         VEGFRA, &
169                                                         ACSNOM
171    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
172             OPTIONAL, INTENT(INOUT)    ::                ACHFX, &
173                                                          ACLHF, &
174                                                       ACGRDFLX
176    INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
177             INTENT(INOUT)    ::                         IVGTYP, &
178                                                         ISLTYP
180 ! rad
182    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
183              RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
185    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
186              CLDFRA_OLD
188    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
189              GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK                          !EMBCK new
190    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::   SNOALB
193    REAL,     INTENT(IN) :: GMT
195    INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
196    INTEGER , INTENT(IN) :: JULYR, JULDAY
198 ! cps
200    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
201              RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, RQSCUTEN,   &
202              RQICUTEN
204    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
206    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX,   &
207                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
208                       APR_CAPMA,APR_CAPME,APR_CAPMI
210    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
211              RTHFTEN, RQVFTEN
213    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) ::           &
214              RAINNC, RAINC, RAINCV, RAINNCV
216    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
218    INTEGER,  DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
220 !pbl
222    ! soil layer
225    REAL,     DIMENSION(1:num_soil_layers),      INTENT(INOUT) :: ZS,DZS
227    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
228              RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_MYJ
229 #if (NMM_CORE != 1)
230    REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    TKE_PBL
231 #endif
232    REAL,     DIMENSION(IMS:IME,JMS:JME,KMS:KME) , INTENT(OUT) :: &
233              RUCUTEN, RVCUTEN
234    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
235              cugd_tten,cugd_ttens,cugd_qvten,                &
236              cugd_qvtens,cugd_qcten
237    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
238              XLAND,ZNT,Z0,UST,MOL,LU_INDEX,                         &
239              PBLH,THC,MAVAIL,HFX,QFX,RAINBL
240    INTEGER , INTENT(INOUT)  :: landuse_ISICE, landuse_LUCATS
241    INTEGER , INTENT(INOUT)  :: landuse_LUSEAS, landuse_ISN
242    REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
244    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
245    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
246    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
247    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
248    REAL,     DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
251    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::   &
252              F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
253    REAL, DIMENSION(:), INTENT(INOUT)   :: mp_restart_state,tbpvs_state,tbpvs0_state
254    LOGICAL,  INTENT(IN)  :: allowed_to_read, moved
256 ! ocean mixed layer
257    REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
258              TML,T0ML,HML,H0ML,HUML,HVML,TMOML
260 !fdda
261    REAL,     OPTIONAL, INTENT(IN) :: FGDT
262    INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
263    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
264              RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
265    REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
266              RMUNDGDTEN
268 !URBAN
269 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR   !urban
270 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB   !urban
271 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG   !urban
272    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR    !urban
273    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB    !urban
274    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG    !urban
276    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
277    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
278    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
279    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
280    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
281    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
282    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
283    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
284    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
286 !   REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
287 !   REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
288 !   REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
289    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D  !urban
290    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D  !urban
291    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D  !urban
293    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
294    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
295    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
296    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
297    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
298    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
299    INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
301    INTEGER , INTENT(IN)        :: num_urban_layers
302    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
303    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
304    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
305    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
306    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
307    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
308    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
309    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
310    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
311    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
312    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
313    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
314    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
315    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
316    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
317    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
318    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
319    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
320    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
321    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
322    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
323    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
324    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
325    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
326    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
327    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
328    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
329    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
330    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
331    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
332    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
333    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
334    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
335    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
336    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
338 !obs fdda
339    INTEGER, OPTIONAL, INTENT(IN) :: itimestep
340 #if ( EM_CORE == 1 )
341    TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
342 #endif
343    REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp   ! for obs-nudging base-state calcn
345 ! WA 12/21/09
346    REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
347           INTENT(OUT) ::    te_temf, cf3d_temf    
349 ! Local data
351    REAL    :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
352    REAL,     DIMENSION( kms:kme )  :: sfull, shalf
353    REAL :: obs_twindo_cg, obs_twindo
355    CHARACTER*256 :: MMINLU_loc
356    CHARACTER*80 :: message
357    INTEGER :: ISWATER
358    INTEGER :: ISICE
359    INTEGER :: ISURBAN
360    INTEGER :: sf_urban_physics
361    INTEGER :: omlcall
362    REAL    :: oml_hml0
363    LOGICAL :: usemonalb
364    LOGICAL :: rdmaxalb
366    INTEGER :: i, j, k, itf, jtf, n
367 integer myproc
369 !-----------------------------------------------------------------
371    sf_urban_physics=config_flags%sf_urban_physics
372    usemonalb=config_flags%usemonalb
373    rdmaxalb=config_flags%rdmaxalb
374 #if ( EM_CORE == 1 )
375    obs_twindo_cg=model_config_rec%obs_twindo(1)
376    obs_twindo=config_flags%obs_twindo
377    oml_hml0=config_flags%oml_hml0
378    omlcall=config_flags%omlcall
379 #endif
381 !-- should be from the namelist
383    sfull = 0.
384    shalf = 0.
386    CALL wrf_debug(100,'top of phy_init')
388    WRITE(wrf_err_message,*) 'phy_init:  start_of_simulation = ',start_of_simulation
389    CALL wrf_debug ( 100, TRIM(wrf_err_message) )
391    itf=min0(ite,ide-1)
392    jtf=min0(jte,jde-1)
394    ZZLND=0.1
395    ZZWTR=0.0001
396    THINLD=0.04
397    ALBLND=0.2
398    XMAVA=0.3
400 #if (NMM_CORE == 1)
401    if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
402 #endif
404    CALL nl_get_cen_lat(id,cen_lat)
405    CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
406    CALL nl_get_iswater(id,iswater)
407    CALL nl_get_isice(id,isice)
408    CALL nl_get_isurban(id,isurban)
409    CALL nl_get_mminlu( 1, mminlu_loc )
410    CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
411 !-- temporary fix by ww
412    landuse_ISICE = isice
414 ! Added for Wind Turbine parameterization code -- This will only read in an optional 
415 ! configuration file with information that will be used by inividual turbine init routines 
416 ! as each domain is initialized.
417   IF ( id .EQ. 1 ) THEN
418     CALL init_module_wind_generic
419     CALL init_module_wind_fitch
420   ENDIF
423   IF(.not.restart)THEN
424 !-- initialize common variables
426    IF ( .NOT. moved ) THEN
427    DO j=jts,jtf
428    DO i=its,itf
429       XLAND(i,j)=1.
430       GSW(i,j)=0.
431       GLW(i,j)=0.
432 !-- initialize ust to a small value
433       UST(i,j)=0.0001
434       MOL(i,j)=0.0
435       PBLH(i,j)=0.0
436       HFX(i,j)=0.
437       QFX(i,j)=0.
438       RAINBL(i,j)=0.
439       RAINNCV(i,j)=0.
440       ACSNOW(i,j)=0.
441       DO k=kms,kme  !wig, 17-May-2006: Added for idealized chem. runs
442          EXCH_H(i,k,j) = 0.
443       END DO
444    ENDDO
445    ENDDO
446    ENDIF
448    IF(PRESENT(TMN_UPDATE))THEN
449    if(tmn_update.eq.1) then
450    nyear=1
451    nday=1
452    DO j=jts,jtf
453    DO i=its,itf
454       TYR(i,j)=TMN(i,j)
455       TYRA(i,j)=TMN(i,j)
456       TDLY(i,j)=TMN(i,j)
457     DO n=1,lagday
458       TLAG(i,n,j)=TMN(i,j)
459     ENDDO
460    ENDDO
461    ENDDO
462    endif
463    ENDIF
467    DO j=jts,jtf
468    DO i=its,itf
469      IF(XLAND(i,j) .LT. 1.5)THEN
470        IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=ALBLND
471        EMBCK(i,j)=0.85
472        ALBEDO(i,j)=ALBBCK(i,j)
473        EMISS(i,j)=EMBCK(i,j)
474        THC(i,j)=THINLD
475        ZNT(i,j)=ZZLND
476 #if  ! ( NMM_CORE == 1 )
477        Z0(i,j)=ZZLND
478 #endif
479        MAVAIL(i,j)=XMAVA
480      ELSE
481        IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=0.08
482        ALBEDO(i,j)=ALBBCK(i,j)
483        EMBCK(i,j)=0.98
484        EMISS(i,j)=EMBCK(i,j)
485        THC(i,j)=THINLD
486        ZNT(i,j)=ZZWTR
487 #if  ! ( NMM_CORE == 1 )
488        Z0(i,j)=ZZWTR
489 #endif
490        MAVAIL(i,j)=1.0
491      ENDIF
493    ENDDO
494    ENDDO
496    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
498    IF(mminlu_loc .ne. '    ')THEN
499 !-- initialize surface properties
501      CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
502                 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
503                 TRIM ( mminlu_loc ) ,                               &
504                 landuse_ISICE, landuse_LUCATS,                      &
505                 landuse_LUSEAS, landuse_ISN,                        &
506                 config_flags%fractional_seaice,                      &
507                 lu_state,                                           &
508                 allowed_to_read , usemonalb ,                       &
509                 ids, ide, jds, jde, kds, kde,                       &
510                 ims, ime, jms, jme, kms, kme,                       &
511                 its, ite, jts, jte, kts, kte                       )
512    ENDIF
514   ENDIF
516 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
517 !-- zfull/zhalf may be either zeta or eta
518 !-- what is done here depends on coordinate (check this code if adding new coordinates)
519    CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
520                 allowed_to_read,                                  &
521                 kds,kde,kms,kme,kts,kte)
523 !-- initialize physics
524 !-- ra: radiation
525 !-- bl: pbl
526 !-- cu: cumulus
527 !-- mp: microphysics
529    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
531    CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW,             &
532                 RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT,    &
533                 levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm,                           &
534                 cldfra_old=cldfra_old,                                     & ! Optional
535                 ozmixm=ozmixm,pin=pin,                                     & ! Optional
536                 m_ps_1=m_ps_1,m_ps_2=m_ps_2,m_hybi=m_hybi,aerosolc_1=aerosolc_1,aerosolc_2=aerosolc_2,     & ! Optional
537                 paerlev=paerlev,n_aerosolc=n_aerosolc,                             &
538                 sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top,       &
539                 config_flags=config_flags,restart=restart,                           &
540                 allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation,           &
541                 ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde,                   &
542                 ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme,                   &
543                 its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte                    )
545    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
546    CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,        &
547                 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
548                 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
549                 num_soil_layers,TKE_MYJ,                        &
550 #if (NMM_CORE != 1)
551                 TKE_PBL,                                     &
552 #endif
553                 EXCH_H,VEGFRA,                                  &
554                 SNOW,SNOWC, CANWAT,SMSTAV,                      &
555                 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
556                 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL,      &
557                 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB,   &
558 #if (NMM_CORE == 1)
559                 Z0,XLAND,XICE,                                  &
560 #else
561                 ZNT,XLAND,XICE,                                 &
562 #endif
563                 SFCEVP,GRDFLX,                                  &
564                 TRIM (MMINLU_LOC),                              &
565                 allowed_to_read ,                               &
566                 start_of_simulation ,                           &
567                 te_temf,cf3d_temf,                              & ! WA
568                 DZR, DZB, DZG,                                  & !Optional urban
569                 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
570                 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
571                 TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
572                 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,          & !Optional urban
573                 TS_URB2D, FRC_URB2D, UTYPE_URB2D,               & 
574                 SF_URBAN_PHYSICS,                               & !Optional urban
575                 NUM_URBAN_LAYERS,                               & !Optional multi-layer urban
576                 TRB_URB4D,TW1_URB4D,TW2_URB4D,                  & !Optional multi-layer urban
577                 TGB_URB4D,TLEV_URB3D,QLEV_URB3D,                & !Optional multi-layer urban
578                 TW1LEV_URB3D,TW2LEV_URB3D,                      & !Optional multi-layer urban
579                 TGLEV_URB3D,TFLEV_URB3D,                        & !Optional multi-layer urban
580                 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,            & !Optional multi-layer urban
581                 SFVENT_URB3D,LFVENT_URB3D,                      & !Optional multi-layer urban
582                 SFWIN1_URB3D,SFWIN2_URB3D,                      & !Optional multi-layer urban
583                 SFW1_URB3D,SFW2_URB3D,                          & !Optional multi-layer urban
584                 SFR_URB3D,SFG_URB3D,                            & !Optional multi-layer urban
585                 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,                & !Optional multi-layer urban
586                 A_E_BEP,B_U_BEP,B_V_BEP,                        & !Optional multi-layer urban
587                 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,                & !Optional multi-layer urban
588                 DL_U_BEP,SF_BEP,VL_BEP,                         & !Optional multi-layer urban
589                 ids, ide, jds, jde, kds, kde,                   &
590                 ims, ime, jms, jme, kms, kme,                   &
591                 its, ite, jts, jte, kts, kte,                   &
592                 ACHFX,ACLHF,ACGRDFLX,                           &
593                 oml_hml0, omlcall,                              & !Optional oml
594                 TML,T0ML,HML,H0ML,HUML,HVML,TMOML               ) !Optional oml
596    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
598    CALL cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN,      &
599                 RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC,           &
600                 RUCUTEN, RVCUTEN,                               &
601                 RAINCV,W0AVG,config_flags,restart,              &
602                 CLDEFI,LOWLYR,MASS_FLUX,                        &
603                 RTHFTEN, RQVFTEN,                               &
604                 APR_GR,APR_W,APR_MC,APR_ST,APR_AS,              &
605                 APR_CAPMA,APR_CAPME,APR_CAPMI,                  &
606                 cugd_tten,cugd_ttens,cugd_qvten,                &
607                 cugd_qvtens,cugd_qcten,                         &
608                 allowed_to_read, start_of_simulation,           &
609                 ids, ide, jds, jde, kds, kde,                   &
610                 ims, ime, jms, jme, kms, kme,                   &
611                 its, ite, jts, jte, kts, kte                    )
613    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
615    CALL mp_init(RAINNC,config_flags,restart,warm_rain,          &
616                 adv_moist_cond,                                 &
617                 MPDT, DT, DX, DY, LOWLYR,                       &
618                 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,               &
619                 mp_restart_state,tbpvs_state,tbpvs0_state,      &
620                 allowed_to_read, start_of_simulation,           &
621                 ids, ide, jds, jde, kds, kde,                   &
622                 ims, ime, jms, jme, kms, kme,                   &
623                 its, ite, jts, jte, kts, kte                    )
625 #if  ( EM_CORE == 1 )
626    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
628    CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,          &
629                 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,    &
630                 config_flags,restart,                           &
631                 allowed_to_read ,                               &
632                 ids, ide, jds, jde, kds, kde,                   &
633                 ims, ime, jms, jme, kms, kme,                   &
634                 its, ite, jts, jte, kts, kte                    )
636    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
638    CALL fdob_init(model_config_rec%obs_nudge_opt,               &
639                   model_config_rec%max_dom,                     &
640                   id,                                           &
641                   model_config_rec%parent_id,                   &
642                   model_config_rec%obs_idynin,                  &
643                   model_config_rec%obs_dtramp,                  &
644                   model_config_rec%fdda_end,                    &
645                   model_config_rec%restart,                     &
646                   obs_twindo_cg, obs_twindo,                    &
647                   itimestep,                                    &
648                   model_config_rec%obs_no_pbl_nudge_uv,         &
649                   model_config_rec%obs_no_pbl_nudge_t,          &
650                   model_config_rec%obs_no_pbl_nudge_q,          &
651                   model_config_rec%obs_sfcfact,                 &
652                   model_config_rec%obs_sfcfacr,                 &
653                   model_config_rec%obs_dpsmx,                   &
654                   model_config_rec%obs_nudge_wind,              &
655                   model_config_rec%obs_nudge_temp,              &
656                   model_config_rec%obs_nudge_mois,              &
657                   model_config_rec%obs_nudgezfullr1_uv,         &
658                   model_config_rec%obs_nudgezrampr1_uv,         &
659                   model_config_rec%obs_nudgezfullr2_uv,         &
660                   model_config_rec%obs_nudgezrampr2_uv,         &
661                   model_config_rec%obs_nudgezfullr4_uv,         &
662                   model_config_rec%obs_nudgezrampr4_uv,         &
663                   model_config_rec%obs_nudgezfullr1_t,          &
664                   model_config_rec%obs_nudgezrampr1_t,          &
665                   model_config_rec%obs_nudgezfullr2_t,          &
666                   model_config_rec%obs_nudgezrampr2_t,          &
667                   model_config_rec%obs_nudgezfullr4_t,          &
668                   model_config_rec%obs_nudgezrampr4_t,          &
669                   model_config_rec%obs_nudgezfullr1_q,          &
670                   model_config_rec%obs_nudgezrampr1_q,          &
671                   model_config_rec%obs_nudgezfullr2_q,          &
672                   model_config_rec%obs_nudgezrampr2_q,          &
673                   model_config_rec%obs_nudgezfullr4_q,          &
674                   model_config_rec%obs_nudgezrampr4_q,          &
675                   model_config_rec%obs_nudgezfullmin,           &
676                   model_config_rec%obs_nudgezrampmin,           &
677                   model_config_rec%obs_nudgezmax,               &
678                   xlat,                                         &
679                   xlong,                                        &
680                   model_config_rec%start_year(id),              &
681                   model_config_rec%start_month(id),             &
682                   model_config_rec%start_day(id),               &
683                   model_config_rec%start_hour(id),              &
684                   model_config_rec%start_minute(id),            &
685                   model_config_rec%start_second(id),            &
686                   p00, t00, tlp,                                &
687                   zhalf, p_top,                                 &
688                   fdob,                                         &
689                   model_config_rec%obs_ipf_init,                &
690                   ids, ide, jds, jde, kds, kde,                 &
691                   ims, ime, jms, jme, kms, kme,                 &
692                   its, ite, jts, jte, kts, kte                  )
694 #endif
696    END SUBROUTINE phy_init
698 !=====================================================================
699    SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
700                 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu,  &
701                 ISICE, LUCATS, LUSEAS, ISN,                         &
702                 fractional_seaice,                                  &
703                 lu_state,                                           &
704                 allowed_to_read , usemonalb ,                       &
705                 ids, ide, jds, jde, kds, kde,                       &
706                 ims, ime, jms, jme, kms, kme,                       &
707                 its, ite, jts, jte, kts, kte                       )
709    USE module_wrf_error
710    IMPLICIT NONE
712 !---------------------------------------------------------------------
713    INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
714                                      ims, ime, jms, jme, kms, kme,   &
715                                      its, ite, jts, jte, kts, kte
717    INTEGER , INTENT(IN)           :: iswater, julday
718    REAL    , INTENT(IN)           :: cen_lat
719    CHARACTER(LEN=*), INTENT(IN)        :: mminlu
720    LOGICAL,  INTENT(IN)           :: allowed_to_read , usemonalb
721    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: lu_index, snowc, xice, snoalb 
722    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT  ) :: albedo, albbck, mavail, emiss, &
723                                                                embck,                         &
724                                                                znt, Z0, thc, xland, xicem
725    INTEGER , INTENT(INOUT)  :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
726    REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
728    REAL :: xice_threshold
729 !---------------------------------------------------------------------
730 ! Local
731    CHARACTER*256 LUTYPE
732    CHARACTER*80 :: message
733    INTEGER  :: landuse_unit, LS, LC, LI, LUN, NSN
734    INTEGER  :: i, j, itf, jtf, is, cats, seas, curs
735    INTEGER , PARAMETER :: OPEN_OK = 0
736    INTEGER :: ierr
737    INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
738    REAL    , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
739    REAL    , DIMENSION( max_cats )     :: SCFX
740 ! save these fields in case nest moves or has to be reinitialized
741 ! and this routine is called with allowed_to_read set to false
742 ! note that by saving these, we're locking in the same landuse for
743 ! the duration of a run; possible implications for long climate runs
744    LOGICAL :: found_lu, end_of_file
745    LOGICAL, EXTERNAL :: wrf_dm_on_monitor
747 !---------------------------------------------------------------------
749    CALL wrf_debug( 100 , 'top of landuse_init' )
751    NSN=-1  ! set this to suppress uninitalized data messages from tools
753   if ( fractional_seaice == 0 ) then
754      xice_threshold = 0.5
755   else if ( fractional_seaice == 1 ) then
756      xice_threshold = 0.02
757   endif
759 ! recover LU variables from state
760    IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
761       WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
762    ENDIF
763    curs = 1
764    DO cats = 1, max_cats
765      SCFX(cats) =           lu_state(curs)         ; curs = curs + 1
766      DO seas = 1, max_seas
767        ALBD(cats,seas) =    lu_state(curs)         ; curs = curs + 1
768        SLMO(cats,seas) =    lu_state(curs)         ; curs = curs + 1
769        SFEM(cats,seas) =    lu_state(curs)         ; curs = curs + 1
770        SFZ0(cats,seas) =    lu_state(curs)         ; curs = curs + 1
771        SFHC(cats,seas) =    lu_state(curs)         ; curs = curs + 1
772        THERIN(cats,seas) =  lu_state(curs)         ; curs = curs + 1
773      ENDDO
774    ENDDO
776 ! Determine season (summer=1, winter=2)
777    ISN=1
778    IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
779    IF(CEN_LAT.LT.0.0)ISN=3-ISN
781    FOUND_LU = .TRUE.
782    IF ( allowed_to_read ) THEN
783       landuse_unit = 29
784       IF ( wrf_dm_on_monitor() ) THEN
785         OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
786         IF ( ierr .NE. OPEN_OK ) THEN
787           WRITE(message,FMT='(A)') &
788           'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
789           CALL wrf_error_fatal ( message )
790         END IF
791       ENDIF
793 ! Read info from file LANDUSE.TBL
794 !     IF(MMINLU.EQ.'OLD ')THEN
795 !       ISWATER=7
796 !       ISICE=11
797 !     ELSE IF(MMINLU.EQ.'USGS')THEN
798 !       ISWATER=16
799 !       ISICE=24
800 !     ELSE IF(MMINLU.EQ.'SiB ')THEN
801 !       ISWATER=15
802 !       ISICE=16
803 !     ELSE IF(MMINLU.EQ.'LW12')THEN
804 !       ISWATER=15
805 !       ISICE=3
806 !     ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
807 !       ISICE = 15
808 !     ELSE
809 !        call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
810 !     ENDIF
811       call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
812       FOUND_LU = .FALSE.
813       end_of_file = .FALSE.
814 !!! BEGINNING OF 1999 LOOP
815  1999 CONTINUE
816       IF ( wrf_dm_on_monitor() ) THEN
817         READ (landuse_unit,*,END=2002)LUTYPE
818         GOTO 2003
819  2002   CONTINUE
820         CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
821         end_of_file = .TRUE.
822  2003   CONTINUE
823         IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
824         FOUND_LU = LUTYPE.EQ.MMINLU
825       ENDIF
826       CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
827       IF ( .NOT. end_of_file ) THEN
828         CALL wrf_dm_bcast_string(lutype, 256)
829         CALL wrf_dm_bcast_bytes (lucats,  IWORDSIZE )
830         CALL wrf_dm_bcast_bytes (luseas,  IWORDSIZE )
831         CALL wrf_dm_bcast_bytes (found_lu,  LWORDSIZE )
832         IF(FOUND_LU)THEN
833           LUN=LUCATS
834           NSN=LUSEAS
835             PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND',        &
836                    LUCATS,' CATEGORIES',LUSEAS,' SEASONS',     &
837                    ' WATER CATEGORY = ',ISWATER,               &
838                    ' SNOW CATEGORY = ',ISICE
839         ENDIF
840         DO ls=1,luseas
841           if ( wrf_dm_on_monitor() ) then
842             READ (landuse_unit,*)
843           endif
844           DO LC=1,LUCATS
845             IF(found_lu)THEN
846               IF ( wrf_dm_on_monitor() ) THEN
847                 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS),        &
848                            SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
849               ENDIF
850               CALL wrf_dm_bcast_bytes (LI,  IWORDSIZE )
851               IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
852             ELSE
853               IF ( wrf_dm_on_monitor() ) THEN
854                 READ (landuse_unit,*)
855               ENDIF
856             ENDIF
857           ENDDO
858         ENDDO
859         IF(NSN.EQ.1.AND.FOUND_LU) THEN
860            ISN = 1
861         END IF
862         CALL wrf_dm_bcast_bytes (albd,   max_cats * max_seas * RWORDSIZE )
863         CALL wrf_dm_bcast_bytes (slmo,   max_cats * max_seas * RWORDSIZE )
864         CALL wrf_dm_bcast_bytes (sfem,   max_cats * max_seas * RWORDSIZE )
865         CALL wrf_dm_bcast_bytes (sfz0,   max_cats * max_seas * RWORDSIZE )
866         CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
867         CALL wrf_dm_bcast_bytes (sfhc,   max_cats * max_seas * RWORDSIZE )
868         CALL wrf_dm_bcast_bytes (scfx,   max_cats *            RWORDSIZE )
869       ENDIF
871       IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
872 !!! END OF 1999 LOOP
874       IF(.NOT. found_lu .OR. end_of_file )THEN
875         CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
876       ENDIF
877     ENDIF  ! allowed_to_read
879     IF(FOUND_LU)THEN
880 ! Set arrays according to lu_index
881       itf = min0(ite, ide-1)
882       jtf = min0(jte, jde-1)
883       IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
884       DO j = jts, jtf
885         DO i = its, itf
886           IS=nint(lu_index(i,j))
887           ! only do this check on read-in data
888           IF(IS.LT.0.OR.IS.GT.LUN.AND.allowed_to_read)THEN
889             WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
890             CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
891           ENDIF
892 !   SET NO-DATA POINTS (IS=0) TO WATER
893           IF(IS.EQ.0)THEN
894             IS=ISWATER
895           ENDIF
896           IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
897           ALBEDO(I,J)=ALBBCK(I,J)
898           IF(SNOWC(I,J) .GT. 0.5) THEN 
899              IF (usemonalb) THEN
900                  ALBEDO(I,J)=SNOALB(I,J)
901              ELSE
902                  ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
903              ENDIF
904           ENDIF
905           THC(I,J)=THERIN(IS,ISN)/100.
906           Z0(I,J)=SFZ0(IS,ISN)/100.
907           ZNT(I,J)=Z0(I,J)
908           EMBCK(I,J)=SFEM(IS,ISN)
909           EMISS(I,J)=EMBCK(I,J)
910           MAVAIL(I,J)=SLMO(IS,ISN)
911           IF(IS.NE.ISWATER)THEN
912             XLAND(I,J)=1.0
913           ELSE
914             XLAND(I,J)=2.0
915           ENDIF
916 !    SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
917           XICEM(I,J)=XICE(I,J)
918           IF(XICE(I,J).GE.xice_threshold)THEN
919             XLAND(I,J)=1.0
920             ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
921             EMBCK(I,J)=SFEM(ISICE,ISN)
922             IF (FRACTIONAL_SEAICE == 1) THEN
923                ! The 0.08 value is the albedo over open water.
924                ! The 0.98 value is the emissivity over open water.
925                ALBEDO(I,J) = ( XICE(I,J) * ALBBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.08 )
926                EMISS(I,J)  = ( XICE(I,J) * EMBCK(I,J)  ) + ( (1.0-XICE(I,J)) * 0.98 )
927             ELSE
928                ALBEDO(I,J)=ALBBCK(I,J)
929                EMISS(I,J)=EMBCK(I,J)
930             ENDIF
931             THC(I,J)=THERIN(ISICE,ISN)/100.
932             Z0(I,J)=SFZ0(ISICE,ISN)/100.
933             ZNT(I,J)=Z0(I,J)
934             MAVAIL(I,J)=SLMO(ISICE,ISN)
935           ENDIF
936         ENDDO
937       ENDDO
938     ENDIF
939     if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
940       CLOSE (landuse_unit)
941     endif
942     CALL wrf_debug( 100 , 'returning from of landuse_init' )
944 ! restore LU variables from state
945     curs = 1
946     DO cats = 1, max_cats
947       lu_state(curs) = SCFX(cats)                 ; curs = curs + 1
948       DO seas = 1, max_seas
949         lu_state(curs) = ALBD(cats,seas)          ; curs = curs + 1
950         lu_state(curs) = SLMO(cats,seas)          ; curs = curs + 1
951         lu_state(curs) = SFEM(cats,seas)          ; curs = curs + 1
952         lu_state(curs) = SFZ0(cats,seas)          ; curs = curs + 1
953         lu_state(curs) = SFHC(cats,seas)          ; curs = curs + 1
954         lu_state(curs) = THERIN(cats,seas)        ; curs = curs + 1
955       ENDDO
956     ENDDO
959    END SUBROUTINE landuse_init
961 !=====================================================================
962    SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW,       &
963                       RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT,    &
964                       levsiz,XLAT,n_ozmixm,                           &
965                       cldfra_old,                                     & ! Optional
966                       ozmixm,pin,                                     & ! Optional
967                       m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,     & ! Optional
968                       paerlev,n_aerosolc,                             &
969                       sfull,shalf,pptop,swrad_scat,p_top,            &
970                       config_flags,restart,                          &
971                       allowed_to_read, start_of_simulation,          &
972                       ids, ide, jds, jde, kds, kde,                  &
973                       ims, ime, jms, jme, kms, kme,                  &
974                       its, ite, jts, jte, kts, kte                   )
975 !---------------------------------------------------------------------
976    USE module_ra_rrtm      , ONLY : rrtminit
977    USE module_ra_rrtmg_lw  , ONLY : rrtmg_lwinit
978    USE module_ra_rrtmg_sw  , ONLY : rrtmg_swinit
979    USE module_ra_cam       , ONLY : camradinit
980    USE module_ra_sw        , ONLY : swinit
981    USE module_ra_gsfcsw    , ONLY : gsfc_swinit
982    USE module_ra_gfdleta   , ONLY : gfdletainit
983 #if(NMM_CORE==1)
984    USE module_ra_hwrf      , ONLY : hwrfrainit
985 #endif
986    USE module_ra_hs        , ONLY : hsinit
987    USE module_domain
988 !---------------------------------------------------------------------
989    IMPLICIT NONE
990 !---------------------------------------------------------------------
991    INTEGER,  INTENT(IN)           :: id
992    TYPE (grid_config_rec_type)    :: config_flags
993    LOGICAL , INTENT(IN)           :: restart
994    LOGICAL,  INTENT(IN)           :: allowed_to_read
996    INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
997                                      ims, ime, jms, jme, kms, kme,   &
998                                      its, ite, jts, jte, kts, kte
1000    INTEGER , INTENT(IN)           :: JULDAY,JULYR
1001    REAL ,    INTENT(IN)           :: DT, RADT, cen_lat, GMT, pptop,  &
1002                                      swrad_scat, p_top
1003    LOGICAL,  INTENT(IN)           :: start_of_simulation
1005    INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
1006    INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
1008    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::  XLAT
1010    REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL,      &
1011           INTENT(INOUT) ::                                  OZMIXM
1013    REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
1014    REAL,  DIMENSION(paerlev), OPTIONAL, INTENT(INOUT)  ::         m_hybi
1015    REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL,     &
1016           INTENT(INOUT) ::                      aerosolc_1, aerosolc_2
1018    REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::          PIN
1020    INTEGER , INTENT(INOUT)        :: STEPRA
1021    INTEGER :: isn
1023    REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
1024    REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::           &
1025                                                            RTHRATEN, &
1026                                                          RTHRATENLW, &
1027                                                          RTHRATENSW, &
1028                                                              CLDFRA
1030    REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
1031                                                          CLDFRA_OLD
1033    REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
1034    LOGICAL :: etalw = .false.
1035    LOGICAL :: hwrflw= .false.
1036    LOGICAL :: camlw = .false.
1037    LOGICAL :: etamp = .false.
1038    LOGICAL :: acswalloc = .false.
1039    LOGICAL :: aclwalloc = .false.
1040    integer :: month,iday
1041    INTEGER :: i, j, k, itf, jtf, ktf
1042 !---------------------------------------------------------------------
1044    jtf=min0(jte,jde-1)
1045    ktf=min0(kte,kde-1)
1046    itf=min0(ite,ide-1)
1048 !---------------------------------------------------------------------
1050 !-- calculate radiation time step
1052     STEPRA = nint(RADT*60./DT)
1053     STEPRA = max(STEPRA,1)
1055 !-- initialization
1057    IF(start_of_simulation)THEN
1058      DO j=jts,jtf
1059      DO k=kts,ktf
1060      DO i=its,itf
1061         RTHRATEN(i,k,j)=0.
1062         RTHRATENLW(i,k,j)=0.
1063         RTHRATENSW(i,k,j)=0.
1064         CLDFRA(i,k,j)=0.
1065      ENDDO
1066      ENDDO
1067      ENDDO
1069      if( present(cldfra_old) ) then
1070         DO j=jts,jtf
1071         DO k=kts,ktf
1072         DO i=its,itf
1073            cldfra_old(i,k,j) = 0.
1074         ENDDO
1075         ENDDO
1076         ENDDO
1077      end if
1078    ENDIF
1080 !-- find out which microphysics option is used first
1082    mp_select: SELECT CASE(config_flags%mp_physics)
1084         CASE (ETAMPNEW)
1085              etamp = .true.
1087    END SELECT mp_select
1089 !-- chose long wave radiation scheme
1091    lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
1093         CASE (RRTMSCHEME)
1094              CALL rrtminit(                                 &
1095                            p_top, allowed_to_read ,         &
1096                            ids, ide, jds, jde, kds, kde,    &
1097                            ims, ime, jms, jme, kms, kme,    &
1098                            its, ite, jts, jte, kts, kte     )
1100         CASE (CAMLWSCHEME)
1101 #ifdef MAC_KLUDGE
1102              CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1103 #endif
1104              IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
1105                   PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND.  &
1106                   PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1)    &
1107                   .AND. PRESENT(AEROSOLC_2)) THEN
1108              CALL camradinit(                                  &
1109                          R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1110                          ozmixm,pin,levsiz,XLAT,n_ozmixm,      &
1111                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1112                          paerlev, n_aerosolc,              &
1113                          ids, ide, jds, jde, kds, kde,     &
1114                          ims, ime, jms, jme, kms, kme,     &
1115                          its, ite, jts, jte, kts, kte      )
1116              ELSE
1117                 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
1118              ENDIF
1120              camlw = .true.
1121              aclwalloc = .true.
1123         CASE (RRTMG_LWSCHEME)
1124              CALL rrtmg_lwinit(                             &
1125                            allowed_to_read ,                &
1126                            ids, ide, jds, jde, kds, kde,    &
1127                            ims, ime, jms, jme, kms, kme,    &
1128                            its, ite, jts, jte, kts, kte     )
1130              aclwalloc = .true.
1132         CASE (GFDLLWSCHEME)
1133              CALL nl_get_start_month(id,month)
1134              CALL nl_get_start_day(id,iday)
1135              CALL gfdletainit(emiss,sfull,shalf,pptop,      &
1136                               julyr,month,iday,gmt,         &
1137                               config_flags,allowed_to_read, &
1138                               ids, ide, jds, jde, kds, kde, &
1139                               ims, ime, jms, jme, kms, kme, &
1140                               its, ite, jts, jte, kts, kte  )
1141              etalw = .true.
1142 #if(NMM_CORE==1)
1143         CASE (HWRFLWSCHEME)
1144              CALL nl_get_start_month(id,month)
1145              CALL nl_get_start_day(id,iday)
1146 ! test this with standard jul-day calls
1147 !     CALL nl_get_start_year(id,start_year)
1148 !     CALL nl_get_start_month(id,start_month)
1149 !     CALL nl_get_start_day(id,start_day)
1150 !     CALL nl_get_start_hour(id,start_hour)
1151 !     CALL nl_get_start_minute(id,start_minute)
1152 !     CALL nl_get_start_second(id,start_second)
1153 !     CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
1154 !     CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
1155 !     julyr_start=start_year
1156 !     julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
1157 !     gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
1158               CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1159 !             CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
1160                            allowed_to_read ,                         &
1161                            kds, kde, kms, kme, kts, kte     )
1162              hwrflw = .true.
1163 #endif
1164         CASE (HELDSUAREZ)
1165              CALL hsinit(RTHRATEN,restart,             &
1166                          ids, ide, jds, jde, kds, kde, &
1167                          ims, ime, jms, jme, kms, kme, &
1168                          its, ite, jts, jte, kts, kte )
1169         CASE DEFAULT
1171    END SELECT lwrad_select
1172 !-- initialize short wave radiation scheme
1174    swrad_select: SELECT CASE(config_flags%ra_sw_physics)
1176         CASE (SWRADSCHEME)
1177              CALL swinit(                                  &
1178                          swrad_scat,                       &
1179                          allowed_to_read ,                 &
1180                          ids, ide, jds, jde, kds, kde,     &
1181                          ims, ime, jms, jme, kms, kme,     &
1182                          its, ite, jts, jte, kts, kte      )
1184         CASE (CAMSWSCHEME)
1185 #ifdef MAC_KLUDGE
1186              CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1187 #endif
1188              IF(.not.camlw)THEN
1189              CALL camradinit(                              &
1190                          R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop,               &
1191                          ozmixm,pin,levsiz,XLAT,n_ozmixm,     &
1192                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1193                          paerlev, n_aerosolc,              &
1194                          ids, ide, jds, jde, kds, kde,     &
1195                          ims, ime, jms, jme, kms, kme,     &
1196                          its, ite, jts, jte, kts, kte      )
1197              ENDIF
1198              acswalloc = .true.
1200         CASE (GSFCSWSCHEME)
1201              CALL gsfc_swinit(cen_lat, allowed_to_read )
1203         CASE (RRTMG_SWSCHEME)
1204              CALL rrtmg_swinit(                             &
1205                            allowed_to_read ,                &
1206                            ids, ide, jds, jde, kds, kde,    &
1207                            ims, ime, jms, jme, kms, kme,    &
1208                            its, ite, jts, jte, kts, kte     )
1210              acswalloc = .true.
1212         CASE (GFDLSWSCHEME)
1213              IF(.not.etalw)THEN
1214              CALL nl_get_start_month(id,month)
1215              CALL nl_get_start_day(id,iday)
1216              CALL gfdletainit(emiss,sfull,shalf,pptop,      &
1217                               julyr,month,iday,gmt,         &
1218                               config_flags,allowed_to_read, &
1219                               ids, ide, jds, jde, kds, kde, &
1220                               ims, ime, jms, jme, kms, kme, &
1221                               its, ite, jts, jte, kts, kte  )
1222              ENDIF
1223 #if(NMM_CORE==1)
1224         CASE (HWRFSWSCHEME)
1225              IF(.not.hwrflw)THEN
1226              CALL nl_get_start_month(id,month)
1227              CALL nl_get_start_day(id,iday)
1228              CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1229                            allowed_to_read,                          &
1230                            kds, kde, kms, kme, kts, kte     )
1231              ENDIF
1232 #endif
1233         CASE DEFAULT
1235    END SELECT swrad_select
1237 #if ( EM_CORE == 1 ) 
1238    ! test for conditionally allocated arrays when using bucket_J
1240    IF(config_flags%bucket_J .gt. 0.0)THEN
1241      IF(.not. (acswalloc .and. aclwalloc))THEN
1242            CALL wrf_error_fatal ( 'Need CAM or RRTMG radiation for bucket_J option')
1243      ENDIF
1244    ENDIF
1245 #endif
1247    END SUBROUTINE ra_init
1249    SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,  &
1250                 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
1251                 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
1252                 num_soil_layers,TKE_MYJ,                        &
1253 #if (NMM_CORE != 1)
1254                 TKE_PBL,                                     &
1255 #endif
1256                 EXCH_H,VEGFRA,                                  &
1257                 SNOW,SNOWC, CANWAT,SMSTAV,                      &
1258                 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
1259                 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail,      &
1260                 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB,   &
1261 #if  ( NMM_CORE == 1 )
1262                 Z0,XLAND,XICE,                                  &
1263 #else
1264                 ZNT,XLAND,XICE,                                 &
1265 #endif
1266                 SFCEVP,GRDFLX,                                  &
1267                 MMINLU,                                         &
1268                 allowed_to_read,                                &
1269                 start_of_simulation,                            &
1270                 te_temf,cf3d_temf,                              & ! WA
1271 !                num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1272                 DZR, DZB, DZG,                                  & !Optional urban
1273                 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
1274                 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
1275                 TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
1276                 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,             & !Optional urban
1277                 TS_URB2D, FRC_URB2D, UTYPE_URB2D,               &
1278                 SF_URBAN_PHYSICS,                               & !Optional urban
1279                 NUM_URBAN_LAYERS,                               & !Optional multi-layer urban
1280                 TRB_URB4D,TW1_URB4D,TW2_URB4D,                  & !Optional multi-layer urban
1281                 TGB_URB4D,TLEV_URB3D,QLEV_URB3D,                & !Optional multi-layer urban
1282                 TW1LEV_URB3D,TW2LEV_URB3D,                      & !Optional multi-layer urban
1283                 TGLEV_URB3D,TFLEV_URB3D,                        & !Optional multi-layer urban
1284                 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,            & !Optional multi-layer urban
1285                 SFVENT_URB3D,LFVENT_URB3D,                      & !Optional multi-layer urban
1286                 SFWIN1_URB3D,SFWIN2_URB3D,                      & !Optional multi-layer urban
1287                 SFW1_URB3D,SFW2_URB3D,                          & !Optional multi-layer urban
1288                 SFR_URB3D,SFG_URB3D,                            & !Optional multi-layer urban
1289                 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,                & !Optional multi-layer urban
1290                 A_E_BEP,B_U_BEP,B_V_BEP,                        & !Optional multi-layer urban
1291                 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,                & !Optional multi-layer urban
1292                 DL_U_BEP,SF_BEP,VL_BEP,                         & !Optional multi-layer urban
1293                 ids, ide, jds, jde, kds, kde,                   &
1294                 ims, ime, jms, jme, kms, kme,                   &
1295                 its, ite, jts, jte, kts, kte,                   &
1296                 ACHFX,ACLHF,ACGRDFLX,                           &
1297                 oml_hml0, omlcall,                              & !Optional oml
1298                 TML,T0ML,HML,H0ML,HUML,HVML,TMOML               ) !Optional oml
1299 !--------------------------------------------------------------------
1300    USE module_sf_sfclay
1301    USE module_sf_slab
1302    USE module_sf_pxsfclay
1303    USE module_bl_ysu
1304    USE module_bl_mrf
1305    USE module_bl_gfs
1306    USE module_bl_acm
1307    USE module_sf_myjsfc
1308    USE module_sf_qnsesfc
1309    USE module_sf_noahdrv
1310    USE module_sf_urban
1311    USE module_sf_bep                                  !BEP
1312    USE module_sf_bep_bem
1313    USE module_sf_ruclsm
1314    USE module_sf_pxlsm
1315    USE module_sf_oml
1316    USE module_bl_myjpbl
1317    USE module_bl_myjurb
1318    USE module_bl_boulac
1319    USE module_bl_qnsepbl
1320 #if ( EM_CORE == 1 )
1321    USE module_bl_mynn
1322    USE module_bl_temf
1323    USE module_sf_mynn
1324 #endif
1326 #if (NMM_CORE == 1)
1327    USE module_sf_gfdl
1328 #endif
1329 !--------------------------------------------------------------------
1330    IMPLICIT NONE
1331 !--------------------------------------------------------------------
1332    TYPE (grid_config_rec_type) ::     config_flags
1333    LOGICAL , INTENT(IN)        :: restart
1334    LOGICAL, INTENT(IN)         ::   FNDSOILW, FNDSNOWH
1335    LOGICAL, INTENT(IN)         ::   RDMAXALB
1337    INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
1338                                       ims, ime, jms, jme, kms, kme, &
1339                                       its, ite, jts, jte, kts, kte
1340    INTEGER , INTENT(IN)        ::     num_soil_layers
1341    INTEGER , INTENT(IN)        ::     SF_URBAN_PHYSICS 
1343    REAL ,    INTENT(IN)        ::     DT, BLDT
1344    INTEGER , INTENT(INOUT)     ::     STEPBL
1346    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),    &
1347              INTENT(OUT) :: SMFR3D
1349    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1350                    INTENT(INOUT) :: SMOIS,SH2O,TSLB
1352    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
1353             INTENT(INOUT)    ::                           SNOW, &
1354                                                          SNOWH, &
1355                                                          SNOWC, &
1356                                                         SNOALB, &
1357                                                         CANWAT, &
1358                                                         MAVAIL, &
1359                                                         SMSTAV, &
1360                                                         SMSTOT, &
1361                                                      SFCRUNOFF, &
1362                                                       UDRUNOFF, &
1363                                                         ACSNOW, &
1364                                                         VEGFRA, &
1365                                                         ACSNOM, &
1366                                                         SFCEVP, &
1367                                                         GRDFLX, &
1368                                                            UST, &
1369 #if ( NMM_CORE == 1 )
1370                                                             Z0, &
1371 #else
1372                                                            ZNT, &
1373 #endif
1374                                                          XLAND, &
1375                                                          XICE
1377    INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
1378             INTENT(INOUT)    ::                         IVGTYP, &
1379                                                         ISLTYP, &
1380                                                         LOWLYR
1383    REAL,     DIMENSION(1:num_soil_layers), INTENT(INOUT)  ::  ZS,DZS
1385    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
1386                                                            RUBLTEN, &
1387                                                            RVBLTEN, &
1388                                                           EXCH_H,   &
1389                                                           RTHBLTEN, &
1390                                                           RQVBLTEN, &
1391                                                           RQCBLTEN, &
1392                                                           RQIBLTEN, &
1393                                                           TKE_MYJ
1394 #if (NMM_CORE != 1)
1395    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
1396                                                           TKE_PBL
1397 #endif
1398    REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::     TSK
1399    REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::  TMN
1400    CHARACTER(LEN=*), INTENT(IN)   :: MMINLU
1401    LOGICAL,  INTENT(IN)           :: allowed_to_read
1402    INTEGER,  INTENT(IN)           :: ISURBAN
1403    INTEGER :: isn, isfc
1404    INTEGER :: k
1406    REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
1407             INTENT(OUT) :: te_temf, cf3d_temf !WA 
1409 !URBAN
1410 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR  !Optional urban
1411 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB  !Optional urban
1412 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG  !Optional urban
1413     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR  !Optional urban
1414     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB  !Optional urban
1415     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG  !Optional urban
1416     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1417     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1418     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1419     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1420     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1421     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1422     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1423     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1424     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1425     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1426     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1427     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1428     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1429     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1430     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1431     INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1432 !    REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1433 !    REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1434 !    REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1435     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1436     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1437     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1439     INTEGER , INTENT(IN)        ::     num_urban_layers
1440     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
1441     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
1442     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
1443     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
1444     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
1445     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
1446     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
1447     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
1448     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
1449     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
1450     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D  !multi-layer UCM
1451     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D  !multi-layer UCM
1452     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D  !multi-layer UCM
1453     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
1454     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
1455     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
1456     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
1457     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
1458     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
1459     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
1460     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
1461    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP 
1462    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP 
1463    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP 
1464    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP 
1465    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP 
1466    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP 
1467    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP 
1468    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP 
1469    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP 
1470    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP 
1471    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
1472    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP 
1473    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
1474    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
1476    REAL,  DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1477                                         ACHFX,ACLHF,ACGRDFLX
1478 ! Optional OML variables
1479    REAL,  DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1480                                         TML,T0ML,HML,H0ML,HUML,HVML,TMOML
1481    INTEGER,  OPTIONAL,  INTENT(IN) :: omlcall
1482    REAL,  OPTIONAL,  INTENT(IN) :: oml_hml0
1483    LOGICAL,  INTENT(IN) :: start_of_simulation
1484    INTEGER :: i,j
1487 #if ( EM_CORE == 1 )
1488 !local mynn 
1489    INTEGER :: mynn_closure_level
1490 #endif
1492 !-- calculate pbl time step
1494    STEPBL = nint(BLDT*60./DT)
1495    STEPBL = max(STEPBL,1)
1496 !-- initialization
1498    IF(PRESENT(ACHFX))THEN
1499    IF(.not.restart)THEN
1500      DO j=jts,jte
1501      DO i=its,ite
1502         ACHFX(i,j)=0.
1503         ACLHF(i,j)=0.
1504         ACGRDFLX(i,j)=0.
1505         SFCEVP(i,j)=0.
1506      ENDDO
1507      ENDDO
1508    ENDIF
1509    ENDIF
1511 !-- initialize surface layer scheme
1513    sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1515       CASE (SFCLAYSCHEME)
1516            CALL sfclayinit( allowed_to_read )
1517            isfc = 1
1518       CASE (PXSFCSCHEME)
1519            CALL pxsfclayinit( allowed_to_read )
1520            isfc = 7
1521       CASE (MYJSFCSCHEME)
1522            CALL myjsfcinit(LOWLYR,UST,                         &
1523 #if ( NMM_CORE == 1 )
1524                                       Z0,                      &
1525 #else
1526                                       ZNT,                     &
1527 #endif
1528                                           XLAND,XICE,          &
1529                          IVGTYP,restart,                       &
1530                          allowed_to_read ,                     &
1531                          ids, ide, jds, jde, kds, kde,         &
1532                          ims, ime, jms, jme, kms, kme,         &
1533                          its, ite, jts, jte, kts, kte          )
1534            isfc = 2
1536       CASE (QNSESFCSCHEME)
1537            CALL qnsesfcinit(LOWLYR,UST,                         &
1538 #if ( NMM_CORE == 1 )
1539                                       Z0,                      &
1540 #else
1541                                       ZNT,                     &
1542 #endif
1543                                           XLAND,XICE,          &
1544                          IVGTYP,restart,                       &
1545                          allowed_to_read ,                     &
1546                          ids, ide, jds, jde, kds, kde,         &
1547                          ims, ime, jms, jme, kms, kme,         &
1548                          its, ite, jts, jte, kts, kte          )
1549            isfc = 4
1551       CASE (GFSSFCSCHEME)
1552            CALL myjsfcinit(LOWLYR,UST,                         &
1553 #if ( NMM_CORE == 1 )
1554                                       Z0,                      &
1555 #else
1556                                       ZNT,                     &
1557 #endif
1558                                           XLAND,XICE,          &
1559                          IVGTYP,restart,                       &
1560                          allowed_to_read ,                     &
1561                          ids, ide, jds, jde, kds, kde,         &
1562                          ims, ime, jms, jme, kms, kme,         &
1563                          its, ite, jts, jte, kts, kte          )
1564            isfc = 2
1565 #if (NMM_CORE==1)
1566       CASE (GFDLSFCSCHEME)
1567            CALL myjsfcinit(LOWLYR,UST,                         &
1568                                       Z0,                      &
1569                                           XLAND,XICE,          &
1570                          IVGTYP,restart,                       &
1571                          allowed_to_read ,                     &
1572                          ids, ide, jds, jde, kds, kde,         &
1573                          ims, ime, jms, jme, kms, kme,         &
1574                          its, ite, jts, jte, kts, kte          )
1575            isfc = 2
1576 #endif
1578 #if ( EM_CORE == 1 )
1579 !mynn 
1581         CASE (MYNNSFCSCHEME)
1583            CALL mynn_sf_init_driver(allowed_to_read)
1584            isfc=5
1585 !          isfc=3
1587 #endif
1589       CASE DEFAULT
1591    END SELECT sfclay_select
1594 !-- initialize surface scheme
1596    sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1598       CASE (SLABSCHEME)
1600            CALL slabinit(TSK,TMN,                              &
1601                          TSLB,ZS,DZS,num_soil_layers,          &
1602                          allowed_to_read ,start_of_simulation ,&
1603                          ids, ide, jds, jde, kds, kde,         &
1604                          ims, ime, jms, jme, kms, kme,         &
1605                          its, ite, jts, jte, kts, kte          )
1607 #if (NMM_CORE == 1)
1608      CASE (GFDLSLAB)
1609            CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1610                      SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,     &
1611                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP,   &
1612                      TMN,                                          &
1613                      num_soil_layers,                              &
1614                      allowed_to_read ,                             &
1615                      ids,ide, jds,jde, kds,kde,                    &
1616                      ims,ime, jms,jme, kms,kme,                    &
1617                      its,ite, jts,jte, kts,kte                     )
1619 #endif
1620       CASE (LSMSCHEME)
1621           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
1622                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
1623                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1624                      MMINLU,                                   &
1625                      SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB,     &
1626                      num_soil_layers, restart,                 &
1627                      allowed_to_read ,                         &
1628                      ids,ide, jds,jde, kds,kde,                &
1629                      ims,ime, jms,jme, kms,kme,                &
1630                      its,ite, jts,jte, kts,kte                 )
1632 !URBAN
1633           IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1635              IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1636                 
1637                 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers,                   & !urban
1638                                 sf_urban_physics)
1639 !                                num_roof_layers,num_wall_layers,road_soil_layers)   !urban
1640                                
1641                 
1642                 CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP,                     & !urban
1643                               ims,ime,jms,jme,kms,kme,num_soil_layers,               & !urban
1644 !                              num_roof_layers,num_wall_layers,num_road_layers, & !urban
1645                               restart,sf_urban_physics,                        & !urban
1646                               XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,     & !urban
1647                               TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,    & !urban
1648                               TRL_URB3D,TBL_URB3D,TGL_URB3D,                   & !urban
1649                               SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D,    & !urban
1650                               num_urban_layers,                                & !urban
1651                               TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D,         & !urban
1652                               TLEV_URB3D,QLEV_URB3D,                           & !urban
1653                               TW1LEV_URB3D,TW2LEV_URB3D,                       & !urban
1654                               TGLEV_URB3D,TFLEV_URB3D,                         & !urban
1655                               SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,             & !urban
1656                               SFVENT_URB3D,LFVENT_URB3D,                       & !urban
1657                               SFWIN1_URB3D,SFWIN2_URB3D,                       & !urban
1658                               SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D,       & !urban
1659                               A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,                 & !multi-layer urban
1660                               A_E_BEP,B_U_BEP,B_V_BEP,                         & !multi-layer urban
1661                               B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,                 & !multi-layer urban
1662                               DL_U_BEP,SF_BEP,VL_BEP,                          & !multi-layer urban
1663                               FRC_URB2D, UTYPE_URB2D)                            !urban
1664              ELSE
1665                 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1666              ENDIF
1667           ENDIF
1669       CASE (RUCLSMSCHEME)
1670 !          if(isfc .ne. 2)CALL wrf_error_fatal &
1671 !           ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1672            CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,XICE,  &
1673                      mavail,num_soil_layers, config_flags%iswater,      &
1674                      config_flags%isice, restart,                  &
1675                      allowed_to_read ,                             &
1676                      ids,ide, jds,jde, kds,kde,                    &
1677                      ims,ime, jms,jme, kms,kme,                    &
1678                      its,ite, jts,jte, kts,kte                     )
1680       CASE (PXLSMSCHEME)
1681           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
1682                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
1683                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1684                      MMINLU,                                   &
1685                      SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB,     &
1686                      num_soil_layers, restart,                 &
1687                      allowed_to_read ,                         &
1688                      ids,ide, jds,jde, kds,kde,                &
1689                      ims,ime, jms,jme, kms,kme,                &
1690                      its,ite, jts,jte, kts,kte                 )
1692       CASE DEFAULT
1694    END SELECT sfc_select
1696    IF(PRESENT(OMLCALL))THEN
1697      IF (omlcall .EQ. 1) THEN
1698         CALL omlinit(oml_hml0, tsk,                           &
1699                      tml,t0ml,hml,h0ml,huml,hvml,tmoml,       &
1700                      allowed_to_read, start_of_simulation,    &
1701                      ids,ide, jds,jde, kds,kde,               &
1702                      ims,ime, jms,jme, kms,kme,               &
1703                      its,ite, jts,jte, kts,kte                )
1704      ENDIF
1705    ENDIF
1707 !-- initialize pbl scheme
1709    pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1711       CASE (YSUSCHEME)
1712            if(isfc .ne. 1)CALL wrf_error_fatal &
1713             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1714            CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1715                         RQCBLTEN,RQIBLTEN,P_QI,               &
1716                         PARAM_FIRST_SCALAR,                   &
1717                         restart,                              &
1718                         allowed_to_read ,                     &
1719                         ids, ide, jds, jde, kds, kde,         &
1720                         ims, ime, jms, jme, kms, kme,         &
1721                         its, ite, jts, jte, kts, kte          )
1722       CASE (MRFSCHEME)
1723            if(isfc .ne. 1)CALL wrf_error_fatal &
1724             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1725            CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1726                         RQCBLTEN,RQIBLTEN,P_QI,               &
1727                         PARAM_FIRST_SCALAR,                   &
1728                         restart,                              &
1729                         allowed_to_read ,                     &
1730                         ids, ide, jds, jde, kds, kde,         &
1731                         ims, ime, jms, jme, kms, kme,         &
1732                         its, ite, jts, jte, kts, kte          )
1733       CASE (ACMPBLSCHEME)
1734            if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
1735             ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
1736            CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1737                         RQCBLTEN,RQIBLTEN,P_QI,               &
1738                         PARAM_FIRST_SCALAR,                   &
1739                         restart,                              &
1740                         allowed_to_read ,                     &
1741                         ids, ide, jds, jde, kds, kde,         &
1742                         ims, ime, jms, jme, kms, kme,         &
1743                         its, ite, jts, jte, kts, kte          )
1744       CASE (GFSSCHEME)
1745            if(isfc .ne. 2)CALL wrf_error_fatal &
1746             ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1747            CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1748                         RQCBLTEN,RQIBLTEN,P_QI,               &
1749                         PARAM_FIRST_SCALAR,                   &
1750                         restart,                              &
1751                         allowed_to_read ,                     &
1752                         ids, ide, jds, jde, kds, kde,         &
1753                         ims, ime, jms, jme, kms, kme,         &
1754                         its, ite, jts, jte, kts, kte          )
1755       CASE (MYJPBLSCHEME)
1756            if(isfc .ne. 2)CALL wrf_error_fatal &
1757             ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1758           IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1759            CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1760                         TKE_MYJ,EXCH_H,restart,               &
1761                         allowed_to_read ,                     &
1762                         ids, ide, jds, jde, kds, kde,         &
1763                         ims, ime, jms, jme, kms, kme,         &
1764                         its, ite, jts, jte, kts, kte          )
1765           ELSE
1767            CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1768                         TKE_MYJ,EXCH_H,restart,               &
1769                         allowed_to_read ,                     &
1770                         ids, ide, jds, jde, kds, kde,         &
1771                         ims, ime, jms, jme, kms, kme,         &
1772                         its, ite, jts, jte, kts, kte          )
1773           END IF
1774       CASE (QNSEPBLSCHEME)
1775            if(isfc .ne. 4)CALL wrf_error_fatal &
1776             ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
1777            CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1778                         TKE_MYJ,EXCH_H,restart,               &
1779                         allowed_to_read ,                     &
1780                         ids, ide, jds, jde, kds, kde,         &
1781                         ims, ime, jms, jme, kms, kme,         &
1782                         its, ite, jts, jte, kts, kte          )
1783 #if (NMM_CORE != 1)
1784       CASE (BOULACSCHEME)
1785            if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
1786             ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
1787            CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1788                          TKE_PBL,EXCH_H,restart,               &
1789                          allowed_to_read ,                     &
1790                          ids, ide, jds, jde, kds, kde,         &
1791                          ims, ime, jms, jme, kms, kme,         &
1792                          its, ite, jts, jte, kts, kte          )
1793 #endif
1795 #if ( EM_CORE == 1 )
1797 !mynn 
1798            
1799         CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
1800            IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
1801                 ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
1802            
1803            SELECT CASE(config_flags%bl_pbl_physics)
1805              CASE(MYNNPBLSCHEME2)
1806                 mynn_closure_level=2
1808              CASE(MYNNPBLSCHEME3)
1809                 mynn_closure_level=3
1811              CASE DEFAULT
1813            END SELECT
1815            CALL mynn_bl_init_driver(&
1816                 &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
1817                 &,restart,allowed_to_read,mynn_closure_level &
1818                 &,IDS,IDE,JDS,JDE,KDS,KDE                    &
1819                 &,IMS,IME,JMS,JME,KMS,KME                    &
1820                 &,ITS,ITE,JTS,JTE,KTS,KTE)
1822       CASE (TEMFPBLSCHEME)
1823            ! if(isfc .ne. 0)CALL wrf_error_fatal &
1824            !  ( 'module_physics_init: use sfclay scheme = 0 for this pbl option' )
1825          IF ( PRESENT( te_temf ) .AND. PRESENT( cf3d_temf )) THEN
1826            CALL temfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1827                         RQCBLTEN,RQIBLTEN,P_QI,               &
1828                         PARAM_FIRST_SCALAR,                   &
1829                         restart,                              &
1830                         allowed_to_read ,                     &
1831                         te_temf,cf3d_temf,                    & ! WA
1832                         ids, ide, jds, jde, kds, kde,         &
1833                         ims, ime, jms, jme, kms, kme,         &
1834                         its, ite, jts, jte, kts, kte          )
1835              ELSE
1836                 CALL wrf_error_fatal ( 'arguments not present for calling TEMF scheme' )
1837          ENDIF
1839 #endif
1841       CASE DEFAULT
1843    END SELECT pbl_select
1846    END SUBROUTINE bl_init
1848 !==================================================================
1849    SUBROUTINE cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN,  &
1850                       RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC,       &
1851                       RUCUTEN, RVCUTEN,                           &
1852                       RAINCV,W0AVG,config_flags,restart,          &
1853                       CLDEFI,LOWLYR,MASS_FLUX,                    &
1854                       RTHFTEN, RQVFTEN,                           &
1855                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
1856                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
1857                       cugd_tten,cugd_ttens,cugd_qvten,            &
1858                       cugd_qvtens,cugd_qcten,                     &
1859                       allowed_to_read, start_of_simulation,       &
1860                       ids, ide, jds, jde, kds, kde,               &
1861                       ims, ime, jms, jme, kms, kme,               &
1862                       its, ite, jts, jte, kts, kte                )
1863 !------------------------------------------------------------------
1864    USE module_cu_kf
1865    USE module_cu_kfeta
1866    USE MODULE_CU_BMJ
1867    USE module_cu_gd,  ONLY : GDINIT
1868    USE module_cu_g3,  ONLY : G3INIT
1869    USE module_cu_sas
1870    USE module_cu_nsas
1871    USE module_cu_tiedtke
1872 !------------------------------------------------------------------
1873    IMPLICIT NONE
1874 !------------------------------------------------------------------
1875    TYPE (grid_config_rec_type) ::     config_flags
1876    LOGICAL , INTENT(IN)        :: restart
1879    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
1880                                   ims, ime, jms, jme, kms, kme,   &
1881                                   its, ite, jts, jte, kts, kte
1883    REAL ,    INTENT(IN)        :: DT, CUDT
1884    LOGICAL , INTENT(IN)        :: start_of_simulation
1885    LOGICAL , INTENT(IN)        :: allowed_to_read
1886    INTEGER , INTENT(INOUT)     :: STEPCU
1888    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::    &
1889             RTHCUTEN, RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
1890    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1891                         cugd_tten,cugd_ttens,cugd_qvten,            &
1892                         cugd_qvtens,cugd_qcten
1894    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
1896    REAL,    DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
1897             RTHFTEN, RQVFTEN
1899    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
1901    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
1903    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
1905    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX,   &
1906                                    APR_GR,APR_W,APR_MC,APR_ST,APR_AS,    &
1907                                    APR_CAPMA,APR_CAPME,APR_CAPMI
1909    INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
1911    REAL,     DIMENSION(IMS:IME,JMS:JME,KMS:KME), INTENT(INOUT) :: &
1912              RUCUTEN, RVCUTEN
1914 ! LOCAL VAR
1916   INTEGER :: i,j,itf,jtf
1918 !--------------------------------------------------------------------
1920 !-- calculate cumulus parameterization time step
1922    itf=min0(ite,ide-1)
1923    jtf=min0(jte,jde-1)
1925    STEPCU = nint(CUDT*60./DT)
1926    STEPCU = max(STEPCU,1)
1928 !-- initialization
1930    IF(start_of_simulation)THEN
1931      DO j=jts,jtf
1932      DO i=its,itf
1933         RAINC(i,j)=0.
1934         RAINCV(i,j)=0.
1935      ENDDO
1936      ENDDO
1937    ENDIF
1939    cps_select: SELECT CASE(config_flags%cu_physics)
1941      CASE (KFSCHEME)
1942           CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,        &
1943                       RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
1944                       PARAM_FIRST_SCALAR,restart,                 &
1945                       allowed_to_read ,                           &
1946                       ids, ide, jds, jde, kds, kde,               &
1947                       ims, ime, jms, jme, kms, kme,               &
1948                       its, ite, jts, jte, kts, kte                )
1950      CASE (BMJSCHEME)
1951           CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,       &
1952                       CLDEFI,LOWLYR,cp,r_d,restart,               &
1953                       allowed_to_read ,                           &
1954                       ids, ide, jds, jde, kds, kde,               &
1955                       ims, ime, jms, jme, kms, kme,               &
1956                       its, ite, jts, jte, kts, kte                )
1958      CASE (KFETASCHEME)
1959           CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,   &
1960                       RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
1961                       SVP1,SVP2,SVP3,SVPT0,                       &
1962                       PARAM_FIRST_SCALAR,restart,                 &
1963                       allowed_to_read ,                           &
1964                       ids, ide, jds, jde, kds, kde,               &
1965                       ims, ime, jms, jme, kms, kme,               &
1966                       its, ite, jts, jte, kts, kte                )
1967      CASE (GDSCHEME)
1968           CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
1969                       MASS_FLUX,cp,restart,                       &
1970                       P_QC,P_QI,PARAM_FIRST_SCALAR,               &
1971                       RTHFTEN, RQVFTEN,                           &
1972                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
1973                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
1974                       allowed_to_read ,                           &
1975                       ids, ide, jds, jde, kds, kde,               &
1976                       ims, ime, jms, jme, kms, kme,               &
1977                       its, ite, jts, jte, kts, kte                )
1978      CASE (NSASSCHEME)
1979          CALL nsasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,       &
1980                       RUCUTEN,RVCUTEN,                            & 
1981                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
1982                       allowed_to_read ,                           &
1983                       ids, ide, jds, jde, kds, kde,               &
1984                       ims, ime, jms, jme, kms, kme,               &
1985                       its, ite, jts, jte, kts, kte                )
1987 #if ( EM_CORE == 1 )
1988      CASE (G3SCHEME)
1989           CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
1990                       MASS_FLUX,cp,restart,                       &
1991                       P_QC,P_QI,PARAM_FIRST_SCALAR,               &
1992                       RTHFTEN, RQVFTEN,                           &
1993                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
1994                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
1995                       cugd_tten,cugd_ttens,cugd_qvten,            &
1996                       cugd_qvtens,cugd_qcten,                     &
1997                       allowed_to_read ,                           &
1998                       ids, ide, jds, jde, kds, kde,               &
1999                       ims, ime, jms, jme, kms, kme,               &
2000                       its, ite, jts, jte, kts, kte                )
2001 #endif
2002      CASE (SASSCHEME)
2003           CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,       &
2004                       RUCUTEN,RVCUTEN,                            &   ! gopal's doing for SAS
2005                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
2006                       allowed_to_read ,                           &
2007                       ids, ide, jds, jde, kds, kde,               &
2008                       ims, ime, jms, jme, kms, kme,               &
2009                       its, ite, jts, jte, kts, kte                )
2011 ! Tiedtke Scheme - ZCX&YQW
2012       CASE (TIEDTKESCHEME)
2013           CALL tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,   &
2014                       RUCUTEN,RVCUTEN,                            & 
2015                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
2016                       allowed_to_read ,                           &
2017                       ids, ide, jds, jde, kds, kde,               &
2018                       ims, ime, jms, jme, kms, kme,               &
2019                       its, ite, jts, jte, kts, kte                )
2021      CASE DEFAULT
2023    END SELECT cps_select
2025    END SUBROUTINE cu_init
2027 !==================================================================
2028    SUBROUTINE mp_init(RAINNC,config_flags,restart,warm_rain,      &
2029                       adv_moist_cond,                             &
2030                       MPDT, DT, DX, DY, LOWLYR,                   & ! for eta mp
2031                       F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,           & ! for eta mp
2032                       mp_restart_state,tbpvs_state,tbpvs0_state,   & ! eta mp
2033                       allowed_to_read, start_of_simulation,       &
2034                       ids, ide, jds, jde, kds, kde,               &
2035                       ims, ime, jms, jme, kms, kme,               &
2036                       its, ite, jts, jte, kts, kte                )
2037 !------------------------------------------------------------------
2038    USE module_mp_wsm3
2039    USE module_mp_wsm5
2040    USE module_mp_wsm6
2041    USE module_mp_etanew
2042 #if (NMM_CORE == 1)
2043    USE module_mp_HWRF
2044 #endif
2045    USE module_mp_thompson
2046    USE module_mp_thompson07
2047    USE module_mp_morr_two_moment
2048    USE module_mp_milbrandt2mom
2049 !  USE module_mp_milbrandt3mom
2050    USE module_mp_wdm5
2051    USE module_mp_wdm6
2052 !------------------------------------------------------------------
2053    IMPLICIT NONE
2054 !------------------------------------------------------------------
2055 ! Arguments
2056    TYPE (grid_config_rec_type) ::     config_flags
2057    LOGICAL , INTENT(IN)        :: restart
2058    LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
2059    REAL    , INTENT(IN)        :: MPDT, DT, DX, DY
2060    LOGICAL , INTENT(IN)        :: start_of_simulation
2062    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
2063                                   ims, ime, jms, jme, kms, kme,   &
2064                                   its, ite, jts, jte, kts, kte
2066    INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT)  :: LOWLYR
2067    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC
2068    REAL,     DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
2069                                   F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
2070    REAL , DIMENSION(:) ,INTENT(INOUT)  :: mp_restart_state,tbpvs_state,tbpvs0_state
2071    LOGICAL , INTENT(IN)  :: allowed_to_read
2073 ! Local
2074    INTEGER :: i, j, itf, jtf
2076    warm_rain = .false.
2077    adv_moist_cond = .true.
2078    itf=min0(ite,ide-1)
2079    jtf=min0(jte,jde-1)
2081    IF(start_of_simulation)THEN
2082      DO j=jts,jtf
2083      DO i=its,itf
2084         RAINNC(i,j) = 0.
2085      ENDDO
2086      ENDDO
2087    ENDIF
2089    mp_select: SELECT CASE(config_flags%mp_physics)
2091      CASE (KESSLERSCHEME)
2092           warm_rain = .true.
2093      CASE (WSM3SCHEME)
2094           CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2095      CASE (WSM5SCHEME)
2096           CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2097      CASE (WSM6SCHEME)
2098           CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2099      CASE (ETAMPNEW)
2100          adv_moist_cond = .false.
2101          CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart,           &
2102                           F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
2103                           mp_restart_state,tbpvs_state,tbpvs0_state,&
2104                           allowed_to_read,                        &
2105                           ids, ide, jds, jde, kds, kde,           &
2106                           ims, ime, jms, jme, kms, kme,           &
2107                           its, ite, jts, jte, kts, kte            )
2108 #if(NMM_CORE==1)
2109      CASE (etamp_HWRF)
2110          CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart,           &
2111                           F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
2112                           allowed_to_read,                        &
2113                           ids, ide, jds, jde, kds, kde,           &
2114                           ims, ime, jms, jme, kms, kme,           &
2115                           its, ite, jts, jte, kts, kte            )
2116 #endif 
2117      CASE (THOMPSON)
2118 ! Cycling the WRF forecast with moving nests will cause this initialization to be
2119 ! called for each nest move. This is potentially very computationally expensive.
2120          IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
2122      CASE (THOMPSON07)
2123          IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson07_init
2125      CASE (MORR_TWO_MOMENT)
2126          CALL morr_two_moment_init
2127      CASE (MILBRANDT2MOM)
2128          CALL milbrandt2mom_init
2129 !      CASE (MILBRANDT3MOM)
2130 !          CALL milbrandt3mom_init
2131      CASE (WDM5SCHEME)
2132           CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2133      CASE (WDM6SCHEME)
2134           CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2136      CASE DEFAULT
2138    END SELECT mp_select
2140    END SUBROUTINE mp_init
2142 #if  ( EM_CORE == 1 )
2143 !==========================================================
2144    SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,    &
2145                 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,    &
2146                 config_flags,restart,                           &
2147                 allowed_to_read ,                               &
2148                 ids, ide, jds, jde, kds, kde,                   &
2149                 ims, ime, jms, jme, kms, kme,                   &
2150                 its, ite, jts, jte, kts, kte                    )
2153 !--------------------------------------------------------------------
2154    USE module_fdda_psufddagd
2155    USE module_fdda_spnudging, ONLY : fddaspnudginginit
2156 !--------------------------------------------------------------------
2157    IMPLICIT NONE
2158 !--------------------------------------------------------------------
2159    TYPE (grid_config_rec_type) ::     config_flags
2160    LOGICAL , INTENT(IN)        :: restart
2162    INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
2163                                       ims, ime, jms, jme, kms, kme, &
2164                                       its, ite, jts, jte, kts, kte
2166    REAL ,    INTENT(IN)        ::     DT, FGDT
2167    INTEGER , INTENT(IN)        ::     id
2168    INTEGER , INTENT(INOUT)     ::     STEPFG
2169    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
2170                                                            RUNDGDTEN, &
2171                                                            RVNDGDTEN, &
2172                                                           RTHNDGDTEN, &
2173                                                           RPHNDGDTEN, &
2174                                                           RQVNDGDTEN
2175    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
2177    LOGICAL,  INTENT(IN)           :: allowed_to_read
2178 !--------------------------------------------------------------------
2180 !-- calculate pbl time step
2182    STEPFG = nint(FGDT*60./DT)
2183    STEPFG = max(STEPFG,1)
2186 !-- initialize fdda scheme
2188    fdda_select: SELECT CASE(config_flags%grid_fdda)
2190       CASE (PSUFDDAGD)
2191            CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
2192                config_flags%run_hours, &
2193                config_flags%if_no_pbl_nudging_uv, &
2194                config_flags%if_no_pbl_nudging_t, &
2195                config_flags%if_no_pbl_nudging_q, &
2196                config_flags%if_zfac_uv, &
2197                config_flags%k_zfac_uv, &
2198                config_flags%if_zfac_t, &
2199                config_flags%k_zfac_t, &
2200                config_flags%if_zfac_q, &
2201                config_flags%k_zfac_q, &
2202                config_flags%guv, &
2203                config_flags%gt, config_flags%gq, &
2204                config_flags%if_ramping, config_flags%dtramp_min, &
2205                config_flags%auxinput10_end_h, &
2206                config_flags%grid_sfdda, &
2207                config_flags%guv_sfc, &
2208                config_flags%gt_sfc, &
2209                config_flags%gq_sfc, &
2210                       restart, allowed_to_read,                    &
2211                       ids, ide, jds, jde, kds, kde,                &
2212                       ims, ime, jms, jme, kms, kme,                &
2213                       its, ite, jts, jte, kts, kte                 )
2215       CASE (SPNUDGING)
2216            CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
2217                config_flags%run_hours, &
2218                config_flags%if_no_pbl_nudging_uv, &
2219                config_flags%if_no_pbl_nudging_t, &
2220                config_flags%if_no_pbl_nudging_ph, &
2221                config_flags%if_zfac_uv, &
2222                config_flags%k_zfac_uv, &
2223                config_flags%dk_zfac_uv, &
2224                config_flags%if_zfac_t, &
2225                config_flags%k_zfac_t, &
2226                config_flags%dk_zfac_t, &
2227                config_flags%if_zfac_ph, &
2228                config_flags%k_zfac_ph, &
2229                config_flags%dk_zfac_ph, &
2230                config_flags%guv, &
2231                config_flags%gt, config_flags%gph, &
2232                config_flags%if_ramping, config_flags%dtramp_min, &
2233                config_flags%auxinput9_end_h, &
2234                config_flags%xwavenum,config_flags%ywavenum, &
2235                       restart, allowed_to_read,                    &
2236                       ids, ide, jds, jde, kds, kde,                &
2237                       ims, ime, jms, jme, kms, kme,                &
2238                       its, ite, jts, jte, kts, kte                 )
2240       CASE DEFAULT
2242    END SELECT fdda_select
2244    END SUBROUTINE fg_init
2246 !-------------------------------------------------------------------
2247    SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid,       &
2248                         idynin, dtramp, fdaend, restart,           &
2249                         obs_twindo_cg, obs_twindo, itimestep,      &
2250                         no_pbl_nudge_uv,                           &
2251                         no_pbl_nudge_t,                            &
2252                         no_pbl_nudge_q,                            &
2253                         sfcfact, sfcfacr, dpsmx,                   &
2254                         nudge_wind, nudge_temp, nudge_mois,        &
2255                         nudgezfullr1_uv, nudgezrampr1_uv,          &
2256                         nudgezfullr2_uv, nudgezrampr2_uv,          &
2257                         nudgezfullr4_uv, nudgezrampr4_uv,          &
2258                         nudgezfullr1_t,  nudgezrampr1_t,           &
2259                         nudgezfullr2_t,  nudgezrampr2_t,           &
2260                         nudgezfullr4_t,  nudgezrampr4_t,           &
2261                         nudgezfullr1_q,  nudgezrampr1_q,           &
2262                         nudgezfullr2_q,  nudgezrampr2_q,           &
2263                         nudgezfullr4_q,  nudgezrampr4_q,           &
2264                         nudgezfullmin, nudgezrampmin, nudgezmax,   &
2265                         xlat, xlong,                               &
2266                         start_year, start_month, start_day,        &
2267                         start_hour, start_minute, start_second,    &
2268                         p00, t00, tlp,                             &
2269                         znu, p_top,                                &
2270                         fdob, ipf_init,                            &
2271                         ids, ide, jds, jde, kds, kde,              &
2272                         ims, ime, jms, jme, kms, kme,              &
2273                         its, ite, jts, jte, kts, kte               )
2275 !--------------------------------------------------------------------
2276    USE module_domain
2277    USE module_fddaobs_rtfdda
2278    USE module_llxy
2279 !--------------------------------------------------------------------
2280    IMPLICIT NONE
2281 !--------------------------------------------------------------------
2282    INTEGER , INTENT(IN)    :: maxdom
2283    INTEGER , INTENT(IN)    :: obs_nudge_opt(maxdom)
2284    INTEGER , INTENT(IN)    :: ids,ide, jds,jde, kds,kde,           &
2285                               ims,ime, jms,jme, kms,kme,           &
2286                               its,ite, jts,jte, kts,kte
2287    INTEGER , INTENT(IN)    :: inest
2288    INTEGER , INTENT(IN)    :: parid(maxdom)
2289    INTEGER , INTENT(IN)    :: idynin          ! flag for dynamic initialization
2290    REAL    , INTENT(IN)    :: dtramp          ! time period for ramping (idynin)
2291    REAL    , INTENT(IN)    :: fdaend(maxdom)  ! nudging end time for domain (min)
2292    LOGICAL , INTENT(IN)    :: restart
2293    REAL    , INTENT(IN)    :: obs_twindo_cg   ! twindo on course grid
2294    REAL    , INTENT(IN)    :: obs_twindo
2295    INTEGER , INTENT(IN)    :: itimestep
2296    INTEGER , INTENT(IN)    :: no_pbl_nudge_uv(maxdom)  ! flags for no wind nudging in pbl
2297    INTEGER , INTENT(IN)    :: no_pbl_nudge_t(maxdom)   ! flags for no temperature nudging in pbl
2298    INTEGER , INTENT(IN)    :: no_pbl_nudge_q(maxdom)   ! flags for no moisture nudging in pbl
2299    REAL    , INTENT(IN)    :: sfcfact      ! scale factor applied to time window for surface obs
2300    REAL    , INTENT(IN)    :: sfcfacr      ! scale fac applied to horiz rad of infl for sfc obs
2301    REAL    , INTENT(IN)    :: dpsmx        ! max pressure change allowed within horiz. infl. range
2302    INTEGER , INTENT(IN)    :: nudge_wind(maxdom)       ! wind-nudging flag
2303    INTEGER , INTENT(IN)    :: nudge_temp(maxdom)       ! temperature-nudging flag
2304    INTEGER , INTENT(IN)    :: nudge_mois(maxdom)       ! moisture-nudging flag
2305    REAL    , INTENT(IN)    :: nudgezfullr1_uv  ! vert infl fcn, regime=1 full-wt   hght, winds
2306    REAL    , INTENT(IN)    :: nudgezrampr1_uv  ! vert infl fcn, regime=1 ramp down hght, winds
2307    REAL    , INTENT(IN)    :: nudgezfullr2_uv  ! vert infl fcn, regime=2 full-wt   hght, winds
2308    REAL    , INTENT(IN)    :: nudgezrampr2_uv  ! vert infl fcn, regime=2 ramp down hght, winds
2309    REAL    , INTENT(IN)    :: nudgezfullr4_uv  ! vert infl fcn, regime=4 full-wt   hght, winds
2310    REAL    , INTENT(IN)    :: nudgezrampr4_uv  ! vert infl fcn, regime=4 ramp down hght, winds
2311    REAL    , INTENT(IN)    :: nudgezfullr1_t   ! vert infl fcn, regime=1 full-wt   hght, temp
2312    REAL    , INTENT(IN)    :: nudgezrampr1_t   ! vert infl fcn, regime=1 ramp down hght, temp
2313    REAL    , INTENT(IN)    :: nudgezfullr2_t   ! vert infl fcn, regime=2 full-wt   hght, temp
2314    REAL    , INTENT(IN)    :: nudgezrampr2_t   ! vert infl fcn, regime=2 ramp down hght, temp
2315    REAL    , INTENT(IN)    :: nudgezfullr4_t   ! vert infl fcn, regime=4 full-wt   hght, temp
2316    REAL    , INTENT(IN)    :: nudgezrampr4_t   ! vert infl fcn, regime=4 ramp down hght, temp
2317    REAL    , INTENT(IN)    :: nudgezfullr1_q   ! vert infl fcn, regime=1 full-wt   hght, mois
2318    REAL    , INTENT(IN)    :: nudgezrampr1_q   ! vert infl fcn, regime=1 ramp down hght, mois
2319    REAL    , INTENT(IN)    :: nudgezfullr2_q   ! vert infl fcn, regime=2 full-wt   hght, mois
2320    REAL    , INTENT(IN)    :: nudgezrampr2_q   ! vert infl fcn, regime=2 ramp down hght, mois
2321    REAL    , INTENT(IN)    :: nudgezfullr4_q   ! vert infl fcn, regime=4 full-wt   hght, mois
2322    REAL    , INTENT(IN)    :: nudgezrampr4_q   ! vert infl fcn, regime=4 ramp down hght, mois
2323    REAL    , INTENT(IN)    :: nudgezfullmin    ! min dpth thru which vert infl fcn remains 1.0 (m)
2324    REAL    , INTENT(IN)    :: nudgezrampmin    ! min dpth thru which vif decreases 1.0 to 0.0 (m)
2325    REAL    , INTENT(IN)    :: nudgezmax        ! max dpth in which vif is nonzero (m)
2326    REAL    , INTENT(IN)    :: xlat ( ims:ime, jms:jme )        ! latitudes on mass-point grid
2327    REAL    , INTENT(IN)    :: xlong( ims:ime, jms:jme )        ! longitudes on mass-point grid
2328    INTEGER , INTENT(INOUT) :: start_year
2329    INTEGER , INTENT(INOUT) :: start_month
2330    INTEGER , INTENT(INOUT) :: start_day
2331    INTEGER , INTENT(INOUT) :: start_hour
2332    INTEGER , INTENT(INOUT) :: start_minute
2333    INTEGER , INTENT(INOUT) :: start_second
2334    REAL    , INTENT(IN)    :: p00                      ! base state pressure
2335    REAL    , INTENT(IN)    :: t00                      ! base state temperature
2336    REAL    , INTENT(IN)    :: tlp                      ! base state lapse rate
2337    REAL    , INTENT(IN)    :: znu( kms:kme )           ! eta values on half (mass) levels
2338    REAL    , INTENT(IN)    :: p_top                    ! pressure at top of model
2339    TYPE(fdob_type), INTENT(INOUT)  :: fdob
2341    INTEGER                 :: e_sn         ! ending   north-south grid index
2342    LOGICAL                 :: ipf_init     ! print warnings detected at initialzn
2343 !--------------------------------------------------------------------
2344 !-- initialize fdda obs-nudging scheme
2346       IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
2348       e_sn = jde
2349       CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid,       &
2350                         idynin, dtramp, fdaend, restart,           &
2351                         obs_twindo_cg,                             &
2352                         obs_twindo, itimestep,                     &
2353                         no_pbl_nudge_uv,                           &
2354                         no_pbl_nudge_t,                            &
2355                         no_pbl_nudge_q,                            &
2356                         sfcfact, sfcfacr, dpsmx,                   &
2357                         nudge_wind, nudge_temp, nudge_mois,        &
2358                         nudgezfullr1_uv, nudgezrampr1_uv,          &
2359                         nudgezfullr2_uv, nudgezrampr2_uv,          &
2360                         nudgezfullr4_uv, nudgezrampr4_uv,          &
2361                         nudgezfullr1_t,  nudgezrampr1_t,           &
2362                         nudgezfullr2_t,  nudgezrampr2_t,           &
2363                         nudgezfullr4_t,  nudgezrampr4_t,           &
2364                         nudgezfullr1_q,  nudgezrampr1_q,           &
2365                         nudgezfullr2_q,  nudgezrampr2_q,           &
2366                         nudgezfullr4_q,  nudgezrampr4_q,           &
2367                         nudgezfullmin,  nudgezrampmin, nudgezmax,  &
2368                         xlat, xlong,                               &
2369                         start_year, start_month, start_day,        &
2370                         start_hour, start_minute, start_second,    &
2371                         p00, t00, tlp,                             &
2372                         znu, p_top,                                &
2373                         fdob, ipf_init,                            &
2374                         ids,ide, jds,jde, kds,kde,                 &
2375                         ims,ime, jms,jme, kms,kme,                 &
2376                         its,ite, jts,jte, kts,kte)
2378    END SUBROUTINE fdob_init
2379 #endif
2381 !--------------------------------------------------------------------
2382    SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
2383                 allowed_to_read , &
2384                 kds,kde,kms,kme,kts,kte)
2385    IMPLICIT NONE
2386 ! Arguments
2387    INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
2388    REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
2389    REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
2390    REAL , INTENT(IN) :: p_top
2391    REAL , INTENT(OUT) :: pptop
2392    TYPE (grid_config_rec_type)              :: config_flags
2393    LOGICAL , INTENT(IN) :: allowed_to_read
2394 ! Local
2395    REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
2396    INTEGER K
2398    IF(zf(kde/2) .GT. 1.0)THEN
2399 ! Height levels assumed (zeta coordinate)
2400 ! Convert to sigma using standard atmosphere for pressure-height relation
2401 ! constants for standard atmosphere definition
2402       r=287.05
2403       g=9.80665
2404       ts=288.15
2405       gamma=-6.5/1000.
2406       ps=1013.25
2407       ztrop=11000.
2408       tstrat=ts+gamma*ztrop
2409       ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
2411       do k=kde,kds,-1
2412 ! full levels
2413         z=zf(k)
2414         if(z.le.ztrop)then
2415           t=ts+gamma*z
2416           p=ps*(t/ts)**(-g/(gamma*r))
2417         else
2418           t=tstrat
2419           p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2420         endif
2421         if(k.eq.kde)then
2422           ztop=zf(k)
2423           ptop=p
2424         endif
2425         sf(k)=(p-ptop)/(ps-ptop)
2426 ! half levels
2427         if(k.ne.kds)then
2428         z=0.5*(zf(k)+zf(k-1))
2429         if(z.le.ztrop)then
2430           t=ts+gamma*z
2431           p=ps*(t/ts)**(-g/(gamma*r))
2432         else
2433           t=tstrat
2434           p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2435         endif
2436         sh(k-1)=(p-ptop)/(ps-ptop)
2437         endif
2438       enddo
2439       pptop=ptop/10.
2440    ELSE
2441 !  Levels are already sigma/eta
2442       do k=kde,kds,-1
2443 !        sf(k)=zf(kde-k+kds)
2444 !        if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
2445          sf(k)=zf(k)
2446          if(k .ne. kde)sh(k)=zh(k)
2447       enddo
2448       pptop=p_top/1000.
2450    ENDIF
2452    END SUBROUTINE z2sigma
2454 END MODULE module_physics_init