merge standard release WRF/WPS V3.0.1.1 into wrffire
[wrffire.git] / wrfv2_fire / phys / module_physics_init.F
blobf40e5b1094cc080d7ba37338c041e2f40eac6912
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_io_domain
14    USE module_state_description
15    USE module_model_constants
16 !  USE module_timing
17    USE module_configure
18 #ifdef DM_PARALLEL
19    USE module_dm
20 #endif
22 CONTAINS
25 !=================================================================
26    SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf,     &
27                          p_top, TSK,RADT,BLDT,CUDT,MPDT,         &
28                          RTHCUTEN, RQVCUTEN, RQRCUTEN,           &
29                          RQCCUTEN, RQSCUTEN, RQICUTEN,           &
30                          RUBLTEN,RVBLTEN,RTHBLTEN,               &
31                          RQVBLTEN,RQCBLTEN,RQIBLTEN,             &
32                          RTHRATEN,RTHRATENLW,RTHRATENSW,         &
33                          STEPBL,STEPRA,STEPCU,                   &
34                          W0AVG, RAINNC, RAINC, RAINCV, RAINNCV,  &
35                          NCA,swrad_scat,                         &
36                          CLDEFI,LOWLYR,                          &
37                          MASS_FLUX,                              &
38                          RTHFTEN, RQVFTEN,                       &
39                          CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK,  & !EMBCK new 
40                          LU_INDEX,                               &
41                          landuse_ISICE, landuse_LUCATS,          &
42                          landuse_LUSEAS, landuse_ISN,            &
43                          lu_state,                               &
44                          XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
45                          levsiz, n_ozmixm, n_aerosolc, paerlev,  &
46                          TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_MYJ,  &
47                          EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
48                          TSLB,ZS,DZS,num_soil_layers,warm_rain,  & 
49                          adv_moist_cond,                         &
50                          APR_GR,APR_W,APR_MC,APR_ST,APR_AS,      &
51                          APR_CAPMA,APR_CAPME,APR_CAPMI,          &
52                          XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV,   &
53                          SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
54                          ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS,    &
55                          SH2O, SNOWH, SMFR3D,                    &  ! temporary
56                          DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
57                          mp_restart_state,tbpvs_state,tbpvs0_state,&
58                          allowed_to_read, moved, start_of_simulation,&
59                          ids, ide, jds, jde, kds, kde,           &
60                          ims, ime, jms, jme, kms, kme,           &
61                          its, ite, jts, jte, kts, kte,           &
62                          ozmixm,pin,                             &    ! Optional
63                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
64                          RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN,         &    ! Optional
65                          RQVNDGDTEN,RMUNDGDTEN,                  &    ! Optional
66                          FGDT,STEPFG,                            &    ! Optional
67                          cugd_tten,cugd_ttens,cugd_qvten,        &    ! Optional
68                          cugd_qvtens,cugd_qcten,                 &    ! Optional
69 !                        num_roof_layers,num_wall_layers,        & !Optional urban
70 !                        num_road_layers,                        & !Optional urban
71                          DZR, DZB, DZG,                          & !Optional urban
72                          TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,    & !Optional urban
73                          QC_URB2D, XXXR_URB2D,XXXB_URB2D,        & !Optional urban
74                          XXXG_URB2D, XXXC_URB2D,                 & !Optional urban
75                          TRL_URB3D, TBL_URB3D, TGL_URB3D,        & !Optional urban
76                          SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,  & !Optional urban
77                          TS_URB2D, FRC_URB2D, UTYPE_URB2D,       & !Optional urban
78                          TML,T0ML,HML,H0ML,HUML,HVML,            & !Optional oml
79                          itimestep                               & !Optional obs fdda
80 #if ( EM_CORE == 1 )
81                          ,fdob                                   & !Optional obs fdda
82 #endif
83                          )
85 !-----------------------------------------------------------------
86    USE module_domain
87    USE module_wrf_error
88    IMPLICIT NONE
89 !-----------------------------------------------------------------
90    TYPE (grid_config_rec_type)              :: config_flags
92    INTEGER , INTENT(IN)        :: id
93    LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
94 !   LOGICAL , INTENT (IN)       :: FNDSOILW, FNDSNOWH
95    LOGICAL, PARAMETER          :: FNDSOILW=.true., FNDSNOWH=.true.
96    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,  &
97                                   ims, ime, jms, jme, kms, kme,  &
98                                   its, ite, jts, jte, kts, kte
100    INTEGER , INTENT(IN)        :: num_soil_layers
102    LOGICAL,  INTENT(IN)        :: start_of_simulation
103    REAL,     INTENT(IN)        :: DT, p_top, DX, DY
104    LOGICAL,  INTENT(IN)        :: restart
105    REAL,     INTENT(IN)        :: RADT,BLDT,CUDT,MPDT
106    REAL,     INTENT(IN)        :: swrad_scat
108    REAL,     DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
109    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
114    REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
115           INTENT(INOUT) ::                                  OZMIXM
117    REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::        PIN
119    REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
120    REAL,  DIMENSION(paerlev), OPTIONAL,INTENT(INOUT)  ::          m_hybi
121    REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
122           INTENT(INOUT) ::                    aerosolc_1, aerosolc_2
124    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
125                  INTENT(INOUT) :: SMOIS, SH2O,TSLB
126    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
128    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
129             INTENT(INOUT)    ::                           SNOW, &
130                                                          SNOWC, &
131                                                          SNOWH, &
132                                                         CANWAT, &
133                                                         SMSTAV, &
134                                                         SMSTOT, &
135                                                      SFCRUNOFF, &
136                                                       UDRUNOFF, &
137                                                         SFCEVP, &
138                                                         GRDFLX, &
139                                                         ACSNOW, &
140                                                           XICE, &
141                                                          XICEM, &
142                                                         VEGFRA, &
143                                                         ACSNOM
145    INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
146             INTENT(INOUT)    ::                         IVGTYP, &
147                                                         ISLTYP
149 ! rad
151    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
152              RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
154    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
155              CLDFRA_OLD
157    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
158              GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK                          !EMBCK new
160    REAL,     INTENT(IN) :: GMT
162    INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
163    INTEGER , INTENT(IN) :: JULYR, JULDAY
165 ! cps
167    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
168              RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, RQSCUTEN,   &
169              RQICUTEN
171    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
173    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX,   &
174                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
175                       APR_CAPMA,APR_CAPME,APR_CAPMI
177    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
178              RTHFTEN, RQVFTEN
180    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) ::           &
181              RAINNC, RAINC, RAINCV, RAINNCV
183    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
185    INTEGER,  DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
187 !pbl
189    ! soil layer
192    REAL,     DIMENSION(1:num_soil_layers),      INTENT(INOUT) :: ZS,DZS
194    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
195              RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_MYJ
196    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
197              cugd_tten,cugd_ttens,cugd_qvten,                &
198              cugd_qvtens,cugd_qcten
199    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::         &
200              XLAND,ZNT,Z0,UST,MOL,LU_INDEX,                         &
201              PBLH,THC,MAVAIL,HFX,QFX,RAINBL
202    INTEGER , INTENT(INOUT)  :: landuse_ISICE, landuse_LUCATS
203    INTEGER , INTENT(INOUT)  :: landuse_LUSEAS, landuse_ISN
204    REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
206    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
209    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::   &
210              F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
211    REAL, DIMENSION(:), INTENT(INOUT)   :: mp_restart_state,tbpvs_state,tbpvs0_state
212    LOGICAL,  INTENT(IN)  :: allowed_to_read, moved
214 ! ocean mixed layer
215    REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
216              TML,T0ML,HML,H0ML,HUML,HVML
218 !fdda
219    REAL,     OPTIONAL, INTENT(IN) :: FGDT
220    INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
221    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
222              RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RQVNDGDTEN
223    REAL,     DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) ::    &
224              RMUNDGDTEN
226 !URBAN
227 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR   !urban
228 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB   !urban
229 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG   !urban
230    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR    !urban
231    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB    !urban
232    REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG    !urban
234    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
235    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
236    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
237    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
238    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
239    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
240    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
241    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
242    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
244 !   REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
245 !   REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
246 !   REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
247    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D  !urban
248    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D  !urban
249    REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D  !urban
251    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
252    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
253    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
254    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
255    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
256    REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
257    INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
259 !obs fdda
260    INTEGER, OPTIONAL, INTENT(IN) :: itimestep
261 #if ( EM_CORE == 1 ) 
262    TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
263 #endif
265 ! Local data
267    REAL    :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
268    REAL,     DIMENSION( kms:kme )  :: sfull, shalf
269    REAL :: obs_twindo_cg, obs_twindo
270    
271    CHARACTER*4 :: MMINLU_loc
272    CHARACTER*80 :: message
273    INTEGER :: ISWATER
274    INTEGER :: ucmcall
275    INTEGER :: omlcall
276    REAL    :: oml_hml0
277    LOGICAL :: usemonalb
279    INTEGER :: i, j, k, itf, jtf
280 integer myproc
282 !-----------------------------------------------------------------
284    ucmcall=config_flags%ucmcall
285    usemonalb=config_flags%usemonalb
286 #if ( EM_CORE == 1 ) 
287    obs_twindo_cg=model_config_rec%obs_twindo(1)
288    obs_twindo=config_flags%obs_twindo
289    oml_hml0=config_flags%oml_hml0
290    omlcall=config_flags%omlcall
291 #endif
293 !-- should be from the namelist
295    sfull = 0.
296    shalf = 0.
298    CALL wrf_debug(100,'top of phy_init')
300    WRITE(wrf_err_message,*) 'phy_init:  start_of_simulation = ',start_of_simulation
301    CALL wrf_debug ( 100, TRIM(wrf_err_message) )
303    itf=min0(ite,ide-1)
304    jtf=min0(jte,jde-1)
306    ZZLND=0.1
307    ZZWTR=0.0001
308    THINLD=0.04
309    ALBLND=0.2
310    XMAVA=0.3
312 #if (NMM_CORE == 1)
313    if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
314 #endif
316    CALL nl_get_cen_lat(id,cen_lat)
317    CALL wrf_debug(100,'calling nl_get_iswater, nl_get_mminlu_loc')
318    CALL nl_get_iswater(id,iswater)
319    CALL nl_get_mminlu( 1, mminlu_loc )
320    CALL wrf_debug(100,'after nl_get_iswater, nl_get_mminlu_loc')
322   IF(.not.restart)THEN
323 !-- initialize common variables
325    IF ( .NOT. moved ) THEN
326    DO j=jts,jtf
327    DO i=its,itf
328       XLAND(i,j)=1.
329       GSW(i,j)=0.
330       GLW(i,j)=0.
331       UST(i,j)=0.
332       MOL(i,j)=0.0
333       PBLH(i,j)=0.0
334       HFX(i,j)=0.
335       QFX(i,j)=0.
336       RAINBL(i,j)=0.
337       RAINNCV(i,j)=0.
338       ACSNOW(i,j)=0.
339       DO k=kms,kme  !wig, 17-May-2006: Added for idealized chem. runs
340          EXCH_H(i,k,j) = 0.
341       END DO
342    ENDDO
343    ENDDO
344    ENDIF
347    DO j=jts,jtf
348    DO i=its,itf
349      IF(XLAND(i,j) .LT. 1.5)THEN
350        IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=ALBLND
351        EMBCK(i,j)=0.85
352        ALBEDO(i,j)=ALBBCK(i,j)
353        EMISS(i,j)=EMBCK(i,j)
354        THC(i,j)=THINLD
355        ZNT(i,j)=ZZLND
356 #if  ! ( NMM_CORE == 1 ) 
357        Z0(i,j)=ZZLND
358 #endif
359        MAVAIL(i,j)=XMAVA
360      ELSE
361        IF(mminlu_loc .EQ. '    ') ALBBCK(i,j)=0.08
362        ALBEDO(i,j)=ALBBCK(i,j)
363        EMBCK(i,j)=0.98
364        EMISS(i,j)=EMBCK(i,j)
365        THC(i,j)=THINLD
366        ZNT(i,j)=ZZWTR
367 #if  ! ( NMM_CORE == 1 ) 
368        Z0(i,j)=ZZWTR
369 #endif
370        MAVAIL(i,j)=1.0 
371      ENDIF
373    ENDDO
374    ENDDO
376    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
378    IF(mminlu_loc .ne. '    ')THEN
379 !-- initialize surface properties
381      CALL landuse_init(lu_index, snowc, albedo, albbck, mavail, emiss, embck,            &
382                 znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, mminlu_loc,  &
383                 landuse_ISICE, landuse_LUCATS,                      &
384                 landuse_LUSEAS, landuse_ISN,                        &
385                 lu_state,                                           &
386                 allowed_to_read , usemonalb ,                       &
387                 ids, ide, jds, jde, kds, kde,                       &
388                 ims, ime, jms, jme, kms, kme,                       &
389                 its, ite, jts, jte, kts, kte                       ) 
390    ENDIF
392   ENDIF
394 !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
395 !-- zfull/zhalf may be either zeta or eta
396 !-- what is done here depends on coordinate (check this code if adding new coordinates)
397    CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
398                 allowed_to_read,                                  &
399                 kds,kde,kms,kme,kts,kte)
401 !-- initialize physics
402 !-- ra: radiation
403 !-- bl: pbl
404 !-- cu: cumulus
405 !-- mp: microphysics
407    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
409    CALL ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW,             &
410                 RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT,    &
411                 levsiz,XLAT,n_ozmixm,                           &
412                 cldfra_old,                                     & ! Optional
413                 ozmixm,pin,                                     & ! Optional
414                 m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,     & ! Optional
415                 paerlev,n_aerosolc,                             &
416                 sfull,shalf,pptop,swrad_scat,                   &
417                 config_flags,restart,                           & 
418                 allowed_to_read, start_of_simulation,           &
419                 ids, ide, jds, jde, kds, kde,                   &
420                 ims, ime, jms, jme, kms, kme,                   &
421                 its, ite, jts, jte, kts, kte                    )
423    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
425    CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,        &
426                 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
427                 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
428                 num_soil_layers,TKE_MYJ,EXCH_H,VEGFRA,          &
429                 SNOW,SNOWC, CANWAT,SMSTAV,                      &
430                 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
431                 IVGTYP,ISLTYP,SMOIS,SMFR3D,MAVAIL,              &
432                 SNOWH,SH2O,FNDSOILW, FNDSNOWH,                  &
433 #if (NMM_CORE == 1)
434                 Z0,XLAND,XICE,                                  &
435 #else
436                 ZNT,XLAND,XICE,                                 &
437 #endif
438                 SFCEVP,GRDFLX,                                  &
439                 allowed_to_read ,                               &
440                 start_of_simulation ,                           &
441                 DZR, DZB, DZG,                                  & !Optional urban
442                 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
443                 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
444                 TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
445                 SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D,          & !Optional urban
446                 TS_URB2D, FRC_URB2D, UTYPE_URB2D, UCMCALL,      & !Optional urban
447                 ids, ide, jds, jde, kds, kde,                   &
448                 ims, ime, jms, jme, kms, kme,                   &
449                 its, ite, jts, jte, kts, kte,                   &
450                 oml_hml0, omlcall,                              & !Optional oml
451                 TML,T0ML,HML,H0ML,HUML,HVML                     ) !Optional oml
453    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
455    CALL cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN,      &
456                 RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC,           &
457                 RAINCV,W0AVG,config_flags,restart,              &
458                 CLDEFI,LOWLYR,MASS_FLUX,                        &
459                 RTHFTEN, RQVFTEN,                               &
460                 APR_GR,APR_W,APR_MC,APR_ST,APR_AS,              &
461                 APR_CAPMA,APR_CAPME,APR_CAPMI,                  &
462                 cugd_tten,cugd_ttens,cugd_qvten,                &
463                 cugd_qvtens,cugd_qcten,                         &
464                 allowed_to_read, start_of_simulation,           &
465                 ids, ide, jds, jde, kds, kde,                   &
466                 ims, ime, jms, jme, kms, kme,                   &
467                 its, ite, jts, jte, kts, kte                    )
469    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
471    CALL mp_init(RAINNC,config_flags,restart,warm_rain,          &
472                 adv_moist_cond,                                 &
473                 MPDT, DT, DX, DY, LOWLYR,                       & 
474                 F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,               &
475                 mp_restart_state,tbpvs_state,tbpvs0_state,      &
476                 allowed_to_read, start_of_simulation,           &
477                 ids, ide, jds, jde, kds, kde,                   &
478                 ims, ime, jms, jme, kms, kme,                   &
479                 its, ite, jts, jte, kts, kte                    )
481    write(message,*)'STEPRA,STEPCU,STEPBL',STEPRA,STEPCU,STEPBL
482    CALL wrf_message( message )
484 #if  ( EM_CORE == 1 )
485    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
487    CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,          &
488                 RTHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,               &
489                 config_flags,restart,                           &
490                 allowed_to_read ,                               &
491                 ids, ide, jds, jde, kds, kde,                   &
492                 ims, ime, jms, jme, kms, kme,                   &
493                 its, ite, jts, jte, kts, kte                    )
495    CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
497    CALL fdob_init(model_config_rec%obs_nudge_opt,               &
498                   model_config_rec%max_dom,                     &
499                   id,                                           &
500                   model_config_rec%parent_id,                   &
501                   model_config_rec%obs_idynin,                  &
502                   model_config_rec%obs_dtramp,                  &
503                   model_config_rec%fdda_end,                    &
504                   config_flags%restart,                         &
505                   obs_twindo_cg, obs_twindo,                    &
506                   itimestep,                                    &
507                   config_flags%cen_lat,                         &
508                   config_flags%cen_lon,                         &
509                   config_flags%stand_lon,                       &
510                   config_flags%truelat1,                        &
511                   config_flags%truelat2,                        &
512                   config_flags%map_proj,                        &
513                   xlat,                                         & 
514                   xlong,                                        & 
515                   model_config_rec%s_sn(1),                     &
516                   model_config_rec%e_sn(1),                     &
517                   model_config_rec%s_we(1),                     &
518                   model_config_rec%e_we(1),                     &
519                   fdob,                                         &
520                   model_config_rec%obs_ipf_init,                &
521                   ids, ide, jds, jde, kds, kde,                 &
522                   ims, ime, jms, jme, kms, kme,                 &
523                   its, ite, jts, jte, kts, kte                  )
525 #endif
527    END SUBROUTINE phy_init
529 !=====================================================================
530    SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, mavail, emiss, embck, &
531                 znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu,  &
532                 ISICE, LUCATS, LUSEAS, ISN,                         &
533                 lu_state,                                           &
534                 allowed_to_read , usemonalb ,                       &
535                 ids, ide, jds, jde, kds, kde,                       &
536                 ims, ime, jms, jme, kms, kme,                       &
537                 its, ite, jts, jte, kts, kte                       )
539    USE module_wrf_error
540    IMPLICIT NONE
542 !---------------------------------------------------------------------
543    INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
544                                      ims, ime, jms, jme, kms, kme,   &
545                                      its, ite, jts, jte, kts, kte
547    INTEGER , INTENT(IN)           :: iswater, julday
548    REAL    , INTENT(IN)           :: cen_lat
549    CHARACTER*4, INTENT(IN)        :: mminlu
550    LOGICAL,  INTENT(IN)           :: allowed_to_read , usemonalb
551    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN   ) :: lu_index, snowc, xice
552    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT  ) :: albedo, albbck, mavail, emiss, &
553                                                                embck,                         &
554                                                                znt, Z0, thc, xland, xicem
555    INTEGER , INTENT(INOUT)  :: ISICE, LUCATS, LUSEAS, ISN
556    REAL    , INTENT(INOUT)  , DIMENSION( : ) :: lu_state
558 !---------------------------------------------------------------------
559 ! Local
560    CHARACTER*4 LUTYPE
561    CHARACTER*80 :: message
562    INTEGER  :: landuse_unit, LS, LC, LI, LUN, NSN
563    INTEGER  :: i, j, itf, jtf, is, cats, seas, curs
564    INTEGER , PARAMETER :: OPEN_OK = 0
565    INTEGER :: ierr
566    INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12 
567    REAL    , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
568    REAL    , DIMENSION( max_cats )     :: SCFX
569 ! save these fields in case nest moves or has to be reinitialized
570 ! and this routine is called with allowed_to_read set to false
571 ! note that by saving these, we're locking in the same landuse for
572 ! the duration of a run; possible implications for long climate runs
573    LOGICAL :: found_lu, end_of_file
574    LOGICAL, EXTERNAL :: wrf_dm_on_monitor
576 !---------------------------------------------------------------------
578    CALL wrf_debug( 100 , 'top of landuse_init' )
580    NSN=-1  ! set this to suppress uninitalized data messages from tools
582 ! recover LU variables from state
583    IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
584       WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
585    ENDIF
586    curs = 1
587    DO cats = 1, max_cats
588      SCFX(cats) =           lu_state(curs)         ; curs = curs + 1
589      DO seas = 1, max_seas
590        ALBD(cats,seas) =    lu_state(curs)         ; curs = curs + 1
591        SLMO(cats,seas) =    lu_state(curs)         ; curs = curs + 1
592        SFEM(cats,seas) =    lu_state(curs)         ; curs = curs + 1
593        SFZ0(cats,seas) =    lu_state(curs)         ; curs = curs + 1
594        SFHC(cats,seas) =    lu_state(curs)         ; curs = curs + 1
595        THERIN(cats,seas) =  lu_state(curs)         ; curs = curs + 1
596      ENDDO
597    ENDDO
599 ! Determine season (summer=1, winter=2)
600    ISN=1                                                            
601    IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2                         
602    IF(CEN_LAT.LT.0.0)ISN=3-ISN                                   
604    FOUND_LU = .TRUE.
605    IF ( allowed_to_read ) THEN
606       landuse_unit = 29
607       IF ( wrf_dm_on_monitor() ) THEN
608         OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
609         IF ( ierr .NE. OPEN_OK ) THEN
610           WRITE(message,FMT='(A)') &
611           'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
612           CALL wrf_error_fatal ( message ) 
613         END IF
614       ENDIF
616 ! Read info from file LANDUSE.TBL
617       IF(MMINLU.EQ.'OLD ')THEN
618 !       ISWATER=7
619         ISICE=11 
620       ELSE IF(MMINLU.EQ.'USGS')THEN
621 !       ISWATER=16
622         ISICE=24
623       ELSE IF(MMINLU.EQ.'SiB ')THEN
624 !       ISWATER=15
625         ISICE=16
626       ELSE IF(MMINLU.EQ.'LW12')THEN
627 !       ISWATER=15
628         ISICE=3
629       ENDIF
630       PRINT *, 'INPUT LANDUSE = ',MMINLU
631       FOUND_LU = .FALSE.
632       end_of_file = .FALSE.
633 !!! BEGINNING OF 1999 LOOP
634  1999 CONTINUE                                                      
635       IF ( wrf_dm_on_monitor() ) THEN
636         READ (landuse_unit,2000,END=2002)LUTYPE                                
637         GOTO 2003
638  2002   CONTINUE
639         CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
640         end_of_file = .TRUE.
641  2003   CONTINUE
642         IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS                                    
643         FOUND_LU = LUTYPE.EQ.MMINLU
644       ENDIF
645       CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
646       IF ( .NOT. end_of_file ) THEN
647         CALL wrf_dm_bcast_string(lutype, 4)
648         CALL wrf_dm_bcast_bytes (lucats,  IWORDSIZE )
649         CALL wrf_dm_bcast_bytes (luseas,  IWORDSIZE )
650         CALL wrf_dm_bcast_bytes (found_lu,  LWORDSIZE )
651  2000   FORMAT (A4)                                                
652         IF(FOUND_LU)THEN                                  
653           LUN=LUCATS                                             
654           NSN=LUSEAS                                            
655             PRINT *, 'LANDUSE TYPE = ',LUTYPE,' FOUND',        &
656                    LUCATS,' CATEGORIES',LUSEAS,' SEASONS',     &
657                    ' WATER CATEGORY = ',ISWATER,               &
658                    ' SNOW CATEGORY = ',ISICE                
659         ENDIF                                             
660         DO ls=1,luseas                                   
661           if ( wrf_dm_on_monitor() ) then
662             READ (landuse_unit,*)                                   
663           endif
664           DO LC=1,LUCATS                               
665             IF(found_lu)THEN                  
666               IF ( wrf_dm_on_monitor() ) THEN
667                 READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS),        &       
668                            SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)       
669               ENDIF
670               CALL wrf_dm_bcast_bytes (LI,  IWORDSIZE )
671               IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
672             ELSE                                                            
673               IF ( wrf_dm_on_monitor() ) THEN
674                 READ (landuse_unit,*)                                                  
675               ENDIF
676             ENDIF                                                         
677           ENDDO                                                          
678         ENDDO                                                           
679         IF(NSN.EQ.1.AND.FOUND_LU) THEN
680            ISN = 1
681         END IF
682         CALL wrf_dm_bcast_bytes (albd,   max_cats * max_seas * RWORDSIZE )
683         CALL wrf_dm_bcast_bytes (slmo,   max_cats * max_seas * RWORDSIZE )
684         CALL wrf_dm_bcast_bytes (sfem,   max_cats * max_seas * RWORDSIZE )
685         CALL wrf_dm_bcast_bytes (sfz0,   max_cats * max_seas * RWORDSIZE )
686         CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
687         CALL wrf_dm_bcast_bytes (sfhc,   max_cats * max_seas * RWORDSIZE )
688         CALL wrf_dm_bcast_bytes (scfx,   max_cats *            RWORDSIZE )
689       ENDIF
691       IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
692 !!! END OF 1999 LOOP
694       IF(.NOT. found_lu .OR. end_of_file )THEN                                         
695         CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
696       ENDIF                                                     
697     ENDIF  ! allowed_to_read
699     IF(FOUND_LU)THEN
700 ! Set arrays according to lu_index
701       itf = min0(ite, ide-1)
702       jtf = min0(jte, jde-1)
703       IF(usemonalb)CALL wrf_message ( 'Climatological albedo is used instead of table values' )
704       DO j = jts, jtf
705         DO i = its, itf
706           IS=nint(lu_index(i,j))
707           ! only do this check on read-in data
708           IF(IS.LT.0.OR.IS.GT.LUN.AND.allowed_to_read)THEN                                        
709             WRITE ( wrf_err_message , * ) 'ERROR: LANDUSE OUTSIDE RANGE =',IS,' AT ',I,J,' LUN= ',LUN
710             CALL wrf_error_fatal ( TRIM ( wrf_err_message ) )
711           ENDIF                                                            
712 !   SET NO-DATA POINTS (IS=0) TO WATER                                    
713           IF(IS.EQ.0)THEN                                                
714             IS=ISWATER                                                  
715           ENDIF                                                        
716           IF(.NOT.usemonalb)ALBBCK(I,J)=ALBD(IS,ISN)/100.                                  
717           ALBEDO(I,J)=ALBBCK(I,J)
718           IF(SNOWC(I,J) .GT. 0.5)ALBEDO(I,J)=ALBBCK(I,J)*(1.+SCFX(IS))
719           THC(I,J)=THERIN(IS,ISN)/100.                               
720           Z0(I,J)=SFZ0(IS,ISN)/100.                                
721           ZNT(I,J)=Z0(I,J)
722           EMBCK(I,J)=SFEM(IS,ISN)                                  
723           EMISS(I,J)=EMBCK(I,J)                                  
724           MAVAIL(I,J)=SLMO(IS,ISN)                                
725           IF(IS.NE.ISWATER)THEN                                  
726             XLAND(I,J)=1.0                                      
727           ELSE                                                 
728             XLAND(I,J)=2.0                                    
729           ENDIF                                              
730 !    SET SEA-ICE POINTS TO LAND WITH ICE/SNOW SURFACE PROPERTIES
731           XICEM(I,J)=XICE(I,J)
732           IF(XICE(I,J).GT.0.5)THEN
733             XLAND(I,J)=1.0
734             ALBBCK(I,J)=ALBD(ISICE,ISN)/100.
735             ALBEDO(I,J)=ALBBCK(I,J)
736             THC(I,J)=THERIN(ISICE,ISN)/100.                              
737             Z0(I,J)=SFZ0(ISICE,ISN)/100.                               
738             ZNT(I,J)=Z0(I,J)
739             EMBCK(I,J)=SFEM(ISICE,ISN)                                 
740             EMISS(I,J)=EMBCK(I,J)                                  
741             MAVAIL(I,J)=SLMO(ISICE,ISN)                               
742           ENDIF
743         ENDDO
744       ENDDO
745     ENDIF
746     if ( wrf_dm_on_monitor() .and. allowed_to_read ) then
747       CLOSE (landuse_unit)
748     endif
749     CALL wrf_debug( 100 , 'returning from of landuse_init' )
751 ! restore LU variables from state
752     curs = 1
753     DO cats = 1, max_cats
754       lu_state(curs) = SCFX(cats)                 ; curs = curs + 1
755       DO seas = 1, max_seas
756         lu_state(curs) = ALBD(cats,seas)          ; curs = curs + 1
757         lu_state(curs) = SLMO(cats,seas)          ; curs = curs + 1
758         lu_state(curs) = SFEM(cats,seas)          ; curs = curs + 1
759         lu_state(curs) = SFZ0(cats,seas)          ; curs = curs + 1
760         lu_state(curs) = SFHC(cats,seas)          ; curs = curs + 1
761         lu_state(curs) = THERIN(cats,seas)        ; curs = curs + 1
762       ENDDO
763     ENDDO
765     RETURN
766         
767    END SUBROUTINE landuse_init 
769 !=====================================================================
770    SUBROUTINE ra_init(id,STEPRA,RADT,DT,RTHRATEN,RTHRATENLW,       & 
771                       RTHRATENSW,CLDFRA,EMISS,cen_lat,JULYR,JULDAY,GMT,    &
772                       levsiz,XLAT,n_ozmixm,                           &
773                       cldfra_old,                                     & ! Optional
774                       ozmixm,pin,                                     & ! Optional
775                       m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,     & ! Optional
776                       paerlev,n_aerosolc,                             &
777                       sfull,shalf,pptop,swrad_scat,                  &
778                       config_flags,restart,                          & 
779                       allowed_to_read, start_of_simulation,          &
780                       ids, ide, jds, jde, kds, kde,                  &
781                       ims, ime, jms, jme, kms, kme,                  &
782                       its, ite, jts, jte, kts, kte                   )
783 !---------------------------------------------------------------------
784    USE module_ra_rrtm
785    USE module_ra_cam
786    USE module_ra_sw
787    USE module_ra_gsfcsw
788    USE module_ra_gfdleta
789    USE module_ra_hs
790    USE module_domain
791 !---------------------------------------------------------------------
792    IMPLICIT NONE
793 !---------------------------------------------------------------------
794    INTEGER,  INTENT(IN)           :: id
795    TYPE (grid_config_rec_type)    :: config_flags
796    LOGICAL , INTENT(IN)           :: restart
797    LOGICAL,  INTENT(IN)           :: allowed_to_read
799    INTEGER , INTENT(IN)           :: ids, ide, jds, jde, kds, kde,   &
800                                      ims, ime, jms, jme, kms, kme,   &
801                                      its, ite, jts, jte, kts, kte
803    INTEGER , INTENT(IN)           :: JULDAY,JULYR
804    REAL ,    INTENT(IN)           :: DT, RADT, cen_lat, GMT, pptop,  &
805                                      swrad_scat
806    LOGICAL,  INTENT(IN)           :: start_of_simulation
808    INTEGER,      INTENT(IN   )    ::   levsiz, n_ozmixm
809    INTEGER,      INTENT(IN   )    ::   paerlev, n_aerosolc
811    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::  XLAT
813    REAL,  DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL,      &
814           INTENT(INOUT) ::                                  OZMIXM
816    REAL,  DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT)  :: m_ps_1,m_ps_2
817    REAL,  DIMENSION(paerlev), OPTIONAL, INTENT(INOUT)  ::         m_hybi
818    REAL,  DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL,     &
819           INTENT(INOUT) ::                      aerosolc_1, aerosolc_2
821    REAL,  DIMENSION(levsiz), OPTIONAL, INTENT(INOUT)  ::          PIN
823    INTEGER , INTENT(INOUT)        :: STEPRA
824    INTEGER :: isn
826    REAL , DIMENSION( kms:kme ) , INTENT(IN) :: sfull, shalf
827    REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::           &
828                                                            RTHRATEN, &
829                                                          RTHRATENLW, &
830                                                          RTHRATENSW, &
831                                                              CLDFRA
833    REAL , DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
834                                                          CLDFRA_OLD
836    REAL , DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: EMISS
837    LOGICAL :: etalw = .false.
838    LOGICAL :: camlw = .false.
839    LOGICAL :: etamp = .false.
840    integer :: month,iday
841    INTEGER :: i, j, k, itf, jtf, ktf
842 !---------------------------------------------------------------------
844    jtf=min0(jte,jde-1)
845    ktf=min0(kte,kde-1)
846    itf=min0(ite,ide-1)
848 !---------------------------------------------------------------------
850 !-- calculate radiation time step
852     STEPRA = nint(RADT*60./DT)
853     STEPRA = max(STEPRA,1)
855 !-- initialization
857    IF(start_of_simulation)THEN
858      DO j=jts,jtf
859      DO k=kts,ktf
860      DO i=its,itf
861         RTHRATEN(i,k,j)=0.
862         RTHRATENLW(i,k,j)=0.
863         RTHRATENSW(i,k,j)=0.
864         CLDFRA(i,k,j)=0.
865      ENDDO
866      ENDDO
867      ENDDO
869      if( present(cldfra_old) ) then
870         DO j=jts,jtf
871         DO k=kts,ktf
872         DO i=its,itf
873            cldfra_old(i,k,j) = 0.
874         ENDDO
875         ENDDO
876         ENDDO
877      end if
878    ENDIF
880 !-- find out which microphysics option is used first
882    mp_select: SELECT CASE(config_flags%mp_physics)
884         CASE (ETAMPNEW)
885              etamp = .true.
887    END SELECT mp_select
889 !-- chose long wave radiation scheme
891    lwrad_select: SELECT CASE(config_flags%ra_lw_physics)
893         CASE (RRTMSCHEME)
894              CALL rrtminit(                                 &
895                            allowed_to_read ,                &
896                            ids, ide, jds, jde, kds, kde,    &
897                            ims, ime, jms, jme, kms, kme,    &
898                            its, ite, jts, jte, kts, kte     )
900         CASE (CAMLWSCHEME)
901 #ifdef MAC_KLUDGE
902              CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
903 #endif
904              IF ( PRESENT( OZMIXM ) .AND. PRESENT( PIN ) .AND. &
905                   PRESENT(M_PS_1) .AND. PRESENT(M_PS_2) .AND.  &
906                   PRESENT(M_HYBI) .AND. PRESENT(AEROSOLC_1)    &
907                   .AND. PRESENT(AEROSOLC_2)) THEN
908              CALL camradinit(                                  &
909                          R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop, &
910                          ozmixm,pin,levsiz,XLAT,n_ozmixm,      &
911                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
912                          paerlev, n_aerosolc,              &
913                          ids, ide, jds, jde, kds, kde,     &
914                          ims, ime, jms, jme, kms, kme,     &
915                          its, ite, jts, jte, kts, kte      )
916              ELSE
917                 CALL wrf_error_fatal ( 'arguments not present for calling cam radiation' )
918              ENDIF
920              camlw = .true.
922         CASE (GFDLLWSCHEME)
923              CALL nl_get_start_month(id,month)
924              CALL nl_get_start_day(id,iday)
925              CALL gfdletainit(emiss,sfull,shalf,pptop,      &
926                               julyr,month,iday,gmt,         &
927                               config_flags,allowed_to_read, &
928                               ids, ide, jds, jde, kds, kde, &
929                               ims, ime, jms, jme, kms, kme, &
930                               its, ite, jts, jte, kts, kte  )
931              etalw = .true.
932         CASE (HELDSUAREZ)
933              CALL hsinit(RTHRATEN,restart,             &
934                          ids, ide, jds, jde, kds, kde, &
935                          ims, ime, jms, jme, kms, kme, &
936                          its, ite, jts, jte, kts, kte )
937         CASE DEFAULT
939    END SELECT lwrad_select
940 !-- initialize short wave radiation scheme
942    swrad_select: SELECT CASE(config_flags%ra_sw_physics)
944         CASE (SWRADSCHEME)
945              CALL swinit(                                  &
946                          swrad_scat,                       &
947                          allowed_to_read ,                 &
948                          ids, ide, jds, jde, kds, kde,     &
949                          ims, ime, jms, jme, kms, kme,     &
950                          its, ite, jts, jte, kts, kte      )
952         CASE (CAMSWSCHEME)
953 #ifdef MAC_KLUDGE
954              CALL wrf_error_fatal ( 'CAM radiation scheme not supported under the chosen build configuration' )
955 #endif
956              IF(.not.camlw)THEN
957              CALL camradinit(                              &
958                          R_D,R_V,CP,G,STBOLT,EP_2,shalf,pptop,               &
959                          ozmixm,pin,levsiz,XLAT,n_ozmixm,     &
960                          m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,&
961                          paerlev, n_aerosolc,              &
962                          ids, ide, jds, jde, kds, kde,     &
963                          ims, ime, jms, jme, kms, kme,     &
964                          its, ite, jts, jte, kts, kte      )
965              ENDIF
967         CASE (GSFCSWSCHEME)
968              CALL gsfc_swinit(cen_lat, allowed_to_read )
970         CASE (GFDLSWSCHEME)
971              IF(.not.etalw)THEN
972              CALL nl_get_start_month(id,month)
973              CALL nl_get_start_day(id,iday)
974              CALL gfdletainit(emiss,sfull,shalf,pptop,      &
975                               julyr,month,iday,gmt,         &
976                               config_flags,allowed_to_read, &
977                               ids, ide, jds, jde, kds, kde, &
978                               ims, ime, jms, jme, kms, kme, &
979                               its, ite, jts, jte, kts, kte  )
980              ENDIF
982         CASE DEFAULT
984    END SELECT swrad_select
986    END SUBROUTINE ra_init
988    SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN,  &
989                 RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN,             &
990                 config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS,    &
991                 num_soil_layers,TKE_MYJ,EXCH_H,VEGFRA,          &
992                 SNOW,SNOWC, CANWAT,SMSTAV,                      &
993                 SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM,       &
994                 IVGTYP,ISLTYP,SMOIS,SMFR3D,mavail,              &
995                 SNOWH,SH2O,FNDSOILW, FNDSNOWH,                  &
996 #if  ( NMM_CORE == 1 )
997                 Z0,XLAND,XICE,                                  &
998 #else
999                 ZNT,XLAND,XICE,                                 &
1000 #endif
1001                 SFCEVP,GRDFLX,                                  &
1002                 allowed_to_read,                                &
1003                 start_of_simulation,                            &
1004 !                num_roof_layers,num_wall_layers,num_road_layers,& !Optional urban
1005                 DZR, DZB, DZG,                                  & !Optional urban
1006                 TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,   & !Optional urban
1007                 XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,    & !Optional urban
1008                 TRL_URB3D, TBL_URB3D, TGL_URB3D,                & !Optional urban
1009                 SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,             & !Optional urban
1010                 TS_URB2D, FRC_URB2D, UTYPE_URB2D,UCMCALL,       & !Optional urban
1011                 ids, ide, jds, jde, kds, kde,                   &
1012                 ims, ime, jms, jme, kms, kme,                   &
1013                 its, ite, jts, jte, kts, kte,                   &
1014                 oml_hml0, omlcall,                              & !Optional oml
1015                 TML,T0ML,HML,H0ML,HUML,HVML                     ) !Optional oml
1016 !--------------------------------------------------------------------
1017    USE module_sf_sfclay
1018    USE module_sf_slab
1019    USE module_sf_pxsfclay
1020    USE module_bl_ysu
1021    USE module_bl_mrf
1022    USE module_bl_gfs
1023    USE module_bl_acm
1024    USE module_sf_myjsfc
1025    USE module_sf_noahdrv
1026    USE module_sf_urban
1027    USE module_sf_ruclsm
1028    USE module_sf_pxlsm
1029    USE module_bl_myjpbl
1030 #if (NMM_CORE == 1)
1031    USE module_sf_lsm_nmm
1032 #endif
1033 !--------------------------------------------------------------------
1034    IMPLICIT NONE
1035 !--------------------------------------------------------------------
1036    TYPE (grid_config_rec_type) ::     config_flags
1037    LOGICAL , INTENT(IN)        :: restart
1038    LOGICAL, INTENT(IN)         ::   FNDSOILW, FNDSNOWH
1040    INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
1041                                       ims, ime, jms, jme, kms, kme, &
1042                                       its, ite, jts, jte, kts, kte
1043    INTEGER , INTENT(IN)        ::     num_soil_layers
1044    INTEGER , INTENT(IN)        ::     UCMCALL 
1046    REAL ,    INTENT(IN)        ::     DT, BLDT
1047    INTEGER , INTENT(INOUT)     ::     STEPBL
1049    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),    &
1050              INTENT(OUT) :: SMFR3D
1052    REAL,     DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
1053                    INTENT(INOUT) :: SMOIS,SH2O,TSLB 
1055    REAL,    DIMENSION( ims:ime, jms:jme )                     , &
1056             INTENT(INOUT)    ::                           SNOW, &
1057                                                          SNOWH, &
1058                                                          SNOWC, &
1059                                                         CANWAT, &
1060                                                         MAVAIL, &
1061                                                         SMSTAV, &
1062                                                         SMSTOT, &
1063                                                      SFCRUNOFF, &
1064                                                       UDRUNOFF, &
1065                                                         ACSNOW, &
1066                                                         VEGFRA, &
1067                                                         ACSNOM, &
1068                                                         SFCEVP, &
1069                                                         GRDFLX, &
1070                                                            UST, &
1071 #if ( NMM_CORE == 1 )
1072                                                             Z0, &
1073 #else
1074                                                            ZNT, &
1075 #endif
1076                                                          XLAND, &
1077                                                          XICE
1079    INTEGER, DIMENSION( ims:ime, jms:jme )                     , &
1080             INTENT(INOUT)    ::                         IVGTYP, &
1081                                                         ISLTYP, &
1082                                                         LOWLYR
1085    REAL,     DIMENSION(1:num_soil_layers), INTENT(INOUT)  ::  ZS,DZS
1087    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
1088                                                            RUBLTEN, &
1089                                                            RVBLTEN, &
1090                                                           EXCH_H,   &
1091                                                           RTHBLTEN, &
1092                                                           RQVBLTEN, &
1093                                                           RQCBLTEN, &
1094                                                           RQIBLTEN, &
1095                                                           TKE_MYJ
1097    REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(IN) ::     TSK
1098    REAL,  DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) ::  TMN
1099    LOGICAL,  INTENT(IN)           :: allowed_to_read
1100    INTEGER :: isn, isfc
1102 !URBAN
1103 !   REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR  !Optional urban
1104 !   REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB  !Optional urban
1105 !   REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG  !Optional urban
1106     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR  !Optional urban
1107     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB  !Optional urban
1108     REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG  !Optional urban
1109     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !Optional urban
1110     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !Optional urban
1111     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !Optional urban
1112     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !Optional urban
1113     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !Optional urban
1114     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !Optional urban
1115     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !Optional urban
1116     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !Optional urban
1117     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !Optional urban
1118     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !Optional urban
1119     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !Optional urban
1120     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !Optional urban
1121     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !Optional urban
1122     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !Optional urban
1123     REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !Optional urban
1124     INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !Optional urban
1125 !    REAL, DIMENSION( ims:ime, 1:num_roof_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1126 !    REAL, DIMENSION( ims:ime, 1:num_wall_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1127 !    REAL, DIMENSION( ims:ime, 1:num_road_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1128     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TRL_URB3D !Optional urban
1129     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TBL_URB3D !Optional urban
1130     REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(INOUT) :: TGL_URB3D !Optional urban
1132 ! Optional OML variables
1133    REAL,  DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1134                                         TML,T0ML,HML,H0ML,HUML,HVML
1135    INTEGER,  OPTIONAL,  INTENT(IN) :: omlcall
1136    REAL,  OPTIONAL,  INTENT(IN) :: oml_hml0
1137    LOGICAL,  INTENT(IN) :: start_of_simulation
1139 !-- calculate pbl time step
1141    STEPBL = nint(BLDT*60./DT)
1142    STEPBL = max(STEPBL,1)
1145 !-- initialize surface layer scheme
1147    sfclay_select: SELECT CASE(config_flags%sf_sfclay_physics)
1149       CASE (SFCLAYSCHEME)
1150            CALL sfclayinit( allowed_to_read )
1151            isfc = 1
1152       CASE (PXSFCSCHEME)
1153            CALL pxsfclayinit( allowed_to_read )
1154            isfc = 1
1155       CASE (MYJSFCSCHEME)
1156            CALL myjsfcinit(LOWLYR,UST,                         &
1157 #if ( NMM_CORE == 1 )
1158                                       Z0,                      &
1159 #else
1160                                       ZNT,                     &
1161 #endif
1162                                           XLAND,XICE,          &
1163                          IVGTYP,restart,                       &
1164                          allowed_to_read ,                     &
1165                          ids, ide, jds, jde, kds, kde,         &
1166                          ims, ime, jms, jme, kms, kme,         &
1167                          its, ite, jts, jte, kts, kte          )
1168            isfc = 2
1170       CASE (GFSSFCSCHEME)
1171            CALL myjsfcinit(LOWLYR,UST,                         &
1172 #if ( NMM_CORE == 1 )
1173                                       Z0,                      &
1174 #else
1175                                       ZNT,                     &
1176 #endif
1177                                           XLAND,XICE,          &
1178                          IVGTYP,restart,                       &
1179                          allowed_to_read ,                     &
1180                          ids, ide, jds, jde, kds, kde,         &
1181                          ims, ime, jms, jme, kms, kme,         &
1182                          its, ite, jts, jte, kts, kte          )
1183            isfc = 1
1185       CASE DEFAULT
1187    END SELECT sfclay_select
1190 !-- initialize surface scheme
1192    sfc_select: SELECT CASE(config_flags%sf_surface_physics)
1194       CASE (SLABSCHEME)
1196            CALL slabinit(TSK,TMN,                              &
1197                          TSLB,ZS,DZS,num_soil_layers,          & 
1198                          allowed_to_read ,start_of_simulation ,&
1199                          ids, ide, jds, jde, kds, kde,         &
1200                          ims, ime, jms, jme, kms, kme,         &
1201                          its, ite, jts, jte, kts, kte,         &
1202                          oml_hml0, omlcall,                    &
1203                          tml, t0ml, hml, h0ml, huml, hvml      )
1205 #if (NMM_CORE == 1)
1206       CASE (NMMLSMSCHEME)
1207            CALL nmmlsminit(isn,XICE,VEGFRA,SNOW,SNOWC, CANWAT,SMSTAV, &
1208                      SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,     &
1209                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,DZS,SFCEVP,   &
1210                      TMN,                                          &
1211                      num_soil_layers,                              &
1212                      allowed_to_read ,                             &
1213                      ids,ide, jds,jde, kds,kde,                    &
1214                      ims,ime, jms,jme, kms,kme,                    &
1215                      its,ite, jts,jte, kts,kte                     )
1216 #endif
1217       CASE (LSMSCHEME)
1218           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
1219                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
1220                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1221                      FNDSOILW, FNDSNOWH,                       &
1222                      num_soil_layers, restart,                 &
1223                      allowed_to_read ,                         &
1224                      ids,ide, jds,jde, kds,kde,                &
1225                      ims,ime, jms,jme, kms,kme,                &
1226                      its,ite, jts,jte, kts,kte                 )
1228 !URBAN
1229           IF(UCMCALL.eq.1) THEN
1231              IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN
1233                 CALL urban_param_init(DZR,DZB,DZG,num_soil_layers                    & !urban
1234                                 )
1235 !                                num_roof_layers,num_wall_layers,road_soil_layers)   !urban
1236                 CALL urban_var_init(TSK,TSLB,TMN,IVGTYP,                             & !urban
1237                               ims,ime,jms,jme,num_soil_layers,                 & !urban
1238 !                              num_roof_layers,num_wall_layers,num_road_layers, & !urban
1239                               restart,                                         & !urban
1240                               XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D,     & !urban
1241                               TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D,    & !urban
1242                               TRL_URB3D,TBL_URB3D,TGL_URB3D,                   & !urban
1243                               SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D, TS_URB2D,    & ! urban
1244                               FRC_URB2D, UTYPE_URB2D)                            !urban
1245              ELSE
1246                 CALL wrf_error_fatal ( 'arguments not present for calling urban model' )
1247              ENDIF
1248           ENDIF
1251       CASE (RUCLSMSCHEME)
1252 !          if(isfc .ne. 2)CALL wrf_error_fatal &
1253 !           ( 'module_physics_init: use myjsfc and myjpbl scheme for this lsm option' )
1254            CALL lsmrucinit( SMFR3D,TSLB,SMOIS,ISLTYP,mavail,       &
1255                      num_soil_layers, restart,                     &
1256                      allowed_to_read ,                             &
1257                      ids,ide, jds,jde, kds,kde,                    &
1258                      ims,ime, jms,jme, kms,kme,                    &
1259                      its,ite, jts,jte, kts,kte                     )
1261       CASE (PXLSMSCHEME)
1262           CALL LSMINIT(VEGFRA,SNOW,SNOWC,SNOWH,CANWAT,SMSTAV,  &
1263                      SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,        &
1264                      ACSNOM,IVGTYP,ISLTYP,TSLB,SMOIS,SH2O,ZS,DZS, &
1265                      FNDSOILW, FNDSNOWH,                       &
1266                      num_soil_layers, restart,                 &
1267                      allowed_to_read ,                         &
1268                      ids,ide, jds,jde, kds,kde,                &
1269                      ims,ime, jms,jme, kms,kme,                &
1270                      its,ite, jts,jte, kts,kte                 )
1272       CASE DEFAULT
1274    END SELECT sfc_select
1277 !-- initialize pbl scheme
1279    pbl_select: SELECT CASE(config_flags%bl_pbl_physics)
1281       CASE (YSUSCHEME)
1282            if(isfc .ne. 1)CALL wrf_error_fatal &
1283             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1284            CALL ysuinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1285                         RQCBLTEN,RQIBLTEN,P_QI,               &
1286                         PARAM_FIRST_SCALAR,                   &
1287                         restart,                              &
1288                         allowed_to_read ,                     &
1289                         ids, ide, jds, jde, kds, kde,         &
1290                         ims, ime, jms, jme, kms, kme,         &
1291                         its, ite, jts, jte, kts, kte          )
1292       CASE (MRFSCHEME)
1293            if(isfc .ne. 1)CALL wrf_error_fatal &
1294             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1295            CALL mrfinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1296                         RQCBLTEN,RQIBLTEN,P_QI,               &
1297                         PARAM_FIRST_SCALAR,                   &
1298                         restart,                              &
1299                         allowed_to_read ,                     &
1300                         ids, ide, jds, jde, kds, kde,         &
1301                         ims, ime, jms, jme, kms, kme,         &
1302                         its, ite, jts, jte, kts, kte          )
1303       CASE (ACMPBLSCHEME)
1304            if(isfc .ne. 1)CALL wrf_error_fatal &
1305             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1306            CALL acminit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1307                         RQCBLTEN,RQIBLTEN,P_QI,               &
1308                         PARAM_FIRST_SCALAR,                   &
1309                         restart,                              &
1310                         allowed_to_read ,                     &
1311                         ids, ide, jds, jde, kds, kde,         &
1312                         ims, ime, jms, jme, kms, kme,         &
1313                         its, ite, jts, jte, kts, kte          )
1314       CASE (GFSSCHEME)
1315            if(isfc .ne. 1)CALL wrf_error_fatal &
1316             ( 'module_physics_init: use sfclay scheme for this pbl option' )
1317            CALL gfsinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,    &
1318                         RQCBLTEN,RQIBLTEN,P_QI,               &
1319                         PARAM_FIRST_SCALAR,                   &
1320                         restart,                              &
1321                         allowed_to_read ,                     &
1322                         ids, ide, jds, jde, kds, kde,         &
1323                         ims, ime, jms, jme, kms, kme,         &
1324                         its, ite, jts, jte, kts, kte          )
1325       CASE (MYJPBLSCHEME)
1326            if(isfc .ne. 2)CALL wrf_error_fatal &
1327             ( 'module_physics_init: use myjsfc scheme for this pbl option' )
1328            CALL myjpblinit(RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN, &
1329                         TKE_MYJ,EXCH_H,restart,               &
1330                         allowed_to_read ,                     &
1331                         ids, ide, jds, jde, kds, kde,         &
1332                         ims, ime, jms, jme, kms, kme,         &
1333                         its, ite, jts, jte, kts, kte          )
1334       CASE DEFAULT
1336    END SELECT pbl_select
1338    END SUBROUTINE bl_init
1340 !==================================================================
1341    SUBROUTINE cu_init(STEPCU,CUDT,DT,RTHCUTEN,RQVCUTEN,RQRCUTEN,  &
1342                       RQCCUTEN,RQSCUTEN,RQICUTEN,NCA,RAINC,       &
1343                       RAINCV,W0AVG,config_flags,restart,          &
1344                       CLDEFI,LOWLYR,MASS_FLUX,                    &
1345                       RTHFTEN, RQVFTEN,                           &
1346                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
1347                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
1348                       cugd_tten,cugd_ttens,cugd_qvten,            &
1349                       cugd_qvtens,cugd_qcten,                     &
1350                       allowed_to_read, start_of_simulation,       &
1351                       ids, ide, jds, jde, kds, kde,               &
1352                       ims, ime, jms, jme, kms, kme,               &
1353                       its, ite, jts, jte, kts, kte                )
1354 !------------------------------------------------------------------
1355    USE module_cu_kf
1356    USE module_cu_kfeta
1357    USE MODULE_CU_BMJ
1358    USE module_cu_gd,  ONLY : GDINIT
1359    USE module_cu_g3,  ONLY : G3INIT
1360    USE module_cu_sas
1361 !------------------------------------------------------------------
1362    IMPLICIT NONE
1363 !------------------------------------------------------------------
1364    TYPE (grid_config_rec_type) ::     config_flags
1365    LOGICAL , INTENT(IN)        :: restart
1368    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
1369                                   ims, ime, jms, jme, kms, kme,   &
1370                                   its, ite, jts, jte, kts, kte
1372    REAL ,    INTENT(IN)        :: DT, CUDT
1373    LOGICAL , INTENT(IN)        :: start_of_simulation
1374    LOGICAL , INTENT(IN)        :: allowed_to_read
1375    INTEGER , INTENT(INOUT)     :: STEPCU
1377    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(INOUT) ::    &
1378             RTHCUTEN, RQVCUTEN, RQCCUTEN, RQRCUTEN, RQICUTEN, RQSCUTEN
1379    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(INOUT) ::    &
1380                         cugd_tten,cugd_ttens,cugd_qvten,            &
1381                         cugd_qvtens,cugd_qcten
1383    REAL ,   DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
1385    REAL,    DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::    &
1386             RTHFTEN, RQVFTEN
1388    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: RAINC, RAINCV
1390    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(OUT):: CLDEFI
1392    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: NCA
1394    REAL ,   DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: MASS_FLUX,   &
1395                                    APR_GR,APR_W,APR_MC,APR_ST,APR_AS,    &
1396                                    APR_CAPMA,APR_CAPME,APR_CAPMI
1398    INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: LOWLYR
1400 ! LOCAL VAR
1401    
1402   INTEGER :: i,j,itf,jtf
1404 !--------------------------------------------------------------------
1406 !-- calculate cumulus parameterization time step
1408    itf=min0(ite,ide-1)
1409    jtf=min0(jte,jde-1)
1411    STEPCU = nint(CUDT*60./DT)
1412    STEPCU = max(STEPCU,1)
1414 !-- initialization
1416    IF(start_of_simulation)THEN
1417      DO j=jts,jtf
1418      DO i=its,itf
1419         RAINC(i,j)=0.
1420         RAINCV(i,j)=0.
1421      ENDDO
1422      ENDDO
1423    ENDIF
1425    cps_select: SELECT CASE(config_flags%cu_physics)
1427      CASE (KFSCHEME)
1428           CALL kfinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,        &
1429                       RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
1430                       PARAM_FIRST_SCALAR,restart,                 &
1431                       allowed_to_read ,                           &
1432                       ids, ide, jds, jde, kds, kde,               &
1433                       ims, ime, jms, jme, kms, kme,               &
1434                       its, ite, jts, jte, kts, kte                )
1436      CASE (BMJSCHEME)
1437           CALL bmjinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,       &
1438                       CLDEFI,LOWLYR,cp,r_d,restart,               &
1439                       allowed_to_read ,                           &
1440                       ids, ide, jds, jde, kds, kde,               &
1441                       ims, ime, jms, jme, kms, kme,               &
1442                       its, ite, jts, jte, kts, kte                )
1444      CASE (KFETASCHEME)
1445           CALL kf_eta_init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQRCUTEN,   &
1446                       RQICUTEN,RQSCUTEN,NCA,W0AVG,P_QI,P_QS,      &
1447                       SVP1,SVP2,SVP3,SVPT0,                       &
1448                       PARAM_FIRST_SCALAR,restart,                 &
1449                       allowed_to_read ,                           &
1450                       ids, ide, jds, jde, kds, kde,               &
1451                       ims, ime, jms, jme, kms, kme,               &
1452                       its, ite, jts, jte, kts, kte                )
1453      CASE (GDSCHEME)
1454           CALL gdinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
1455                       MASS_FLUX,cp,restart,                       &
1456                       P_QC,P_QI,PARAM_FIRST_SCALAR,               &
1457                       RTHFTEN, RQVFTEN,                           &
1458                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
1459                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
1460                       allowed_to_read ,                           &
1461                       ids, ide, jds, jde, kds, kde,               &
1462                       ims, ime, jms, jme, kms, kme,               &
1463                       its, ite, jts, jte, kts, kte                )
1464 #if ( EM_CORE == 1 )
1465      CASE (G3SCHEME)
1466           CALL g3init(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,        &
1467                       MASS_FLUX,cp,restart,                       &
1468                       P_QC,P_QI,PARAM_FIRST_SCALAR,               &
1469                       RTHFTEN, RQVFTEN,                           &
1470                       APR_GR,APR_W,APR_MC,APR_ST,APR_AS,          &
1471                       APR_CAPMA,APR_CAPME,APR_CAPMI,              &
1472                       cugd_tten,cugd_ttens,cugd_qvten,            &
1473                       cugd_qvtens,cugd_qcten,                     &
1474                       allowed_to_read ,                           &
1475                       ids, ide, jds, jde, kds, kde,               &
1476                       ims, ime, jms, jme, kms, kme,               &
1477                       its, ite, jts, jte, kts, kte                )
1478 #endif
1479      CASE (SASSCHEME)
1480           CALL sasinit(RTHCUTEN,RQVCUTEN,RQCCUTEN,RQICUTEN,       &
1481                       restart,P_QC,P_QI,PARAM_FIRST_SCALAR,       &
1482                       allowed_to_read ,                           &
1483                       ids, ide, jds, jde, kds, kde,               &
1484                       ims, ime, jms, jme, kms, kme,               &
1485                       its, ite, jts, jte, kts, kte                )
1487      CASE DEFAULT
1489    END SELECT cps_select
1491    END SUBROUTINE cu_init
1493 !==================================================================
1494    SUBROUTINE mp_init(RAINNC,config_flags,restart,warm_rain,      &
1495                       adv_moist_cond,                             &
1496                       MPDT, DT, DX, DY, LOWLYR,                   & ! for eta mp
1497                       F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,           & ! for eta mp
1498                       mp_restart_state,tbpvs_state,tbpvs0_state,   & ! eta mp
1499                       allowed_to_read, start_of_simulation,       &
1500                       ids, ide, jds, jde, kds, kde,               &
1501                       ims, ime, jms, jme, kms, kme,               &
1502                       its, ite, jts, jte, kts, kte                )
1503 !------------------------------------------------------------------
1504    USE module_mp_wsm3
1505    USE module_mp_wsm5
1506    USE module_mp_wsm6
1507    USE module_mp_etanew
1508    USE module_mp_thompson
1509    USE module_mp_morr_two_moment  
1510 !------------------------------------------------------------------
1511    IMPLICIT NONE
1512 !------------------------------------------------------------------
1513 ! Arguments
1514    TYPE (grid_config_rec_type) ::     config_flags
1515    LOGICAL , INTENT(IN)        :: restart
1516    LOGICAL , INTENT(OUT)       :: warm_rain,adv_moist_cond
1517    REAL    , INTENT(IN)        :: MPDT, DT, DX, DY
1518    LOGICAL , INTENT(IN)        :: start_of_simulation
1520    INTEGER , INTENT(IN)        :: ids, ide, jds, jde, kds, kde,   &
1521                                   ims, ime, jms, jme, kms, kme,   &
1522                                   its, ite, jts, jte, kts, kte
1524    INTEGER , DIMENSION( ims:ime , jms:jme ) ,INTENT(INOUT)  :: LOWLYR
1525    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: RAINNC
1526    REAL,     DIMENSION( ims:ime , kms:kme, jms:jme ) , INTENT(INOUT) :: &
1527                                   F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
1528    REAL , DIMENSION(:) ,INTENT(INOUT)  :: mp_restart_state,tbpvs_state,tbpvs0_state
1529    LOGICAL , INTENT(IN)  :: allowed_to_read
1531 ! Local
1532    INTEGER :: i, j, itf, jtf
1534    warm_rain = .false.
1535    adv_moist_cond = .true.
1536    itf=min0(ite,ide-1)
1537    jtf=min0(jte,jde-1)
1539    IF(start_of_simulation)THEN
1540      DO j=jts,jtf
1541      DO i=its,itf
1542         RAINNC(i,j) = 0.
1543      ENDDO
1544      ENDDO
1545    ENDIF
1547    mp_select: SELECT CASE(config_flags%mp_physics)
1549      CASE (KESSLERSCHEME)
1550           warm_rain = .true.
1551      CASE (WSM3SCHEME)
1552           CALL wsm3init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
1553      CASE (WSM5SCHEME)
1554           CALL wsm5init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
1555      CASE (WSM6SCHEME)
1556           CALL wsm6init(rhoair0,rhowater,rhosnow,cliq,cpv, allowed_to_read )
1557      CASE (ETAMPNEW)
1558          adv_moist_cond = .false.
1559          CALL etanewinit (MPDT,DT,DX,DY,LOWLYR,restart,           &
1560                           F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY,       &
1561                           mp_restart_state,tbpvs_state,tbpvs0_state,&
1562                           allowed_to_read,                        &
1563                           ids, ide, jds, jde, kds, kde,           &
1564                           ims, ime, jms, jme, kms, kme,           &
1565                           its, ite, jts, jte, kts, kte            )
1566      CASE (THOMPSON)
1567          CALL thompson_init
1568      CASE (MORR_TWO_MOMENT)          
1569          CALL morr_two_moment_init  
1571      CASE DEFAULT
1573    END SELECT mp_select
1575    END SUBROUTINE mp_init
1577 #if  ( EM_CORE == 1 )
1578 !==========================================================
1579    SUBROUTINE fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN,    &
1580                 RTHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN,               &
1581                 config_flags,restart,                           &
1582                 allowed_to_read ,                               &
1583                 ids, ide, jds, jde, kds, kde,                   &
1584                 ims, ime, jms, jme, kms, kme,                   &
1585                 its, ite, jts, jte, kts, kte                    )
1588 !--------------------------------------------------------------------
1589    USE module_fdda_psufddagd
1590 !--------------------------------------------------------------------
1591    IMPLICIT NONE
1592 !--------------------------------------------------------------------
1593    TYPE (grid_config_rec_type) ::     config_flags
1594    LOGICAL , INTENT(IN)        :: restart
1596    INTEGER , INTENT(IN)        ::     ids, ide, jds, jde, kds, kde, &
1597                                       ims, ime, jms, jme, kms, kme, &
1598                                       its, ite, jts, jte, kts, kte
1600    REAL ,    INTENT(IN)        ::     DT, FGDT
1601    INTEGER , INTENT(IN)        ::     id
1602    INTEGER , INTENT(INOUT)     ::     STEPFG
1603    REAL,     DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) ::       &
1604                                                            RUNDGDTEN, &
1605                                                            RVNDGDTEN, &
1606                                                           RTHNDGDTEN, &
1607                                                           RQVNDGDTEN
1608    REAL,     DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: RMUNDGDTEN
1610    LOGICAL,  INTENT(IN)           :: allowed_to_read
1611 !--------------------------------------------------------------------
1613 !-- calculate pbl time step
1615    STEPFG = nint(FGDT*60./DT)
1616    STEPFG = max(STEPFG,1)
1619 !-- initialize fdda scheme
1621    fdda_select: SELECT CASE(config_flags%grid_fdda)
1623       CASE (PSUFDDAGD)
1624            CALL fddagdinit(id,rundgdten,rvndgdten,rthndgdten,rqvndgdten,rmundgdten,&
1625                config_flags%run_hours, &
1626                config_flags%if_no_pbl_nudging_uv, &
1627                config_flags%if_no_pbl_nudging_t, &
1628                config_flags%if_no_pbl_nudging_q, &
1629                config_flags%if_zfac_uv, &
1630                config_flags%k_zfac_uv, &
1631                config_flags%if_zfac_t, &
1632                config_flags%k_zfac_t, &
1633                config_flags%if_zfac_q, &
1634                config_flags%k_zfac_q, &
1635                config_flags%guv, &
1636                config_flags%gt, config_flags%gq, &
1637                config_flags%if_ramping, config_flags%dtramp_min, &
1638                config_flags%gfdda_end_h, &
1639                       restart, allowed_to_read,                    &
1640                       ids, ide, jds, jde, kds, kde,                &
1641                       ims, ime, jms, jme, kms, kme,                &
1642                       its, ite, jts, jte, kts, kte                 )
1643       CASE DEFAULT
1645    END SELECT fdda_select
1647    END SUBROUTINE fg_init
1649 !-------------------------------------------------------------------
1650    SUBROUTINE fdob_init(obs_nudge_opt, maxdom, inest, parid,       &
1651                         idynin, dtramp, fdaend, restart,           &
1652                         obs_twindo_cg, obs_twindo, itimestep,      &
1653                         cen_lat, cen_lon, stand_lon,               &
1654                         true_lat1, true_lat2, map_proj,            &
1655                         xlat, xlong,                               &
1656                         s_sn_cg, e_sn_cg, s_we_cg, e_we_cg,        &
1657                         fdob, ipf_init,                            &
1658                         ids, ide, jds, jde, kds, kde,              &
1659                         ims, ime, jms, jme, kms, kme,              &
1660                         its, ite, jts, jte, kts, kte               )
1662 !--------------------------------------------------------------------
1663    USE module_domain
1664    USE module_fddaobs_rtfdda
1665    USE module_llxy
1666 !--------------------------------------------------------------------
1667    IMPLICIT NONE
1668 !--------------------------------------------------------------------
1669    INTEGER , INTENT(IN)    :: maxdom
1670    INTEGER , INTENT(IN)    :: obs_nudge_opt(maxdom)
1671    INTEGER , INTENT(IN)    :: ids,ide, jds,jde, kds,kde,           &
1672                               ims,ime, jms,jme, kms,kme,           &
1673                               its,ite, jts,jte, kts,kte
1674    INTEGER , INTENT(IN)    :: inest
1675    INTEGER , INTENT(IN)    :: parid(maxdom)
1676    INTEGER , INTENT(IN)    :: idynin          ! flag for dynamic initialization
1677    REAL    , INTENT(IN)    :: dtramp          ! time period for ramping (idynin)
1678    REAL    , INTENT(IN)    :: fdaend(maxdom)  ! nudging end time for domain (min)
1679    LOGICAL , INTENT(IN)    :: restart
1680    REAL    , INTENT(IN)    :: obs_twindo_cg   ! twindo on course grid
1681    REAL    , INTENT(IN)    :: obs_twindo
1682    INTEGER , INTENT(IN)    :: itimestep
1683    REAL    , INTENT(IN)    :: cen_lat      ! domain center latitude
1684    REAL    , INTENT(IN)    :: cen_lon      ! domain center longitude
1685    REAL    , INTENT(IN)    :: stand_lon    ! domain longitude
1686    REAL    , INTENT(IN)    :: true_lat1    ! domain standard parallel 
1687    REAL    , INTENT(IN)    :: true_lat2    ! domain second standard parallel
1688    INTEGER , INTENT(IN)    :: map_proj     ! map projection
1689    REAL, DIMENSION( ims:ime, jms:jme ),                            &
1690          INTENT(IN )       :: xlat, xlong  ! lat/long locations on mass point grid
1691    INTEGER, intent(in)     :: s_sn_cg      ! starting north-south coarse-grid index
1692    INTEGER, intent(in)     :: e_sn_cg      ! ending   north-south coarse-grid index
1693    INTEGER, intent(in)     :: s_we_cg      ! starting west-east   coarse-grid index
1694    INTEGER, intent(in)     :: e_we_cg      ! ending   west-east   coarse-grid index
1696    TYPE(fdob_type), INTENT(INOUT)  :: fdob
1698    INTEGER                 :: e_sn         ! ending   north-south grid index
1699    LOGICAL                 :: ipf_init     ! print warnings detected at initialzn
1700 !--------------------------------------------------------------------
1701 !-- initialize fdda obs-nudging scheme
1703       IF ( obs_nudge_opt(inest) .eq. 0 ) RETURN
1705       e_sn = jde
1706       CALL fddaobs_init(obs_nudge_opt, maxdom, inest, parid,       &  
1707                         idynin, dtramp, fdaend, restart,           &
1708                         obs_twindo_cg,                             &
1709                         obs_twindo, itimestep,                     &
1710                         cen_lat, cen_lon, stand_lon,               &
1711                         true_lat1, true_lat2, map_proj,            &
1712                         xlat, xlong,                               &
1713                         e_sn, s_sn_cg, e_sn_cg, s_we_cg, e_we_cg,  &
1714                         fdob, ipf_init,                            &
1715                         ids,ide, jds,jde, kds,kde,                 &  
1716                         ims,ime, jms,jme, kms,kme,                 &  
1717                         its,ite, jts,jte, kts,kte)
1719    END SUBROUTINE fdob_init
1720 #endif
1722 !--------------------------------------------------------------------
1723    SUBROUTINE z2sigma(zf,zh,sf,sh,p_top,pptop,config_flags, &
1724                 allowed_to_read , &
1725                 kds,kde,kms,kme,kts,kte)
1726    IMPLICIT NONE
1727 ! Arguments
1728    INTEGER, INTENT(IN) :: kds,kde,kms,kme,kts,kte
1729    REAL , DIMENSION( kms:kme ), INTENT(IN) :: zf,zh
1730    REAL , DIMENSION( kms:kme ), INTENT(OUT):: sf,sh
1731    REAL , INTENT(IN) :: p_top
1732    REAL , INTENT(OUT) :: pptop
1733    TYPE (grid_config_rec_type)              :: config_flags
1734    LOGICAL , INTENT(IN) :: allowed_to_read
1735 ! Local
1736    REAL R, G, TS, GAMMA, PS, ZTROP, TSTRAT, PTROP, Z, T, P, ZTOP, PTOP
1737    INTEGER K
1739    IF(zf(kde/2) .GT. 1.0)THEN
1740 ! Height levels assumed (zeta coordinate)
1741 ! Convert to sigma using standard atmosphere for pressure-height relation
1742 ! constants for standard atmosphere definition
1743       r=287.05
1744       g=9.80665
1745       ts=288.15
1746       gamma=-6.5/1000.
1747       ps=1013.25
1748       ztrop=11000.
1749       tstrat=ts+gamma*ztrop
1750       ptrop=ps*(tstrat/ts)**(-g/(gamma*r))
1752       do k=kde,kds,-1
1753 ! full levels
1754         z=zf(k)
1755         if(z.le.ztrop)then
1756           t=ts+gamma*z
1757           p=ps*(t/ts)**(-g/(gamma*r))
1758         else
1759           t=tstrat
1760           p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
1761         endif
1762         if(k.eq.kde)then
1763           ztop=zf(k)
1764           ptop=p
1765         endif
1766         sf(k)=(p-ptop)/(ps-ptop)
1767 ! half levels
1768         if(k.ne.kds)then
1769         z=0.5*(zf(k)+zf(k-1))
1770         if(z.le.ztrop)then
1771           t=ts+gamma*z
1772           p=ps*(t/ts)**(-g/(gamma*r))
1773         else
1774           t=tstrat
1775           p=ptrop*exp(-g*(z-ztrop)/(r*tstrat))
1776         endif
1777         sh(k-1)=(p-ptop)/(ps-ptop)
1778         endif
1779       enddo
1780       pptop=ptop/10.
1781    ELSE
1782 !  Levels are already sigma/eta
1783       do k=kde,kds,-1
1784 !        sf(k)=zf(kde-k+kds)
1785 !        if(k .ne. kde)sh(k)=zh(kde-1-k+kds)
1786          sf(k)=zf(k)
1787          if(k .ne. kde)sh(k)=zh(k)
1788       enddo
1789       pptop=p_top/1000.
1791    ENDIF
1793    END SUBROUTINE z2sigma
1795 END MODULE module_physics_init