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