!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer,
! version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer
!version 3 or (at your option) any later version that should be found at:
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software;
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec),
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
! ##########################################################################
SUBROUTINE URBAN_SOLAR_ABS(PDIR_SW, PSCA_SW, PZENITH, &,1
PBLD, PWALL_O_HOR, PCAN_HW_RATIO, &
PALB_ROOF, &
PALB_ROAD, PSVF_ROAD, PALB_WALL, PSVF_WALL, &
PASNOW_ROOF, PASNOW_ROAD, &
PDN_ROOF, PDF_ROOF, PDN_ROAD, PDF_ROAD, &
PABS_SW_ROOF, PABS_SW_ROAD, PABS_SW_WALL, &
PABS_SW_SNOW_ROOF, PABS_SW_SNOW_ROAD, &
PDIR_ALB_TOWN, PSCA_ALB_TOWN )
! ##########################################################################
!
!!**** *URBAN_SOLAR_ABS*
!!
!! PURPOSE
!! -------
!
! Computes the solar radiation flux absorbed by roofs, roads and walls.
! The absorption by roofs is trivial.
!
!
!!** METHOD
! ------
!
!
! computation of input solar radiation on each surface
! ****************************************************
!
! direct fluxes:
! -------------
!
! dir_Rg_road (Wm-2) = S * 2*theta0/pi
! - S *2/tan(zen) * h/W /pi * (1-cos(theta0))
!
! dir_Rg_wall (Wm-2) = S / tan(zen) /pi * (1-cos(theta0))
! + S * W/h * (1/2 -theta0/pi)
!
! where zen is the zenithal angle, from horizon
! h/W is the aspect ratio of the canyon
! S is the direct solar radiation flux on a horizontal surface
!
! theta0 = arcsin(min(W/h * tan(zen),1))
!
! The surfaces will keep (1-a) times these fluxes, and reflect the
! remaining
!
! scattered fluxes:
! ----------------
!
! sca_Rg_road = sca_Rg * SVF_road
!
! sca_Rg_wall = sca_Rg * SVF_wall
!
!
! solar flux and isotropic reflections :
! ------------------------------------
!
! after 0 reflection, the absorbed part of the flux is:
!
! ARg_r(0) = (1-a_r) (sca_Rg_road + dir_Rg_road)
!
! ARg_w(0) = (1-a_w) (sca_Rg_wall + dir_Rg_wall)
!
! and the reflected parts are
!
! RRg_r(0) = a_r (sca_Rg_road + dir_Rg_road)
!
! RRg_w(0) = a_w (sca_Rg_wall + dir_Rg_wall)
!
! after n reflection:
!
! ARg_r(n) = ARg_r(n-1) + RRg_w(n-1) * (1- SVF_r)(1-a_r)
!
! ARg_w(n) = ARg_w(n-1) + RRg_r(n-1) * SVF_w (1-a_w)
! + RRg_w(n-1) * (1-2*SVF_w)(1-a_w)
!
! RRg_r(n) = (1- SVF_r) a_r RRg_w(n-1)
!
! RRg_w(n) = SVF_w a_w RRg_r(n-1)
! +(1-2SVF_w) a_w RRg_w(n-1)
!
!
! i.e.
! n-1
! ARg_r(n) = ARg_r(0) + (1- SVF_r)(1-a_r) SUM RRg_w(k)
! k=0
!
! n-1
! ARg_w(n) = ARg_w(0) + SVF_w (1-a_w) SUM RRg_r(k)
! k=0
! n-1
! + (1-2*SVF_w)(1-a_w) SUM RRg_w(k)
! k=0
!
! with
!
! n n-1
! SUM RRg_r(k) = (1- SVF_r) a_r SUM RRg_w(k) + RRg_r(0)
! k=0 k=0
!
! n n-1
! SUM RRg_w(k) = SVF_w a_w SUM RRg_r(k)
! k=0 k=0
! n-1
! +(1-2*SVF_w) a_w SUM RRg_w(k) + RRg_w(0)
! k=0
!
!
! Then
!
! n n-1
! SUM RRg_w(k) = (1-2*SVF_w) a_w SUM RRg_w(k)
! k=0 k=0
! n-2
! + (1- SVF_r) SVF_w a_w a_r SUM RRg_w(k)
! k=0
!
! + RRg_w(0) + SVF_w a_w RRg_r(0)
!
!
!
!
! solving this system, lead after an infinity of reflections/absorptions:
!
! inf RRg_w(0) + SVF_w a_w RRg_r(0)
! SUM RRg_w(k) = ----------------------------------------------------
! k=0 1 - (1-2*SVF_w) a_w - (1- SVF_r) SVF_w a_w a_r
!
!
! inf (1- SVF_r) a_r ( a_w SVF_w RRg_r(0) + RRg_w(0) )
! SUM RRg_r(k) = ------------------------------------------------------------ + RRg_r(0)
! k=0 1 - (1-2*SVF_w) a_w - (1- SVF_r) SVF_w a_w a_r
!
!
! ARg_r(n) and ARg_w(n) follow
!
!
! If snow is present, the albedos in all these formulae (and only these,
! not the final net radiation budget) are modified by the albedo of the
! snow-covered surface.
!
!
!
!! EXTERNAL
!! --------
!!
!!
!! IMPLICIT ARGUMENTS
!! ------------------
!!
!! MODD_CST
!!
!!
!! REFERENCE
!! ---------
!!
!!
!! AUTHOR
!! ------
!!
!! V. Masson * Meteo-France *
!!
!! MODIFICATIONS
!! -------------
!! Original 23/01/98
!! 21/11/00 (V. Masson) bug in reflections for roads
!! 12/02 (A. Lemonsu) bug in diagnostic of albedo
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_CSTS
, ONLY : XPI
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
!
REAL, DIMENSION(:), INTENT(IN) :: PDIR_SW ! incoming direct solar radiation
! on an horizontal surface
REAL, DIMENSION(:), INTENT(IN) :: PZENITH ! solar zenithal angle
REAL, DIMENSION(:), INTENT(IN) :: PSCA_SW ! scattered incoming solar rad.
REAL, DIMENSION(:), INTENT(IN) :: PBLD ! buildings fraction
REAL, DIMENSION(:), INTENT(IN) :: PCAN_HW_RATIO ! canyon h/W
REAL, DIMENSION(:), INTENT(IN) :: PWALL_O_HOR ! wall surf. / hor. surf
REAL, DIMENSION(:), INTENT(IN) :: PALB_ROOF ! roof albedo
REAL, DIMENSION(:), INTENT(IN) :: PALB_ROAD ! road albedo
REAL, DIMENSION(:), INTENT(IN) :: PSVF_ROAD ! road sky view factor
REAL, DIMENSION(:), INTENT(IN) :: PALB_WALL ! wall albedo
REAL, DIMENSION(:), INTENT(IN) :: PSVF_WALL ! wall sky view factor
REAL, DIMENSION(:), INTENT(IN) :: PASNOW_ROOF ! roof snow albedo
REAL, DIMENSION(:), INTENT(IN) :: PASNOW_ROAD ! road snow albedo
REAL, DIMENSION(:), INTENT(IN) :: PDN_ROOF ! snow-covered roof fraction
REAL, DIMENSION(:), INTENT(IN) :: PDF_ROOF ! snow-free roof fraction
REAL, DIMENSION(:), INTENT(IN) :: PDN_ROAD ! snow-covered road fraction
REAL, DIMENSION(:), INTENT(IN) :: PDF_ROAD ! snow-free road fraction
!
REAL, DIMENSION(:), INTENT(OUT) :: PABS_SW_ROOF ! solar radiation absorbed
! ! by roofs
REAL, DIMENSION(:), INTENT(OUT) :: PABS_SW_ROAD ! solar radiation absorbed
! ! by roads
REAL, DIMENSION(:), INTENT(OUT) :: PABS_SW_WALL ! solar radiation absorbed
! ! by walls
REAL, DIMENSION(:), INTENT(OUT) :: PABS_SW_SNOW_ROOF ! solar radiation absorbed
! ! by snow-covered roofs
REAL, DIMENSION(:), INTENT(OUT) :: PABS_SW_SNOW_ROAD ! solar radiation absorbed
! ! by snow-covered roads
REAL, DIMENSION(:), INTENT(OUT) :: PDIR_ALB_TOWN ! town direct albedo
REAL, DIMENSION(:), INTENT(OUT) :: PSCA_ALB_TOWN ! town diffuse albedo
!
!* 0.2 declarations of local variables
!
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW ! direct and diffuse incoming radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW ! with a minimum to compute albedo
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTANZEN ! tangente of solar zenithal angle
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTHETA0 ! canyon angle for
! ! which solar
! ! radiation
! ! reaches the road
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZAALB_ROAD ! averaged albedo
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_ROAD ! direct radiation reaching
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WALL ! road and wall
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_ROAD ! diffuse radiation reaching
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_WALL ! road and wall
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZROOF_SW ! roof, wall and
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZWALL_SW ! road fractions of SW
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZROAD_SW ! interacting surf.
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_UP ! upward solar rad.
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_UP ! from direct or diffuse rad.
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_ROOF ! solar radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_ROAD ! absorbed by roofs,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WALL ! road, wall, and snow
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SNOW_ROOF ! over roof and wall,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SNOW_ROAD ! coming from direct rad.
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_ROOF ! solar radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_ROAD ! absorbed by roofs,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_WALL ! road, wall, and snow
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SNOW_ROOF ! over roof and wall,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SNOW_ROAD ! coming from diffuse rad.
!
INTEGER :: JI ! loop index
!-------------------------------------------------------------------------------
!
PABS_SW_ROOF(:) = 0.
PABS_SW_ROAD(:) = 0.
PABS_SW_WALL(:) = 0.
PABS_SW_SNOW_ROOF(:) = 0.
PABS_SW_SNOW_ROAD(:) = 0.
!
ZDIR_SW = MAX(PDIR_SW,1.E-3)
ZSCA_SW = MAX(PSCA_SW,1.E-3)
!
!-------------------------------------------------------------------------------
!
!* 1. SOLAR RADIATIONS FOR ROOFS
! --------------------------
!
ZABS_DIR_SW_ROOF (:) = ZDIR_SW(:) * (1. - PALB_ROOF (:))
ZABS_DIR_SW_SNOW_ROOF(:) = ZDIR_SW(:) * (1. - PASNOW_ROOF(:))
ZABS_SCA_SW_ROOF (:) = ZSCA_SW(:) * (1. - PALB_ROOF (:))
ZABS_SCA_SW_SNOW_ROOF(:) = ZSCA_SW(:) * (1. - PASNOW_ROOF(:))
!
!-------------------------------------------------------------------------------
!
!* 2. SOLAR RADIATIONS FOR ROADS AND WALLS
! ------------------------------------
!
DO JI=1,SIZE(PZENITH(:))
IF (ABS(0.5*XPI-PZENITH(JI)) < 1.E-6) THEN
IF(0.5*XPI-PZENITH(JI) > 0.) ZTANZEN(JI)=TAN(0.5*XPI-1.E-6)
IF(0.5*XPI-PZENITH(JI) < 0.) ZTANZEN(JI)=TAN(0.5*XPI+1.E-6)
ELSE
ZTANZEN(:) = TAN(PZENITH(:))
ENDIF
ENDDO
!* 2.1 radiation coefficients
! ----------------------
!
ZTHETA0(:) = ASIN( MIN(ABS( 1./ZTANZEN(:))/PCAN_HW_RATIO(:), 1. ) )
!
!* 2.2 direct solar radiation received by roads
! ---------------------------------------
!
ZDIR_SW_ROAD(:) = ZDIR_SW(:) * 2. * ZTHETA0(:) / XPI &
- ZDIR_SW(:) * 2. * ZTANZEN(:) / XPI &
* PCAN_HW_RATIO(:) * (1.-COS(ZTHETA0(:)))
!
!* 2.3 direct solar radiation received by walls
! ----------------------------------------
!
ZDIR_SW_WALL(:) = ( ZDIR_SW(:) - ZDIR_SW_ROAD(:) ) &
* 0.5 / PCAN_HW_RATIO(:)
!
!* 2.4 diffuse solar radiation received by roads
! -----------------------------------------
!
ZSCA_SW_ROAD(:) = ZSCA_SW(:) * PSVF_ROAD(:)
!
!* 2.5 diffuse solar radiation received by walls
! -----------------------------------------
!
ZSCA_SW_WALL(:) = ZSCA_SW(:) * PSVF_WALL(:)
!
!* 2.6 averaged albedos when snow is present
! -------------------------------------
!
ZAALB_ROAD(:) = PDF_ROAD(:) * PALB_ROAD (:) &
+ PDN_ROAD(:) * PASNOW_ROAD(:)
!
!* 2.8 absorption of direct incoming solar radiation
! ---------------------------------------------
!
CALL SOLAR_REFLECTIONS(ZDIR_SW_ROAD,ZDIR_SW_WALL, &
ZABS_DIR_SW_ROAD, ZABS_DIR_SW_SNOW_ROAD,ZABS_DIR_SW_WALL )
!
!
!* 2.9 absorption of diffuse incoming solar radiation
! ----------------------------------------------
!
CALL SOLAR_REFLECTIONS(ZSCA_SW_ROAD,ZSCA_SW_WALL, &
ZABS_SCA_SW_ROAD, ZABS_SCA_SW_SNOW_ROAD,ZABS_SCA_SW_WALL )
!
!-------------------------------------------------------------------------------
!
!* 3. Town albedo
! -----------
!
!* 3.1 direct albedo
! -------------
!
CALL TOWN_ALBEDO(ZDIR_SW,ZABS_DIR_SW_ROOF,ZABS_DIR_SW_SNOW_ROOF, &
ZABS_DIR_SW_ROAD, ZABS_DIR_SW_SNOW_ROAD,ZABS_DIR_SW_WALL, &
PDIR_ALB_TOWN )
!
!* 3.2 direct albedo
! -------------
!
CALL TOWN_ALBEDO(ZSCA_SW,ZABS_SCA_SW_ROOF,ZABS_SCA_SW_SNOW_ROOF, &
ZABS_SCA_SW_ROAD, ZABS_SCA_SW_SNOW_ROAD,ZABS_SCA_SW_WALL, &
PSCA_ALB_TOWN )
!
!-------------------------------------------------------------------------------
!
!* 4. Trivial cases
! -------------
!
WHERE(PDIR_SW(:)==0.)
ZABS_DIR_SW_ROOF (:) = 0.
ZABS_DIR_SW_ROAD (:) = 0.
ZABS_DIR_SW_WALL (:) = 0.
ZABS_DIR_SW_SNOW_ROOF(:) = 0.
ZABS_DIR_SW_SNOW_ROAD(:) = 0.
END WHERE
!
WHERE(PSCA_SW(:)==0.)
ZABS_SCA_SW_ROOF (:) = 0.
ZABS_SCA_SW_ROAD (:) = 0.
ZABS_SCA_SW_WALL (:) = 0.
ZABS_SCA_SW_SNOW_ROOF(:) = 0.
ZABS_SCA_SW_SNOW_ROAD(:) = 0.
END WHERE
!
!-------------------------------------------------------------------------------
!
!* 5. Total solar radiation absorbed by each surface
! ----------------------------------------------
!
! solar radiation absorbed by roofs
!
PABS_SW_ROOF (:) = ZABS_DIR_SW_ROOF (:) + ZABS_SCA_SW_ROOF (:)
!
! solar radiation absorbed by roads
!
PABS_SW_ROAD (:) = ZABS_DIR_SW_ROAD (:) + ZABS_SCA_SW_ROAD (:)
!
! solar radiation absorbed by walls
!
PABS_SW_WALL (:) = ZABS_DIR_SW_WALL (:) + ZABS_SCA_SW_WALL (:)
!
! solar radiation absorbed by snow on roofs
!
PABS_SW_SNOW_ROOF(:) = ZABS_DIR_SW_SNOW_ROOF(:) + ZABS_SCA_SW_SNOW_ROOF(:)
!
! solar radiation absorbed by snow on roads
!
PABS_SW_SNOW_ROAD(:) = ZABS_DIR_SW_SNOW_ROAD(:) + ZABS_SCA_SW_SNOW_ROAD(:)
!
!
!-------------------------------------------------------------------------------
!
CONTAINS
!
!-------------------------------------------------------------------------------
SUBROUTINE SOLAR_REFLECTIONS(ZSW_ROAD,ZSW_WALL,ZABS_SW_ROAD,ZABS_SW_SNOW,ZABS_SW_WALL)
!
REAL, DIMENSION(:), INTENT(IN) :: ZSW_ROAD ! solar radiation received by road
REAL, DIMENSION(:), INTENT(IN) :: ZSW_WALL ! and wall before reflection
REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_ROAD ! solar radiation absorbed by
REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_SNOW ! solar radiation absorbed by
REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_WALL ! road, snow over road, and wall
!
REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZREF0_SW_ROAD ! first solar reflection
REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZREF0_SW_WALL ! against road and wall
REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZSREF_SW_ROAD ! sum of all reflections
REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZSREF_SW_WALL ! against road and wall
!
!
!* A. first solar radiation reflection
! --------------------------------
!
!
ZREF0_SW_ROAD(:) = ZAALB_ROAD(:) * ZSW_ROAD(:)
!
ZREF0_SW_WALL(:) = PALB_WALL (:) * ZSW_WALL(:)
!
!* B. sum of solar radiation reflected
! --------------------------------
!
ZSREF_SW_WALL(:) = ( ZREF0_SW_WALL(:) &
+ PSVF_WALL(:) * PALB_WALL(:) * ZREF0_SW_ROAD(:))&
/ (1. - (1.-2.*PSVF_WALL(:)) * PALB_WALL(:) &
- (1.- PSVF_ROAD(:)) * PSVF_WALL(:) &
* PALB_WALL(:) &
* ZAALB_ROAD(:) )
!
ZSREF_SW_ROAD(:) = ( (1.- PSVF_ROAD(:)) * ZAALB_ROAD(:) &
* ZREF0_SW_WALL(:) &
+(1.- PSVF_ROAD(:)) * ZAALB_ROAD(:) &
* PSVF_WALL(:) &
* PALB_WALL(:) &
* ZREF0_SW_ROAD(:) )&
/ (1. - (1.-2.*PSVF_WALL(:)) * PALB_WALL(:) &
- (1.- PSVF_ROAD(:)) * PSVF_WALL(:) &
* PALB_WALL(:) &
* ZAALB_ROAD(:) )&
+ ZREF0_SW_ROAD(:)
!
!
!* C. total solar radiation received by roads
! ---------------------------------------
!
ZABS_SW_ROAD(:) = (1.-PALB_ROAD(:)) &
* ( ZSW_ROAD(:) &
+ ZSREF_SW_WALL(:) * (1.- PSVF_ROAD(:)) )
!
ZABS_SW_SNOW(:) = (1.-PASNOW_ROAD (:)) &
* ( ZSW_ROAD(:) &
+ ZSREF_SW_WALL(:) * (1.- PSVF_ROAD(:)) )
!
!
!* D. total solar radiation received by walls
! ---------------------------------------
!
ZABS_SW_WALL(:) = (1.-PALB_WALL(:)) &
* ( ZSW_WALL(:) &
+ ZSREF_SW_ROAD(:) * PSVF_WALL(:) &
+ ZSREF_SW_WALL(:) * (1.-2.*PSVF_WALL(:)) )
!
END SUBROUTINE SOLAR_REFLECTIONS
!
!-------------------------------------------------------------------------------
!
SUBROUTINE TOWN_ALBEDO(ZSW,ZABS_SW_ROOF,ZABS_SW_SNOW_ROOF, &
ZABS_SW_ROAD, ZABS_SW_SNOW_ROAD,ZABS_SW_WALL, &
ZALBEDO )
!
REAL, DIMENSION(:), INTENT(IN) :: ZSW ! incoming solar radiation
REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_ROOF ! solar radiation absorbed by roofs
REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_ROAD ! solar radiation absorbed by roads
REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_WALL ! solar radiation absorbed by walls
REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_SNOW_ROOF ! solar radiation absorbed by roof snow
REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_SNOW_ROAD ! solar radiation absorbed by road snow
REAL, DIMENSION(:), INTENT(OUT):: ZALBEDO ! town averaged albedo
REAL, DIMENSION(SIZE(ZSW)) :: ZSW_UP ! outgoing solar radiation
ZSW_UP(:) = ZSW(:) &
- ( PBLD(:)*PDF_ROOF(:)*ZABS_SW_ROOF (:) &
+PBLD(:)*PDN_ROOF(:)*ZABS_SW_SNOW_ROOF(:) &
+(1.-PBLD(:))*PDF_ROAD(:)*ZABS_SW_ROAD (:) &
+(1.-PBLD(:))*PDN_ROAD(:)*ZABS_SW_SNOW_ROAD(:) &
+PWALL_O_HOR(:)*ZABS_SW_WALL(:))
!
ZALBEDO(:) = ZSW_UP(:) / ZSW(:)
!
END SUBROUTINE TOWN_ALBEDO
!
!-------------------------------------------------------------------------------
!
END SUBROUTINE URBAN_SOLAR_ABS