Merge remote-tracking branch 'origin/release-v4.5.2'
[WRF.git] / wrftladj / module_physics_init_ad.F
bloba8920f6df653fa73d98b1537b80fbc1a357b21cf
1 !        Generated by TAPENADE     (INRIA, Tropics team)
2 !  Tapenade 3.6 (r4343) - 10 Feb 2012 10:52
4 !WRF:MODEL_LAYER:INITIALIZATION
6 !  This MODULE holds the routines which are used to perform model start-up operations
7 !  for the individual domains.  This is the stage after inputting wrfinput and before
8 !  calling 'integrate'.
9 !  This MODULE CONTAINS the following routines:
10 MODULE A_MODULE_PHYSICS_INIT
12    USE module_state_description
13    USE module_model_constants
14    USE module_configure, ONLY : grid_config_rec_type
16 CONTAINS
17 !  Differentiation of phy_init in reverse (adjoint) mode:
18 !   gradient     of useful results: rublten raincv rqccuten rthcuten
19 !                rainnc rainc rqvblten w0avg snownc rvblten graupelnc
20 !                rthblten graupelncv snowncv rqvcuten rainncv
21 !   with respect to varying inputs: rublten raincv rqccuten rthcuten
22 !                rainnc rainc rqvblten w0avg snownc rvblten graupelnc
23 !                rthblten graupelncv snowncv rqvcuten rainncv
24 !   RW status of diff variables: rublten:in-out raincv:in-out rqccuten:in-out
25 !                rthcuten:in-out rainnc:in-out rainc:in-out rqvblten:in-out
26 !                w0avg:in-out snownc:in-out rvblten:in-out graupelnc:in-out
27 !                rthblten:in-out graupelncv:in-out snowncv:in-out
28 !                rqvcuten:in-out rainncv:in-out
29 !=================================================================
30 !EMBCK new
31 ! temporary
32 !                        num_roof_layers,num_wall_layers,        & 
33 !                        num_road_layers,                        & 
34 ! WA 12/21/09
35 ! WA 9/27/10
36 ! WA 2/22/11
37   SUBROUTINE A_PHY_INIT(id, config_flags, dt, restart, zfull, zhalf, &
38 &    p_top, tsk, radt, bldt, cudt, mpdt, rucuten, rvcuten, rthcuten, &
39 &    rthcutenb, rqvcuten, rqvcutenb, rqrcuten, rqccuten, rqccutenb, &
40 &    rqscuten, rqicuten, rushten, rvshten, rthshten, rqvshten, rqrshten, &
41 &    rqcshten, rqsshten, rqishten, rqgshten, rublten, rubltenb, rvblten, &
42 &    rvbltenb, rthblten, rthbltenb, rqvblten, rqvbltenb, rqcblten, &
43 &    rqiblten, rthraten, rthratenlw, rthratensw, stepbl, stepra, stepcu, &
44 &    w0avg, w0avgb, rainnc, rainncb, rainc, raincb, raincv, raincvb, &
45 &    rainncv, rainncvb, snownc, snowncb, snowncv, snowncvb, graupelnc, &
46 &    graupelncb, graupelncv, graupelncvb, nca, swrad_scat, cldefi, lowlyr&
47 &    , mass_flux, rthften, rqvften, cldfra, cldfra_old, glw, gsw, emiss, &
48 &    embck, lu_index, landuse_isice, landuse_lucats, landuse_luseas, &
49 &    landuse_isn, lu_state, xlat, xlong, albedo, albbck, gmt, julyr, &
50 &    julday, levsiz, n_ozmixm, n_aerosolc, paerlev, alevsiz, no_src_types, tmn, xland, znt, z0, &
51 &    ust, mol, pblh, tke_pbl, exch_h, thc, snowc, mavail, hfx, qfx, &
52 &    rainbl, tslb, zs, dzs, num_soil_layers, warm_rain, adv_moist_cond, &
53 &    apr_gr, apr_w, apr_mc, apr_st, apr_as, apr_capma, apr_capme, &
54 &    apr_capmi, xice, xicem, vegfra, snow, canwat, smstav, smstot, &
55 &    sfcrunoff, udrunoff, grdflx, acsnow, acsnom, ivgtyp, isltyp, sfcevp&
56 &    , smois, sh2o, snowh, smfr3d, snoalb, dx, dy, f_ice_phy, f_rain_phy&
57 &    , f_rimef_phy, mp_restart_state, tbpvs_state, tbpvs0_state, &
58 &    allowed_to_read, moved, start_of_simulation, lagday, ids, ide, jds, &
59 &    jde, kds, kde, ims, ime, jms, jme, kms, kme, its, ite, jts, jte, kts&
60 &    , kte, num_urban_ndm,urban_map_zrd,urban_map_zwd,urban_map_gd,urban_map_zd,&
61 &    urban_map_zdf,urban_map_bd,urban_map_wd,urban_map_gbd,urban_map_fbd, &
62 &    NUM_URBAN_HI, raincv_a, raincv_b, gd_cloud, gd_cloud2, &
63 &    gd_cloud_a, gd_cloud2_a, gd_cloud_b, gd_cloud2_b, ozmixm, pin, &
64 &    m_ps_1, m_ps_2, m_hybi, aerosolc_1, aerosolc_2, rundgdten, rvndgdten&
65 &    , rthndgdten, rphndgdten, rqvndgdten, rmundgdten, fgdt, stepfg, &
66 &    cugd_tten, cugd_ttens, cugd_qvten, cugd_qvtens, cugd_qcten, isnowxy&
67 &    , zsnsoxy, tsnoxy, snicexy, snliqxy, tvxy, tgxy, canicexy, canliqxy&
68 &    , eahxy, tahxy, cmxy, chxy, fwetxy, sneqvoxy, alboldxy, qsnowxy, qrainxy,&
69 &    wslakexy, zwtxy, waxy, wtxy, lfmassxy, rtmassxy, stmassxy, woodxy, &
70 &    stblcpxy, fastcpxy, xsaixy, t2mvxy, t2mbxy, chstarxy, dzr, dzb, dzg&
71 &    , tr_urb2d, tb_urb2d, tg_urb2d, tc_urb2d, qc_urb2d, xxxr_urb2d, &
72 &    xxxb_urb2d, xxxg_urb2d, xxxc_urb2d, trl_urb3d, tbl_urb3d, tgl_urb3d&
73 &    , sh_urb2d, lh_urb2d, g_urb2d, rn_urb2d, ts_urb2d, frc_urb2d, &
74 &    utype_urb2d, trb_urb4d, tw1_urb4d, tw2_urb4d, tgb_urb4d, tlev_urb3d&
75 &    , qlev_urb3d, tw1lev_urb3d, tw2lev_urb3d, tglev_urb3d, tflev_urb3d, &
76 &    sf_ac_urb3d, lf_ac_urb3d, cm_ac_urb3d, sfvent_urb3d, lfvent_urb3d, &
77 &    sfwin1_urb3d, sfwin2_urb3d, sfw1_urb3d, sfw2_urb3d, sfr_urb3d, &
78 &    sfg_urb3d, a_u_bep, a_v_bep, a_t_bep, a_q_bep, a_e_bep, b_u_bep, &
79 &    b_v_bep, b_t_bep, b_q_bep, b_e_bep, dlg_bep, dl_u_bep, sf_bep, &
80 &    vl_bep, tml, t0ml, hml, h0ml, huml, hvml, tmoml, itimestep, fdob, &
81 &    t00, p00, tlp, tyr, tyra, tdly, tlag, nyear, nday, tmn_update, achfx&
82 &    , aclhf, acgrdflx, te_temf, cf3d_temf, wm_temf, massflux_edkf, &
83 &    entr_edkf, detr_edkf, thl_up, thv_up, rt_up, rv_up, rc_up, u_up, &
84 &    v_up, frac_up)
86     USE module_domain
87     USE module_wrf_error
89     IMPLICIT NONE
90 !-----------------------------------------------------------------
91 !-----------------------------------------------------------------
92     TYPE(GRID_CONFIG_REC_TYPE) :: config_flags
93     INTEGER, INTENT(IN) :: id
94     INTEGER, INTENT(IN), OPTIONAL :: tmn_update
95     LOGICAL, INTENT(OUT) :: warm_rain, adv_moist_cond
96 !   LOGICAL , INTENT (IN)       :: FNDSOILW, FNDSNOWH
97     LOGICAL, PARAMETER :: fndsoilw=.true., fndsnowh=.true.
98     INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde, ims, ime, jms, &
99 &    jme, kms, kme, its, ite, jts, jte, kts, kte
100     INTEGER, INTENT(IN) :: num_soil_layers
101     INTEGER, INTENT(IN) :: lagday
102     INTEGER, INTENT(OUT), OPTIONAL :: nyear
103     REAL, INTENT(OUT), OPTIONAL :: nday
104     LOGICAL, INTENT(IN) :: start_of_simulation
105     REAL, INTENT(IN) :: dt, p_top, dx, dy
106     LOGICAL, INTENT(IN) :: restart
107     REAL, INTENT(IN) :: radt, bldt, cudt, mpdt
108     REAL, INTENT(IN) :: swrad_scat
109     REAL, DIMENSION(kms:kme), INTENT(IN) :: zfull, zhalf
110     REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: tsk, xlat, xlong
111     INTEGER, INTENT(IN) :: levsiz, n_ozmixm
112     INTEGER, INTENT(IN) :: paerlev, n_aerosolc
113     INTEGER,      INTENT(IN   )    ::   alevsiz, no_src_types
114     REAL, DIMENSION(ims:ime, levsiz, jms:jme, n_ozmixm), OPTIONAL, &
115 &    INTENT(INOUT) :: ozmixm
116     REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: pin
117     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1&
118 &    , m_ps_2
119     REAL, DIMENSION(paerlev), OPTIONAL, INTENT(INOUT) :: m_hybi
120     REAL, DIMENSION(ims:ime, paerlev, jms:jme, n_aerosolc), OPTIONAL, &
121 &    INTENT(INOUT) :: aerosolc_1, aerosolc_2
122     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), INTENT(INOUT) ::&
123 &    smois, sh2o, tslb
124     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), INTENT(OUT) :: &
125 &    smfr3d
126     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: snow, snowc, &
127 &    snowh, canwat, smstav, smstot, sfcrunoff, udrunoff, sfcevp, grdflx, &
128 &    acsnow, xice, xicem, vegfra, acsnom
129     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: achfx&
130 &    , aclhf, acgrdflx
131     INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: ivgtyp, &
132 &    isltyp
133 ! rad
134     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: rthraten&
135 &    , rthratenlw, rthratensw, cldfra
136     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) ::&
137 &    cldfra_old
138 !EMBCK new
139     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: gsw, albedo, &
140 &    albbck, glw, emiss, embck
141     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: snoalb
142     REAL, INTENT(IN) :: gmt
143     INTEGER, INTENT(OUT) :: stepra, stepbl, stepcu
144     INTEGER, INTENT(IN) :: julyr, julday
145 ! cps
146     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: rucuten, rvcuten, &
147 &    rthcuten, rqvcuten, rqrcuten, rqccuten, rqscuten, rqicuten, rushten&
148 &    , rvshten, rthshten, rqvshten, rqrshten, rqcshten, rqsshten, &
149 &    rqishten, rqgshten
150     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: rthcutenb, rqvcutenb, &
151 &    rqccutenb
152     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: w0avg
153     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: w0avgb
154     REAL, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: mass_flux, apr_gr&
155 &    , apr_w, apr_mc, apr_st, apr_as, apr_capma, apr_capme, apr_capmi
156     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(OUT) :: rthften, &
157 &    rqvften
158     REAL, DIMENSION(ims:ime, jms:jme) :: rainnc, rainc, raincv, rainncv&
159 &    , snownc, snowncv, graupelnc, graupelncv
160     REAL, DIMENSION(ims:ime, jms:jme) :: rainncb, raincb, raincvb, &
161 &    rainncvb, snowncb, snowncvb, graupelncb, graupelncvb
162     REAL, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: cldefi, nca
163     INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: lowlyr
164 !pbl
165 ! soil layer
166     REAL, DIMENSION(num_soil_layers), INTENT(INOUT) :: zs, dzs
167     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: rublten, rvblten, &
168 &    rthblten, rqvblten, rqcblten, rqiblten, exch_h, tke_pbl
169     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: rubltenb, rvbltenb, &
170 &    rthbltenb, rqvbltenb
171     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(OUT), OPTIONAL ::&
172 &    massflux_edkf, entr_edkf, detr_edkf, thl_up, thv_up, rt_up, rv_up, &
173 &    rc_up, u_up, v_up, frac_up
174     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(OUT) ::&
175 &    cugd_tten, cugd_ttens, cugd_qvten, cugd_qvtens, cugd_qcten
176     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: xland, znt, z0, &
177 &    ust, mol, lu_index, pblh, thc, mavail, hfx, qfx, rainbl
178     INTEGER, INTENT(INOUT) :: landuse_isice, landuse_lucats
179     INTEGER, INTENT(INOUT) :: landuse_luseas, landuse_isn
180     REAL, DIMENSION(:), INTENT(INOUT) :: lu_state
181     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: tmn
182     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT), OPTIONAL :: tyr
183     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT), OPTIONAL :: tyra
184     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT), OPTIONAL :: tdly
185     REAL, DIMENSION(ims:ime, lagday, jms:jme), INTENT(INOUT), OPTIONAL &
186 &    :: tlag
187     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
188 &    :: gd_cloud, gd_cloud2, gd_cloud_a, gd_cloud2_a, gd_cloud_b, &
189 &    gd_cloud2_b
190     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: raincv_a, &
191 &    raincv_b
192 !Noah-MP
193     INTEGER, DIMENSION(ims:ime, jms:jme), OPTIONAL :: isnowxy
194     REAL, DIMENSION(ims:ime, -2:num_soil_layers, jms:jme), OPTIONAL :: &
195 &    zsnsoxy
196     REAL, DIMENSION(ims:ime, -2:0, jms:jme), OPTIONAL :: tsnoxy
197     REAL, DIMENSION(ims:ime, -2:0, jms:jme), OPTIONAL :: snicexy
198     REAL, DIMENSION(ims:ime, -2:0, jms:jme), OPTIONAL :: snliqxy
199     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: tvxy
200     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: tgxy
201     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: canicexy
202     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: canliqxy
203     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: eahxy
204     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: tahxy
205     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: cmxy
206     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: chxy
207     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: fwetxy
208     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: sneqvoxy
209     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: alboldxy
210     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: qsnowxy
211     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: qrainxy
212     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: wslakexy
213     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: zwtxy
214     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: waxy
215     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: wtxy
216     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: lfmassxy
217     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: rtmassxy
218     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: stmassxy
219     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: woodxy
220     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: stblcpxy
221     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: fastcpxy
222     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: xsaixy
223     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: t2mvxy
224     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: t2mbxy
225     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: chstarxy
227     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(OUT) :: f_ice_phy&
228 &    , f_rain_phy, f_rimef_phy
229     REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state, tbpvs_state, &
230 &    tbpvs0_state
231     LOGICAL, INTENT(IN) :: allowed_to_read, moved
232 ! ocean mixed layer
233     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: tml, &
234 &    t0ml, hml, h0ml, huml, hvml, tmoml
235 !fdda
236     REAL, OPTIONAL, INTENT(IN) :: fgdt
237     INTEGER, OPTIONAL, INTENT(OUT) :: stepfg
238     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) ::&
239 &    rundgdten, rvndgdten, rthndgdten, rphndgdten, rqvndgdten
240     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
241 &    rmundgdten
242 !URBAN
243 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR   !urban
244 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB   !urban
245 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG   !urban
246 !urban
247     REAL, DIMENSION(num_soil_layers), OPTIONAL, INTENT(INOUT) :: dzr
248 !urban
249     REAL, DIMENSION(num_soil_layers), OPTIONAL, INTENT(INOUT) :: dzb
250 !urban
251     REAL, DIMENSION(num_soil_layers), OPTIONAL, INTENT(INOUT) :: dzg
252 !urban
253     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
254 &    tr_urb2d
255 !urban
256     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
257 &    tb_urb2d
258 !urban
259     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
260 &    tg_urb2d
261 !urban
262     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
263 &    tc_urb2d
264 !urban
265     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
266 &    qc_urb2d
267 !urban
268     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
269 &    xxxr_urb2d
270 !urban
271     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
272 &    xxxb_urb2d
273 !urban
274     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
275 &    xxxg_urb2d
276 !urban
277     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
278 &    xxxc_urb2d
279 !   REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
280 !   REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
281 !   REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
282 !urban
283     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), OPTIONAL, &
284 &    INTENT(INOUT) :: trl_urb3d
285 !urban
286     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), OPTIONAL, &
287 &    INTENT(INOUT) :: tbl_urb3d
288 !urban
289     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), OPTIONAL, &
290 &    INTENT(INOUT) :: tgl_urb3d
291 !urban
292     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
293 &    sh_urb2d
294 !urban
295     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
296 &    lh_urb2d
297 !urban
298     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
299 &    g_urb2d
300 !urban
301     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
302 &    rn_urb2d
303 !urban
304     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
305 &    ts_urb2d
306 !urban
307     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
308 &    frc_urb2d
309 !urban
310     INTEGER, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
311 &    utype_urb2d
312     INTEGER , INTENT(IN)        :: num_urban_ndm
313     INTEGER , INTENT(IN)        :: urban_map_zrd
314     INTEGER , INTENT(IN)        :: urban_map_zwd
315     INTEGER , INTENT(IN)        :: urban_map_gd
316     INTEGER , INTENT(IN)        :: urban_map_zd
317     INTEGER , INTENT(IN)        :: urban_map_zdf
318     INTEGER , INTENT(IN)        :: urban_map_bd
319     INTEGER , INTENT(IN)        :: urban_map_wd
320     INTEGER , INTENT(IN)        :: urban_map_gbd
321     INTEGER , INTENT(IN)        :: urban_map_fbd
322     INTEGER , INTENT(IN)        :: num_urban_hi
323 ! multi-layer UCM
324     REAL, DIMENSION(ims:ime, urban_map_zrd, jms:jme), OPTIONAL, &
325 &    INTENT(INOUT) :: trb_urb4d
326 ! multi-layer UCM
327     REAL, DIMENSION(ims:ime, urban_map_zwd, jms:jme), OPTIONAL, &
328 &    INTENT(INOUT) :: tw1_urb4d
329 ! multi-layer UCM
330     REAL, DIMENSION(ims:ime, urban_map_zwd, jms:jme), OPTIONAL, &
331 &    INTENT(INOUT) :: tw2_urb4d
332 ! multi-layer UCM
333     REAL, DIMENSION(ims:ime, urban_map_gd, jms:jme), OPTIONAL, &
334 &    INTENT(INOUT) :: tgb_urb4d
335 ! multi-layer UCM
336     REAL, DIMENSION(ims:ime, urban_map_bd, jms:jme), OPTIONAL, &
337 &    INTENT(INOUT) :: tlev_urb3d
338 ! multi-layer UCM
339     REAL, DIMENSION(ims:ime, urban_map_bd, jms:jme), OPTIONAL, &
340 &    INTENT(INOUT) :: qlev_urb3d
341 ! multi-layer UCM
342     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
343 &    INTENT(INOUT) :: tw1lev_urb3d
344 ! multi-layer UCM
345     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
346 &    INTENT(INOUT) :: tw2lev_urb3d
347 ! multi-layer UCM
348     REAL, DIMENSION(ims:ime, urban_map_gbd, jms:jme), OPTIONAL, &
349 &    INTENT(INOUT) :: tglev_urb3d
350 ! multi-layer UCM
351     REAL, DIMENSION(ims:ime, urban_map_fbd, jms:jme), OPTIONAL, &
352 &    INTENT(INOUT) :: tflev_urb3d
353 !multi-layer UCM
354     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
355 &    lf_ac_urb3d
356 !multi-layer UCM
357     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
358 &    sf_ac_urb3d
359 !multi-layer UCM
360     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
361 &    cm_ac_urb3d
362 !multi-layer UCM
363     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
364 &    sfvent_urb3d
365 !multi-layer UCM
366     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
367 &    lfvent_urb3d
368 ! multi-layer UCM
369     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
370 &    INTENT(INOUT) :: sfwin1_urb3d
371 ! multi-layer UCM
372     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
373 &    INTENT(INOUT) :: sfwin2_urb3d
374 ! multi-layer UCM
375     REAL, DIMENSION(ims:ime, num_urban_ndm, jms:jme), OPTIONAL, &
376 &    INTENT(INOUT) :: sfg_urb3d
377 ! multi-layer UCM
378     REAL, DIMENSION(ims:ime, urban_map_zdf, jms:jme), OPTIONAL, &
379 &    INTENT(INOUT) :: sfr_urb3d
380 ! multi-layer UCM
381     REAL, DIMENSION(ims:ime, urban_map_zd, jms:jme), OPTIONAL, &
382 &    INTENT(INOUT) :: sfw1_urb3d
383 ! multi-layer UCM
384     REAL, DIMENSION(ims:ime, urban_map_zd, jms:jme), OPTIONAL, &
385 &    INTENT(INOUT) :: sfw2_urb3d
386     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
387 &    :: a_u_bep
388     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
389 &    :: a_v_bep
390     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
391 &    :: a_t_bep
392     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
393 &    :: a_q_bep
394     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
395 &    :: a_e_bep
396     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
397 &    :: b_u_bep
398     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
399 &    :: b_v_bep
400     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
401 &    :: b_t_bep
402     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
403 &    :: b_q_bep
404     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
405 &    :: b_e_bep
406     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
407 &    :: vl_bep
408     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
409 &    :: dlg_bep
410     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
411 &    :: sf_bep
412     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
413 &    :: dl_u_bep
414 !obs fdda
415     INTEGER, OPTIONAL, INTENT(IN) :: itimestep
416     TYPE(FDOB_TYPE), OPTIONAL, INTENT(INOUT) :: fdob
417 ! for obs-nudging base-state calcn
418     REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp
419 ! WA 12/21/09
420     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(OUT) ::&
421 &    te_temf, cf3d_temf
422 ! WA 2/22/11
423     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(OUT) :: wm_temf
424 ! Local data
425     REAL :: alblnd, zzlnd, zzwtr, thinld, xmava, cen_lat, pptop
426     REAL, DIMENSION(kms:kme) :: sfull, shalf
427     REAL :: obs_twindo_cg, obs_twindo
428     CHARACTER(len=256) :: mminlu_loc
429     CHARACTER(len=512) :: message
430     INTEGER :: iswater
431     INTEGER :: isice
432     INTEGER :: isurban
433     INTEGER :: sf_urban_physics
434     INTEGER :: sf_ocean_physics
435     REAL :: oml_hml0
436     LOGICAL :: usemonalb
437     LOGICAL :: rdmaxalb
438     INTEGER :: mfshconv
439     INTEGER :: i, j, k, itf, jtf, ktf, n
440     INTEGER :: myproc
441     INTEGER :: branch
442     INTRINSIC MIN0
443     INTRINSIC TRIM
444     INTRINSIC PRESENT
445 !-----------------------------------------------------------------
446 !-- should be from the namelist
447     IF (ite .GT. ide - 1) THEN
448       itf = ide - 1
449     ELSE
450       itf = ite
451     END IF
452     IF (jte .GT. jde - 1) THEN
453       jtf = jde - 1
454     ELSE
455       jtf = jte
456     END IF
457 !-- temporary fix by ww
458     IF (.NOT.restart) THEN
459 !-- initialize common variables
460       IF (.NOT.moved) THEN
461         CALL PUSHCONTROL2B(0)
462       ELSE
463         CALL PUSHCONTROL2B(1)
464       END IF
465     ELSE
466       CALL PUSHCONTROL2B(2)
467     END IF
468     CALL MP_INIT_B(rainnc, rainncb, snownc, snowncb, graupelnc, &
469 &             graupelncb, config_flags, restart, warm_rain, &
470 &             adv_moist_cond, mpdt, dt, dx, dy, lowlyr, f_ice_phy, &
471 &             f_rain_phy, f_rimef_phy, mp_restart_state, tbpvs_state, &
472 &             tbpvs0_state, allowed_to_read, start_of_simulation, ids, &
473 &             ide, jds, jde, kds, kde, ims, ime, jms, jme, kms, kme, its&
474 &             , ite, jts, jte, kts, kte)
475     CALL CU_INIT_B(dx, stepcu, cudt, dt, rucuten, rvcuten, rthcuten, &
476 &             rthcutenb, rqvcuten, rqvcutenb, rqrcuten, rqccuten, &
477 &             rqccutenb, rqscuten, rqicuten, nca, rainc, raincb, raincv, &
478 &             raincvb, w0avg, w0avgb, config_flags, restart, cldefi, &
479 &             lowlyr, mass_flux, rthften, rqvften, apr_gr, apr_w, apr_mc&
480 &             , apr_st, apr_as, apr_capma, apr_capme, apr_capmi, &
481 &             cugd_tten, cugd_ttens, cugd_qvten, cugd_qvtens, cugd_qcten&
482 &             , allowed_to_read, start_of_simulation, ids, ide, jds, jde&
483 &             , kds, kde, ims, ime, jms, jme, kms, kme, its, ite, jts, &
484 &             jte, kts, kte)
485     CALL BL_INIT_B(stepbl, bldt, dt, rublten, rubltenb, rvblten, &
486 &             rvbltenb, rthblten, rthbltenb, rqvblten, rqvbltenb, &
487 &             rqcblten, rqiblten, tsk, tmn, config_flags, restart, ust, &
488 &             lowlyr, tslb, zs, dzs, num_soil_layers, tke_pbl, mfshconv, &
489 &             massflux_edkf, entr_edkf, detr_edkf, thl_up, thv_up, rt_up&
490 &             , rv_up, rc_up, u_up, v_up, frac_up, exch_h, vegfra, snow, &
491 &             snowc, canwat, smstav, smstot, sfcrunoff, udrunoff, acsnow&
492 &             , acsnom, ivgtyp, isltyp, isurban, smois, smfr3d, mavail, &
493 &             snowh, sh2o, snoalb, fndsoilw, fndsnowh, rdmaxalb, znt, &
494 &             xland, xice, sfcevp, grdflx, TRIM(mminlu_loc), isnowxy, &
495 &             zsnsoxy, tsnoxy, snicexy, snliqxy, tvxy, tgxy, canicexy, &
496 &             canliqxy, eahxy, tahxy, cmxy, chxy, fwetxy, sneqvoxy, &
497 &             alboldxy, qsnowxy, qrainxy, wslakexy, zwtxy, waxy, wtxy, lfmassxy,&
498 &             rtmassxy, stmassxy, woodxy, stblcpxy, fastcpxy, xsaixy, &
499 &             t2mvxy, t2mbxy, chstarxy, allowed_to_read, &
500 &             start_of_simulation, te_temf, cf3d_temf, wm_temf, dzr, dzb&
501 &             , dzg, tr_urb2d, tb_urb2d, tg_urb2d, tc_urb2d, qc_urb2d, &
502 &             xxxr_urb2d, xxxb_urb2d, xxxg_urb2d, xxxc_urb2d, trl_urb3d, &
503 &             tbl_urb3d, tgl_urb3d, sh_urb2d, lh_urb2d, g_urb2d, rn_urb2d&
504 &             , ts_urb2d, frc_urb2d, utype_urb2d, sf_urban_physics, &
505 &             num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, &
506 &             urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, &
507 &             urban_map_gbd, urban_map_fbd, trb_urb4d, tw1_urb4d, tw2_urb4d, &
508 &             tgb_urb4d, tlev_urb3d, qlev_urb3d, tw1lev_urb3d, &
509 &             tw2lev_urb3d, tglev_urb3d, tflev_urb3d, sf_ac_urb3d, &
510 &             lf_ac_urb3d, cm_ac_urb3d, sfvent_urb3d, lfvent_urb3d, &
511 &             sfwin1_urb3d, sfwin2_urb3d, sfw1_urb3d, sfw2_urb3d, &
512 &             sfr_urb3d, sfg_urb3d, a_u_bep, a_v_bep, a_t_bep, a_q_bep, &
513 &             a_e_bep, b_u_bep, b_v_bep, b_t_bep, b_q_bep, b_e_bep, &
514 &             dlg_bep, dl_u_bep, sf_bep, vl_bep, ids, ide, jds, jde, kds&
515 &             , kde, ims, ime, jms, jme, kms, kme, its, ite, jts, jte, &
516 &             kts, kte, achfx, aclhf, acgrdflx, oml_hml0, sf_ocean_physics, tml, &
517 &             t0ml, hml, h0ml, huml, hvml, tmoml)
518     CALL POPCONTROL2B(branch)
519     IF (branch .EQ. 0) THEN
520       DO j=jtf,jts,-1
521         DO i=itf,its,-1
522           graupelncvb(i, j) = 0.0
523           snowncvb(i, j) = 0.0
524           rainncvb(i, j) = 0.0
525         END DO
526       END DO
527     END IF
528   END SUBROUTINE A_PHY_INIT
529 !=================================================================
530 ! WA
531 !                num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
532 !Optional urban
533 !Optional urban
534 !Optional urban
535 !Optional urban
536 !Optional urban
537 !Optional urban
538 !Optional multi-layer urban
539 !Optional multi-layer urban
540 !Optional multi-layer urban
541 !Optional multi-layer urban
542 !Optional multi-layer urban
543 !Optional multi-layer urban
544 !Optional multi-layer urban
545 !Optional multi-layer urban
546 !Optional multi-layer urban
547 !Optional multi-layer urban
548 !Optional multi-layer urban
549 !Optional multi-layer urban
550 !Optional multi-layer urban
551 !Optional multi-layer urban
552 !Optional oml
553   SUBROUTINE BL_INIT_B(stepbl, bldt, dt, rublten, rubltenb, rvblten, &
554 &    rvbltenb, rthblten, rthbltenb, rqvblten, rqvbltenb, rqcblten, &
555 &    rqiblten, tsk, tmn, config_flags, restart, ust, lowlyr, tslb, zs, &
556 &    dzs, num_soil_layers, tke_pbl, mfshconv, massflux_edkf, entr_edkf, &
557 &    detr_edkf, thl_up, thv_up, rt_up, rv_up, rc_up, u_up, v_up, frac_up&
558 &    , exch_h, vegfra, snow, snowc, canwat, smstav, smstot, sfcrunoff, &
559 &    udrunoff, acsnow, acsnom, ivgtyp, isltyp, isurban, smois, smfr3d, &
560 &    mavail, snowh, sh2o, snoalb, fndsoilw, fndsnowh, rdmaxalb, znt, &
561 &    xland, xice, sfcevp, grdflx, mminlu, isnowxy, zsnsoxy, tsnoxy, &
562 &    snicexy, snliqxy, tvxy, tgxy, canicexy, canliqxy, eahxy, tahxy, cmxy&
563 &    , chxy, fwetxy, sneqvoxy, alboldxy, qsnowxy, qrainxy, wslakexy, zwtxy, waxy,&
564 &    wtxy, lfmassxy, rtmassxy, stmassxy, woodxy, stblcpxy, fastcpxy, &
565 &    xsaixy, t2mvxy, t2mbxy, chstarxy, allowed_to_read, &
566 &    start_of_simulation, te_temf, cf3d_temf, wm_temf, dzr, dzb, dzg, &
567 &    tr_urb2d, tb_urb2d, tg_urb2d, tc_urb2d, qc_urb2d, xxxr_urb2d, &
568 &    xxxb_urb2d, xxxg_urb2d, xxxc_urb2d, trl_urb3d, tbl_urb3d, tgl_urb3d&
569 &    , sh_urb2d, lh_urb2d, g_urb2d, rn_urb2d, ts_urb2d, frc_urb2d, &
570 &    utype_urb2d, sf_urban_physics, num_urban_ndm, urban_map_zrd,&
571 &    urban_map_zwd, urban_map_gd, urban_map_zd, urban_map_zdf,urban_map_bd,&
572 &    urban_map_wd, urban_map_gbd, urban_map_fbd, trb_urb4d, &
573 &    tw1_urb4d, tw2_urb4d, tgb_urb4d, tlev_urb3d, qlev_urb3d, &
574 &    tw1lev_urb3d, tw2lev_urb3d, tglev_urb3d, tflev_urb3d, sf_ac_urb3d, &
575 &    lf_ac_urb3d, cm_ac_urb3d, sfvent_urb3d, lfvent_urb3d, sfwin1_urb3d, &
576 &    sfwin2_urb3d, sfw1_urb3d, sfw2_urb3d, sfr_urb3d, sfg_urb3d, a_u_bep&
577 &    , a_v_bep, a_t_bep, a_q_bep, a_e_bep, b_u_bep, b_v_bep, b_t_bep, &
578 &    b_q_bep, b_e_bep, dlg_bep, dl_u_bep, sf_bep, vl_bep, ids, ide, jds, &
579 &    jde, kds, kde, ims, ime, jms, jme, kms, kme, its, ite, jts, jte, kts&
580 &    , kte, achfx, aclhf, acgrdflx, oml_hml0, sf_ocean_physics, tml, t0ml, hml, &
581 &    h0ml, huml, hvml, tmoml)
583     USE a_module_bl_surface_drag, ONLY : surface_drag_init_b
585     IMPLICIT NONE
586 !Optional oml
587 !--------------------------------------------------------------------
588 !--------------------------------------------------------------------
589     TYPE(GRID_CONFIG_REC_TYPE) :: config_flags
590     LOGICAL, INTENT(IN) :: restart
591     LOGICAL, INTENT(IN) :: fndsoilw, fndsnowh
592     LOGICAL, INTENT(IN) :: rdmaxalb
593     INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde, ims, ime, jms, &
594 &    jme, kms, kme, its, ite, jts, jte, kts, kte
595     INTEGER, INTENT(IN) :: num_soil_layers
596     INTEGER, INTENT(IN) :: sf_urban_physics
597     REAL, INTENT(IN) :: dt, bldt
598     INTEGER, INTENT(INOUT) :: stepbl
599     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), INTENT(OUT) :: &
600 &    smfr3d
601     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), INTENT(INOUT) ::&
602 &    smois, sh2o, tslb
603     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: snow, snowh, &
604 &    snowc, snoalb, canwat, mavail, smstav, smstot, sfcrunoff, udrunoff, &
605 &    acsnow, vegfra, acsnom, sfcevp, grdflx, ust, znt, xland, xice
606     INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: ivgtyp, &
607 &    isltyp, lowlyr
608     REAL, DIMENSION(num_soil_layers), INTENT(INOUT) :: zs, dzs
609     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: rublten, rvblten, &
610 &    exch_h, rthblten, rqvblten, rqcblten, rqiblten, tke_pbl
611     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: rubltenb, rvbltenb, &
612 &    rthbltenb, rqvbltenb
613     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(OUT), OPTIONAL ::&
614 &    massflux_edkf, entr_edkf, detr_edkf, thl_up, thv_up, rt_up, rv_up, &
615 &    rc_up, u_up, v_up, frac_up
616 ! WRF JP
617     INTEGER, INTENT(IN) :: mfshconv
618     REAL, DIMENSION(ims:ime, jms:jme), INTENT(IN) :: tsk
619     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: tmn
620     CHARACTER(len=*), INTENT(IN) :: mminlu
621     LOGICAL, INTENT(IN) :: allowed_to_read
622     INTEGER, INTENT(IN) :: isurban
623     INTEGER :: isn, isfc
624     INTEGER :: k
625 !WA 
626     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(OUT) ::&
627 &    te_temf, cf3d_temf
628     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(OUT) :: wm_temf
629 !Noah-MP
630     INTEGER, DIMENSION(ims:ime, jms:jme), OPTIONAL :: isnowxy
631     REAL, DIMENSION(ims:ime, -2:num_soil_layers, jms:jme), OPTIONAL :: &
632 &    zsnsoxy
633     REAL, DIMENSION(ims:ime, -2:0, jms:jme), OPTIONAL :: tsnoxy
634     REAL, DIMENSION(ims:ime, -2:0, jms:jme), OPTIONAL :: snicexy
635     REAL, DIMENSION(ims:ime, -2:0, jms:jme), OPTIONAL :: snliqxy
636     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: tvxy
637     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: tgxy
638     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: canicexy
639     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: canliqxy
640     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: eahxy
641     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: tahxy
642     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: cmxy
643     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: chxy
644     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: fwetxy
645     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: sneqvoxy
646     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: alboldxy
647     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: qsnowxy
648     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: qrainxy
649     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: wslakexy
650     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: zwtxy
651     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: waxy
652     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: wtxy
653     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: lfmassxy
654     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: rtmassxy
655     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: stmassxy
656     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: woodxy
657     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: stblcpxy
658     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: fastcpxy
659     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: xsaixy
660     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: t2mvxy
661     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: t2mbxy
662     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL :: chstarxy
663 !URBAN
664 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR  !Optional urban
665 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB  !Optional urban
666 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG  !Optional urban
667 !Optional urban
668     REAL, DIMENSION(num_soil_layers), OPTIONAL, INTENT(INOUT) :: dzr
669 !Optional urban
670     REAL, DIMENSION(num_soil_layers), OPTIONAL, INTENT(INOUT) :: dzb
671 !Optional urban
672     REAL, DIMENSION(num_soil_layers), OPTIONAL, INTENT(INOUT) :: dzg
673 !Optional urban
674     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
675 &    tr_urb2d
676 !Optional urban
677     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
678 &    tb_urb2d
679 !Optional urban
680     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
681 &    tg_urb2d
682 !Optional urban
683     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
684 &    tc_urb2d
685 !Optional urban
686     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
687 &    qc_urb2d
688 !Optional urban
689     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
690 &    xxxr_urb2d
691 !Optional urban
692     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
693 &    xxxb_urb2d
694 !Optional urban
695     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
696 &    xxxg_urb2d
697 !Optional urban
698     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
699 &    xxxc_urb2d
700 !Optional urban
701     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
702 &    sh_urb2d
703 !Optional urban
704     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
705 &    lh_urb2d
706 !Optional urban
707     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
708 &    g_urb2d
709 !Optional urban
710     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
711 &    rn_urb2d
712 !Optional urban
713     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
714 &    ts_urb2d
715 !Optional urban
716     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
717 &    frc_urb2d
718 !Optional urban
719     INTEGER, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
720 &    utype_urb2d
721 !    REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
722 !    REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
723 !    REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
724 !Optional urban
725     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), OPTIONAL, &
726 &    INTENT(INOUT) :: trl_urb3d
727 !Optional urban
728     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), OPTIONAL, &
729 &    INTENT(INOUT) :: tbl_urb3d
730 !Optional urban
731     REAL, DIMENSION(ims:ime, num_soil_layers, jms:jme), OPTIONAL, &
732 &    INTENT(INOUT) :: tgl_urb3d
733     INTEGER, INTENT(IN) :: num_urban_ndm
734     INTEGER, INTENT(IN) :: urban_map_zrd
735     INTEGER, INTENT(IN) :: urban_map_zwd
736     INTEGER, INTENT(IN) :: urban_map_gd
737     INTEGER, INTENT(IN) :: urban_map_zd
738     INTEGER, INTENT(IN) :: urban_map_zdf
739     INTEGER, INTENT(IN) :: urban_map_bd
740     INTEGER, INTENT(IN) :: urban_map_wd
741     INTEGER, INTENT(IN) :: urban_map_gbd
742     INTEGER, INTENT(IN) :: urban_map_fbd
743 !Optional UCM
744     REAL, DIMENSION(ims:ime, urban_map_zrd, jms:jme), OPTIONAL, &
745 &    INTENT(INOUT) :: trb_urb4d
746 !Optional UCM
747     REAL, DIMENSION(ims:ime, urban_map_zwd, jms:jme), OPTIONAL, &
748 &    INTENT(INOUT) :: tw1_urb4d
749 !Optional UCM
750     REAL, DIMENSION(ims:ime, urban_map_zwd, jms:jme), OPTIONAL, &
751 &    INTENT(INOUT) :: tw2_urb4d
752 !Optional UCM
753     REAL, DIMENSION(ims:ime, urban_map_gd, jms:jme), OPTIONAL, &
754 &    INTENT(INOUT) :: tgb_urb4d
755 !Optional UCM
756     REAL, DIMENSION(ims:ime, urban_map_bd, jms:jme), OPTIONAL, &
757 &    INTENT(INOUT) :: tlev_urb3d
758 !Optional UCM
759     REAL, DIMENSION(ims:ime, urban_map_bd, jms:jme), OPTIONAL, &
760 &    INTENT(INOUT) :: qlev_urb3d
761 ! multi-layer UCM
762     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
763 &    INTENT(INOUT) :: tw1lev_urb3d
764 ! multi-layer UCM
765     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
766 &    INTENT(INOUT) :: tw2lev_urb3d
767 ! multi-layer UCM
768     REAL, DIMENSION(ims:ime, urban_map_gbd, jms:jme), OPTIONAL, &
769 &    INTENT(INOUT) :: tglev_urb3d
770 ! multi-layer UCM
771     REAL, DIMENSION(ims:ime, urban_map_fbd, jms:jme), OPTIONAL, &
772 &    INTENT(INOUT) :: tflev_urb3d
773 !multi-layer UCM
774     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
775 &    lf_ac_urb3d
776 !multi-layer UCM
777     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
778 &    sf_ac_urb3d
779 !multi-layer UCM
780     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
781 &    cm_ac_urb3d
782 !multi-layer UCM
783     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
784 &    sfvent_urb3d
785 !multi-layer UCM
786     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: &
787 &    lfvent_urb3d
788 ! multi-layer UCM
789     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
790 &    INTENT(INOUT) :: sfwin1_urb3d
791 ! multi-layer UCM
792     REAL, DIMENSION(ims:ime, urban_map_wd, jms:jme), OPTIONAL, &
793 &    INTENT(INOUT) :: sfwin2_urb3d
794 !Optional UCM
795     REAL, DIMENSION(ims:ime, urban_map_zd, jms:jme), OPTIONAL, &
796 &    INTENT(INOUT) :: sfw1_urb3d
797 !Optional UCM
798     REAL, DIMENSION(ims:ime, urban_map_zd, jms:jme), OPTIONAL, &
799 &    INTENT(INOUT) :: sfw2_urb3d
800 !Optional UCM
801     REAL, DIMENSION(ims:ime, urban_map_zdf, jms:jme), OPTIONAL, &
802 &    INTENT(INOUT) :: sfr_urb3d
803 !Optional UCM
804     REAL, DIMENSION(ims:ime, num_urban_ndm, jms:jme), OPTIONAL, &
805 &    INTENT(INOUT) :: sfg_urb3d
806     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
807 &    :: a_u_bep
808     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
809 &    :: a_v_bep
810     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
811 &    :: a_t_bep
812     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
813 &    :: a_q_bep
814     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
815 &    :: a_e_bep
816     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
817 &    :: b_u_bep
818     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
819 &    :: b_v_bep
820     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
821 &    :: b_t_bep
822     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
823 &    :: b_q_bep
824     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
825 &    :: b_e_bep
826     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
827 &    :: vl_bep
828     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
829 &    :: dlg_bep
830     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
831 &    :: sf_bep
832     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
833 &    :: dl_u_bep
834     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: achfx&
835 &    , aclhf, acgrdflx
836 ! Optional OML variables
837     REAL, DIMENSION(ims:ime, jms:jme), OPTIONAL, INTENT(INOUT) :: tml, &
838 &    t0ml, hml, h0ml, huml, hvml, tmoml
839     INTEGER, OPTIONAL, INTENT(IN) :: sf_ocean_physics
840     REAL, OPTIONAL, INTENT(IN) :: oml_hml0
841     LOGICAL, INTENT(IN) :: start_of_simulation
842     INTEGER :: i, j
843 !local mynn 
844     INTEGER :: mynn_closure_level
845 !-- calculate pbl time step
846     INTRINSIC MAX
847     INTRINSIC PRESENT
848     INTRINSIC NINT
849 !mynn 
850 !-- initialize pbl scheme
851     SELECT CASE  (config_flags%bl_pbl_physics) 
852     CASE (surfdragscheme) 
853       CALL SURFACE_DRAG_INIT_B(rublten, rubltenb, rvblten, rvbltenb, &
854 &                         rthblten, rthbltenb, rqvblten, rqvbltenb, &
855 &                         restart, ids, ide, jds, jde, kds, kde, ims, ime&
856 &                         , jms, jme, kms, kme, its, ite, jts, jte, kts, &
857 &                         kte)
858     END SELECT
859   END SUBROUTINE BL_INIT_B
860 !=====================================================================
861 !  Differentiation of cu_init in reverse (adjoint) mode:
862 !   gradient     of useful results: raincv rqccuten rthcuten rainc
863 !                w0avg rqvcuten
864 !   with respect to varying inputs: raincv rqccuten rthcuten rainc
865 !                w0avg rqvcuten
866 !==================================================================
867   SUBROUTINE CU_INIT_B(dx, stepcu, cudt, dt, rucuten, rvcuten, rthcuten, &
868 &    rthcutenb, rqvcuten, rqvcutenb, rqrcuten, rqccuten, rqccutenb, &
869 &    rqscuten, rqicuten, nca, rainc, raincb, raincv, raincvb, w0avg, &
870 &    w0avgb, config_flags, restart, cldefi, lowlyr, mass_flux, rthften, &
871 &    rqvften, apr_gr, apr_w, apr_mc, apr_st, apr_as, apr_capma, apr_capme&
872 &    , apr_capmi, cugd_tten, cugd_ttens, cugd_qvten, cugd_qvtens, &
873 &    cugd_qcten, allowed_to_read, start_of_simulation, ids, ide, jds, jde&
874 &    , kds, kde, ims, ime, jms, jme, kms, kme, its, ite, jts, jte, kts, &
875 &    kte)
877     USE a_module_cu_du, ONLY : ducuinit_b
879     IMPLICIT NONE
880 !------------------------------------------------------------------
881 !------------------------------------------------------------------
882     TYPE(GRID_CONFIG_REC_TYPE) :: config_flags
883     LOGICAL, INTENT(IN) :: restart
884     INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde, ims, ime, jms, &
885 &    jme, kms, kme, its, ite, jts, jte, kts, kte
886     REAL, INTENT(IN) :: dt, cudt, dx
887     LOGICAL, INTENT(IN) :: start_of_simulation
888     LOGICAL, INTENT(IN) :: allowed_to_read
889     INTEGER, INTENT(INOUT) :: stepcu
890     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: rucuten&
891 &    , rvcuten, rthcuten, rqvcuten, rqccuten, rqrcuten, rqicuten, &
892 &    rqscuten
893     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
894 &    rthcutenb
895     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), OPTIONAL, INTENT(INOUT) &
896 &    :: cugd_tten, cugd_ttens, cugd_qvten, cugd_qvtens, cugd_qcten
897     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: w0avg
898     REAL, DIMENSION(ims:ime, kms:kme, jms:jme) :: w0avgb
899     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: rthften, &
900 &    rqvften
901     REAL, DIMENSION(ims:ime, jms:jme) :: rainc, raincv
902     REAL, DIMENSION(ims:ime, jms:jme) :: raincb, raincvb
903     REAL, DIMENSION(ims:ime, jms:jme), INTENT(OUT) :: cldefi
904     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: nca
905     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: mass_flux, &
906 &    apr_gr, apr_w, apr_mc, apr_st, apr_as, apr_capma, apr_capme, &
907 &    apr_capmi
908     INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: lowlyr
909 ! LOCAL VAR
910     INTEGER :: i, j, itf, jtf
911     INTEGER :: branch
912     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
913 &    rqvcutenb
914     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
915 &    rqccutenb
916     INTRINSIC MIN0
917     INTRINSIC MAX
918     INTRINSIC NINT
919     IF (ite .GT. ide - 1) THEN
920       itf = ide - 1
921     ELSE
922       itf = ite
923     END IF
924     IF (jte .GT. jde - 1) THEN
925       jtf = jde - 1
926     ELSE
927       jtf = jte
928     END IF
929 !-- initialization
930     IF (start_of_simulation) THEN
931       CALL PUSHCONTROL1B(0)
932     ELSE
933       CALL PUSHCONTROL1B(1)
934     END IF
935 !-- deep convection and hybrid deep-shallow convection schemes
936     SELECT CASE  (config_flags%cu_physics) 
937     CASE (ducuscheme) 
938       CALL DUCUINIT_B(rthcuten, rthcutenb, rqvcuten, rqvcutenb, rqccuten&
939 &                , rqccutenb, rqrcuten, rqicuten, rqscuten, nca, w0avg, &
940 &                w0avgb, p_qc, p_qr, svp1, svp2, svp3, svpt0, &
941 &                param_first_scalar, restart, allowed_to_read, ids, ide, &
942 &                jds, jde, kds, kde, ims, ime, jms, jme, kms, kme, its, &
943 &                ite, jts, jte, kts, kte)
944     END SELECT
945     CALL POPCONTROL1B(branch)
946     IF (branch .EQ. 0) THEN
947       DO j=jtf,jts,-1
948         DO i=itf,its,-1
949           raincvb(i, j) = 0.0
950           raincb(i, j) = 0.0
951         END DO
952       END DO
953     END IF
954   END SUBROUTINE CU_INIT_B
955 !==================================================================
956 !  Differentiation of mp_init in reverse (adjoint) mode:
957 !   gradient     of useful results: rainnc snownc graupelnc
958 !   with respect to varying inputs: rainnc snownc graupelnc
959 !==================================================================
960 ! for eta mp
961 ! for eta mp
962 ! eta mp
963   SUBROUTINE MP_INIT_B(rainnc, rainncb, snownc, snowncb, graupelnc, &
964 &    graupelncb, config_flags, restart, warm_rain, adv_moist_cond, mpdt, &
965 &    dt, dx, dy, lowlyr, f_ice_phy, f_rain_phy, f_rimef_phy, &
966 &    mp_restart_state, tbpvs_state, tbpvs0_state, allowed_to_read, &
967 &    start_of_simulation, ids, ide, jds, jde, kds, kde, ims, ime, jms, &
968 &    jme, kms, kme, its, ite, jts, jte, kts, kte)
969     IMPLICIT NONE
970 !------------------------------------------------------------------
971 ! Arguments
972     TYPE(GRID_CONFIG_REC_TYPE) :: config_flags
973     LOGICAL, INTENT(IN) :: restart
974     LOGICAL, INTENT(OUT) :: warm_rain, adv_moist_cond
975     REAL, INTENT(IN) :: mpdt, dt, dx, dy
976     LOGICAL, INTENT(IN) :: start_of_simulation
977     INTEGER, INTENT(IN) :: ids, ide, jds, jde, kds, kde, ims, ime, jms, &
978 &    jme, kms, kme, its, ite, jts, jte, kts, kte
979     INTEGER, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: lowlyr
980     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: rainnc, snownc, &
981 &    graupelnc
982     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: rainncb
983     REAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: &
984 &    f_ice_phy, f_rain_phy, f_rimef_phy
985     REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state, tbpvs_state, &
986 &    tbpvs0_state
987     LOGICAL, INTENT(IN) :: allowed_to_read
988 ! Local
989     INTEGER :: i, j, itf, jtf
990     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: graupelncb
991     REAL, DIMENSION(ims:ime, jms:jme), INTENT(INOUT) :: snowncb
992     INTRINSIC MIN0
993     IF (ite .GT. ide - 1) THEN
994       itf = ide - 1
995     ELSE
996       itf = ite
997     END IF
998     IF (jte .GT. jde - 1) THEN
999       jtf = jde - 1
1000     ELSE
1001       jtf = jte
1002     END IF
1003     IF (start_of_simulation) THEN
1004       DO j=jtf,jts,-1
1005         DO i=itf,its,-1
1006           graupelncb(i, j) = 0.0
1007           snowncb(i, j) = 0.0
1008           rainncb(i, j) = 0.0
1009         END DO
1010       END DO
1011     END IF
1012   END SUBROUTINE MP_INIT_B
1013 !==================================================================
1014 END MODULE A_MODULE_PHYSICS_INIT