Merge branch 'master' into devel
[wrffire.git] / wrfv2_fire / phys / module_physics_init.F
blob9390c4cce1e07c3df2a0e2deb601902d3cbfb05f
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
16 !  USE module_ssib_veg , ONLY : init_module_ssib_veg !fds (SSiB constants)
18 CONTAINS
21 !=================================================================
22    SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf,     &
23                          p_top, TSK,RADT,BLDT,CUDT,MPDT,         &
24                          RUCUTEN, RVCUTEN,                       &
25                          RTHCUTEN, RQVCUTEN, RQRCUTEN,           &
26                          RQCCUTEN, RQSCUTEN, RQICUTEN,           &
27                          RUSHTEN,  RVSHTEN,  RTHSHTEN,           &
28                          RQVSHTEN, RQRSHTEN, RQCSHTEN,           &
29                          RQSSHTEN, RQISHTEN, RQGSHTEN,           &
30                          RUBLTEN,RVBLTEN,RTHBLTEN,               &
31                          RQVBLTEN,RQCBLTEN,RQIBLTEN,             &
32                          RTHRATEN,RTHRATENLW,RTHRATENSW,         &
33                          STEPBL,STEPRA,STEPCU,                   &
34                          W0AVG, RAINNC, RAINC, RAINCV, RAINNCV,  &
35                          SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV, &
36                          NCA,swrad_scat,                         &
37                          CLDEFI,LOWLYR,                          &
38                          MASS_FLUX,                              &
39                          RTHFTEN, RQVFTEN,                       &
40                          CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK,  & !EMBCK new
41                          LU_INDEX,                               &
42                          landuse_ISICE, landuse_LUCATS,          &
43                          landuse_LUSEAS, landuse_ISN,            &
44                          lu_state,                               &
45                          XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
46                          levsiz, n_ozmixm, n_aerosolc, paerlev,  &
47                          TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_PBL,  &
48                          EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
49                          TSLB,ZS,DZS,num_soil_layers,warm_rain,  &
50                          adv_moist_cond,                         &
51                          APR_GR,APR_W,APR_MC,APR_ST,APR_AS,      &
52                          APR_CAPMA,APR_CAPME,APR_CAPMI,          &
53                          XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV,   &
54                          SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
55                          ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS,    &
56                          SH2O, SNOWH, SMFR3D,                    &  ! temporary
57                          SNOALB,                                 &
58                          DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
59                          mp_restart_state,tbpvs_state,tbpvs0_state,&
60                          allowed_to_read, moved, start_of_simulation,&
61                          LAGDAY,                                 &
62                          ids, ide, jds, jde, kds, kde,           &
63                          ims, ime, jms, jme, kms, kme,           &
64                          its, ite, jts, jte, kts, kte,           &
65                          NUM_URBAN_LAYERS,                       &
66                          raincv_a,raincv_b,                      &
67                          gd_cloud,gd_cloud2,                     &    ! Optional
68                          gd_cloud_a,gd_cloud2_a,                 &    ! Optional
69                          gd_cloud_b,gd_cloud2_b,                 &    ! Optional
70                          ozmixm,pin,                             &    ! Optional
71                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
72                          RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,         &    ! Optional
73                          RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,       &    ! Optional
74                          FGDT,STEPFG,                            &    ! Optional
75                          cugd_tten,cugd_ttens,cugd_qvten,        &    ! Optional
76                          cugd_qvtens,cugd_qcten,                 &    ! Optional
77                          ISNOWXY, ZSNSOXY, TSNOXY,                        & ! Optional Noah-MP
78                          SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY,          & ! Optional Noah-MP
79                          CANLIQXY, EAHXY, TAHXY, CMXY,                    & ! Optional Noah-MP
80                          CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY,       & ! Optional Noah-MP
81                          WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY, & ! Optional Noah-MP
82                          STMASSXY, WOODXY, STBLCPXY, FASTCPXY,            & ! Optional Noah-MP
83                          XSAIXY,                                          & ! Optional Noah-MP
84                          T2MVXY, T2MBXY, CHSTARXY ,                       & ! Optional Noah-MP
85 !                        num_roof_layers,num_wall_layers,        & !Optional urban
86 !                        num_road_layers,                        & !Optional urban
87                          DZR, DZB, DZG,                          & !Optional urban
88                          TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,    & !Optional urban
89                          QC_URB2D, XXXR_URB2D,XXXB_URB2D,        & !Optional urban
90                          XXXG_URB2D, XXXC_URB2D,                 & !Optional urban
91                          TRL_URB3D, TBL_URB3D, TGL_URB3D,        & !Optional urban
92                          SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,  & !Optional urban
93                          TS_URB2D, FRC_URB2D, UTYPE_URB2D,       & !Optional urban
94                          TRB_URB4D,TW1_URB4D,TW2_URB4D,          & !Optional multi-layer urban
95                          TGB_URB4D,TLEV_URB3D,QLEV_URB3D,        & !Optional multi-layer urban
96                          TW1LEV_URB3D,TW2LEV_URB3D,              & !Optional multi-layer urban
97                          TGLEV_URB3D,TFLEV_URB3D,                & !Optional multi-layer urban
98                          SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,    & !Optional multi-layer urban
99                          SFVENT_URB3D,LFVENT_URB3D,              & !Optional multi-layer urban
100                          SFWIN1_URB3D,SFWIN2_URB3D,              & !Optional multi-layer urban
101                          SFW1_URB3D,SFW2_URB3D,                  & !Optional multi-layer urban
102                          SFR_URB3D,SFG_URB3D,                    & !Optional multi-layer urban
103                          A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,        & !Optional multi-layer urban
104                          A_E_BEP,B_U_BEP,B_V_BEP,                & !Optional multi-layer urban
105                          B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,        & !Optional multi-layer urban
106                          DL_U_BEP,SF_BEP,VL_BEP,                 & !Optional multi-layer urban
107                          TML,T0ML,HML,H0ML,HUML,HVML,TMOML,      & !Optional oml
108                          itimestep,                              & !Optional obs fdda
109 #if ( EM_CORE == 1 )
110                          fdob,                                   & !Optional obs fdda
111 #endif
112                          t00, p00, tlp,                          & !for obs-nudging
113                          TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update,   &
114                          ACHFX,ACLHF,ACGRDFLX                    &
115    ! OPTIONAL 
116                          ,te_temf          & ! WA 12/21/09
117                          ,cf3d_temf        & ! WA 9/27/10
118                          ,wm_temf          & ! WA 2/22/11
119                          ,massflux_EDKF, entr_EDKF, detr_EDKF  & ! Optional for qnse
120                          ,thl_up, thv_up, rt_up                & ! Optional for qnse
121                          ,rv_up, rc_up, u_up, v_up, frac_up    & ! Optional for qnse
122                          )
124 !-----------------------------------------------------------------
125    USE module_domain
126    USE module_wrf_error
127    USE module_wind_generic
128    USE module_wind_fitch
129    IMPLICIT NONE
130 !-----------------------------------------------------------------
131    TYPE (grid_config_rec_type)              :: config_flags
133    INTEGER , INTENT(IN)        :: id
134    INTEGER , INTENT(IN) ,OPTIONAL       :: tmn_update
135    LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
136 !   LOGICAL , INTENT (IN)       :: FNDSOILW, FNDSNOWH
137    LOGICAL, PARAMETER          :: FNDSOILW=.true., FNDSNOWH=.true.
138    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,  &
139                                   ims, ime, jms, jme, kms, kme,  &
140                                   its, ite, jts, jte, kts, kte
142    INTEGER , INTENT(IN)        :: num_soil_layers
143    INTEGER , INTENT(IN)        :: lagday
144    INTEGER , INTENT(OUT) ,OPTIONAL      :: nyear
145    REAL    , INTENT(OUT) ,OPTIONAL      :: nday
147    LOGICAL,  INTENT(IN)        :: start_of_simulation
148    REAL,     INTENT(IN)        :: DT, p_top, DX, DY
149    LOGICAL,  INTENT(IN)        :: restart
150    REAL,     INTENT(IN)        :: RADT,BLDT,CUDT,MPDT
151    REAL,     INTENT(IN)        :: swrad_scat
153    REAL,     DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
154    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
156    INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
157    INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
159    REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
160           INTENT(INOUT) ::                                  OZMIXM
162    REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::        PIN
164    REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
165    REAL,  DIMENSION(paerlev), OPTIONAL,INTENT(INOUT)  ::          m_hybi
166    REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
167           INTENT(INOUT) ::                    aerosolc_1, aerosolc_2
169    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
170                  INTENT(INOUT) :: SMOIS, SH2O,TSLB
171    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
173    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
174             INTENT(INOUT)    ::                           SNOW, &
175                                                          SNOWC, &
176                                                          SNOWH, &
177                                                         CANWAT, &
178                                                         SMSTAV, &
179                                                         SMSTOT, &
180                                                      SFCRUNOFF, &
181                                                       UDRUNOFF, &
182                                                         SFCEVP, &
183                                                         GRDFLX, &
184                                                         ACSNOW, &
185                                                           XICE, &
186                                                          XICEM, &
187                                                         VEGFRA, &
188                                                         ACSNOM
190    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
191             OPTIONAL, INTENT(INOUT)    ::                ACHFX, &
192                                                          ACLHF, &
193                                                       ACGRDFLX
195    INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
196             INTENT(INOUT)    ::                         IVGTYP, &
197                                                         ISLTYP
199 ! rad
201    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
202              RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
204    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
205              CLDFRA_OLD
207    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
208              GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK                          !EMBCK new
209    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::   SNOALB
212    REAL,     INTENT(IN) :: GMT
214    INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
215    INTEGER , INTENT(IN) :: JULYR, JULDAY
217 ! cps
219    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
220              RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, &
221              RQSCUTEN, RQICUTEN,                                       &
222              RUSHTEN, RVSHTEN, RTHSHTEN, RQVSHTEN, RQRSHTEN, RQCSHTEN, &
223              RQSSHTEN, RQISHTEN, RQGSHTEN
225    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
227    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX,   &
228                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
229                       APR_CAPMA,APR_CAPME,APR_CAPMI
231    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
232              RTHFTEN, RQVFTEN
234    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) ::           &
235              RAINNC, RAINC, RAINCV, RAINNCV,  &
236              SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV
238    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
240    INTEGER,  DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
242 !pbl
244    ! soil layer
247    REAL,     DIMENSION(1:num_soil_layers),      INTENT(INOUT) :: ZS,DZS
249    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
250              RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_PBL
252   REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
253                                             massflux_EDKF, entr_EDKF, detr_EDKF & 
254                                                    ,thl_up, thv_up, rt_up       &
255                                                    ,rv_up, rc_up, u_up, v_up    &
256                                                    ,frac_up
259    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
260              cugd_tten,cugd_ttens,cugd_qvten,                &
261              cugd_qvtens,cugd_qcten
262    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
263              XLAND,ZNT,Z0,UST,MOL,LU_INDEX,                         &
264              PBLH,THC,MAVAIL,HFX,QFX,RAINBL
265    INTEGER , INTENT(INOUT)  :: landuse_ISICE, landuse_LUCATS
266    INTEGER , INTENT(INOUT)  :: landuse_LUSEAS, landuse_ISN
267    REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
269    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
270    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
271    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
272    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
273    REAL,     DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
276    REAL,  DIMENSION( ims:ime , kms:kme , jms:jme )         ,         &
277           OPTIONAL,                                                  &
278           INTENT(INOUT   ) ::                                        &
279                                gd_cloud, gd_cloud2,                  &
280                                gd_cloud_a, gd_cloud2_a,              &
281                                gd_cloud_b, gd_cloud2_b
283    REAL,  DIMENSION( ims:ime ,  jms:jme )         ,         &
284           INTENT(INOUT   ) ::                                        &
285                                raincv_a,raincv_b
287 !Noah-MP
290    INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
291    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
292    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
293    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
294    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
295    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
296    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
297    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
298    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
299    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
300    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
301    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
302    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
303    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
304    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
305    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
306    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
307    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
308    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
309    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
310    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
311    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
312    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
313    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
314    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
315    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
316    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
317    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
318    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
319    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
320    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
323    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::   &
324              F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
325    REAL, DIMENSION(:), INTENT(INOUT)   :: mp_restart_state,tbpvs_state,tbpvs0_state
326    LOGICAL,  INTENT(IN)  :: allowed_to_read, moved
328 ! ocean mixed layer
329    REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
330              TML,T0ML,HML,H0ML,HUML,HVML,TMOML
332 !fdda
333    REAL,     OPTIONAL, INTENT(IN) :: FGDT
334    INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
335    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
336              RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
337    REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
338              RMUNDGDTEN
340 !URBAN
341 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR   !urban
342 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB   !urban
343 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG   !urban
344    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR    !urban
345    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB    !urban
346    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG    !urban
348    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
349    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
350    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
351    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
352    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
353    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
354    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
355    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
356    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
358 !   REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
359 !   REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
360 !   REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
361    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D  !urban
362    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D  !urban
363    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D  !urban
365    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
366    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
367    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
368    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
369    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
370    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
371    INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
373    INTEGER , INTENT(IN)        :: num_urban_layers
374    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
375    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
376    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
377    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
378    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
379    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
380    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
381    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
382    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
383    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
384    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
385    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
386    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
387    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
388    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
389    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
390    REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
391    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
392    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
393    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
394    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
395    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
396    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
397    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
398    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
399    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
400    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
401    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
402    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
403    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
404    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
405    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
406    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
407    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
408    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
410 !obs fdda
411    INTEGER, OPTIONAL, INTENT(IN) :: itimestep
412 #if ( EM_CORE == 1 )
413    TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
414 #endif
415    REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp   ! for obs-nudging base-state calcn
417 ! WA 12/21/09
418    REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
419           INTENT(OUT) ::    te_temf, cf3d_temf    
420 ! WA 2/22/11
421    REAL,OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
422           INTENT(OUT) ::    wm_temf
424 ! Local data
426    REAL    :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
427    REAL,     DIMENSION( kms:kme )  :: sfull, shalf
428    REAL :: obs_twindo_cg, obs_twindo
430    CHARACTER*256 :: MMINLU_loc
431    CHARACTER*80 :: message
432    INTEGER :: ISWATER
433    INTEGER :: ISICE
434    INTEGER :: ISURBAN
435    INTEGER :: sf_urban_physics
436    INTEGER :: omlcall
437    REAL    :: oml_hml0
438    LOGICAL :: usemonalb
439    LOGICAL :: rdmaxalb
440    INTEGER :: mfshconv
442    INTEGER :: i, j, k, itf, jtf, ktf, n
443 integer myproc
445 !-----------------------------------------------------------------
447    sf_urban_physics=config_flags%sf_urban_physics
448    usemonalb=config_flags%usemonalb
449    rdmaxalb=config_flags%rdmaxalb
450    mfshconv=config_flags%mfshconv
451 #if ( EM_CORE == 1 )
452    obs_twindo_cg=model_config_rec%obs_twindo(1)
453    obs_twindo=config_flags%obs_twindo
454    oml_hml0=config_flags%oml_hml0
455    omlcall=config_flags%omlcall
456 #endif
458 !-- should be from the namelist
460    sfull = 0.
461    shalf = 0.
463    CALL wrf_debug(100,'top of phy_init')
465    WRITE(wrf_err_message,*) 'phy_init:  start_of_simulation = ',start_of_simulation
466    CALL wrf_debug ( 100, TRIM(wrf_err_message) )
468    itf=min0(ite,ide-1)
469    jtf=min0(jte,jde-1)
470    ktf=min0(kte,kde-1)
472    ZZLND=0.1
473    ZZWTR=0.0001
474    THINLD=0.04
475    ALBLND=0.2
476    XMAVA=0.3
478 #if (NMM_CORE == 1)
479    if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
480 #endif
482    CALL nl_get_cen_lat(id,cen_lat)
483    CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
484    CALL nl_get_iswater(id,iswater)
485    CALL nl_get_isice(id,isice)
486    CALL nl_get_isurban(id,isurban)
487    CALL nl_get_mminlu( 1, mminlu_loc )
488    CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
489 !-- temporary fix by ww
490    landuse_ISICE = isice
492 ! Added for Wind Turbine parameterization code -- This will only read in an optional 
493 ! configuration file with information that will be used by inividual turbine init routines 
494 ! as each domain is initialized.
495   IF ( id .EQ. 1 ) THEN
496     CALL init_module_wind_generic
497     CALL init_module_wind_fitch
498   ENDIF
501   IF(.not.restart)THEN
502 !-- initialize common variables
504    IF ( .NOT. moved ) THEN
505    DO j=jts,jtf
506    DO i=its,itf
507       XLAND(i,j)=1.
508       GSW(i,j)=0.
509       GLW(i,j)=0.
510 !-- initialize ust to a small value
511       UST(i,j)=0.0001
512       MOL(i,j)=0.0
513       PBLH(i,j)=0.0
514       HFX(i,j)=0.
515       QFX(i,j)=0.
516       RAINBL(i,j)=0.
517       RAINNCV(i,j)=0.
518       SNOWNCV(i,j)=0.
519       GRAUPELNCV(i,j)=0.
520       ACSNOW(i,j)=0.
521       DO k=kms,kme  !wig, 17-May-2006: Added for idealized chem. runs
522          EXCH_H(i,k,j) = 0.
523       END DO
524    ENDDO
525    ENDDO
526    ENDIF
528    IF(PRESENT(TMN_UPDATE))THEN
529    if(tmn_update.eq.1) then
530    nyear=1
531    nday=0.
532    DO j=jts,jtf
533    DO i=its,itf
534       TYR(i,j)=TMN(i,j)
535       TYRA(i,j)=0.0
536       TDLY(i,j)=0.0
537     DO n=1,lagday
538       TLAG(i,n,j)=TMN(i,j)
539     ENDDO
540    ENDDO
541    ENDDO
542    endif
543    ENDIF
547    DO j=jts,jtf
548    DO i=its,itf
549      IF(XLAND(i,j) .LT. 1.5)THEN
550        IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=ALBLND
551        EMBCK(i,j)=0.85
552        ALBEDO(i,j)=ALBBCK(i,j)
553        EMISS(i,j)=EMBCK(i,j)
554        THC(i,j)=THINLD
555        ZNT(i,j)=ZZLND
556 #if  ! ( NMM_CORE == 1 )
557        Z0(i,j)=ZZLND
558 #endif
559        MAVAIL(i,j)=XMAVA
560      ELSE
561        IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=0.08
562        ALBEDO(i,j)=ALBBCK(i,j)
563        EMBCK(i,j)=0.98
564        EMISS(i,j)=EMBCK(i,j)
565        THC(i,j)=THINLD
566        ZNT(i,j)=ZZWTR
567 #if  ! ( NMM_CORE == 1 )
568        Z0(i,j)=ZZWTR
569 #endif
570        MAVAIL(i,j)=1.0
571      ENDIF
573    ENDDO
574    ENDDO
576     if (config_flags%cu_diag == 1 )then
577     do j=jts,jtf
578        do k=kts,ktf
579           do i=its,itf
580              gd_cloud(i,k,j) = 0.
581              gd_cloud2(i,k,j) = 0.
582              gd_cloud_a(i,k,j) = 0.
583              gd_cloud2_a(i,k,j) = 0.
584              gd_cloud_b(i,k,j) = 0.
585              gd_cloud2_b(i,k,j) = 0.
586           end do
587        end do
588     end do
589     endif
591     do j=jts,jtf
592          do i=its,itf
593            raincv_a(i,j)=0.
594            raincv_b(i,j)=0.
595       end do
596     end do
598    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
600    IF(mminlu_loc .ne. '    ')THEN
601 !-- initialize surface properties
603      CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
604                 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
605                 TRIM ( mminlu_loc ) ,                               &
606                 landuse_ISICE, landuse_LUCATS,                      &
607                 landuse_LUSEAS, landuse_ISN,                        &
608                 config_flags%fractional_seaice,                      &
609                 lu_state,                                           &
610                 allowed_to_read , usemonalb ,                       &
611                 ids, ide, jds, jde, kds, kde,                       &
612                 ims, ime, jms, jme, kms, kme,                       &
613                 its, ite, jts, jte, kts, kte                       )
614    ENDIF
616   ENDIF
618 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
619 !-- zfull/zhalf may be either zeta or eta
620 !-- what is done here depends on coordinate (check this code if adding new coordinates)
621    CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
622                 allowed_to_read,                                  &
623                 kds,kde,kms,kme,kts,kte)
625 !-- initialize physics
626 !-- ra: radiation
627 !-- bl: pbl
628 !-- cu: cumulus
629 !-- mp: microphysics
631    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
633    CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW,             &
634                 RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT,    &
635                 levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm,                           &
636                 cldfra_old=cldfra_old,                                     & ! Optional
637                 ozmixm=ozmixm,pin=pin,                                     & ! Optional
638                 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
639                 paerlev=paerlev,n_aerosolc=n_aerosolc,                             &
640                 sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top,       &
641                 config_flags=config_flags,restart=restart,                           &
642                 allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation,           &
643                 ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde,                   &
644                 ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme,                   &
645                 its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte                    )
647    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
648    CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,        &
649                 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
650                 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
651                 num_soil_layers,TKE_PBL,mfshconv,               &
652                 massflux_EDKF, entr_EDKF, detr_EDKF, & 
653                 thl_up, thv_up, rt_up,       &
654                 rv_up, rc_up, u_up, v_up,    &
655                 frac_up, &
656                 EXCH_H,VEGFRA,                                  &
657                 SNOW,SNOWC, CANWAT,SMSTAV,                      &
658                 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
659                 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL,      &
660                 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB,   &
661 #if (NMM_CORE == 1)
662                 Z0,XLAND,XICE,                                  &
663 #else
664                 ZNT,XLAND,XICE,                                 &
665 #endif
666                 SFCEVP,GRDFLX,                                  &
667                 TRIM (MMINLU_LOC),                              &
668                 ISNOWXY, ZSNSOXY, TSNOXY,                       &
669                 SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY,         &
670                 CANLIQXY, EAHXY, TAHXY, CMXY,                   &
671                 CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY,      &
672                 WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
673                 STMASSXY, WOODXY, STBLCPXY, FASTCPXY,           &
674                 XSAIXY,                                         &
675                 T2MVXY,T2MBXY,CHSTARXY ,                        &
676                 allowed_to_read ,                               &
677                 start_of_simulation ,                           &
678                 te_temf,cf3d_temf,wm_temf,                      & ! WA
679                 DZR, DZB, DZG,                                  & !Optional urban
680                 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
681                 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
682                 TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
683                 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,          & !Optional urban
684                 TS_URB2D, FRC_URB2D, UTYPE_URB2D,               & 
685                 SF_URBAN_PHYSICS,                               & !Optional urban
686                 NUM_URBAN_LAYERS,                               & !Optional multi-layer urban
687                 TRB_URB4D,TW1_URB4D,TW2_URB4D,                  & !Optional multi-layer urban
688                 TGB_URB4D,TLEV_URB3D,QLEV_URB3D,                & !Optional multi-layer urban
689                 TW1LEV_URB3D,TW2LEV_URB3D,                      & !Optional multi-layer urban
690                 TGLEV_URB3D,TFLEV_URB3D,                        & !Optional multi-layer urban
691                 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,            & !Optional multi-layer urban
692                 SFVENT_URB3D,LFVENT_URB3D,                      & !Optional multi-layer urban
693                 SFWIN1_URB3D,SFWIN2_URB3D,                      & !Optional multi-layer urban
694                 SFW1_URB3D,SFW2_URB3D,                          & !Optional multi-layer urban
695                 SFR_URB3D,SFG_URB3D,                            & !Optional multi-layer urban
696                 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,                & !Optional multi-layer urban
697                 A_E_BEP,B_U_BEP,B_V_BEP,                        & !Optional multi-layer urban
698                 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,                & !Optional multi-layer urban
699                 DL_U_BEP,SF_BEP,VL_BEP,                         & !Optional multi-layer urban
700                 ids, ide, jds, jde, kds, kde,                   &
701                 ims, ime, jms, jme, kms, kme,                   &
702                 its, ite, jts, jte, kts, kte,                   &
703                 ACHFX,ACLHF,ACGRDFLX,                           &
704                 oml_hml0, omlcall,                              & !Optional oml
705                 TML,T0ML,HML,H0ML,HUML,HVML,TMOML               ) !Optional oml
707    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
709    CALL cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN,        &
710                 RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,   &
711                 NCA,RAINC,RAINCV,W0AVG,config_flags,restart,    &
712                 CLDEFI,LOWLYR,MASS_FLUX,                        &
713                 RTHFTEN, RQVFTEN,                               &
714                 APR_GR,APR_W,APR_MC,APR_ST,APR_AS,              &
715                 APR_CAPMA,APR_CAPME,APR_CAPMI,                  &
716                 cugd_tten,cugd_ttens,cugd_qvten,                &
717                 cugd_qvtens,cugd_qcten,                         &
718                 allowed_to_read, start_of_simulation,           &
719                 ids, ide, jds, jde, kds, kde,                   &
720                 ims, ime, jms, jme, kms, kme,                   &
721                 its, ite, jts, jte, kts, kte                    )
723    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to shcu_init' )
725    CALL shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN,      &
726                 RQVSHTEN,RQRSHTEN,RQCSHTEN,                     &
727                 RQSSHTEN,RQISHTEN,RQGSHTEN,                     &
728                 NCA,RAINC,RAINCV,config_flags,restart,          &
729                 allowed_to_read, start_of_simulation,           &
730                 ids, ide, jds, jde, kds, kde,                   &
731                 ims, ime, jms, jme, kms, kme,                   &
732                 its, ite, jts, jte, kts, kte                    )
734    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
736    CALL mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain,          &
737                 adv_moist_cond,                                 &
738                 MPDT, DT, DX, DY, LOWLYR,                       &
739                 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,               &
740                 mp_restart_state,tbpvs_state,tbpvs0_state,      &
741                 allowed_to_read, start_of_simulation,           &
742                 ids, ide, jds, jde, kds, kde,                   &
743                 ims, ime, jms, jme, kms, kme,                   &
744                 its, ite, jts, jte, kts, kte                    )
746 #if  ( EM_CORE == 1 )
747    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
749    CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,          &
750                 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,    &
751                 config_flags,restart,                           &
752                 allowed_to_read ,                               &
753                 ids, ide, jds, jde, kds, kde,                   &
754                 ims, ime, jms, jme, kms, kme,                   &
755                 its, ite, jts, jte, kts, kte                    )
757    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
759    CALL fdob_init(model_config_rec%obs_nudge_opt,               &
760                   model_config_rec%max_dom,                     &
761                   id,                                           &
762                   model_config_rec%parent_id,                   &
763                   model_config_rec%obs_idynin,                  &
764                   model_config_rec%obs_dtramp,                  &
765                   model_config_rec%fdda_end,                    &
766                   model_config_rec%restart,                     &
767                   obs_twindo_cg, obs_twindo,                    &
768                   itimestep,                                    &
769                   model_config_rec%obs_no_pbl_nudge_uv,         &
770                   model_config_rec%obs_no_pbl_nudge_t,          &
771                   model_config_rec%obs_no_pbl_nudge_q,          &
772                   model_config_rec%obs_sfc_scheme_horiz,        &
773                   model_config_rec%obs_sfc_scheme_vert,         &
774                   model_config_rec%obs_max_sndng_gap,           &
775                   model_config_rec%obs_sfcfact,                 &
776                   model_config_rec%obs_sfcfacr,                 &
777                   model_config_rec%obs_dpsmx,                   &
778                   model_config_rec%obs_nudge_wind,              &
779                   model_config_rec%obs_nudge_temp,              &
780                   model_config_rec%obs_nudge_mois,              &
781                   model_config_rec%obs_nudgezfullr1_uv,         &
782                   model_config_rec%obs_nudgezrampr1_uv,         &
783                   model_config_rec%obs_nudgezfullr2_uv,         &
784                   model_config_rec%obs_nudgezrampr2_uv,         &
785                   model_config_rec%obs_nudgezfullr4_uv,         &
786                   model_config_rec%obs_nudgezrampr4_uv,         &
787                   model_config_rec%obs_nudgezfullr1_t,          &
788                   model_config_rec%obs_nudgezrampr1_t,          &
789                   model_config_rec%obs_nudgezfullr2_t,          &
790                   model_config_rec%obs_nudgezrampr2_t,          &
791                   model_config_rec%obs_nudgezfullr4_t,          &
792                   model_config_rec%obs_nudgezrampr4_t,          &
793                   model_config_rec%obs_nudgezfullr1_q,          &
794                   model_config_rec%obs_nudgezrampr1_q,          &
795                   model_config_rec%obs_nudgezfullr2_q,          &
796                   model_config_rec%obs_nudgezrampr2_q,          &
797                   model_config_rec%obs_nudgezfullr4_q,          &
798                   model_config_rec%obs_nudgezrampr4_q,          &
799                   model_config_rec%obs_nudgezfullmin,           &
800                   model_config_rec%obs_nudgezrampmin,           &
801                   model_config_rec%obs_nudgezmax,               &
802                   xlat,                                         &
803                   xlong,                                        &
804                   model_config_rec%start_year(id),              &
805                   model_config_rec%start_month(id),             &
806                   model_config_rec%start_day(id),               &
807                   model_config_rec%start_hour(id),              &
808                   model_config_rec%start_minute(id),            &
809                   model_config_rec%start_second(id),            &
810                   p00, t00, tlp,                                &
811                   zhalf, p_top,                                 &
812                   fdob,                                         &
813                   model_config_rec%obs_ipf_init,                &
814                   ids, ide, jds, jde, kds, kde,                 &
815                   ims, ime, jms, jme, kms, kme,                 &
816                   its, ite, jts, jte, kts, kte                  )
818 #endif
820    END SUBROUTINE phy_init
822 !=====================================================================
823    SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
824                 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu,  &
825                 ISICE, LUCATS, LUSEAS, ISN,                         &
826                 fractional_seaice,                                  &
827                 lu_state,                                           &
828                 allowed_to_read , usemonalb ,                       &
829                 ids, ide, jds, jde, kds, kde,                       &
830                 ims, ime, jms, jme, kms, kme,                       &
831                 its, ite, jts, jte, kts, kte                       )
833    USE module_wrf_error
834    IMPLICIT NONE
836 !---------------------------------------------------------------------
837    INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
838                                      ims, ime, jms, jme, kms, kme,   &
839                                      its, ite, jts, jte, kts, kte
841    INTEGER , INTENT(IN)           :: iswater, julday
842    REAL    , INTENT(IN)           :: cen_lat
843    CHARACTER(LEN=*), INTENT(IN)        :: mminlu
844    LOGICAL,  INTENT(IN)           :: allowed_to_read , usemonalb
845    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: lu_index, snowc, xice, snoalb 
846    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT  ) :: albedo, albbck, mavail, emiss, &
847                                                                embck,                         &
848                                                                znt, Z0, thc, xland, xicem
849    INTEGER , INTENT(INOUT)  :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
850    REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
852    REAL :: xice_threshold
853 !---------------------------------------------------------------------
854 ! Local
855    CHARACTER*256 LUTYPE
856    CHARACTER*80 :: message
857    INTEGER  :: landuse_unit, LS, LC, LI, LUN, NSN
858    INTEGER  :: i, j, itf, jtf, is, cats, seas, curs
859    INTEGER , PARAMETER :: OPEN_OK = 0
860    INTEGER :: ierr
861    INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
862    REAL    , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
863    REAL    , DIMENSION( max_cats )     :: SCFX
864 ! save these fields in case nest moves or has to be reinitialized
865 ! and this routine is called with allowed_to_read set to false
866 ! note that by saving these, we're locking in the same landuse for
867 ! the duration of a run; possible implications for long climate runs
868    LOGICAL :: found_lu, end_of_file
869    LOGICAL, EXTERNAL :: wrf_dm_on_monitor
871 !---------------------------------------------------------------------
873    CALL wrf_debug( 100 , 'top of landuse_init' )
875    NSN=-1  ! set this to suppress uninitalized data messages from tools
877   if ( fractional_seaice == 0 ) then
878      xice_threshold = 0.5
879   else if ( fractional_seaice == 1 ) then
880      xice_threshold = 0.02
881   endif
883 ! recover LU variables from state
884    IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
885       WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
886    ENDIF
887    curs = 1
888    DO cats = 1, max_cats
889      SCFX(cats) =           lu_state(curs)         ; curs = curs + 1
890      DO seas = 1, max_seas
891        ALBD(cats,seas) =    lu_state(curs)         ; curs = curs + 1
892        SLMO(cats,seas) =    lu_state(curs)         ; curs = curs + 1
893        SFEM(cats,seas) =    lu_state(curs)         ; curs = curs + 1
894        SFZ0(cats,seas) =    lu_state(curs)         ; curs = curs + 1
895        SFHC(cats,seas) =    lu_state(curs)         ; curs = curs + 1
896        THERIN(cats,seas) =  lu_state(curs)         ; curs = curs + 1
897      ENDDO
898    ENDDO
900 ! Determine season (summer=1, winter=2)
901    ISN=1
902    IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
903    IF(CEN_LAT.LT.0.0)ISN=3-ISN
905    FOUND_LU = .TRUE.
906    IF ( allowed_to_read ) THEN
907       landuse_unit = 29
908       IF ( wrf_dm_on_monitor() ) THEN
909         OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
910         IF ( ierr .NE. OPEN_OK ) THEN
911           WRITE(message,FMT='(A)') &
912           'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
913           CALL wrf_error_fatal ( message )
914         END IF
915       ENDIF
917 ! Read info from file LANDUSE.TBL
918 !     IF(MMINLU.EQ.'OLD ')THEN
919 !       ISWATER=7
920 !       ISICE=11
921 !     ELSE IF(MMINLU.EQ.'USGS')THEN
922 !       ISWATER=16
923 !       ISICE=24
924 !     ELSE IF(MMINLU.EQ.'SiB ')THEN
925 !       ISWATER=15
926 !       ISICE=16
927 !     ELSE IF(MMINLU.EQ.'LW12')THEN
928 !       ISWATER=15
929 !       ISICE=3
930 !     ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
931 !       ISICE = 15
932 !     ELSE
933 !        call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
934 !     ENDIF
935       call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
936       FOUND_LU = .FALSE.
937       end_of_file = .FALSE.
938 !!! BEGINNING OF 1999 LOOP
939  1999 CONTINUE
940       IF ( wrf_dm_on_monitor() ) THEN
941         READ (landuse_unit,*,END=2002)LUTYPE
942         GOTO 2003
943  2002   CONTINUE
944         CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
945         end_of_file = .TRUE.
946  2003   CONTINUE
947         IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
948         FOUND_LU = LUTYPE.EQ.MMINLU
949       ENDIF
950       CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
951       IF ( .NOT. end_of_file ) THEN
952         CALL wrf_dm_bcast_string(lutype, 256)
953         CALL wrf_dm_bcast_bytes (lucats,  IWORDSIZE )
954         CALL wrf_dm_bcast_bytes (luseas,  IWORDSIZE )
955         CALL wrf_dm_bcast_bytes (found_lu,  LWORDSIZE )
956         IF(FOUND_LU)THEN
957           LUN=LUCATS
958           NSN=LUSEAS
959             IF(LUTYPE.NE.'SSIB') THEN !this is not really true for ssib lsm (fds)
960             PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND',        &
961                    LUCATS,' CATEGORIES',LUSEAS,' SEASONS',     &
962                    ' WATER CATEGORY = ',ISWATER,               &
963                    ' SNOW CATEGORY = ',ISICE
964             ENDIF
965         ENDIF
966         DO ls=1,luseas
967           if ( wrf_dm_on_monitor() ) then
968             READ (landuse_unit,*)
969           endif
970           DO LC=1,LUCATS
971             IF(found_lu)THEN
972               IF ( wrf_dm_on_monitor() ) THEN
973                 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS),        &
974                            SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
975               ENDIF
976               CALL wrf_dm_bcast_bytes (LI,  IWORDSIZE )
977               IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
978             ELSE
979               IF ( wrf_dm_on_monitor() ) THEN
980                 READ (landuse_unit,*)
981               ENDIF
982             ENDIF
983           ENDDO
984         ENDDO
985         IF(NSN.EQ.1.AND.FOUND_LU) THEN
986            ISN = 1
987         END IF
988         CALL wrf_dm_bcast_bytes (albd,   max_cats * max_seas * RWORDSIZE )
989         CALL wrf_dm_bcast_bytes (slmo,   max_cats * max_seas * RWORDSIZE )
990         CALL wrf_dm_bcast_bytes (sfem,   max_cats * max_seas * RWORDSIZE )
991         CALL wrf_dm_bcast_bytes (sfz0,   max_cats * max_seas * RWORDSIZE )
992         CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
993         CALL wrf_dm_bcast_bytes (sfhc,   max_cats * max_seas * RWORDSIZE )
994         CALL wrf_dm_bcast_bytes (scfx,   max_cats *            RWORDSIZE )
995       ENDIF
997       IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
998 !!! END OF 1999 LOOP
1000       IF(.NOT. found_lu .OR. end_of_file )THEN
1001         CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
1002       ENDIF
1003     ENDIF  ! allowed_to_read
1005     IF(FOUND_LU)THEN
1006 ! Set arrays according to lu_index
1007       itf = min0(ite, ide-1)
1008       jtf = min0(jte, jde-1)
1009       IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
1010       DO j = jts, jtf
1011         DO i = its, itf
1012           IS=nint(lu_index(i,j))
1013           ! only do this check on read-in data
1014           IF(allowed_to_read)THEN
1015              IF(IS.LT.0.OR.IS.GT.LUN)THEN
1016                WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
1017                CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
1018              ENDIF
1019           ENDIF
1020 !   SET NO-DATA POINTS (IS=0) TO WATER
1021           IF(IS.EQ.0)THEN
1022             IS=ISWATER
1023           ENDIF
1024           IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.
1025           ALBEDO(I,J)=ALBBCK(I,J)
1026           IF(SNOWC(I,J) .GT. 0.5) THEN 
1027              IF (usemonalb) THEN
1028                  ALBEDO(I,J)=SNOALB(I,J)
1029              ELSE
1030                  ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
1031              ENDIF
1032           ENDIF
1033           THC(I,J)=THERIN(IS,ISN)/100.
1034           Z0(I,J)=SFZ0(IS,ISN)/100.
1035           ZNT(I,J)=Z0(I,J)
1036           EMBCK(I,J)=SFEM(IS,ISN)
1037           EMISS(I,J)=EMBCK(I,J)
1038           MAVAIL(I,J)=SLMO(IS,ISN)
1039           IF(IS.NE.ISWATER)THEN
1040             XLAND(I,J)=1.0
1041           ELSE
1042             XLAND(I,J)=2.0
1043           ENDIF
1044 !    SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
1045           XICEM(I,J)=XICE(I,J)
1046           IF(XICE(I,J).GE.xice_threshold)THEN
1047             XLAND(I,J)=1.0
1048             ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
1049             EMBCK(I,J)=SFEM(ISICE,ISN)
1050             IF (FRACTIONAL_SEAICE == 1) THEN
1051                ! The 0.08 value is the albedo over open water.
1052                ! The 0.98 value is the emissivity over open water.
1053                ALBEDO(I,J) = ( XICE(I,J) * ALBBCK(I,J) ) + ( (1.0-XICE(I,J)) * 0.08 )
1054                EMISS(I,J)  = ( XICE(I,J) * EMBCK(I,J)  ) + ( (1.0-XICE(I,J)) * 0.98 )
1055             ELSE
1056                ALBEDO(I,J)=ALBBCK(I,J)
1057                EMISS(I,J)=EMBCK(I,J)
1058             ENDIF
1059             THC(I,J)=THERIN(ISICE,ISN)/100.
1060             Z0(I,J)=SFZ0(ISICE,ISN)/100.
1061             ZNT(I,J)=Z0(I,J)
1062             MAVAIL(I,J)=SLMO(ISICE,ISN)
1063           ENDIF
1064         ENDDO
1065       ENDDO
1066     ENDIF
1067     if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
1068       CLOSE (landuse_unit)
1069     endif
1070     CALL wrf_debug( 100 , 'returning from of landuse_init' )
1072 ! restore LU variables from state
1073     curs = 1
1074     DO cats = 1, max_cats
1075       lu_state(curs) = SCFX(cats)                 ; curs = curs + 1
1076       DO seas = 1, max_seas
1077         lu_state(curs) = ALBD(cats,seas)          ; curs = curs + 1
1078         lu_state(curs) = SLMO(cats,seas)          ; curs = curs + 1
1079         lu_state(curs) = SFEM(cats,seas)          ; curs = curs + 1
1080         lu_state(curs) = SFZ0(cats,seas)          ; curs = curs + 1
1081         lu_state(curs) = SFHC(cats,seas)          ; curs = curs + 1
1082         lu_state(curs) = THERIN(cats,seas)        ; curs = curs + 1
1083       ENDDO
1084     ENDDO
1086 !-- fds (07/2010)
1087 !-- SSIB's 12-category vegetation parameters are defined in module_ssib_veg
1088 !-- Data in LANDUSE.TBL is only used temporarily until the first
1089 !-- call to SSIB, and also to set water/ice points properties
1090 !    IF(MMINLU.EQ.'SSIB')THEN
1091 !       CALL init_module_ssib_veg
1092 !       CALL wrf_message ( 'READING SSIB VEGETATION PARAMETERS' )
1093 !    ENDIF
1096    END SUBROUTINE landuse_init
1098 !=====================================================================
1099    SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW,       &
1100                       RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT,    &
1101                       levsiz,XLAT,n_ozmixm,                           &
1102                       cldfra_old,                                     & ! Optional
1103                       ozmixm,pin,                                     & ! Optional
1104                       m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,     & ! Optional
1105                       paerlev,n_aerosolc,                             &
1106                       sfull,shalf,pptop,swrad_scat,p_top,            &
1107                       config_flags,restart,                          &
1108                       allowed_to_read, start_of_simulation,          &
1109                       ids, ide, jds, jde, kds, kde,                  &
1110                       ims, ime, jms, jme, kms, kme,                  &
1111                       its, ite, jts, jte, kts, kte                   )
1112 !---------------------------------------------------------------------
1113    USE module_ra_rrtm      , ONLY : rrtminit
1114    USE module_ra_rrtmg_lw  , ONLY : rrtmg_lwinit
1115    USE module_ra_rrtmg_sw  , ONLY : rrtmg_swinit
1116    USE module_ra_cam       , ONLY : camradinit
1117    USE module_ra_sw        , ONLY : swinit
1118    USE module_ra_gsfcsw    , ONLY : gsfc_swinit
1119    USE module_ra_gfdleta   , ONLY : gfdletainit
1120 #if(NMM_CORE==1)
1121    USE module_ra_hwrf      , ONLY : hwrfrainit
1122 #endif
1123    USE module_ra_hs        , ONLY : hsinit
1124    USE module_domain
1125 !---------------------------------------------------------------------
1126    IMPLICIT NONE
1127 !---------------------------------------------------------------------
1128    INTEGER,  INTENT(IN)           :: id
1129    TYPE (grid_config_rec_type)    :: config_flags
1130    LOGICAL , INTENT(IN)           :: restart
1131    LOGICAL,  INTENT(IN)           :: allowed_to_read
1133    INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
1134                                      ims, ime, jms, jme, kms, kme,   &
1135                                      its, ite, jts, jte, kts, kte
1137    INTEGER , INTENT(IN)           :: JULDAY,JULYR
1138    REAL ,    INTENT(IN)           :: DT, RADT, cen_lat, GMT, pptop,  &
1139                                      swrad_scat, p_top
1140    LOGICAL,  INTENT(IN)           :: start_of_simulation
1142    INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
1143    INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
1145    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::  XLAT
1147    REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL,      &
1148           INTENT(INOUT) ::                                  OZMIXM
1150    REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
1151    REAL,  DIMENSION(paerlev), OPTIONAL, INTENT(INOUT)  ::         m_hybi
1152    REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL,     &
1153           INTENT(INOUT) ::                      aerosolc_1, aerosolc_2
1155    REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::          PIN
1157    INTEGER , INTENT(INOUT)        :: STEPRA
1158    INTEGER :: isn
1160    REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
1161    REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::           &
1162                                                            RTHRATEN, &
1163                                                          RTHRATENLW, &
1164                                                          RTHRATENSW, &
1165                                                              CLDFRA
1167    REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
1168                                                          CLDFRA_OLD
1170    REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
1171    LOGICAL :: etalw = .false.
1172    LOGICAL :: hwrflw= .false.
1173    LOGICAL :: camlw = .false.
1174 !   LOGICAL :: etamp = .false.
1175    LOGICAL :: acswalloc = .false.
1176    LOGICAL :: aclwalloc = .false.
1177    integer :: month,iday
1178    INTEGER :: i, j, k, itf, jtf, ktf
1179 !---------------------------------------------------------------------
1181    jtf=min0(jte,jde-1)
1182    ktf=min0(kte,kde-1)
1183    itf=min0(ite,ide-1)
1185 !---------------------------------------------------------------------
1187 !-- calculate radiation time step
1189     STEPRA = nint(RADT*60./DT)
1190     STEPRA = max(STEPRA,1)
1192 !-- initialization
1194    IF(start_of_simulation)THEN
1195      DO j=jts,jtf
1196      DO k=kts,ktf
1197      DO i=its,itf
1198         RTHRATEN(i,k,j)=0.
1199         RTHRATENLW(i,k,j)=0.
1200         RTHRATENSW(i,k,j)=0.
1201         CLDFRA(i,k,j)=0.
1202      ENDDO
1203      ENDDO
1204      ENDDO
1206      if( present(cldfra_old) ) then
1207         DO j=jts,jtf
1208         DO k=kts,ktf
1209         DO i=its,itf
1210            cldfra_old(i,k,j) = 0.
1211         ENDDO
1212         ENDDO
1213         ENDDO
1214      end if
1215    ENDIF
1217 !-- find out which microphysics option is used first
1219 !   mp_select: SELECT CASE(config_flags%mp_physics)
1221 !        CASE (ETAMPNEW)
1222 !             etamp = .true.
1224 !   END SELECT mp_select
1226 !-- chose long wave radiation scheme
1228    lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
1230         CASE (RRTMSCHEME)
1231              CALL rrtminit(                                 &
1232                            p_top, allowed_to_read ,         &
1233                            ids, ide, jds, jde, kds, kde,    &
1234                            ims, ime, jms, jme, kms, kme,    &
1235                            its, ite, jts, jte, kts, kte     )
1237         CASE (CAMLWSCHEME)
1238 #ifdef MAC_KLUDGE
1239              CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1240 #endif
1241              IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
1242                   PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND.  &
1243                   PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1)    &
1244                   .AND. PRESENT(AEROSOLC_2)) THEN
1245              CALL camradinit(                                  &
1246                          R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
1247                          ozmixm,pin,levsiz,XLAT,n_ozmixm,      &
1248                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1249                          paerlev, n_aerosolc,              &
1250                          ids, ide, jds, jde, kds, kde,     &
1251                          ims, ime, jms, jme, kms, kme,     &
1252                          its, ite, jts, jte, kts, kte      )
1253              ELSE
1254                 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
1255              ENDIF
1257              camlw = .true.
1258              aclwalloc = .true.
1260         CASE (RRTMG_LWSCHEME)
1261              CALL rrtmg_lwinit(                             &
1262                            p_top, allowed_to_read ,         &
1263                            ids, ide, jds, jde, kds, kde,    &
1264                            ims, ime, jms, jme, kms, kme,    &
1265                            its, ite, jts, jte, kts, kte     )
1267              aclwalloc = .true.
1269         CASE (GFDLLWSCHEME)
1270              CALL nl_get_start_month(id,month)
1271              CALL nl_get_start_day(id,iday)
1272              CALL gfdletainit(emiss,sfull,shalf,pptop,      &
1273                               julyr,month,iday,gmt,         &
1274                               config_flags,allowed_to_read, &
1275                               ids, ide, jds, jde, kds, kde, &
1276                               ims, ime, jms, jme, kms, kme, &
1277                               its, ite, jts, jte, kts, kte  )
1278              etalw = .true.
1279 #if(NMM_CORE==1)
1280         CASE (HWRFLWSCHEME)
1281              CALL nl_get_start_month(id,month)
1282              CALL nl_get_start_day(id,iday)
1283 ! test this with standard jul-day calls
1284 !     CALL nl_get_start_year(id,start_year)
1285 !     CALL nl_get_start_month(id,start_month)
1286 !     CALL nl_get_start_day(id,start_day)
1287 !     CALL nl_get_start_hour(id,start_hour)
1288 !     CALL nl_get_start_minute(id,start_minute)
1289 !     CALL nl_get_start_second(id,start_second)
1290 !     CALL jdn_sec(day_in_sec,start_year,start_month,start_day,0,0,0)
1291 !     CALL jdn_sec(day_in_sec_ref,start_year,1,1,0,0,0)
1292 !     julyr_start=start_year
1293 !     julday_start=(day_in_sec-day_in_sec_ref)/(3600.*24.)+1
1294 !     gmt_start=start_hour+real(start_minute)/60.+real(start_second)/3600.
1295               CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1296 !             CALL hwrfrainit(sfull,shalf,pptop,JULYR_start,MONTH,IDAY,GMT_start,&
1297                             config_flags,allowed_to_read ,                         &
1298                            kds, kde, kms, kme, kts, kte     )
1299              hwrflw = .true.
1300 #endif
1301         CASE (HELDSUAREZ)
1302              CALL hsinit(RTHRATEN,restart,             &
1303                          ids, ide, jds, jde, kds, kde, &
1304                          ims, ime, jms, jme, kms, kme, &
1305                          its, ite, jts, jte, kts, kte )
1307         CASE (FLGLWSCHEME)
1309         CASE DEFAULT
1311    END SELECT lwrad_select
1312 !-- initialize short wave radiation scheme
1314    swrad_select: SELECT CASE(config_flags%ra_sw_physics)
1316         CASE (SWRADSCHEME)
1317              CALL swinit(                                  &
1318                          swrad_scat,                       &
1319                          allowed_to_read ,                 &
1320                          ids, ide, jds, jde, kds, kde,     &
1321                          ims, ime, jms, jme, kms, kme,     &
1322                          its, ite, jts, jte, kts, kte      )
1324         CASE (CAMSWSCHEME)
1325 #ifdef MAC_KLUDGE
1326              CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
1327 #endif
1328              IF(.not.camlw)THEN
1329              CALL camradinit(                              &
1330                          R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop,               &
1331                          ozmixm,pin,levsiz,XLAT,n_ozmixm,     &
1332                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
1333                          paerlev, n_aerosolc,              &
1334                          ids, ide, jds, jde, kds, kde,     &
1335                          ims, ime, jms, jme, kms, kme,     &
1336                          its, ite, jts, jte, kts, kte      )
1337              ENDIF
1338              acswalloc = .true.
1340         CASE (GSFCSWSCHEME)
1341              CALL gsfc_swinit(cen_lat, allowed_to_read )
1343         CASE (RRTMG_SWSCHEME)
1344              CALL rrtmg_swinit(                             &
1345                            allowed_to_read ,                &
1346                            ids, ide, jds, jde, kds, kde,    &
1347                            ims, ime, jms, jme, kms, kme,    &
1348                            its, ite, jts, jte, kts, kte     )
1350              acswalloc = .true.
1352         CASE (GFDLSWSCHEME)
1353              IF(.not.etalw)THEN
1354              CALL nl_get_start_month(id,month)
1355              CALL nl_get_start_day(id,iday)
1356              CALL gfdletainit(emiss,sfull,shalf,pptop,      &
1357                               julyr,month,iday,gmt,         &
1358                               config_flags,allowed_to_read, &
1359                               ids, ide, jds, jde, kds, kde, &
1360                               ims, ime, jms, jme, kms, kme, &
1361                               its, ite, jts, jte, kts, kte  )
1362              ENDIF
1363 #if(NMM_CORE==1)
1364         CASE (HWRFSWSCHEME)
1365              IF(.not.hwrflw)THEN
1366              CALL nl_get_start_month(id,month)
1367              CALL nl_get_start_day(id,iday)
1368              CALL hwrfrainit(sfull,shalf,pptop,JULYR,MONTH,IDAY,GMT,&
1369                             config_flags,allowed_to_read,                          &
1370                            kds, kde, kms, kme, kts, kte     )
1371              ENDIF
1372 #endif
1373         CASE (FLGSWSCHEME)
1375         CASE DEFAULT
1377    END SELECT swrad_select
1379 #if ( EM_CORE == 1 ) 
1380    ! test for conditionally allocated arrays when using bucket_J
1382    IF(config_flags%bucket_J .gt. 0.0)THEN
1383      IF(.not. (acswalloc .and. aclwalloc))THEN
1384            CALL wrf_error_fatal ( 'Need CAM or RRTMG radiation for bucket_J option')
1385      ENDIF
1386    ENDIF
1387 #endif
1389    END SUBROUTINE ra_init
1391    SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,  &
1392                 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
1393                 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
1394                 num_soil_layers,TKE_PBL,mfshconv,               &
1395                 massflux_EDKF, entr_EDKF, detr_EDKF, & 
1396                 thl_up, thv_up, rt_up,       &
1397                 rv_up, rc_up, u_up, v_up,    &
1398                 frac_up, &
1399                 EXCH_H,VEGFRA,                                  &
1400                 SNOW,SNOWC, CANWAT,SMSTAV,                      &
1401                 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
1402                 IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,mavail,      &
1403                 SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB,   &
1404 #if  ( NMM_CORE == 1 )
1405                 Z0,XLAND,XICE,                                  &
1406 #else
1407                 ZNT,XLAND,XICE,                                 &
1408 #endif
1409                 SFCEVP,GRDFLX,                                  &
1410                 MMINLU,                                         &
1411                 ISNOWXY, ZSNSOXY, TSNOXY,                       &
1412                 SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY,         &
1413                 CANLIQXY, EAHXY, TAHXY, CMXY,                   &
1414                 CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY,      &
1415                 WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
1416                 STMASSXY, WOODXY, STBLCPXY, FASTCPXY,           &
1417                 XSAIXY,                                         &
1418                 T2MVXY, T2MBXY ,CHSTARXY,                       &
1419                 allowed_to_read,                                &
1420                 start_of_simulation,                            &
1421                 te_temf,cf3d_temf,wm_temf,                      & ! WA
1422 !                num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1423                 DZR, DZB, DZG,                                  & !Optional urban
1424                 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
1425                 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
1426                 TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
1427                 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,             & !Optional urban
1428                 TS_URB2D, FRC_URB2D, UTYPE_URB2D,               &
1429                 SF_URBAN_PHYSICS,                               & !Optional urban
1430                 NUM_URBAN_LAYERS,                               & !Optional multi-layer urban
1431                 TRB_URB4D,TW1_URB4D,TW2_URB4D,                  & !Optional multi-layer urban
1432                 TGB_URB4D,TLEV_URB3D,QLEV_URB3D,                & !Optional multi-layer urban
1433                 TW1LEV_URB3D,TW2LEV_URB3D,                      & !Optional multi-layer urban
1434                 TGLEV_URB3D,TFLEV_URB3D,                        & !Optional multi-layer urban
1435                 SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,            & !Optional multi-layer urban
1436                 SFVENT_URB3D,LFVENT_URB3D,                      & !Optional multi-layer urban
1437                 SFWIN1_URB3D,SFWIN2_URB3D,                      & !Optional multi-layer urban
1438                 SFW1_URB3D,SFW2_URB3D,                          & !Optional multi-layer urban
1439                 SFR_URB3D,SFG_URB3D,                            & !Optional multi-layer urban
1440                 A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,                & !Optional multi-layer urban
1441                 A_E_BEP,B_U_BEP,B_V_BEP,                        & !Optional multi-layer urban
1442                 B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,                & !Optional multi-layer urban
1443                 DL_U_BEP,SF_BEP,VL_BEP,                         & !Optional multi-layer urban
1444                 ids, ide, jds, jde, kds, kde,                   &
1445                 ims, ime, jms, jme, kms, kme,                   &
1446                 its, ite, jts, jte, kts, kte,                   &
1447                 ACHFX,ACLHF,ACGRDFLX,                           &
1448                 oml_hml0, omlcall,                              & !Optional oml
1449                 TML,T0ML,HML,H0ML,HUML,HVML,TMOML               ) !Optional oml
1450 !--------------------------------------------------------------------
1451    USE module_sf_sfclay
1452    USE module_sf_sfclayrev
1453    USE module_sf_slab
1454    USE module_sf_pxsfclay
1455    USE module_bl_ysu
1456    USE module_bl_mrf
1457    USE module_bl_gfs
1458    USE module_bl_gfs2011, only : gfs2011init
1459    USE module_bl_acm
1460    USE module_sf_myjsfc
1461    USE module_sf_qnsesfc
1462    USE module_sf_noahdrv
1463    USE module_sf_noahmpdrv
1464    USE module_sf_urban
1465    USE module_sf_bep                                  !BEP
1466    USE module_sf_bep_bem
1467    USE module_sf_ruclsm
1468    USE module_sf_pxlsm
1469    USE module_sf_oml
1470    USE module_bl_myjpbl
1471    USE module_bl_myjurb
1472    USE module_bl_boulac
1473    USE module_bl_camuwpbl_driver, ONLY :  camuwpblinit
1474    USE module_bl_qnsepbl
1475    USE module_bl_qnsepbl09
1476    USE module_bl_mfshconvpbl
1477 #if ( EM_CORE == 1 )
1478    USE module_bl_mynn
1479    USE module_bl_temf
1480    USE module_sf_temfsfclay
1481    USE module_sf_mynn
1482 #endif
1484 #if (NMM_CORE == 1)
1485    USE module_sf_gfdl
1486 #endif
1487 !--------------------------------------------------------------------
1488    IMPLICIT NONE
1489 !--------------------------------------------------------------------
1490    TYPE (grid_config_rec_type) ::     config_flags
1491    LOGICAL , INTENT(IN)        :: restart
1492    LOGICAL, INTENT(IN)         ::   FNDSOILW, FNDSNOWH
1493    LOGICAL, INTENT(IN)         ::   RDMAXALB
1495    INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
1496                                       ims, ime, jms, jme, kms, kme, &
1497                                       its, ite, jts, jte, kts, kte
1498    INTEGER , INTENT(IN)        ::     num_soil_layers
1499    INTEGER , INTENT(IN)        ::     SF_URBAN_PHYSICS 
1501    REAL ,    INTENT(IN)        ::     DT, BLDT
1502    INTEGER , INTENT(INOUT)     ::     STEPBL
1504    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),    &
1505              INTENT(OUT) :: SMFR3D
1507    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1508                    INTENT(INOUT) :: SMOIS,SH2O,TSLB
1510    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
1511             INTENT(INOUT)    ::                           SNOW, &
1512                                                          SNOWH, &
1513                                                          SNOWC, &
1514                                                         SNOALB, &
1515                                                         CANWAT, &
1516                                                         MAVAIL, &
1517                                                         SMSTAV, &
1518                                                         SMSTOT, &
1519                                                      SFCRUNOFF, &
1520                                                       UDRUNOFF, &
1521                                                         ACSNOW, &
1522                                                         VEGFRA, &
1523                                                         ACSNOM, &
1524                                                         SFCEVP, &
1525                                                         GRDFLX, &
1526                                                            UST, &
1527 #if ( NMM_CORE == 1 )
1528                                                             Z0, &
1529 #else
1530                                                            ZNT, &
1531 #endif
1532                                                          XLAND, &
1533                                                          XICE
1535    INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
1536             INTENT(INOUT)    ::                         IVGTYP, &
1537                                                         ISLTYP, &
1538                                                         LOWLYR
1541    REAL,     DIMENSION(1:num_soil_layers), INTENT(INOUT)  ::  ZS,DZS
1543    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
1544                                                            RUBLTEN, &
1545                                                            RVBLTEN, &
1546                                                           EXCH_H,   &
1547                                                           RTHBLTEN, &
1548                                                           RQVBLTEN, &
1549                                                           RQCBLTEN, &
1550                                                           RQIBLTEN, &
1551                                                           TKE_PBL
1552    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
1553                               massflux_EDKF, entr_EDKF, detr_EDKF & 
1554                                      ,thl_up, thv_up, rt_up       &
1555                                      ,rv_up, rc_up, u_up, v_up    &
1556                                      ,frac_up
1558    INTEGER, INTENT(IN)           ::  mfshconv ! WRF JP
1560    REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::     TSK
1561    REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::  TMN
1562    CHARACTER(LEN=*), INTENT(IN)   :: MMINLU
1563    LOGICAL,  INTENT(IN)           :: allowed_to_read
1564    INTEGER,  INTENT(IN)           :: ISURBAN
1565    INTEGER :: isn, isfc
1566    INTEGER :: k
1568    REAL, OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
1569             INTENT(OUT) :: te_temf, cf3d_temf !WA 
1570    REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
1571             INTENT(OUT) :: wm_temf
1573 !Noah-MP
1575    INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
1576    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
1577    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
1578    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
1579    REAL,    OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
1580    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
1581    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
1582    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
1583    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
1584    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
1585    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
1586    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
1587    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
1588    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
1589    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
1590    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
1591    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
1592    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
1593    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
1594    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
1595    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
1596    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
1597    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
1598    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
1599    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
1600    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
1601    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
1602    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
1603    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
1604    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
1605    REAL,    OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
1607 !URBAN
1608 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR  !Optional urban
1609 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB  !Optional urban
1610 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG  !Optional urban
1611     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR  !Optional urban
1612     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB  !Optional urban
1613     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG  !Optional urban
1614     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1615     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1616     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1617     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1618     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1619     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1620     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1621     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1622     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1623     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1624     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1625     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1626     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1627     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1628     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1629     INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1630 !    REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1631 !    REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1632 !    REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1633     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1634     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1635     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1637     INTEGER , INTENT(IN)        ::     num_urban_layers
1638     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM
1639     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM
1640     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2_URB4D !Optional UCM
1641     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGB_URB4D !Optional UCM
1642     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TLEV_URB3D !Optional UCM
1643     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: QLEV_URB3D !Optional UCM
1644     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
1645     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
1646     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
1647     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
1648     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D  !multi-layer UCM
1649     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D  !multi-layer UCM
1650     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D  !multi-layer UCM
1651     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
1652     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
1653     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
1654     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
1655     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW1_URB3D !Optional UCM
1656     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM
1657     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM
1658     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM
1659    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP 
1660    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP 
1661    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP 
1662    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP 
1663    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP 
1664    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP 
1665    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP 
1666    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP 
1667    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP 
1668    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP 
1669    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
1670    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP 
1671    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme),INTENT(INOUT) :: SF_BEP
1672    REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
1674    REAL,  DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1675                                         ACHFX,ACLHF,ACGRDFLX
1676 ! Optional OML variables
1677    REAL,  DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1678                                         TML,T0ML,HML,H0ML,HUML,HVML,TMOML
1679    INTEGER,  OPTIONAL,  INTENT(IN) :: omlcall
1680    REAL,  OPTIONAL,  INTENT(IN) :: oml_hml0
1681    LOGICAL,  INTENT(IN) :: start_of_simulation
1682    INTEGER :: i,j
1685 #if ( EM_CORE == 1 )
1686 !local mynn 
1687    INTEGER :: mynn_closure_level
1688 #endif
1690 !-- calculate pbl time step
1692    STEPBL = nint(BLDT*60./DT)
1693    STEPBL = max(STEPBL,1)
1694 !-- initialization
1696    IF(PRESENT(ACHFX))THEN
1697    IF(.not.restart)THEN
1698      DO j=jts,jte
1699      DO i=its,ite
1700         ACHFX(i,j)=0.
1701         ACLHF(i,j)=0.
1702         ACGRDFLX(i,j)=0.
1703         SFCEVP(i,j)=0.
1704      ENDDO
1705      ENDDO
1706    ENDIF
1707    ENDIF
1709 !-- initialize surface layer scheme
1711    sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1713       CASE (SFCLAYSCHEME)
1714            CALL sfclayinit( allowed_to_read )
1715            isfc = 1
1716       CASE (SFCLAYREVSCHEME)
1717 !           CALL sfclayinit( allowed_to_read )
1718            isfc = 1
1719       CASE (PXSFCSCHEME)
1720            CALL pxsfclayinit( allowed_to_read )
1721            isfc = 7
1722       CASE (MYJSFCSCHEME)
1723            CALL myjsfcinit(LOWLYR,UST,                         &
1724 #if ( NMM_CORE == 1 )
1725                                       Z0,                      &
1726 #else
1727                                       ZNT,                     &
1728 #endif
1729                                           XLAND,XICE,          &
1730                          IVGTYP,restart,                       &
1731                          allowed_to_read ,                     &
1732                          ids, ide, jds, jde, kds, kde,         &
1733                          ims, ime, jms, jme, kms, kme,         &
1734                          its, ite, jts, jte, kts, kte          )
1735            isfc = 2
1737       CASE (QNSESFCSCHEME)
1738            CALL qnsesfcinit(LOWLYR,UST,                         &
1739 #if ( NMM_CORE == 1 )
1740                                       Z0,                      &
1741 #else
1742                                       ZNT,                     &
1743 #endif
1744                                           XLAND,XICE,          &
1745                          IVGTYP,restart,                       &
1746                          allowed_to_read ,                     &
1747                          ids, ide, jds, jde, kds, kde,         &
1748                          ims, ime, jms, jme, kms, kme,         &
1749                          its, ite, jts, jte, kts, kte          )
1750            isfc = 4
1752       CASE (GFSSFCSCHEME)
1753            CALL myjsfcinit(LOWLYR,UST,                         &
1754 #if ( NMM_CORE == 1 )
1755                                       Z0,                      &
1756 #else
1757                                       ZNT,                     &
1758 #endif
1759                                           XLAND,XICE,          &
1760                          IVGTYP,restart,                       &
1761                          allowed_to_read ,                     &
1762                          ids, ide, jds, jde, kds, kde,         &
1763                          ims, ime, jms, jme, kms, kme,         &
1764                          its, ite, jts, jte, kts, kte          )
1765            isfc = 2
1766 #if (NMM_CORE==1)
1767       CASE (GFDLSFCSCHEME)
1768            CALL myjsfcinit(LOWLYR,UST,                         &
1769                                       Z0,                      &
1770                                           XLAND,XICE,          &
1771                          IVGTYP,restart,                       &
1772                          allowed_to_read ,                     &
1773                          ids, ide, jds, jde, kds, kde,         &
1774                          ims, ime, jms, jme, kms, kme,         &
1775                          its, ite, jts, jte, kts, kte          )
1776            isfc = 2
1777 #endif
1779 #if ( EM_CORE == 1 )
1780 !mynn 
1782         CASE (MYNNSFCSCHEME)
1784            CALL mynn_sf_init_driver(allowed_to_read)
1785            isfc=5
1786 !          isfc=3
1788       CASE (TEMFSFCSCHEME)
1789            CALL wrf_debug( 100, 'calling temfsfclayinit' )
1790            CALL temfsfclayinit( restart, allowed_to_read ,        &
1791                              wm_temf,                          &
1792                          ids, ide, jds, jde, kds, kde,         &
1793                          ims, ime, jms, jme, kms, kme,         &
1794                          its, ite, jts, jte, kts, kte          )
1795 #endif
1797       CASE DEFAULT
1799    END SELECT sfclay_select
1802 !-- initialize surface scheme
1804    sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1806       CASE (SLABSCHEME)
1808            CALL slabinit(TSK,TMN,                              &
1809                          TSLB,ZS,DZS,num_soil_layers,          &
1810                          allowed_to_read ,start_of_simulation ,&
1811                          ids, ide, jds, jde, kds, kde,         &
1812                          ims, ime, jms, jme, kms, kme,         &
1813                          its, ite, jts, jte, kts, kte          )
1815 #if (NMM_CORE == 1)
1816      CASE (GFDLSLAB)
1817            CALL hwrfsfcinit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1818                      SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,     &
1819                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP,   &
1820                      TMN,                                          &
1821                      num_soil_layers,                              &
1822                      allowed_to_read ,                             &
1823                      ids,ide, jds,jde, kds,kde,                    &
1824                      ims,ime, jms,jme, kms,kme,                    &
1825                      its,ite, jts,jte, kts,kte                     )
1827 #endif
1828       CASE (LSMSCHEME)
1829           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
1830                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
1831                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1832                      MMINLU,                                   &
1833                      SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB,     &
1834                      num_soil_layers, restart,                 &
1835                      allowed_to_read ,                         &
1836                      ids,ide, jds,jde, kds,kde,                &
1837                      ims,ime, jms,jme, kms,kme,                &
1838                      its,ite, jts,jte, kts,kte                 )
1840 !URBAN
1841           IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
1843              IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1844                 
1845                 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers,                   & !urban
1846                                 sf_urban_physics)
1847 !                                num_roof_layers,num_wall_layers,road_soil_layers)   !urban
1848                                
1849                 
1850                 CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP,                     & !urban
1851                               ims,ime,jms,jme,kms,kme,num_soil_layers,               & !urban
1852 !                              num_roof_layers,num_wall_layers,num_road_layers, & !urban
1853                               restart,sf_urban_physics,                        & !urban
1854                               XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,     & !urban
1855                               TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,    & !urban
1856                               TRL_URB3D,TBL_URB3D,TGL_URB3D,                   & !urban
1857                               SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D,    & !urban
1858                               num_urban_layers,                                & !urban
1859                               TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D,         & !urban
1860                               TLEV_URB3D,QLEV_URB3D,                           & !urban
1861                               TW1LEV_URB3D,TW2LEV_URB3D,                       & !urban
1862                               TGLEV_URB3D,TFLEV_URB3D,                         & !urban
1863                               SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D,             & !urban
1864                               SFVENT_URB3D,LFVENT_URB3D,                       & !urban
1865                               SFWIN1_URB3D,SFWIN2_URB3D,                       & !urban
1866                               SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D,       & !urban
1867                               A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP,                 & !multi-layer urban
1868                               A_E_BEP,B_U_BEP,B_V_BEP,                         & !multi-layer urban
1869                               B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP,                 & !multi-layer urban
1870                               DL_U_BEP,SF_BEP,VL_BEP,                          & !multi-layer urban
1871                               FRC_URB2D, UTYPE_URB2D)                            !urban
1872              ELSE
1873                 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1874              ENDIF
1875           ENDIF
1877       CASE (NOAHMPSCHEME)
1878           CALL NOAHMP_INIT(MMINLU, SNOW,SNOWH,CANWAT,ISLTYP,                                &
1879                      TSLB,SMOIS,SH2O,DZS, FNDSOILW, FNDSNOWH,                               &
1880                      TSK,isnowxy  ,tvxy     ,tgxy     ,canicexy ,                           &
1881                      canliqxy ,eahxy    ,tahxy    ,cmxy     ,chxy     ,                     &
1882                      fwetxy   ,sneqvoxy ,alboldxy ,qsnowxy  ,wslakexy ,zwtxy    ,waxy     , &
1883                      wtxy     ,tsnoxy   ,zsnsoxy  ,snicexy  ,snliqxy  ,lfmassxy ,rtmassxy , &
1884                      stmassxy ,woodxy   ,stblcpxy ,fastcpxy ,xsaixy   ,                     &
1885                      t2mvxy   ,t2mbxy   ,chstarxy ,            &
1886                      num_soil_layers, restart,                 &
1887                      allowed_to_read ,                         &
1888                      ids,ide, jds,jde, kds,kde,                &
1889                      ims,ime, jms,jme, kms,kme,                &
1890                      its,ite, jts,jte, kts,kte                 )
1892       CASE (RUCLSMSCHEME)
1893 !          if(isfc .ne. 2)CALL wrf_error_fatal &
1894 !           ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1895            CALL ruclsminit( SH2O,SMFR3D,TSLB,SMOIS,ISLTYP,IVGTYP,MMINLU,XICE,  &
1896                      mavail,num_soil_layers, config_flags%iswater,      &
1897 #if (NMM_CORE == 1)
1898                      config_flags%isice, z0, restart,                  &
1899 #else
1900                      config_flags%isice, znt, restart,                  &
1901 #endif
1902                      allowed_to_read ,                             &
1903                      ids,ide, jds,jde, kds,kde,                    &
1904                      ims,ime, jms,jme, kms,kme,                    &
1905                      its,ite, jts,jte, kts,kte                     )
1907       CASE (PXLSMSCHEME)
1908           if(config_flags%num_land_cat .ne. 24) CALL wrf_error_fatal &
1909             ( 'module_physics_init: 24 cat USGS must be used with PX LSM option' )
1910           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
1911                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
1912                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1913                      MMINLU,                                   &
1914                      SNOALB, FNDSOILW, FNDSNOWH, RDMAXALB,     &
1915                      num_soil_layers, restart,                 &
1916                      allowed_to_read ,                         &
1917                      ids,ide, jds,jde, kds,kde,                &
1918                      ims,ime, jms,jme, kms,kme,                &
1919                      its,ite, jts,jte, kts,kte                 )
1921 !--------------fds (06/2010)-----------------------------------
1922      CASE  (SSIBSCHEME)
1923 !SSiB only works with sfclay and YSU schemes. Check this here!
1924           if(isfc .ne. 1)CALL wrf_error_fatal &
1925            ( 'module_physics_init: use sfclay scheme with SSiB' )
1926           if(config_flags%bl_pbl_physics .ne. 1)CALL wrf_error_fatal &
1927            ( 'module_physics_init: use ysu scheme with SSiB' )
1928 ! Add radiation scheme 4 (RRTMg) for SSiB, By Zhenxin 2011-06-20 ************************
1929           if(config_flags%ra_lw_physics .eq. 2 .or. config_flags%ra_lw_physics .gt. 4)CALL wrf_error_fatal &
1930            ( 'module_physics_init: SSiB only works with rrtm, cam scheme or rrtmg scheme (lw_phys=1,3,4)' )
1931           if(config_flags%ra_sw_physics .eq. 2 .or. config_flags%ra_sw_physics .gt. 4)CALL wrf_error_fatal &
1932            ( 'module_physics_init: SSiB only works with rrtm, cam scheme or rrtmg scheme (sw_phys=1,3,4)' )
1933 ! End of Adding radiation scheme 4 (RRTMg) for SSiB, By Zhenxin 2011-06-20 **************
1934 !--------------------------------------------------------------
1936       CASE DEFAULT
1938    END SELECT sfc_select
1940    IF(PRESENT(OMLCALL))THEN
1941      IF (omlcall .EQ. 1) THEN
1942         CALL omlinit(oml_hml0, tsk,                           &
1943                      tml,t0ml,hml,h0ml,huml,hvml,tmoml,       &
1944                      allowed_to_read, start_of_simulation,    &
1945                      ids,ide, jds,jde, kds,kde,               &
1946                      ims,ime, jms,jme, kms,kme,               &
1947                      its,ite, jts,jte, kts,kte                )
1948      ENDIF
1949    ENDIF
1951 !-- initialize pbl scheme
1953    pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1955       CASE (YSUSCHEME)
1956            if(isfc .ne. 1)CALL wrf_error_fatal &
1957             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1958            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1959             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1960            CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1961                         RQCBLTEN,RQIBLTEN,P_QI,               &
1962                         PARAM_FIRST_SCALAR,                   &
1963                         restart,                              &
1964                         allowed_to_read ,                     &
1965                         ids, ide, jds, jde, kds, kde,         &
1966                         ims, ime, jms, jme, kms, kme,         &
1967                         its, ite, jts, jte, kts, kte          )
1968       CASE (MRFSCHEME)
1969            if(isfc .ne. 1)CALL wrf_error_fatal &
1970             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1971            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1972             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1973            CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1974                         RQCBLTEN,RQIBLTEN,P_QI,               &
1975                         PARAM_FIRST_SCALAR,                   &
1976                         restart,                              &
1977                         allowed_to_read ,                     &
1978                         ids, ide, jds, jde, kds, kde,         &
1979                         ims, ime, jms, jme, kms, kme,         &
1980                         its, ite, jts, jte, kts, kte          )
1981       CASE (ACMPBLSCHEME)
1982            if(isfc .ne. 1 .and. isfc .ne. 7)CALL wrf_error_fatal &
1983             ( 'module_physics_init: use sfclay or pxsfc scheme for this pbl option' )
1984            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1985             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1986            CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1987                         RQCBLTEN,RQIBLTEN,P_QI,               &
1988                         PARAM_FIRST_SCALAR,                   &
1989                         restart,                              &
1990                         allowed_to_read ,                     &
1991                         ids, ide, jds, jde, kds, kde,         &
1992                         ims, ime, jms, jme, kms, kme,         &
1993                         its, ite, jts, jte, kts, kte          )
1994       CASE (GFSSCHEME)
1995            if(isfc .ne. 2)CALL wrf_error_fatal &
1996             ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1997            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
1998             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
1999            CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
2000                         RQCBLTEN,RQIBLTEN,P_QI,               &
2001                         PARAM_FIRST_SCALAR,                   &
2002                         restart,                              &
2003                         allowed_to_read ,                     &
2004                         ids, ide, jds, jde, kds, kde,         &
2005                         ims, ime, jms, jme, kms, kme,         &
2006                         its, ite, jts, jte, kts, kte          )
2007 #if (NMM_CORE == 1)
2008       CASE (GFS2011SCHEME)
2009            if(isfc .ne. 2)CALL wrf_error_fatal &
2010             ( 'module_physics_init: use myjsfc scheme for this pbl option' )
2011            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2012             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2013            CALL gfs2011init(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,&
2014                         RQCBLTEN,RQIBLTEN,P_QI,               &
2015                         PARAM_FIRST_SCALAR,                   &
2016                         restart,                              &
2017                         allowed_to_read ,                     &
2018                         ids, ide, jds, jde, kds, kde,         &
2019                         ims, ime, jms, jme, kms, kme,         &
2020                         its, ite, jts, jte, kts, kte          )
2021 #endif
2022       CASE (MYJPBLSCHEME)
2023            if(isfc .ne. 2)CALL wrf_error_fatal &
2024             ( 'module_physics_init: use myjsfc scheme for this pbl option' )
2025           IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN
2026            CALL myjurbinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2027                         TKE_PBL,EXCH_H,restart,               &
2028                         allowed_to_read ,                     &
2029                         ids, ide, jds, jde, kds, kde,         &
2030                         ims, ime, jms, jme, kms, kme,         &
2031                         its, ite, jts, jte, kts, kte          )
2032           ELSE
2034            CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2035                         TKE_PBL,EXCH_H,restart,               &
2036                         allowed_to_read ,                     &
2037                         ids, ide, jds, jde, kds, kde,         &
2038                         ims, ime, jms, jme, kms, kme,         &
2039                         its, ite, jts, jte, kts, kte          )
2040           END IF
2041       CASE (QNSEPBLSCHEME)
2042            if(isfc .ne. 4)CALL wrf_error_fatal &
2043             ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
2044            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2045             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2046            CALL qnsepblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2047                         TKE_PBL,EXCH_H,restart,               &
2048                         allowed_to_read ,                     &
2049                         ids, ide, jds, jde, kds, kde,         &
2050                         ims, ime, jms, jme, kms, kme,         &
2051                         its, ite, jts, jte, kts, kte          )
2052            
2053 !          IF ( PRESENT (mfshconv) ) THEN
2054               if (mfshconv.EQ.1) &
2055               CALL mfshconvpblinit( massflux_EDKF, entr_EDKF, detr_EDKF & 
2056                                     ,thl_up, thv_up, rt_up              &
2057                                     ,rv_up, rc_up, u_up, v_up           &
2058                                     ,frac_up, restart,                  &
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   )  
2063 !          ENDIF
2065       CASE (QNSEPBL09SCHEME)
2066            if(isfc .ne. 4)CALL wrf_error_fatal &
2067             ( 'module_physics_init: use qnsesfc scheme for this pbl option' )
2068            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2069             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2070            CALL qnsepblinit09(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2071                         TKE_PBL,EXCH_H,restart,               &
2072                         allowed_to_read ,                     &
2073                         ids, ide, jds, jde, kds, kde,         &
2074                         ims, ime, jms, jme, kms, kme,         &
2075                         its, ite, jts, jte, kts, kte          )
2077 #if (NMM_CORE != 1)
2078       CASE (BOULACSCHEME)
2079            if(isfc .ne. 1 .and. isfc .ne. 2)CALL wrf_error_fatal &
2080             ( 'module_physics_init: use sfclay or myjsfc scheme for this pbl option' )
2081            CALL boulacinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2082                          TKE_PBL,EXCH_H,restart,               &
2083                          allowed_to_read ,                     &
2084                          ids, ide, jds, jde, kds, kde,         &
2085                          ims, ime, jms, jme, kms, kme,         &
2086                          its, ite, jts, jte, kts, kte          )
2087         CASE (CAMUWPBLSCHEME)
2088            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2089             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2090            CALL camuwpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
2091                 restart,TKE_PBL,config_flags%grid_id,           &
2092                 ids, ide, jds, jde, kds, kde,         &
2093                 ims, ime, jms, jme, kms, kme,         &
2094                 its, ite, jts, jte, kts, kte          )
2095 #endif
2097 #if ( EM_CORE == 1 )
2099 !mynn 
2100            
2101         CASE (MYNNPBLSCHEME2, MYNNPBLSCHEME3)
2102            IF(isfc .NE. 5 .AND. isfc .NE. 1 .AND. isfc .NE. 2) CALL wrf_error_fatal &
2103                 ( 'module_physics_init: use mynnsfc or sfclay or myjsfc scheme for this pbl option')
2104            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2105             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2106            
2107            SELECT CASE(config_flags%bl_pbl_physics)
2109              CASE(MYNNPBLSCHEME2)
2110                 mynn_closure_level=2
2112              CASE(MYNNPBLSCHEME3)
2113                 mynn_closure_level=3
2115              CASE DEFAULT
2117            END SELECT
2119            CALL mynn_bl_init_driver(&
2120                 &RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN&
2121                 &,restart,allowed_to_read,mynn_closure_level &
2122                 &,IDS,IDE,JDS,JDE,KDS,KDE                    &
2123                 &,IMS,IME,JMS,JME,KMS,KME                    &
2124                 &,ITS,ITE,JTS,JTE,KTS,KTE)
2126       CASE (TEMFPBLSCHEME)
2127            ! if(isfc .ne. 0)CALL wrf_error_fatal &
2128            !  ( 'module_physics_init: use sfclay scheme = 0 for this pbl option' )
2129            IF ((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.EQ.3)) CALL wrf_error_fatal &
2130             ( 'module_physics_init: use myj (option 2) or boulac (option 8) with BEP/BEM urban scheme' )
2131          IF ( PRESENT( te_temf ) .AND. PRESENT( cf3d_temf )) THEN
2132            CALL temfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
2133                         RQCBLTEN,RQIBLTEN,P_QI,               &
2134                         PARAM_FIRST_SCALAR,                   &
2135                         restart,                              &
2136                         allowed_to_read ,                     &
2137                         te_temf,cf3d_temf,                    & ! WA
2138                         ids, ide, jds, jde, kds, kde,         &
2139                         ims, ime, jms, jme, kms, kme,         &
2140                         its, ite, jts, jte, kts, kte          )
2141              ELSE
2142                 CALL wrf_error_fatal ( 'arguments not present for calling TEMF scheme' )
2143          ENDIF
2145 #endif
2147       CASE DEFAULT
2149    END SELECT pbl_select
2152    END SUBROUTINE bl_init
2154 !==================================================================
2155    SUBROUTINE cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN,     &
2156                       RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN,&
2157                       NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
2158                       CLDEFI,LOWLYR,MASS_FLUX,                     &
2159                       RTHFTEN, RQVFTEN,                            &
2160                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,           &
2161                       APR_CAPMA,APR_CAPME,APR_CAPMI,               &
2162                       cugd_tten,cugd_ttens,cugd_qvten,             &
2163                       cugd_qvtens,cugd_qcten,                      &
2164                       allowed_to_read, start_of_simulation,        &
2165                       ids, ide, jds, jde, kds, kde,                &
2166                       ims, ime, jms, jme, kms, kme,                &
2167                       its, ite, jts, jte, kts, kte                 )
2168 !------------------------------------------------------------------
2169    USE module_cu_kf
2170    USE module_cu_kfeta
2171    USE MODULE_CU_BMJ
2172    USE module_cu_gd,  ONLY : GDINIT
2173    USE module_cu_g3,  ONLY : G3INIT
2174    USE module_cu_sas
2175    USE module_cu_osas
2176    USE module_cu_camzm_driver, ONLY : zm_conv_init
2177    USE module_cu_nsas
2178    USE module_cu_tiedtke
2179 !------------------------------------------------------------------
2180    IMPLICIT NONE
2181 !------------------------------------------------------------------
2182    TYPE (grid_config_rec_type) ::     config_flags
2183    LOGICAL , INTENT(IN)        :: restart
2186    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
2187                                   ims, ime, jms, jme, kms, kme,   &
2188                                   its, ite, jts, jte, kts, kte
2190    REAL ,    INTENT(IN)        :: DT, CUDT
2191    LOGICAL , INTENT(IN)        :: start_of_simulation
2192    LOGICAL , INTENT(IN)        :: allowed_to_read
2193    INTEGER , INTENT(INOUT)     :: STEPCU
2195    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::    &
2196             RUCUTEN, RVCUTEN, RTHCUTEN, &
2197             RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
2198    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
2199                         cugd_tten,cugd_ttens,cugd_qvten,            &
2200                         cugd_qvtens,cugd_qcten
2202    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
2204    REAL,    DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
2205             RTHFTEN, RQVFTEN
2207    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
2209    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
2211    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2213    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX,   &
2214                                    APR_GR,APR_W,APR_MC,APR_ST,APR_AS,    &
2215                                    APR_CAPMA,APR_CAPME,APR_CAPMI
2217    INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
2219 ! LOCAL VAR
2221   INTEGER :: i,j,itf,jtf
2223 !--------------------------------------------------------------------
2225 !-- calculate cumulus parameterization time step
2227    itf=min0(ite,ide-1)
2228    jtf=min0(jte,jde-1)
2230    STEPCU = nint(CUDT*60./DT)
2231    STEPCU = max(STEPCU,1)
2233 !-- initialization
2235    IF(start_of_simulation)THEN
2236      DO j=jts,jtf
2237      DO i=its,itf
2238         RAINC(i,j)=0.
2239         RAINCV(i,j)=0.
2240      ENDDO
2241      ENDDO
2242    ENDIF
2244 !-- deep convection and hybrid deep-shallow convection schemes
2245    cps_select: SELECT CASE(config_flags%cu_physics)
2247      CASE (KFSCHEME)
2248           CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,        &
2249                       RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
2250                       PARAM_FIRST_SCALAR,restart,                 &
2251                       allowed_to_read ,                           &
2252                       ids, ide, jds, jde, kds, kde,               &
2253                       ims, ime, jms, jme, kms, kme,               &
2254                       its, ite, jts, jte, kts, kte                )
2256      CASE (BMJSCHEME)
2257           CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,       &
2258                       CLDEFI,LOWLYR,cp,r_d,restart,               &
2259                       allowed_to_read ,                           &
2260                       ids, ide, jds, jde, kds, kde,               &
2261                       ims, ime, jms, jme, kms, kme,               &
2262                       its, ite, jts, jte, kts, kte                )
2264      CASE (KFETASCHEME)
2265           CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,   &
2266                       RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
2267                       SVP1,SVP2,SVP3,SVPT0,                       &
2268                       PARAM_FIRST_SCALAR,restart,                 &
2269                       allowed_to_read ,                           &
2270                       ids, ide, jds, jde, kds, kde,               &
2271                       ims, ime, jms, jme, kms, kme,               &
2272                       its, ite, jts, jte, kts, kte                )
2273      CASE (GDSCHEME)
2274           CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
2275                       MASS_FLUX,cp,restart,                       &
2276                       P_QC,P_QI,PARAM_FIRST_SCALAR,               &
2277                       RTHFTEN, RQVFTEN,                           &
2278                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
2279                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
2280                       allowed_to_read ,                           &
2281                       ids, ide, jds, jde, kds, kde,               &
2282                       ims, ime, jms, jme, kms, kme,               &
2283                       its, ite, jts, jte, kts, kte                )
2284      CASE (NSASSCHEME)
2285          CALL nsasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,       &
2286                       RUCUTEN,RVCUTEN,                            & 
2287                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
2288                       allowed_to_read ,                           &
2289                       ids, ide, jds, jde, kds, kde,               &
2290                       ims, ime, jms, jme, kms, kme,               &
2291                       its, ite, jts, jte, kts, kte                )
2293 #if ( EM_CORE == 1 )
2294      CASE (G3SCHEME)
2295           CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
2296                       MASS_FLUX,cp,restart,                       &
2297                       P_QC,P_QI,PARAM_FIRST_SCALAR,               &
2298                       RTHFTEN, RQVFTEN,                           &
2299                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
2300                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
2301                       cugd_tten,cugd_ttens,cugd_qvten,            &
2302                       cugd_qvtens,cugd_qcten,                     &
2303                       allowed_to_read ,                           &
2304                       ids, ide, jds, jde, kds, kde,               &
2305                       ims, ime, jms, jme, kms, kme,               &
2306                       its, ite, jts, jte, kts, kte                )
2307 #endif
2308      CASE (SASSCHEME)
2309           CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,       &
2310                       RUCUTEN,RVCUTEN,                            &   ! gopal's doing for SAS
2311                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
2312                       allowed_to_read ,                           &
2313                       ids, ide, jds, jde, kds, kde,               &
2314                       ims, ime, jms, jme, kms, kme,               &
2315                       its, ite, jts, jte, kts, kte                )
2317      CASE (OSASSCHEME)
2318           CALL osasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,      &
2319                       RUCUTEN,RVCUTEN,                            &   ! gopal's doing for SAS
2320                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
2321                       allowed_to_read ,                           &
2322                       ids, ide, jds, jde, kds, kde,               &
2323                       ims, ime, jms, jme, kms, kme,               &
2324                       its, ite, jts, jte, kts, kte                )
2326      CASE (CAMZMSCHEME)
2327           CALL zm_conv_init(rucuten, rvcuten, rthcuten, rqvcuten,       &
2328                       rqccuten, rqicuten,                               &
2329                       p_qc, p_qi, param_first_scalar,                   &
2330                       restart,                                          &
2331                       ids, ide, jds, jde, kds, kde,                     &
2332                       ims, ime, jms, jme, kms, kme,                     &
2333                       its, ite, jts, jte, kts, kte                      )
2335 ! Tiedtke Scheme - ZCX&YQW
2336       CASE (TIEDTKESCHEME)
2337           CALL tiedtkeinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,   &
2338                       RUCUTEN,RVCUTEN,                            & 
2339                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
2340                       allowed_to_read ,                           &
2341                       ids, ide, jds, jde, kds, kde,               &
2342                       ims, ime, jms, jme, kms, kme,               &
2343                       its, ite, jts, jte, kts, kte                )
2345      CASE DEFAULT
2347    END SELECT cps_select
2349    END SUBROUTINE cu_init
2351 !==================================================================
2352    SUBROUTINE shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN,   &
2353                       RQVSHTEN,RQRSHTEN,RQCSHTEN,                  &
2354                       RQSSHTEN,RQISHTEN,RQGSHTEN,                  &
2355                       NCA,RAINC,RAINCV,config_flags,restart,       &
2356                       allowed_to_read, start_of_simulation,        &
2357                       ids, ide, jds, jde, kds, kde,                &
2358                       ims, ime, jms, jme, kms, kme,                &
2359                       its, ite, jts, jte, kts, kte                 )
2360 !------------------------------------------------------------------
2361    USE uwshcu,        ONLY: init_uwshcu
2362    USE physconst,     ONLY: cpair, gravit, latice, latvap, mwdry, mwh2o, &
2363                             rair, zvir
2364    USE shr_kind_mod,  ONLY: r8 => shr_kind_r8
2366 !------------------------------------------------------------------
2367    IMPLICIT NONE
2368 !------------------------------------------------------------------
2369    TYPE (grid_config_rec_type) :: config_flags
2370    LOGICAL , INTENT(IN)        :: restart
2373    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
2374                                   ims, ime, jms, jme, kms, kme,   &
2375                                   its, ite, jts, jte, kts, kte
2377    REAL ,    INTENT(IN)        :: DT, CUDT
2378    LOGICAL , INTENT(IN)        :: start_of_simulation
2379    LOGICAL , INTENT(IN)        :: allowed_to_read
2380    INTEGER , INTENT(INOUT)     :: STEPCU
2382    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::    &
2383             RUSHTEN, RVSHTEN, RTHSHTEN, &
2384             RQVSHTEN, RQCSHTEN, RQRSHTEN, RQISHTEN, RQSSHTEN, RQGSHTEN
2386    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
2388    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
2390 ! LOCAL VAR
2392   INTEGER :: i,j,itf,jtf
2394 !--------------------------------------------------------------------
2396 ! Some of this stuff is redundant with deep convection, but redo it
2397 ! in case deep is turned off...
2399 !-- calculate cumulus parameterization time step
2401    itf=min0(ite,ide-1)
2402    jtf=min0(jte,jde-1)
2404    STEPCU = nint(CUDT*60./DT)
2405    STEPCU = max(STEPCU,1)
2407 !-- initialization
2409    IF(start_of_simulation)THEN
2410      DO j=jts,jtf
2411      DO i=its,itf
2412         RAINC(i,j)=0.
2413         RAINCV(i,j)=0.
2414      ENDDO
2415      ENDDO
2416    ENDIF
2418 !-- independent shallow convection schemes
2419    shcu_select: SELECT CASE(config_flags%shcu_physics)
2421    CASE (CAMUWSHCUSCHEME)
2422       CALL init_uwshcu(r8,latvap,cpair,latice,zvir,rair,gravit,      &
2423            mwh2o/mwdry,                                              &
2424            rushten, rvshten, rthshten, rqvshten,                     &
2425            rqcshten, rqrshten, rqishten, rqsshten, rqgshten,         &
2426            p_qc, p_qr, p_qi, p_qs, p_qg,                             &
2427            config_flags%bl_pbl_physics, param_first_scalar, restart, &
2428            config_flags%grid_id,                                     &
2429            ids, ide, jds, jde, kds, kde,                             &
2430            ims, ime, jms, jme, kms, kme,                             &
2431            its, ite, jts, jte, kts, kte                              )
2433    CASE DEFAULT
2435    END SELECT shcu_select
2437    END SUBROUTINE shcu_init
2439 !==================================================================
2440    SUBROUTINE mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain,      &
2441                       adv_moist_cond,                             &
2442                       MPDT, DT, DX, DY, LOWLYR,                   & ! for eta mp
2443                       F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,           & ! for eta mp
2444                       mp_restart_state,tbpvs_state,tbpvs0_state,   & ! eta mp
2445                       allowed_to_read, start_of_simulation,       &
2446                       ids, ide, jds, jde, kds, kde,               &
2447                       ims, ime, jms, jme, kms, kme,               &
2448                       its, ite, jts, jte, kts, kte                )
2449 !------------------------------------------------------------------
2450    USE module_mp_wsm3
2451    USE module_mp_wsm5
2452    USE module_mp_wsm6
2453    USE module_mp_etanew
2454    USE module_mp_etaold
2455 #if (NMM_CORE == 1)
2456    USE module_mp_HWRF
2457 #endif
2458    USE module_mp_thompson
2459    USE module_mp_morr_two_moment
2460    USE module_mp_milbrandt2mom
2461 !  USE module_mp_milbrandt3mom
2462    USE module_mp_wdm5
2463    USE module_mp_wdm6
2464 #if (EM_CORE==1)
2465    USE module_mp_nssl_2mom
2466 #endif
2467 !------------------------------------------------------------------
2468    IMPLICIT NONE
2469 !------------------------------------------------------------------
2470 ! Arguments
2471    TYPE (grid_config_rec_type) ::     config_flags
2472    LOGICAL , INTENT(IN)        :: restart
2473    LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
2474    REAL    , INTENT(IN)        :: MPDT, DT, DX, DY
2475    LOGICAL , INTENT(IN)        :: start_of_simulation
2477    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
2478                                   ims, ime, jms, jme, kms, kme,   &
2479                                   its, ite, jts, jte, kts, kte
2481    INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT)  :: LOWLYR
2482    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC,SNOWNC,GRAUPELNC
2483    REAL,     DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
2484                                   F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
2485    REAL , DIMENSION(:) ,INTENT(INOUT)  :: mp_restart_state,tbpvs_state,tbpvs0_state
2486    LOGICAL , INTENT(IN)  :: allowed_to_read
2488 ! Local
2489    INTEGER :: i, j, itf, jtf
2491    warm_rain = .false.
2492    adv_moist_cond = .true.
2493    itf=min0(ite,ide-1)
2494    jtf=min0(jte,jde-1)
2496    IF(start_of_simulation)THEN
2497      DO j=jts,jtf
2498      DO i=its,itf
2499         RAINNC(i,j) = 0.
2500         SNOWNC(i,j) = 0.
2501         GRAUPELNC(i,j) = 0.
2502      ENDDO
2503      ENDDO
2504    ENDIF
2506    mp_select: SELECT CASE(config_flags%mp_physics)
2508      CASE (KESSLERSCHEME)
2509           warm_rain = .true.
2510      CASE (WSM3SCHEME)
2511           CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2512      CASE (WSM5SCHEME)
2513           CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2514      CASE (WSM6SCHEME)
2515           CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
2516      CASE (ETAMPNEW)
2517          adv_moist_cond = .false.
2518          CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart,           &
2519                           F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
2520                           mp_restart_state,tbpvs_state,tbpvs0_state,&
2521                           allowed_to_read,                        &
2522                           ids, ide, jds, jde, kds, kde,           &
2523                           ims, ime, jms, jme, kms, kme,           &
2524                           its, ite, jts, jte, kts, kte            )
2525 #if(NMM_CORE==1)
2526      CASE (etamp_HWRF)
2527          CALL etanewinit_HWRF (MPDT,DT,DX,DY,LOWLYR,restart,           &
2528                           F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
2529                           allowed_to_read,                        &
2530                           ids, ide, jds, jde, kds, kde,           &
2531                           ims, ime, jms, jme, kms, kme,           &
2532                           its, ite, jts, jte, kts, kte            )
2533 #endif 
2534      CASE (THOMPSON)
2535 ! Cycling the WRF forecast with moving nests will cause this initialization to be
2536 ! called for each nest move. This is potentially very computationally expensive.
2537          IF(start_of_simulation.or.restart.or.config_flags%cycling)CALL thompson_init
2539      CASE (MORR_TWO_MOMENT)
2540          CALL morr_two_moment_init
2541      CASE (MILBRANDT2MOM)
2542          CALL milbrandt2mom_init
2543 !      CASE (MILBRANDT3MOM)
2544 !          CALL milbrandt3mom_init
2545      CASE (WDM5SCHEME)
2546           CALL wdm5init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2547      CASE (WDM6SCHEME)
2548           CALL wdm6init(rhoair0,rhowater,rhosnow,cliq,cpv,n_ccn0,allowed_to_read )
2549 #if (EM_CORE==1)
2550      CASE (NSSL_2MOM)
2551          CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme)
2552      CASE (NSSL_2MOMCCN)
2553          CALL nssl_2mom_init(ims,ime, jms,jme, kms,kme)
2554 #endif
2555      CASE (ETAMPOLD)
2556          adv_moist_cond = .false.
2557          CALL etaoldinit (MPDT,DT,DX,DY,LOWLYR,restart,           &
2558                           F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
2559                           mp_restart_state,tbpvs_state,tbpvs0_state,&
2560                           allowed_to_read,                        &
2561                           ids, ide, jds, jde, kds, kde,           &
2562                           ims, ime, jms, jme, kms, kme,           &
2563                           its, ite, jts, jte, kts, kte            )
2565      CASE DEFAULT
2567    END SELECT mp_select
2569    END SUBROUTINE mp_init
2571 #if  ( EM_CORE == 1 )
2572 !==========================================================
2573    SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,    &
2574                 RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,    &
2575                 config_flags,restart,                           &
2576                 allowed_to_read ,                               &
2577                 ids, ide, jds, jde, kds, kde,                   &
2578                 ims, ime, jms, jme, kms, kme,                   &
2579                 its, ite, jts, jte, kts, kte                    )
2582 !--------------------------------------------------------------------
2583    USE module_fdda_psufddagd
2584    USE module_fdda_spnudging, ONLY : fddaspnudginginit
2585 !--------------------------------------------------------------------
2586    IMPLICIT NONE
2587 !--------------------------------------------------------------------
2588    TYPE (grid_config_rec_type) ::     config_flags
2589    LOGICAL , INTENT(IN)        :: restart
2591    INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
2592                                       ims, ime, jms, jme, kms, kme, &
2593                                       its, ite, jts, jte, kts, kte
2595    REAL ,    INTENT(IN)        ::     DT, FGDT
2596    INTEGER , INTENT(IN)        ::     id
2597    INTEGER , INTENT(INOUT)     ::     STEPFG
2598    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
2599                                                            RUNDGDTEN, &
2600                                                            RVNDGDTEN, &
2601                                                           RTHNDGDTEN, &
2602                                                           RPHNDGDTEN, &
2603                                                           RQVNDGDTEN
2604    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
2606    LOGICAL,  INTENT(IN)           :: allowed_to_read
2607 !--------------------------------------------------------------------
2609 !-- calculate pbl time step
2611    STEPFG = nint(FGDT*60./DT)
2612    STEPFG = max(STEPFG,1)
2615 !-- initialize fdda scheme
2617    fdda_select: SELECT CASE(config_flags%grid_fdda)
2619       CASE (PSUFDDAGD)
2620            CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
2621                config_flags%run_hours, &
2622                config_flags%if_no_pbl_nudging_uv, &
2623                config_flags%if_no_pbl_nudging_t, &
2624                config_flags%if_no_pbl_nudging_q, &
2625                config_flags%if_zfac_uv, &
2626                config_flags%k_zfac_uv, &
2627                config_flags%if_zfac_t, &
2628                config_flags%k_zfac_t, &
2629                config_flags%if_zfac_q, &
2630                config_flags%k_zfac_q, &
2631                config_flags%guv, &
2632                config_flags%gt, config_flags%gq, &
2633                config_flags%if_ramping, config_flags%dtramp_min, &
2634                config_flags%auxinput10_end_h, &
2635                config_flags%grid_sfdda, &
2636                config_flags%guv_sfc, &
2637                config_flags%gt_sfc, &
2638                config_flags%gq_sfc, &
2639                       restart, allowed_to_read,                    &
2640                       ids, ide, jds, jde, kds, kde,                &
2641                       ims, ime, jms, jme, kms, kme,                &
2642                       its, ite, jts, jte, kts, kte                 )
2644       CASE (SPNUDGING)
2645            CALL fddaspnudginginit(id,rundgdten,rvndgdten,rthndgdten,rphndgdten,&
2646                config_flags%run_hours, &
2647                config_flags%if_no_pbl_nudging_uv, &
2648                config_flags%if_no_pbl_nudging_t, &
2649                config_flags%if_no_pbl_nudging_ph, &
2650                config_flags%if_zfac_uv, &
2651                config_flags%k_zfac_uv, &
2652                config_flags%dk_zfac_uv, &
2653                config_flags%if_zfac_t, &
2654                config_flags%k_zfac_t, &
2655                config_flags%dk_zfac_t, &
2656                config_flags%if_zfac_ph, &
2657                config_flags%k_zfac_ph, &
2658                config_flags%dk_zfac_ph, &
2659                config_flags%guv, &
2660                config_flags%gt, config_flags%gph, &
2661                config_flags%if_ramping, config_flags%dtramp_min, &
2662                config_flags%auxinput9_end_h, &
2663                config_flags%xwavenum,config_flags%ywavenum, &
2664                       restart, allowed_to_read,                    &
2665                       ids, ide, jds, jde, kds, kde,                &
2666                       ims, ime, jms, jme, kms, kme,                &
2667                       its, ite, jts, jte, kts, kte                 )
2669       CASE DEFAULT
2671    END SELECT fdda_select
2673    END SUBROUTINE fg_init
2675 !-------------------------------------------------------------------
2676    SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid,       &
2677                         idynin, dtramp, fdaend, restart,           &
2678                         obs_twindo_cg, obs_twindo, itimestep,      &
2679                         no_pbl_nudge_uv,                           &
2680                         no_pbl_nudge_t,                            &
2681                         no_pbl_nudge_q,                            &
2682                         sfc_scheme_horiz, sfc_scheme_vert,         &
2683                         maxsnd_gap,                                &
2684                         sfcfact, sfcfacr, dpsmx,                   &
2685                         nudge_wind, nudge_temp, nudge_mois,        &
2686                         nudgezfullr1_uv, nudgezrampr1_uv,          &
2687                         nudgezfullr2_uv, nudgezrampr2_uv,          &
2688                         nudgezfullr4_uv, nudgezrampr4_uv,          &
2689                         nudgezfullr1_t,  nudgezrampr1_t,           &
2690                         nudgezfullr2_t,  nudgezrampr2_t,           &
2691                         nudgezfullr4_t,  nudgezrampr4_t,           &
2692                         nudgezfullr1_q,  nudgezrampr1_q,           &
2693                         nudgezfullr2_q,  nudgezrampr2_q,           &
2694                         nudgezfullr4_q,  nudgezrampr4_q,           &
2695                         nudgezfullmin, nudgezrampmin, nudgezmax,   &
2696                         xlat, xlong,                               &
2697                         start_year, start_month, start_day,        &
2698                         start_hour, start_minute, start_second,    &
2699                         p00, t00, tlp,                             &
2700                         znu, p_top,                                &
2701                         fdob, ipf_init,                            &
2702                         ids, ide, jds, jde, kds, kde,              &
2703                         ims, ime, jms, jme, kms, kme,              &
2704                         its, ite, jts, jte, kts, kte               )
2706 !--------------------------------------------------------------------
2707    USE module_domain
2708    USE module_fddaobs_rtfdda
2709    USE module_llxy
2710 !--------------------------------------------------------------------
2711    IMPLICIT NONE
2712 !--------------------------------------------------------------------
2713    INTEGER , INTENT(IN)    :: maxdom
2714    INTEGER , INTENT(IN)    :: obs_nudge_opt(maxdom)
2715    INTEGER , INTENT(IN)    :: ids,ide, jds,jde, kds,kde,           &
2716                               ims,ime, jms,jme, kms,kme,           &
2717                               its,ite, jts,jte, kts,kte
2718    INTEGER , INTENT(IN)    :: inest
2719    INTEGER , INTENT(IN)    :: parid(maxdom)
2720    INTEGER , INTENT(IN)    :: idynin          ! flag for dynamic initialization
2721    REAL    , INTENT(IN)    :: dtramp          ! time period for ramping (idynin)
2722    REAL    , INTENT(IN)    :: fdaend(maxdom)  ! nudging end time for domain (min)
2723    LOGICAL , INTENT(IN)    :: restart
2724    REAL    , INTENT(IN)    :: obs_twindo_cg   ! twindo on course grid
2725    REAL    , INTENT(IN)    :: obs_twindo
2726    INTEGER , INTENT(IN)    :: itimestep
2727    INTEGER , INTENT(IN)    :: no_pbl_nudge_uv(maxdom)  ! flags for no wind nudging in pbl
2728    INTEGER , INTENT(IN)    :: no_pbl_nudge_t(maxdom)   ! flags for no temperature nudging in pbl
2729    INTEGER , INTENT(IN)    :: no_pbl_nudge_q(maxdom)   ! flags for no moisture nudging in pbl
2730    INTEGER , INTENT(IN)    :: sfc_scheme_horiz ! horizontal spreading scheme for surf obs (wrf or orig mm5)
2731    INTEGER , INTENT(IN)    :: sfc_scheme_vert  ! vertical   spreading scheme for surf obs (orig or regime vif)
2732    REAL    , INTENT(IN)    :: maxsnd_gap       ! max allowed pressure gap in soundings for interp (centibars) 
2733    REAL    , INTENT(IN)    :: sfcfact      ! scale factor applied to time window for surface obs
2734    REAL    , INTENT(IN)    :: sfcfacr      ! scale fac applied to horiz rad of infl for sfc obs
2735    REAL    , INTENT(IN)    :: dpsmx        ! max pressure change allowed within horiz. infl. range
2736    INTEGER , INTENT(IN)    :: nudge_wind(maxdom)       ! wind-nudging flag
2737    INTEGER , INTENT(IN)    :: nudge_temp(maxdom)       ! temperature-nudging flag
2738    INTEGER , INTENT(IN)    :: nudge_mois(maxdom)       ! moisture-nudging flag
2739    REAL    , INTENT(IN)    :: nudgezfullr1_uv  ! vert infl fcn, regime=1 full-wt   hght, winds
2740    REAL    , INTENT(IN)    :: nudgezrampr1_uv  ! vert infl fcn, regime=1 ramp down hght, winds
2741    REAL    , INTENT(IN)    :: nudgezfullr2_uv  ! vert infl fcn, regime=2 full-wt   hght, winds
2742    REAL    , INTENT(IN)    :: nudgezrampr2_uv  ! vert infl fcn, regime=2 ramp down hght, winds
2743    REAL    , INTENT(IN)    :: nudgezfullr4_uv  ! vert infl fcn, regime=4 full-wt   hght, winds
2744    REAL    , INTENT(IN)    :: nudgezrampr4_uv  ! vert infl fcn, regime=4 ramp down hght, winds
2745    REAL    , INTENT(IN)    :: nudgezfullr1_t   ! vert infl fcn, regime=1 full-wt   hght, temp
2746    REAL    , INTENT(IN)    :: nudgezrampr1_t   ! vert infl fcn, regime=1 ramp down hght, temp
2747    REAL    , INTENT(IN)    :: nudgezfullr2_t   ! vert infl fcn, regime=2 full-wt   hght, temp
2748    REAL    , INTENT(IN)    :: nudgezrampr2_t   ! vert infl fcn, regime=2 ramp down hght, temp
2749    REAL    , INTENT(IN)    :: nudgezfullr4_t   ! vert infl fcn, regime=4 full-wt   hght, temp
2750    REAL    , INTENT(IN)    :: nudgezrampr4_t   ! vert infl fcn, regime=4 ramp down hght, temp
2751    REAL    , INTENT(IN)    :: nudgezfullr1_q   ! vert infl fcn, regime=1 full-wt   hght, mois
2752    REAL    , INTENT(IN)    :: nudgezrampr1_q   ! vert infl fcn, regime=1 ramp down hght, mois
2753    REAL    , INTENT(IN)    :: nudgezfullr2_q   ! vert infl fcn, regime=2 full-wt   hght, mois
2754    REAL    , INTENT(IN)    :: nudgezrampr2_q   ! vert infl fcn, regime=2 ramp down hght, mois
2755    REAL    , INTENT(IN)    :: nudgezfullr4_q   ! vert infl fcn, regime=4 full-wt   hght, mois
2756    REAL    , INTENT(IN)    :: nudgezrampr4_q   ! vert infl fcn, regime=4 ramp down hght, mois
2757    REAL    , INTENT(IN)    :: nudgezfullmin    ! min dpth thru which vert infl fcn remains 1.0 (m)
2758    REAL    , INTENT(IN)    :: nudgezrampmin    ! min dpth thru which vif decreases 1.0 to 0.0 (m)
2759    REAL    , INTENT(IN)    :: nudgezmax        ! max dpth in which vif is nonzero (m)
2760    REAL    , INTENT(IN)    :: xlat ( ims:ime, jms:jme )        ! latitudes on mass-point grid
2761    REAL    , INTENT(IN)    :: xlong( ims:ime, jms:jme )        ! longitudes on mass-point grid
2762    INTEGER , INTENT(INOUT) :: start_year
2763    INTEGER , INTENT(INOUT) :: start_month
2764    INTEGER , INTENT(INOUT) :: start_day
2765    INTEGER , INTENT(INOUT) :: start_hour
2766    INTEGER , INTENT(INOUT) :: start_minute
2767    INTEGER , INTENT(INOUT) :: start_second
2768    REAL    , INTENT(IN)    :: p00                      ! base state pressure
2769    REAL    , INTENT(IN)    :: t00                      ! base state temperature
2770    REAL    , INTENT(IN)    :: tlp                      ! base state lapse rate
2771    REAL    , INTENT(IN)    :: znu( kms:kme )           ! eta values on half (mass) levels
2772    REAL    , INTENT(IN)    :: p_top                    ! pressure at top of model
2773    TYPE(fdob_type), INTENT(INOUT)  :: fdob
2775    INTEGER                 :: e_sn         ! ending   north-south grid index
2776    LOGICAL                 :: ipf_init     ! print warnings detected at initialzn
2777 !--------------------------------------------------------------------
2778 !-- initialize fdda obs-nudging scheme
2780       IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
2782       e_sn = jde
2783       CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid,       &
2784                         idynin, dtramp, fdaend, restart,           &
2785                         obs_twindo_cg,                             &
2786                         obs_twindo, itimestep,                     &
2787                         no_pbl_nudge_uv,                           &
2788                         no_pbl_nudge_t,                            &
2789                         no_pbl_nudge_q,                            &
2790                         sfc_scheme_horiz, sfc_scheme_vert,         &
2791                         maxsnd_gap,                                &
2792                         sfcfact, sfcfacr, dpsmx,                   &
2793                         nudge_wind, nudge_temp, nudge_mois,        &
2794                         nudgezfullr1_uv, nudgezrampr1_uv,          &
2795                         nudgezfullr2_uv, nudgezrampr2_uv,          &
2796                         nudgezfullr4_uv, nudgezrampr4_uv,          &
2797                         nudgezfullr1_t,  nudgezrampr1_t,           &
2798                         nudgezfullr2_t,  nudgezrampr2_t,           &
2799                         nudgezfullr4_t,  nudgezrampr4_t,           &
2800                         nudgezfullr1_q,  nudgezrampr1_q,           &
2801                         nudgezfullr2_q,  nudgezrampr2_q,           &
2802                         nudgezfullr4_q,  nudgezrampr4_q,           &
2803                         nudgezfullmin,  nudgezrampmin, nudgezmax,  &
2804                         xlat, xlong,                               &
2805                         start_year, start_month, start_day,        &
2806                         start_hour, start_minute, start_second,    &
2807                         p00, t00, tlp,                             &
2808                         znu, p_top,                                &
2809                         fdob, ipf_init,                            &
2810                         ids,ide, jds,jde, kds,kde,                 &
2811                         ims,ime, jms,jme, kms,kme,                 &
2812                         its,ite, jts,jte, kts,kte)
2814    END SUBROUTINE fdob_init
2815 #endif
2817 !--------------------------------------------------------------------
2818    SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
2819                 allowed_to_read , &
2820                 kds,kde,kms,kme,kts,kte)
2821    IMPLICIT NONE
2822 ! Arguments
2823    INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
2824    REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
2825    REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
2826    REAL , INTENT(IN) :: p_top
2827    REAL , INTENT(OUT) :: pptop
2828    TYPE (grid_config_rec_type)              :: config_flags
2829    LOGICAL , INTENT(IN) :: allowed_to_read
2830 ! Local
2831    REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
2832    INTEGER K
2834    IF(zf(kde/2) .GT. 1.0)THEN
2835 ! Height levels assumed (zeta coordinate)
2836 ! Convert to sigma using standard atmosphere for pressure-height relation
2837 ! constants for standard atmosphere definition
2838       r=287.05
2839       g=9.80665
2840       ts=288.15
2841       gamma=-6.5/1000.
2842       ps=1013.25
2843       ztrop=11000.
2844       tstrat=ts+gamma*ztrop
2845       ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
2847       do k=kde,kds,-1
2848 ! full levels
2849         z=zf(k)
2850         if(z.le.ztrop)then
2851           t=ts+gamma*z
2852           p=ps*(t/ts)**(-g/(gamma*r))
2853         else
2854           t=tstrat
2855           p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2856         endif
2857         if(k.eq.kde)then
2858           ztop=zf(k)
2859           ptop=p
2860         endif
2861         sf(k)=(p-ptop)/(ps-ptop)
2862 ! half levels
2863         if(k.ne.kds)then
2864         z=0.5*(zf(k)+zf(k-1))
2865         if(z.le.ztrop)then
2866           t=ts+gamma*z
2867           p=ps*(t/ts)**(-g/(gamma*r))
2868         else
2869           t=tstrat
2870           p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
2871         endif
2872         sh(k-1)=(p-ptop)/(ps-ptop)
2873         endif
2874       enddo
2875       pptop=ptop/10.
2876    ELSE
2877 !  Levels are already sigma/eta
2878       do k=kde,kds,-1
2879 !        sf(k)=zf(kde-k+kds)
2880 !        if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
2881          sf(k)=zf(k)
2882          if(k .ne. kde)sh(k)=zh(k)
2883       enddo
2884       pptop=p_top/1000.
2886    ENDIF
2888    END SUBROUTINE z2sigma
2890 END MODULE module_physics_init