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