diff --git a/Registry/Registry.EM_COMMON b/Registry/Registry.EM_COMMON index 869dff658c..53e36ef0a1 100644 --- a/Registry/Registry.EM_COMMON +++ b/Registry/Registry.EM_COMMON @@ -885,7 +885,7 @@ state real TGLEV_URB3D i{umap8}j misc 1 Z r "T state real TFLEV_URB3D i{umap9}j misc 1 Z r "TFLEV_URB3D" "FLOOR TEMPERATURE" "K" state real SF_AC_URB3D ij misc 1 - r "SF_AC_URB3D" "SENSIBLE HEAT FLUX FROM THE AIR COND." "W m{-2}" state real LF_AC_URB3D ij misc 1 - r "LF_AC_URB3D" "LATENT HEAT FLUX FROM THE AIR COND." "W m{-2}" -state real CM_AC_URB3D ij misc 1 - r "CM_AC_URB3D" "CONSUMPTION OF THE AIR COND." "W m{-2}" +state real CM_AC_URB3D ij misc 1 - rh "CM_AC_URB3D" "CONSUMPTION OF THE AIR COND." "W m{-2}" state real SFVENT_URB3D ij misc 1 - r "SFVENT_URB3D" "SENSIBLE HEAT FLUX FROM URBAN VENTILATION" "W m{-2}" state real LFVENT_URB3D ij misc 1 - r "LFVENT_URB3D" "LATENT HEAT FLUX FROM URBAN VENTILATION" "W m{-2}" state real SFWIN1_URB3D i{umap7}j misc 1 Z r "SFWIN1_URB3D" "SENSIBLE HEAT FLUX FROM URBAN SFC WINDOW" "W m{-2}" @@ -894,6 +894,20 @@ state real SFW1_URB3D i{umap4}j misc 1 Z r "S state real SFW2_URB3D i{umap4}j misc 1 Z r "SFW2_URB3D" "SENSIBLE HEAT FLUX FROM URBAN SFC" "W m{-2}" state real SFR_URB3D i{umap5}j misc 1 Z r "SFR_URB3D" "SENSIBLE HEAT FLUX FROM URBAN SFC" "W m{-2}" state real SFG_URB3D i{umap0}j misc 1 Z r "SFG_URB3D" "SENSIBLE HEAT FLUX FROM URBAN SFC" "W m{-2}" +state real EP_PV_URB3D ij misc 1 - rh "EP_PV_URB3D" "ELEC. PRODUCTION OF ROOFTOP PV PANELS" "W m{-2}" !PVP +state real T_PV_URB3D i{umap5}j misc 1 - r "T_PV_URB3D" "PHOTOVOLTAIC PANELS TEMPERATURE " "K" !PVP +state real TRV_URB4D i{umap10}j misc 1 Z r "TRV_URB4D" "GREEN ROOF LAYER TEMPERATURE" "K" +state real QR_URB4D i{umap10}j misc 1 Z r "QR_URB4D" "GREEN ROOF LAYER MOISTURE" "dimensionless" +state real QGR_URB3D ij misc 1 Z rh "QGR_URB4D" "GREEN ROOF LAYER MOISTURE OUTPUT" "dimensionless" +state real TGR_URB3D ij misc 1 Z rh "TGR_URB4D" "GREEN ROOF LAYER TEMPERATURE OUTPUT" "dimensionless" +state real DRAIN_URB4D i{umap5}j misc 1 Z r "DRAIN_URB4D" "GREEN ROOF DRAINAGE" "mm" +state real DRAINGR_URB3D ij misc 1 - rh "DRAINGR_URB3D" "ACCUMULATED GREEN ROOF DRAINAGE" "mm" +state real SFRV_URB3D i{umap5}j misc 1 Z r "SFR_URB3D" "SENSIBLE HEAT FLUX FROM GREEN ROOF" "W m{-2}" +state real LFRV_URB3D i{umap5}j misc 1 Z r "LFR_URB3D" "LATENT HEAT FLUX FROM GREEN ROOF" "W m{-2}" +state real DGR_URB3D i{umap5}j misc 1 Z r "DGR_URB3D" "ROOF LAYER DEPTH WATER RETENTION" "mm" +state real DG_URB3D i{umap0}j misc 1 Z r "DG_URB4D" "ROOF LAYER DEPTH WATER RETENTION" "mm" +state real LFR_URB3D i{umap5}j misc 1 Z r "LFR_URB3D" "LATENT HEAT FLUX FROM URBAN SFC" "W m{-2}" +state real LFG_URB3D i{umap0}j misc 1 Z r "LFG_URB3D" "LATENT HEAT FLUX FROM URBAN SFC" "W m{-2}" state real CMR_SFCDIF ij misc 1 - r "CMR_SFCDIF" "" "" state real CHR_SFCDIF ij misc 1 - r "CHR_SFCDIF" "" "" state real CMC_SFCDIF ij misc 1 - r "CMC_SFCDIF" "" "" @@ -2328,6 +2342,7 @@ rconfig integer num_urban_ngb derived 1 1 rconfig integer num_urban_nf derived 1 1 irh "num_urban_nf" "number of grid levels in the floors (nf_u in BEM header)" "" rconfig integer num_urban_nz derived 1 1 irh "num_urban_nz" "maximum number of vertical levels in the urban grid (nz_um in BEP or BEM header)" "" rconfig integer num_urban_nbui derived 1 1 irh "num_urban_nbui" "maximum number of types of buildings in an urban class (nbui_max in BEM header)" "" +rconfig integer num_urban_ngr derived 1 1 irh "num_urban_ngr" "maximum number of types of buildings in an urban class (ngr_u in BEP or BEM header)" "" rconfig integer urban_map_zrd derived 1 1 rh "urban_map_zrd" "urban mapping 1: ind_zrd" "" rconfig integer urban_map_zwd derived 1 1 rh "urban_map_zwd" "urban mapping 2: ind_zwd" "" @@ -2338,6 +2353,7 @@ rconfig integer urban_map_bd derived 1 1 rconfig integer urban_map_wd derived 1 1 rh "urban_map_wd" "urban mapping 7: ind_wd" "" rconfig integer urban_map_gbd derived 1 1 rh "urban_map_gbd" "urban mapping 8: ind_gbd" "" rconfig integer urban_map_fbd derived 1 1 rh "urban_map_fbd" "urban mapping 9: ind_fbd" "" +rconfig integer urban_map_zgrd derived 1 1 rh "urban_map_zgrd" "urban mapping 10: ind_grd" "" rconfig integer num_urban_hi namelist,physics 1 15 irh "num_urban_hi" "" "" rconfig integer num_months namelist,physics 1 12 irh "num_months" "" "" @@ -2358,6 +2374,7 @@ rconfig integer imomentum namelist,physics 1 0 rconfig integer ishallow namelist,physics 1 0 rh "ishallow" "shallow convection in G3 scheme" "" rconfig real convtrans_avglen_m namelist,physics 1 30 rh "convtrans_avglen_m" "averaging time for convective transport output variables (minutes)" "" rconfig integer num_land_cat namelist,physics 1 21 - "num_land_cat" "" "" +rconfig integer use_wudapt_lcz namelist,physics 1 0 - "use_wudapt_lcz" "" "" rconfig integer num_soil_cat namelist,physics 1 16 - "num_soil_cat" "" "" rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" rconfig real mp_zero_out_thresh namelist,physics 1 1.e-8 - "mp_zero_out_thresh" "minimum threshold for non-Qv moist fields, below are set to zero" "kg/kg" @@ -2901,7 +2918,7 @@ package sfclayscheme sf_sfclay_physics==91 - - package noahucmscheme sf_urban_physics==1 - state:trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d,sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d,a_u_bep,a_v_bep,a_t_bep,a_q_bep,a_e_bep,b_u_bep,b_v_bep,b_t_bep,b_q_bep,b_e_bep,dlg_bep,dl_u_bep,sf_bep,vl_bep,mh_urb2d,stdh_urb2d,lf_urb2d,lp_urb2d,hgt_urb2d,lb_urb2d,tgr_urb2d,cmcr_urb2d,drelr_urb2d,drelb_urb2d,drelg_urb2d,flxhumr_urb2d,flxhumb_urb2d,flxhumg_urb2d,tgrl_urb3d,smr_urb3d,cmgr_sfcdif,chgr_sfcdif,trl_urb3d,tgl_urb3d,tbl_urb3d package bepscheme sf_urban_physics==2 - state:a_u_bep,a_v_bep,a_t_bep,a_q_bep,a_e_bep,b_u_bep,b_v_bep,b_t_bep,b_q_bep,b_e_bep,dlg_bep,dl_u_bep,sf_bep,vl_bep,trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d,sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d,hi_urb2d,lp_urb2d,hgt_urb2d,lb_urb2d,trl_urb3d,tgl_urb3d,tbl_urb3d,tsk_rural -package bep_bemscheme sf_urban_physics==3 - state:a_u_bep,a_v_bep,a_t_bep,a_q_bep,a_e_bep,b_u_bep,b_v_bep,b_t_bep,b_q_bep,b_e_bep,dlg_bep,dl_u_bep,sf_bep,vl_bep,trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d,tlev_urb3d,qlev_urb3d,tw1lev_urb3d,tw2lev_urb3d,tglev_urb3d,tflev_urb3d,sf_ac_urb3d,lf_ac_urb3d,cm_ac_urb3d,sfvent_urb3d,lfvent_urb3d,sfwin1_urb3d,sfwin2_urb3d,sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d,hi_urb2d,lp_urb2d,hgt_urb2d,lb_urb2d,trl_urb3d,tgl_urb3d,tbl_urb3d,tsk_rural +package bep_bemscheme sf_urban_physics==3 - state:a_u_bep,a_v_bep,a_t_bep,a_q_bep,a_e_bep,b_u_bep,b_v_bep,b_t_bep,b_q_bep,b_e_bep,dlg_bep,dl_u_bep,sf_bep,vl_bep,trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d,tlev_urb3d,qlev_urb3d,tw1lev_urb3d,tw2lev_urb3d,tglev_urb3d,tflev_urb3d,sf_ac_urb3d,lf_ac_urb3d,cm_ac_urb3d,sfvent_urb3d,lfvent_urb3d,sfwin1_urb3d,sfwin2_urb3d,sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d,hi_urb2d,lp_urb2d,hgt_urb2d,lb_urb2d,trl_urb3d,tgl_urb3d,tbl_urb3d,tsk_rural,ep_pv_urb3d,t_pv_urb3d,trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d,drain_urb4d,draingr_urb3d,sfrv_urb3d,lfrv_urb3d,dgr_urb3d,dg_urb3d,lfr_urb3d,lfg_urb3d package nolsmscheme sf_surface_physics==0 - - package slabscheme sf_surface_physics==1 - - diff --git a/Registry/Registry.NMM b/Registry/Registry.NMM index bd9849bc9c..dcb341fd40 100644 --- a/Registry/Registry.NMM +++ b/Registry/Registry.NMM @@ -1463,6 +1463,7 @@ rconfig integer num_urban_ngb namelist,physics 1 1 rconfig integer num_urban_nf namelist,physics 1 1 irh "num_urban_nf" "number of grid levels in the floors (nf_u in BEM header)" "" rconfig integer num_urban_nz namelist,physics 1 1 irh "num_urban_nz" "maximum number of vertical levels in the urban grid (nz_um in BEP or BEM header)" "" rconfig integer num_urban_nbui namelist,physics 1 1 irh "num_urban_nbui" "maximum number of types of buildings in an urban class (nbui_max in BEM header)" "" +rconfig integer num_urban_ngr namelist,physics 1 1 irh "num_urban_ngr" "maximum number of types of buildings in an urban class (ngr_u in BEP or BEM header)" "" rconfig integer urban_map_zrd derived 1 1 rh "urban_map_zrd" "urban mapping 1: ind_zrd" "" rconfig integer urban_map_zwd derived 1 1 rh "urban_map_zwd" "urban mapping 2: ind_zwd" "" @@ -1473,6 +1474,7 @@ rconfig integer urban_map_bd derived 1 1 rconfig integer urban_map_wd derived 1 1 rh "urban_map_wd" "urban mapping 7: ind_wd" "" rconfig integer urban_map_gbd derived 1 1 rh "urban_map_gbd" "urban mapping 8: ind_gbd" "" rconfig integer urban_map_fbd derived 1 1 rh "urban_map_fbd" "urban mapping 9: ind_fbd" "" +rconfig integer urban_map_zgrd derived 1 1 rh "urban_map_zgrd" "urban mapping 10: ind_grd" "" rconfig integer sf_surface_mosaic namelist,physics 1 0 rh "sf_surface_mosaic" "1= mosaic, 0=no mosaic method, add by danli" "" rconfig integer mosaic_cat namelist,physics 1 3 rh "mosaic_cat" "works when sf_surface_mosaic=1; it is the number of mosaic tiles" "" @@ -1487,6 +1489,7 @@ rconfig integer maxens3 namelist,physics 1 16 rconfig integer ensdim namelist,physics 1 144 irh "ensdim" "" "" rconfig integer chem_opt namelist,physics max_domains 0 rh "chem_opt" "" "" rconfig integer num_land_cat namelist,physics 1 24 - "num_land_cat" "" "" +rconfig integer use_wudapt_lcz namelist,physics 1 0 - "use_wudapt_lcz" "" "" rconfig integer num_soil_cat namelist,physics 1 16 - "num_soil_cat" "" "" rconfig integer topo_wind namelist,physics max_domains 0 - "topo_wind" "2: Use Mass sfc drag scheme, 1: improve effects topography over surface wind, 0:not" "" rconfig integer mp_zero_out namelist,physics 1 0 - "mp_zero_out" "microphysics fields set to zero 0=no action taken, 1=all fields but Qv, 2=all fields including Qv" "flag" diff --git a/Registry/registry.dimspec b/Registry/registry.dimspec index a680a6fce7..5fe1888723 100644 --- a/Registry/registry.dimspec +++ b/Registry/registry.dimspec @@ -63,6 +63,7 @@ dimspec umap6 2 namelist=urban_map_bd z urban_map_bd dimspec umap7 2 namelist=urban_map_wd z urban_map_wd dimspec umap8 2 namelist=urban_map_gbd z urban_map_gbd dimspec umap9 2 namelist=urban_map_fbd z urban_map_fbd +dimspec umap10 2 namelist=urban_map_zgrd z urban_map_zgrd dimspec mocat 2 namelist=mosaic_cat z mosaic categories # danli dimspec mocat2 2 namelist=mosaic_cat_soil z mosaic categories * soil layers # danli diff --git a/dyn_em/module_first_rk_step_part1.F b/dyn_em/module_first_rk_step_part1.F index bcd346f49b..38c25c2622 100644 --- a/dyn_em/module_first_rk_step_part1.F +++ b/dyn_em/module_first_rk_step_part1.F @@ -668,6 +668,7 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,RN_URB2D=grid%rn_urb2d , TS_URB2D=grid%ts_urb2d & !H urban & ,FRC_URB2D=grid%frc_urb2d & !H urban & ,UTYPE_URB2D=grid%utype_urb2d & !H urban + & ,SWDDIR=grid%swddir,SWDDIF=grid%swddif & !multi-layer urban _gl ! Optional urban for BEP scheme & ,SF_URBAN_PHYSICS=config_flags%sf_urban_physics & & ,num_urban_ndm = config_flags%num_urban_ndm & !multi-layer urban @@ -680,25 +681,40 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags & & ,urban_map_wd = config_flags%urban_map_wd & !multi-layer urban & ,urban_map_gbd = config_flags%urban_map_gbd & !multi-layer urban & ,urban_map_fbd = config_flags%urban_map_fbd & !multi-layer urban + & ,urban_map_zgrd = config_flags%urban_map_zgrd & !multi-layer urban & ,NUM_URBAN_HI=config_flags%num_urban_hi & !multi-layer urban & ,TSK_RURAL=grid%tsk_rural & !multi-layer urban & ,TRB_URB4D=grid%trb_urb4d,TW1_URB4D=grid%tw1_urb4d & !multi-layer urban & ,TW2_URB4D=grid%tw2_urb4d,TGB_URB4D=grid%tgb_urb4d & !multi-layer urban - & ,TLEV_URB3D=grid%tlev_urb3d & !multi-layer urban - & ,QLEV_URB3D=grid%qlev_urb3d & !multi-layer urban - & ,TW1LEV_URB3D=grid%tw1lev_urb3d & !multi-layer urban - & ,TW2LEV_URB3D=grid%tw2lev_urb3d & !multi-layer urban - & ,TGLEV_URB3D=grid%tglev_urb3d & !multi-layer urban - & ,TFLEV_URB3D=grid%tflev_urb3d & !multi-layer urban - & ,SF_AC_URB3D=grid%sf_ac_urb3d & !multi-layer urban - & ,LF_AC_URB3D=grid%lf_ac_urb3d & !multi-layer urban - & ,CM_AC_URB3D=grid%cm_ac_urb3d & !multi-layer urban - & ,SFVENT_URB3D=grid%sfvent_urb3d & !multi-layer urban - & ,LFVENT_URB3D=grid%lfvent_urb3d & !multi-layer urban - & ,SFWIN1_URB3D=grid%sfwin1_urb3d & !multi-layer urban - & ,SFWIN2_URB3D=grid%sfwin2_urb3d & !multi-layer urban + & ,TLEV_URB3D=grid%tlev_urb3d & !multi-layer urban + & ,QLEV_URB3D=grid%qlev_urb3d & !multi-layer urban + & ,TW1LEV_URB3D=grid%tw1lev_urb3d & !multi-layer urban + & ,TW2LEV_URB3D=grid%tw2lev_urb3d & !multi-layer urban + & ,TGLEV_URB3D=grid%tglev_urb3d & !multi-layer urban + & ,TFLEV_URB3D=grid%tflev_urb3d & !multi-layer urban + & ,SF_AC_URB3D=grid%sf_ac_urb3d & !multi-layer urban + & ,LF_AC_URB3D=grid%lf_ac_urb3d & !multi-layer urban + & ,CM_AC_URB3D=grid%cm_ac_urb3d & !multi-layer urban + & ,SFVENT_URB3D=grid%sfvent_urb3d & !multi-layer urban + & ,LFVENT_URB3D=grid%lfvent_urb3d & !multi-layer urban + & ,SFWIN1_URB3D=grid%sfwin1_urb3d & !multi-layer urban + & ,SFWIN2_URB3D=grid%sfwin2_urb3d & !multi-layer urban & ,SFW1_URB3D=grid%sfw1_urb3d,SFW2_URB3D=grid%sfw2_urb3d & !multi-layer urban & ,SFR_URB3D=grid%sfr_urb3d,SFG_URB3D=grid%sfg_urb3d & !multi-layer urban + & ,EP_PV_URB3D=grid%ep_pv_urb3d & !GRZ + & ,T_PV_URB3D=grid%t_pv_urb3d & !GRZ + & ,TRV_URB4D=grid%trv_urb4d & !GRZ + & ,QR_URB4D=grid%qr_urb4d & !GRZ + & ,QGR_URB3D=grid%qgr_urb3d & !GRZ + & ,TGR_URB3D=grid%tgr_urb3d & !GRZ + & ,DRAIN_URB4D=grid%drain_urb4d & !GRZ + & ,DRAINGR_URB3D=grid%draingr_urb3d & !GRZ + & ,SFRV_URB3D=grid%sfrv_urb3d & !GRZ + & ,LFRV_URB3D=grid%lfrv_urb3d & !GRZ + & ,DGR_URB3D=grid%dgr_urb3d & !GRZ + & ,DG_URB3D=grid%dg_urb3d & !GRZ + & ,LFR_URB3D=grid%lfr_urb3d & !GRZ + & ,LFG_URB3D=grid%lfg_urb3d & !GRZ & ,LP_URB2D=grid%lp_urb2d,HI_URB2D=grid%hi_urb2d & !multi-layer urban & ,LB_URB2D=grid%lb_urb2d,HGT_URB2D=grid%hgt_urb2d & !multi-layer urban & ,MH_URB2D=grid%mh_urb2d,STDH_URB2D=grid%stdh_urb2d & !SLUCM diff --git a/dyn_em/module_initialize_real.F b/dyn_em/module_initialize_real.F index f2d6906f07..06a2983341 100644 --- a/dyn_em/module_initialize_real.F +++ b/dyn_em/module_initialize_real.F @@ -2983,19 +2983,6 @@ SUBROUTINE init_domain_rk ( grid & IF ( ( config_flags%sf_urban_physics == 1 ) .OR. ( config_flags%sf_urban_physics == 2 ) .OR. ( config_flags%sf_urban_physics == 3 ) ) THEN DO j = jts , MIN(jde-1,jte) DO i = its , MIN(ide-1,ite) - IF ( MMINLU == 'NLCD40' .OR. MMINLU == 'MODIFIED_IGBP_MODIS_NOAH') THEN - IF ( grid%FRC_URB2D(i,j) .GE. 0.5 .AND. & - (grid%ivgtyp(i,j).NE.13 .AND. grid%ivgtyp(i,j).NE.24 .AND. grid%ivgtyp(i,j).NE.25 .AND. grid%ivgtyp(i,j).NE.26)) grid%ivgtyp(i,j)=13 - ELSE IF ( MMINLU == "USGS" ) THEN - IF ( grid%FRC_URB2D(i,j) .GE. 0.5 .AND. & - grid%ivgtyp(i,j).NE.1 ) grid%ivgtyp(i,j)=1 - ENDIF - - IF ( grid%FRC_URB2D(i,j) == 0. ) THEN - IF ( (MMINLU == 'NLCD40' .OR. MMINLU == 'MODIFIED_IGBP_MODIS_NOAH') .AND. & - (grid%ivgtyp(i,j)==24 .OR. grid%ivgtyp(i,j)==25 .OR. grid%ivgtyp(i,j)==26 .OR. grid%ivgtyp(i,j)==13) ) grid%FRC_URB2D(i,j) = 0.9 - IF ( MMINLU == 'USGS' .AND. grid%ivgtyp(i,j)==1 ) grid%FRC_URB2D(i,j) = 0.9 - ENDIF IF ( skip_middle_points_t ( ids , ide , jds , jde , i , j , em_width , hold_ups ) ) CYCLE grid%LP_URB2D(i,j) = grid%URB_PARAM(i,91,j) grid%LB_URB2D(i,j) = grid%URB_PARAM(i,95,j) diff --git a/dyn_em/start_em.F b/dyn_em/start_em.F index 08f6f39bbf..fa052f09e5 100644 --- a/dyn_em/start_em.F +++ b/dyn_em/start_em.F @@ -1083,6 +1083,7 @@ SUBROUTINE start_domain_em ( grid, allowed_to_read & config_flags%urban_map_wd, & !multi-layer urban config_flags%urban_map_gbd, & !multi-layer urban config_flags%urban_map_fbd, & !multi-layer urban + config_flags%urban_map_zgrd, & !multi-layer urban config_flags%num_urban_hi, & !multi-layer urban grid%raincv_a,grid%raincv_b, & grid%gd_cloud, grid%gd_cloud2, & ! Optional @@ -1131,6 +1132,11 @@ SUBROUTINE start_domain_em ( grid, allowed_to_read & grid%LF_AC_URB3D,grid%CM_AC_URB3D,grid%SFVENT_URB3D,grid%LFVENT_URB3D, & !multi-layer urban grid%SFWIN1_URB3D,grid%SFWIN2_URB3D, & !multi-layer urban grid%SFW1_URB3D,grid%SFW2_URB3D,grid%SFR_URB3D,grid%SFG_URB3D, & !multi-layer urban + grid%EP_PV_URB3D,grid%T_PV_URB3D, & !GRZ + grid%TRV_URB4D,grid%QR_URB4D,grid%QGR_URB3D,grid%TGR_URB3D, & !GRZ + grid%DRAIN_URB4D,grid%DRAINGR_URB3D,grid%SFRV_URB3D, & !GRZ + grid%LFRV_URB3D,grid%DGR_URB3D,grid%DG_URB3D,grid%LFR_URB3D, & !GRZ + grid%LFG_URB3D, & !GRZ grid%LP_URB2D,grid%HI_URB2D,grid%LB_URB2D,grid%HGT_URB2D, & !multi-layer urban grid%MH_URB2D,grid%STDH_URB2D,grid%LF_URB2D, & !SLUCM grid%A_U_BEP,grid%A_V_BEP,grid%A_T_BEP,grid%A_Q_BEP, & !multi-layer urban diff --git a/dyn_nmm/module_PHYSICS_CALLS.F b/dyn_nmm/module_PHYSICS_CALLS.F index 65e07ace5a..deafc4c1c1 100644 --- a/dyn_nmm/module_PHYSICS_CALLS.F +++ b/dyn_nmm/module_PHYSICS_CALLS.F @@ -1501,6 +1501,7 @@ SUBROUTINE TURBL(NTSD,DT,NPHS,RESTRT & & ,urban_map_wd = config_flags%urban_map_wd & !multi-layer urban & ,urban_map_gbd = config_flags%urban_map_gbd & !multi-layer urban & ,urban_map_fbd = config_flags%urban_map_fbd & !multi-layer urban + & ,urban_map_zgrd = config_flags%urban_map_zgrd & !multi-layer urban & ,NUM_URBAN_HI=config_flags%num_urban_hi & !multi-layer urban & ,IDS=IDS,IDE=IDE,JDS=JDS,JDE=JDE,KDS=KDS,KDE=KDE & & ,IMS=IMS,IME=IME,JMS=JMS,JME=JME,KMS=KMS,KME=KME & diff --git a/dyn_nmm/start_domain_nmm.F b/dyn_nmm/start_domain_nmm.F index 53025d959c..b6ec513d3c 100644 --- a/dyn_nmm/start_domain_nmm.F +++ b/dyn_nmm/start_domain_nmm.F @@ -246,7 +246,7 @@ END SUBROUTINE med_set_egrid_locs integer :: num_urban_hi, & num_urban_ndm,urban_map_zrd,urban_map_zwd,urban_map_gd, & urban_map_zd ,urban_map_zdf,urban_map_bd ,urban_map_wd, & - urban_map_gbd,urban_map_fbd + urban_map_gbd,urban_map_fbd,urban_map_zgrd !Rogers GMT INTEGER :: hr, mn, sec, ms, rc TYPE(WRFU_Time) :: currentTime @@ -2178,7 +2178,7 @@ END SUBROUTINE med_set_egrid_locs & ,ITS, ITE, JTS, JTE, KTS, KTE & & ,num_urban_ndm,urban_map_zrd,urban_map_zwd,urban_map_gd & & ,urban_map_zd ,urban_map_zdf,urban_map_bd ,urban_map_wd & - & ,urban_map_gbd,urban_map_fbd & + & ,urban_map_gbd,urban_map_fbd,urban_map_zgrd & & ,NUM_URBAN_HI & & ,GRID%RAINCV_A,GRID%RAINCV_B & & ,ISNOWXY=grid%ISNOWXY, ZSNSOXY=grid%ZSNSOXY, TSNOXY=grid%TSNOXY, & ! Optional Noah-MP diff --git a/phys/module_physics_init.F b/phys/module_physics_init.F index d9edbf6c53..00658063fb 100644 --- a/phys/module_physics_init.F +++ b/phys/module_physics_init.F @@ -96,6 +96,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & urban_map_wd, & urban_map_gbd, & urban_map_fbd, & + urban_map_zgrd, & NUM_URBAN_HI, & raincv_a,raincv_b, & gd_cloud,gd_cloud2, & @@ -150,6 +151,10 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban + EP_PV_URB3D,T_PV_URB3D, & !GRZ + TRV_URB4D,QR_URB4D,QGR_URB3D,TGR_URB3D, & !GRZ + DRAIN_URB4D,DRAINGR_URB3D,SFRV_URB3D, & !GRZ + LFRV_URB3D,DGR_URB3D,DG_URB3D,LFR_URB3D,LFG_URB3D,&!GRZ LP_URB2D,HI_URB2D,LB_URB2D, & !Optional multi-layer urban HGT_URB2D,MH_URB2D,STDH_URB2D, & !Optional multi-layer urban LF_URB2D, & !Optional multi-layer urban @@ -632,6 +637,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & INTEGER , INTENT(IN) :: urban_map_wd INTEGER , INTENT(IN) :: urban_map_gbd INTEGER , INTENT(IN) :: urban_map_fbd + INTEGER , INTENT(IN) :: urban_map_zgrd INTEGER , INTENT(IN) :: num_urban_hi REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: TRB_URB4D ! multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zwd, jms:jme ), INTENT(INOUT) :: TW1_URB4D ! multi-layer UCM @@ -650,6 +656,20 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LFVENT_URB3D !multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_wd , jms:jme ), INTENT(INOUT) :: SFWIN1_URB3D ! multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_wd , jms:jme ), INTENT(INOUT) :: SFWIN2_URB3D ! multi-layer UCM + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: EP_PV_URB3D!GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf,jms:jme ), INTENT(INOUT) :: T_PV_URB3D!GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme),INTENT(INOUT) :: TRV_URB4D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme),INTENT(INOUT) :: QR_URB4D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme), INTENT(INOUT) :: QGR_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme), INTENT(INOUT) :: TGR_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: DRAIN_URB4D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: DRAINGR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: SFRV_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: LFRV_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: DGR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: DG_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: LFR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: LFG_URB3D !GRZ REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: SFG_URB3D ! multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: SFR_URB3D ! multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: SFW1_URB3D ! multi-layer UCM @@ -1392,6 +1412,7 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & urban_map_wd , & !Optional multi-layer urban urban_map_gbd, & !Optional multi-layer urban urban_map_fbd, & !Optional multi-layer urban + urban_map_zgrd, & !Optional multi-layer urban NUM_URBAN_HI, & !Optional multi-layer urban TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban @@ -1402,6 +1423,10 @@ SUBROUTINE phy_init ( id, config_flags, DT, restart, zfull, zhalf, & SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban + EP_PV_URB3D,T_PV_URB3D, & !GRZ + TRV_URB4D,QR_URB4D,QGR_URB3D,TGR_URB3D, & !GRZ + DRAIN_URB4D,DRAINGR_URB3D,SFRV_URB3D, & !GRZ + LFRV_URB3D,DGR_URB3D,DG_URB3D,LFR_URB3D,LFG_URB3D,&!GRZ LP_URB2D,HI_URB2D,LB_URB2D, & !Optional multi-layer urban HGT_URB2D,MH_URB2D,STDH_URB2D, & !Optional multi-layer urban LF_URB2D, & !Optional multi-layer urban @@ -2400,6 +2425,7 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & urban_map_wd, & !Optional multi-layer urban urban_map_gbd, & !Optional multi-layer urban urban_map_fbd, & !Optional multi-layer urban + urban_map_zgrd, & !Optional multi-layer urban NUM_URBAN_HI, & !Optional multi-layer urban TRB_URB4D,TW1_URB4D,TW2_URB4D, & !Optional multi-layer urban TGB_URB4D,TLEV_URB3D,QLEV_URB3D, & !Optional multi-layer urban @@ -2410,6 +2436,10 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & SFWIN1_URB3D,SFWIN2_URB3D, & !Optional multi-layer urban SFW1_URB3D,SFW2_URB3D, & !Optional multi-layer urban SFR_URB3D,SFG_URB3D, & !Optional multi-layer urban + EP_PV_URB3D,T_PV_URB3D, & !GRZ + TRV_URB4D,QR_URB4D,QGR_URB3D,TGR_URB3D, & !GRZ + DRAIN_URB4D,DRAINGR_URB3D,SFRV_URB3D, & !GRZ + LFRV_URB3D,DGR_URB3D,DG_URB3D,LFR_URB3D,LFG_URB3D,&!GRZ LP_URB2D,HI_URB2D,LB_URB2D, & !Optional multi-layer urban HGT_URB2D,MH_URB2D,STDH_URB2D, & !Optional multi-layer urban LF_URB2D, & !Optional multi-layer urban @@ -2492,9 +2522,9 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & USE module_sf_myjsfc USE module_sf_qnsesfc USE module_sf_noahdrv - USE module_sf_noahlsm, only : LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL + USE module_sf_noahlsm, only : LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11 USE module_sf_noahmpdrv - USE noahmp_tables, ONLY: LOW_DENSITY_RESIDENTIAL_TABLE, HIGH_DENSITY_RESIDENTIAL_TABLE, HIGH_INTENSITY_INDUSTRIAL_TABLE + USE noahmp_tables, ONLY: LCZ_1_TABLE,LCZ_2_TABLE,LCZ_3_TABLE,LCZ_4_TABLE,LCZ_5_TABLE,LCZ_6_TABLE,LCZ_7_TABLE,LCZ_8_TABLE,LCZ_9_TABLE,LCZ_10_TABLE,LCZ_11_TABLE #ifdef WRF_USE_CLM USE module_sf_clm, only : clminit #endif @@ -2731,6 +2761,7 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & INTEGER , INTENT(IN) :: urban_map_wd INTEGER , INTENT(IN) :: urban_map_gbd INTEGER , INTENT(IN) :: urban_map_fbd + INTEGER , INTENT(IN) :: urban_map_zgrd INTEGER , INTENT(IN) :: num_urban_hi REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: TRB_URB4D !Optional UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zwd, jms:jme ), INTENT(INOUT) :: TW1_URB4D !Optional UCM @@ -2753,6 +2784,20 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: SFW2_URB3D !Optional UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: SFR_URB3D !Optional UCM REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: SFG_URB3D !Optional UCM + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: EP_PV_URB3D!GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf,jms:jme ), INTENT(INOUT) :: T_PV_URB3D!GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme),INTENT(INOUT) :: TRV_URB4D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme),INTENT(INOUT) :: QR_URB4D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme), INTENT(INOUT) :: QGR_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme), INTENT(INOUT) :: TGR_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: DRAIN_URB4D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: DRAINGR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: SFRV_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: LFRV_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: DGR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: DG_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: LFR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: LFG_URB3D !GRZ REAL, OPTIONAL, DIMENSION( ims:ime,1:num_urban_hi, jms:jme ), INTENT(INOUT) :: HI_URB2D !multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LP_URB2D !multi-layer UCM REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LB_URB2D !multi-layer UCM @@ -3081,16 +3126,15 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN CALL urban_param_init(DZR,DZB,DZG,num_soil_layers, & !urban - sf_urban_physics) + sf_urban_physics,config_flags%use_wudapt_lcz) !new LCZ ! num_roof_layers,num_wall_layers,road_soil_layers) !urban CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban ! num_roof_layers,num_wall_layers,num_road_layers, & !urban - LOW_DENSITY_RESIDENTIAL, & - HIGH_DENSITY_RESIDENTIAL, & - HIGH_INTENSITY_INDUSTRIAL, & + LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5, & + LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11, & restart,sf_urban_physics, & !urban XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban @@ -3106,6 +3150,7 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & urban_map_wd, & !urban urban_map_gbd, & !urban urban_map_fbd, & !urban + urban_map_zgrd, & !urban num_urban_hi, & !urban TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban TLEV_URB3D,QLEV_URB3D, & !urban @@ -3115,6 +3160,11 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & SFVENT_URB3D,LFVENT_URB3D, & !urban SFWIN1_URB3D,SFWIN2_URB3D, & !urban SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban + EP_PV_URB3D,T_PV_URB3D, & !GRZ + TRV_URB4D,QR_URB4D,QGR_URB3D,TGR_URB3D, & !GRZ + DRAIN_URB4D,DRAINGR_URB3D,SFRV_URB3D, & !GRZ + LFRV_URB3D,DGR_URB3D,DG_URB3D,LFR_URB3D,LFG_URB3D,&!GRZ + SMOIS, & !GRZ LP_URB2D,HI_URB2D,LB_URB2D, & !urban HGT_URB2D,MH_URB2D,STDH_URB2D, & !urban LF_URB2D, & !urban @@ -3126,6 +3176,17 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban FRC_URB2D, UTYPE_URB2D) !urban + + IF (config_flags%use_wudapt_lcz.eq.0 .and. (maxval(UTYPE_URB2D)).gt.3) THEN !new LCZ + CALL wrf_error_fatal & + ('USING 10 WUDAPT LCZ WITHOUT URBPARM_LCZ.TBL. SET USE_WUDAPT_LCZ=1') + ENDIF + + IF (config_flags%use_wudapt_lcz.eq.1 .and. (maxval(UTYPE_URB2D)).le.3) THEN ! new LCZ + CALL wrf_error_fatal & + ('USING URBPARM_LCZ.TBL WITH OLD 3 URBAN CLASSES. SET USE_WUDAPT_LCZ=0') + ENDIF + ELSE CALL wrf_error_fatal ( 'arguments not present for calling urban model' ) ENDIF @@ -3201,12 +3262,12 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & IF ((SF_URBAN_PHYSICS.eq.1).OR.(SF_URBAN_PHYSICS.EQ.2).OR.(SF_URBAN_PHYSICS.EQ.3)) THEN IF ( PRESENT( FRC_URB2D ) .AND. PRESENT( UTYPE_URB2D )) THEN CALL urban_param_init(DZR,DZB,DZG,num_soil_layers, & !urban - sf_urban_physics) + sf_urban_physics,config_flags%use_wudapt_lcz) !new LCZ CALL urban_var_init(ISURBAN,TSK,TSLB,TMN,IVGTYP, & !urban ims,ime,jms,jme,kms,kme,num_soil_layers, & !urban - LOW_DENSITY_RESIDENTIAL_TABLE, & - HIGH_DENSITY_RESIDENTIAL_TABLE, & - HIGH_INTENSITY_INDUSTRIAL_TABLE, & + LCZ_1_TABLE,LCZ_2_TABLE,LCZ_3_TABLE,LCZ_4_TABLE, & + LCZ_5_TABLE,LCZ_6_TABLE,LCZ_7_TABLE,LCZ_8_TABLE, & + LCZ_9_TABLE,LCZ_10_TABLE,LCZ_11_TABLE, & restart,sf_urban_physics, & !urban XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !urban TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !urban @@ -3222,6 +3283,7 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & urban_map_wd, & !urban urban_map_gbd, & !urban urban_map_fbd, & !urban + urban_map_zgrd, & !urban num_urban_hi, & !urban TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & !urban TLEV_URB3D,QLEV_URB3D, & !urban @@ -3231,6 +3293,11 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & SFVENT_URB3D,LFVENT_URB3D, & !urban SFWIN1_URB3D,SFWIN2_URB3D, & !urban SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & !urban + EP_PV_URB3D,T_PV_URB3D, & !GRZ + TRV_URB4D,QR_URB4D,QGR_URB3D,TGR_URB3D, & !GRZ + DRAIN_URB4D,DRAINGR_URB3D,SFRV_URB3D, & !GRZ + LFRV_URB3D,DGR_URB3D,DG_URB3D,LFR_URB3D,LFG_URB3D,&!GRZ + SMOIS, & !GRZ LP_URB2D,HI_URB2D,LB_URB2D, & !urban HGT_URB2D,MH_URB2D,STDH_URB2D, & !urban LF_URB2D, & !urban @@ -3242,6 +3309,17 @@ SUBROUTINE bl_init(STEPBL,BLDT,DT,RUBLTEN,RVBLTEN,RTHBLTEN, & B_T_BEP,B_Q_BEP,B_E_BEP,DLG_BEP, & !multi-layer urban DL_U_BEP,SF_BEP,VL_BEP, & !multi-layer urban FRC_URB2D, UTYPE_URB2D) !urban + + IF (config_flags%use_wudapt_lcz.eq.0 .and. (maxval(UTYPE_URB2D)).gt.3) THEN !new LCZ + CALL wrf_error_fatal & + ('USING 10 WUDAPT LCZ WITHOUT URBPARM_LCZ.TBL. SET USE_WUDAPT_LCZ=1') + ENDIF + + IF (config_flags%use_wudapt_lcz.eq.1 .and. (maxval(UTYPE_URB2D)).le.3) THEN ! new LCZ + CALL wrf_error_fatal & + ('USING URBPARM_LCZ.TBL WITH OLD 3 URBAN CLASSES. SET USE_WUDAPT_LCZ=0') + ENDIF + ELSE CALL wrf_error_fatal ( 'arguments not present for calling urban model' ) ENDIF diff --git a/phys/module_sf_bem.F b/phys/module_sf_bem.F index fa18fcebf4..258eb90034 100644 --- a/phys/module_sf_bem.F +++ b/phys/module_sf_bem.F @@ -2,14 +2,6 @@ MODULE module_sf_bem ! ----------------------------------------------------------------------- ! Variables and constants used in the BEM module ! ----------------------------------------------------------------------- - -#ifdef mpas -use mpas_atmphys_utilities, only: physics_error_fatal -#define FATAL_ERROR(M) call physics_error_fatal( M ) -#else -use module_wrf_error -#define FATAL_ERROR(M) call wrf_error_fatal( M ) -#endif real emins !emissivity of the internal walls parameter (emins=0.9) @@ -28,6 +20,7 @@ MODULE module_sf_bem real hum_rat !power of the A.C. drying/moistening the indoor air [(Kg/kg)/s] parameter(hum_rat=1.e-06) + real,parameter :: effpv=0.15 ! Efficiency of PV panels installed at the roofs, typical values [0.10,0.15] CONTAINS @@ -36,16 +29,21 @@ MODULE module_sf_bem subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & nwal,nflo,nrof,ngrd,hswalout,gswal, & - hswinout,hsrof,gsrof, & + hswinout,hsrof,lsrof,gsrof,hspv, & latent,sigma,albwal,albwin,albrof, & emrof,emwal,emwin,rswal,rlwal,rair,cp, & rhoout,tout,humout,press, & rs,rl,dzwal,cswal,kwal,pwin,cop,beta,sw_cond, & timeon,timeoff,targtemp,gaptemp,targhum,gaphum, & - perflo,hsesf,hsequip,dzflo, & + perflo,gr_frac_roof,pv_frac_roof,gr_flag, & + uout,vout, & + hsesf,hsequip,dzflo, & csflo,kflo,dzgrd,csgrd,kgrd,dzrof,csrof, & krof,tlev,shumlev,twal,twin,tflo,tgrd,trof, & - hsout,hlout,consump,hsvent,hlvent) + hsout,hlout,consump,eppv,tpv,hsvent,hlvent,hfgr,& + tr_av,tpv_print,sfpv,sfr_indoor) + + ! --------------------------------------------------------------------- @@ -98,7 +96,7 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & real dt !time step [s] - integer nzcanm !Maximum number of vertical levels in the urban grid + integer nzcanm !Maximum number of vertical levels in the urban grid integer nlev !number of floors in the building integer nwal !number of levels inside the wall integer nrof !number of levels inside the roof @@ -128,6 +126,11 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & real, intent(in) :: targhum ! Target humidity of A/C systems real, intent(in) :: gaphum ! Comfort range of specific humidity real, intent(in) :: perflo ! Peak number of occupants per unit floor area + real gr_frac_roof + real pv_frac_roof + integer gr_flag + real uout(nzcanm) + real vout(nzcanm) real, intent(in) :: hsesf ! real, intent(in) :: hsequip(24) ! @@ -146,7 +149,8 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & real dzflo(nflo) !Layer sizes of floors [m] real dzrof(nrof) !Layer sizes of roof [m] real dzgrd(ngrd) !Layer sizes of ground [m] - + real tpv + real tr_av real latent !latent heat of evaporation [J/Kg] @@ -162,11 +166,11 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & real hswalout(4,nzcanm) !outside walls sensible heat flux [W/m2] real hswinout(4,nzcanm) !outside window sensible heat flux [W/m2] real hsrof !Sensible heat flux at the roof [W/m2] - - real rair !ideal gas constant [J.kg-1.K-1] + real lsrof + real rair !ideal gas constant [J.kg-1.K-1] real sigma !parameter (wall is not black body) [W/m2.K4] real cp !specific heat of air [J/kg.K] - + real hfgr !Green roof heat flux !Input-Output !------------ @@ -182,9 +186,11 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & real consump(nzcanm) !Consumption for the a.c. in each floor [W] real hsvent(nzcanm) !sensible heat generated by natural ventilation [W] real hlvent(nzcanm) !latent heat generated by natural ventilation [W] - real gsrof !heat flux flowing inside the roof [W/m^2] - real gswal(4,nzcanm) !heat flux flowing inside the floors [W/m^2] - + real gsrof !heat flux flowing inside the roof [W/m\B2] + real hspv !Sensible heat flux at the roof from the PV panels [W/m2] + real gswal(4,nzcanm) !heat flux flowing inside the floors [W/m\B2] + real eppv !Electricity production of PV panels [W] + real sfr_indoor,sfpv,tpv_print ! Local: ! ----- integer swwal !swich for the physical coefficients calculation @@ -235,10 +241,13 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & real hsoutbuild !Total sensible heat ejected into the atmosphere[W] !by the air conditioning system and per building real nhourday !number of hours from midnight, local time + real hfgrd !Dummy variable to assign hfgr=0 to walls, windows and ground + +! + parameter(hfgrd=0) !-------------------------------------------- !Initialization !-------------------------------------------- - do ilev=1,nzcanm hseqocc(ilev)=0. hleqocc(ilev)=0. @@ -402,11 +411,15 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & end do ! ivw end do ! ilev -!Roof - - call radfluxs(radflux,albrof,rs,emrof,rl,sigma,trof(nrof)) - - hrrof=radflux +!Roof and PV panels + + if (pv_frac_roof.eq.0.) then + call radfluxs(radflux,albrof,rs,emrof,rl,sigma,tr_av) + hrrof=radflux + else + call radfluxspv(nzcanm,nlev,albrof,rs,emrof,rl,tr_av,tout,sigma,radflux,pv_frac_roof,tpv) + hrrof=radflux + endif !Internal walls for intermediate rooms @@ -549,7 +562,7 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & !Vertical fluxes for windows do ilev=1,nlev - + do ivw=1,4 call hsinsflux (2,1,tlev(ilev),twin(ivw,ilev),hs) @@ -595,7 +608,7 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & call hsinsflux (1,2,tlev(nlev),trof(1),hs) hswalins(6,nlev)=hs - + sfr_indoor= hswalins(6,nlev) else ! Bottom<--->Top call hsinsflux (1,2,tlev(1),tgrd(ngrd),hs) @@ -607,8 +620,16 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & hswalins(6,nlev)=hs end if +!! +!! Calculation of the sensible heat fluxes from the PV panels & electricity producti + if(pv_frac_roof.gt.0)then + call hsfluxpv(nzcanm,nlev,bl,bw,albrof,rs,emrof,rl,tr_av,tout,sigma,hspv,eppv,pv_frac_roof,uout,vout,tpv) + sfpv=hspv + tpv_print=tpv + endif + !Calculation of the temperature for the different surfaces ! -------------------------------------------------------- @@ -625,7 +646,7 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & do iwal=1,nwal twal1D(iwal)=twal(ivw,iwal,ilev) end do - + call wall(swwal,nwal,dt,dzwal,kwal,cswal,htot,twal1D) do iwal=1,nwal @@ -696,19 +717,25 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & swwal=1 htot(1)=hswalins(6,nlev)+hrwalins(6,nlev) - htot(2)=hsrof+hrrof + htot(2)=hsrof+hrrof+lsrof gsrof=htot(2) do irof=1,nrof trof1D(irof)=trof(irof) - end do - - call wall(swwal,nrof,dt,dzrof,krof,csrof,htot,trof1D) - + + end do + + if(gr_flag.eq.1)then + call wall_gr(hfgr,gr_frac_roof,swwal,nrof,dt,dzrof,krof,csrof,htot,trof1D) + else + call wall(swwal,nrof,dt,dzrof,krof,csrof,htot,trof1D) + endif do irof=1,nrof trof(irof)=trof1D(irof) - end do + + end do + ! Calculation of the heat fluxes and of the temperature of the rooms ! ------------------------------------------------------------------ @@ -729,6 +756,7 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & call fluxvent(cpint,rhoint,vollev,tlev(ilev),tout(ilev), & latent,humout(ilev),rhoout(ilev),shumlev(ilev),& beta,hsvent(ilev),hlvent(ilev)) + !Calculation of the heat generated by conduction @@ -783,11 +811,119 @@ subroutine BEM(nzcanm,nlev,nhourday,dt,bw,bl,dzlev, & return end subroutine BEM - +!====6=8===============================================================72 +!====6=8===============================================================72 + subroutine hsfluxpv(nz,n,bl,bw,albr,rs,emr,rl,tr,tair,sigma,hspv,eppv,pv_frac_roof,uout,vout,tpv) +! + implicit none +! +! Input variables +! + integer,intent(in) :: nz !Maximum number of vertical levels in the urban grid + real,intent(in) :: bl !Building length [m] + real,intent(in) :: bw !Building width [m] + real,intent(in) :: albr !albedo of the roof (ext.) + real,intent(in) :: emr !emissivity of the roof (ext.) + real,intent(in) :: rs !external short wave radiation [W/m2] + real,intent(in) :: rl !external long wave radiation [W/m2] + real,intent(in) :: tr !roof surface temperature [K] + real,intent(in) :: pv_frac_roof ! fraction of PV [] + real,intent(in) :: sigma !Stefan-Boltzmann constant [W/m2.K4] + real,intent(in),dimension(1:nz) :: tair !external temperature [K] + integer,intent(in) :: n !number of floors in the building + real,intent(in), dimension(1:nz) :: uout + real,intent(in), dimension(1:nz) :: vout +! Output variables +! + real,intent(inout) :: hspv ! Sensible heat flux from the PV panels to the atmosphere [W/m2] + real,intent(inout) :: eppv ! Electricity production from PV panels [W] + real,intent(inout) :: tpv !Temperature of the PV panels [K] +! +! Local variables +! + real,parameter :: albpv=0.11 ! albedo of the PV panels + real,parameter :: empv=0.93 ! emissivity of the PV panels + real, parameter :: T_amb=25 + real, parameter :: tiltangle=0. + real, parameter :: a=0.286 + real, parameter :: b=0.286 + + real, parameter :: F12=1. + real :: lwuppv !Long-wave emitted by the PV panels to the sky [W/m2] + real :: lwdwr !Long-wave incoming radiation on the roof [W/m2] + real :: lwupr !Long-wave coming up from the roof intercepted by the PV panels [W/m2] + real :: enerpv !Energy produced by PV panels [W/m2] + real :: hc + real :: sw_d + real :: lw_d + real :: lwpv_out + real :: f + real :: f_prime + real :: tpv_new + real :: hdown + real :: hup + real :: deltat + real :: uroof + real :: hrad + + hrad=sigma/((1-empv)/empv+1/F12+(1-emr)/emr) + + uroof=(uout(n+1)**2+vout(n+1)**2)**0.5 + tpv=tair(n+1) + tpv_new=tpv+1 + if(pv_frac_roof.gt.0)then + do while(abs(tpv-tpv_new).gt.1E-3) + deltat=-tpv_new+tair(n+1) + if(deltat.lt.0)then + hc=9.842*abs(deltat)**(1/3)/(7.283-abs(cos(tiltangle))) + hup=sqrt(hc**2+(a*uroof**b)**2) + hc=1.810*abs(deltat)**(1/3)/(1.382+abs(cos(tiltangle))) + hdown=sqrt(hc**2+(a*uroof**b)**2) + ! hup=2.8+3.8*uroof + ! hdown=2.8+3.8*uroof + else + hc=9.842*abs(deltat)**(1/3)/(7.283-abs(cos(tiltangle))) + hdown=sqrt(hc**2+(a*uroof**b)**2) + hc=1.810*abs(deltat)**(1/3)/(1.382+abs(cos(tiltangle))) + hup=sqrt(hc**2+(a*uroof**b)**2) + ! hup=2.8+3.8*uroof + ! hdown=2.8+3.8*uroof + endif + tpv=tpv_new + enerpv=effpv*rs*min(1.,1.-0.005*(tpv-(T_amb+273.15))) + sw_d=(1-albpv)*rs; + lw_d=empv*rl; + lwpv_out=empv*sigma*tpv**4+(1-empv)*rl + lwupr=hrad*(tr**4-tpv**4) + f=(sw_d+lw_d+lwupr-lwpv_out-enerpv-(hup+hdown)*(tpv-tair(n+1))); + if(min(1.,1.-0.005*(tpv-(T_amb+273.15))).eq.1)then + f_prime=-4.*sigma*empv*tpv**3-(hup+hdown)-4*hrad*tpv**3 + else + f_prime=-4.*sigma*empv*tpv**3-(hup+hdown)-4*hrad*tpv**3-effpv*rs*(1-0.005) + endif + if(f_prime.eq.0)then + tpv_new=tair(n+1) + else + tpv_new = tpv_new -f/f_prime; + endif + end do + tpv=tpv_new + if(tpv_new.lt.250.or.tpv_new.gt.400)then + tpv=tair(n+1) + endif + hspv=(hup+hdown)*(tpv-tair(n+1)) + eppv=enerpv*pv_frac_roof*bl*bw + else + tpv=0 + hspv=0 + eppv=0 + endif + return + end subroutine hsfluxpv !====6=8===============================================================72 !====6=8===============================================================72 - subroutine wall(swwall,nz,dt,dz,k,cs,flux,temp) + subroutine wall_gr(hfgr,gr_frac_roof,swwall,nz,dt,dz,k,cs,flux,temp) !______________________________________________________________________ @@ -827,12 +963,16 @@ subroutine wall(swwall,nz,dt,dz,k,cs,flux,temp) !Input: !----- + real hfgr !Green roof heat flux + real gr_frac_roof !Green roof fraction + integer nz !Number of layers inside the material real dt !Time step real dz(nz) !Layer sizes [m] real cs(nz) !Specific heat of the material [J/(m3.K)] real k(nz+1) !Thermal conductivity in each layers (face) [W/(m.K)] real flux(2) !Internal and external flux terms. + !Input-Output: !------------- @@ -876,25 +1016,140 @@ subroutine wall(swwall,nz,dt,dz,k,cs,flux,temp) a(-1,1)=0. a(0,1)=1+k2(1) a(1,1)=-k2(1) - b(1)=temp(1)+flux(1)*kc(1) -!! -!!We can fixed the internal temperature -!! -!! a(-1,1)=0. -!! a(0,1)=1 -!! a(1,1)=0. -!! -!! b(1)=temp(1) -!! -!Computation of the internal values (iz=2,...,n-1) of A and B: + do iz=2,nz-1 + a(-1,iz)=-k1(iz) + if(iz.eq.5)then + a(-1,iz)=-k1(iz) + a(0,iz)=1+k1(iz)+(1-gr_frac_roof)*k2(iz) + b(iz)=temp(iz)+(gr_frac_roof*hfgr*dt)/dz(iz) + a(1,iz)=-k2(iz)*(1-gr_frac_roof) + else + a(0,iz)=1.+k1(iz)+k2(iz) + b(iz)=temp(iz) + a(1,iz)=-k2(iz) + endif + + + end do + +!Computation of the external value (iz=n) of A and B: + + a(-1,nz)=-k1(nz) + a(0,nz)=1.+k1(nz) + a(1,nz)=0. + b(nz)=temp(nz)+kc(nz)*flux(2) + +!Resolution of the system A*T(n+1)=B + + call tridia(nz,a,b,temp) + + + return + end subroutine wall_gr + +!====6=8===============================================================72 +!====6=8===============================================================72 + + + subroutine wall(swwall,nz,dt,dz,k,cs,flux,temp) + +!______________________________________________________________________ + +!The aim of this subroutine is to solve the 1D heat fiffusion equation +!for roof, walls and streets: +! +! dT/dt=d/dz[K*dT/dz] where: +! +! -T is the surface temperature(wall, street, roof) +! -Kz is the heat diffusivity inside the material. +! +!The resolution is done implicitly with a FV discretisation along the +!different layers of the material: + +! ____________________________ +! n * +! * +! * +! ____________________________ +! i+2 +! I+1 +! ____________________________ +! i+1 +! I ==> [T(I,n+1)-T(I,n)]/DT= +! ____________________________ [F(i+1)-F(i)]/DZI +! i +! I-1 ==> A*T(n+1)=B where: +! ____________________________ +! i-1 * * A is a TRIDIAGONAL matrix. +! * * B=T(n)+S takes into account the sources. +! * +! 1 ____________________________ + +!________________________________________________________________ + + implicit none + +!Input: +!----- + integer nz !Number of layers inside the material + real dt !Time step + real dz(nz) !Layer sizes [m] + real cs(nz) !Specific heat of the material [J/(m3.K)] + real k(nz+1) !Thermal conductivity in each layers (face) [W/(m.K)] + real flux(2) !Internal and external flux terms. + + +!Input-Output: +!------------- + + integer swwall !swich for the physical coefficients calculation + real temp(nz) !Temperature at each layer + +!Local: +!----- + + real a(-1:1,nz) ! a(-1,*) lower diagonal A(i,i-1) + ! a(0,*) principal diagonal A(i,i) + ! a(1,*) upper diagonal A(i,i+1). + + real b(nz) !Coefficients of the second term. + real k1(20) + real k2(20) + real kc(20) + save k1,k2,kc + integer iz + +!________________________________________________________________ +! +!Calculation of the coefficients + + if (swwall.eq.1) then + + if (nz.gt.20) then + write(*,*) 'number of layers in the walls/roofs too big ',nz + write(*,*) 'please decrease under of',20 + stop + endif + + call wall_coeff(nz,dt,dz,cs,k,k1,k2,kc) + swwall=0 + + end if + +!Computation of the first value (iz=1) of A and B: + + a(-1,1)=0. + a(0,1)=1+k2(1) + a(1,1)=-k2(1) + b(1)=temp(1)+flux(1)*kc(1) do iz=2,nz-1 - a(-1,iz)=-k1(iz) - a(0,iz)=1+k1(iz)+k2(iz) - a(1,iz)=-k2(iz) - b(iz)=temp(iz) + a(-1,iz)=-k1(iz) + a(0,iz)=1+k1(iz)+k2(iz) + b(iz)=temp(iz) + a(1,iz)=-k2(iz) end do !Computation of the external value (iz=n) of A and B: @@ -902,12 +1157,12 @@ subroutine wall(swwall,nz,dt,dz,k,cs,flux,temp) a(-1,nz)=-k1(nz) a(0,nz)=1+k1(nz) a(1,nz)=0. - b(nz)=temp(nz)+flux(2)*kc(nz) - + !Resolution of the system A*T(n+1)=B call tridia(nz,a,b,temp) + return end subroutine wall @@ -984,7 +1239,7 @@ subroutine hsinsflux(swsurf,swwin,tin,tw,hsins) !Input !---- integer swsurf !swich for the type of surface (horizontal/vertical) - integer swwin !swich for the type of surface (window/wall) + integer swwin !swich for the type of surface (window/wall) real tin !Inside temperature [K] real tw !Internal wall temperature [K] @@ -994,7 +1249,7 @@ subroutine hsinsflux(swsurf,swwin,tin,tw,hsins) real hsins !internal sensible heat flux [W/m2] !Local !----- - real hc !heat conduction coefficient [W/C.m2] + real hc !heat conduction coefficient [W/\B0C.m2] !-------------------------------------------------------------------- if (swsurf.eq.2) then !vertical surface @@ -1032,7 +1287,7 @@ subroutine int_rsrad(albwin,albwal,pwin,rswal,& real albwin !albedo of the windows real albwal !albedo of the internal wall real rswal(4) !incoming short wave radiation [W/m2] - real surwal(6) !surface of the indoor walls [m2] + real surwal(6) !surface of the indoor walls [m2] real bw,bl !width of the walls [m] real zw !height of the wall [m] real pwin !window proportion @@ -1044,8 +1299,8 @@ subroutine int_rsrad(albwin,albwal,pwin,rswal,& !Local !----- real transmit !transmittance of the direct/diffused radiation - real rstr !solar radiation transmitted through the windows - real surtotwal !total indoor surface of the walls in the room + real rstr !solar radiation transmitted through the windows + real surtotwal !total indoor surface of the walls in the room integer iw real b(6) !second member for the system real a(6,6) !matrix for the system @@ -1062,7 +1317,7 @@ subroutine int_rsrad(albwin,albwal,pwin,rswal,& enddo !We suppose that the radiation is spread isotropically within the -!room when it passes through the windows, so the flux [W/m^2] in every +!room when it passes through the windows, so the flux [W/m\B2] in every !wall is: surtotwal=0. @@ -1128,7 +1383,7 @@ subroutine int_rlrad(emwal,emwin,sigma,twal_int,twin,& call gaussjbem(a,6,b,6) - do iw=1,6 + do iw=1,6 rlint(iw)=b(iw) enddo @@ -1316,8 +1571,8 @@ subroutine algebra_long(emwal,emwin,sigma,twalint,twinint,& real zw !height of the wall real fprl_int !view factor real fnrm_int !view factor - real fnrm_intx !view factor - real fnrm_inty !view factor + real fnrm_intx !view factor + real fnrm_inty !view factor !Output !------ @@ -1330,8 +1585,8 @@ subroutine algebra_long(emwal,emwin,sigma,twalint,twinint,& real b_wind(6) real emwal_av !averadge emissivity of the wall real emwin_av !averadge emissivity of the window - real em_av !averadge emissivity - real twal_int(6) !twalint + real em_av !averadge emissivity + real twal_int(6) !twalint real twin(4) !twinint !------------------------------------------------------------------ @@ -1670,7 +1925,7 @@ subroutine phiequ(nhourday,hsesf,hsequip,hsequ) !Output !------ - real hsequ !sensible heat gain from equipment [W/m^2] + real hsequ !sensible heat gain from equipment [Wm\AF2] !--------------------------------------------------------------------- @@ -2228,7 +2483,7 @@ subroutine gaussjbem(a,n,b,np) icol=k endif elseif(ipiv(k).gt.1)then - FATAL_ERROR('singular matrix in gaussjbem') + CALL wrf_error_fatal('singular matrix in gaussjbem') endif enddo endif @@ -2249,7 +2504,7 @@ subroutine gaussjbem(a,n,b,np) endif - if(a(icol,icol).eq.0) FATAL_ERROR('singular matrix in gaussjbem') + if(a(icol,icol).eq.0) CALL wrf_error_fatal('singular matrix in gaussjbem') pivinv=1./a(icol,icol) a(icol,icol)=1 @@ -2300,7 +2555,51 @@ subroutine radfluxs(radflux,alb,rs,em,rl,sigma,twal) return end subroutine radfluxs - +!====6=8===============================================================72 +!====6=8===============================================================72 + subroutine radfluxspv(nz,n,alb,rs,em,rl,twal,tair,sigma,radflux,pv_frac_roof,tpv) +! + implicit none +! +! This routine calculates the radiative fluxes at the surfaces +! +! Integer and real kinds +! +! integer, parameter :: kind_im = selected_int_kind(6) ! 4 byte integer +! integer, parameter :: kind_rb = selected_real_kind(12) ! 8 byte real +! +! Input Variables +! + integer,intent(in) :: nz !Maximum number of vertical levels in the urban grid + real,intent(in) :: alb !albedo of the surface + real,intent(in) :: rs !shortwave radiation [W m-2] + real,intent(in) :: em !emissivity of the surface + real,intent(in) :: rl !longwave radiation [W m-2] + real,intent(in) :: twal !surface temperature [K] + real,intent(in) :: sigma !Stefan-Boltzmann constant [W/m2.K4] + real,intent(in) :: tpv !Stefan-Boltzmann constant [W/m2.K4] + real,intent(in),dimension(1:nz) :: tair !external temperature [K] + integer,intent(in) :: n !number of floors in the building + real, intent(in) :: pv_frac_roof ! + real :: empv + real :: hrad + real :: F12 +! Output variables +! + real,intent(inout) :: radflux !radiative flux at the surface [W m-2] +! +! Local variables + F12=1. + empv=0.93 + hrad=sigma/((1-empv)/empv+1/F12+(1-em)/em) + if ((n+1).gt.nz) then + write(*,*) 'Increase maximum number of vertical levels in the urban grid' + stop + endif + radflux=(1.-alb)*(1.-pv_frac_roof)*rs+em*(1.-pv_frac_roof)*rl+pv_frac_roof*hrad*(tpv**4-twal**4)- & + em*sigma*(1.-pv_frac_roof)*twal**4 + return + end subroutine radfluxspv !====6=8==============================================================72 !====6=8==============================================================72 ! diff --git a/phys/module_sf_bep.F b/phys/module_sf_bep.F index 35b6bfcc42..3c3b9795c7 100644 --- a/phys/module_sf_bep.F +++ b/phys/module_sf_bep.F @@ -18,7 +18,7 @@ MODULE module_sf_bep ! ----------------------------------------------------------------------- integer nurbm ! Maximum number of urban classes - parameter (nurbm=3) + parameter (nurbm=11) integer ndm ! Maximum number of street directions parameter (ndm=2) diff --git a/phys/module_sf_bep_bem.F b/phys/module_sf_bep_bem.F index 8d0d7ed560..a9add122c7 100644 --- a/phys/module_sf_bep_bem.F +++ b/phys/module_sf_bep_bem.F @@ -19,16 +19,20 @@ MODULE module_sf_bep_bem ! ----------------------------------------------------------------------- integer nurbm ! Maximum number of urban classes - parameter (nurbm=3) + parameter (nurbm=11) integer ndm ! Maximum number of street directions parameter (ndm=2) integer nz_um ! Maximum number of vertical levels in the urban grid - parameter(nz_um=18) + parameter(nz_um=16) integer ng_u ! Number of grid levels in the ground parameter (ng_u=10) + + integer ngr_u ! Number of grid levels in green roof + parameter (ngr_u=10) + integer nwr_u ! Number of grid levels in the walls or roofs parameter (nwr_u=10) @@ -42,7 +46,11 @@ MODULE module_sf_bep_bem parameter (dz_u=5.) integer nbui_max !maximum number of types of buildings in an urban class - parameter (nbui_max=15) !must be less or equal than nz_um + parameter (nbui_max=7) !must be less or equal than nz_um + + + real h_water + parameter(h_water=0.0009722) !mm of irrigation per hour !--------------------------------------------------------------------------------- !Parameters of the windows. The glasses of windows are considered without films - @@ -55,7 +63,6 @@ MODULE module_sf_bep_bem integer q_num !category number for the windows (q_num= 4, standard glasses) parameter(q_num=4) !Possible values 1,2,...,10 - ! The change of ng_u, nwr_u should be done in agreement with the block data ! in the routine "surf_temp" ! ----------------------------------------------------------------------- @@ -70,10 +77,12 @@ MODULE module_sf_bep_bem real rcp_u ! real sigma ! real p0 ! Reference pressure at the sea level - real cdrag ! Drag force constant real latent ! Latent heat of vaporization [J/kg] (used in BEM) + real dgmax ! Maximum ground water holding capacity (mm) + real drmax ! Maximum ground roof holding capacity (mm) + parameter(vk=0.40,g_u=9.81,pi=3.141592653,r=287.,cp_u=1004.) - parameter(rcp_u=r/cp_u,sigma=5.67e-08,p0=1.e+5,cdrag=0.4,latent=2.45e+06) + parameter(rcp_u=r/cp_u,sigma=5.67e-08,p0=1.e+5,latent=2.45e+06,dgmax=1.,drmax=1.) ! ----------------------------------------------------------------------- @@ -83,19 +92,27 @@ MODULE module_sf_bep_bem CONTAINS subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & - th_phy,rho,p_phy,swdown,glw, & + th_phy,rho,p_phy,swdown,glw, & gmt,julday,xlong,xlat, & declin_urb,cosz_urb2d,omg_urb2d, & num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, & - urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & + urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & urban_map_gbd, urban_map_fbd, & - num_urban_hi, & + urban_map_zgrd, num_urban_hi, & trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & tlev_urb3d,qlev_urb3d,tw1lev_urb3d,tw2lev_urb3d, & - tglev_urb3d,tflev_urb3d,sf_ac_urb3d,lf_ac_urb3d, & - cm_ac_urb3d,sfvent_urb3d,lfvent_urb3d, & + tglev_urb3d,tflev_urb3d,sf_ac_urb3d,lf_ac_urb3d, & + cm_ac_urb3d, & + sfvent_urb3d,lfvent_urb3d, & sfwin1_urb3d,sfwin2_urb3d, & sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & + ep_pv_urb3d,t_pv_urb3d, & + trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d, & + drain_urb4d,draingr_urb3d, & + sfrv_urb3d,lfrv_urb3d, & + dgr_urb3d,dg_urb3d, & + lfr_urb3d,lfg_urb3d,rainbl, & + swddir,swddif, & lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & a_u,a_v,a_t,a_e,b_u,b_v, & b_t,b_e,b_q,dlg,dl_u,sf,vl, & @@ -126,6 +143,8 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & REAL, DIMENSION( ims:ime, kms:kme, jms:jme ):: V REAL, DIMENSION( ims:ime , jms:jme ) :: GLW REAL, DIMENSION( ims:ime , jms:jme ) :: swdown + REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ) :: swddif + REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ) :: swddir !_gl REAL, DIMENSION( ims:ime, jms:jme ) :: UST INTEGER, DIMENSION( ims:ime , jms:jme ), INTENT(IN ):: UTYPE_URB2D REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ):: FRC_URB2D @@ -136,7 +155,6 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & REAL, INTENT(IN) :: DECLIN_URB REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: COSZ_URB2D REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: OMG_URB2D - INTEGER, INTENT(IN ) :: num_urban_ndm INTEGER, INTENT(IN ) :: urban_map_zrd INTEGER, INTENT(IN ) :: urban_map_zwd INTEGER, INTENT(IN ) :: urban_map_gd @@ -146,14 +164,23 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & INTEGER, INTENT(IN ) :: urban_map_wd INTEGER, INTENT(IN ) :: urban_map_gbd INTEGER, INTENT(IN ) :: urban_map_fbd - INTEGER, INTENT(IN ) :: num_urban_hi + INTEGER, INTENT(IN ) :: num_urban_ndm + INTEGER, INTENT(IN) :: num_urban_hi + INTEGER , INTENT(IN) :: urban_map_zgrd REAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: trb_urb4d REAL, DIMENSION( ims:ime, 1:urban_map_zwd, jms:jme ), INTENT(INOUT) :: tw1_urb4d REAL, DIMENSION( ims:ime, 1:urban_map_zwd, jms:jme ), INTENT(INOUT) :: tw2_urb4d REAL, DIMENSION( ims:ime, 1:urban_map_gd , jms:jme ), INTENT(INOUT) :: tgb_urb4d + REAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ), INTENT(INOUT) :: trv_urb4d + REAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ), INTENT(INOUT) :: qr_urb4d + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: qgr_urb3d + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: tgr_urb3d + REAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: drain_urb4d + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: rainbl + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: draingr_urb3d !New variables used for BEM REAL, DIMENSION( ims:ime, kms:kme, jms:jme ):: qv_phy - REAL, DIMENSION( ims:ime, 1:urban_map_bd , jms:jme ), INTENT(INOUT) :: tlev_urb3d + REAL, DIMENSION( ims:ime, 1:urban_map_bd, jms:jme ), INTENT(INOUT) :: tlev_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_bd , jms:jme ), INTENT(INOUT) :: qlev_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_wd , jms:jme ), INTENT(INOUT) :: tw1lev_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_wd , jms:jme ), INTENT(INOUT) :: tw2lev_urb3d @@ -162,15 +189,25 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: lf_ac_urb3d REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: sf_ac_urb3d REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: cm_ac_urb3d + REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ep_pv_urb3d + REAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: t_pv_urb3d REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: sfvent_urb3d REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: lfvent_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_wd , jms:jme ), INTENT(INOUT) :: sfwin1_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_wd , jms:jme ), INTENT(INOUT) :: sfwin2_urb3d + !End variables REAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: sfw1_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: sfw2_urb3d REAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: sfr_urb3d REAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: sfg_urb3d + REAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: sfrv_urb3d + REAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: lfrv_urb3d + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: dgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: dg_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: lfg_urb3d !G + REAL, DIMENSION( ims:ime, 1:num_urban_hi, jms:jme ), INTENT(IN) :: hi_urb2d REAL, DIMENSION( ims:ime,jms:jme), INTENT(IN) :: lp_urb2d REAL, DIMENSION( ims:ime,jms:jme), INTENT(IN) :: lb_urb2d @@ -210,7 +247,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real hi_urb(its:ite,1:nz_um,jts:jte) ! Height histograms of buildings real hi_urb1D(nz_um) ! Height histograms of buildings real ss_urb(nz_um,nurbm) ! Probability that a building has an height equal to z - real pb_urb(nz_um) ! Probability that a building has an height greater or equal to z + real pb_urb(nz_um) ! Probability that a building has an height greater or equal to z real hb_u(nz_um) ! Bulding's heights integer nz_urb(nurbm) ! Number of layer in the urban grid integer nzurban(nurbm) @@ -247,7 +284,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & ! !New street and radiation parameters -! + real bs(ndm) ! Building width for the current urban class real ws(ndm) ! Street widths of the current urban class @@ -255,13 +292,12 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real drst(ndm) ! street directions for the current urban class real ss(nz_um) ! Probability to have a building with height h real pb(nz_um) ! Probability to have a building with an height equal -! + real HFGR_D(nz_um) !New roughness and buildings parameters ! real z0(ndm,nz_um) ! Roughness lengths "profiles" real bs_urb(ndm,nurbm) ! Building width real ws_urb(ndm,nurbm) ! Street width - ! ! for twini_u, and trini_u the initial value at the deepest level is kept constant during the simulation ! @@ -275,7 +311,10 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real emg_u(nurbm) ! Emissivity of ground real emw_u(nurbm) ! Emissivity of wall real emr_u(nurbm) ! Emissivity of roof - + real gr_frac_roof_u(nurbm) + real pv_frac_roof_u(nurbm) + integer gr_flag_u + integer gr_type_u ! fww_u,fwg_u,fgw_u,fsw_u,fsg_u are the view factors used to compute the long wave ! and the short wave radiation. real fww_u(nz_um,nz_um,ndm,nurbm) ! from wall to wall @@ -283,7 +322,10 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real fgw_u(nz_um,ndm,nurbm) ! from ground to wall real fsw_u(nz_um,ndm,nurbm) ! from sky to wall real fws_u(nz_um,ndm,nurbm) ! from sky to wall - real fsg_u(ndm,nurbm) ! from sky to ground + real fsg_u(ndm,nurbm) + + + ! Roughness parameters real z0g_u(nurbm) ! The ground's roughness length @@ -306,9 +348,9 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real z_u(nz_um) ! Height of the urban grid levels !FS - real cop_u(nurbm) real bldac_frc_u(nurbm) real cooled_frc_u(nurbm) + real cop_u(nurbm) real pwin_u(nurbm) real beta_u(nurbm) integer sw_cond_u(nurbm) @@ -321,7 +363,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real perflo_u(nurbm) real hsesf_u(nurbm) real hsequip(24) - + real irho(24) ! 1D array used for the input and output of the routine "urban" real z1D(kms:kme) ! vertical coordinates @@ -336,11 +378,17 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real ah1D ! hour angle (it should come from the radiation routine) real rs1D ! solar radiation real rld1D ! downward flux of the longwave radiation + real swddir1D ! short wave direct solar radiation _gl + real swddif1D ! short wave diffuse solar radiation _gl + real tw1D(2*ndm,nz_um,nwr_u,nbui_max) ! temperature in each layer of the wall real tg1D(ndm,ng_u) ! temperature in each layer of the ground real tr1D(ndm,nz_um,nwr_u) ! temperature in each layer of the roof + real trv1D(ndm,nz_um,ngr_u) ! temperature in each layer of the GREEN roof + real qr1D(ndm,nz_um,ngr_u) ! humidity in each layer of the GREEN roof + ! !New variable for BEM ! @@ -355,12 +403,18 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real sfvlev1D(nz_um,nz_um) ! sensible heat flux due to ventilation real sfwin1D(2*ndm,nz_um,nbui_max) ! sensible heat flux from windows real consumlev1D(nz_um,nz_um) ! consumption due to the air conditioning systems + real eppvlev1D(nz_um) ! electricity production of PV panels + real tair1D(nz_um) + real tpvlev1D(ndm,nz_um) real qv1D(kms:kme) ! specific humidity real meso_urb ! constant to link meso and urban scales [m-2] + real meso_urb_ac + real roof_frac ! Surface fraction occupied by roof real d_urb(nz_um) real sf_ac integer ibui,nbui integer nlev(nz_um) + ! !End new variables ! @@ -368,6 +422,17 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real sfw1D(2*ndm,nz_um,nbui_max) ! sensible heat flux from walls real sfg1D(ndm) ! sensible heat flux from ground (road) real sfr1D(ndm,nz_um) ! sensible heat flux from roofs + real sfrpv1D(ndm,nz_um) + + real tpv1D(nbui_max) + real sfr_indoor1D(nbui_max) + real sfrv1D(ndm,nz_um) ! sensible heat flux from roofs + real lfrv1D(ndm,nz_um) ! latent heat flux from roofs + real dg1D(ndm) ! water depth from ground + real dgr1D(ndm,nz_um) ! water depth from roofs + real lfg1D(ndm) ! latent heat flux from ground (road) + real lfr1D(ndm,nz_um) ! latent heat flux from roofs + real drain1D(ndm,nz_um) ! sensible heat flux from roofs real sf1D(kms:kme) ! surface of the urban grid cells real vl1D(kms:kme) ! volume of the urban grid cells real a_u1D(kms:kme) ! Implicit component of the momentum sources or sinks in the X-direction @@ -382,7 +447,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & real b_q1D(kms:kme) ! Explicit component of the Humidity sources or sinks real dlg1D(kms:kme) ! Height above ground (L_ground in formula (24) of the BLM paper). real dl_u1D(kms:kme) ! Length scale (lb in formula (22) ofthe BLM paper) - + real gfr1D(ndm,nz_um) real time_bep ! arrays used to collapse indexes integer ind_zwd(nbui_max,nz_um,nwr_u,ndm) @@ -390,28 +455,29 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & integer ind_zd(nbui_max,nz_um,ndm) integer ind_zdf(nz_um,ndm) integer ind_zrd(nz_um,nwr_u,ndm) + integer ind_grd(nz_um,ngr_u,ndm) ! integer ind_bd(nbui_max,nz_um) integer ind_wd(nbui_max,nz_um,ndm) integer ind_gbd(nbui_max,ngb_u,ndm) integer ind_fbd(nbui_max,nf_u,nz_um-1,ndm) -! + integer ix,iy,iz,iurb,id,iz_u,iw,ig,ir,ix1,iy1,k integer it, nint integer iii - logical first character(len=80) :: text data first/.true./ - save first,time_bep - + save first,time_bep + save alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u, & albg_u,albw_u,albr_u,emg_u,emw_u,emr_u, & z0g_u,z0r_u, nd_u,strd_u,drst_u,ws_u,bs_u,h_b,d_b,ss_u,pb_u, & nz_u,z_u,albwin_u,emwind_u,cop_u,pwin_u,beta_u,sw_cond_u, & bldac_frc_u,cooled_frc_u, & time_on_u,time_off_u,targtemp_u,gaptemp_u,targhum_u,gaphum_u, & - perflo_u,hsesf_u,hsequip + perflo_u,gr_frac_roof_u, & + pv_frac_roof_u,hsesf_u,hsequip,irho,gr_flag_u,gr_type_u !------------------------------------------------------------------------ ! Calculation of the momentum, heat and turbulent kinetic fluxes @@ -423,14 +489,17 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & ! 261-304 ! ! F. Salamanca and A. Martilli, 2009: 'A new Building Energy Model coupled -! with an Urban Canopy Parameterization for urban climate simulations-part II. +! with an Urban Canopy Parameterization for urban climate simulations—part II. ! Validation with one dimension off-line simulations'. Theor Appl Climatol ! DOI 10.1007/s00704-009-0143-8 !------------------------------------------------------------------------ ! !prepare the arrays to collapse indexes - if(urban_map_zwd.lt.nbui_max*nz_um*ndm*max(nwr_u,ng_u))then + + +! + if(urban_map_zwd.lt.nbui_max*nz_um*ndm*max(nwr_u,ng_u))then write(*,*)'urban_map_zwd too small, please increase to at least ', nbui_max*nz_um*ndm*max(nwr_u,ng_u) stop endif @@ -452,7 +521,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & stop endif - if(urban_map_fbd.lt.(nz_um-1)*nbui_max*ndm*nf_u)then !limit for floor temperature + if(urban_map_fbd.lt.(nz_um-1)*nbui_max*ndm*nf_u)then !limit for floor temperature write(*,*)'urban_map_fbd too small, please increase to at least ', nbui_max*ndm*nf_u*(nz_um-1) stop endif @@ -462,7 +531,6 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & stop endif -! !End of new conditions ! ! @@ -473,6 +541,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & ind_zd=0 ind_zdf=0 ind_zrd=0 + ind_grd=0 ind_bd=0 ind_wd=0 ind_gbd=0 @@ -520,10 +589,20 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo enddo enddo + + iii=0 + do iz_u=1,nz_um + do iw=1,ngr_u + do id=1,ndm + iii=iii+1 + ind_grd(iz_u,iw,id)=iii + enddo + enddo + enddo ! !New indexes for BEM -! + iii=0 do iz_u=1,nz_um do id=1,ndm @@ -539,8 +618,9 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & ind_bd(ibui,iz_u)=iii enddo !iz_u enddo !ibui - - + + + iii=0 do ibui=1,nbui_max !type of building do iz_u=1,nz_um !vertical levels @@ -572,9 +652,10 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo !iz_u enddo !iw enddo !ibui -! -!End of new indexes -! + + + !End of new indexes + if (num_urban_hi.ge.nz_um)then write(*,*)'nz_um too small, please increase to at least ', num_urban_hi+1 stop @@ -608,6 +689,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo enddo + if (first) then ! True only on first call call init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& @@ -615,17 +697,18 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & emr_u,emwind_u,z0g_u,z0r_u,nd_u,strd_u,drst_u,ws_u,bs_u,h_b,d_b, & cop_u,pwin_u,beta_u,sw_cond_u,time_on_u,time_off_u,targtemp_u, & bldac_frc_u,cooled_frc_u, & - gaptemp_u,targhum_u,gaphum_u,perflo_u,hsesf_u,hsequip) - + gaptemp_u,targhum_u,gaphum_u,perflo_u, & + gr_frac_roof_u,pv_frac_roof_u, & + hsesf_u,hsequip,irho,gr_flag_u,gr_type_u) + !Initialisation of the urban parameters and calculation of the view factor - - call icBEP(nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) - - first=.false. + call icBEP(nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) + + first=.false. endif ! first - - do ix=its,ite + +do ix=its,ite do iy=jts,jte if (FRC_URB2D(ix,iy).gt.0.) then ! Calling BEP only for existing urban classes. @@ -634,6 +717,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & hi_urb1D=0. do iz_u=1,nz_um hi_urb1D(iz_u)=hi_urb(ix,iz_u,iy) + enddo call icBEPHI_XY(iurb,hb_u,hi_urb1D,ss_urb,pb_urb, & @@ -673,13 +757,14 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & stop endif - do iz= kts,kte + + +do iz= kts,kte ua1D(iz)=u_phy(ix,iz,iy) va1D(iz)=v_phy(ix,iz,iy) pt1D(iz)=th_phy(ix,iz,iy) da1D(iz)=rho(ix,iz,iy) pr1D(iz)=p_phy(ix,iz,iy) -!! pt01D(iz)=th_phy(ix,iz,iy) pt01D(iz)=300. z1D(iz)=z(ix,iz,iy) qv1D(iz)=qv_phy(ix,iz,iy) @@ -695,12 +780,12 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo z1D(kte+1)=z(ix,kte+1,iy) + + do id=1,ndm do iz_u=1,nz_um do iw=1,nwr_u do ibui=1,nbui_max -!! tw1D(2*id-1,iz_u,iw)=tw1_u(ix,iy,ind_zwd(iz_u,iw,id)) -!! tw1D(2*id,iz_u,iw)=tw2_u(ix,iy,ind_zwd(iz_u,iw,id)) tw1D(2*id-1,iz_u,iw,ibui)=tw1_urb4d(ix,ind_zwd(ibui,iz_u,iw,id),iy) tw1D(2*id,iz_u,iw,ibui)=tw2_urb4d(ix,ind_zwd(ibui,iz_u,iw,id),iy) enddo @@ -710,19 +795,29 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & do id=1,ndm do ig=1,ng_u -!! tg1D(id,ig)=tg_u(ix,iy,ind_gd(ig,id)) tg1D(id,ig)=tgb_urb4d(ix,ind_gd(ig,id),iy) - enddo - do iz_u=1,nz_um - do ir=1,nwr_u -!! tr1D(id,iz_u,ir)=tr_u(ix,iy,ind_zwd(iz_u,ir,id)) + enddo + + do iz_u=1,nz_um + do ir=1,nwr_u tr1D(id,iz_u,ir)=trb_urb4d(ix,ind_zrd(iz_u,ir,id),iy) + enddo + do ir=1,ngr_u + if(gr_flag_u.eq.1)then + trv1D(id,iz_u,ir)=trv_urb4d(ix,ind_grd(iz_u,ir,id),iy) + qr1D(id,iz_u,ir)=qr_urb4d(ix,ind_grd(iz_u,ir,id),iy) + else + trv1D(id,iz_u,ir)=0. + qr1D(id,iz_u,ir)=0. + endif enddo enddo - enddo -! + enddo + + + !Initialize variables for BEM -! + tlev1D=0. !Indoor temperature qlev1D=0. !Indoor humidity @@ -733,6 +828,8 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & sflev1D=0. !Sensible heat flux from the a.c. lflev1D=0. !latent heat flux from the a.c. consumlev1D=0.!consumption of the a.c. + eppvlev1D=0. !electricity production of PV panels + tpvlev1D=0. sfvlev1D=0. !Sensible heat flux from natural ventilation lfvlev1D=0. !Latent heat flux from natural ventilation sfwin1D=0. !Sensible heat flux from windows @@ -745,7 +842,9 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo !ibui enddo !iz_u - do id=1,ndm !direction + + + do id=1,ndm !direction do iz_u=1,nz_um !vertical levels do ibui=1,nbui_max !type of building twlev1D(2*id-1,iz_u,ibui)=tw1lev_urb3d(ix,ind_wd(ibui,iz_u,id),iy) @@ -769,6 +868,7 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & do iz_u=1,nz_um-1 !verticals levels do ibui=1,nbui_max !type of building tflev1D(id,iw,iz_u,ibui)=tflev_urb3d(ix,ind_fbd(ibui,iw,iz_u,id),iy) + enddo !ibui enddo ! iz_u enddo !iw @@ -776,9 +876,9 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & ! !End initialization for BEM -! +! - do id=1,ndm + do id=1,ndm do iz=1,nz_um do ibui=1,nbui_max !type of building !! sfw1D(2*id-1,iz)=sfw1(ix,iy,ind_zd(iz,id)) @@ -790,28 +890,45 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo do id=1,ndm -!! sfg1D(id)=sfg(ix,iy,id) sfg1D(id)=sfg_urb3d(ix,id,iy) + lfg1D(id)=lfg_urb3d(ix,id,iy) + dg1D(id)=dg_urb3d(ix,id,iy) + enddo - + do id=1,ndm do iz=1,nz_um -!! sfr1D(id,iz)=sfr(ix,iy,ind_zd(iz,id)) + tpvlev1D(id,iz)=t_pv_urb3d(ix,ind_zdf(iz,id),iy) sfr1D(id,iz)=sfr_urb3d(ix,ind_zdf(iz,id),iy) + lfr1D(id,iz)=lfr_urb3d(ix,ind_zdf(iz,id),iy) + dgr1D(id,iz)=dgr_urb3d(ix,ind_zdf(iz,id),iy) + if(gr_flag_u.eq.1)then + sfrv1D(id,iz)=sfrv_urb3d(ix,ind_zdf(iz,id),iy) + lfrv1D(id,iz)=lfrv_urb3d(ix,ind_zdf(iz,id),iy) + drain1D(id,iz)=drain_urb4d(ix,ind_zdf(iz,id),iy) + else + sfrv1D(id,iz)=0. + lfrv1D(id,iz)=0. + drain1D(id,iz)=0. + endif enddo enddo - + + + rs1D=swdown(ix,iy) rld1D=glw(ix,iy) - + swddir1D=swddir(ix,iy) !_gl + swddif1D=swddif(ix,iy) !_gl zr1D=acos(COSZ_URB2D(ix,iy)) deltar1D=DECLIN_URB ah1D=OMG_URB2D(ix,iy) + - call BEP1D(iurb,kms,kme,kts,kte,z1D,dt,ua1D,va1D,pt1D,da1D,pr1D,pt01D, & + call BEP1D(itimestep,ix,iy,iurb,kms,kme,kts,kte,z1D,dt,ua1D,va1D,pt1D,da1D,pr1D,pt01D, & zr1D,deltar1D,ah1D,rs1D,rld1D,alagb, & alag,alaw,alar,alaf,csgb,csg,csw,csr,csf, & - dzr,dzf,dzw,dzgb, & + dzr,dzf,dzw,dzgb,xlat(ix,iy),swddir1D,swddif1D, & albg_u(iurb),albw_u(iurb),albr_u(iurb), & albwin_u(iurb),emg_u(iurb),emw_u(iurb), & emr_u(iurb),emwind_u(iurb),fww_u,fwg_u, & @@ -820,17 +937,20 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & nzurban(iurb),z_u,cop_u,pwin_u,beta_u, & sw_cond_u,time_on_u,time_off_u,targtemp_u, & gaptemp_u,targhum_u,gaphum_u,perflo_u, & - hsesf_u,hsequip, & - tw1D,tg1D,tr1D,sfw1D,sfg1D,sfr1D, & + gr_frac_roof_u(iurb),pv_frac_roof_u(iurb), & + hsesf_u,hsequip,irho,gr_flag_u,gr_type_u, & + tw1D,tg1D,tr1D,trv1D,sfw1D,sfg1D,sfr1D, & + sfrv1D,lfrv1D, & + dgr1D,dg1D,lfr1D,lfg1D, & + drain1D,rainbl(ix,iy),qr1D, & a_u1D,a_v1D,a_t1D,a_e1D, & b_u1D,b_v1D,b_t1D,b_ac1D,b_e1D,b_q1D, & dlg1D,dl_u1D,sf1D,vl1D,rl_up(ix,iy), & rs_abs(ix,iy),emiss(ix,iy),grdflx_urb(ix,iy), & qv1D,tlev1D,qlev1D,sflev1D,lflev1D,consumlev1D, & - sfvlev1D,lfvlev1D,twlev1D,tglev1D,tflev1D,sfwin1D,& - ix,iy) - - do ibui=1,nbui_max !type of building + eppvlev1D,tpvlev1D,sfvlev1D,lfvlev1D,twlev1D,tglev1D,tflev1D,sfwin1D,tair1D,sfr_indoor1D,sfrpv1D,gfr1D) + + do ibui=1,nbui_max !type of building do iz=1,nz_um !vertical levels do id=1,ndm ! direction sfw1_urb3d(ix,ind_zd(ibui,iz,id),iy)=sfw1D(2*id-1,iz,ibui) @@ -840,16 +960,26 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo do id=1,ndm - sfg_urb3d(ix,id,iy)=sfg1D(id) + sfg_urb3d(ix,id,iy)=sfg1D(id) + lfg_urb3d(ix,id,iy)=lfg1D(id) + dg_urb3d(ix,id,iy)=dg1D(id) enddo do id=1,ndm do iz=1,nz_um + t_pv_urb3d(ix,ind_zdf(iz,id),iy)=tpvlev1D(id,iz) sfr_urb3d(ix,ind_zdf(iz,id),iy)=sfr1D(id,iz) + dgr_urb3d(ix,ind_zdf(iz,id),iy)=dgr1D(id,iz) + lfr_urb3d(ix,ind_zdf(iz,id),iy)=lfr1D(id,iz) + if(gr_flag_u.eq.1)then + sfrv_urb3d(ix,ind_zdf(iz,id),iy)=sfrv1D(id,iz) + lfrv_urb3d(ix,ind_zdf(iz,id),iy)=lfrv1D(id,iz) + drain_urb4d(ix,ind_zdf(iz,id),iy)=drain1D(id,iz) + endif enddo enddo - do ibui=1,nbui_max + do ibui=1,nbui_max do iz_u=1,nz_um do iw=1,nwr_u do id=1,ndm @@ -859,17 +989,27 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo enddo enddo - - do id=1,ndm + + + do id=1,ndm do ig=1,ng_u + tgb_urb4d(ix,ind_gd(ig,id),iy)=tg1D(id,ig) enddo do iz_u=1,nz_um do ir=1,nwr_u trb_urb4d(ix,ind_zrd(iz_u,ir,id),iy)=tr1D(id,iz_u,ir) enddo + if(gr_flag_u.eq.1)then + do ir=1,ngr_u + trv_urb4d(ix,ind_grd(iz_u,ir,id),iy)=trv1D(id,iz_u,ir) + qr_urb4d(ix,ind_grd(iz_u,ir,id),iy)=qr1D(id,iz_u,ir) + enddo + endif enddo - enddo + enddo +! + ! !Outputs of BEM ! @@ -900,27 +1040,31 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & enddo !iw enddo !ibui - do ibui=1,nbui_max !type of building - do iw=1,nf_u !layer in the walls + do ibui=1,nbui_max !type of building + do iw=1,nf_u !layer in the walls do iz_u=1,nz_um-1 !verticals levels - do id=1,ndm !direction - tflev_urb3d(ix,ind_fbd(ibui,iw,iz_u,id),iy)=tflev1D(id,iw,iz_u,ibui) - enddo !id - enddo !iz_u + do id=1,ndm + tflev_urb3d(ix,ind_fbd(ibui,iw,iz_u,id),iy)=tflev1D(id,iw,iz_u,ibui) + enddo !ibui + enddo ! iz_u enddo !iw - enddo !ibui - + enddo !id + + + sf_ac_urb3d(ix,iy)=0. lf_ac_urb3d(ix,iy)=0. cm_ac_urb3d(ix,iy)=0. + ep_pv_urb3d(ix,iy)=0. sfvent_urb3d(ix,iy)=0. lfvent_urb3d(ix,iy)=0. - + draingr_urb3d(ix,iy)=0. + qgr_urb3d(ix,iy)=0. + tgr_urb3d(ix,iy)=0. meso_urb=(1./4.)*FRC_URB2D(ix,iy)/((bs_urb(1,iurb)+ws_urb(1,iurb))*bs_urb(2,iurb))+ & (1./4.)*FRC_URB2D(ix,iy)/((bs_urb(2,iurb)+ws_urb(2,iurb))*bs_urb(1,iurb)) - - meso_urb= meso_urb*bldac_frc_u(iurb)*cooled_frc_u(iurb) !! adjust for fraction AC - + meso_urb_ac=meso_urb*bldac_frc_u(iurb)*cooled_frc_u(iurb) + roof_frac=FRC_URB2D(ix,iy)*bs_urb(1,iurb)/(bs_urb(1,iurb)+ws_urb(1,iurb)) ibui=0 nlev=0 nbui=0 @@ -934,30 +1078,37 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & endif end do !iz - do ibui=1,nbui !type of building - do iz_u=1,nlev(ibui) !vertical levels - sf_ac_urb3d(ix,iy)=sf_ac_urb3d(ix,iy)+meso_urb*d_urb(ibui)*sflev1D(iz_u,ibui) - lf_ac_urb3d(ix,iy)=lf_ac_urb3d(ix,iy)+meso_urb*d_urb(ibui)*lflev1D(iz_u,ibui) - cm_ac_urb3d(ix,iy)=cm_ac_urb3d(ix,iy)+meso_urb*d_urb(ibui)*consumlev1D(iz_u,ibui) - sfvent_urb3d(ix,iy)=sfvent_urb3d(ix,iy)+meso_urb*d_urb(ibui)*sfvlev1D(iz_u,ibui) - lfvent_urb3d(ix,iy)=lfvent_urb3d(ix,iy)+meso_urb*d_urb(ibui)*lfvlev1D(iz_u,ibui) - enddo !iz_u - enddo !ibui + -! -!Add the latent heat exchanged throughout the ventilation in the lf_ac_urb3d output variable. -!it is only a rint variable -! -! lf_ac_urb3d(ix,iy)=lf_ac_urb3d(ix,iy)+lfvent_urb3d(ix,iy) -! - lf_ac_urb3d(ix,iy)=lf_ac_urb3d(ix,iy)-lfvent_urb3d(ix,iy) + do ibui=1,nbui !type of building + ep_pv_urb3d(ix,iy)=ep_pv_urb3d(ix,iy)+meso_urb_ac*d_urb(ibui)*eppvlev1D(ibui) + do iz_u=1,nlev(ibui) !vertical levels + sf_ac_urb3d(ix,iy)=sf_ac_urb3d(ix,iy)+meso_urb_ac*d_urb(ibui)*sflev1D(iz_u,ibui) + lf_ac_urb3d(ix,iy)=lf_ac_urb3d(ix,iy)+meso_urb_ac*d_urb(ibui)*lflev1D(iz_u,ibui) + cm_ac_urb3d(ix,iy)=cm_ac_urb3d(ix,iy)+meso_urb_ac*d_urb(ibui)*consumlev1D(iz_u,ibui) + sfvent_urb3d(ix,iy)=sfvent_urb3d(ix,iy)+meso_urb_ac*d_urb(ibui)*sfvlev1D(iz_u,ibui) + lfvent_urb3d(ix,iy)=lfvent_urb3d(ix,iy)+meso_urb_ac*d_urb(ibui)*lfvlev1D(iz_u,ibui) + enddo !iz_u + enddo !ibui + -! + if(gr_flag_u.eq.1)then + do id=1,ndm + do iz=2,nz_um-1 + draingr_urb3d(ix,iy)=draingr_urb3d(ix,iy)+d_urb(iz-1)*roof_frac*drain1D(id,iz)*1000 + do ig=1,ngr_u + qgr_urb3d(ix,iy)=qgr_urb3d(ix,iy)+qr1D(id,iz,ig)/ndm/(nz_um-2)/ngr_u + tgr_urb3d(ix,iy)=tgr_urb3d(ix,iy)+trv1D(id,iz,ig)/ndm/(nz_um-2)/ngr_u + + enddo + enddo + enddo + endif !End outputs of bem ! - + sf_ac=0. sf(ix,kts:kte,iy)=0. vl(ix,kts:kte,iy)=0. @@ -992,75 +1143,48 @@ subroutine BEP_BEM(FRC_URB2D,UTYPE_URB2D,itimestep,dz8w,dt,u_phy,v_phy, & sf(ix,kte+1,iy)=sf1D(kte+1) endif ! FRC_URB2D - + + enddo ! iy enddo ! ix time_bep=time_bep+dt +! print*, 'ss_urb', ss_urb +! print*, 'pb_urb', pb_urb +! print*, 'nz_urb', nz_urb +! print*, 'd_urb', d_urb + + return end subroutine BEP_BEM - + + ! ===6=8===============================================================72 - subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & + subroutine BEP1D(itimestep,ix,iy,iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & zr,deltar,ah,rs,rld,alagb, & alag,alaw,alar,alaf,csgb,csg,csw,csr,csf, & - dzr,dzf,dzw,dzgb, & + dzr,dzf,dzw,dzgb,xlat,swddir,swddif, & albg,albw,albr,albwin,emg,emw,emr, & emwind,fww,fwg,fgw,fsw,fws,fsg,z0, & ndu,strd,drst,ws,bs_u,bs,ss,pb, & nzu,z_u,cop_u,pwin_u,beta_u,sw_cond_u, & time_on_u,time_off_u,targtemp_u, & gaptemp_u,targhum_u,gaphum_u,perflo_u, & - hsesf_u,hsequip, & - tw,tg,tr,sfw,sfg,sfr, & + gr_frac_roof,pv_frac_roof, & + hsesf_u,hsequip,irho,gr_flag,gr_type, & + tw,tg,tr,trv,sfw,sfg,sfr, & + sfrv,lfrv,dgr,dg,lfr,lfg,drain,rainbl,qr, & a_u,a_v,a_t,a_e, & b_u,b_v,b_t,b_ac,b_e,b_q, & dlg,dl_u,sf,vl,rl_up,rs_abs,emiss,grdflx_urb, & qv,tlev,qlev,sflev,lflev,consumlev, & - sfvlev,lfvlev,twlev,tglev,tflev,sfwin,ix,iy) - -! ---------------------------------------------------------------------- -! This routine computes the effects of buildings on momentum, heat and -! TKE (turbulent kinetic energy) sources or sinks and on the mixing length. -! It provides momentum, heat and TKE sources or sinks at different levels of a -! mesoscale grid defined by the altitude of its cell interfaces "z" and -! its number of levels "nz". -! The meteorological input parameters (wind, temperature, solar radiation) -! are specified on the "mesoscale grid". -! The inputs concerning the building and street charateristics are defined -! on a "urban grid". The "urban grid" is defined with its number of levels -! "nz_u" and its space step "dz_u". -! The input parameters are interpolated on the "urban grid". The sources or sinks -! are calculated on the "urban grid". Finally the sources or sinks are -! interpolated on the "mesoscale grid". - + eppvlev,tpvlev,sfvlev,lfvlev,twlev,tglev,tflev,sfwin,tmp_u,sfr_indoor,sfrpv,gfr) + ! print*,'SFR_AFT',sfr(id,iz) + -! Mesoscale grid Urban grid Mesoscale grid -! -! z(4) --- --- -! | | -! | | -! | Interpolation Interpolation | -! | Sources or sinks calculation | -! z(3) --- --- -! | ua ua_u --- uv_a a_u | -! | va va_u | uv_b b_u | -! | pt pt_u --- uh_b a_v | -! z(2) --- | etc... etc...--- -! | z_u(1) --- | -! | | | -! z(1) ------------------------------------------------------------ - -! -! Reference: -! Martilli, A., Clappier, A., Rotach, M.W.:2002, 'AN URBAN SURFACE EXCHANGE -! PARAMETERISATION FOR MESOSCALE MODELS', Boundary-Layer Meteorolgy 104: -! 261-304 - -! ---------------------------------------------------------------------- implicit none @@ -1071,7 +1195,7 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & ! Data relative to the "mesoscale grid" !! integer nz ! Number of vertical levels - integer kms,kme,kts,kte + integer kms,kme,kts,kte,ix,iy,itimestep real z(kms:kme) ! Altitude above the ground of the cell interfaces. real ua(kms:kme) ! Wind speed in the x direction real va(kms:kme) ! Wind speed in the y direction @@ -1086,6 +1210,9 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real ah ! Hour angle real rs ! Solar radiation real rld ! Downward flux of the longwave radiation + real xlat ! Latitude + real swddir ! short wave direct solar radiation !_gl + real swddif ! short wave diffuse solar radiation !_gl ! Data relative to the "urban grid" @@ -1101,6 +1228,7 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real emw ! Emissivity of wall real emr ! Emissivity of roof + ! fww,fwg,fgw,fsw,fsg are the view factors used to compute the long and ! short wave radation. ! The calculation of these factor is explained in the Appendix A of the BLM paper @@ -1132,7 +1260,14 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real perflo_u(nurbm) real hsesf_u(nurbm) real hsequip(24) - + real irho(24) + real gr_frac_roof + real pv_frac_roof + integer gr_flag + integer gr_type + real tpv(nbui_max) + real sfpv(nbui_max) + real sfr_indoor(nbui_max) ! ---------------------------------------------------------------------- ! INPUT-OUTPUT ! ---------------------------------------------------------------------- @@ -1142,15 +1277,27 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real tw(2*ndm,nz_um,nwr_u,nbui_max) ! Temperature in each layer of the wall [K] real tr(ndm,nz_um,nwr_u) ! Temperature in each layer of the roof [K] real tg(ndm,ng_u) ! Temperature in each layer of the ground [K] + real trv(ndm,nz_um,ngr_u) ! Temperature in each layer of the green roof [K] real sfw(2*ndm,nz_um,nbui_max) ! Sensible heat flux from walls real sfg(ndm) ! Sensible heat flux from ground (road) real sfr(ndm,nz_um) ! Sensible heat flux from roofs + real sfrv(ndm,nz_um) ! Sensible heat flux from green roofs + real lfrv(ndm,nz_um) ! Latent heat flux from green roofs + real dg(ndm) ! water depth ground (road) + real dgr(ndm,nz_um) ! water depth roofs + real lfr(ndm,nz_um) ! Latent heat flux from roofs + real lfg(ndm) ! Latent heat flux from ground (road) + real drain(ndm,nz_um) ! Green roof drainage + real rainbl ! Rainfall real gfg(ndm) ! Heat flux transferred from the surface of the ground (road) towards the interior real gfr(ndm,nz_um) ! Heat flux transferred from the surface of the roof towards the interior real gfw(2*ndm,nz_um,nbui_max) ! Heat flux transfered from the surface of the walls towards the interior + real qr(ndm,nz_um,ngr_u) ! Green Roof soil moisture + ! ---------------------------------------------------------------------- ! OUTPUT: ! ---------------------------------------------------------------------- + ! Data relative to the "mesoscale grid" @@ -1171,14 +1318,11 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real b_q(kms:kme) ! Explicit component of the humidity sources or sinks real dlg(kms:kme) ! Height above ground (L_ground in formula (24) of the BLM paper). real dl_u(kms:kme) ! Length scale (lb in formula (22) ofthe BLM paper). - - ! ---------------------------------------------------------------------- ! LOCAL: ! ---------------------------------------------------------------------- real dz(kms:kme) ! vertical space steps of the "mesoscale grid" - ! Data interpolated from the "mesoscale grid" to the "urban grid" real ua_u(nz_um) ! Wind speed in the x direction @@ -1204,11 +1348,14 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real drst(ndm) ! Street directions for the current urban class real ss(nz_um) ! Probability to have a building with height h real pb(nz_um) ! Probability to have a building with an height equal + real cdrag(nz_um) + real alp ! Solar radiation at each level of the "urban grid" - real rsg(ndm) ! Short wave radiation from the ground + real rsg(ndm) ! Short wave radiation from the ground real rsw(2*ndm,nz_um) ! Short wave radiation from the walls + real rsd(2*ndm,nz_um) ! Direct Short wave radiation received by the walls real rlg(ndm) ! Long wave radiation from the ground real rlw(2*ndm,nz_um) ! Long wave radiation from the walls @@ -1216,9 +1363,10 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real ptg(ndm) ! Ground potential temperatures real ptr(ndm,nz_um) ! Roof potential temperatures + real ptrv(ndm,nz_um) ! Roof potential temperatures real ptw(2*ndm,nz_um,nbui_max) ! Walls potential temperatures - + real tg_av(ndm) ! Explicit and implicit component of the momentum, temperature and TKE sources or sinks on ! vertical surfaces (walls) ans horizontal surfaces (roofs and street) ! The fluxes can be computed as follow: Fluxes of X = A*X + B @@ -1233,7 +1381,9 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real thb_u(ndm,nz_um) ! Temperature Horizontal surfaces, B (explicit) term real tva_u(2*ndm,nz_um) ! Temperature Vertical surfaces, A (implicit) term real tvb_u(2*ndm,nz_um) ! Temperature Vertical surfaces, B (explicit) term - real tvb_ac(2*ndm,nz_um) + + + real tvb_ac(2*ndm,nz_um) real ehb_u(ndm,nz_um) ! Energy (TKE) Horizontal surfaces, B (explicit) term real evb_u(2*ndm,nz_um) ! Energy (TKE) Vertical surfaces, B (explicit) term real qhb_u(ndm,nz_um) ! Humidity Horizontal surfaces, B (explicit) term @@ -1245,8 +1395,8 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real grdflx_urb ! ground heat flux real dt_int ! internal time step integer nt_int ! number of internal time step - integer iz,id, it_int - integer iw,ix,iy + integer iz,id, it_int,it + integer iw !--------------------------------------- !New variables uses in BEM @@ -1260,7 +1410,7 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real dzgb(ngb_u) !Layer sizes in the ground below the buildings real csgb(ngb_u) !Specific heat of the ground material below the buildings - !of the current urban class at each ground levels[J m^3 K^-1] + real csf(nf_u) !Specific heat of the floors materials in the buildings !of the current urban class at each levels[J m^3 K^-1] real alar(nwr_u+1) ! Roof thermal diffusivity for the current urban class [W/m K] @@ -1268,12 +1418,18 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real alaf(nf_u+1) ! Floor thermal diffusivity at each wall layers [W/m K] real alagb(ngb_u+1) ! Ground thermal diffusivity below the building at each wall layer [W/m K] - real sfrb(ndm,nbui_max) ! Sensible heat flux from roofs [W/m2] - real gfrb(ndm,nbui_max) ! Heat flux flowing inside the roofs [W/m2] - real sfwb1D(2*ndm,nz_um) !Sensible heat flux from the walls [W/m2] - real sfwin(2*ndm,nz_um,nbui_max)!Sensible heat flux from windows [W/m2] - real sfwinb1D(2*ndm,nz_um) !Sensible heat flux from windows [W/m2] - real gfwb1D(2*ndm,nz_um) !Heat flux flowing inside the walls [W/m2] + real sfrb(ndm,nbui_max) ! Sensible heat flux from roofs [W/m²] + real sfrbpv(ndm,nbui_max) ! Sensible heat flux from PV panels [W/m2] + real sfrpv(ndm,nz_um) ! Sensible heat flux from PV panels [W/m2] + real sfrvb(ndm,nbui_max) ! Sensible heat flux from roofs [W/m²] + real lfrvb(ndm,nbui_max) ! Sensible heat flux from roofs [W/m²] + real lfrb(ndm,nbui_max) ! Sensible heat flux from roofs [W/m²] + + real gfrb(ndm,nbui_max) ! Heat flux flowing inside the roofs [W/m²] + real sfwb1D(2*ndm,nz_um) !Sensible heat flux from the walls [W/m²] + real sfwin(2*ndm,nz_um,nbui_max)!Sensible heat flux from windows [W/m²] + real sfwinb1D(2*ndm,nz_um) !Sensible heat flux from windows [W/m²] + real gfwb1D(2*ndm,nz_um) !Heat flux flowing inside the walls [W/m²] real qlev(nz_um,nbui_max) !specific humidity [kg/kg] real qlevb1D(nz_um) !specific humidity [kg/kg] @@ -1287,14 +1443,18 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real tflev(ndm,nf_u,nz_um-1,nbui_max)!Floor temperature in BEM[K] real tflevb1D(nf_u,nz_um-1) !Floor temperature in BEM[K] real trb(ndm,nwr_u,nbui_max) !Roof temperature in BEM [K] - real trb1D(nwr_u) !Roof temperature in BEM [K] - + real trvb(ndm,ngr_u,nbui_max) !Roof temperature in BEM [K] + real trb1D(nwr_u) + real sflev(nz_um,nz_um) ! sensible heat flux due to the air conditioning systems [W] real lflev(nz_um,nz_um) ! latent heat flux due to the air conditioning systems [W] real consumlev(nz_um,nz_um) ! consumption due to the air conditioning systems [W] real sflev1D(nz_um) ! sensible heat flux due to the air conditioning systems [W] real lflev1D(nz_um) ! latent heat flux due to the air conditioning systems [W] real consumlev1D(nz_um) ! consumption due to the air conditioning systems [W] + real eppvlev(nz_um) ! Electricity production of PV panels [W] + real tpvlev(ndm,nz_um) + real tpvlevb(ndm,nbui_max) ! Sensible heat flux from roofs [W/m²] real sfvlev(nz_um,nz_um) ! sensible heat flux due to ventilation [W] real lfvlev(nz_um,nz_um) ! latent heat flux due to ventilation [W] real sfvlev1D(nz_um) ! sensible heat flux due to ventilation [W] @@ -1305,26 +1465,48 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & real twlev_av(2*ndm,nz_um) ! Averaged temperature of the windows real sfw_av(2*ndm,nz_um) ! Averaged sensible heat from walls real sfwind_av(2*ndm,nz_um) ! Averaged sensible heat from windows - + integer flag_pvp integer nbui !Total number of different type of buildings in an urban class integer nlev(nz_um) !Number of levels in each different type of buildings in an urban class integer ibui,ily real :: nhourday ! Number of hours from midnight, local time + real :: st4,gamma,fp,lmr,smr,prova + real hfgr(ndm,nz_um)!heat flux green roof + real hfgrb(ndm,nbui_max) + real irri_per_ts + real irri_now + real tr_av(ndm,nz_um) + real tr_avb(ndm,nbui_max) + real sfr_avb(ndm,nbui_max) ! ---------------------------------------------------------------------- ! END VARIABLES DEFINITIONS ! ---------------------------------------------------------------------- - + ! Fix some usefull parameters for the computation of the sources or sinks ! !initialize the variables inside the param routine -! + nhourday=ah/PI*180./15.+12. + if (nhourday >= 24) nhourday = nhourday - 24 + if (nhourday < 0) nhourday = nhourday + 24 + + + if(sum(irho).gt.0)then + irri_per_ts=h_water/sum(irho) + else + irri_per_ts=0. + endif + + if(irho(int(nhourday)+1).ne.0)then + irri_now=irri_per_ts + else + irri_now=0. + endif + do iz=kts,kte dz(iz)=z(iz+1)-z(iz) end do - ! Interpolation on the "urban grid" - call interpol(kms,kme,kts,kte,nzu,z,z_u,ua,ua_u) call interpol(kms,kme,kts,kte,nzu,z,z_u,va,va_u) call interpol(kms,kme,kts,kte,nzu,z,z_u,pt,pt_u) @@ -1332,38 +1514,87 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & call interpol(kms,kme,kts,kte,nzu,z,z_u,pr,pr_u) call interpol(kms,kme,kts,kte,nzu,z,z_u,da,da_u) call interpol(kms,kme,kts,kte,nzu,z,z_u,qv,qv_u) - ! Compute the modification of the radiation due to the buildings call averaging_temp(tw,twlev,ss,pb,tw_av,twlev_av, & - sfw_av,sfwind_av,sfw,sfwin) + sfw_av,sfwind_av,sfw,sfwin) + + do id=1,ndu + tg_av(id)=tg(id,ng_u) + do iz=1,nz_um + + tr_av(id,iz)=((1-gr_frac_roof)*tr(id,iz,nwr_u)**4.+ & + gr_frac_roof*trv(id,iz,ngr_u)**4.)**(1./4.) + + enddo + enddo + - call modif_rad(iurb,ndu,nzu,z_u,ws, & + + + call modif_rad(iurb,ndu,nzu,z_u,ws, & drst,strd,ss,pb, & - tw_av,tg,twlev_av,albg,albw, & + tw_av,tg_av,twlev_av,albg,albw, & emw,emg,pwin_u(iurb),albwin, & emwind,fww,fwg,fgw,fsw,fsg, & - zr,deltar,ah, & - rs,rld,rsw,rsg,rlw,rlg) + zr,deltar,ah,xlat,swddir,swddif, & !_gl + rs,rld,rsw,rsd,rsg,rlw,rlg) + + + ! calculation of the urban albedo and the upward long wave radiation + call upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & - tg,emg,albg,rlg,rsg,sfg, & + tg_av,emg,albg,rlg,rsg,sfg,lfg, & tw_av,emw,albw,rlw,rsw,sfw_av, & - tr,emr,albr,emwind, & - albwin,twlev_av,pwin_u(iurb),sfwind_av,rld,rs,sfr, & - rs_abs,rl_up,emiss,grdflx_urb) - -! Compute the surface temperatures + tr_av,emr,albr,emwind, & + albwin,twlev_av,pwin_u(iurb),sfwind_av,rld,rs,sfr,sfrv,lfr,lfrv, & + rs_abs,rl_up,emiss,grdflx_urb,gr_frac_roof,tpvlev,pv_frac_roof) + + do id=1,ndu + if(dg(id).le.dgmax) then + dg(id)=dg(id)+(rainbl+(lfg(id)*dt)/latent) + endif + if (dg(id).lt.0) then + dg(id)=0 + endif + if (dg(id).gt.dgmax) then + dg(id)=dgmax + endif + do iz=2,nz_um + if(dgr(id,iz).le.drmax) then + dgr(id,iz)=dgr(id,iz)+(rainbl+(lfr(id,iz)*dt)/latent) + endif + if (dgr(id,iz).lt.0) then + dgr(id,iz)=0 + endif + if (dgr(id,iz).gt.drmax) then + dgr(id,iz)=drmax + endif + enddo + enddo !id + + - call surf_temp(ndu,pr_u,dt, & + + call surf_temp(ndu,pr_u,dt, & rld,rsg,rlg, & - tg,alag,csg,emg,albg,ptg,sfg,gfg) - -! Call the BEM (Building Energy Model) routine + tg,alag,csg,emg,albg,ptg,sfg,lfg,gfg) + if(gr_flag.eq.1)then + if(gr_frac_roof.gt.0.)then + hfgr=0. + call roof_temp_veg(ndu,pr_u,dt, & + rld,rs, & + trv,ptrv,sfrv,lfrv,gfr,qr,rainbl,drain,hfgr,tr,alar(5),dzr(5),csr(5),nzu,irri_now,gr_type,pv_frac_roof,tpvlev) + + endif + endif + + do iz=1,nz_um !Compute the outdoor temperature tmp_u(iz)=pt_u(iz)*(pr_u(iz)/p0)**(rcp_u) @@ -1372,30 +1603,37 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & ibui=0 nlev=0 nbui=0 - + hfgrb=0. sfrb=0. !Sensible heat flux from roof + sfrbpv=0. !Sensible heat flux from PV panels + sfrpv=0. !Sensible heat flux from PV panels + lfrvb=0. + lfrb=0. + sfrvb=0. gfrb=0. !Heat flux flowing inside the roof sfwb1D=0. !Sensible heat flux from walls sfwinb1D=0. !Sensible heat flux from windows - gfwb1D=0. !Heat flux flowing inside the walls[W/m2] + gfwb1D=0. !Heat flux flowing inside the walls[W/m²] twb1D=0. !Wall temperature twlevb1D=0. !Window temperature tglevb1D=0. !Ground temperature below a building - tflevb1D=0. !Floor temperature + tflevb1D=0. !Floor temperature + trvb=0. trb=0. !Roof temperature trb1D=0. !Roof temperature - + tr_avb=0. qlevb1D=0. !Indoor humidity tlevb1D=0. !indoor temperature sflev1D=0. !Sensible heat flux from the a.c. lflev1D=0. !Latent heat flux from the a.c. consumlev1D=0.!Consumption from the a.c. + tpvlevb=0. + eppvlev=0. sfvlev1D=0. !Sensible heat flux from the natural ventilation lfvlev1D=0. !Latent heat flux from natural ventilation - ptw=0. !Wall potential temperature ptwin=0. !Window potential temperature ptr=0. !Roof potential temperature @@ -1406,10 +1644,21 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & nlev(ibui)=iz-1 nbui=ibui do id=1,ndm + tr_avb(id,ibui)=tr_av(id,iz) + tpvlevb(id,ibui)=tpvlev(id,iz) + hfgrb(id,ibui)=hfgr(id,iz) sfrb(id,ibui)=sfr(id,iz) + sfrvb(id,ibui)=sfrv(id,iz) + lfrvb(id,ibui)=lfrv(id,iz) + lfrb(id,ibui)=lfr(id,iz) + sfr_avb(id,ibui)=(1-gr_frac_roof)*sfr(id,iz)+gr_frac_roof*(sfrv(id,iz)) do ily=1,nwr_u trb(id,ily,ibui)=tr(id,iz,ily) enddo + do ily=1,ngr_u + trvb(id,ily,ibui)=trv(id,iz,ily) + enddo + enddo endif end do !iz @@ -1418,14 +1667,9 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & !Loop over BEM ----------------------------------------------------------------- !-------------------------------------------------------------------------------- !-------------------------------------------------------------------------------- - nhourday=ah/PI*180./15.+12. - if (nhourday >= 24) nhourday = nhourday - 24 - if (nhourday < 0) nhourday = nhourday + 24 do ibui=1,nbui - - - do iz=1,nz_um + do iz=1,nz_um qlevb1D(iz)=qlev(iz,ibui) tlevb1D(iz)=tlev(iz,ibui) enddo @@ -1461,177 +1705,39 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & twlevb1D(2*id,iz)=twlev(2*id,iz,ibui) enddo enddo - - !print*,'nz_um',nz_um - !print*,'nlev(ibui)',nlev(ibui) - !print*,'nhourday',nhourday - !print*,'dt',dt - !print*, 'bs_u(1,iurb)',bs_u(1,iurb) - !print*, 'bs_u(2,iurb)',bs_u(2,iurb) - !print*, 'dz_u',dz_u - !print*, 'nwr_u',nwr_u - !print*, 'nf_u',nf_u - !print*, 'nwr_u', nwr_u - !print*, 'ngb_u',ngb_u - !print*, 'sfwb1D',sfwb1D - !print*, 'gfwb1D',gfwb1D - !print*, 'sfwinb1D',sfwinb1D - !print*, 'sfrb(1,ibui)',sfrb(1,ibui) - !print*, 'gfrb(1,ibui)',gfrb(1,ibui) - !print*, 'latent',latent - !print*, 'sigma',sigma - !print*, 'albw_u(iurb)',albw - !print*, 'albwin_u(iurb)',albwin - !print*, 'albr_u(iurb)',albr - !print*, 'emr_u(iurb)',emr - !print*, 'emw_u(iurb)',emw - !print*, 'emwind_u(iurb)',emwind - !print*, 'rsw',rsw - !print*, 'rlw',rlw - !print*, 'r',r - !print*, 'cp_u',cp_u - !print*, 'da_u',da_u - !print*, 'tmp_u',tmp_u - !print*, 'qv_u',qv_u - !print*, 'pr_u',pr_u - !print*, 'rs',rs - !print*, 'rld',rld - !print*, 'dzw',dzw - !print*, 'csw',csw - !print*, 'alaw',alaw - !print*, 'pwin_u',pwin_u - !print*, 'cop_u(iurb)',cop_u(iurb) - !print*, 'beta_u(iurb)',beta_u(iurb) - !print*, 'sw_cond_u(iurb)',sw_cond_u(iurb) - !print*, 'time_on_u(iurb)',time_on_u(iurb) - !print*, 'time_off_u(iurb)',time_off_u(iurb) - !print*, 'targtemp_u(iurb)',targtemp_u(iurb) - !print*, 'gaptemp_u(iurb)',gaptemp_u(iurb) - !print*, 'targhum_u(iurb)',targhum_u(iurb) - !print*, 'gaphum_u(iurb)',gaphum_u(iurb) - !print*, 'perflo_u(iurb)',perflo_u(iurb) - !print*, 'hsesf_u(iurb)',hsesf_u(iurb) - !print*, 'hsequip',hsequip - !print*, 'dzf',dzf - !print*, 'csf',csf - !print*, 'alaf',alaf - !print*, 'dzgb',dzgb - !print*, 'csgb',csgb - !print*, 'alagb',alagb - !print*, 'dzr',dzr - !print*, 'csr',csr - !print*, 'alar',alar - !print*, 'tlevb1D',tlevb1D - !print*, 'qlevb1D',qlevb1D - !print*, 'twb1D',twb1D - !print*, 'twlevb1D',twlevb1D - !print*, 'tflevb1D',tflevb1D - !print*, 'tglevb1D',tglevb1D - !print*, 'trb1D',trb1D - !print*, 'sflev1D',sflev1D - !print*, 'lflev1D',lflev1D - !print*, 'consumlev1D',consumlev1D - !print*, 'sfvlev1D',sfvlev1D - !print*, 'lfvlev1D',lfvlev1D + !print*,'HFGR_BEFORE_CALLING_BEM',hfgr(nlev(ibui)) - - - - - call BEM(nz_um,nlev(ibui),nhourday,dt,bs_u(1,iurb), & + call BEM(nz_um,nlev(ibui),nhourday,dt,bs_u(1,iurb), & bs_u(2,iurb),dz_u,nwr_u,nf_u,nwr_u,ngb_u,sfwb1D,gfwb1D, & - sfwinb1D,sfrb(1,ibui),gfrb(1,ibui), & + sfwinb1D,sfr_avb(1,ibui),lfrb(1,ibui),gfrb(1,ibui),sfrbpv(1,ibui), & latent,sigma,albw,albwin,albr, & emr,emw,emwind,rsw,rlw,r,cp_u, & da_u,tmp_u,qv_u,pr_u,rs,rld,dzw,csw,alaw,pwin_u(iurb), & cop_u(iurb),beta_u(iurb),sw_cond_u(iurb),time_on_u(iurb), & time_off_u(iurb),targtemp_u(iurb),gaptemp_u(iurb), & targhum_u(iurb),gaphum_u(iurb),perflo_u(iurb), & + gr_frac_roof,pv_frac_roof,gr_flag, & + ua_u,va_u, & hsesf_u(iurb),hsequip, & dzf,csf,alaf,dzgb,csgb,alagb,dzr,csr, & alar,tlevb1D,qlevb1D,twb1D,twlevb1D,tflevb1D,tglevb1D, & - trb1D,sflev1D,lflev1D,consumlev1D,sfvlev1D,lfvlev1D) - - !print*,'nz_um A',nz_um - !print*,'nlev(ibui) A',nlev(ibui) - !print*,'nhourday A',nhourday - !print*,'dt A',dt - !print*, 'bs_u(1,iurb) A',bs_u(1,iurb) - !print*, 'bs_u(2,iurb) A',bs_u(2,iurb) - !print*, 'dz_u A',dz_u - !print*, 'nwr_u A',nwr_u - !print*, 'nf_u A',nf_u - !print*, 'nwr_u A', nwr_u - !print*, 'ngb_u A',ngb_u - !print*, 'sfwb1D A',sfwb1D - !print*, 'gfwb1D A',gfwb1D - !print*, 'sfwinb1D A',sfwinb1D - !print*, 'sfrb(1,ibui) A',sfrb(1,ibui) - !print*, 'gfrb(1,ibui) A',gfrb(1,ibui) - !print*, 'latent A',latent - !print*, 'sigma A',sigma - !print*, 'albw_u(iurb) A',albw - !print*, 'albwin_u(iurb) A',albwin - !print*, 'albr_u(iurb) A',albr - !print*, 'emr_u(iurb) A',emr - !print*, 'emw_u(iurb) A',emw - !print*, 'emwind_u(iurb) A',emwind - !print*, 'rsw A',rsw - !print*, 'rlw A',rlw - !print*, 'r A',r - !print*, 'cp_u A',cp_u - !print*, 'da_u A',da_u - !print*, 'tmp_u A',tmp_u - !print*, 'qv_u A',qv_u - !print*, 'pr_u A',pr_u - !print*, 'rs A',rs - !print*, 'rld A',rld - !print*, 'dzw A',dzw - !print*, 'csw A',csw - !print*, 'alaw A',alaw - !print*, 'pwin_u A',pwin_u - !print*, 'cop_u(iurb) A',cop_u(iurb) - !print*, 'beta_u(iurb) A',beta_u(iurb) - !print*, 'sw_cond_u(iurb) A',sw_cond_u(iurb) - !print*, 'time_on_u(iurb) A',time_on_u(iurb) - !!print*, 'time_off_u(iurb) A',time_off_u(iurb) - !print*, 'targtemp_u(iurb) A',targtemp_u(iurb) - !print*, 'gaptemp_u(iurb) A ',gaptemp_u(iurb) - !print*, 'targhum_u(iurb) A ',targhum_u(iurb) - !print*, 'gaphum_u(iurb) A',gaphum_u(iurb) - !print*, 'perflo_u(iurb) A',perflo_u(iurb) - !print*, 'hsesf_u(iurb) A',hsesf_u(iurb) - !print*, 'hsequip A',hsequip - !print*, 'dzf A',dzf - !print*, 'csf A',csf - !print*, 'alaf A',alaf - !print*, 'dzgb A',dzgb - !print*, 'csgb A',csgb - !print*, 'alagb A',alagb - !print*, 'dzr A',dzr - !print*, 'csr A',csr - !print*, 'alar A',alar - !print*, 'tlevb1D A',tlevb1D - !print*, 'qlevb1D A',qlevb1D - !print*, 'twb1D A',twb1D - !print*, 'twlevb1D A',twlevb1D - !print*, 'tflevb1D A',tflevb1D - !print*, 'tglevb1D A',tglevb1D - !print*, 'trb1D A',trb1D - !print*, 'sflev1D A',sflev1D - !print*, 'lflev1D A',lflev1D - !print*, 'consumlev1D A',consumlev1D - !print*, 'sfvlev1D A',sfvlev1D - !print*, 'lfvlev1D A',lfvlev1D + trb1D,sflev1D,lflev1D,consumlev1D,eppvlev(ibui),tpvlevb(1,ibui), & + sfvlev1D,lfvlev1D,hfgrb(1,ibui),tr_avb(1,ibui), & + tpv(ibui),sfpv(ibui),sfr_indoor(ibui)) + - ! !Temporal modifications -! +! + tpvlevb(2,ibui)=tpvlevb(1,ibui) sfrb(2,ibui)=sfrb(1,ibui) + sfrvb(2,ibui)=sfrvb(1,ibui) + lfrvb(2,ibui)=lfrvb(1,ibui) + lfrb(2,ibui)=lfrb(1,ibui) + sfrbpv(2,ibui)=sfrbpv(1,ibui) gfrb(2,ibui)=gfrb(1,ibui) -! + hfgrb(2,ibui)=hfgrb(1,ibui) !End temporal modifications ! do iz=1,nz_um @@ -1658,18 +1764,12 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & enddo enddo -!! do iz=1,nz_um -!! sfwin(2*id-1,iz,ibui)=sfwinb1D(2*id-1,iz) -!! sfwin(2*id,iz,ibui)=sfwinb1D(2*id,iz) -!! enddo do iz=1,nz_um do ily=1,nwr_u tw(2*id-1,iz,ily,ibui)=twb1D(2*id-1,ily,iz) tw(2*id,iz,ily,ibui)=twb1D(2*id,ily,iz) enddo -!! sfw(2*id-1,iz,ibui)=sfwb1D(2*id-1,iz) -!! sfw(2*id,iz,ibui)=sfwb1D(2*id,iz) gfw(2*id-1,iz,ibui)=gfwb1D(2*id-1,iz) gfw(2*id,iz,ibui)=gfwb1D(2*id,iz) twlev(2*id-1,iz,ibui)=twlevb1D(2*id-1,iz) @@ -1678,7 +1778,7 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & enddo enddo !ibui - + !----------------------------------------------------------------------------- !End loop over BEM ----------------------------------------------------------- !----------------------------------------------------------------------------- @@ -1686,43 +1786,67 @@ subroutine BEP1D(iurb,kms,kme,kts,kte,z,dt,ua,va,pt,da,pr,pt0, & ibui=0 - do iz=1,nz_um + do iz=1,nzu!nz_um if(ss(iz).gt.0) then ibui=ibui+1 do id=1,ndm gfr(id,iz)=gfrb(id,ibui) + tpvlev(id,iz)=tpvlevb(id,ibui) sfr(id,iz)=sfrb(id,ibui) + hfgr(id,iz)=hfgrb(id,ibui) + sfrpv(id,iz)=-sfrbpv(id,ibui) + lfr(id,iz)=lfrb(id,ibui) do ily=1,nwr_u tr(id,iz,ily)=trb(id,ily,ibui) enddo ptr(id,iz)=tr(id,iz,nwr_u)*(pr_u(iz)/p0)**(-rcp_u) enddo endif - enddo !iz + enddo !iz !Compute the potential temperature for the vertical surfaces of the buildings do id=1,ndm - do iz=1,nz_um + do iz=1,nzu!nz_um do ibui=1,nbui ptw(2*id-1,iz,ibui)=tw(2*id-1,iz,nwr_u,ibui)*(pr_u(iz)/p0)**(-rcp_u) ptw(2*id,iz,ibui)=tw(2*id,iz,nwr_u,ibui)*(pr_u(iz)/p0)**(-rcp_u) ptwin(2*id-1,iz,ibui)=twlev(2*id-1,iz,ibui)*(pr_u(iz)/p0)**(-rcp_u) ptwin(2*id,iz,ibui)=twlev(2*id,iz,ibui)*(pr_u(iz)/p0)**(-rcp_u) + enddo enddo enddo +!NEW CDRAG! + do iz=1,nz_um + alp=0. + do id=1,ndu + alp=alp+bs(id)/(ws(id)+bs(id))*pb(iz) + enddo + alp=alp/ndu + if(alp.lt.0.29)then + cdrag(iz)=3.32*alp**0.47 + else + cdrag(iz)=1.85 + endif + enddo + ! Compute the implicit and explicit components of the sources or sinks on the "urban grid" - - call buildings(iurb,ndu,nzu,z0,ua_u,va_u, & - pt_u,pt0_u,ptg,ptr,da_u,ptw,ptwin,pwin_u(iurb),drst, & + + call buildings(iurb,ndu,nzu,z0,cdrag,ua_u,va_u, & + pt_u,pt0_u,ptg,ptr,ptrv,da_u,qv_u,pr_u,tmp_u,ptw,ptwin,pwin_u(iurb),drst, & uva_u,vva_u,uvb_u,vvb_u,tva_u,tvb_u,evb_u,qvb_u,qhb_u, & - uhb_u,vhb_u,thb_u,ehb_u,ss,dt,sfw,sfg,sfr, & - sfwin,pb,bs_u,dz_u,sflev,lflev,sfvlev,lfvlev,tvb_ac) + uhb_u,vhb_u,thb_u,ehb_u,ss,dt,sfw,sfg,sfr,sfrpv,sfrv,lfrv, & + dgr,dg,lfr,lfg, & + sfwin,pb,bs_u,dz_u,sflev,lflev,sfvlev,lfvlev,tvb_ac,ix,iy,rsg,rs,qr,gr_frac_roof, & + pv_frac_roof,gr_flag,gr_type) + + + ! Calculation of the sensible heat fluxes for the ground, the wall and roof ! Sensible Heat Flux = density * Cp_U * ( A* potential temperature + B ) ! where A and B are the implicit and explicit components of the heat sources or sinks. @@ -1952,16 +2076,12 @@ subroutine param(iurb,nzu,nzurb,nzurban,ndu, & enddo do id=1,ndu if ((bs(id)<=1.).OR.(bs(id)>=150.)) then -! write(*,*) 'WARNING, WIDTH OF THE BUILDING WRONG',id,bs(id) -! write(*,*) 'WIDTH OF THE STREET',id,ws(id) bs(id)=bs_u(id,iurb) ws(id)=ws_u(id,iurb) bs_urb(id,iurb)=bs_u(id,iurb) ws_urb(id,iurb)=ws_u(id,iurb) endif if ((ws(id)<=1.).OR.(ws(id)>=150.)) then -! write(*,*) 'WARNING, WIDTH OF THE STREET WRONG',id,ws(id) -! write(*,*) 'WIDTH OF THE BUILDING',id,bs(id) ws(id)=ws_u(id,iurb) bs(id)=bs_u(id,iurb) bs_urb(id,iurb)=bs_u(id,iurb) @@ -2107,10 +2227,10 @@ end subroutine averaging_temp ! ===6=8===============================================================72 subroutine modif_rad(iurb,nd,nz_u,z,ws,drst,strd,ss,pb, & - tw,tg,twlev,albg,albw,emw,emg,pwin,albwin, & + tw,tg_av,twlev,albg,albw,emw,emg,pwin,albwin, & emwin,fww,fwg,fgw,fsw,fsg, & - zr,deltar,ah, & - rs,rl,rsw,rsg,rlw,rlg) + zr,deltar,ah,xlat,swddir,swddif, & + rs,rl,rsw,rsd,rsg,rlw,rlg) ! ---------------------------------------------------------------------- ! This routine computes the modification of the short wave and @@ -2133,7 +2253,7 @@ subroutine modif_rad(iurb,nd,nz_u,z,ws,drst,strd,ss,pb, & real ss(nz_um) ! probability to have a building with height h real pb(nz_um) ! probability to have a building with an height equal real tw(2*ndm,nz_um) ! Temperature in each layer of the wall [K] - real tg(ndm,ng_u) ! Temperature in each layer of the ground [K] + real tg_av(ndm) ! Temperature in each layer of the ground [K] real albg ! Albedo of the ground for the current urban class real albw ! Albedo of the wall for the current urban class real emg ! Emissivity of ground for the current urban class @@ -2149,6 +2269,10 @@ subroutine modif_rad(iurb,nd,nz_u,z,ws,drst,strd,ss,pb, & real deltar ! Declination of the sun real rs ! solar radiation real rl ! downward flux of the longwave radiation + real xlat ! latitudine + real swddir ! short wave direct solar radiation _gl + real swddif ! short wave diffuse solar radiation _gl + ! !New variables BEM ! @@ -2164,6 +2288,7 @@ subroutine modif_rad(iurb,nd,nz_u,z,ws,drst,strd,ss,pb, & real rlw(2*ndm,nz_um) ! Long wave radiation at the walls real rsg(ndm) ! Short wave radiation at the ground real rsw(2*ndm,nz_um) ! Short wave radiation at the walls + real rsd(2*ndm,nz_um) ! Direct Short wave radiation at the walls ! ---------------------------------------------------------------------- ! LOCAL: @@ -2174,27 +2299,31 @@ subroutine modif_rad(iurb,nd,nz_u,z,ws,drst,strd,ss,pb, & ! Calculation of the shadow effects call shadow_mas(nd,nz_u,zr,deltar,ah,drst,ws,ss,pb,z, & - rs,rsw,rsg) + swddir,rsw,rsg,xlat) + rsd=rsw ! Calculation of the reflection effects do id=1,nd call long_rad(iurb,nz_u,id,emw,emg,emwin,pwin,twlev, & - fwg,fww,fgw,fsw,fsg,tg,tw,rlg,rlw,rl,pb) + fwg,fww,fgw,fsw,fsg,tg_av,tw,rlg,rlw,rl,pb) alb_av=pwin*albwin+(1.-pwin)*albw - call short_rad(iurb,nz_u,id,alb_av,albg,fwg,fww,fgw,rsg,rsw,pb) - + call short_rad_dd(iurb,nz_u,id,alb_av, & + albg,swddif,fwg,fww,fgw,fsw,fsg,rsg,rsw,pb) + + enddo return end subroutine modif_rad + ! ===6=8===============================================================72 ! ===6=8===============================================================72 subroutine surf_temp(nd,pr,dt,rl,rsg,rlg, & - tg,alag,csg,emg,albg,ptg,sfg,gfg) + tg,alag,csg,emg,albg,ptg,sfg,lfg,gfg) ! ---------------------------------------------------------------------- ! Computation of the surface temperatures for walls, ground and roofs @@ -2225,6 +2354,8 @@ subroutine surf_temp(nd,pr,dt,rl,rsg,rlg, & real sfg(ndm) ! Sensible heat flux from ground (road) + real lfg(ndm) ! Latent heat flux from ground (road) + real gfg(ndm) ! Heat flux transferred from the surface of the ground (road) toward the interior real tg(ndm,ng_u) ! Temperature in each layer of the ground [K] @@ -2247,6 +2378,7 @@ subroutine surf_temp(nd,pr,dt,rl,rsg,rlg, & data dzg_u /0.2,0.12,0.08,0.05,0.03,0.02,0.02,0.01,0.005,0.0025/ + ! ---------------------------------------------------------------------- ! END VARIABLES DEFINITIONS ! ---------------------------------------------------------------------- @@ -2260,10 +2392,13 @@ subroutine surf_temp(nd,pr,dt,rl,rsg,rlg, & tg_tmp(ig)=tg(id,ig) end do ! +! print*,'alag','cs',alag(1),csg(1) + call soil_temp(ng_u,dzg_u,tg_tmp,ptg(id),alag,csg, & rsg(id),rlg(id),pr(1), & dt,emg,albg, & - rtg(id),sfg(id),gfg(id)) + rtg(id),sfg(id),lfg(id),gfg(id)) + do ig=1,ng_u tg(id,ig)=tg_tmp(ig) end do @@ -2272,16 +2407,198 @@ subroutine surf_temp(nd,pr,dt,rl,rsg,rlg, & return end subroutine surf_temp - -! ===6=8===============================================================72 -! ===6=8===============================================================72 - subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & - ptg,ptr,da_u,ptw,ptwin,pwin, & - drst,uva_u,vva_u,uvb_u,vvb_u, & + +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + + subroutine roof_temp_veg(nd,pr,dt,rl,rsr, & + trv,ptrv,sfrv,lfrv,gfr,qr,rainbl,drain,hfgroof,tr,alar,dzr,csr,nzu,irri_now,gr_type,pv_frac_roof,tpvlev) + +! ---------------------------------------------------------------------- +! Computation of the surface temperatures for walls, ground and roofs +! ---------------------------------------------------------------------- + + implicit none + +! ---------------------------------------------------------------------- +! INPUT: +! ---------------------------------------------------------------------- + real rainbl + integer nd ! Number of street direction for the current urban class + + integer nzu ! Number of urban layers + real irho(24) ! Which hour of irrigation\ + + + real alar ! Roof thermal diffusivity for the current urban class [m^2 s^-1] + real pv_frac_roof + real csr + + real dzr ! Layer sizes in the roofs [m] + + real dt ! Time step + + real pr(nz_um) ! Air pressure + + real rl ! Downward flux of the longwave radiation + + real rsr ! Short wave radiation at the ground + + real tpvlev(ndm,nz_um) + + real sfrv(ndm,nz_um) ! Sensible heat flux from ground (road) + + real lfrv(ndm,nz_um) ! Latent heat flux from ground (road) + + real gfr(ndm,nz_um) ! Heat flux transferred from the surface of the ground (road) toward the interior + + real trv(ndm,nz_um,ngr_u) ! Temperature in each layer of the green roof [K] + + real qr(ndm,nz_um,ngr_u) ! Humidity in each layer of the green roof + + real tr(ndm,nz_um,nwr_u) !Roof temperature in BEM [K] + +! ---------------------------------------------------------------------- +! OUTPUT: +! ---------------------------------------------------------------------- + real ptrv(ndm,nz_um) ! Ground potential temperatures + + real hfgroof(ndm,nz_um) +! ---------------------------------------------------------------------- +! LOCAL: +! ---------------------------------------------------------------------- + integer id,ig,ir,iw,iz + + real alagr(ngr_u) ! Green Roof thermal diffusivity for the current urban class [m^2 s^-1] + + real rtr(ndm,nz_um) ! Total radiation at ground(road) surface (solar+incoming long+outgoing long) + + real tr_tmp(ngr_u) + + real qr_tmp(ngr_u) + real qr_tmp_old(ngr_u) + real dzgr_u(ngr_u) ! Layer sizes in the green roof +!MODIFICA + data dzgr_u /0.1,0.003,0.06,0.003,0.05,0.04,0.02,0.0125,0.005,0.0025/ + real cs(ngr_u) ! Specific heat of the ground material + real cw + parameter(cw=4.295e6) + real s(ngr_u) + real d(ngr_u) + real k(ngr_u) + real qr_m ! mean soil moisture between layers + real qrmax(ngr_u) + real smax(ngr_u) + real kmax(ngr_u) + real b(ngr_u) + real cd(ngr_u) + real csa(4) + real ka(4) + real qref + parameter(qref=0.37) + data qrmax /0.0,0.0,0.0,0.0,0.439,0.37,0.37,0.37,0.37,0.37/ + data smax /0,0,0,0,-0.01,-0.1,-0.1,-0.1,-0.1,-0.1/ + data kmax /0,0,0,0,3.32e-3,2.162e-3,2.162e-3,2.162e-3,2.162e-3,2.162e-3/ + data b /0,0,0,0,2.7,3.9,3.9,3.9,3.9,3.9/ + data cd /0,0,0,0,331500,1.342e6,1.342e6,1.342e6,1.342e6,1.342e6/ + data csa /7.5e4,2.1e6,4.48e4,2.1e6/ + data ka /0.035,0.7,0.024,0.7/ + real em_gr(1) + real alb_gr(1) + real irri_now + integer gr_type + real drain(ndm,nz_um) +! ---------------------------------------------------------------------- +! END VARIABLES DEFINITIONS + + if(gr_type.eq.1)then + em_gr=0.95 + alb_gr=0.3 + elseif(gr_type.eq.2)then + em_gr=0.83 + alb_gr=0.154 + endif + + + do iz=2,nzu + + do id=1,nd + + + + +! Calculation for the ground surfaces + + do ig=1,ngr_u + tr_tmp(ig)=trv(id,iz,ig) + qr(id,iz,ig) = max(qr(id,iz,ig),1e-6) !cenlin, 11/4/2020 + qr_tmp(ig)=qr(id,iz,ig) + qr_tmp_old(ig)=qr(id,iz,ig) + + if(ig.le.4) then + + cs(ig)=csa(ig) + alagr(ig)=ka(ig)/csa(ig) + + else + + + if (ig.gt.5) then + qr_m=(qr(id,iz,ig)*dzgr_u(ig-1)+qr(id,iz,ig-1)*dzgr_u(ig))/(dzgr_u(ig)+dzgr_u(ig-1)) + else + qr_m=qr(id,iz,ig) + endif + cs(ig)=(1-qr_m)*cd(ig)+qr_m*cw + s(ig)=smax(ig)*(qrmax(ig)/qr_m)**b(ig) + k(ig)=kmax(ig)*(qr_m/qrmax(ig))**(2*b(ig)+3) + d(ig)=-b(ig)*kmax(ig)*smax(ig)*((qr_m/qrmax(ig))**(b(ig)+3))/qr_m + if (log10(abs(s(ig))).le.5.1) then + alagr(ig)=exp(-(log10(abs(s(ig)))+2.7))*4.186e2/cs(ig) + endif + if (log10(abs(s(ig))).gt.5.1) then + alagr(ig)=0.00041*4.186e2/cs(ig) + endif + + endif + + end do + hfgroof(id,iz)=(alar/csr+alagr(1))*(tr_tmp(1)-tr(id,iz,5))/(dzr+dzgr_u(1)) + + call soil_temp_veg(hfgroof(id,iz),ngr_u,dzgr_u,tr_tmp,ptrv(id,iz),alagr,cs, & + rsr,rl,pr(iz), & + dt,em_gr(1),alb_gr(1), & + rtr(id,iz),sfrv(id,iz),lfrv(id,iz),gfr(id,iz),pv_frac_roof,tpvlev(id,iz)) + do ig=1,ngr_u + trv(id,iz,ig)=tr_tmp(ig) + end do + drain(id,iz)=kmax(5)*(qr(id,iz,5)/qrmax(5))**(2*b(5)+3) + call soil_moist(ngr_u,dzgr_u,qr_tmp,dt,lfrv(id,iz),d,k,rainbl,drain(id,iz),irri_now) + + + do ig=1,ngr_u + ! qr(id,iz,ig)=min(qr_tmp(ig),qrmax(ig)) + qr(id,iz,ig)=max(min(qr_tmp(ig),qrmax(ig)),1e-6) !cenlin,11/4/2020 + end do + + end do !id + end do !iz + + return + end subroutine roof_temp_veg + +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + subroutine buildings(iurb,nd,nz,z0,cdrag,ua_u,va_u,pt_u,pt0_u, & + ptg,ptr,ptrv,da_u,qv_u,pr_u,tmp_u,ptw,ptwin,pwin, & + drst,uva_u,vva_u,uvb_u,vvb_u, & tva_u,tvb_u,evb_u,qvb_u,qhb_u, & - uhb_u,vhb_u,thb_u,ehb_u,ss,dt,sfw,sfg,sfr, & - sfwin,pb,bs_u,dz_u,sflev,lflev,sfvlev,lfvlev,tvb_ac) + uhb_u,vhb_u,thb_u,ehb_u,ss,dt,sfw,sfg,sfr,sfrpv,sfrv,lfrv, & + dgr,dg,lfr,lfg, & + sfwin,pb,bs_u,dz_u,sflev,lflev,sfvlev,lfvlev,tvb_ac,ix,iy,rsg,rs,qr,gr_frac_roof, & + pv_frac_roof,gr_flag,gr_type) ! ---------------------------------------------------------------------- ! This routine computes the sources or sinks of the different quantities @@ -2296,23 +2613,34 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & ! INPUT: ! ---------------------------------------------------------------------- integer nd ! Number of street direction for the current urban class + integer ix,iy integer nz ! number of vertical space steps real ua_u(nz_um) ! Wind speed in the x direction on the urban grid real va_u(nz_um) ! Wind speed in the y direction on the urban grid real da_u(nz_um) ! air density on the urban grid + real qv_u(nz_um) ! specific humidity on the urban grid + real pr_u(nz_um) ! pressure on the urban grid + real tmp_u(nz_um) ! temperaure on the urban grid real drst(ndm) ! Street directions for the current urban class real dz real pt_u(nz_um) ! Potential temperature on the urban grid real pt0_u(nz_um) ! reference potential temperature on the urban grid real ptg(ndm) ! Ground potential temperatures real ptr(ndm,nz_um) ! Roof potential temperatures + real ptrv(ndm,nz_um) ! Green Roof potential temperatures real ptw(2*ndm,nz_um,nbui_max) ! Walls potential temperatures real ss(nz_um) ! probability to have a building with height h real pb(nz_um) + real cdrag(nz_um) real z0(ndm,nz_um) ! Roughness lengths "profiles" real dt ! time step integer iurb !Urban class - + real rsg(ndm) ! Solar Radiation + real rs ! Solar Radiation + real qr(ndm,nz_um,ngr_u) ! Ground Soil Moisture + real trv(ndm,nz_um,ngr_u) ! Ground Soil Moisture + real roof_frac + real road_frac ! !New variables (BEM) ! @@ -2327,6 +2655,10 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & real ptwin(2*ndm,nz_um,nbui_max) ! window potential temperature real pwin real tvb_ac(2*ndm,nz_um) + real gr_frac_roof + real pv_frac_roof + integer gr_flag,gr_type + ! ---------------------------------------------------------------------- ! OUTPUT: ! ---------------------------------------------------------------------- @@ -2346,11 +2678,22 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & real tvb_u(2*ndm,nz_um) ! Temperature Vertical surfaces, B (explicit) term real ehb_u(ndm,nz_um) ! Energy (TKE) Horizontal surfaces, B (explicit) term real evb_u(2*ndm,nz_um) ! Energy (TKE) Vertical surfaces, B (explicit) term + real uhb(2*ndm,nz_um) + real vhb(2*ndm,nz_um) + real ehb(2*ndm,nz_um) real sfw(2*ndm,nz_um,nbui_max) ! sensible heat flux from walls real sfwin(2*ndm,nz_um,nbui_max) ! sensible heat flux form windows real sfr(ndm,nz_um) ! sensible heat flux from roof + real sfrv(ndm,nz_um) ! sensible heat flux from roof + real lfrv(ndm,nz_um) ! Latent heat flux from roof + real dgr(ndm,nz_um) ! sensible heat flux from roof + real dg(ndm) + real lfr(ndm,nz_um) ! Latent heat flux from roof + real lfg(ndm) ! Latent heat flux from street + real sfrpv(ndm,nz_um) ! sensible heat flux from PV panels real sfg(ndm) ! sensible heat flux from street + ! ---------------------------------------------------------------------- ! LOCAL: ! ---------------------------------------------------------------------- @@ -2361,9 +2704,22 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & real vvb_tmp real evb_tmp integer nlev(nz_um) - integer id,iz,ibui,nbui - -! ---------------------------------------------------------------------- + integer id,iz,ibui,nbui,il + real wfg !Ground water pool fraction + real wfr !Roof water pool fraction + real uhbv(2*ndm,nz_um) + real vhbv(2*ndm,nz_um) + real ehbv(2*ndm,nz_um) + real z0v !Vegetation roughness + parameter(z0v=0.01) + real resg + real rsveg + real f1,f2,f3,f4 + integer rsv(2) + real qr_tmp(ngr_u) + data rsv /0,1/ + real fh,ric,utot +!------------------------------------------------------------------ ! END VARIABLES DEFINITIONS ! ---------------------------------------------------------------------- dz=dz_u @@ -2385,9 +2741,17 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & evb_u=0. qvb_u=0. qhb_u=0. + + uhb=0. + vhb=0. + ehb=0. + uhbv=0. + vhbv=0. + ehbv=0. + do iz=1,nz_um - if(ss(iz).gt.0) then + if(ss(iz).gt.0)then ibui=ibui+1 d_urb(ibui)=ss(iz) nlev(ibui)=iz-1 @@ -2395,31 +2759,70 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & endif enddo - do id=1,nd - ! Calculation at the ground surfaces - - call flux_flat(dz,z0(id,1),ua_u(1),va_u(1),pt_u(1),pt0_u(1), & - ptg(id),uhb_u(id,1), & - vhb_u(id,1),sfg(id),ehb_u(id,1),da_u(1)) - thb_u(id,1)=- sfg(id)/(da_u(1)*cp_u) - -! Calculation at the roof surfaces - + do id=1,nd + + call flux_flat(dz,z0(id,1),ua_u(1),va_u(1),pt_u(1),pt0_u(1), & + ptg(id),qv_u(1),uhb(id,1), & + vhb(id,1),sfg(id),lfg(id),ehb(id,1),da_u(1),pr_u(1)) + if(dg(id).gt.0)then + wfg=dg(id)/dgmax + lfg(id)=-da_u(1)*latent*(-(wfg*lfg(id))/(da_u(1)*latent)) + else + qhb_u(id,1)=0. + lfg(id)=0. + endif + thb_u(id,1)=-(sfg(id))/(da_u(1)*cp_u) + vhb_u(id,1)=vhb(id,1) + uhb_u(id,1)=uhb(id,1) + ehb_u(id,1)=ehb(id,1) + qhb_u(id,1)=-lfg(id)/(da_u(1)*latent) do iz=2,nz if(ss(iz).gt.0)then - call flux_flat(dz,z0(id,iz),ua_u(iz), & - va_u(iz),pt_u(iz),pt0_u(iz), & - ptr(id,iz),uhb_u(id,iz), & - vhb_u(id,iz),sfr(id,iz),ehb_u(id,iz),da_u(iz)) - thb_u(id,iz)=- sfr(id,iz)/(da_u(iz)*cp_u) + + call flux_flat(dz,z0(id,iz),ua_u(iz),& + va_u(iz),pt_u(iz),pt0_u(iz), & + ptr(id,iz),qv_u(iz),uhb(id,iz), & + vhb(id,iz),sfr(id,iz),lfr(id,iz),ehb(id,iz),da_u(iz),pr_u(iz)) + if(dgr(id,iz).gt.0)then + wfr=dgr(id,iz)/drmax + lfr(id,iz)=-da_u(iz)*latent*(-(wfr*lfr(id,iz))/(da_u(iz)*latent)) + else + lfr(id,iz)=0. + endif + if(gr_flag.eq.1.and.gr_frac_roof.gt.0.)then + do il=1,ngr_u + qr_tmp(il)=qr(id,iz,il) + enddo + call flux_flat_roof(dz,z0v,ua_u(iz),va_u(iz),pt_u(iz),pt0_u(iz), & + ptrv(id,iz),uhbv(id,iz), & + vhbv(id,iz),sfrv(id,iz),lfrv(id,iz),ehbv(id,iz),da_u(iz),qv_u(iz),pr_u(iz),rs,qr_tmp,resg,rsveg,f1,f2,f3,f4,gr_type,pv_frac_roof) + sfr(id,iz)=sfr(id,iz)+pv_frac_roof*sfrpv(id,iz) + thb_u(id,iz)=-((1.-gr_frac_roof)*sfr(id,iz)+gr_frac_roof*sfrv(id,iz))/(da_u(iz)*cp_u) + vhb_u(id,iz)=(1.-gr_frac_roof)*vhb(id,iz)+gr_frac_roof*vhbv(id,iz) + uhb_u(id,iz)=(1.-gr_frac_roof)*uhb(id,iz)+gr_frac_roof*uhbv(id,iz) + ehb_u(id,iz)=(1.-gr_frac_roof)*ehb(id,iz)+gr_frac_roof*ehbv(id,iz) + qhb_u(id,iz)=-(gr_frac_roof*lfrv(id,iz)+(1.-gr_frac_roof)*lfr(id,iz))/(da_u(iz)*latent) + sfr(id,iz)=sfr(id,iz)-pv_frac_roof*sfrpv(id,iz) + else + sfr(id,iz)=sfr(id,iz)+pv_frac_roof*sfrpv(id,iz) + thb_u(id,iz)=-sfr(id,iz)/(da_u(iz)*cp_u) + vhb_u(id,iz)=vhb(id,iz) + uhb_u(id,iz)=uhb(id,iz) + ehb_u(id,iz)=ehb(id,iz) + qhb_u(id,iz)=-lfr(id,iz)/(da_u(iz)*latent) + sfr(id,iz)=sfr(id,iz)-pv_frac_roof*sfrpv(id,iz) + endif else uhb_u(id,iz) = 0.0 vhb_u(id,iz) = 0.0 thb_u(id,iz) = 0.0 ehb_u(id,iz) = 0.0 + qhb_u(id,iz) = 0.0 endif - end do + enddo + + ! Calculation at the wall surfaces @@ -2431,7 +2834,7 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & uva_tmp,vva_tmp, & uvb_tmp,vvb_tmp, & sfw(2*id-1,iz,ibui),sfwin(2*id-1,iz,ibui), & - evb_tmp,drst(id),dt) + evb_tmp,drst(id),dt,cdrag(iz)) if (pb(iz+1).gt.0.) then @@ -2456,7 +2859,7 @@ subroutine buildings(iurb,nd,nz,z0,ua_u,va_u,pt_u,pt0_u, & uva_tmp,vva_tmp, & uvb_tmp,vvb_tmp, & sfw(2*id,iz,ibui),sfwin(2*id,iz,ibui), & - evb_tmp,drst(id),dt) + evb_tmp,drst(id),dt,cdrag(iz)) if (pb(iz+1).gt.0.) then @@ -2797,7 +3200,7 @@ end subroutine interp_length ! ===6=8===============================================================72 subroutine shadow_mas(nd,nz_u,zr,deltar,ah,drst,ws,ss,pb,z, & - rs,rsw,rsg) + swddir,rsw,rsg,xlat) ! ---------------------------------------------------------------------- ! Modification of short wave radiation to take into account @@ -2814,13 +3217,14 @@ subroutine shadow_mas(nd,nz_u,zr,deltar,ah,drst,ws,ss,pb,z, & real ah ! Hour angle (it should come from the radiation routine) real deltar ! Declination of the sun real drst(ndm) ! street directions for the current urban class - real rs ! solar radiation + real swddir ! solar radiation real ss(nz_um) ! probability to have a building with height h real pb(nz_um) ! Probability that a building has an height greater or equal to h real ws(ndm) ! Street width of the current urban class real z(nz_um) ! Height of the urban grid levels real zr ! zenith angle - + real xlat + real xlat_r ! ---------------------------------------------------------------------- ! OUTPUT: ! ---------------------------------------------------------------------- @@ -2837,23 +3241,29 @@ subroutine shadow_mas(nd,nz_u,zr,deltar,ah,drst,ws,ss,pb,z, & ! END VARIABLES DEFINITIONS ! ---------------------------------------------------------------------- - if(rs.eq.0.or.sin(zr).eq.1)then - do id=1,nd - rsg(id)=0. - do iz=1,nz_u + xlat_r=xlat*pi/180 + + if(swddir.eq.0.or.sin(zr).eq.1)then + do id=1,nd + rsg(id)=0. + do iz=1,nz_u rsw(2*id-1,iz)=0. rsw(2*id,iz)=0. enddo enddo - else + else !test - if(abs(sin(zr)).gt.1.e-10)then + + if(abs(sin(zr)).gt.1.e-10)then if(cos(deltar)*sin(ah)/sin(zr).ge.1)then bbb=pi/2. elseif(cos(deltar)*sin(ah)/sin(zr).le.-1)then bbb=-pi/2. else - bbb=asin(cos(deltar)*sin(ah)/sin(zr)) + bbb=asin(cos(deltar)*sin(ah)/sin(zr)) ! + if(sin(deltar).lt.(cos(zr)*sin(xlat_r)))then ! + bbb=pi-bbb ! + endif endif else if(cos(deltar)*sin(ah).ge.0)then @@ -2862,58 +3272,63 @@ subroutine shadow_mas(nd,nz_u,zr,deltar,ah,drst,ws,ss,pb,z, & bbb=-pi/2. endif endif - - phix=zr + phix=zr do id=1,nd - + rsg(id)=0. - + aae=bbb-drst(id) aaw=bbb-drst(id)+pi - + do iz=1,nz_u rsw(2*id-1,iz)=0. - rsw(2*id,iz)=0. - if(pb(iz+1).gt.0.)then - do jz=1,nz_u + rsw(2*id,iz)=0. + if(pb(iz+1).gt.0.)then + do jz=1,nz_u if(abs(sin(aae)).gt.1.e-10)then - call shade_wall(z(iz),z(iz+1),z(jz+1),phix,aae, & - ws(id),rd) - rsw(2*id-1,iz)=rsw(2*id-1,iz)+rs*rd*ss(jz+1)/pb(iz+1) + call shade_wall(z(iz),z(iz+1),z(jz+1),phix,aae, & + ws(id),rd) + rsw(2*id-1,iz)=rsw(2*id-1,iz)+swddir*rd*ss(jz+1)/pb(iz+1) endif - + if(abs(sin(aaw)).gt.1.e-10)then - call shade_wall(z(iz),z(iz+1),z(jz+1),phix,aaw, & + call shade_wall(z(iz),z(iz+1),z(jz+1),phix,aaw, & ws(id),rd) - rsw(2*id,iz)=rsw(2*id,iz)+rs*rd*ss(jz+1)/pb(iz+1) + rsw(2*id,iz)=rsw(2*id,iz)+swddir*rd*ss(jz+1)/pb(iz+1) endif - enddo - endif + enddo + endif enddo if(abs(sin(aae)).gt.1.e-10)then wsd=abs(ws(id)/sin(aae)) - - do jz=1,nz_u + + do jz=1,nz_u rd=max(0.,wsd-z(jz+1)*tan(phix)) - rsg(id)=rsg(id)+rs*rd*ss(jz+1)/wsd + rsg(id)=rsg(id)+swddir*rd*ss(jz+1)/wsd enddo rtot=0. - + do iz=1,nz_u rtot=rtot+(rsw(2*id,iz)+rsw(2*id-1,iz))* & (z(iz+1)-z(iz)) enddo rtot=rtot+rsg(id)*ws(id) else - rsg(id)=rs + rsg(id)=swddir endif + + enddo endif return end subroutine shadow_mas + + + + ! ===6=8===============================================================72 ! ===6=8===============================================================72 @@ -2974,7 +3389,7 @@ end subroutine shade_wall ! ===6=8===============================================================72 subroutine long_rad(iurb,nz_u,id,emw,emg,emwin,pwin,twlev,& - fwg,fww,fgw,fsw,fsg,tg,tw,rlg,rlw,rl,pb) + fwg,fww,fgw,fsw,fsg,tg_av,tw,rlg,rlw,rl,pb) ! ---------------------------------------------------------------------- ! This routine computes the effects of the reflections of long-wave @@ -3004,7 +3419,7 @@ subroutine long_rad(iurb,nz_u,id,emw,emg,emwin,pwin,twlev,& integer nz_u ! Number of layer in the urban grid real pb(nz_um) ! Probability to have a building with an height equal real rl ! Downward flux of the longwave radiation - real tg(ndm,ng_u) ! Temperature in each layer of the ground [K] + real tg_av(ndm) ! Temperature in each layer of the ground [K] real tw(2*ndm,nz_um) ! Temperature in each layer of the wall [K] ! !New Variables for BEM @@ -3050,7 +3465,7 @@ subroutine long_rad(iurb,nz_u,id,emw,emg,emwin,pwin,twlev,& !! aaa(i,2*nz_u+1)=-(1.-emg)*fgw(i,id,iurb)*pb(i+1) aaa(i,2*nz_u+1)=-(1.-emg)*fgw(i,id,iurb) - bbb(i)=fsw(i,id,iurb)*rl+emg*fgw(i,id,iurb)*sigma*tg(id,ng_u)**4 + bbb(i)=fsw(i,id,iurb)*rl+emg*fgw(i,id,iurb)*sigma*tg_av(id)**4 do j=1,nz_u bbb(i)=bbb(i)+pb(j+1)*sigma*fww(j,i,id,iurb)* & (emw*(1.-pwin)*tw(2*id,j)**4+emwin*pwin*twlev(2*id,j)**4)+ & @@ -3077,7 +3492,7 @@ subroutine long_rad(iurb,nz_u,id,emw,emg,emwin,pwin,twlev,& aaa(i,2*nz_u+1)=-(1.-emg)*fgw(i-nz_u,id,iurb) bbb(i)=fsw(i-nz_u,id,iurb)*rl+ & - emg*fgw(i-nz_u,id,iurb)*sigma*tg(id,ng_u)**4 + emg*fgw(i-nz_u,id,iurb)*sigma*tg_av(id)**4 do j=1,nz_u bbb(i)=bbb(i)+pb(j+1)*sigma*fww(j,i-nz_u,id,iurb)* & @@ -3129,8 +3544,9 @@ end subroutine long_rad ! ===6=8===============================================================72 ! ===6=8===============================================================72 - subroutine short_rad(iurb,nz_u,id,albw, & - albg,fwg,fww,fgw,rsg,rsw,pb) + + subroutine short_rad_dd(iurb,nz_u,id,albw, & + albg,rsdif,fwg,fww,fgw,fsw,fsg,rsg,rsw,pb) ! ---------------------------------------------------------------------- ! This routine computes the effects of the reflections of short-wave @@ -3150,9 +3566,12 @@ subroutine short_rad(iurb,nz_u,id,albw, & ! ---------------------------------------------------------------------- real albg ! Albedo of the ground for the current urban class real albw ! Albedo of the wall for the current urban class + real rsdif ! diffused short wave radiation real fgw(nz_um,ndm,nurbm) ! View factors from ground to wall real fwg(nz_um,ndm,nurbm) ! View factors from wall to ground real fww(nz_um,nz_um,ndm,nurbm) ! View factors from wall to wall + real fsg(ndm,nurbm) ! View factors from sky to ground + real fsw(nz_um,ndm,nurbm) ! View factors from sky to wall integer id ! current street direction integer iurb ! current urban class integer nz_u ! Number of layer in the urban grid @@ -3178,67 +3597,69 @@ subroutine short_rad(iurb,nz_u,id,albw, & ! west wall - do i=1,nz_u + + do i=1,nz_u do j=1,nz_u aaa(i,j)=0. enddo - - aaa(i,i)=1. - + + aaa(i,i)=1. + do j=nz_u+1,2*nz_u aaa(i,j)=-albw*fww(j-nz_u,i,id,iurb)*pb(j-nz_u+1) enddo - + aaa(i,2*nz_u+1)=-albg*fgw(i,id,iurb) - bbb(i)=rsw(2*id-1,i) - + bbb(i)=rsw(2*id-1,i)+fsw(i,id,iurb)*rsdif + enddo - + ! east wall - - do i=1+nz_u,2*nz_u + do i=1+nz_u,2*nz_u do j=1,nz_u aaa(i,j)=-albw*fww(j,i-nz_u,id,iurb)*pb(j+1) enddo - + do j=1+nz_u,2*nz_u aaa(i,j)=0. enddo - + aaa(i,i)=1. aaa(i,2*nz_u+1)=-albg*fgw(i-nz_u,id,iurb) - bbb(i)=rsw(2*id,i-nz_u) - + bbb(i)=rsw(2*id,i-nz_u)+fsw(i-nz_u,id,iurb)*rsdif + enddo -! ground +! ground do j=1,nz_u aaa(2*nz_u+1,j)=-albw*fwg(j,id,iurb)*pb(j+1) enddo - + do j=nz_u+1,2*nz_u aaa(2*nz_u+1,j)=-albw*fwg(j-nz_u,id,iurb)*pb(j-nz_u+1) enddo - + aaa(2*nz_u+1,2*nz_u+1)=1. - bbb(2*nz_u+1)=rsg(id) - + bbb(2*nz_u+1)=rsg(id)+fsg(id,iurb)*rsdif + call gaussj(aaa,2*nz_u+1,bbb,2*nz_um+1) do i=1,nz_u rsw(2*id-1,i)=bbb(i) enddo - + do i=nz_u+1,2*nz_u - rsw(2*id,i-nz_u)=bbb(i) + rsw(2*id,i-nz_u)=bbb(i) enddo - + rsg(id)=bbb(2*nz_u+1) + return - end subroutine short_rad - + end subroutine short_rad_dd + + ! ===6=8===============================================================72 ! ===6=8===============================================================72 @@ -3298,7 +3719,7 @@ subroutine gaussj(a,n,b,np) icol=k endif elseif(ipiv(k).gt.1)then - FATAL_ERROR('singular matrix in gaussj') + CALL wrf_error_fatal('singular matrix in gaussj') endif enddo endif @@ -3319,8 +3740,8 @@ subroutine gaussj(a,n,b,np) endif - if(a(icol,icol).eq.0) FATAL_ERROR('singular matrix in gaussj') - + if(a(icol,icol).eq.0) CALL wrf_error_fatal('singular matrix in gaussj') + pivinv=1./a(icol,icol) a(icol,icol)=1 @@ -3346,12 +3767,101 @@ subroutine gaussj(a,n,b,np) return end subroutine gaussj + + + +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + subroutine soil_moist(nz,dz,qv,dt,lf,d,k,rainbl,drain,irri_now) + +! ---------------------------------------------------------------------- +! This routine solves the Fourier diffusion equation for heat in +! the material (wall, roof, or ground). Resolution is done implicitely. +! Boundary conditions are: +! - fixed temperature at the interior +! - energy budget at the surface +! ---------------------------------------------------------------------- + + implicit none + + + +! ---------------------------------------------------------------------- +! INPUT: +! ---------------------------------------------------------------------- + integer nz ! Number of layers + real dt ! Time step + real lf ! Latent heat flux at the surface + real qv(nz) ! Moisture in each layer [K] + real dz(nz) ! Layer sizes [m] + real rainbl ! Rainfall [mm] + real d(nz) ! Soil water diffusivity + real k(nz) ! Hydraulic conductivity + real gr ! Dummy variable + real drain + real irri_now +! ---------------------------------------------------------------------- +! OUTPUT: +! ---------------------------------------------------------------------- + + +! ---------------------------------------------------------------------- +! LOCAL: +! ---------------------------------------------------------------------- + integer iz + real a(nz,3) + real alpha + real c(nz) + real cddz(nz+2) + real dw !water density Kg/m3 + parameter(dw=1000.) +!---------------------------------------------------------------------- +! END VARIABLES DEFINITIONS +! ---------------------------------------------------------------------- + + alpha=rainbl/(dw*dt)+lf/latent/dw+irri_now/dw + cddz(1)=0. + do iz=2,nz + cddz(iz)=2.*d(iz)/(dz(iz)+dz(iz-1)) + enddo + do iz=1,4 + a(iz,1)=0. + a(iz,2)=1. + a(iz,3)=0. + c(iz)=qv(iz) + enddo + do iz=6,nz-1 + a(iz,1)=-cddz(iz)*dt/dz(iz) + a(iz,2)=1.+dt*(cddz(iz)+cddz(iz+1))/dz(iz) + a(iz,3)=-cddz(iz+1)*dt/dz(iz) + c(iz)=qv(iz)+dt*(k(iz+1)-k(iz))/dz(iz) + enddo + a(5,1)=0. + a(5,2)=1.+dt*(cddz(5+1))/dz(5) + a(5,3)=-cddz(5+1)*dt/dz(5) + c(5)=qv(5)+dt*(k(5+1)-drain)/dz(5) + + + a(nz,1)=-dt*cddz(nz)/dz(nz) + a(nz,2)=1.+dt*cddz(nz)/dz(nz) + a(nz,3)=0. + c(nz)=qv(nz)+dt*alpha/dz(nz)-dt*k(nz-1)/dz(nz) + + call invert(nz,a,c,qv) + + return + end subroutine soil_moist +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + ! ===6=8===============================================================72 ! ===6=8===============================================================72 - subroutine soil_temp(nz,dz,temp,pt,ala,cs, & - rs,rl,press,dt,em,alb,rt,sf,gf) + subroutine soil_temp_veg(heflro,nz,dz,temp,pt,ala,cs, & + rs,rl,press,dt,em,alb,rt,sf,lf,gf,pv_frac_roof,tpv) ! ---------------------------------------------------------------------- ! This routine solves the Fourier diffusion equation for heat in @@ -3378,10 +3888,14 @@ subroutine soil_temp(nz,dz,temp,pt,ala,cs, & real rl ! Downward flux of the longwave radiation real rs ! Solar radiation real sf ! Sensible heat flux at the surface + real lf ! Latent heat flux at the surface real temp(nz) ! Temperature in each layer [K] real dz(nz) ! Layer sizes [m] - - + real heflro ! Heat flux between roof and green roof + real rs_eff + real rl_eff + real tpv + real pv_frac_roof ! ---------------------------------------------------------------------- ! OUTPUT: ! ---------------------------------------------------------------------- @@ -3402,50 +3916,140 @@ subroutine soil_temp(nz,dz,temp,pt,ala,cs, & ! ---------------------------------------------------------------------- ! END VARIABLES DEFINITIONS ! ---------------------------------------------------------------------- - + if(pv_frac_roof.gt.0)then + rl_eff=(1-pv_frac_roof)*em*rl+em*sigma*tpv**4*pv_frac_roof + rs_eff=(1.-pv_frac_roof)*rs + else + rl_eff=em*rl + rs_eff=rs + endif tsig=temp(nz) - alpha=(1.-alb)*rs+em*rl-em*sigma*(tsig**4)+sf -! Compute cddz=2*cd/dz - + alpha=(1.-alb)*rs_eff+rl_eff-em*sigma*(tsig**4)+sf+lf cddz(1)=ala(1)/dz(1) do iz=2,nz cddz(iz)=2.*ala(iz)/(dz(iz)+dz(iz-1)) enddo -! cddz(nz+1)=ala(nz+1)/dz(nz) - + a(1,1)=0. a(1,2)=1. a(1,3)=0. - c(1)=temp(1) - + c(1)=temp(1)-heflro*dt/dz(1) do iz=2,nz-1 a(iz,1)=-cddz(iz)*dt/dz(iz) - a(iz,2)=1+dt*(cddz(iz)+cddz(iz+1))/dz(iz) + a(iz,2)=1.+dt*(cddz(iz)+cddz(iz+1))/dz(iz) a(iz,3)=-cddz(iz+1)*dt/dz(iz) c(iz)=temp(iz) enddo - a(nz,1)=-dt*cddz(nz)/dz(nz) a(nz,2)=1.+dt*cddz(nz)/dz(nz) a(nz,3)=0. - c(nz)=temp(nz)+dt*alpha/cs(nz)/dz(nz) - + c(nz)=temp(nz)+dt*alpha/cs(nz)/dz(nz) + + call invert(nz,a,c,temp) + + pt=temp(nz)*(press/1.e+5)**(-rcp_u) + + rt=(1.-alb)*rs_eff+rl_eff-em*sigma*(tsig**4.) + + gf=(1.-alb)*rs_eff+rl_eff-em*sigma*(tsig**4.)+sf + return + end subroutine soil_temp_veg + +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + subroutine soil_temp(nz,dz,temp,pt,ala,cs, & + rs,rl,press,dt,em,alb,rt,sf,lf,gf) + +! ---------------------------------------------------------------------- +! This routine solves the Fourier diffusion equation for heat in +! the material (wall, roof, or ground). Resolution is done implicitely. +! Boundary conditions are: +! - fixed temperature at the interior +! - energy budget at the surface +! ---------------------------------------------------------------------- + + implicit none + + + +! ---------------------------------------------------------------------- +! INPUT: +! ---------------------------------------------------------------------- + integer nz ! Number of layers + real ala(nz) ! Thermal diffusivity in each layers [m^2 s^-1] + real alb ! Albedo of the surface + real cs(nz) ! Specific heat of the material [J m^3 K^-1] + real dt ! Time step + real em ! Emissivity of the surface + real press ! Pressure at ground level + real rl ! Downward flux of the longwave radiation + real rs ! Solar radiation + real sf ! Sensible heat flux at the surface + real lf ! Latent heat flux at the surface + real temp(nz) ! Temperature in each layer [K] + real dz(nz) ! Layer sizes [m] + +! ---------------------------------------------------------------------- +! OUTPUT: +! ---------------------------------------------------------------------- + real gf ! Heat flux transferred from the surface toward the interior + real pt ! Potential temperature at the surface + real rt ! Total radiation at the surface (solar+incoming long+outgoing long) + +! ---------------------------------------------------------------------- +! LOCAL: +! ---------------------------------------------------------------------- + integer iz + real a(nz,3) + real alpha + real c(nz) + real cddz(nz+2) + real tsig + +! ---------------------------------------------------------------------- +! END VARIABLES DEFINITIONS +! ---------------------------------------------------------------------- + + tsig=temp(nz) + alpha=(1.-alb)*rs+em*rl-em*sigma*(tsig**4)+sf+lf +! Compute cddz=2*cd/dz + cddz(1)=ala(1)/dz(1) + do iz=2,nz + cddz(iz)=2.*ala(iz)/(dz(iz)+dz(iz-1)) + enddo + + a(1,1)=0. + a(1,2)=1. + a(1,3)=0. + c(1)=temp(1) + do iz=2,nz-1 + a(iz,1)=-cddz(iz)*dt/dz(iz) + a(iz,2)=1.+dt*(cddz(iz)+cddz(iz+1))/dz(iz) + a(iz,3)=-cddz(iz+1)*dt/dz(iz) + c(iz)=temp(iz) + enddo + a(nz,1)=-dt*cddz(nz)/dz(nz) + a(nz,2)=1.+dt*cddz(nz)/dz(nz) + a(nz,3)=0. + c(nz)=temp(nz)+dt*alpha/cs(nz)/dz(nz) + call invert(nz,a,c,temp) - pt=temp(nz)*(press/1.e+5)**(-rcp_u) - rt=(1.-alb)*rs+em*rl-em*sigma*(tsig**4) + rt=(1.-alb)*rs+em*rl-em*sigma*(tsig**4.) -! gf=-cddz(nz)*(temp(nz)-temp(nz-1))*cs(nz) - gf=(1.-alb)*rs+em*rl-em*sigma*(tsig**4)+sf + gf=(1.-alb)*rs+em*rl-em*sigma*(tsig**4.)+sf return end subroutine soil_temp + ! ===6=8===============================================================72 ! ===6=8===============================================================72 + subroutine invert(n,a,c,x) ! ---------------------------------------------------------------------- @@ -3499,7 +4103,7 @@ end subroutine invert ! ===6=8===============================================================72 subroutine flux_wall(ua,va,pt,da,ptw,ptwin,uva,vva,uvb,vvb, & - sfw,sfwin,evb,drst,dt) + sfw,sfwin,evb,drst,dt,cdrag) ! ---------------------------------------------------------------------- ! This routine computes the surface sources or sinks of momentum, tke, @@ -3517,7 +4121,7 @@ subroutine flux_wall(ua,va,pt,da,ptw,ptwin,uva,vva,uvb,vvb, & real ua ! wind speed real va ! wind speed real dt !time step - + real cdrag ! OUTPUT: ! ------ ! Explicit and implicit component of the momentum, temperature and TKE sources or sinks on @@ -3594,8 +4198,8 @@ end subroutine flux_wall ! ===6=8===============================================================72 ! ===6=8===============================================================72 - subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg, & - uhb,vhb,sf,ehb,da) + subroutine flux_flat_ground(dz,z0,ua,va,pt,pt0,ptg, & + uhb,vhb,sf,ehb,da,qv,pr,rsg,qg,resg,rsveg,f1,f2,f3,f4,fh,ric,utot,gr_type) ! ---------------------------------------------------------------------- ! Calculation of the flux at the ground @@ -3612,7 +4216,11 @@ subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg, & real va ! wind speed real z0 ! Roughness length real da ! air density - + real qv ! specific humidity + real pr ! pressure + real rsg ! solar radiation + real qg(ng_u) ! Ground Soil Moisture + ! ---------------------------------------------------------------------- @@ -3629,12 +4237,13 @@ subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg, & real tvb ! Temperature Vertical surfaces, B (explicit) term real ehb ! Energy (TKE) Horizontal surfaces, B (explicit) term real sf - + real lf ! ---------------------------------------------------------------------- ! LOCAL: ! ---------------------------------------------------------------------- - real aa + real aa,ah + real z0t real al real buu real c @@ -3644,22 +4253,58 @@ subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg, & real fm real ric real tstar + real qstar real ustar real utot real wstar real zz - + real qvsg,qvs,es,esa,fbqq real b,cm,ch,rr,tol parameter(b=9.4,cm=7.4,ch=5.3,rr=0.74,tol=.001) + real f + real f1 + real f2 + real f3 + real f4 + real ta ! surface air temperature + real tmp ! ground temperature + real rsveg ! Stomatal resistance + real resg + real lai ! leaf area index + real sdlim ! radiation limit at which photosyntesis start W/m2 + parameter(sdlim=100.) + real rsmin ! Minimum stomatal resistance + real rsmax ! Maximun stomatal resistance + real qw + parameter(qw=0.06) + real qref + parameter(qref=0.37) + real hs + parameter(hs=36.35) + + real dzg_u(ng_u) ! Layer sizes in the ground + + data dzg_u /0.2,0.12,0.08,0.05,0.03,0.02,0.02,0.01,0.005,0.0025/ + + real gx,iz,dzg_tot + integer gr_type ! ---------------------------------------------------------------------- ! END VARIABLES DEFINITIONS ! ---------------------------------------------------------------------- - - + z0t=z0/10. + if(gr_type.eq.1)then + rsmin=40. + rsmax=5000. + lai=2. + elseif(gr_type.eq.2)then + rsmin=150. + rsmax=5000. + lai=3. + endif ! computation of the ground temperature - utot=(ua**2+va**2)**.5 + utot=(ua**2.+va**2.)**.5 !!!! Louis formulation @@ -3681,24 +4326,59 @@ subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg, & ric=2.*g_u*zz*(pt-ptg)/((pt+ptg)*(utot**2)) aa=vk/log(zz/z0) + ah=vk/log(zz/z0t) ! determine the parameters fm and fh for stable, neutral and unstable conditions if(ric.gt.0)then - fm=1/(1+0.5*b*ric)**2 + fm=1/(1+0.5*b*ric)**2. fh=fm else c=b*cm*aa*aa*(zz/z0)**.5 fm=1-b*ric/(1+c*(-ric)**.5) + c=b*cm*aa*ah*(zz/z0t)**.5 c=c*ch/cm fh=1-b*ric/(1+c*(-ric)**.5) endif fbuw=-aa*aa*utot*utot*fm - fbpt=-aa*aa*utot*(pt-ptg)*fh/rr - + fbpt=-aa*ah*utot*(pt-ptg)*fh/rr + tmp=ptg*(pr/p0)**(rcp_u)-273.15 + es=6.11*(10.**(tmp*7.5/(237.7+tmp))) + qvsg=0.62197*es/(0.01*pr-0.378*es) + + + f=0.55*rsg/sdlim*2./lai + + f1=(f+rsmin/rsmax)/(1.+f) + + ta=pt*(pr/p0)**(rcp_u)-273.15 + esa=6.11*(10**(ta*7.5/(237.7+ta))) + qvs=0.62197*esa/(0.01*pr-0.378*esa) + + f2= 1./(1.+hs*(qvs-qv)) + f3=1.-0.0016*(25.-ta)**2. + f4=0. + dzg_tot=0. + do iz=1,ng_u + gx=(qg(iz)-qw)/(qref-qw) + if (gx.gt.1)gx=1. + if (gx.lt.0)gx=0. + f4=f4+gx*dzg_u(iz) + dzg_tot=dzg_tot+dzg_u(iz) + enddo + f4=f4/dzg_tot + + rsveg=min(rsmin/max(lai*f1*f2*f3*f4,1e-9),rsmax) + resg= rr/(aa*aa*utot*fh) + + + fbqq=-(qv-qvsg)/(resg+rsveg) + + ustar=(-fbuw)**.5 tstar=-fbpt/ustar + qstar=-fbqq/ustar al=(vk*g_u*tstar)/(pt*ustar*ustar) @@ -3707,20 +4387,337 @@ subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg, & uhb=-ustar*ustar*ua/utot vhb=-ustar*ustar*va/utot sf= ustar*tstar*da*cp_u + lf= ustar*qstar*da*latent ! thb= 0. ehb=buu !!!!!!!!!!!!!!! return - end subroutine flux_flat + end subroutine flux_flat_ground ! ===6=8===============================================================72 ! ===6=8===============================================================72 + subroutine flux_flat_roof(dz,z0,ua,va,pt,pt0,ptg, & + uhb,vhb,sf,lf,ehb,da,qv,pr,rsg,qr,resg,rsveg,f1,f2,f3,f4,gr_type,pv_frac_roof) + +! ---------------------------------------------------------------------- +! Calculation of the flux at the ground +! Formulation of Louis (Louis, 1979) +! ---------------------------------------------------------------------- + + implicit none + + real dz ! first vertical level + real pt ! potential temperature + real pt0 ! reference potential temperature + real ptg ! ground potential temperature + real ua ! wind speed + real va ! wind speed + real z0 ! Roughness length + real da ! air density + real qv ! specific humidity + real pr ! pressure + real rsg ! solar radiation + real qr(ngr_u) ! Ground Soil Moisture + real pv_frac_roof + real rs_eff + +! ---------------------------------------------------------------------- +! OUTPUT: +! ---------------------------------------------------------------------- +! Explicit component of the momentum, temperature and TKE sources or sinks on horizontal +! surfaces (roofs and street) +! The fluxes can be computed as follow: Fluxes of X = B +! Example: Momentum fluxes on horizontal surfaces = uhb_u + real uhb ! U (wind component) Horizontal surfaces, B (explicit) term + real vhb ! V (wind component) Horizontal surfaces, B (explicit) term +! real thb ! Temperature Horizontal surfaces, B (explicit) term + real tva ! Temperature Vertical surfaces, A (implicit) term + real tvb ! Temperature Vertical surfaces, B (explicit) term + real ehb ! Energy (TKE) Horizontal surfaces, B (explicit) term + real sf + real lf - subroutine icBEP (nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) +! ---------------------------------------------------------------------- +! LOCAL: +! ---------------------------------------------------------------------- + real aa,ah + real al + real buu + real c + real fbuw + real fbpt + real fh + real fm + real ric + real tstar + real qstar + real ustar + real utot + real wstar + real zz + real z0t + real qvsg,qvs,es,esa,fbqq + real b,cm,ch,rr,tol + parameter(b=9.4,cm=7.4,ch=5.3,rr=0.74,tol=.001) - implicit none + real f + real f1 + real f2 + real f3 + real f4 + real ta ! surface air temperature + real tmp ! ground temperature + real rsveg ! Stomatal resistance + real resg + real lai ! leaft area index + real sdlim ! radiation limit at which photosyntesis start W/m2 + parameter(sdlim=100.) + real rsmin + real rsmax ! Maximun stomatal resistance + real qw ! Wilting point + parameter(qw=0.06) + real qref ! Field capacity + parameter(qref=0.37) + real hs + parameter(hs=36.35) + + real dzgr_u(ngr_u) ! Layer sizes in the ground + + data dzgr_u /0.1,0.003,0.06,0.003,0.05,0.04,0.02,0.0125,0.005,0.0025/ + + real gx,iz,dzgr_tot + integer gr_type +! ---------------------------------------------------------------------- +! END VARIABLES DEFINITIONS + +! ---------------------------------------------------------------------- + z0t=z0/10. + if(gr_type.eq.1)then + rsmin=40. + rsmax=5000. + lai=2. + elseif(gr_type.eq.2)then + rsmin=150. + rsmax=5000. + lai=3. + endif + rs_eff=(1-pv_frac_roof)*rsg +! computation of the ground temperature + + utot=(ua**2.+va**2.)**.5 + +!!!! Louis formulation +! +! compute the bulk Richardson Number + + zz=dz/2. + + + utot=max(utot,0.01) + + ric=2.*g_u*zz*(pt-ptg)/((pt+ptg)*(utot**2)) + + aa=vk/log(zz/z0) + ah=vk/log(zz/z0t) + + if(ric.gt.0.)then + fm=1./(1.+0.5*b*ric)**2. + fh=fm + else + c=b*cm*aa*aa*(zz/z0)**.5 + fm=1.-b*ric/(1.+c*(-ric)**.5) + c=b*cm*aa*ah*(zz/z0t)**.5 + c=c*ch/cm + fh=1.-b*ric/(1+c*(-ric)**.5) + endif + + fbuw=-aa*aa*utot*utot*fm + fbpt=-aa*ah*utot*(pt-ptg)*fh/rr + tmp=ptg*(pr/p0)**(rcp_u)-273.15 + es=6.11*(10.**(tmp*7.5/(237.7+tmp))) + qvsg=0.62197*es/(0.01*pr-0.378*es) + + + f=0.55*rs_eff/sdlim*2./lai + + f1=(f+rsmin/rsmax)/(1.+f) + + ta=pt*(pr/p0)**(rcp_u)-273.15 + esa=6.11*(10**(ta*7.5/(237.7+ta))) + qvs=0.62197*esa/(0.01*pr-0.378*esa) + + f2= 1./(1.+hs*(qvs-qv)) + f3=1.-0.0016*(25.-ta)**2. + f4=0. + dzgr_tot=0. + do iz=5,ngr_u + gx=(qr(iz)-qw)/(qref-qw) + if (gx.gt.1)gx=1. + if (gx.lt.0)gx=0. + f4=f4+gx*dzgr_u(iz) + dzgr_tot=dzgr_tot+dzgr_u(iz) + enddo + f4=f4/dzgr_tot + + rsveg=min(rsmin/max(lai*f1*f2*f3*f4,1e-9),rsmax) + + + resg= rr/(aa*aa*utot*fh) + + + fbqq=-(qv-qvsg)/(resg+rsveg) + + ustar=(-fbuw)**.5 + tstar=-fbpt/ustar + qstar=-fbqq/ustar + + al=(vk*g_u*tstar)/(pt*ustar*ustar) + + buu=-g_u/pt0*ustar*tstar + + uhb=-ustar*ustar*ua/utot + vhb=-ustar*ustar*va/utot + sf= ustar*tstar*da*cp_u + lf= ustar*qstar*da*latent + + ehb=buu + end subroutine flux_flat_roof + +!!!!!!!=============================== + +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + subroutine flux_flat(dz,z0,ua,va,pt,pt0,ptg,qv, & + uhb,vhb,sf,lf,ehb,da,pr) + +! ---------------------------------------------------------------------- +! Calculation of the flux at the ground +! Formulation of Louis (Louis, 1979) +! ---------------------------------------------------------------------- + + implicit none + real pr + real dz ! first vertical level + real pt ! potential temperature + real pt0 ! reference potential temperature + real ptg ! ground potential temperature + real ua ! wind speed + real va ! wind speed + real z0 ! Roughness length + real da ! air density + real qv +! ---------------------------------------------------------------------- +! OUTPUT: +! ---------------------------------------------------------------------- +! Explicit component of the momentum, temperature and TKE sources or sinks on horizontal +! surfaces (roofs and street) +! The fluxes can be computed as follow: Fluxes of X = B +! Example: Momentum fluxes on horizontal surfaces = uhb_u + real uhb ! U (wind component) Horizontal surfaces, B (explicit) term + real vhb ! V (wind component) Horizontal surfaces, B (explicit) term +! real thb ! Temperature Horizontal surfaces, B (explicit) term + real tva ! Temperature Vertical surfaces, A (implicit) term + real tvb ! Temperature Vertical surfaces, B (explicit) term + real ehb ! Energy (TKE) Horizontal surfaces, B (explicit) term + real sf + real lf + +! ---------------------------------------------------------------------- +! LOCAL: +! ---------------------------------------------------------------------- + real aa + real al + real buu + real c + real fbuw + real fbpt + real fh + real fm + real ric + real tstar + real ustar + real qstar + real utot + real wstar + real zz + real qvsg,qvs,es,esa,fbqq,tmp,resg + real b,cm,ch,rr,tol + parameter(b=9.4,cm=7.4,ch=5.3,rr=0.74,tol=.001) + +! ---------------------------------------------------------------------- +! END VARIABLES DEFINITIONS +! ---------------------------------------------------------------------- + + +! computation of the ground temperature + + utot=(ua**2+va**2)**.5 + + +!!!! Louis formulation +! +! compute the bulk Richardson Number + + zz=dz/2. + + + utot=max(utot,0.01) + + ric=2.*g_u*zz*(pt-ptg)/((pt+ptg)*(utot**2)) + + aa=vk/log(zz/z0) + + + + tmp=ptg*(pr/(1.e+5))**(rcp_u)-273.15 + es=6.11*(10**(tmp*7.5/(237.7+tmp))) + qvsg=0.62197*es/(0.01*pr-0.378*es) + + + +! determine the parameters fm and fh for stable, neutral and unstable conditions + + if(ric.gt.0.)then + fm=1./(1.+0.5*b*ric)**2 + fh=fm + else + c=b*cm*aa*aa*(zz/z0)**.5 + fm=1.-b*ric/(1.+c*(-ric)**.5) + c=c*ch/cm + fh=1.-b*ric/(1.+c*(-ric)**.5) + endif + + resg= rr/(aa*aa*utot*fh) + fbuw=-aa*aa*utot*utot*fm + fbpt=-aa*aa*utot*(pt-ptg)*fh/rr + fbqq=-(qv-qvsg)/(resg) + + ustar=(-fbuw)**.5 + tstar=-fbpt/ustar + qstar=-fbqq/ustar + al=(vk*g_u*tstar)/(pt*ustar*ustar) + + buu=-g_u/pt0*ustar*tstar + + uhb=-ustar*ustar*ua/utot + vhb=-ustar*ustar*va/utot + sf= ustar*tstar*da*cp_u + lf= ustar*qstar*da*latent + ehb=buu +!!!!!!!!!!!!!!! + + return + end subroutine flux_flat +!!!!!!!!!!!!!================!!!!!!!!!!!!!!!!!!! +! ===6=8===============================================================72 +! ===6=8===============================================================72 + + subroutine icBEP (nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) + + implicit none ! Street parameters integer nd_u(nurbm) ! Number of street direction for each urban class @@ -3732,7 +4729,7 @@ subroutine icBEP (nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) real ss_u(nz_um,nurbm) ! The probability that a building has an height equal to z real pb_u(nz_um,nurbm) ! The probability that a building has an height greater or equal to z - + ! Grid parameters integer nz_u(nurbm) ! Number of layer in the urban grid real z_u(nz_um) ! Height of the urban grid levels @@ -3753,19 +4750,20 @@ subroutine icBEP (nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) ! !Initialize variables ! + ! nz_u=0 z_u=0. ss_u=0. pb_u=0. ! Computation of the urban levels height - + z_u(1)=0. - + do iz_u=1,nz_um-1 z_u(iz_u+1)=z_u(iz_u)+dz_u enddo - + ! Normalisation of the building density do iurb=1,nurbm @@ -3776,33 +4774,33 @@ subroutine icBEP (nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) do ilu=1,nz_um d_b(ilu,iurb)=d_b(ilu,iurb)/dtot enddo - enddo + enddo -! Compute the view factors, pb and ss - - do iurb=1,nurbm +! Compute the view factors, pb and ss + + do iurb=1,nurbm hbmax=0. nz_u(iurb)=0 do ilu=1,nz_um if(h_b(ilu,iurb).gt.hbmax)hbmax=h_b(ilu,iurb) enddo - + do iz_u=1,nz_um-1 if(z_u(iz_u+1).gt.hbmax)go to 10 enddo - + 10 continue - nz_u(iurb)=iz_u+1 + nz_u(iurb)=iz_u+1 do id=1,nd_u(iurb) do iz_u=1,nz_u(iurb) ss_u(iz_u,iurb)=0. do ilu=1,nz_um - if(z_u(iz_u).le.h_b(ilu,iurb) & - .and.z_u(iz_u+1).gt.h_b(ilu,iurb))then + if(z_u(iz_u).le.h_b(ilu,iurb) & + .and.z_u(iz_u+1).gt.h_b(ilu,iurb))then ss_u(iz_u,iurb)=ss_u(iz_u,iurb)+d_b(ilu,iurb) - endif + endif enddo enddo @@ -3813,13 +4811,14 @@ subroutine icBEP (nd_u,h_b,d_b,ss_u,pb_u,nz_u,z_u) enddo end do - - - return + + + return end subroutine icBEP ! ===6=8===============================================================72 ! ===6=8===============================================================72 + subroutine view_factors(iurb,nz_u,id,dxy,z,ws,fww,fwg,fgw,fsg,fsw,fws) @@ -3937,7 +4936,7 @@ subroutine view_factors(iurb,nz_u,id,dxy,z,ws,fww,fwg,fgw,fsg,fsw,fws) enddo ! radiation from wall to sky - do iz=1,nz_u + do iz=1,nz_u call fnrms(fnrm,ws,dxy,hut-z(iz)) f12=fnrm call fnrms(fnrm,ws,dxy,hut-z(iz+1)) @@ -3985,6 +4984,7 @@ end subroutine view_factors ! ===6=8===============================================================72 ! ===6=8===============================================================72 + SUBROUTINE fprls (fprl,a,b,c) implicit none @@ -4046,17 +5046,19 @@ SUBROUTINE fnrms (fnrm,a,b,c) end subroutine fnrms ! ===6=8===============================================================72 - SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& + SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& twini_u,trini_u,tgini_u,albg_u,albw_u,albr_u,albwin_u,emg_u,emw_u,& emr_u,emwind_u,z0g_u,z0r_u,nd_u,strd_u,drst_u,ws_u,bs_u,h_b,d_b, & cop_u,pwin_u,beta_u,sw_cond_u,time_on_u,time_off_u,targtemp_u, & bldac_frc_u,cooled_frc_u, & - gaptemp_u, targhum_u,gaphum_u,perflo_u,hsesf_u,hsequip) + gaptemp_u, targhum_u,gaphum_u,perflo_u, & + gr_frac_roof_u,pv_frac_roof_u, & + hsesf_u,hsequip,irho,gr_flag_u,gr_type_u) + ! initialization routine, where the variables from the table are read implicit none - integer iurb ! urban class number ! Building parameters real alag_u(nurbm) ! Ground thermal diffusivity [m^2 s^-1] @@ -4095,9 +5097,9 @@ SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& integer i,iu integer nurb ! number of urban classes used - real, intent(out) :: cop_u(nurbm) - real, intent(out) :: bldac_frc_u(nurbm) + real, intent(out) :: bldac_frc_u(nurbm) real, intent(out) :: cooled_frc_u(nurbm) + real, intent(out) :: cop_u(nurbm) real, intent(out) :: pwin_u(nurbm) real, intent(out) :: beta_u(nurbm) integer, intent(out) :: sw_cond_u(nurbm) @@ -4108,9 +5110,12 @@ SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& real, intent(out) :: targhum_u(nurbm) real, intent(out) :: gaphum_u(nurbm) real, intent(out) :: perflo_u(nurbm) + real, intent(out) :: gr_frac_roof_u(nurbm) + real, intent(out) :: pv_frac_roof_u(nurbm) real, intent(out) :: hsesf_u(nurbm) real, intent(out) :: hsequip(24) - + real, intent(out) :: irho(24) + integer, intent(out) :: gr_flag_u,gr_type_u ! !Initialize some variables ! @@ -4144,9 +5149,10 @@ SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& z0g_u=Z0G_TBL nd_u=NUMDIR_TBL !FS - cop_u = cop_tbl + ! print*, 'g alla call', gr_frac_roof_u(iurb) bldac_frc_u = bldac_frc_tbl cooled_frc_u = cooled_frc_tbl + cop_u = cop_tbl pwin_u = pwin_tbl beta_u = beta_tbl sw_cond_u = sw_cond_tbl @@ -4157,13 +5163,17 @@ SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& targhum_u = targhum_tbl gaphum_u = gaphum_tbl perflo_u = perflo_tbl + gr_frac_roof_u =gr_frac_roof_tbl + gr_flag_u=gr_flag_tbl + pv_frac_roof_u = pv_frac_roof_tbl hsesf_u = hsesf_tbl hsequip = hsequip_tbl - + irho=irho_tbl + gr_type_u=gr_type_tbl do iu=1,icate if(ndm.lt.nd_u(iu))then write(*,*)'ndm too small in module_sf_bep_bem, please increase to at least ', nd_u(iu) - write(*,*)'remember also that urban_map_zrd should be equal or greater than nz_um*ndm*nwr-u!' + write(*,*)'remember also that num_urban_layers should be equal or greater than nz_um*ndm*nwr-u!' stop endif do i=1,nd_u(iu) @@ -4175,7 +5185,7 @@ SUBROUTINE init_para(alag_u,alaw_u,alar_u,csg_u,csw_u,csr_u,& do iu=1,ICATE if(nz_um.lt.numhgt_tbl(iu)+3)then write(*,*)'nz_um too small in module_sf_bep, please increase to at least ',numhgt_tbl(iu)+3 - write(*,*)'remember also that urban_map_zrd should be equal or greater than nz_um*ndm*nwr-u!' + write(*,*)'remember also that num_urban_layers should be equal or greater than nz_um*ndm*nwr-u!' stop endif do i=1,NUMHGT_TBL(iu) @@ -4202,12 +5212,12 @@ end subroutine init_para !====6=8===============================================================72 !====6=8===============================================================72 - subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & - tg,emg_u,albg_u,rlg,rsg,sfg, & + subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & + tg_av,emg_u,albg_u,rlg,rsg,sfg,lfg, & tw,emw_u,albw_u,rlw,rsw,sfw, & - tr,emr_u,albr_u,emwind,albwind,twlev,pwin, & - sfwind,rld,rs, sfr, & - rs_abs,rl_up,emiss,grdflx_urb) + tr_av,emr_u,albr_u,emwind,albwind,twlev,pwin, & + sfwind,rld,rs, sfr,sfrv,lfr,lfrv, & + rs_abs,rl_up,emiss,grdflx_urb,gr_frac_roof,tpvlev,pv_frac_roof) ! ! IN this surboutine we compute the upward longwave flux, and the albedo ! needed for the radiation scheme @@ -4221,11 +5231,16 @@ subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & real rlw(2*ndm,nz_um) ! Long wave radiation at the walls for a given canyon direction [W/m2] real rsg(ndm) ! Short wave radiation at the canyon for a given canyon direction [W/m2] real rlg(ndm) ! Long wave radiation at the ground for a given canyon direction [W/m2] - real rs ! Short wave radiation at the horizontal surface from the sun [W/m2] - real sfw(2*ndm,nz_um) ! Sensible heat flux from walls [W/m2] - real sfg(ndm) ! Sensible heat flux from ground (road) [W/m2] - real sfr(ndm,nz_um) ! Sensible heat flux from roofs [W/m2] - real rld ! Long wave radiation from the sky [W/m2] + real rs ! Short wave radiation at the horizontal surface from the sun [W/m²] + real sfw(2*ndm,nz_um) ! Sensible heat flux from walls [W/m²] + real sfg(ndm) ! Sensible heat flux from ground (road) [W/m²] + real lfg(ndm) + real sfr(ndm,nz_um) ! Sensible heat flux from roofs [W/m²] + real lfr(ndm,nz_um) + real lfrv(ndm,nz_um) + real sfrv(ndm,nz_um) + real gr_frac_roof + real rld ! Long wave radiation from the sky [W/m²] real albg_u ! albedo of the ground/street real albw_u ! albedo of the walls real albr_u ! albedo of the roof @@ -4240,8 +5255,10 @@ subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & real emw_u ! emissivity of the wall real emr_u ! emissivity of the roof real tw(2*ndm,nz_um) ! Temperature in each layer of the wall [K] - real tr(ndm,nz_um,nwr_u) ! Temperature in each layer of the roof [K] - real tg(ndm,ng_u) ! Temperature in each layer of the ground [K] + real tr_av(ndm,nz_um) ! Temperature in each layer of the roof [K] + real tpvlev(ndm,nz_um) + real pv_frac_roof + real tg_av(ndm) ! Temperature in each layer of the ground [K] integer id ! street direction integer ndu ! number of street directions ! @@ -4252,7 +5269,7 @@ subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & real twlev(2*ndm,nz_um) !Averaged Temperature of the windows real pwin !Coverage area fraction of the windows real gflwin !Heat stored for the windows - real sfwind(2*ndm,nz_um) !Sensible heat flux from windows [W/m2] + real sfwind(2*ndm,nz_um) !Sensible heat flux from windows [W/m²] !OUTPUT/INPUT real rs_abs ! absrobed solar radiationfor this street direction @@ -4268,12 +5285,11 @@ subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & iwrong=1 do iz=1,nzu+1 do id=1,ndu - do iw=1,nwr_u - if(tr(id,iz,iw).lt.100.)then - write(*,*)'in upward_rad ',iz,id,iw,tr(id,iz,iw) + if(tr_av(id,iz).lt.100.)then + write(203,*) tr_av(id,iz) + write(*,*)'in upward_rad ',iz,id,iw,tr_av(id,iz) iwrong=0 - endif - enddo + endif enddo enddo if(iwrong.eq.0)stop @@ -4286,17 +5302,19 @@ subroutine upward_rad(ndu,nzu,ws,bs,sigma,pb,ss, & rl_emit=0. grdflx_urb=0. do id=1,ndu - rl_emit=rl_emit-( emg_u*sigma*(tg(id,ng_u)**4.)+(1-emg_u)*rlg(id))*ws(id)/(ws(id)+bs(id))/ndu + rl_emit=rl_emit-( emg_u*sigma*(tg_av(id)**4.)+(1-emg_u)*rlg(id))*ws(id)/(ws(id)+bs(id))/ndu rl_inc=rl_inc+rlg(id)*ws(id)/(ws(id)+bs(id))/ndu rs_abs=rs_abs+(1.-albg_u)*rsg(id)*ws(id)/(ws(id)+bs(id))/ndu - gfl=(1.-albg_u)*rsg(id)+emg_u*rlg(id)-emg_u*sigma*(tg(id,ng_u)**4.)+sfg(id) + gfl=(1.-albg_u)*rsg(id)+emg_u*rlg(id)-emg_u*sigma*(tg_av(id)**4.)+sfg(id)+lfg(id) grdflx_urb=grdflx_urb-gfl*ws(id)/(ws(id)+bs(id))/ndu - do iz=2,nzu - rl_emit=rl_emit-(emr_u*sigma*(tr(id,iz,nwr_u)**4.)+(1-emr_u)*rld)*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu - rl_inc=rl_inc+rld*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu - rs_abs=rs_abs+(1.-albr_u)*rs*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu - gfl=(1.-albr_u)*rs+emr_u*rld-emr_u*sigma*(tr(id,iz,nwr_u)**4.)+sfr(id,iz) + do iz=2,nzu + rl_emit=rl_emit-(emr_u*sigma*((1.-pv_frac_roof)*tr_av(id,iz)**4.+pv_frac_roof*tpvlev(id,iz)**4)+ & + (1-emr_u)*rld)*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu + rl_inc=rl_inc+(1-pv_frac_roof*rld+pv_frac_roof*emr_u*sigma*tpvlev(id,iz)**4)*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu + rs_abs=rs_abs+((1.-albr_u)*rs*(1.-pv_frac_roof))*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu + gfl=(1.-albr_u)*rs*(1-pv_frac_roof)+emr_u*rld*((1-pv_frac_roof)+pv_frac_roof*emr_u*sigma*tpvlev(id,iz)**4) & + -emr_u*sigma*(tr_av(id,iz)**4.)+(1-gr_frac_roof)*sfr(id,iz)+(sfrv(id,iz)+lfrv(id,iz))*gr_frac_roof+(1.-gr_frac_roof)*lfr(id,iz) grdflx_urb=grdflx_urb-gfl*ss(iz)*bs(id)/(ws(id)+bs(id))/ndu enddo @@ -4608,12 +5626,13 @@ subroutine icBEPHI_XY(iurb,hb_u,hi_urb1D,ss_u,pb_u,nzu,z_u) pb_u(iz_u+1)=max(0.,pb_u(iz_u)-ss_u(iz_u,iurb)) enddo -20 continue - return - end subroutine icBEPHI_XY +20 continue + return + end subroutine icBEPHI_XY !====================================================================72 !====================================================================72 END MODULE module_sf_bep_bem + ! ===6=8===============================================================72 ! ===6=8===============================================================72 @@ -4623,35 +5642,35 @@ FUNCTION bep_bem_nurbm () RESULT (bep_bem_val_nurbm) INTEGER :: bep_bem_val_nurbm bep_bem_val_nurbm = nurbm END FUNCTION bep_bem_nurbm - + FUNCTION bep_bem_ndm () RESULT (bep_bem_val_ndm) USE module_sf_bep_bem IMPLICIT NONE INTEGER :: bep_bem_val_ndm bep_bem_val_ndm = ndm END FUNCTION bep_bem_ndm - + FUNCTION bep_bem_nz_um () RESULT (bep_bem_val_nz_um) USE module_sf_bep_bem IMPLICIT NONE INTEGER :: bep_bem_val_nz_um bep_bem_val_nz_um = nz_um END FUNCTION bep_bem_nz_um - + FUNCTION bep_bem_ng_u () RESULT (bep_bem_val_ng_u) USE module_sf_bep_bem IMPLICIT NONE INTEGER :: bep_bem_val_ng_u bep_bem_val_ng_u = ng_u END FUNCTION bep_bem_ng_u - + FUNCTION bep_bem_nwr_u () RESULT (bep_bem_val_nwr_u) USE module_sf_bep_bem IMPLICIT NONE INTEGER :: bep_bem_val_nwr_u bep_bem_val_nwr_u = nwr_u END FUNCTION bep_bem_nwr_u - + FUNCTION bep_bem_nf_u () RESULT (bep_bem_val_nf_u) USE module_sf_bep_bem IMPLICIT NONE @@ -4659,6 +5678,7 @@ FUNCTION bep_bem_nf_u () RESULT (bep_bem_val_nf_u) bep_bem_val_nf_u = nf_u END FUNCTION bep_bem_nf_u + FUNCTION bep_bem_ngb_u () RESULT (bep_bem_val_ngb_u) USE module_sf_bep_bem IMPLICIT NONE @@ -4673,3 +5693,11 @@ FUNCTION bep_bem_nbui_max () RESULT (bep_bem_val_nbui_max) bep_bem_val_nbui_max = nbui_max END FUNCTION bep_bem_nbui_max + + FUNCTION bep_bem_ngr_u () RESULT (bep_bem_val_ngr_u) + USE module_sf_bep_bem + IMPLICIT NONE + INTEGER :: bep_bem_val_ngr_u + bep_bem_val_ngr_u = ngr_u + END FUNCTION bep_bem_ngr_u + diff --git a/phys/module_sf_clm.F b/phys/module_sf_clm.F index f9445fbc1d..5224c4b358 100644 --- a/phys/module_sf_clm.F +++ b/phys/module_sf_clm.F @@ -3915,7 +3915,7 @@ subroutine clmdrv(zgcmxy ,forc_qxy ,ps ,forc_txy ,tsxy & USE module_date_time USE module_sf_urban, only: urban - USE module_sf_noahlsm, only: low_density_residential, high_density_residential, high_intensity_industrial + USE module_sf_noahlsm, only: LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11 USE module_ra_gfdleta, only: cal_mon_day USE module_configure @@ -5120,9 +5120,10 @@ subroutine clmdrv(zgcmxy ,forc_qxy ,ps ,forc_txy ,tsxy & ! URBAN CANOPY MODEL START - urban !-------------------------------------- ! Input variables lsm --> urban - - IF( IVGTYP(I,J) == 1 .or. IVGTYP(I,J) == low_density_residential .or. & - IVGTYP(I,J) == high_density_residential .or. IVGTYP(I,J) == high_intensity_industrial ) THEN + IF( IVGTYP(I,J) == 1 .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3.or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6.or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9.or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN ! Call urban forc_sols_buf = swd_buf*0.35 diff --git a/phys/module_sf_noahdrv.F b/phys/module_sf_noahdrv.F index e74d2d3739..93f3705204 100644 --- a/phys/module_sf_noahdrv.F +++ b/phys/module_sf_noahdrv.F @@ -10,7 +10,8 @@ MODULE module_sf_noahdrv & SALP_DATA, REFDK_DATA, REFKDT_DATA, FRZK_DATA, ZBOT_DATA, CZIL_DATA, & & SMLOW_DATA, SMHIGH_DATA, LVCOEF_DATA, NSLOPE, & & FRH2O,ZTOPVTBL,ZBOTVTBL, & - & LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL + & LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11 + USE module_sf_urban, only: urban, oasis, IRI_SCHEME USE module_sf_noahlsm_glacial_only, only: sflx_glacial @@ -93,6 +94,7 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & urban_map_wd, & !I multi-layer urban urban_map_gbd, & !I multi-layer urban urban_map_fbd, & !I multi-layer urban + urban_map_zgrd, & !I multi-layerurban num_urban_hi, & !I multi-layer urban tsk_rural_bep, & !H multi-layer urban trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & !H multi-layer urban @@ -103,6 +105,11 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & sfvent_urb3d,lfvent_urb3d, & !H multi-layer urban sfwin1_urb3d,sfwin2_urb3d, & !H multi-layer urban sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & !H multi-layer urban + ep_pv_urb3d,t_pv_urb3d, & !RMS + trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d, & !RMS + drain_urb4d,draingr_urb3d,sfrv_urb3d, & !RMS + lfrv_urb3d,dgr_urb3d,dg_urb3d,lfr_urb3d,lfg_urb3d,& !RMS + swddir,swddif, & lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & !H multi-layer urban mh_urb2d,stdh_urb2d,lf_urb2d, & !SLUCM th_phy,rho,p_phy,ust, & !I multi-layer urban @@ -285,6 +292,8 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & RAINBL, & EMBCK, & SR + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ) , & + INTENT(IN ) :: swddir,swddif REAL, DIMENSION( ims:ime, jms:jme ) , & INTENT(INOUT) :: ALBBCK, & @@ -596,6 +605,7 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & INTEGER, INTENT(IN ) :: urban_map_wd INTEGER, INTENT(IN ) :: urban_map_gbd INTEGER, INTENT(IN ) :: urban_map_fbd + INTEGER, INTENT(IN ) :: urban_map_zgrd INTEGER, INTENT(IN ) :: NUM_URBAN_HI REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: tsk_rural_bep REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: trb_urb4d @@ -619,6 +629,20 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: sfw2_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: sfr_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: sfg_urb3d + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ep_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: t_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: trv_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: qr_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: qgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: tgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: drain_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: draingr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: sfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: dgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: dg_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: lfg_urb3d !GRZ REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_hi, jms:jme ), INTENT(IN) :: hi_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: lp_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: lb_urb2d @@ -927,9 +951,12 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & ! the "NATURAL" category in the VEGPARM.TBL IF(SF_URBAN_PHYSICS == 1.OR. SF_URBAN_PHYSICS==2.OR.SF_URBAN_PHYSICS==3 ) THEN - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN - VEGTYP = NATURAL + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + + VEGTYP = NATURAL SHDFAC = SHDTBL(NATURAL) ALBEDOK =0.2 ! 0.2 ALBBRD =0.2 !0.2 @@ -945,8 +972,10 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & ENDIF ENDIF ELSE - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN VEGTYP = ISURBAN ENDIF ENDIF @@ -962,9 +991,12 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & if (tloc.lt.0) tloc=tloc+24 if (tloc==0) tloc=24 CALL cal_mon_day(julian,julyr,jmonth,jday) - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN - AOASIS = oasis ! urban oasis effect + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + + AOASIS = oasis ! urban oasis effect IF (IRIOPTION ==1) THEN IF (tloc==21 .or. tloc==22) THEN !irrigation on vegetaion in urban area, MAY-SEP, 9-10pm IF (jmonth==5 .or. jmonth==6 .or. jmonth==7 .or. jmonth==8 .or. jmonth==9) THEN @@ -1262,8 +1294,10 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & ! Input variables lsm --> urban - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL ) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN ! Call urban @@ -1551,7 +1585,7 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & gmt,julday,xlong,xlat,declin_urb,cosz_urb2d,omg_urb2d, & num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, & urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & - urban_map_gbd, urban_map_fbd, num_urban_hi, & + urban_map_gbd, urban_map_fbd, num_urban_hi, & trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & @@ -1586,13 +1620,18 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & gmt,julday,xlong,xlat,declin_urb,cosz_urb2d,omg_urb2d, & num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, & urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & - urban_map_gbd, urban_map_fbd, num_urban_hi, & + urban_map_gbd, urban_map_fbd, urban_map_zgrd,num_urban_hi, & trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & tlev_urb3d,qlev_urb3d,tw1lev_urb3d,tw2lev_urb3d, & tglev_urb3d,tflev_urb3d,sf_ac_urb3d,lf_ac_urb3d, & cm_ac_urb3d,sfvent_urb3d,lfvent_urb3d, & sfwin1_urb3d,sfwin2_urb3d, & sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & + ep_pv_urb3d,t_pv_urb3d, & !RMS + trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d, & !RMS + drain_urb4d,draingr_urb3d,sfrv_urb3d, & !RMS + lfrv_urb3d,dgr_urb3d,dg_urb3d,lfr_urb3d,lfg_urb3d, & !RMS + rainbl,swddir,swddif, & lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & a_u_bep,a_v_bep,a_t_bep, & a_e_bep,b_u_bep,b_v_bep, & @@ -1699,15 +1738,6 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, & G_URB2D(I,J) = 0. RN_URB2D(I,J) = 0. endif -! IF( IVGTYP(I,J) == 1 .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & -! IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN -! print*,'ivgtyp, qfx, hfx',ivgtyp(i,j),hfx_rural(i,j),qfx_rural(i,j) -! print*,'ivgtyp,hfx,hfx_urb,hfx_rural',hfx(i,j),hfx_urb(i,j),hfx_rural(i,j) -! print*,'lh,lh_rural',lh(i,j),lh_rural(i,j) -! print*,'qfx',qfx(i,j) -! print*,'ts_urb2d',ts_urb2d(i,j) -! print*,'ust',ust(i,j) -! endif enddo enddo @@ -2063,11 +2093,27 @@ SUBROUTINE SOIL_VEG_GEN_PARM( MMINLU, MMINSL) CALL wrf_message ("Expected low and high density residential, and high density industrial information in VEGPARM.TBL") CALL wrf_error_fatal ("This could be caused by using an older VEGPARM.TBL file with a newer WRF source code.") ENDIF - READ (19,*)LOW_DENSITY_RESIDENTIAL + READ (19,*)LCZ_1 + READ (19,*) + READ (19,*)LCZ_2 + READ (19,*) + READ (19,*)LCZ_3 + READ (19,*) + READ (19,*)LCZ_4 + READ (19,*) + READ (19,*)LCZ_5 + READ (19,*) + READ (19,*)LCZ_6 + READ (19,*) + READ (19,*)LCZ_7 + READ (19,*) + READ (19,*)LCZ_8 READ (19,*) - READ (19,*)HIGH_DENSITY_RESIDENTIAL + READ (19,*)LCZ_9 READ (19,*) - READ (19,*)HIGH_INTENSITY_INDUSTRIAL + READ (19,*)LCZ_10 + READ (19,*) + READ (19,*)LCZ_11 ENDIF ! 2002 CONTINUE @@ -2105,9 +2151,17 @@ SUBROUTINE SOIL_VEG_GEN_PARM( MMINLU, MMINSL) CALL wrf_dm_bcast_real ( RSMAX_DATA , 1 ) CALL wrf_dm_bcast_integer ( BARE , 1 ) CALL wrf_dm_bcast_integer ( NATURAL , 1 ) - CALL wrf_dm_bcast_integer ( LOW_DENSITY_RESIDENTIAL , 1 ) - CALL wrf_dm_bcast_integer ( HIGH_DENSITY_RESIDENTIAL , 1 ) - CALL wrf_dm_bcast_integer ( HIGH_INTENSITY_INDUSTRIAL , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_1 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_2 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_3 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_4 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_5 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_6 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_7 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_8 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_9 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_10 , 1 ) + CALL wrf_dm_bcast_integer ( LCZ_11 , 1 ) ! !-----READ IN SOIL PROPERTIES FROM SOILPARM.TBL @@ -2341,6 +2395,7 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & urban_map_gbd, & !I multi-layer urban urban_map_fbd, & !I multi-layer urban num_urban_hi, & !I multi-layer urban + urban_map_zgrd, & !Imulti-layer urban tsk_rural_bep, & !H multi-layer urban trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & !H multi-layer urban tlev_urb3d,qlev_urb3d, & !H multi-layer urban @@ -2350,6 +2405,10 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & sfvent_urb3d,lfvent_urb3d, & !H multi-layer urban sfwin1_urb3d,sfwin2_urb3d, & !H multi-layer urban sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & !H multi-layer urban + ep_pv_urb3d,t_pv_urb3d, & !RMS + trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d, & !RMS + drain_urb4d,draingr_urb3d,sfrv_urb3d, & !RMS + lfrv_urb3d,dgr_urb3d,dg_urb3d,lfr_urb3d,lfg_urb3d,& !RMS lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & !H multi-layer urban mh_urb2d,stdh_urb2d,lf_urb2d, & !SLUCM th_phy,rho,p_phy,ust, & !I multi-layer urban @@ -2841,6 +2900,7 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & INTEGER, INTENT(IN ) :: urban_map_wd INTEGER, INTENT(IN ) :: urban_map_gbd INTEGER, INTENT(IN ) :: urban_map_fbd + INTEGER, INTENT(IN ) :: urban_map_zgrd INTEGER, INTENT(IN ) :: NUM_URBAN_HI REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: tsk_rural_bep REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: trb_urb4d @@ -2864,6 +2924,20 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: sfw2_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: sfr_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: sfg_urb3d + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ep_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: t_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: trv_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: qr_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: qgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: tgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: drain_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: draingr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: sfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: dgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: dg_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: lfg_urb3d !GRZ REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_hi, jms:jme ), INTENT(IN) :: hi_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: lp_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: lb_urb2d @@ -3276,46 +3350,14 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & SNOWHK= 5.*SNEQV endif ! - - !Fei: urban. for urban surface, if calling UCM, redefine the natural surface in cities as - ! the "NATURAL" category in the VEGPARM.TBL - - ! IF(SF_URBAN_PHYSICS == 1.OR. SF_URBAN_PHYSICS==2.OR.SF_URBAN_PHYSICS==3 ) THEN - - - ! IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - ! IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN - ! VEGTYP = NATURAL - ! SHDFAC = SHDTBL(NATURAL) - ! ALBEDOK =0.2 ! 0.2 - ! ALBBRD =0.2 !0.2 - ! EMISSI = 0.98 !for VEGTYP=5 - ! IF ( FRC_URB2D(I,J) < 0.99 ) THEN - ! if(sf_urban_physics.eq.1)then - ! T1= ( TSK(I,J) -FRC_URB2D(I,J) * TS_URB2D (I,J) )/ (1-FRC_URB2D(I,J)) - ! elseif((sf_urban_physics.eq.2).OR.(sf_urban_physics.eq.3))then - ! r1= (tsk(i,j)**4.) - ! r2= frc_urb2d(i,j)*(ts_urb2d(i,j)**4.) - ! r3= (1.-frc_urb2d(i,j)) - ! t1= ((r1-r2)/r3)**.25 - ! endif - ! ELSE - ! T1 = TSK(I,J) - ! ENDIF - ! ENDIF - ! ELSE - ! IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - ! IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN - ! VEGTYP = ISURBAN - ! ENDIF - ! ENDIF - Noah_call=.TRUE. If ( SF_URBAN_PHYSICS == 0 ) THEN ! ONLY NOAH - - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + Noah_call = .TRUE. VEGTYP = ISURBAN ENDIF @@ -3323,9 +3365,11 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & ENDIF IF(SF_URBAN_PHYSICS == 1) THEN - - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + Noah_call = .TRUE. VEGTYP = NATURAL @@ -3351,8 +3395,11 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & if (tloc==0) tloc=24 CALL cal_mon_day(julian,julyr,jmonth,jday) IF(SF_URBAN_PHYSICS == 1) THEN - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + AOASIS = oasis ! urban oasis effect IF (IRIOPTION ==1) THEN IF (tloc==21 .or. tloc==22) THEN !irrigation on vegetaion in urban area, MAY-SEP, 9-10pm @@ -3595,20 +3642,27 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & !-------------------------------------- ! Input variables lsm --> urban - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL ) THEN - + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + ! UTYPE_URB = UTYPE_URB2D(I,J) !urban type (low, high or industrial) ! this need to be changed in the mosaic danli - IF(IVGTYP(I,J)==ISURBAN) UTYPE_URB=2 - IF(IVGTYP(I,J)==LOW_DENSITY_RESIDENTIAL) UTYPE_URB=1 - IF(IVGTYP(I,J)==HIGH_DENSITY_RESIDENTIAL) UTYPE_URB=2 - IF(IVGTYP(I,J)==HIGH_INTENSITY_INDUSTRIAL) UTYPE_URB=3 - - IF(UTYPE_URB==1) FRC_URB2D(I,J)=0.5 - IF(UTYPE_URB==2) FRC_URB2D(I,J)=0.9 - IF(UTYPE_URB==3) FRC_URB2D(I,J)=0.95 + IF(IVGTYP(I,J)==ISURBAN) UTYPE_URB=5 + IF(IVGTYP(I,J)==LCZ_1) UTYPE_URB=1 + IF(IVGTYP(I,J)==LCZ_2) UTYPE_URB=2 + IF(IVGTYP(I,J)==LCZ_3) UTYPE_URB=3 + IF(IVGTYP(I,J)==LCZ_4) UTYPE_URB=4 + IF(IVGTYP(I,J)==LCZ_5) UTYPE_URB=5 + IF(IVGTYP(I,J)==LCZ_6) UTYPE_URB=6 + IF(IVGTYP(I,J)==LCZ_7) UTYPE_URB=7 + IF(IVGTYP(I,J)==LCZ_8) UTYPE_URB=8 + IF(IVGTYP(I,J)==LCZ_9) UTYPE_URB=9 + IF(IVGTYP(I,J)==LCZ_10) UTYPE_URB=10 + IF(IVGTYP(I,J)==LCZ_11) UTYPE_URB=11 + TA_URB = SFCTMP ! [K] QA_URB = Q2K ! [kg/kg] @@ -4204,10 +4258,12 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & !Fei: urban. for urban surface, if calling UCM, redefine the natural surface in cities as ! the "NATURAL" category in the VEGPARM.TBL - - IF(SF_URBAN_PHYSICS == 1.OR. SF_URBAN_PHYSICS==2.OR.SF_URBAN_PHYSICS==3 ) THEN - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF(SF_URBAN_PHYSICS == 1.OR. SF_URBAN_PHYSICS==2.OR.SF_URBAN_PHYSICS==3 ) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + VEGTYP = NATURAL SHDFAC = SHDTBL(NATURAL) ALBEDOK =0.2 ! 0.2 @@ -4224,8 +4280,11 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & ENDIF ENDIF ELSE - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + VEGTYP = ISURBAN ENDIF ENDIF @@ -4242,9 +4301,12 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & if (tloc==0) tloc=24 CALL cal_mon_day(julian,julyr,jmonth,jday) IF(SF_URBAN_PHYSICS == 1) THEN - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN - AOASIS = oasis ! urban oasis effect + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + + AOASIS = oasis ! urban oasis effect IF (IRIOPTION ==1) THEN IF (tloc==21 .or. tloc==22) THEN !irrigation on vegetaion in urban area, MAY-SEP, 9-10pm IF (jmonth==5 .or. jmonth==6 .or. jmonth==7 .or. jmonth==8 .or. jmonth==9) THEN @@ -4478,9 +4540,11 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, & ! URBAN CANOPY MODEL START - urban !-------------------------------------- ! Input variables lsm --> urban - - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN + ! Call urban ! diff --git a/phys/module_sf_noahlsm.F b/phys/module_sf_noahlsm.F index 5f52d1fc86..055198db51 100644 --- a/phys/module_sf_noahlsm.F +++ b/phys/module_sf_noahlsm.F @@ -29,7 +29,7 @@ MODULE module_sf_noahlsm ! VEGETATION PARAMETERS INTEGER :: LUCATS , BARE INTEGER :: NATURAL - INTEGER :: LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL + INTEGER :: LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11 integer, PARAMETER :: NLUS=50 CHARACTER(LEN=256) LUTYPE INTEGER, DIMENSION(1:NLUS) :: NROTBL diff --git a/phys/module_sf_noahmpdrv.F b/phys/module_sf_noahmpdrv.F index f77b959845..0c2e05a4ea 100644 --- a/phys/module_sf_noahmpdrv.F +++ b/phys/module_sf_noahmpdrv.F @@ -20,7 +20,8 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN IZ0TLND, SF_URBAN_PHYSICS, & ! IN : User options SOILCOMP, SOILCL1, SOILCL2, SOILCL3, SOILCL4, & ! IN : User options T3D, QV3D, U_PHY, V_PHY, SWDOWN, GLW, & ! IN : Forcing - P8W3D,PRECIP_IN, SR, & ! IN : Forcing + SWDDIR, SWDDIF, & + P8W3D,PRECIP_IN, SR, & ! IN : Forcing TSK, HFX, QFX, LH, GRDFLX, SMSTAV, & ! IN/OUT LSM eqv SMSTOT,SFCRUNOFF, UDRUNOFF, ALBEDO, SNOWC, SMOIS, & ! IN/OUT LSM eqv SH2O, TSLB, SNOW, SNOWH, CANWAT, ACSNOM, & ! IN/OUT LSM eqv @@ -56,7 +57,8 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN ! USE MODULE_SF_NOAHMPLSM, only: noahmp_options, NOAHMP_SFLX, noahmp_parameters USE module_sf_noahmp_glacier USE NOAHMP_TABLES, ONLY: ISICE_TABLE, CO2_TABLE, O2_TABLE, DEFAULT_CROP_TABLE, ISCROP_TABLE, ISURBAN_TABLE, NATURAL_TABLE, & - LOW_DENSITY_RESIDENTIAL_TABLE, HIGH_DENSITY_RESIDENTIAL_TABLE, HIGH_INTENSITY_INDUSTRIAL_TABLE + LCZ_1_TABLE,LCZ_2_TABLE,LCZ_3_TABLE,LCZ_4_TABLE,LCZ_5_TABLE,LCZ_6_TABLE,LCZ_7_TABLE,LCZ_8_TABLE, & + LCZ_9_TABLE,LCZ_10_TABLE,LCZ_11_TABLE USE module_sf_urban, only: IRI_SCHEME USE module_ra_gfdleta, only: cal_mon_day !---------------------------------------------------------------- @@ -114,6 +116,8 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: V_PHY ! 3D V wind component [m/s] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: SWDOWN ! solar down at surface [W m-2] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: GLW ! longwave down at surface [W m-2] + REAL,OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: swddir ! shortwave direct at surface [W m-2] + REAL,OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: swddif ! shortwave diffuse at surface [W m-2] REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: P8W3D ! 3D pressure, valid at interface [Pa] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: PRECIP_IN ! total input precipitation [mm] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: SR ! frozen precipitation ratio [-] @@ -669,9 +673,10 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN IF(IPRINT) PRINT *, i,j,'RESET SOIL in surfce.F' SOILTYP = 7 ENDIF - - IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL_TABLE .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL_TABLE .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL_TABLE ) THEN + IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) == LCZ_1_TABLE .or. IVGTYP(I,J) == LCZ_2_TABLE .or. & + IVGTYP(I,J) == LCZ_3_TABLE .or. IVGTYP(I,J) == LCZ_4_TABLE .or. IVGTYP(I,J) == LCZ_5_TABLE .or. & + IVGTYP(I,J) == LCZ_6_TABLE .or. IVGTYP(I,J) == LCZ_7_TABLE .or. IVGTYP(I,J) == LCZ_8_TABLE .or. & + IVGTYP(I,J) == LCZ_9_TABLE .or. IVGTYP(I,J) == LCZ_10_TABLE .or. IVGTYP(I,J) == LCZ_11_TABLE ) THEN IF(SF_URBAN_PHYSICS == 0 ) THEN VEGTYP = ISURBAN_TABLE @@ -723,9 +728,10 @@ SUBROUTINE noahmplsm(ITIMESTEP, YR, JULIAN, COSZIN,XLAT,XLONG, & ! IN !=== hydrological processes for vegetation in urban model === !=== irrigate vegetaion only in urban area, MAY-SEP, 9-11pm - - IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL_TABLE .or. & - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL_TABLE .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL_TABLE ) THEN + IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) == LCZ_1_TABLE .or. IVGTYP(I,J) == LCZ_2_TABLE .or. & + IVGTYP(I,J) == LCZ_3_TABLE .or. IVGTYP(I,J) == LCZ_4_TABLE .or. IVGTYP(I,J) == LCZ_5_TABLE .or. & + IVGTYP(I,J) == LCZ_6_TABLE .or. IVGTYP(I,J) == LCZ_7_TABLE .or. IVGTYP(I,J) == LCZ_8_TABLE .or. & + IVGTYP(I,J) == LCZ_9_TABLE .or. IVGTYP(I,J) == LCZ_10_TABLE .or. IVGTYP(I,J) == LCZ_11_TABLE ) THEN IF(SF_URBAN_PHYSICS > 0 .AND. IRI_SCHEME == 1 ) THEN SOLAR_TIME = (JULIAN - INT(JULIAN))*24 + XLONG(I,J)/15.0 @@ -1069,10 +1075,14 @@ SUBROUTINE TRANSFER_MP_PARAMETERS(VEGTYPE,SOILTYPE,SLOPETYPE,SOILCOLOR,CROPTYPE, parameters%EBLFOREST = EBLFOREST_TABLE parameters%URBAN_FLAG = .FALSE. - IF( VEGTYPE == ISURBAN_TABLE .or. VEGTYPE == LOW_DENSITY_RESIDENTIAL_TABLE .or. & - VEGTYPE == HIGH_DENSITY_RESIDENTIAL_TABLE .or. VEGTYPE == HIGH_INTENSITY_INDUSTRIAL_TABLE ) THEN - parameters%URBAN_FLAG = .TRUE. - ENDIF + IF( VEGTYPE == ISURBAN_TABLE .or. VEGTYPE == LCZ_1_TABLE .or. VEGTYPE == LCZ_2_TABLE .or. & + VEGTYPE == LCZ_3_TABLE .or. VEGTYPE == LCZ_4_TABLE .or. VEGTYPE == LCZ_5_TABLE .or. & + VEGTYPE == LCZ_6_TABLE .or. VEGTYPE == LCZ_7_TABLE .or. VEGTYPE == LCZ_8_TABLE .or. & + VEGTYPE == LCZ_9_TABLE .or. VEGTYPE == LCZ_10_TABLE .or. VEGTYPE == LCZ_11_TABLE ) THEN + + + parameters%URBAN_FLAG = .TRUE. + ENDIF !------------------------------------------------------------------------------------------! ! Transfer veg parameters @@ -2476,7 +2486,8 @@ end function checkIfHarvest SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, & ! IN : Model configuration DT, COSZ_URB2D, XLAT_URB2D, & ! IN : Time/Space-related T3D, QV3D, U_PHY, V_PHY, SWDOWN, & ! IN : Forcing - GLW, P8W3D, RAINBL, DZ8W, ZNT, & ! IN : Forcing + GLW, SWDDIR, SWDDIF, & + P8W3D, RAINBL, DZ8W, ZNT, & ! IN : Forcing TSK, HFX, QFX, LH, GRDFLX, & ! IN/OUT : LSM ALBEDO, EMISS, QSFC, & ! IN/OUT : LSM ids,ide, jds,jde, kds,kde, & @@ -2503,7 +2514,7 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, chs, chs2, cqs2, & !H num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, & !I multi-layer urban urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & !I multi-layer urban - urban_map_gbd, urban_map_fbd, & !I multi-layer urban + urban_map_gbd, urban_map_fbd, urban_map_zgrd, & !I multi-layer urban num_urban_hi, & !I multi-layer urban trb_urb4d, tw1_urb4d, tw2_urb4d, tgb_urb4d, & !H multi-layer urban tlev_urb3d, qlev_urb3d, & !H multi-layer urban @@ -2513,6 +2524,10 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, sfvent_urb3d, lfvent_urb3d, & !H multi-layer urban sfwin1_urb3d, sfwin2_urb3d, & !H multi-layer urban sfw1_urb3d, sfw2_urb3d, sfr_urb3d, sfg_urb3d, & !H multi-layer urban + ep_pv_urb3d, t_pv_urb3d, & !RMS + trv_urb4d, qr_urb4d, qgr_urb3d, tgr_urb3d, & !RMS + drain_urb4d, draingr_urb3d, sfrv_urb3d, lfrv_urb3d, & !RMS + dgr_urb3d, dg_urb3d, lfr_urb3d, lfg_urb3d, & !RMS lp_urb2d, hi_urb2d, lb_urb2d, hgt_urb2d, & !H multi-layer urban mh_urb2d, stdh_urb2d, lf_urb2d, & !SLUCM th_phy, rho, p_phy, ust, & !I multi-layer urban @@ -2546,6 +2561,8 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: V_PHY ! 3D V wind component [m/s] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: SWDOWN ! solar down at surface [W m-2] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: GLW ! longwave down at surface [W m-2] + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: SWDDIR ! direct shortwave down at surface [W m-2] + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: SWDDIF ! diffuse shortwave at surface [W m-2] REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: P8W3D ! 3D pressure, valid at interface [Pa] REAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: RAINBL ! total input precipitation [mm] REAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(IN ) :: DZ8W ! thickness of atmo layers [m] @@ -2744,6 +2761,7 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, INTEGER, INTENT(IN ) :: urban_map_wd INTEGER, INTENT(IN ) :: urban_map_gbd INTEGER, INTENT(IN ) :: urban_map_fbd + INTEGER, INTENT(IN ) :: urban_map_zgrd INTEGER, INTENT(IN ) :: NUM_URBAN_HI REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_hi, jms:jme ), INTENT(IN ) :: hi_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: lp_urb2d @@ -2752,7 +2770,6 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: mh_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN ) :: stdh_urb2d REAL, OPTIONAL, DIMENSION( ims:ime, 4, jms:jme ), INTENT(IN ) :: lf_urb2d - REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: trb_urb4d REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zwd, jms:jme ), INTENT(INOUT) :: tw1_urb4d REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zwd, jms:jme ), INTENT(INOUT) :: tw2_urb4d @@ -2774,6 +2791,20 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zd , jms:jme ), INTENT(INOUT) :: sfw2_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: sfr_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: sfg_urb3d + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ep_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: t_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: trv_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: qr_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: qgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: tgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: drain_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: draingr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: sfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: dgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: dg_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: lfg_urb3d !GRZ REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: a_u_bep !Implicit momemtum component X-direction REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: a_v_bep !Implicit momemtum component Y-direction REAL, OPTIONAL, DIMENSION( ims:ime, kms:kme, jms:jme ), INTENT(INOUT) :: a_t_bep !Implicit component pot. temperature @@ -2831,11 +2862,12 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, ILOOP : DO I = its, ite - IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) == 31 .or. & - IVGTYP(I,J) == 32 .or. IVGTYP(I,J) == 33 ) THEN - UTYPE_URB = UTYPE_URB2D(I,J) !urban type (low, high or industrial) + + IF( IVGTYP(I,J) == ISURBAN_TABLE .or. IVGTYP(I,J) .gt. 30)THEN + + UTYPE_URB = UTYPE_URB2D(I,J) !urban type (low, high or industrial) TA_URB = T3D(I,1,J) ! [K] QA_URB = QV3D(I,1,J)/(1.0+QV3D(I,1,J)) ! [kg/kg] UA_URB = SQRT(U_PHY(I,1,J)**2.+V_PHY(I,1,J)**2.) @@ -3104,13 +3136,18 @@ SUBROUTINE noahmp_urban(sf_urban_physics, NSOIL, IVGTYP, ITIMESTEP, declin_urb, cosz_urb2d, omg_urb2d, & num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, & urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & - urban_map_gbd, urban_map_fbd, num_urban_hi, & + urban_map_gbd, urban_map_fbd, urban_map_zgrd, num_urban_hi, & trb_urb4d, tw1_urb4d, tw2_urb4d, tgb_urb4d, & tlev_urb3d, qlev_urb3d, tw1lev_urb3d, tw2lev_urb3d, & tglev_urb3d, tflev_urb3d, sf_ac_urb3d, lf_ac_urb3d, & cm_ac_urb3d, sfvent_urb3d, lfvent_urb3d, & sfwin1_urb3d, sfwin2_urb3d, & sfw1_urb3d, sfw2_urb3d, sfr_urb3d, sfg_urb3d, & + ep_pv_urb3d, t_pv_urb3d, & !RMS + trv_urb4d, qr_urb4d, qgr_urb3d, tgr_urb3d, & !RMS + drain_urb4d,draingr_urb3d, sfrv_urb3d, lfrv_urb3d, & !RMS + dgr_urb3d, dg_urb3d, lfr_urb3d, lfg_urb3d, & !RMS + rainbl, swddir, swddif, & lp_urb2d, hi_urb2d, lb_urb2d, hgt_urb2d, & a_u_bep, a_v_bep, a_t_bep, & a_e_bep, b_u_bep, b_v_bep, & diff --git a/phys/module_sf_noahmplsm.F b/phys/module_sf_noahmplsm.F index 9686a403c6..f4e61d4cca 100644 --- a/phys/module_sf_noahmplsm.F +++ b/phys/module_sf_noahmplsm.F @@ -9166,9 +9166,20 @@ MODULE NOAHMP_TABLES INTEGER :: ISCROP_TABLE INTEGER :: EBLFOREST_TABLE INTEGER :: NATURAL_TABLE - INTEGER :: LOW_DENSITY_RESIDENTIAL_TABLE - INTEGER :: HIGH_DENSITY_RESIDENTIAL_TABLE - INTEGER :: HIGH_INTENSITY_INDUSTRIAL_TABLE + INTEGER :: LCZ_1_TABLE + INTEGER :: LCZ_2_TABLE + INTEGER :: LCZ_3_TABLE + INTEGER :: LCZ_4_TABLE + INTEGER :: LCZ_5_TABLE + INTEGER :: LCZ_6_TABLE + INTEGER :: LCZ_7_TABLE + INTEGER :: LCZ_8_TABLE + INTEGER :: LCZ_9_TABLE + INTEGER :: LCZ_10_TABLE + INTEGER :: LCZ_11_TABLE + + + REAL :: CH2OP_TABLE(MVT) !maximum intercepted h2o per unit lai+sai (mm) REAL :: DLEAF_TABLE(MVT) !characteristic leaf dimension (m) @@ -9402,9 +9413,18 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) INTEGER :: ISCROP INTEGER :: EBLFOREST INTEGER :: NATURAL - INTEGER :: LOW_DENSITY_RESIDENTIAL - INTEGER :: HIGH_DENSITY_RESIDENTIAL - INTEGER :: HIGH_INTENSITY_INDUSTRIAL + INTEGER :: LCZ_1 + INTEGER :: LCZ_2 + INTEGER :: LCZ_3 + INTEGER :: LCZ_4 + INTEGER :: LCZ_5 + INTEGER :: LCZ_6 + INTEGER :: LCZ_7 + INTEGER :: LCZ_8 + INTEGER :: LCZ_9 + INTEGER :: LCZ_10 + INTEGER :: LCZ_11 + REAL, DIMENSION(MVT) :: SAI_JAN,SAI_FEB,SAI_MAR,SAI_APR,SAI_MAY,SAI_JUN, & SAI_JUL,SAI_AUG,SAI_SEP,SAI_OCT,SAI_NOV,SAI_DEC @@ -9419,7 +9439,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) NAMELIST / noahmp_usgs_veg_categories / VEG_DATASET_DESCRIPTION, NVEG NAMELIST / noahmp_usgs_parameters / ISURBAN, ISWATER, ISBARREN, ISICE, ISCROP, EBLFOREST, NATURAL, & - LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL, & + LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11,& CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, & LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, & FOLNMX, WDPOOL, WRRAT, MRP, NROOT, RGL, RS, HS, TOPT, RSMAX, & @@ -9429,7 +9449,7 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) NAMELIST / noahmp_modis_veg_categories / VEG_DATASET_DESCRIPTION, NVEG NAMELIST / noahmp_modis_parameters / ISURBAN, ISWATER, ISBARREN, ISICE, ISCROP, EBLFOREST, NATURAL, & - LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL, & + LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11, & CH2OP, DLEAF, Z0MVT, HVT, HVB, DEN, RC, MFSNO, XL, CWPVT, C3PSN, KC25, AKC, KO25, AKO, AVCMX, AQE, & LTOVRC, DILEFC, DILEFW, RMF25 , SLA , FRAGR , TMIN , VCMX25, TDLEF , BP, MP, QE25, RMS25, RMR25, ARM, & FOLNMX, WDPOOL, WRRAT, MRP, NROOT, RGL, RS, HS, TOPT, RSMAX, & @@ -9493,10 +9513,17 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) ISCROP_TABLE = -99999 EBLFOREST_TABLE = -99999 NATURAL_TABLE = -99999 - LOW_DENSITY_RESIDENTIAL_TABLE = -99999 - HIGH_DENSITY_RESIDENTIAL_TABLE = -99999 - HIGH_INTENSITY_INDUSTRIAL_TABLE = -99999 - + LCZ_1_TABLE = -99999 + LCZ_2_TABLE = -99999 + LCZ_3_TABLE = -99999 + LCZ_4_TABLE = -99999 + LCZ_5_TABLE = -99999 + LCZ_6_TABLE = -99999 + LCZ_7_TABLE = -99999 + LCZ_8_TABLE = -99999 + LCZ_9_TABLE = -99999 + LCZ_10_TABLE = -99999 + LCZ_11_TABLE = -99999 inquire( file='MPTABLE.TBL', exist=file_named ) if ( file_named ) then open(15, file="MPTABLE.TBL", status='old', form='formatted', action='read', iostat=ierr) @@ -9529,10 +9556,17 @@ subroutine read_mp_veg_parameters(DATASET_IDENTIFIER) ISCROP_TABLE = ISCROP EBLFOREST_TABLE = EBLFOREST NATURAL_TABLE = NATURAL - LOW_DENSITY_RESIDENTIAL_TABLE = LOW_DENSITY_RESIDENTIAL - HIGH_DENSITY_RESIDENTIAL_TABLE = HIGH_DENSITY_RESIDENTIAL - HIGH_INTENSITY_INDUSTRIAL_TABLE = HIGH_INTENSITY_INDUSTRIAL - + LCZ_1_TABLE = LCZ_1 + LCZ_2_TABLE = LCZ_2 + LCZ_3_TABLE = LCZ_3 + LCZ_4_TABLE = LCZ_4 + LCZ_5_TABLE = LCZ_5 + LCZ_6_TABLE = LCZ_6 + LCZ_7_TABLE = LCZ_7 + LCZ_8_TABLE = LCZ_8 + LCZ_9_TABLE = LCZ_9 + LCZ_10_TABLE = LCZ_10 + LCZ_11_TABLE = LCZ_11 CH2OP_TABLE(1:NVEG) = CH2OP(1:NVEG) DLEAF_TABLE(1:NVEG) = DLEAF(1:NVEG) Z0MVT_TABLE(1:NVEG) = Z0MVT(1:NVEG) diff --git a/phys/module_sf_urban.F b/phys/module_sf_urban.F index 78d84fdbd0..4438bfbdf5 100644 --- a/phys/module_sf_urban.F +++ b/phys/module_sf_urban.F @@ -47,6 +47,11 @@ MODULE module_sf_urban REAL, ALLOCATABLE, DIMENSION(:) :: TARGHUM_TBL REAL, ALLOCATABLE, DIMENSION(:) :: GAPHUM_TBL REAL, ALLOCATABLE, DIMENSION(:) :: PERFLO_TBL + REAL, ALLOCATABLE, DIMENSION(:) :: PV_FRAC_ROOF_TBL !GRZ + REAL, ALLOCATABLE, DIMENSION(:) :: GR_FRAC_ROOF_TBL !GRZ + INTEGER :: GR_FLAG_TBL !GRZ + INTEGER :: GR_TYPE_TBL !GRZ + REAL, ALLOCATABLE, DIMENSION(:) :: HSESF_TBL REAL, ALLOCATABLE, DIMENSION(:) :: CAPR_TBL, CAPB_TBL, CAPG_TBL @@ -78,7 +83,7 @@ MODULE module_sf_urban INTEGER :: ahoption ! Miao, 2007/01/17, cal. ah REAL, DIMENSION(1:24) :: ahdiuprf ! ah diurnal profile, tloc: 1-24 REAL, DIMENSION(1:24) :: hsequip_tbl - + REAL, DIMENSION(1:24) :: irho_tbl !===Yang, 2014/10/08, urban hydrological processes for single layer UCM=== INTEGER :: IMP_SCHEME, IRI_SCHEME INTEGER :: alhoption ! anthropogenic latent heat option @@ -1942,7 +1947,7 @@ END SUBROUTINE read_param ! !=============================================================================== SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers, & - sf_urban_physics) + sf_urban_physics,use_wudapt_lcz) !new LCZ ! num_roof_layers,num_wall_layers,num_road_layers) IMPLICIT NONE @@ -1956,7 +1961,7 @@ SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers, & REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZB REAL, DIMENSION(1:num_soil_layers), INTENT(INOUT) :: DZG INTEGER, INTENT(IN) :: SF_URBAN_PHYSICS - + INTEGER, INTENT(IN) :: USE_WUDAPT_LCZ !new LCZ INTEGER :: LC, K INTEGER :: IOSTATUS, ALLOCATE_STATUS INTEGER :: num_roof_layers @@ -1993,13 +1998,23 @@ SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers, & ICATE=0 - OPEN (UNIT=11, & + if(USE_WUDAPT_LCZ.eq.0)then + OPEN (UNIT=11, & FILE='URBPARM.TBL', & ACCESS='SEQUENTIAL', & STATUS='OLD', & ACTION='READ', & POSITION='REWIND', & IOSTAT=IOSTATUS) + else ! new LCZ + OPEN (UNIT=11, & + FILE='URBPARM_LCZ.TBL', & + ACCESS='SEQUENTIAL', & + STATUS='OLD', & + ACTION='READ', & + POSITION='REWIND', & + IOSTAT=IOSTATUS) + endif IF (IOSTATUS > 0) THEN FATAL_ERROR('ERROR OPEN URBPARM.TBL') @@ -2137,6 +2152,11 @@ SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers, & if(allocate_status /= 0) FATAL_ERROR('Error allocating PERFLO_TBL in urban_param_init') ALLOCATE( HSESF_TBL(ICATE), stat=allocate_status ) if(allocate_status /= 0) FATAL_ERROR('Error allocating HSESF_TBL in urban_param_init') + ALLOCATE( PV_FRAC_ROOF_TBL(ICATE), stat=allocate_status ) + if(allocate_status /= 0) CALL wrf_error_fatal('Error allocating PV_FRAC_ROOF_TBL in urban_param_init') + ALLOCATE( GR_FRAC_ROOF_TBL(ICATE), stat=allocate_status ) + if(allocate_status /= 0) CALL wrf_error_fatal('Error allocating GR_FRAC_ROOF_TBL in urban_param_init') + endif numdir_tbl = 0 street_direction_tbl = -1.E36 @@ -2220,6 +2240,10 @@ SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers, & read(string(indx+1:),*) dzg(1:num_road_layers) ! Convert thicknesses from m to cm dzg = dzg * 100.0 + else if (name == "GR_FLAG") then + read(string(indx+1:),*) gr_flag_tbl + else if (name == "GR_TYPE") then + read(string(indx+1:),*) gr_type_tbl else if (name == "BOUNDR") then read(string(indx+1:),*) boundr_data else if (name == "BOUNDB") then @@ -2329,6 +2353,13 @@ SUBROUTINE urban_param_init(DZR,DZB,DZG,num_soil_layers, & read(string(indx+1:),*) hsequip_tbl(1:24) else if (name == "HSEQUIP_SCALE_FACTOR") then read(string(indx+1:),*) hsesf_tbl(1:icate) + else if (name == "IRHO") then + read(string(indx+1:),*) irho_tbl(1:24) + else if ( name == "PV_FRAC_ROOF") then + read(string(indx+1:),*) pv_frac_roof_tbl(1:icate) + else if ( name == "GR_FRAC_ROOF") then + read(string(indx+1:),*) gr_frac_roof_tbl(1:icate) + !end BEP else FATAL_ERROR('URBPARM.TBL: Unrecognized NAME = "'//trim(name)//'" in Subr URBAN_PARAM_INIT') @@ -2422,9 +2453,8 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, ims,ime,jms,jme,kms,kme,num_soil_layers, & ! in ! num_roof_layers,num_wall_layers,num_road_layers, & ! in ! num_roof_layers,num_wall_layers,num_road_layers, & !urban - LOW_DENSITY_RESIDENTIAL, & - HIGH_DENSITY_RESIDENTIAL, & - HIGH_INTENSITY_INDUSTRIAL, & + LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5, & + LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11, & restart,sf_urban_physics, & !in XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & ! inout TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & ! inout @@ -2441,6 +2471,7 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, urban_map_wd, & ! in urban_map_gbd, & ! in urban_map_fbd, & ! in + urban_map_zgrd, & ! in num_urban_hi, & ! in TRB_URB4D,TW1_URB4D,TW2_URB4D,TGB_URB4D, & ! inout TLEV_URB3D,QLEV_URB3D, & ! inout @@ -2450,6 +2481,11 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, SFVENT_URB3D,LFVENT_URB3D, & ! inout SFWIN1_URB3D,SFWIN2_URB3D, & ! inout SFW1_URB3D,SFW2_URB3D,SFR_URB3D,SFG_URB3D, & ! inout + EP_PV_URB3D,T_PV_URB3D, & !GRZ + TRV_URB4D,QR_URB4D,QGR_URB3D,TGR_URB3D, & !GRZ + DRAIN_URB4D,DRAINGR_URB3D,SFRV_URB3D, & !GRZ + LFRV_URB3D,DGR_URB3D,DG_URB3D,LFR_URB3D,LFG_URB3D,&!GRZ + SMOIS_URB, & LP_URB2D,HI_URB2D,LB_URB2D, & ! inout HGT_URB2D,MH_URB2D,STDH_URB2D, & ! inout LF_URB2D, & ! inout @@ -2464,7 +2500,7 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, IMPLICIT NONE INTEGER, INTENT(IN) :: ISURBAN, sf_urban_physics - INTEGER, INTENT(IN) :: LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL + INTEGER, INTENT(IN) :: LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11 INTEGER, INTENT(IN) :: ims,ime,jms,jme,kms,kme,num_soil_layers INTEGER, INTENT(IN) :: num_urban_ndm INTEGER, INTENT(IN) :: urban_map_zrd @@ -2476,6 +2512,7 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, INTEGER, INTENT(IN) :: urban_map_wd INTEGER, INTENT(IN) :: urban_map_gbd INTEGER, INTENT(IN) :: urban_map_fbd + INTEGER, INTENT(IN) :: urban_map_zgrd INTEGER, INTENT(IN) :: num_urban_hi !multi-layer urban ! INTEGER, INTENT(IN) :: num_roof_layers, num_wall_layers, num_road_layers @@ -2541,6 +2578,21 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, REAL, DIMENSION(ims:ime, 1:urban_map_zd , jms:jme), INTENT(INOUT) :: SFW2_URB3D REAL, DIMENSION(ims:ime, 1:urban_map_zdf, jms:jme), INTENT(INOUT) :: SFR_URB3D REAL, DIMENSION(ims:ime, 1:num_urban_ndm, jms:jme), INTENT(INOUT) :: SFG_URB3D + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: EP_PV_URB3D!GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf,jms:jme ), INTENT(INOUT) :: T_PV_URB3D!GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme),INTENT(INOUT) :: TRV_URB4D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme),INTENT(INOUT) :: QR_URB4D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme), INTENT(INOUT) :: QGR_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme), INTENT(INOUT) :: TGR_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: DRAIN_URB4D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: DRAINGR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: SFRV_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme),INTENT(INOUT) :: LFRV_URB3D ! GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: DGR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: DG_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: LFR_URB3D !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: LFG_URB3D !GRZ + REAL, DIMENSION( ims:ime, 1:num_soil_layers, jms:jme ), INTENT(IN) ::SMOIS_URB REAL, DIMENSION( ims:ime,1:num_urban_hi , jms:jme), INTENT(INOUT) :: HI_URB2D REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LP_URB2D REAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: LB_URB2D @@ -2592,7 +2644,7 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, SWITCH_URB=0 IF( IVGTYP(I,J) == ISURBAN) THEN - UTYPE_URB2D(I,J) = 2 ! for default. high-intensity + UTYPE_URB2D(I,J) = 5 ! for default. high-intensity UTYPE_URB = UTYPE_URB2D(I,J) ! for default. high-intensity IF (HGT_URB2D(I,J)>0.) THEN CONTINUE @@ -2626,10 +2678,11 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, SWITCH_URB=1 ENDIF - IF( IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL) THEN - UTYPE_URB2D(I,J) = 1 ! low-intensity residential - UTYPE_URB = UTYPE_URB2D(I,J) ! low-intensity residential - IF (HGT_URB2D(I,J)>0.) THEN +!!!!! + IF( IVGTYP(I,J) == LCZ_1) THEN + UTYPE_URB2D(I,J) = 1 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN CONTINUE ELSE WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' @@ -2657,11 +2710,11 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' WRITE_MESSAGE(mesg) FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) - ENDIF + ENDIF SWITCH_URB=1 ENDIF - - IF( IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL) THEN +!!!!! + IF( IVGTYP(I,J) == LCZ_2) THEN UTYPE_URB2D(I,J) = 2 ! high-intensity UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity IF (HGT_URB2D(I,J)>0.) THEN @@ -2695,10 +2748,10 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, ENDIF SWITCH_URB=1 ENDIF - - IF( IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN - UTYPE_URB2D(I,J) = 3 ! Commercial/Industrial/Transportation - UTYPE_URB = UTYPE_URB2D(I,J) ! Commercial/Industrial/Transportation +!!!!! + IF( IVGTYP(I,J) == LCZ_3) THEN + UTYPE_URB2D(I,J) = 3 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity IF (HGT_URB2D(I,J)>0.) THEN CONTINUE ELSE @@ -2728,9 +2781,290 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, WRITE_MESSAGE(mesg) FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) ENDIF - SWITCH_URB=1 + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_4) THEN + UTYPE_URB2D(I,J) = 4 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_5) THEN + UTYPE_URB2D(I,J) = 5 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_6) THEN + UTYPE_URB2D(I,J) = 6 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_7) THEN + UTYPE_URB2D(I,J) = 7 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_8) THEN + UTYPE_URB2D(I,J) = 8 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_9) THEN + UTYPE_URB2D(I,J) = 9 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_10) THEN + UTYPE_URB2D(I,J) = 10 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 + ENDIF +!!!!! + IF( IVGTYP(I,J) == LCZ_11) THEN + UTYPE_URB2D(I,J) = 11 ! high-intensity + UTYPE_URB = UTYPE_URB2D(I,J) ! high-intensity + IF (HGT_URB2D(I,J)>0.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'USING DEFAULT URBAN MORPHOLOGY' + WRITE_MESSAGE(mesg) + LP_URB2D(I,J)=0. + LB_URB2D(I,J)=0. + HGT_URB2D(I,J)=0. + IF ( sf_urban_physics == 1 ) THEN + MH_URB2D(I,J)=0. + STDH_URB2D(I,J)=0. + DO K=1,4 + LF_URB2D(I,K,J)=0. + ENDDO + ELSE IF ( ( sf_urban_physics == 2 ) .or. ( sf_urban_physics == 3 ) ) THEN + DO K=1,num_urban_hi + HI_URB2D(I,K,J)=0. + ENDDO + ENDIF + ENDIF + IF (FRC_URB2D(I,J)>0.and.FRC_URB2D(I,J)<=1.) THEN + CONTINUE + ELSE + WRITE(mesg,*) 'WARNING, FRC_URB2D = 0 BUT IVGTYP IS URBAN' + WRITE_MESSAGE(mesg) + WRITE(mesg,*) 'WARNING, THE URBAN FRACTION WILL BE READ FROM URBPARM.TBL' + WRITE_MESSAGE(mesg) + FRC_URB2D(I,J) = FRC_URB_TBL(UTYPE_URB) + ENDIF + SWITCH_URB=1 ENDIF + IF (SWITCH_URB==1) THEN CONTINUE ELSE @@ -2837,23 +3171,39 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, TRB_URB4D(I,:,J)=TBLEND_TBL(UTYPE_URB2D(I,J)) TW1_URB4D(I,:,J)=TBLEND_TBL(UTYPE_URB2D(I,J)) TW2_URB4D(I,:,J)=TBLEND_TBL(UTYPE_URB2D(I,J)) + TRV_URB4D(I,:,J)=TBLEND_TBL(UTYPE_URB2D(I,J)) ELSE TRB_URB4D(I,:,J)=tlayer0_urb(I,1,J) TW1_URB4D(I,:,J)=tlayer0_urb(I,1,J) TW2_URB4D(I,:,J)=tlayer0_urb(I,1,J) + TRV_URB4D(I,:,J)=tlayer0_urb(I,1,J) !GRZ ENDIF TGB_URB4D(I,:,J)=tlayer0_urb(I,1,J) SFW1_URB3D(I,:,J)=0. SFW2_URB3D(I,:,J)=0. SFR_URB3D(I,:,J)=0. SFG_URB3D(I,:,J)=0. - + QR_URB4D(I,:,J)=SMOIS_URB(I,1,J) + DRAIN_URB4D(I,:,J)=0. !GRZ + SFRV_URB3D(I,:,J)=0. !GRZ + LFRV_URB3D(I,:,J)=0. !GRZ + DGR_URB3D(I,:,J)=0. !GRZ + DG_URB3D(I,:,J)=0. + LFR_URB3D(I,:,J)=0. + LFG_URB3D(I,:,J)=0. + QGR_URB3D(I,J)=SMOIS_URB(I,1,J) !GRZ + TGR_URB3D(I,J)=0. + DRAINGR_URB3D(I,J)=0. !GRZ + ! print*,'IX',I,'IY',J,'QR_URB4D(I,:,J)',QR_URB4D(I,:,J),' QGR_URB3D(I,J)', QGR_URB3D(I,J),'TRV_URB4D(I,:,J)',TRV_URB4D(I,:,J) ENDIF if (SF_URBAN_PHYSICS.EQ.3) then LF_AC_URB3D(I,J)=0. SF_AC_URB3D(I,J)=0. CM_AC_URB3D(I,J)=0. + EP_PV_URB3D(I,J)=0. + T_PV_URB3D(I,:,J)=tlayer0_urb(I,1,J) + TGR_URB3D(I,J)=tlayer0_urb(I,1,J) SFVENT_URB3D(I,J)=0. LFVENT_URB3D(I,J)=0. @@ -2933,6 +3283,10 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP, WRITE_MESSAGE(mesg) write(mesg,*) 'CM_AC_URB3D', CM_AC_URB3D(I,J) WRITE_MESSAGE(mesg) + write(mesg,*) 'EP_PV_URB3D', EP_PV_URB3D(I,J) + WRITE_MESSAGE(mesg) + write(mesg,*) 'DRAINGR_URB3D',DRAINGR_URB3D(I,J) + WRITE_MESSAGE(mesg) write(mesg,*) 'SFVENT_URB3D', SFVENT_URB3D(I,J) WRITE_MESSAGE(mesg) write(mesg,*) 'LFVENT_URB3D', LFVENT_URB3D(I,J) diff --git a/phys/module_surface_driver.F b/phys/module_surface_driver.F index d082f547ad..6f434af4d0 100644 --- a/phys/module_surface_driver.F +++ b/phys/module_surface_driver.F @@ -1,4 +1,3 @@ -!WRF:MEDIATION_LAYER:PHYSICS ! MODULE module_surface_driver CONTAINS @@ -46,7 +45,7 @@ SUBROUTINE surface_driver( & #endif & ,albbck,embck,lh,sh2o,shdmax,shdmin,z0 & & ,flqc,flhc,psfc,sst,sst_input,sstsk,dtw,sst_update,sst_skin & - & ,scm_force_skintemp,scm_force_flux,t2,emiss & + & ,scm_force_skintemp,scm_force_flux,t2,emiss & & ,sf_sfclay_physics,sf_surface_physics,ra_lw_physics & & ,bl_pbl_physics & & ,mosaic_lu,mosaic_soil & @@ -176,7 +175,7 @@ SUBROUTINE surface_driver( & & ,flxhumr_urb2d,flxhumb_urb2d,flxhumg_urb2d & !H urban & ,trl_urb3d,tbl_urb3d,tgl_urb3d & !H urban & ,sh_urb2d,lh_urb2d,g_urb2d,rn_urb2d,ts_urb2d & !H urban - & ,frc_urb2d, utype_urb2d & !H urban + & ,frc_urb2d, utype_urb2d,swddir,swddif & !H urban & ,cmr_sfcdif,chr_sfcdif,cmc_sfcdif,chc_sfcdif & & ,cmgr_sfcdif,chgr_sfcdif & !-----SSiB LSM (fds 06/2010)--------------------------------------------------- @@ -250,6 +249,7 @@ SUBROUTINE surface_driver( & & ,urban_map_wd & !multi-layer urban & ,urban_map_gbd & !multi-layer urban & ,urban_map_fbd & !multi-layer urban + & ,urban_map_zgrd & !multi-layer urban & ,num_urban_hi & !multi-layer urban & ,tsk_rural & !multi-layer urban & ,trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d & !multi-layer urban @@ -260,6 +260,12 @@ SUBROUTINE surface_driver( & & ,sfvent_urb3d,lfvent_urb3d & !multi-layer urban & ,sfwin1_urb3d,sfwin2_urb3d & !multi-layer urban & ,sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d & !multi-layer urban + & ,ep_pv_urb3d,t_pv_urb3d & !multi-layer urban GRZ + & ,trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d & !multi-layer urban GRZ + & ,drain_urb4d,draingr_urb3d & !multi-layer urban GRZ + & ,sfrv_urb3d,lfrv_urb3d & !multi-layer urban GRZ + & ,dgr_urb3d,dg_urb3d & !multi-layer urb;:an GRZ + & ,lfr_urb3d,lfg_urb3d & !multi-layer urban GRZ & ,lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d & !multi-layer urban & ,mh_urb2d,stdh_urb2d,lf_urb2d & & ,a_u_bep,a_v_bep,a_t_bep,a_q_bep & @@ -348,7 +354,7 @@ SUBROUTINE surface_driver( & USE module_sf_qnsesfc USE module_sf_gfs USE module_sf_noahdrv ! danli mosaic, the " ,only : lsm " needs to be deleted - USE module_sf_noahlsm, only : LOW_DENSITY_RESIDENTIAL, HIGH_DENSITY_RESIDENTIAL, HIGH_INTENSITY_INDUSTRIAL + USE module_sf_noahlsm, only : LCZ_1,LCZ_2,LCZ_3,LCZ_4,LCZ_5,LCZ_6,LCZ_7,LCZ_8,LCZ_9,LCZ_10,LCZ_11 USE module_sf_noahmpdrv, only : noahmplsm, noahmp_urban USE module_sf_noahmp_groundwater USE module_sf_noah_seaice_drv @@ -654,6 +660,7 @@ SUBROUTINE surface_driver( & REAL, DIMENSION( ims:ime , 1:num_soil_layers, jms:jme ), INTENT(OUT) :: SMCREL REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ):: GLW REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: GSW,SWDOWN + REAL, OPTIONAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN):: SWDDIR,SWDDIF REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ):: HT REAL, DIMENSION( ims:ime , jms:jme ), INTENT(IN ):: RAINCV REAL, DIMENSION( ims:ime , jms:jme ), INTENT(INOUT):: SST @@ -929,6 +936,7 @@ SUBROUTINE surface_driver( & INTEGER , INTENT(IN) :: urban_map_wd INTEGER , INTENT(IN) :: urban_map_gbd INTEGER , INTENT(IN) :: urban_map_fbd + INTEGER , INTENT(IN) :: urban_map_zgrd INTEGER, INTENT(IN ):: NUM_URBAN_HI REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: tsk_rural REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zrd, jms:jme ), INTENT(INOUT) :: trb_urb4d @@ -952,6 +960,20 @@ SUBROUTINE surface_driver( & REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zd, jms:jme ), INTENT(INOUT) :: sfw2_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: sfr_urb3d REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ), INTENT(INOUT) :: sfg_urb3d + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: ep_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ), INTENT(INOUT) :: t_pv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: trv_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zgrd, jms:jme ),INTENT(INOUT) :: qr_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: qgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime,jms:jme ), INTENT(INOUT) :: tgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: drain_urb4d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(INOUT) :: draingr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: sfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfrv_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: dgr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: dg_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:urban_map_zdf, jms:jme ),INTENT(INOUT) :: lfr_urb3d !GRZ + REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_ndm, jms:jme ),INTENT(INOUT) :: lfg_urb3d !GRZ REAL, OPTIONAL, DIMENSION( ims:ime, 1:num_urban_hi, jms:jme ), INTENT(IN) :: hi_urb2d !urban REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: lp_urb2d !urban REAL, OPTIONAL, DIMENSION( ims:ime, jms:jme ), INTENT(IN) :: lb_urb2d !urban @@ -2720,6 +2742,7 @@ SUBROUTINE surface_driver( & urban_map_wd, & !I multi-layer urban urban_map_gbd, & !I multi-layer urban urban_map_fbd, & !I multi-layer urban + urban_map_zgrd, & !I multi-layer urban num_urban_hi, & !I multi-layer urban tsk_rural, & !H multi-layer urban trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & !H multi-layer urban @@ -2730,6 +2753,10 @@ SUBROUTINE surface_driver( & sfvent_urb3d,lfvent_urb3d, & !H multi-layer urban sfwin1_urb3d,sfwin2_urb3d, & !H multi-layer urban sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & !H multi-layer urban + ep_pv_urb3d,t_pv_urb3d, & !GRZ + trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d, & !GRZ + drain_urb4d,draingr_urb3d,sfrv_urb3d, & !GRZ + lfrv_urb3d,dgr_urb3d,dg_urb3d,lfr_urb3d,lfg_urb3d,& !GRZ lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & !H multi-layer urban mh_urb2d,stdh_urb2D,lf_urb2d, & !SLUCM th_phy,rho,p_phy,ust, & !I multi-layer urban @@ -2834,6 +2861,7 @@ SUBROUTINE surface_driver( & urban_map_wd, & !I multi-layer urban urban_map_gbd, & !I multi-layer urban urban_map_fbd, & !I multi-layer urban + urban_map_zgrd, & !I multi-layer urban num_urban_hi, & !I multi-layer urban tsk_rural, & !H multi-layer urban trb_urb4d,tw1_urb4d,tw2_urb4d,tgb_urb4d, & !H multi-layer urban @@ -2844,6 +2872,11 @@ SUBROUTINE surface_driver( & sfvent_urb3d,lfvent_urb3d, & !H multi-layer urban sfwin1_urb3d,sfwin2_urb3d, & !H multi-layer urban sfw1_urb3d,sfw2_urb3d,sfr_urb3d,sfg_urb3d, & !H multi-layer urban + ep_pv_urb3d,t_pv_urb3d, & !GRZ + trv_urb4d,qr_urb4d,qgr_urb3d,tgr_urb3d, & !GRZ + drain_urb4d,draingr_urb3d,sfrv_urb3d, & !GRZ + lfrv_urb3d,dgr_urb3d,dg_urb3d,lfr_urb3d,lfg_urb3d,& !GRZ + swddir,swddif, & !H multi-layer urban lp_urb2d,hi_urb2d,lb_urb2d,hgt_urb2d, & !H multi-layer urban mh_urb2d,stdh_urb2D,lf_urb2d, & !SLUCM th_phy,rho,p_phy,ust, & !I multi-layer urban @@ -2949,10 +2982,10 @@ SUBROUTINE surface_driver( & IF(SF_URBAN_PHYSICS.eq.1) THEN DO j=j_start(ij),j_end(ij) !urban DO i=i_start(ij),i_end(ij) !urban - IF( IVGTYP(I,J) == ISURBAN .or. & - IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & !urban - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or.& - IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN !urban + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 )THEN U10(I,J) = U10_URB2D(I,J) !urban V10(I,J) = V10_URB2D(I,J) !urban PSIM(I,J) = PSIM_URB2D(I,J) !urban @@ -2969,10 +3002,10 @@ SUBROUTINE surface_driver( & IF((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.eq.3)) THEN DO j=j_start(ij),j_end(ij) !urban DO i=i_start(ij),i_end(ij) !urban - IF( IVGTYP(I,J) == ISURBAN .or. & - IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & !urban - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. & - IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL) THEN !urban + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN T2(I,J) = TH_PHY(i,1,j)/((1.E5/PSFC(I,J))**RCP) !urban TH2(I,J) = TH_PHY(i,1,j) !urban Q2(I,J) = qv_curr(i,1,j) !urban @@ -3082,7 +3115,7 @@ SUBROUTINE surface_driver( & IZ0TLND, SF_URBAN_PHYSICS, & SOILCOMP, SOILCL1, SOILCL2, SOILCL3, SOILCL4, & T_PHY, QV_CURR, U_PHY, V_PHY, SWDOWN, GLW, & - P8W, RAINBL, SR, & + SWDDIR, SWDDIF, P8W, RAINBL, SR, & TSK, HFX, QFX, LH, GRDFLX, SMSTAV, & SMSTOT,SFCRUNOFF, UDRUNOFF, ALBEDO, SNOWC, SMOIS, & SH2O, TSLB, SNOW, SNOWH, CANWAT, ACSNOM, & @@ -3118,7 +3151,8 @@ SUBROUTINE surface_driver( & call noahmp_urban (sf_urban_physics, NUM_SOIL_LAYERS, IVGTYP,ITIMESTEP, & ! IN : Model configuration DT, COSZEN, XLAT_URB2D, & ! IN : Time/Space-related T_PHY, QV_CURR, U_PHY, V_PHY, SWDOWN, & ! IN : Forcing - GLW, P8W, RAINBL, DZ8W, ZNT, & ! IN : Forcing + GLW, SWDDIR, SWDDIF, & + P8W, RAINBL, DZ8W, ZNT, & ! IN : Forcing TSK, HFX, QFX, LH, GRDFLX, & ! IN/OUT : LSM ALBEDO, EMISS, QSFC, & ! IN/OUT : LSM ids,ide, jds,jde, kds,kde, & @@ -3145,7 +3179,7 @@ SUBROUTINE surface_driver( & chs, chs2, cqs2, & !H num_urban_ndm, urban_map_zrd, urban_map_zwd, urban_map_gd, & !I multi-layer urban urban_map_zd, urban_map_zdf, urban_map_bd, urban_map_wd, & !I multi-layer urban - urban_map_gbd, urban_map_fbd, & !I multi-layer urban + urban_map_gbd, urban_map_fbd, urban_map_zgrd, & !I multi-layer urban num_urban_hi, & !I multi-layer urban trb_urb4d, tw1_urb4d, tw2_urb4d, tgb_urb4d, & !H multi-layer urban tlev_urb3d, qlev_urb3d, & !H multi-layer urban @@ -3155,6 +3189,10 @@ SUBROUTINE surface_driver( & sfvent_urb3d, lfvent_urb3d, & !H multi-layer urban sfwin1_urb3d, sfwin2_urb3d, & !H multi-layer urban sfw1_urb3d, sfw2_urb3d, sfr_urb3d, sfg_urb3d, & !H multi-layer urban + ep_pv_urb3d, t_pv_urb3d, & !GRZ + trv_urb4d, qr_urb4d, qgr_urb3d, tgr_urb3d, & !GRZ + drain_urb4d, draingr_urb3d, sfrv_urb3d, lfrv_urb3d, & !GRZ + dgr_urb3d, dg_urb3d, lfr_urb3d, lfg_urb3d, & !GRZ lp_urb2d, hi_urb2d, lb_urb2d, hgt_urb2d, & !H multi-layer urban mh_urb2d, stdh_urb2d, lf_urb2d, & !SLUCM th_phy, rho, p_phy, ust, & !I multi-layer urban @@ -3280,12 +3318,11 @@ SUBROUTINE surface_driver( & T2(I,J) = TSK(I,J) - HFX(I,J)/(PSFC(I,J)/(R_d * TSK(I,J))*CP*CHS2(I,J)) ENDIF TH2(I,J) = T2(I,J)*(1.E5/PSFC(I,J))**RCP -! ELSEIF (IVGTYP(I,J) == ISURBAN .OR. IVGTYP(I,J) == ISICE .OR. FVEGXY(I,J) == 0.0 ) THEN - ELSEIF (IVGTYP(I,J) == ISURBAN .or. & - IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & !urban - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. & !urban - IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL .or. & !urban - (IVGTYP(I,J) == ISICE .AND. XICE(I,J) .LT. XICE_THRESHOLD)) THEN + ELSEIF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 .or. & + (IVGTYP(I,J) == ISICE .AND. XICE(I,J) .LT. XICE_THRESHOLD)) THEN Q2(I,J) = Q2MBXY(I,J) T2(I,J) = T2MBXY(I,J) TH2(I,J) = T2(i,j)*(1.E5/PSFC(i,j))**RCP @@ -3308,8 +3345,10 @@ SUBROUTINE surface_driver( & IF(SF_URBAN_PHYSICS.eq.1) THEN DO j=j_start(ij),j_end(ij) !urban DO i=i_start(ij),i_end(ij) !urban - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & !urban - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL ) THEN !urban + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN Q2(I,J) = (FVEGXY(I,J)*Q2MVXY(I,J) + (1.-FVEGXY(I,J))*Q2MBXY(I,J))*(1.-FRC_URB2D(I,J)) + & Q2_URB2D(I,J)*FRC_URB2D(I,J) T2(I,J) = (FVEGXY(I,J)*T2MVXY(I,J) + (1.-FVEGXY(I,J))*T2MBXY(I,J))*(1.-FRC_URB2D(I,J)) + & @@ -3330,8 +3369,10 @@ SUBROUTINE surface_driver( & IF((SF_URBAN_PHYSICS.eq.2).OR.(SF_URBAN_PHYSICS.eq.3)) THEN DO j=j_start(ij),j_end(ij) !urban DO i=i_start(ij),i_end(ij) !urban - IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LOW_DENSITY_RESIDENTIAL .or. & !urban - IVGTYP(I,J) == HIGH_DENSITY_RESIDENTIAL .or. IVGTYP(I,J) == HIGH_INTENSITY_INDUSTRIAL ) THEN !urban + IF( IVGTYP(I,J) == ISURBAN .or. IVGTYP(I,J) == LCZ_1 .or. IVGTYP(I,J) == LCZ_2 .or. & + IVGTYP(I,J) == LCZ_3 .or. IVGTYP(I,J) == LCZ_4 .or. IVGTYP(I,J) == LCZ_5 .or. & + IVGTYP(I,J) == LCZ_6 .or. IVGTYP(I,J) == LCZ_7 .or. IVGTYP(I,J) == LCZ_8 .or. & + IVGTYP(I,J) == LCZ_9 .or. IVGTYP(I,J) == LCZ_10 .or. IVGTYP(I,J) == LCZ_11 ) THEN T2(I,J) = TH_PHY(i,1,j)/((1.E5/PSFC(I,J))**RCP) !urban TH2(I,J) = TH_PHY(i,1,j) !urban Q2(I,J) = qv_curr(i,1,j) !urban diff --git a/run/LANDUSE.TBL b/run/LANDUSE.TBL index ab49b87939..7c7aadf4d8 100644 --- a/run/LANDUSE.TBL +++ b/run/LANDUSE.TBL @@ -29,7 +29,7 @@ WINTER 12, 12., .50, .95, 50., 5., 1.66, 29.2e5,'Tropical or subtropical forest' 13, 20., .15, .92, 15., 3., 2.00, 25.0e5,'Savannah' USGS -33,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' +41,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' SUMMER 1, 15., .10, .88, 80., 3., 1.67, 18.9e5,'Urban and Built-Up Land' 2, 17., .30, .985, 15., 4., 2.71, 25.0e5,'Dryland Cropland and Pasture' @@ -61,9 +61,17 @@ SUMMER 28, 15., .02, .88, 80., 3., 1.67, 18.9e5,'Unassigned' 29, 15., .02, .88, 80., 3., 1.67, 18.9e5,'Unassigned' 30, 15., .10, .88, 80., 3., 1.67, 18.9e5,'Unassigned' -31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'Low Intensity Residential ' -32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'High Intensity Residential' -33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'Industrial or Commercial' +31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_1' +32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_2' +33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_3' +34, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_4' +35, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_5' +36, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_6' +37, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_7' +38, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_8' +39, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_9' +40, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_10' +41, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_11' WINTER 1, 15., .10, .88, 80., 3., 1.67, 18.9e5,'Urban and Built-Up Land' 2, 20., .60, .92, 5., 4., 2.00, 25.0e5,'Dryland Cropland and Pasture' @@ -95,11 +103,19 @@ WINTER 28, 15., .02, .88, 80., 3., 1.67, 18.9e5,'Unassigned' 29, 15., .02, .88, 80., 3., 1.67, 18.9e5,'Unassigned' 30, 15., .10, .88, 80., 3., 1.67, 18.9e5,'Unassigned' -31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'Low Intensity Residential ' -32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'High Intensity Residential' -33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'Industrial or Commercial' +31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_1' +32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_2' +33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_3' +34, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_4' +35, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_5' +36, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_6' +37, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_7' +38, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_8' +39, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_9' +40, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_10' +41, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_11' MODIFIED_IGBP_MODIS_NOAH -33,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' +41,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' SUMMER 1, 12., .30, .95, 50., 4., 3.33, 29.2e5, 'Evergreen Needleleaf Forest' 2, 12., .50, .95, 50., 5., 1.67, 29.2e5, 'Evergreen Broadleaf Forest' @@ -131,9 +147,17 @@ SUMMER 28, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 29, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 30, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' -31, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Low Intensity Residential ' -32, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'High Intensity Residential' -33, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Industrial or Commercial' +31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_1' +32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_2' +33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_3' +34, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_4' +35, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_5' +36, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_6' +37, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_7' +38, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_8' +39, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_9' +40, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_10' +41, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_11' WINTER 1, 12., .60, .95, 50., 5., 3.00, 29.2e5, 'Evergreen Needleleaf Forest' 2, 12., .50, .95, 50., 5., 1.67, 29.2e5, 'Evergreen Broadleaf Forest' @@ -165,9 +189,17 @@ WINTER 28, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 29, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 30, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' -31, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Low Intensity Residential ' -32, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'High Intensity Residential' -33, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Industrial or Commercial' +31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_1' +32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_2' +33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_3' +34, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_4' +35, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_5' +36, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_6' +37, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_7' +38, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_8' +39, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_9' +40, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_10' +41, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_11' SiB 16,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' SUMMER @@ -211,7 +243,7 @@ ALL-SEASON 2, 8., 1.0, .98, 0.01, 6., 0., 9.0e25,'Water' 3, 70., .95, .95, 5., 5., 0., 9.0e25,'Snow or Ice' MODIS -33,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' +41,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' SUMMER 1, 12., .30, .95, 50., 4., 3.33, 29.2e5, 'Evergreen Needleleaf Forest' 2, 12., .50, .95, 50., 5., 1.67, 29.2e5, 'Evergreen Broadleaf Forest' @@ -243,9 +275,17 @@ SUMMER 28, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 29, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 30, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' -31, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Low Intensity Residential ' -32, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'High Intensity Residential' -33, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Industrial or Commercial' +31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_1' +32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_2' +33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_3' +34, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_4' +35, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_5' +36, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_6' +37, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_7' +38, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_8' +39, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_9' +40, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_10' +41, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_11' WINTER 1, 12., .60, .95, 50., 5., 3.00, 29.2e5, 'Evergreen Needleleaf Forest' 2, 12., .50, .95, 50., 5., 1.67, 29.2e5, 'Evergreen Broadleaf Forest' @@ -277,9 +317,17 @@ WINTER 28, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 29, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' 30, 15., .02, .88, 80., 3., 1.67, 18.9e5, 'Unassigned' -31, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Low Intensity Residential ' -32, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'High Intensity Residential' -33, 10., .10, .97, 80., 3., 1.67, 18.9e5, 'Industrial or Commercial' +31, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_1' +32, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_2' +33, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_3' +34, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_4' +35, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_5' +36, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_6' +37, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_7' +38, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_8' +39, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_9' +40, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_10' +41, 10., .10, .97, 80., 3., 1.67, 18.9e5,'LCZ_11' SSIB 24,2, 'ALBD SLMO SFEM SFZ0 THERIN SCFX SFHC ' SUMMER diff --git a/run/MPTABLE.TBL b/run/MPTABLE.TBL index be26e9b248..9c9c32b9a5 100644 --- a/run/MPTABLE.TBL +++ b/run/MPTABLE.TBL @@ -39,9 +39,18 @@ ISCROP = 2 EBLFOREST = 13 NATURAL = 5 - LOW_DENSITY_RESIDENTIAL = 31 - HIGH_DENSITY_RESIDENTIAL = 32 - HIGH_INTENSITY_INDUSTRIAL = 33 + LCZ_1 = 31 + LCZ_2 = 32 + LCZ_3 = 33 + LCZ_4 = 34 + LCZ_5 = 35 + LCZ_6 = 36 + LCZ_7 = 37 + LCZ_8 = 38 + LCZ_9 = 39 + LCZ_10 = 40 + LCZ_11 = 41 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 @@ -183,9 +192,17 @@ ISCROP = 12 EBLFOREST = 2 NATURAL = 14 - LOW_DENSITY_RESIDENTIAL = 31 - HIGH_DENSITY_RESIDENTIAL = 32 - HIGH_INTENSITY_INDUSTRIAL = 33 + LCZ_1 = 31 + LCZ_2 = 32 + LCZ_3 = 33 + LCZ_4 = 34 + LCZ_5 = 35 + LCZ_6 = 36 + LCZ_7 = 37 + LCZ_8 = 38 + LCZ_9 = 39 + LCZ_10 = 40 + LCZ_11 = 41 !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 diff --git a/run/URBPARM.TBL b/run/URBPARM.TBL index 3ea29a1634..c989f57fe4 100644 --- a/run/URBPARM.TBL +++ b/run/URBPARM.TBL @@ -467,6 +467,44 @@ HSEQUIP: 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 HSEQUIP_SCALE_FACTOR: 16.00, 20.00, 36.00 + +# +# GR_FLAG: Flag to turn on green roof module +# (sf_urban_physics=3) +# + +GR_FLAG:1 + +# +# GR_TYPE: Kind of vegetation for the greeen roof (1 for grass, 2 for sedum) +# (sf_urban_physics=3) +# + +GR_TYPE:1 +# +# GR_FRAC_ROOF: Surface fraction of green roof over urban rooftop (0-1) +# (sf_urban_physics=3) +# + +GR_FRAC_ROOF: 0.,1.,0. + +# +# IRHO: Irrigation rate for green roof (0 for no irrigation, 1 for 25 L/m^2/week. Intermediate values are accepted) +# (sf_urban_physics=3) +# + +IRHO:0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0. + +# +# PV_FRAC_ROOF: Surface fraction of photovoltaic panels over urban rooftop (0-1) +# (sf_urban_physics=3) +# + +PV_FRAC_ROOF: 0.,0.,0. + + + + STREET PARAMETERS: # (sf_urban_physics=2,3) diff --git a/run/URBPARM_LCZ.TBL b/run/URBPARM_LCZ.TBL new file mode 100644 index 0000000000..6120521a6c --- /dev/null +++ b/run/URBPARM_LCZ.TBL @@ -0,0 +1,650 @@ +# The parameters in this table may vary greatly from city to city. +# The default values are probably not appropriate for any given city. +# Users should adapt these values based on the city they are working +# with. + +# Urban Parameters depending on Urban type +# USGS + +Number of urban categories: 11 + +# +# Where there are multiple columns of values, the values refer, in +# order, to: 1) Low density residential, 2) High density residential, +# and 3) Commercial: I.e.: +# +# Index: 1 2 3 +# Type: Low-dens Res, Hi-dens Res, Commercial +# + +# +# ZR: Roof level (building height) [ m ] +# (sf_urban_physics=1) + +ZR: 37.5, 17.5, 6.5, 37.5, 17.5, 6.5, 3., 6.5, 6.5, 10., 10. + +# +# SIGMA_ZED: Standard Deviation of roof height [ m ] +# (sf_urban_physics=1) + +SIGMA_ZED: 4.0, 3.0, 1.0, 1., 1., 1., 1., 1., 1., 1., 1. + +# +# ROOF_WIDTH: Roof (i.e., building) width [ m ] +# (sf_urban_physics=1) + +ROOF_WIDTH: 31.7, 25.7, 17.6, 17.6, 17.6, 17.6, 17.6, 17.6, 17.6, 17.6, 10. + +# +# ROAD_WIDTH: road width [ m ] +# (sf_urban_physics=1) +# + +ROAD_WIDTH: 98.9, 39.2, 108.0, 108.0, 108.0, 108.0, 108.0, 108.0, 108.0, 108.0, 108.0 + +# +# AH: Anthropogenic heat [ W m{-2} ] +# (sf_urban_physics=1) +# + +AH: 175.0, 37.5, 37.5, 25.0, 12.5, 12.5, 17.5, 25.0, 5.0, 350.0, 350.0 + + +# +# ALH: Anthropogenic latent heat [ W m{-2} ] +# (sf_urban_physics=1) +# + +ALH: 20.0, 25.0, 40.0,20.0, 25.0, 40.0,20.0, 25.0, 40.0,20.0, 25.0 + +# +# AKANDA_URBAN: Coefficient modifying the Kanda approach to computing +# surface layer exchange coefficients. +# (sf_urban_physics=1) + +AKANDA_URBAN: 1.29 1.29 1.29 1.29 1.29 1.29 1.29 1.29 1.29 1.29 1.29 + +# +# DDZR: Thickness of each roof layer [ m ] +# This is currently NOT a function urban type, but a function +# of the number of layers. Number of layers must be 4, for now. +# (sf_urban_physics=1) + + +DDZR: 0.05, 0.05, 0.05, 0.05 + +# +# DDZB: Thickness of each building wall layer [ m ] +# This is currently NOT a function urban type, but a function +# of the number of layers. Number of layers must be 4, for now. +# (sf_urban_physics=1) +# + +DDZB: 0.05, 0.05, 0.05, 0.05 + +# +# DDZG: Thickness of each ground (road) layer [ m ] +# This is currently NOT a function urban type, but a function +# of the number of layers. Number of layers must be 4, for now. +# (sf_urban_physics=1) +# + +DDZG: 0.05, 0.25, 0.50, 0.75 + +# +# BOUNDR: Lower boundary condition for roof layer temperature [ 1: Zero-Flux, 2: T = Constant ] +# (sf_urban_physics=1) +# + +BOUNDR: 1 + +# +# BOUNDB: Lower boundary condition for wall layer temperature [ 1: Zero-Flux, 2: T = Constant ] +# (sf_urban_physics=1) +# + +BOUNDB: 1 + +# +# BOUNDG: Lower boundary condition for ground (road) layer temperature [ 1: Zero-Flux, 2: T = Constant ] +# (sf_urban_physics=1) +# + +BOUNDG: 1 + +# +# Ch of Wall and Road [ 1: M-O Similarity Theory, 2: Empirical Form of Narita et al., 1997 (recommended) ] +# (sf_urban_physics=1) +# + +CH_SCHEME: 2 + +# +# Surface and Layer Temperatures [ 1: 4-layer model, 2: Force-Restore method ] +# (sf_urban_physics=1) +# + +TS_SCHEME: 1 + +# +# AHOPTION [ 0: No anthropogenic heating, 1: Anthropogenic heating will be added to sensible heat flux term ] +# (sf_urban_physics=1) +# + +AHOPTION: 0 + +# +# Anthropogenic Heating diurnal profile. +# Multiplication factor applied to AH (as defined in the table above) +# Hourly values ( 24 of them ), starting at 01 hours Local Time. +# For sub-hourly model time steps, value changes on the hour and is +# held constant until the next hour. +# (sf_urban_physics=1) +# + +AHDIUPRF: 0.16 0.13 0.08 0.07 0.08 0.26 0.67 0.99 0.89 0.79 0.74 0.73 0.75 0.76 0.82 0.90 1.00 0.95 0.68 0.61 0.53 0.35 0.21 0.18 + +# +# ALHOPTION [ 0: No anthropogenic latent heat, 1: Anthropogenic heating will be added to latent heat flux term ] +# (sf_urban_physics=1) +# + +ALHOPTION: 0 + +# +# Anthropogenic latent heat: seasonal coefficient of daily maximum values +# From left to right in order: Spring (MAM), Summer(JJA), Fall(SON), Winter(DJF) +# (sf_urban_physics=1) +# + +ALHSEASON: 0.43 1.00 0.54 0.40 + +# +# Anthropogenic latent heat diurnal profile. +# Multiplication factor applied to seasonal ALH (as defined above) +# Half-hourly values ( 48 of them ), starting at 00:30 hours Local Time. +# (sf_urban_physics=1) +# + +ALHDIUPRF: 0.436 0.421 0.391 0.356 0.311 0.301 0.306 0.295 0.253 0.205 0.177 0.162 0.148 0.121 0.118 0.146 0.210 0.250 0.227 0.162 0.127 0.184 0.306 0.413 0.487 0.559 0.639 0.728 0.754 0.812 0.867 0.969 1.000 0.949 0.840 0.775 0.758 0.756 0.706 0.658 0.637 0.632 0.636 0.633 0.639 0.615 0.553 0.485 + +# Oasis effect +# Multiplication factor applied to potential ET of vegetation in urban areas +# Value should be larger than 1 when actived +# (sf_urban_physics=1) + +OASIS: 1.0 + +# Evaporation scheme for impervious surfaces (for roof, wall, and road) +# [1: Hypothesized evaporation during large rainfall events (Original) +# [2: Water-holding scheme over impervious surface, Yang et al., 2014 +# (sf_urban_physics=1) + +IMP_SCHEME: 1 + +# Porosity of pavement materials on impervious surface +# For calculating latent heat flux over impervious surface +# From left to right in order: roof, wall, road +# (sf_urban_physics=1,IMP_SCHEME=2) +# + +PORIMP: 0.45 0.45 0.45 + +# Maximum water-holding depth of pavement materials on impervious surface [m] +# For calculating latent heat flux over impervious surface +# From left to right in order: roof, wall, road +# (sf_urban_physics=1,IMP_SCHEME=2) +# + +DENGIMP: 0.001 0.0002 0.001 + +# Urban irrigation scheme, for vegetation in urban area and green roof +# [0: No irrigation +# [1: Summertime (May-Sep) irrigation everyday at 9pm +# (sf_urban_physics=1) + +IRI_SCHEME: 0 + +# +# GROPTION [ 0: No green roof, 1: Enable green roof simulation] +# (sf_urban_physics=1) +# + +GROPTION: 0 + +# Surface fraction of green roof over urban rooftop (0-1) +# (sf_urban_physics=1) +# + +FGR: 0.0 + +# +# DZGR: Thickness of each layer on green roof [ m ] +# Green roof structure: 4-layers +# 1: Top Soil layer 2:Soil layer 3: Growing Medium layer +# 4: concrete roof (depth depends on DDZR defined earlier in this table) +# (sf_urban_physics=1) + +DZGR: 0.05 0.10 0.15 0.20 + +# +# FRC_URB: Fraction of the urban landscape which does not have natural +# vegetation. [ Fraction ] +# (sf_urban_physics=1,2,3) +# + +FRC_URB: 1.00, 0.99, 1.00, 0.65, 0.7, 0.65, 0.99, 0.85, 0.3, 0.55, 1.00 + +# +# CAPR: Heat capacity of roof [ J m{-3} K{-1} ] +# (sf_urban_physics=1,2,3) +# + +CAPR: 1.32E6,1.32E6,1.32E6, 1.8E6, 1.32E6, 1.32E6, 1.32E6, 2.11E6, 1.32E6, 2.0E6, 1.94E6 + +# +# CAPB: Heat capacity of building wall [ J m{-3} K{-1} ] +# (sf_urban_physics=1,2,3) +# + +CAPB: 1.54E6,1.54E6,1.54E6, 2.0E6, 1.54E6, 1.54E6, 1.54E6, 2.11E6, 1.54E6, 1.59E6, 1.94E6 + +# +# CAPG: Heat capacity of ground (road) [ J m{-3} K{-1} ] +# (sf_urban_physics=1,2,3) +# + +CAPG: 1.74E6,1.74E6,1.74E6, 1.54E6, 1.74E6, 1.74E6, 1.74E6, 1.94E6, 1.47E6, 1.49E6, 1.94E6 + + +# +# AKSR: Thermal conductivity of roof [ J m{-1} s{-1} K{-1} ] +# (sf_urban_physics=1,2,3) +# + +AKSR: 1.54,1.54,1.54, 1.25, 1.54, 1.54, 1.54, 1.51, 1.00, 2.00, 0.75 + +# +# AKSB: Thermal conductivity of building wall [ J m{-1} s{-1} K{-1} ] +# (sf_urban_physics=1,2,3) +# + +AKSB: 1.51,1.51,1.51, 1.45, 1.51, 1.51,1.51,1.51,1.51, 1.33, 0.75 + +# +# AKSG: Thermal conductivity of ground (road) [ J m{-1} s{-1} K{-1} ] +# (sf_urban_physics=1,2,3) +# + +AKSG: 0.82, 0.82, 0.82, 0.64, 0.82, 0.82, 0.82, 0.82, 0.60, 0.75, 0.75 + +# +# ALBR: Surface albedo of roof [ fraction ] +# (sf_urban_physics=1,2,3) +# + +ALBR: 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.30, 0.12 + +# +# ALBB: Surface albedo of building wall [ fraction ] +# (sf_urban_physics=1,2,3) +# + +ALBB: 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.12 + +# +# ALBG: Surface albedo of ground (road) [ fraction ] +# (sf_urban_physics=1,2,3) +# + +ALBG: 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15 + +# +# EPSR: Surface emissivity of roof [ - ] +# (sf_urban_physics=1,2,3) +# + +EPSR: 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.93 + +# +# EPSB: Surface emissivity of building wall [-] +# (sf_urban_physics=1,2,3) +# + +EPSB: 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.93, 0.90, 0.90, 0.93 + +# +# EPSG: Surface emissivity of ground (road) [ - ] +# (sf_urban_physics=1,2,3) +# + +EPSG: 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95 + +# +# Z0B: Roughness length for momentum, over building wall [ m ] +# Only active for CH_SCHEME == 1 +# (sf_urban_physics=1) +# + +Z0B: 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001, 0.0001 + +# +# Z0G: Roughness length for momentum, over ground (road) [ m ] +# Only active for CH_SCHEME == 1 +# (sf_urban_physics=1,2,3) +# + +Z0G: 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01 + +# +# Z0R: Roughness length for momentum over roof [ m ] +# (sf_urban_physics=2,3) +# + +Z0R: 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01 + +# +# TRLEND: Lower boundary condition for roof temperature [ K ] +# (sf_urban_physics=1,2,3) +# + + +TRLEND: 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00 + +# +# TBLEND: Lower boundary temperature for building wall temperature [ K ] +# (sf_urban_physics=1,2,3) +# + +TBLEND: 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00 + +# +# TGLEND: Lower boundary temperature for ground (road) temperature [ K ] +# (sf_urban_physics=1,2,3) +# + +TGLEND: 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00, 293.00 +# +# COP: Coefficient of performance of the A/C systems [ - ] +# (sf_urban_physics=3) +# + +COP: 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5 + +# +# BLDAC_FRC: fraction of buildings installed with A/C systems [ - ] +# (sf_urban_physics=3) +# + +BLDAC_FRC: 1.0, 1.0, 1.0,1.0, 1.0, 1.0,1.0, 1.0, 1.0,1.0, 1.0 + +# +# COOLED_FRC: fraction of cooled floor area in buildings [ - ] +# (sf_urban_physics=3) +# +COOLED_FRC: 1.0, 1.0, 1.0,1.0, 1.0, 1.0,1.0, 1.0, 1.0,1.0, 1.0 + +# +# PWIN: Coverage area fraction of windows in the walls of the building [ - ] +# (sf_urban_physics=3) +# + +PWIN: 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.0 + +# +# BETA: Thermal efficiency of heat exchanger +# (sf_urban_physics=3) +# + +BETA: 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75 + +# +# SW_COND: Air conditioning switch, 1=ON +# (sf_urban_physics=3) +# + +SW_COND: 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 + +# +# TIME_ON: Initial local time of A/C systems, [ h ] +# (sf_urban_physics=3) +# + +TIME_ON: 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0. + +# +# TIME_OFF: End local time of A/C systems, [ h ] +# (sf_urban_physics=3) +# + +TIME_OFF: 24., 24., 24., 24., 24., 24., 24., 24., 24., 24., 24. + +# +# TARGTEMP: Target Temperature of the A/C systems, [ K ] +# (sf_urban_physics=3) +# + +TARGTEMP: 294.15, 294.15, 294.15, 294.15, 294.15, 294.15, 294.15, 294.15, 294.15, 294.15, 294.15 +# +# GAPTEMP: Comfort Range of the indoor Temperature, [ K ] +# (sf_urban_physics=3) +# + +GAPTEMP: 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5 + +# +# TARGHUM: Target humidity of the A/C systems, [ Kg/Kg ] +# (sf_urban_physics=3) +# + +TARGHUM: 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005 + +# +# GAPHUM: Comfort Range of the specific humidity, [ Kg/Kg ] +# (sf_urban_physics=3) +# + +GAPHUM: 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005 + +# +# PERFLO: Peak number of occupants per unit floor area, [ person/m^2 ] +# (sf_urban_physics=3) +# + +PERFLO: 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.00 + +# +# HSEQUIP: Diurnal heating profile of heat generated by equipments +# (sf_urban_physics=3) +# + +HSEQUIP: 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 0.25 0.25 0.25 0.25 0.25 + +# +# HSEQUIP_SCALE_FACTOR: Peak heat generated by equipments, [ W/m^2 ] +# (sf_urban_physics=3) +# + +HSEQUIP_SCALE_FACTOR: 36.00, 20.00, 20.00, 36.00, 20.00, 20.00, 20.00, 36.00, 20.00, 20.00, 20.00 + +# +# GR_FLAG: Flag to turn on green roof module +# (sf_urban_physics=3) +# + +GR_FLAG:1 + +# +# GR_TYPE: Kind of vegetation for the greeen roof (1 for grass, 2 for sedum) +# (sf_urban_physics=3) +# + +GR_TYPE:1 +# +# GR_FRAC_ROOF: Surface fraction of green roof over urban rooftop (0-1) +# (sf_urban_physics=3) +# + +GR_FRAC_ROOF: 0.,1.,0.,0.,1.,1.,0.,0.,1.,0.,0. + +# +# IRHO: Irrigation rate for green roof (0 for no irrigation, 1 for 25 L/m^2/week. Intermediate values are accepted) +# (sf_urban_physics=3) +# + +IRHO:0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0. + +# +# PV_FRAC_ROOF: Surface fraction of photovoltaic panels over urban rooftop (0-1) +# (sf_urban_physics=3) +# + +PV_FRAC_ROOF: 0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0. + + +STREET PARAMETERS: +# (sf_urban_physics=2,3) + +# urban street street building +# category direction width width +# [index] [deg from N] [m] [m] + + 1 0.0 15. 12. + 1 90.0 15. 12. + 2 0.0 10. 20. + 2 90.0 10. 20. + 3 0.0 5.7 9. + 3 90.0 5.7 9. + 4 0.0 30.0 20. + 4 90.0 30.0 20. + 5 0.0 20.0 20. + 5 90.0 20.0 20. + 6 0.0 12.4 10.5 + 6 90.0 12.4 10.5 + 7 0.0 10. 20. + 7 90.0 10. 20. + 8 0.0 32.5 28.8 + 8 90.0 32.5 28.8 + 9 0.0 10. 10. + 9 90.0 10. 10. + 10 0.0 28.5 23.8 + 10 90.0 28.5 23.8 + 11 0.0 100. 5. + 11 90.0 100. 5. + + +END STREET PARAMETERS + +BUILDING HEIGHTS: 1 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 25.0 10.0 + 30.0 25.0 + 35.0 30.0 + 40.0 25.0 + 45.0 10.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 2 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 10.0 25.0 + 15.0 45.0 + 20.0 20.0 + 25.0 10.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 3 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 5.0 55.0 + 10.0 45.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 4 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 25.0 10.0 + 30.0 25.0 + 35.0 50.0 + 40.0 15.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 5 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 10.0 10.0 + 15.0 25.0 + 20.0 40.0 + 25.0 25.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 6 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 5.0 30.0 + 10.0 40.0 + 15.0 30.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 7 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 10.0 25.0 + 15.0 45.0 + 20.0 20.0 + 25.0 10.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 8 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 5.0 35.0 + 10.0 65.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 9 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 5.0 75.0 + 10.0 25.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 10 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 5.0 10.0 + 10.0 60.0 + 15.0 30.0 +END BUILDING HEIGHTS + +BUILDING HEIGHTS: 11 +# (sf_urban_physics=2,3) + +# height Percentage +# [m] [%] + 5.0 100.0 + +END BUILDING HEIGHTS + + diff --git a/run/VEGPARM.TBL b/run/VEGPARM.TBL index f623c8083d..930f5d0267 100644 --- a/run/VEGPARM.TBL +++ b/run/VEGPARM.TBL @@ -42,12 +42,28 @@ NATURAL 5 CROP 3 -LOW_DENSITY_RESIDENTIAL +LCZ_1 31 -HIGH_DENSITY_RESIDENTIAL +LCZ_2 32 -HIGH_INTENSITY_INDUSTRIAL +LCZ_3 33 +LCZ_4 +34 +LCZ_5 +35 +LCZ_6 +36 +LCZ_7 +37 +LCZ_8 +38 +LCZ_9 +39 +LCZ_10 +40 +LCZ_11 +41 Vegetation Parameters MODIFIED_IGBP_MODIS_NOAH 20,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' @@ -85,12 +101,28 @@ NATURAL 14 CROP 12 -LOW_DENSITY_RESIDENTIAL +LCZ_1 31 -HIGH_DENSITY_RESIDENTIAL +LCZ_2 32 -HIGH_INTENSITY_INDUSTRIAL +LCZ_3 33 +LCZ_4 +34 +LCZ_5 +35 +LCZ_6 +36 +LCZ_7 +37 +LCZ_8 +38 +LCZ_9 +39 +LCZ_10 +40 +LCZ_11 +41 Vegetation Parameters NLCD40 40,1, 'SHDFAC NROOT RS RGL HS SNUP MAXALB LAIMIN LAIMAX EMISSMIN EMISSMAX ALBEDOMIN ALBEDOMAX Z0MIN Z0MAX ZTOPV ZBOTV' @@ -148,11 +180,11 @@ NATURAL 14 CROP 12 -LOW_DENSITY_RESIDENTIAL +LCZ_1 24 -HIGH_DENSITY_RESIDENTIAL +LCZ_2 26 -HIGH_INTENSITY_INDUSTRIAL +LCZ_3 99 Vegetation Parameters USGS-RUC diff --git a/share/module_check_a_mundo.F b/share/module_check_a_mundo.F index db28b315a3..808a64e0a4 100644 --- a/share/module_check_a_mundo.F +++ b/share/module_check_a_mundo.F @@ -105,6 +105,10 @@ END FUNCTION bep_bem_ngb_u INTEGER FUNCTION bep_bem_nbui_max() END FUNCTION bep_bem_nbui_max + + INTEGER FUNCTION bep_bem_ngr_u() + END FUNCTION bep_bem_ngr_u + END INTERFACE @@ -407,6 +411,7 @@ END FUNCTION bep_bem_nbui_max model_config_rec % num_urban_nf = bep_bem_nf_u() model_config_rec % num_urban_ngb = bep_bem_ngb_u() model_config_rec % num_urban_nbui = bep_bem_nbui_max() + model_config_rec % num_urban_ngr = bep_bem_ngr_u() END IF ENDDO @@ -2835,6 +2840,10 @@ SUBROUTINE set_physics_rconfigs (model_config_rec%num_urban_nz - 1) * & model_config_rec%num_urban_nf * & model_config_rec%num_urban_nbui + model_config_rec%urban_map_zgrd = model_config_rec%num_urban_ndm * & + model_config_rec%num_urban_ngr * & + model_config_rec%num_urban_nz + END IF