Skip to content
Draft
10 changes: 10 additions & 0 deletions Registry/Registry.EM_COMMON
Original file line number Diff line number Diff line change
Expand Up @@ -834,6 +834,14 @@ state real LF_URB2D_S ij misc 1 - i01r "LF_UR
# AHE with month and hour dimension flattened to one dimension, Jan = (0:23), Feb = (24:47)
state real AHE i{m_hr}j misc 1 - i01r "AHE" "Anthropogenic heat emission" "W m-2"

# Additional urban model parameters - PK2025
state real ALBR_URB2D ij misc 1 - i01h "ALBR_URB2D" "surface albedo of roof" "-"
state real ALBB_URB2D ij misc 1 - i01h "ALBB_URB2D" "surface albedo of building wall" "-"
state real ALBG_URB2D ij misc 1 - i01h "ALBG_URB2D" "surface albedo of road" "-"
state real EPSR_URB2D ij misc 1 - i01h "EPSR_URB2D" "surface emissivity of roof" "-"
state real EPSB_URB2D ij misc 1 - i01h "EPSB_URB2D" "surface emissivity of building wall" "-"
state real EPSG_URB2D ij misc 1 - i01h "EPSG_URB2D" "surface emissivity of road" "-"

# lsm State Variables

state real SMOIS ilj - 1 Z i02rhd=(interp_mask_field:lu_index,iswater)u=(copy_fcnm) "SMOIS" "SOIL MOISTURE" "m3 m-3"
Expand Down Expand Up @@ -2552,6 +2560,8 @@ rconfig real convtrans_avglen_m namelist,physics 1 30
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 logical slucm_distributed_drag namelist,physics 1 .false. rh "slucm_distributed_drag" "" ""
rconfig character urb2d_additional_vars namelist,physics 6 "" - "additional explicit urban parameters. Comma-separated list of the following variables: ALBB, ALBR, ALBG, EPSB, EPSR, EPSG."
rconfig integer num_urb2d_additional_vars namelist,physics 1 0 - "number of additional explicit urban parameters supplied for the namelist option urb2d_additional_vars."
rconfig integer distributed_ahe_opt namelist,physics 1 0 rh "distributed_ahe_opt" "AHE handling: 0= no AHE, 1=add to first level temperature tendency, 2=add to surface sensible heat flux" ""
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"
Expand Down
3 changes: 3 additions & 0 deletions dyn_em/module_first_rk_step_part1.F
Original file line number Diff line number Diff line change
Expand Up @@ -777,6 +777,9 @@ SUBROUTINE first_rk_step_part1 ( grid , config_flags &
& ,TG_URB2D=grid%tg_urb2d & !H urban
& ,TC_URB2D=grid%tc_urb2d ,QC_URB2D=grid%qc_urb2d & !H urban
& ,UC_URB2D=grid%uc_urb2d & !H urban
& ,albr_urb2d=grid%albr_urb2d, albb_urb2d=grid%albb_urb2d & !I urban explicit radiation PK2025
& ,albg_urb2d=grid%albg_urb2d, epsr_urb2d=grid%epsr_urb2d & !I urban explicit radiation PK2025
& ,epsb_urb2d=grid%epsb_urb2d, epsg_urb2d=grid%epsg_urb2d & !I urban explicit radiation PK2025
& ,XXXR_URB2D=grid%xxxr_urb2d &
& ,XXXB_URB2D=grid%xxxb_urb2d & !H urban
& ,XXXG_URB2D=grid%xxxg_urb2d &
Expand Down
23 changes: 22 additions & 1 deletion phys/module_sf_clm.F
Original file line number Diff line number Diff line change
Expand Up @@ -58802,6 +58802,8 @@ subroutine clmdrv(zgcmxy ,forc_qxy ,ps ,forc_txy ,tsxy &
cmcr_urb2d,tgr_urb2d,tgrl_urb3d,smr_urb3d, & ! urban
drelr_urb2d,drelb_urb2d,drelg_urb2d, & ! urban
flxhumr_urb2d,flxhumb_urb2d,flxhumg_urb2d, &
albr_urb2d, albb_urb2d, albg_urb2d, & !I explicit radiation PK2025
epsr_urb2d, epsb_urb2d, epsg_urb2d, & !I explicit radiation PK2025
! subgrids
numc,nump,sabv,sabg,lwup,snl, &
snowdp,wtc,wtp,h2osno,t_grnd,t_veg, &
Expand Down Expand Up @@ -59228,6 +59230,15 @@ subroutine clmdrv(zgcmxy ,forc_qxy ,ps ,forc_txy ,tsxy &
REAL, DIMENSION(1:num_road_layers) :: TGL_URB ! road layer temp [K]
LOGICAL :: LSOLAR_URB

! Explicit radiation parameters PK2025
real :: albr_urb,albb_urb,albg_urb,epsr_urb,epsb_urb,epsg_urb
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albr_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albb_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albg_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsr_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsb_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsg_urb2d

!===Yang,2014/10/08,hydrological variable for single layer UCM===
INTEGER :: jmonth, jday
REAL :: DRELR_URB
Expand Down Expand Up @@ -60326,6 +60337,13 @@ subroutine clmdrv(zgcmxy ,forc_qxy ,ps ,forc_txy ,tsxy &
lf_urb_s = 0
z0_urb = 0
vegfrac = 0
! Explicit radiation parameters PK2025
albr_urb = albr_urb2d(i,j)
albb_urb = albb_urb2d(i,j)
albg_urb = albg_urb2d(i,j)
epsr_urb = epsr_urb2d(i,j)
epsb_urb = epsb_urb2d(i,j)
epsg_urb = epsg_urb2d(i,j)
!

! Call urban
Expand All @@ -60351,7 +60369,10 @@ subroutine clmdrv(zgcmxy ,forc_qxy ,ps ,forc_txy ,tsxy &
UST_URB,mh_urb, stdh_urb, lf_urb, lp_urb, & ! 0
!sw++
! hgt_urb,frc_urb,lb_urb, check)
hgt_urb,frc_urb,lb_urb, check,CMCR_URB,TGR_URB, & ! H
hgt_urb,frc_urb,lb_urb, check, & ! H
albr_urb, albb_urb,albg_urb, & ! I
epsr_urb,epsb_urb,epsg_urb, & ! I
CMCR_URB,TGR_URB, & ! H
TGRL_URB,SMR_URB,CMGR_URB, CHGR_URB, jmonth, & ! H
DRELR_URB,DRELB_URB, & ! H
DRELG_URB,FLXHUMR_URB,FLXHUMB_URB,FLXHUMG_URB, &
Expand Down
62 changes: 58 additions & 4 deletions phys/module_sf_noahdrv.F
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
!Optional Urban
TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !H urban
UC_URB2D, & !H urban
albr_urb2d, albb_urb2d, albg_urb2d, & !I urban explicit radiation PK2025
epsr_urb2d, epsb_urb2d, epsg_urb2d, & !I urban explicit radiation PK2025
XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !H urban
TRL_URB3D,TBL_URB3D,TGL_URB3D, & !H urban
SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,TS_URB2D, & !H urban
Expand Down Expand Up @@ -504,6 +506,15 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
REAL, DIMENSION(1:num_road_layers) :: TGL_URB ! road layer temp [K]
LOGICAL :: LSOLAR_URB

! Explicit radiation parameters PK2025
real :: albr_urb,albb_urb,albg_urb,epsr_urb,epsb_urb,epsg_urb
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albr_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albb_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albg_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsr_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsb_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsg_urb2d

!===Yang,2014/10/08,hydrological variable for single layer UCM===
INTEGER :: jmonth, jday, tloc
INTEGER :: IRIOPTION, USOIL, DSOIL
Expand Down Expand Up @@ -1428,6 +1439,14 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
z0_urb = z0_urb2d(I, J)
vegfrac = vegfra(I, J) / 100
!
! Explicit radiation parameters PK2025
albr_urb = albr_urb2d(i,j)
albb_urb = albb_urb2d(i,j)
albg_urb = albg_urb2d(i,j)
epsr_urb = epsr_urb2d(i,j)
epsb_urb = epsb_urb2d(i,j)
epsg_urb = epsg_urb2d(i,j)
!
! Call urban
CALL cal_mon_day(julian,julyr,jmonth,jday)
CALL urban(LSOLAR_URB, & ! I
Expand All @@ -1447,7 +1466,10 @@ SUBROUTINE lsm(DZ8W,QV3D,P8W3D,T3D,TSK, &
CMR_URB, CHR_URB, CMC_URB, CHC_URB, &
U10_URB, V10_URB, TH2_URB, Q2_URB, & ! O
UST_URB,mh_urb, stdh_urb, lf_urb, lp_urb, & ! 0
hgt_urb,frc_urb,lb_urb, check,CMCR_URB,TGR_URB, & ! H
hgt_urb,frc_urb,lb_urb, & ! H
albr_urb, albb_urb,albg_urb, & ! I
epsr_urb,epsb_urb,epsg_urb, & ! I
check,CMCR_URB,TGR_URB, & ! H
TGRL_URB,SMR_URB,CMGR_URB,CHGR_URB,jmonth, & ! H
DRELR_URB,DRELB_URB, & ! H
DRELG_URB,FLXHUMR_URB,FLXHUMB_URB,FLXHUMG_URB, &
Expand Down Expand Up @@ -2390,6 +2412,8 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
!Optional Urban
TR_URB2D,TB_URB2D,TG_URB2D,TC_URB2D,QC_URB2D, & !H urban
UC_URB2D, & !H urban
albr_urb2d, albb_urb2d, albg_urb2d, & !I urban explicit radiation PK2025
epsr_urb2d, epsb_urb2d, epsg_urb2d, & !I urban explicit radiation PK2025
XXXR_URB2D,XXXB_URB2D,XXXG_URB2D,XXXC_URB2D, & !H urban
TRL_URB3D,TBL_URB3D,TGL_URB3D, & !H urban
SH_URB2D,LH_URB2D,G_URB2D,RN_URB2D,TS_URB2D, & !H urban
Expand Down Expand Up @@ -2836,6 +2860,15 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
REAL, DIMENSION(1:num_road_layers) :: TGL_URB ! road layer temp [K]
LOGICAL :: LSOLAR_URB

! Explicit radiation parameters PK2025
real :: albr_urb,albb_urb,albg_urb,epsr_urb,epsb_urb,epsg_urb
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albr_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albb_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: albg_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsr_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsb_urb2d
real, optional, dimension( ims:ime, jms:jme ), intent(in) :: epsg_urb2d

!===Yang,2014/10/08,hydrological variable for single layer UCM===
INTEGER :: jmonth, jday, tloc
INTEGER :: IRIOPTION, USOIL, DSOIL
Expand Down Expand Up @@ -3883,6 +3916,14 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
lf_urb_s = lf_urb2d_s(I, J)
z0_urb = z0_urb2d(I, J)
vegfrac = vegfra(I, J) / 100.
! Explicit radiation parameters PK2025
albr_urb = albr_urb2d(i,j)
albb_urb = albb_urb2d(i,j)
albg_urb = albg_urb2d(i,j)
epsr_urb = epsr_urb2d(i,j)
epsb_urb = epsb_urb2d(i,j)
epsg_urb = epsg_urb2d(i,j)
!
!
! Call urban
CALL cal_mon_day(julian,julyr,jmonth,jday)
Expand All @@ -3903,7 +3944,10 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
CMR_URB, CHR_URB, CMC_URB, CHC_URB, &
U10_URB, V10_URB, TH2_URB, Q2_URB, & ! O
UST_URB,mh_urb, stdh_urb, lf_urb, lp_urb, & ! 0
hgt_urb,frc_urb,lb_urb, check,CMCR_URB,TGR_URB, & ! H
hgt_urb,frc_urb,lb_urb, & ! H
albr_urb, albb_urb,albg_urb, & ! I
epsr_urb,epsb_urb,epsg_urb, & ! I
check,CMCR_URB,TGR_URB, & ! H
TGRL_URB,SMR_URB,CMGR_URB,CHGR_URB,jmonth, & ! H
DRELR_URB,DRELB_URB, & ! H
DRELG_URB,FLXHUMR_URB,FLXHUMB_URB,FLXHUMG_URB, &
Expand Down Expand Up @@ -4762,7 +4806,14 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
lf_urb_s = lf_urb2d_s(I, J)
z0_urb = z0_urb2d(I, J)
vegfrac = vegfra(I, J) / 100.0

! Explicit radiation parameters PK2025
albr_urb = albr_urb2d(i,j)
albb_urb = albb_urb2d(i,j)
albg_urb = albg_urb2d(i,j)
epsr_urb = epsr_urb2d(i,j)
epsb_urb = epsb_urb2d(i,j)
epsg_urb = epsg_urb2d(i,j)
!
!
! Call urban
CALL cal_mon_day(julian,julyr,jmonth,jday)
Expand All @@ -4783,7 +4834,10 @@ SUBROUTINE lsm_mosaic(DZ8W,QV3D,P8W3D,T3D,TSK, &
CMR_URB, CHR_URB, CMC_URB, CHC_URB, &
U10_URB, V10_URB, TH2_URB, Q2_URB, & ! O
UST_URB,mh_urb, stdh_urb, lf_urb, lp_urb, & ! 0
hgt_urb,frc_urb,lb_urb, check,CMCR_URB,TGR_URB, & ! H
hgt_urb,frc_urb,lb_urb, & ! H
albr_urb, albb_urb,albg_urb, & ! I
epsr_urb,epsb_urb,epsg_urb, & ! I
check,CMCR_URB,TGR_URB, & ! H
TGRL_URB,SMR_URB,CMGR_URB,CHGR_URB,jmonth, & ! H
DRELR_URB,DRELB_URB, & ! H
DRELG_URB,FLXHUMR_URB,FLXHUMB_URB,FLXHUMG_URB, &
Expand Down
39 changes: 37 additions & 2 deletions phys/module_sf_urban.F
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ MODULE module_sf_urban
#define FATAL_ERROR(M) call wrf_error_fatal( M )
#define WRITE_MESSAGE(M) call wrf_message( M )
#endif

USE module_configure
USE module_model_constants, ONLY : piconst

!===============================================================================
Expand Down Expand Up @@ -289,6 +289,7 @@ MODULE module_sf_urban
! Kusaka et al. (2001) Bound.-Layer Meteor., vol.101, p329-358
!
! History:
! 2025/11, modified by Peter Kalverla (NL eScience Center)
! 2014/10, modified by Jiachuan Yang (ASU)
! 2006/06 modified by H. Kusaka (Univ. Tsukuba), M. Tewari
! 2005/10/26, modified by Fei Chen, Mukul Tewari
Expand Down Expand Up @@ -317,6 +318,8 @@ SUBROUTINE urban(LSOLAR, & ! L
CMR_URB,CHR_URB,CMC_URB,CHC_URB, & ! I/O
U10,V10,TH2,Q2,UST,mh_urb,stdh_urb,lf_urb, & ! O
lp_urb,hgt_urb,frc_urb,lb_urb,zo_check, & ! O
albr_urb, albb_urb,albg_urb, & ! I
epsr_urb,epsb_urb,epsg_urb, & ! I
CMCR,TGR,TGRL,SMR,CMGR_URB,CHGR_URB,jmonth, & ! H
DRELR,DRELB,DRELG,FLXHUMR,FLXHUMB,FLXHUMG, &
lf_urb_s, z0_urb, vegfrac_in)
Expand Down Expand Up @@ -399,6 +402,17 @@ SUBROUTINE urban(LSOLAR, & ! L
REAL, INTENT(INOUT) :: lb_urb ! building surface to plan area ratio [-]
REAL, INTENT(INOUT), DIMENSION(4) :: lf_urb ! frontal area index [-]
REAL, INTENT(INOUT) :: zo_check ! check for printing ZOC
!-------------------------------------------------------------------------------
! I: Additional spatially explicit urban model parameters - PK2025
!-------------------------------------------------------------------------------
REAL, INTENT(IN) :: albr_urb ! surface albedo of roof [-]
REAL, INTENT(IN) :: albb_urb ! surface albedo of building wall [-]
REAL, INTENT(IN) :: albg_urb ! surface albedo of road [-]
REAL, INTENT(IN) :: epsr_urb ! surface emissivity of roof [-]
REAL, INTENT(IN) :: epsb_urb ! surface emissivity of building wall [-]
REAL, INTENT(IN) :: epsg_urb ! surface emissivity of road [-]
CHARACTER(len=32) :: extra_var_name
INTEGER :: n_extra_vars

!-------------------------------------------------------------------------------
! I: Distributed aerodynamics parameters
Expand Down Expand Up @@ -789,6 +803,27 @@ SUBROUTINE urban(LSOLAR, & ! L

!End NUDAPT Modification

! PK2025, use spatially explicit radiation parameters if provided
CALL nl_get_num_urb2d_additional_vars(1, n_extra_vars)
do iteration = 1, n_extra_vars
CALL nl_get_urb2d_additional_vars(iteration, extra_var_name)
select case(trim(extra_var_name))
case('ALBB')
if (albb_urb /= -999.) ALBB=albb_urb
case('ALBR')
if (albr_urb /= -999.) ALBR=albr_urb
case('ALBG')
if (albg_urb /= -999.) ALBG=albg_urb
case('EPSB')
if (epsb_urb /= -999.) EPSB=epsb_urb
case('EPSR')
if (epsr_urb /= -999.) EPSR=epsr_urb
case('EPSG')
if (epsg_urb /= -999.) EPSG=epsg_urb
case default
write(*,*) 'WARNING: Unknown urb2d additional variable: ', trim(extra_var_name)
end select
end do

! Miao, 2007/01/17, cal. ah
if(ahoption==1) AH=AH*ahdiuprf(tloc)
Expand Down Expand Up @@ -2740,7 +2775,7 @@ SUBROUTINE urban_var_init(ISURBAN, TSURFACE0_URB,TLAYER0_URB,TDEEP0_URB,IVGTYP,
LH_URB2D(I,J)=0.
G_URB2D(I,J)=0.
RN_URB2D(I,J)=0.

!m
!FS FRC_URB2D(I,J)=0.
UTYPE_URB2D(I,J)=0
Expand Down
Loading