/wrfv2_fire/phys/module_physics_init.F
FORTRAN Legacy | 2890 lines | 2027 code | 331 blank | 532 comment | 29 complexity | d714e1d2e2743694f30eb848ea228815 MD5 | raw file
Possible License(s): AGPL-1.0
Large files files are truncated, but you can click here to view the full file
- !WRF:MODEL_LAYER:INITIALIZATION
- !
- ! This MODULE holds the routines which are used to perform model start-up operations
- ! for the individual domains. This is the stage after inputting wrfinput and before
- ! calling 'integrate'.
- ! This MODULE CONTAINS the following routines:
- MODULE module_physics_init
- USE module_state_description
- USE module_model_constants
- USE module_configure, ONLY : grid_config_rec_type
- ! USE module_ssib_veg , ONLY : init_module_ssib_veg !fds (SSiB constants)
- CONTAINS
- !=================================================================
- SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, &
- p_top, TSK,RADT,BLDT,CUDT,MPDT, &
- RUCUTEN, RVCUTEN, &
- RTHCUTEN, RQVCUTEN, RQRCUTEN, &
- RQCCUTEN, RQSCUTEN, RQICUTEN, &
- RUSHTEN, RVSHTEN, RTHSHTEN, &
- RQVSHTEN, RQRSHTEN, RQCSHTEN, &
- RQSSHTEN, RQISHTEN, RQGSHTEN, &
- RUBLTEN,RVBLTEN,RTHBLTEN, &
- RQVBLTEN,RQCBLTEN,RQIBLTEN, &
- RTHRATEN,RTHRATENLW,RTHRATENSW, &
- STEPBL,STEPRA,STEPCU, &
- W0AVG, RAINNC, RAINC, RAINCV, RAINNCV, &
- SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV, &
- NCA,swrad_scat, &
- CLDEFI,LOWLYR, &
- MASS_FLUX, &
- RTHFTEN, RQVFTEN, &
- CLDFRA,CLDFRA_OLD,GLW,GSW,EMISS,EMBCK, & !EMBCK new
- LU_INDEX, &
- landuse_ISICE, landuse_LUCATS, &
- landuse_LUSEAS, landuse_ISN, &
- lu_state, &
- XLAT,XLONG,ALBEDO,ALBBCK,GMT,JULYR,JULDAY,&
- levsiz, n_ozmixm, n_aerosolc, paerlev, &
- TMN,XLAND,ZNT,Z0,UST,MOL,PBLH,TKE_PBL, &
- EXCH_H,THC,SNOWC,MAVAIL,HFX,QFX,RAINBL, &
- TSLB,ZS,DZS,num_soil_layers,warm_rain, &
- adv_moist_cond, &
- APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
- APR_CAPMA,APR_CAPME,APR_CAPMI, &
- XICE,XICEM,VEGFRA,SNOW,CANWAT,SMSTAV, &
- SMSTOT, SFCRUNOFF,UDRUNOFF,GRDFLX,ACSNOW,&
- ACSNOM,IVGTYP,ISLTYP, SFCEVP, SMOIS, &
- SH2O, SNOWH, SMFR3D, & ! temporary
- SNOALB, &
- DX,DY,F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
- mp_restart_state,tbpvs_state,tbpvs0_state,&
- allowed_to_read, moved, start_of_simulation,&
- LAGDAY, &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte, &
- NUM_URBAN_LAYERS, &
- raincv_a,raincv_b, &
- gd_cloud,gd_cloud2, & ! Optional
- gd_cloud_a,gd_cloud2_a, & ! Optional
- gd_cloud_b,gd_cloud2_b, & ! Optional
- ozmixm,pin, & ! Optional
- m_ps_1,m_ps_2,m_hybi,aerosolc_1,aerosolc_2,& ! Optional
- RUNDGDTEN,RVNDGDTEN,RTHNDGDTEN, & ! Optional
- RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, & ! Optional
- FGDT,STEPFG, & ! Optional
- cugd_tten,cugd_ttens,cugd_qvten, & ! Optional
- cugd_qvtens,cugd_qcten, & ! Optional
- ISNOWXY, ZSNSOXY, TSNOXY, & ! Optional Noah-MP
- SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, & ! Optional Noah-MP
- CANLIQXY, EAHXY, TAHXY, CMXY, & ! Optional Noah-MP
- CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, & ! Optional Noah-MP
- WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY, & ! Optional Noah-MP
- STMASSXY, WOODXY, STBLCPXY, FASTCPXY, & ! Optional Noah-MP
- XSAIXY, & ! Optional Noah-MP
- T2MVXY, T2MBXY, CHSTARXY , & ! Optional Noah-MP
- ! num_roof_layers,num_wall_layers, & !Optional urban
- ! num_road_layers, & !Optional urban
- DZR, DZB, DZG, & !Optional urban
- TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D, & !Optional urban
- QC_URB2D, XXXR_URB2D,XXXB_URB2D, & !Optional urban
- XXXG_URB2D, XXXC_URB2D, & !Optional urban
- TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
- SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
- TS_URB2D, FRC_URB2D, UTYPE_URB2D, & !Optional urban
- TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
- TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
- TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
- TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
- SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
- SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
- SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
- SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
- SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
- A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
- A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
- B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
- DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
- TML,T0ML,HML,H0ML,HUML,HVML,TMOML, & !Optional oml
- itimestep, & !Optional obs fdda
- #if ( EM_CORE == 1 )
- fdob, & !Optional obs fdda
- #endif
- t00, p00, tlp, & !for obs-nudging
- TYR,TYRA,TDLY,TLAG,NYEAR,NDAY,tmn_update, &
- ACHFX,ACLHF,ACGRDFLX &
- ! OPTIONAL
- ,te_temf & ! WA 12/21/09
- ,cf3d_temf & ! WA 9/27/10
- ,wm_temf & ! WA 2/22/11
- ,massflux_EDKF, entr_EDKF, detr_EDKF & ! Optional for qnse
- ,thl_up, thv_up, rt_up & ! Optional for qnse
- ,rv_up, rc_up, u_up, v_up, frac_up & ! Optional for qnse
- )
- !-----------------------------------------------------------------
- USE module_domain
- USE module_wrf_error
- USE module_wind_generic
- USE module_wind_fitch
- IMPLICIT NONE
- !-----------------------------------------------------------------
- TYPE (grid_config_rec_type) :: config_flags
- INTEGER , INTENT(IN) :: id
- INTEGER , INTENT(IN) ,OPTIONAL :: tmn_update
- LOGICAL , INTENT(OUT) :: warm_rain,adv_moist_cond
- ! LOGICAL , INTENT (IN) :: FNDSOILW, FNDSNOWH
- LOGICAL, PARAMETER :: FNDSOILW=.true., FNDSNOWH=.true.
- INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte
- INTEGER , INTENT(IN) :: num_soil_layers
- INTEGER , INTENT(IN) :: lagday
- INTEGER , INTENT(OUT) ,OPTIONAL :: nyear
- REAL , INTENT(OUT) ,OPTIONAL :: nday
- LOGICAL, INTENT(IN) :: start_of_simulation
- REAL, INTENT(IN) :: DT, p_top, DX, DY
- LOGICAL, INTENT(IN) :: restart
- REAL, INTENT(IN) :: RADT,BLDT,CUDT,MPDT
- REAL, INTENT(IN) :: swrad_scat
- REAL, DIMENSION( kms:kme ) , INTENT(IN) :: zfull, zhalf
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN) :: TSK, XLAT, XLONG
- INTEGER, INTENT(IN ) :: levsiz, n_ozmixm
- INTEGER, INTENT(IN ) :: paerlev, n_aerosolc
- REAL, DIMENSION( ims:ime, levsiz, jms:jme, n_ozmixm ), OPTIONAL, &
- INTENT(INOUT) :: OZMIXM
- REAL, DIMENSION(levsiz), OPTIONAL, INTENT(INOUT) :: PIN
- REAL, DIMENSION(ims:ime,jms:jme), OPTIONAL, INTENT(INOUT) :: m_ps_1,m_ps_2
- REAL, DIMENSION(paerlev), OPTIONAL,INTENT(INOUT) :: m_hybi
- REAL, DIMENSION( ims:ime, paerlev, jms:jme, n_aerosolc ), OPTIONAL, &
- INTENT(INOUT) :: aerosolc_1, aerosolc_2
- REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ),&
- INTENT(INOUT) :: SMOIS, SH2O,TSLB
- REAL, DIMENSION( ims:ime , 1:num_soil_layers , jms:jme ), INTENT(OUT) :: SMFR3D
- REAL, DIMENSION( ims:ime, jms:jme ) , &
- INTENT(INOUT) :: SNOW, &
- SNOWC, &
- SNOWH, &
- CANWAT, &
- SMSTAV, &
- SMSTOT, &
- SFCRUNOFF, &
- UDRUNOFF, &
- SFCEVP, &
- GRDFLX, &
- ACSNOW, &
- XICE, &
- XICEM, &
- VEGFRA, &
- ACSNOM
- REAL, DIMENSION( ims:ime, jms:jme ) , &
- OPTIONAL, INTENT(INOUT) :: ACHFX, &
- ACLHF, &
- ACGRDFLX
- INTEGER, DIMENSION( ims:ime, jms:jme ) , &
- INTENT(INOUT) :: IVGTYP, &
- ISLTYP
- ! rad
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
- RTHRATEN, RTHRATENLW, RTHRATENSW, CLDFRA
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
- CLDFRA_OLD
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
- GSW,ALBEDO,ALBBCK,GLW,EMISS,EMBCK !EMBCK new
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: SNOALB
- REAL, INTENT(IN) :: GMT
- INTEGER , INTENT(OUT) :: STEPRA, STEPBL, STEPCU
- INTEGER , INTENT(IN) :: JULYR, JULDAY
- ! cps
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
- RUCUTEN, RVCUTEN, RTHCUTEN, RQVCUTEN, RQRCUTEN, RQCCUTEN, &
- RQSCUTEN, RQICUTEN, &
- RUSHTEN, RVSHTEN, RTHSHTEN, RQVSHTEN, RQRSHTEN, RQCSHTEN, &
- RQSSHTEN, RQISHTEN, RQGSHTEN
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: W0AVG
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: MASS_FLUX, &
- APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
- APR_CAPMA,APR_CAPME,APR_CAPMI
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
- RTHFTEN, RQVFTEN
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: &
- RAINNC, RAINC, RAINCV, RAINNCV, &
- SNOWNC, SNOWNCV, GRAUPELNC, GRAUPELNCV
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: CLDEFI, NCA
- INTEGER, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT) :: LOWLYR
- !pbl
- ! soil layer
- REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: ZS,DZS
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
- RUBLTEN,RVBLTEN,RTHBLTEN,RQVBLTEN,RQCBLTEN,RQIBLTEN,EXCH_H,TKE_PBL
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT), OPTIONAL :: &
- massflux_EDKF, entr_EDKF, detr_EDKF &
- ,thl_up, thv_up, rt_up &
- ,rv_up, rc_up, u_up, v_up &
- ,frac_up
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
- cugd_tten,cugd_ttens,cugd_qvten, &
- cugd_qvtens,cugd_qcten
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: &
- XLAND,ZNT,Z0,UST,MOL,LU_INDEX, &
- PBLH,THC,MAVAIL,HFX,QFX,RAINBL
- INTEGER , INTENT(INOUT) :: landuse_ISICE, landuse_LUCATS
- INTEGER , INTENT(INOUT) :: landuse_LUSEAS, landuse_ISN
- REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT) :: TMN
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYR
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TYRA
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(INOUT),OPTIONAL :: TDLY
- REAL, DIMENSION( ims:ime , 1:lagday , jms:jme ) , INTENT(INOUT),OPTIONAL :: TLAG
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
- OPTIONAL, &
- INTENT(INOUT ) :: &
- gd_cloud, gd_cloud2, &
- gd_cloud_a, gd_cloud2_a, &
- gd_cloud_b, gd_cloud2_b
- REAL, DIMENSION( ims:ime , jms:jme ) , &
- INTENT(INOUT ) :: &
- raincv_a,raincv_b
- !Noah-MP
- INTEGER, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ISNOWXY
- REAL, OPTIONAL, DIMENSION(ims:ime,-2:num_soil_layers, jms:jme) :: ZSNSOXY
- REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: TSNOXY
- REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNICEXY
- REAL, OPTIONAL, DIMENSION(ims:ime,-2:0, jms:jme) :: SNLIQXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TVXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TGXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANICEXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CANLIQXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: EAHXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: TAHXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CMXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FWETXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: SNEQVOXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ALBOLDXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: QSNOWXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WSLAKEXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: ZWTXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WAXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WTXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: LFMASSXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: RTMASSXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STMASSXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: WOODXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: STBLCPXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: FASTCPXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: XSAIXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MVXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: T2MBXY
- REAL, OPTIONAL, DIMENSION(ims:ime,jms:jme) :: CHSTARXY
- !mp
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , INTENT(OUT) :: &
- F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY
- REAL, DIMENSION(:), INTENT(INOUT) :: mp_restart_state,tbpvs_state,tbpvs0_state
- LOGICAL, INTENT(IN) :: allowed_to_read, moved
- ! ocean mixed layer
- REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(INOUT) :: &
- TML,T0ML,HML,H0ML,HUML,HVML,TMOML
- !fdda
- REAL, OPTIONAL, INTENT(IN) :: FGDT
- INTEGER , OPTIONAL, INTENT(OUT) :: STEPFG
- REAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
- RUNDGDTEN, RVNDGDTEN, RTHNDGDTEN, RPHNDGDTEN, RQVNDGDTEN
- REAL, DIMENSION( ims:ime , jms:jme ) , OPTIONAL, INTENT(OUT) :: &
- RMUNDGDTEN
- !URBAN
- ! REAL, DIMENSION(1:num_roof_layers), INTENT(INOUT) :: DZR !urban
- ! REAL, DIMENSION(1:num_wall_layers), INTENT(INOUT) :: DZB !urban
- ! REAL, DIMENSION(1:num_road_layers), INTENT(INOUT) :: DZG !urban
- REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZR !urban
- REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB !urban
- REAL, OPTIONAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TR_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TB_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TG_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TC_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: QC_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXR_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXB_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXG_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: XXXC_URB2D !urban
- ! REAL, DIMENSION(ims:ime, 1:num_roof_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
- ! REAL, DIMENSION(ims:ime, 1:num_wall_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
- ! REAL, DIMENSION(ims:ime, 1:num_road_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TRL_URB3D !urban
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TBL_URB3D !urban
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_soil_layers, jms:jme), INTENT(INOUT) :: TGL_URB3D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SH_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LH_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: G_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: RN_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: TS_URB2D !urban
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: FRC_URB2D !urban
- INTEGER, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: UTYPE_URB2D !urban
- INTEGER , INTENT(IN) :: num_urban_layers
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TW2_URB4D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TGB_URB4D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: TLEV_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: QLEV_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW1LEV_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TW2LEV_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TGLEV_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: TFLEV_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LF_AC_URB3D !multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SF_AC_URB3D !multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: CM_AC_URB3D !multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: SFVENT_URB3D !multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_layers, jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, 1:num_urban_layers, jms:jme), INTENT(INOUT) :: SFW2_URB3D ! multi-layer UCM
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_U_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_V_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_T_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_Q_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: A_E_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_U_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_V_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_T_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_Q_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: B_E_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: VL_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DLG_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme,jms:jme), INTENT(INOUT) :: SF_BEP
- REAL, OPTIONAL, DIMENSION(ims:ime, kms:kme, jms:jme), INTENT(INOUT) :: DL_U_BEP
- !obs fdda
- INTEGER, OPTIONAL, INTENT(IN) :: itimestep
- #if ( EM_CORE == 1 )
- TYPE(fdob_type), OPTIONAL, INTENT(INOUT) :: fdob
- #endif
- REAL, OPTIONAL, INTENT(IN) :: p00, t00, tlp ! for obs-nudging base-state calcn
- ! WA 12/21/09
- REAL,OPTIONAL, DIMENSION( ims:ime , kms:kme , jms:jme ) , &
- INTENT(OUT) :: te_temf, cf3d_temf
- ! WA 2/22/11
- REAL,OPTIONAL, DIMENSION( ims:ime , jms:jme ) , &
- INTENT(OUT) :: wm_temf
- ! Local data
- REAL :: ALBLND,ZZLND,ZZWTR,THINLD,XMAVA,CEN_LAT,pptop
- REAL, DIMENSION( kms:kme ) :: sfull, shalf
- REAL :: obs_twindo_cg, obs_twindo
- CHARACTER*256 :: MMINLU_loc
- CHARACTER*80 :: message
- INTEGER :: ISWATER
- INTEGER :: ISICE
- INTEGER :: ISURBAN
- INTEGER :: sf_urban_physics
- INTEGER :: omlcall
- REAL :: oml_hml0
- LOGICAL :: usemonalb
- LOGICAL :: rdmaxalb
- INTEGER :: mfshconv
- INTEGER :: i, j, k, itf, jtf, ktf, n
- integer myproc
- !-----------------------------------------------------------------
- sf_urban_physics=config_flags%sf_urban_physics
- usemonalb=config_flags%usemonalb
- rdmaxalb=config_flags%rdmaxalb
- mfshconv=config_flags%mfshconv
- #if ( EM_CORE == 1 )
- obs_twindo_cg=model_config_rec%obs_twindo(1)
- obs_twindo=config_flags%obs_twindo
- oml_hml0=config_flags%oml_hml0
- omlcall=config_flags%omlcall
- #endif
- !-- should be from the namelist
- sfull = 0.
- shalf = 0.
- CALL wrf_debug(100,'top of phy_init')
- WRITE(wrf_err_message,*) 'phy_init: start_of_simulation = ',start_of_simulation
- CALL wrf_debug ( 100, TRIM(wrf_err_message) )
- itf=min0(ite,ide-1)
- jtf=min0(jte,jde-1)
- ktf=min0(kte,kde-1)
- ZZLND=0.1
- ZZWTR=0.0001
- THINLD=0.04
- ALBLND=0.2
- XMAVA=0.3
- #if (NMM_CORE == 1)
- if (.not.usemonalb) CALL wrf_error_fatal('usemonalb should always be true for NMM')
- #endif
- CALL nl_get_cen_lat(id,cen_lat)
- CALL wrf_debug(100,'calling nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
- CALL nl_get_iswater(id,iswater)
- CALL nl_get_isice(id,isice)
- CALL nl_get_isurban(id,isurban)
- CALL nl_get_mminlu( 1, mminlu_loc )
- CALL wrf_debug(100,'after nl_get_iswater, nl_get_isice, nl_get_mminlu_loc')
- !-- temporary fix by ww
- landuse_ISICE = isice
- ! Added for Wind Turbine parameterization code -- This will only read in an optional
- ! configuration file with information that will be used by inividual turbine init routines
- ! as each domain is initialized.
- IF ( id .EQ. 1 ) THEN
- CALL init_module_wind_generic
- CALL init_module_wind_fitch
- ENDIF
- !
- IF(.not.restart)THEN
- !-- initialize common variables
- IF ( .NOT. moved ) THEN
- DO j=jts,jtf
- DO i=its,itf
- XLAND(i,j)=1.
- GSW(i,j)=0.
- GLW(i,j)=0.
- !-- initialize ust to a small value
- UST(i,j)=0.0001
- MOL(i,j)=0.0
- PBLH(i,j)=0.0
- HFX(i,j)=0.
- QFX(i,j)=0.
- RAINBL(i,j)=0.
- RAINNCV(i,j)=0.
- SNOWNCV(i,j)=0.
- GRAUPELNCV(i,j)=0.
- ACSNOW(i,j)=0.
- DO k=kms,kme !wig, 17-May-2006: Added for idealized chem. runs
- EXCH_H(i,k,j) = 0.
- END DO
- ENDDO
- ENDDO
- ENDIF
- !
- IF(PRESENT(TMN_UPDATE))THEN
- if(tmn_update.eq.1) then
- nyear=1
- nday=0.
- DO j=jts,jtf
- DO i=its,itf
- TYR(i,j)=TMN(i,j)
- TYRA(i,j)=0.0
- TDLY(i,j)=0.0
- DO n=1,lagday
- TLAG(i,n,j)=TMN(i,j)
- ENDDO
- ENDDO
- ENDDO
- endif
- ENDIF
- !
- !
- DO j=jts,jtf
- DO i=its,itf
- IF(XLAND(i,j) .LT. 1.5)THEN
- IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=ALBLND
- EMBCK(i,j)=0.85
- ALBEDO(i,j)=ALBBCK(i,j)
- EMISS(i,j)=EMBCK(i,j)
- THC(i,j)=THINLD
- ZNT(i,j)=ZZLND
- #if ! ( NMM_CORE == 1 )
- Z0(i,j)=ZZLND
- #endif
- MAVAIL(i,j)=XMAVA
- ELSE
- IF(mminlu_loc .EQ. ' ') ALBBCK(i,j)=0.08
- ALBEDO(i,j)=ALBBCK(i,j)
- EMBCK(i,j)=0.98
- EMISS(i,j)=EMBCK(i,j)
- THC(i,j)=THINLD
- ZNT(i,j)=ZZWTR
- #if ! ( NMM_CORE == 1 )
- Z0(i,j)=ZZWTR
- #endif
- MAVAIL(i,j)=1.0
- ENDIF
- ENDDO
- ENDDO
- if (config_flags%cu_diag == 1 )then
- do j=jts,jtf
- do k=kts,ktf
- do i=its,itf
- gd_cloud(i,k,j) = 0.
- gd_cloud2(i,k,j) = 0.
- gd_cloud_a(i,k,j) = 0.
- gd_cloud2_a(i,k,j) = 0.
- gd_cloud_b(i,k,j) = 0.
- gd_cloud2_b(i,k,j) = 0.
- end do
- end do
- end do
- endif
- do j=jts,jtf
- do i=its,itf
- raincv_a(i,j)=0.
- raincv_b(i,j)=0.
- end do
- end do
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to landuse_init' )
- IF(mminlu_loc .ne. ' ')THEN
- !-- initialize surface properties
- CALL landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
- znt, Z0, thc, xland, xice, xicem, julday, cen_lat, iswater, &
- TRIM ( mminlu_loc ) , &
- landuse_ISICE, landuse_LUCATS, &
- landuse_LUSEAS, landuse_ISN, &
- config_flags%fractional_seaice, &
- lu_state, &
- allowed_to_read , usemonalb , &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- ENDIF
- ENDIF
- !-- convert zfull and zhalf to sigma values for ra_init (Eta CO2 needs these)
- !-- zfull/zhalf may be either zeta or eta
- !-- what is done here depends on coordinate (check this code if adding new coordinates)
- CALL z2sigma(zfull,zhalf,sfull,shalf,p_top,pptop,config_flags, &
- allowed_to_read, &
- kds,kde,kms,kme,kts,kte)
- !-- initialize physics
- !-- ra: radiation
- !-- bl: pbl
- !-- cu: cumulus
- !-- mp: microphysics
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to ra_init' )
- CALL ra_init(id=id,STEPRA=STEPRA,RADT=RADT,DT=DT,RTHRATEN=RTHRATEN,RTHRATENLW=RTHRATENLW, &
- RTHRATENSW=RTHRATENSW,CLDFRA=CLDFRA,EMISS=EMISS,cen_lat=cen_lat,JULYR=JULYR,JULDAY=JULDAY,GMT=GMT, &
- levsiz=levsiz,XLAT=XLAT,n_ozmixm=n_ozmixm, &
- cldfra_old=cldfra_old, & ! Optional
- ozmixm=ozmixm,pin=pin, & ! Optional
- m_ps_1=m_ps_1,m_ps_2=m_ps_2,m_hybi=m_hybi,aerosolc_1=aerosolc_1,aerosolc_2=aerosolc_2, & ! Optional
- paerlev=paerlev,n_aerosolc=n_aerosolc, &
- sfull=sfull,shalf=shalf,pptop=pptop,swrad_scat=swrad_scat,p_top=p_top, &
- config_flags=config_flags,restart=restart, &
- allowed_to_read=allowed_to_read, start_of_simulation=start_of_simulation, &
- ids=ids, ide=ide, jds=jds, jde=jde, kds=kds, kde=kde, &
- ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, &
- its=its, ite=ite, jts=jts, jte=jte, kts=kts, kte=kte )
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to bl_init' )
- CALL bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, &
- RQVBLTEN,RQCBLTEN,RQIBLTEN,TSK,TMN, &
- config_flags,restart,UST,LOWLYR,TSLB,ZS,DZS, &
- num_soil_layers,TKE_PBL,mfshconv, &
- massflux_EDKF, entr_EDKF, detr_EDKF, &
- thl_up, thv_up, rt_up, &
- rv_up, rc_up, u_up, v_up, &
- frac_up, &
- EXCH_H,VEGFRA, &
- SNOW,SNOWC, CANWAT,SMSTAV, &
- SMSTOT, SFCRUNOFF,UDRUNOFF,ACSNOW,ACSNOM, &
- IVGTYP,ISLTYP,ISURBAN,SMOIS,SMFR3D,MAVAIL, &
- SNOWH,SH2O,SNOALB,FNDSOILW,FNDSNOWH,RDMAXALB, &
- #if (NMM_CORE == 1)
- Z0,XLAND,XICE, &
- #else
- ZNT,XLAND,XICE, &
- #endif
- SFCEVP,GRDFLX, &
- TRIM (MMINLU_LOC), &
- ISNOWXY, ZSNSOXY, TSNOXY, &
- SNICEXY, SNLIQXY, TVXY, TGXY, CANICEXY, &
- CANLIQXY, EAHXY, TAHXY, CMXY, &
- CHXY, FWETXY, SNEQVOXY, ALBOLDXY, QSNOWXY, &
- WSLAKEXY, ZWTXY, WAXY, WTXY, LFMASSXY, RTMASSXY,&
- STMASSXY, WOODXY, STBLCPXY, FASTCPXY, &
- XSAIXY, &
- T2MVXY,T2MBXY,CHSTARXY , &
- allowed_to_read , &
- start_of_simulation , &
- te_temf,cf3d_temf,wm_temf, & ! WA
- DZR, DZB, DZG, & !Optional urban
- TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !Optional urban
- XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !Optional urban
- TRL_URB3D, TBL_URB3D, TGL_URB3D, & !Optional urban
- SH_URB2D, LH_URB2D, G_URB2D, RN_URB2D, & !Optional urban
- TS_URB2D, FRC_URB2D, UTYPE_URB2D, &
- SF_URBAN_PHYSICS, & !Optional urban
- NUM_URBAN_LAYERS, & !Optional multi-layer urban
- TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban
- TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban
- TW1LEV_URB3D,TW2LEV_URB3D, & !Optional multi-layer urban
- TGLEV_URB3D,TFLEV_URB3D, & !Optional multi-layer urban
- SF_AC_URB3D,LF_AC_URB3D,CM_AC_URB3D, & !Optional multi-layer urban
- SFVENT_URB3D,LFVENT_URB3D, & !Optional multi-layer urban
- SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban
- SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban
- SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban
- A_U_BEP,A_V_BEP,A_T_BEP,A_Q_BEP, & !Optional multi-layer urban
- A_E_BEP,B_U_BEP,B_V_BEP, & !Optional multi-layer urban
- B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !Optional multi-layer urban
- DL_U_BEP,SF_BEP,VL_BEP, & !Optional multi-layer urban
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte, &
- ACHFX,ACLHF,ACGRDFLX, &
- oml_hml0, omlcall, & !Optional oml
- TML,T0ML,HML,H0ML,HUML,HVML,TMOML ) !Optional oml
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to cu_init' )
- CALL cu_init(STEPCU,CUDT,DT,RUCUTEN,RVCUTEN,RTHCUTEN, &
- RQVCUTEN,RQRCUTEN,RQCCUTEN,RQSCUTEN,RQICUTEN, &
- NCA,RAINC,RAINCV,W0AVG,config_flags,restart, &
- CLDEFI,LOWLYR,MASS_FLUX, &
- RTHFTEN, RQVFTEN, &
- APR_GR,APR_W,APR_MC,APR_ST,APR_AS, &
- APR_CAPMA,APR_CAPME,APR_CAPMI, &
- cugd_tten,cugd_ttens,cugd_qvten, &
- cugd_qvtens,cugd_qcten, &
- allowed_to_read, start_of_simulation, &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to shcu_init' )
- CALL shcu_init(STEPCU,CUDT,DT,RUSHTEN,RVSHTEN,RTHSHTEN, &
- RQVSHTEN,RQRSHTEN,RQCSHTEN, &
- RQSSHTEN,RQISHTEN,RQGSHTEN, &
- NCA,RAINC,RAINCV,config_flags,restart, &
- allowed_to_read, start_of_simulation, &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to mp_init' )
- CALL mp_init(RAINNC,SNOWNC,GRAUPELNC,config_flags,restart,warm_rain, &
- adv_moist_cond, &
- MPDT, DT, DX, DY, LOWLYR, &
- F_ICE_PHY,F_RAIN_PHY,F_RIMEF_PHY, &
- mp_restart_state,tbpvs_state,tbpvs0_state, &
- allowed_to_read, start_of_simulation, &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- #if ( EM_CORE == 1 )
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fg_init' )
- CALL fg_init(STEPFG,FGDT,DT,id,RUNDGDTEN,RVNDGDTEN, &
- RTHNDGDTEN,RPHNDGDTEN,RQVNDGDTEN,RMUNDGDTEN, &
- config_flags,restart, &
- allowed_to_read , &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- CALL wrf_debug ( 200 , 'module_start: phy_init: Before call to fdob_init' )
- CALL fdob_init(model_config_rec%obs_nudge_opt, &
- model_config_rec%max_dom, &
- id, &
- model_config_rec%parent_id, &
- model_config_rec%obs_idynin, &
- model_config_rec%obs_dtramp, &
- model_config_rec%fdda_end, &
- model_config_rec%restart, &
- obs_twindo_cg, obs_twindo, &
- itimestep, &
- model_config_rec%obs_no_pbl_nudge_uv, &
- model_config_rec%obs_no_pbl_nudge_t, &
- model_config_rec%obs_no_pbl_nudge_q, &
- model_config_rec%obs_sfc_scheme_horiz, &
- model_config_rec%obs_sfc_scheme_vert, &
- model_config_rec%obs_max_sndng_gap, &
- model_config_rec%obs_sfcfact, &
- model_config_rec%obs_sfcfacr, &
- model_config_rec%obs_dpsmx, &
- model_config_rec%obs_nudge_wind, &
- model_config_rec%obs_nudge_temp, &
- model_config_rec%obs_nudge_mois, &
- model_config_rec%obs_nudgezfullr1_uv, &
- model_config_rec%obs_nudgezrampr1_uv, &
- model_config_rec%obs_nudgezfullr2_uv, &
- model_config_rec%obs_nudgezrampr2_uv, &
- model_config_rec%obs_nudgezfullr4_uv, &
- model_config_rec%obs_nudgezrampr4_uv, &
- model_config_rec%obs_nudgezfullr1_t, &
- model_config_rec%obs_nudgezrampr1_t, &
- model_config_rec%obs_nudgezfullr2_t, &
- model_config_rec%obs_nudgezrampr2_t, &
- model_config_rec%obs_nudgezfullr4_t, &
- model_config_rec%obs_nudgezrampr4_t, &
- model_config_rec%obs_nudgezfullr1_q, &
- model_config_rec%obs_nudgezrampr1_q, &
- model_config_rec%obs_nudgezfullr2_q, &
- model_config_rec%obs_nudgezrampr2_q, &
- model_config_rec%obs_nudgezfullr4_q, &
- model_config_rec%obs_nudgezrampr4_q, &
- model_config_rec%obs_nudgezfullmin, &
- model_config_rec%obs_nudgezrampmin, &
- model_config_rec%obs_nudgezmax, &
- xlat, &
- xlong, &
- model_config_rec%start_year(id), &
- model_config_rec%start_month(id), &
- model_config_rec%start_day(id), &
- model_config_rec%start_hour(id), &
- model_config_rec%start_minute(id), &
- model_config_rec%start_second(id), &
- p00, t00, tlp, &
- zhalf, p_top, &
- fdob, &
- model_config_rec%obs_ipf_init, &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- #endif
- END SUBROUTINE phy_init
- !=====================================================================
- SUBROUTINE landuse_init(lu_index, snowc, albedo, albbck, snoalb, mavail, emiss, embck, &
- znt,Z0,thc,xland, xice, xicem, julday, cen_lat, iswater, mminlu, &
- ISICE, LUCATS, LUSEAS, ISN, &
- fractional_seaice, &
- lu_state, &
- allowed_to_read , usemonalb , &
- ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte )
- USE module_wrf_error
- IMPLICIT NONE
- !---------------------------------------------------------------------
- INTEGER , INTENT(IN) :: ids, ide, jds, jde, kds, kde, &
- ims, ime, jms, jme, kms, kme, &
- its, ite, jts, jte, kts, kte
- INTEGER , INTENT(IN) :: iswater, julday
- REAL , INTENT(IN) :: cen_lat
- CHARACTER(LEN=*), INTENT(IN) :: mminlu
- LOGICAL, INTENT(IN) :: allowed_to_read , usemonalb
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(IN ) :: lu_index, snowc, xice, snoalb
- REAL, DIMENSION( ims:ime , jms:jme ) , INTENT(OUT ) :: albedo, albbck, mavail, emiss, &
- embck, &
- znt, Z0, thc, xland, xicem
- INTEGER , INTENT(INOUT) :: ISICE, LUCATS, LUSEAS, ISN, fractional_seaice
- REAL , INTENT(INOUT) , DIMENSION( : ) :: lu_state
- REAL :: xice_threshold
- !---------------------------------------------------------------------
- ! Local
- CHARACTER*256 LUTYPE
- CHARACTER*80 :: message
- INTEGER :: landuse_unit, LS, LC, LI, LUN, NSN
- INTEGER :: i, j, itf, jtf, is, cats, seas, curs
- INTEGER , PARAMETER :: OPEN_OK = 0
- INTEGER :: ierr
- INTEGER , PARAMETER :: max_cats = 100 , max_seas = 12
- REAL , DIMENSION( max_cats, max_seas ) :: ALBD, SLMO, SFEM, SFZ0, THERIN, SFHC
- REAL , DIMENSION( max_cats ) :: SCFX
- ! save these fields in case nest moves or has to be reinitialized
- ! and this routine is called with allowed_to_read set to false
- ! note that by saving these, we're locking in the same landuse for
- ! the duration of a run; possible implications for long climate runs
- LOGICAL :: found_lu, end_of_file
- LOGICAL, EXTERNAL :: wrf_dm_on_monitor
- !---------------------------------------------------------------------
- CALL wrf_debug( 100 , 'top of landuse_init' )
- NSN=-1 ! set this to suppress uninitalized data messages from tools
- if ( fractional_seaice == 0 ) then
- xice_threshold = 0.5
- else if ( fractional_seaice == 1 ) then
- xice_threshold = 0.02
- endif
- ! recover LU variables from state
- IF ( 6*(max_cats*max_seas)+1*max_cats .GT. 7501 ) THEN
- WRITE(message,*)'landuse_init: lu_state overflow. Make Registry dimspec p > ',6*(max_cats*max_seas)+1*max_cats
- ENDIF
- curs = 1
- DO cats = 1, max_cats
- SCFX(cats) = lu_state(curs) ; curs = curs + 1
- DO seas = 1, max_seas
- ALBD(cats,seas) = lu_state(curs) ; curs = curs + 1
- SLMO(cats,seas) = lu_state(curs) ; curs = curs + 1
- SFEM(cats,seas) = lu_state(curs) ; curs = curs + 1
- SFZ0(cats,seas) = lu_state(curs) ; curs = curs + 1
- SFHC(cats,seas) = lu_state(curs) ; curs = curs + 1
- THERIN(cats,seas) = lu_state(curs) ; curs = curs + 1
- ENDDO
- ENDDO
- ! Determine season (summer=1, winter=2)
- ISN=1
- IF(JULDAY.LT.105.OR.JULDAY.GT.288)ISN=2
- IF(CEN_LAT.LT.0.0)ISN=3-ISN
- FOUND_LU = .TRUE.
- IF ( allowed_to_read ) THEN
- landuse_unit = 29
- IF ( wrf_dm_on_monitor() ) THEN
- OPEN(landuse_unit, FILE='LANDUSE.TBL',FORM='FORMATTED',STATUS='OLD',IOSTAT=ierr)
- IF ( ierr .NE. OPEN_OK ) THEN
- WRITE(message,FMT='(A)') &
- 'module_physics_init.F: LANDUSE_INIT: open failure for LANDUSE.TBL'
- CALL wrf_error_fatal ( message )
- END IF
- ENDIF
- ! Read info from file LANDUSE.TBL
- ! IF(MMINLU.EQ.'OLD ')THEN
- ! ISWATER=7
- ! ISICE=11
- ! ELSE IF(MMINLU.EQ.'USGS')THEN
- ! ISWATER=16
- ! ISICE=24
- ! ELSE IF(MMINLU.EQ.'SiB ')THEN
- ! ISWATER=15
- ! ISICE=16
- ! ELSE IF(MMINLU.EQ.'LW12')THEN
- ! ISWATER=15
- ! ISICE=3
- ! ELSE IF (MMINLU .EQ. 'MODIFIED_IGBP_MODIS_NOAH') THEN
- ! ISICE = 15
- ! ELSE
- ! call wrf_error_fatal ("INPUT LandUse not found: "//TRIM(MMINLU))
- ! ENDIF
- call wrf_message ( 'INPUT LandUse = "' // TRIM(MMINLU) // '"' )
- FOUND_LU = .FALSE.
- end_of_file = .FALSE.
- !!! BEGINNING OF 1999 LOOP
- 1999 CONTINUE
- IF ( wrf_dm_on_monitor() ) THEN
- READ (landuse_unit,*,END=2002)LUTYPE
- GOTO 2003
- 2002 CONTINUE
- CALL wrf_message( 'INPUT FILE FOR LANDUSE REACHED END OF FILE' )
- end_of_file = .TRUE.
- 2003 CONTINUE
- IF ( .NOT. end_of_file ) READ (landuse_unit,*)LUCATS,LUSEAS
- FOUND_LU = LUTYPE.EQ.MMINLU
- ENDIF
- CALL wrf_dm_bcast_bytes (end_of_file, LWORDSIZE )
- IF ( .NOT. end_of_file ) THEN
- CALL wrf_dm_bcast_string(lutype, 256)
- CALL wrf_dm_bcast_bytes (lucats, IWORDSIZE )
- CALL wrf_dm_bcast_bytes (luseas, IWORDSIZE )
- CALL wrf_dm_bcast_bytes (found_lu, LWORDSIZE )
- IF(FOUND_LU)THEN
- LUN=LUCATS
- NSN=LUSEAS
- IF(LUTYPE.NE.'SSIB') THEN !this is not really true for ssib lsm (fds)
- PRINT *, 'LANDUSE TYPE = "' // TRIM (LUTYPE) // '" FOUND', &
- LUCATS,' CATEGORIES',LUSEAS,' SEASONS', &
- ' WATER CATEGORY = ',ISWATER, &
- ' SNOW CATEGORY = ',ISICE
- ENDIF
- ENDIF
- DO ls=1,luseas
- if ( wrf_dm_on_monitor() ) then
- READ (landuse_unit,*)
- endif
- DO LC=1,LUCATS
- IF(found_lu)THEN
- IF ( wrf_dm_on_monitor() ) THEN
- READ (landuse_unit,*)LI,ALBD(LC,LS),SLMO(LC,LS),SFEM(LC,LS), &
- SFZ0(LC,LS),THERIN(LC,LS),SCFX(LC),SFHC(LC,LS)
- ENDIF
- CALL wrf_dm_bcast_bytes (LI, IWORDSIZE )
- IF(LC.NE.LI)CALL wrf_error_fatal ( 'module_start: MISSING LANDUSE UNIT ' )
- ELSE
- IF ( wrf_dm_on_monitor() ) THEN
- READ (landuse_unit,*)
- ENDIF
- ENDIF
- ENDDO
- ENDDO
- IF(NSN.EQ.1.AND.FOUND_LU) THEN
- ISN = 1
- END IF
- CALL wrf_dm_bcast_bytes (albd, max_cats * max_seas * RWORDSIZE )
- CALL wrf_dm_bcast_bytes (slmo, max_cats * max_seas * RWORDSIZE )
- CALL wrf_dm_bcast_bytes (sfem, max_cats * max_seas * RWORDSIZE )
- CALL wrf_dm_bcast_bytes (sfz0, max_cats * max_seas * RWORDSIZE )
- CALL wrf_dm_bcast_bytes (therin, max_cats * max_seas * RWORDSIZE )
- CALL wrf_dm_bcast_bytes (sfhc, max_cats * max_seas * RWORDSIZE )
- CALL wrf_dm_bcast_bytes (scfx, max_cats * RWORDSIZE )
- ENDIF
- IF(.NOT. found_lu .AND. .NOT. end_of_file ) GOTO 1999
- !!! END OF 1999 LOOP
- IF(.NOT. found_lu .OR. end_of_file )THEN
- CALL wrf_message ( 'LANDUSE IN INPUT FILE DOES NOT MATCH LUTABLE: TABLE NOT USED' )
- ENDIF
- E…
Large files files are truncated, but you can click here to view the full file