SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/urban_solar_abs.F90
Go to the documentation of this file.
00001 !     #########
00002     SUBROUTINE URBAN_SOLAR_ABS(HBEM, HROAD_DIR, HWALL_OPT,                     &
00003                                  PDIR_SW, PSCA_SW, PZENITH, PAZIM,             &
00004                                  PBLD, PGARDEN, PROAD_DIR, PROAD, PFRAC_GR,    &
00005                                  PWALL_O_HOR, PCAN_HW_RATIO,                   &
00006                                  PALB_ROOF,                                    &
00007                                  PALB_ROAD, PSVF_ROAD, PALB_WALL, PSVF_WALL,   &
00008                                  PALB_GARDEN, PSVF_GARDEN,                     &
00009                                  PALB_GREENROOF,                               &
00010                                  PASNOW_ROOF, PASNOW_ROAD,                     &
00011                                  PDN_ROOF, PDF_ROOF, PDN_ROAD, PDF_ROAD,       &
00012                                  PGR, PABS_WIN, PSHGC, PSHGC_SH, PALB_WIN,     &
00013                                  PABS_SW_ROOF, PABS_SW_ROAD,                   &
00014                                  PABS_SW_WALL_A, PABS_SW_WALL_B,               &
00015                                  PABS_SW_GARDEN, PABS_SW_GREENROOF,            &
00016                                  PABS_SW_SNOW_ROOF, PABS_SW_SNOW_ROAD,         &
00017                                  PREC_SW_ROAD,  PREC_SW_SNOW_ROAD,             &
00018                                  PREC_SW_WALL_A, PREC_SW_WALL_B,               &
00019                                  PREC_SW_GARDEN,                               &
00020                                  PDIR_ALB_TOWN, PSCA_ALB_TOWN,                 &
00021                                  PSW_RAD_GARDEN, PABS_SW_WIN, PREC_SW_WIN,     &
00022                                  PTRAN_WIN, &
00023                                  PREF_SW_GRND, PREF_SW_FAC, PTR_SW_WIN,        &
00024                                  PE_SHADING, OSHAD_DAY,                        &
00025                                  OSHADE                                        )  
00026 !   ##########################################################################
00027 !
00028 !!****  *URBAN_SOLAR_ABS*  
00029 !!
00030 !!    PURPOSE
00031 !!    -------
00032 !
00033 !     Computes the solar radiation flux absorbed by roofs, roads and walls.
00034 !     The absorption by roofs is trivial.
00035 !         
00036 !     
00037 !!**  METHOD
00038 !     ------
00039 !
00040 !
00041 !        computation of input solar radiation on each surface
00042 !        ****************************************************
00043 !
00044 !    direct fluxes:
00045 !    -------------
00046 !
00047 !    dir_Rg_road (Wm-2) =   S * 2*theta0/pi
00048 !                         - S *2/tan(zen) * h/W /pi * (1-cos(theta0))
00049 !
00050 !    dir_Rg_wall (Wm-2) =   S / tan(zen) /pi * (1-cos(theta0))
00051 !                         + S * W/h * (1/2 -theta0/pi)
00052 !
00053 !   where zen      is the zenithal angle, from horizon
00054 !         h/W      is the aspect ratio of the canyon
00055 !         S        is the direct solar radiation flux on a horizontal surface
00056 !
00057 !         theta0 = arcsin(min(W/h * tan(zen),1))
00058 !
00059 !   The surfaces will keep (1-a) times these fluxes, and reflect the
00060 !   remaining
00061 !
00062 !    scattered fluxes:
00063 !    ----------------
00064 !
00065 !   sca_Rg_road = sca_Rg * SVF_road
00066 !
00067 !   sca_Rg_wall = sca_Rg * SVF_wall
00068 !
00069 !
00070 !    solar flux and isotropic reflections :
00071 !    ------------------------------------
00072 !
00073 !  after 0 reflection, the absorbed part of the flux is:
00074 !
00075 !      ARg_r(0) = (1-a_r) (sca_Rg_road + dir_Rg_road)
00076 !
00077 !      ARg_w(0) = (1-a_w) (sca_Rg_wall + dir_Rg_wall)
00078 !  
00079 !    and the reflected parts are
00080 !
00081 !      RRg_r(0) = a_r (sca_Rg_road + dir_Rg_road)
00082 !
00083 !      RRg_w(0) = a_w (sca_Rg_wall + dir_Rg_wall)
00084 !
00085 !  after n reflection:
00086 !
00087 !      ARg_r(n) = ARg_r(n-1) + RRg_w(n-1) * (1-  SVF_r)(1-a_r)
00088 !
00089 !      ARg_w(n) = ARg_w(n-1) + RRg_r(n-1) *      SVF_w (1-a_w)
00090 !                            + RRg_w(n-1) * (1-2*SVF_w)(1-a_w)
00091 !
00092 !      RRg_r(n) = (1- SVF_r) a_r RRg_w(n-1)
00093 !
00094 !      RRg_w(n) =     SVF_w  a_w RRg_r(n-1)
00095 !                +(1-2SVF_w) a_w RRg_w(n-1)
00096 !
00097 !
00098 !   i.e.
00099 !                                               n-1
00100 !      ARg_r(n) = ARg_r(0) + (1-  SVF_r)(1-a_r) SUM RRg_w(k)
00101 !                                               k=0
00102 !
00103 !                                               n-1
00104 !      ARg_w(n) = ARg_w(0) +      SVF_w (1-a_w) SUM RRg_r(k)
00105 !                                               k=0
00106 !                                               n-1
00107 !                          + (1-2*SVF_w)(1-a_w) SUM RRg_w(k)
00108 !                                               k=0
00109 !
00110 ! with
00111 !
00112 !     n                             n-1
00113 !    SUM RRg_r(k) = (1-  SVF_r) a_r SUM RRg_w(k)      +  RRg_r(0)
00114 !    k=0                            k=0
00115 !
00116 !     n                             n-1
00117 !    SUM RRg_w(k) =      SVF_w  a_w SUM RRg_r(k) 
00118 !    k=0                            k=0
00119 !                                   n-1
00120 !                  +(1-2*SVF_w) a_w SUM RRg_w(k)      +  RRg_w(0)
00121 !                                   k=0
00122 !
00123 !
00124 !   Then
00125 !
00126 !     n                                        n-1
00127 !    SUM RRg_w(k) =  (1-2*SVF_w)       a_w     SUM RRg_w(k)
00128 !    k=0                                       k=0
00129 !                                              n-2
00130 !                  + (1-  SVF_r) SVF_w a_w a_r SUM RRg_w(k) 
00131 !                                              k=0
00132 !
00133 !                  + RRg_w(0) + SVF_w a_w RRg_r(0)
00134 !
00135 !
00136 !
00137 !
00138 !  solving this system, lead after an infinity of reflections/absorptions:
00139 !
00140 !    inf                      RRg_w(0) + SVF_w a_w RRg_r(0)
00141 !    SUM RRg_w(k) = ----------------------------------------------------
00142 !    k=0             1 - (1-2*SVF_w) a_w - (1-  SVF_r) SVF_w a_w a_r
00143 !
00144 !
00145 !    inf            (1-  SVF_r) a_r ( a_w SVF_w RRg_r(0) + RRg_w(0) )
00146 !    SUM RRg_r(k) = ------------------------------------------------------------ + RRg_r(0)
00147 !    k=0             1 - (1-2*SVF_w) a_w - (1-  SVF_r) SVF_w a_w a_r
00148 !
00149 !
00150 ! ARg_r(n) and ARg_w(n) follow
00151 !
00152 !
00153 ! If snow is present, the albedos in all these formulae (and only these,
00154 ! not the final net radiation budget) are modified by the albedo of the
00155 ! snow-covered surface.
00156 ! 
00157 !
00158 !
00159 !!    EXTERNAL
00160 !!    --------
00161 !!
00162 !!
00163 !!    IMPLICIT ARGUMENTS
00164 !!    ------------------
00165 !!
00166 !!    MODD_CST
00167 !!
00168 !!      
00169 !!    REFERENCE
00170 !!    ---------
00171 !!
00172 !!      
00173 !!    AUTHOR
00174 !!    ------
00175 !!
00176 !!      V. Masson           * Meteo-France *
00177 !!
00178 !!    MODIFICATIONS
00179 !!    -------------
00180 !!      Original    23/01/98 
00181 !!                  21/11/00 (V. Masson)  bug in reflections for roads
00182 !!                     12/02 (A. Lemonsu) bug in diagnostic of albedo
00183 !!                     12/11 (V. Masson ) adds road direction option
00184 !!                     01/12 (V. Masson ) adds 2 different wall direct insulations
00185 !!                     04/12 (G. Pigeon) add PTRAN_WIN 
00186 !!                     09/12 (C. de Munck-A. Lemonsu) add green roofs
00187 !-------------------------------------------------------------------------------
00188 !
00189 !*       0.     DECLARATIONS
00190 !               ------------
00191 !
00192 USE MODD_CSTS,     ONLY : XPI
00193 USE MODD_BEM_CST,  ONLY : XWIN_SW_MAX
00194 USE MODD_SURF_PAR, ONLY : XUNDEF
00195 !
00196 USE MODI_WINDOW_SHADING
00197 !
00198 !
00199 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00200 USE PARKIND1  ,ONLY : JPRB
00201 !
00202 IMPLICIT NONE
00203 !
00204 !*      0.1    declarations of arguments
00205 !
00206  CHARACTER(LEN=3)  , INTENT(IN)    :: HBEM              ! Building Energy model 'DEF' or 'BEM'
00207  CHARACTER(LEN=4),   INTENT(IN)    :: HROAD_DIR         ! road direction option
00208               ! 'UNIF' : classical TEB version, all roads uniformely present
00209               ! 'ORIE' : specified road ORIENTATION (in fact many roads  direction
00210               !          possible because there can be many TEB patches)
00211  CHARACTER(LEN=4),   INTENT(IN)    :: HWALL_OPT         ! walls option
00212               ! 'UNIF' : classical TEB version, all walls are identical
00213               ! 'TWO ' : the two opposite walls are different & receive different solar energy
00214 REAL, DIMENSION(:), INTENT(IN)    :: PDIR_SW           ! incoming direct solar radiation
00215 REAL, DIMENSION(:), INTENT(IN)    :: PSCA_SW           ! scattered incoming solar rad.
00216 REAL, DIMENSION(:), INTENT(IN)    :: PZENITH           ! solar zenithal angle
00217 REAL, DIMENSION(:), INTENT(IN)    :: PAZIM             ! solar azimuthal angle
00218 !                                                      ! (radian from N, clockwise)
00219 REAL, DIMENSION(:), INTENT(IN)    :: PBLD              ! buildings fraction
00220 REAL, DIMENSION(:), INTENT(IN)    :: PGARDEN           ! GARDEN area fraction
00221 REAL, DIMENSION(:), INTENT(IN)    :: PROAD_DIR         ! Road direction
00222                                                        ! (° from N, clockwise)
00223 REAL, DIMENSION(:), INTENT(IN)    :: PROAD             ! road fraction
00224 REAL, DIMENSION(:), INTENT(IN)    :: PFRAC_GR          ! green roof fraction
00225 REAL, DIMENSION(:), INTENT(IN)    :: PWALL_O_HOR       ! wall surf. / hor. surf
00226 REAL, DIMENSION(:), INTENT(IN)    :: PCAN_HW_RATIO     ! canyon    h/W
00227 REAL, DIMENSION(:), INTENT(IN)    :: PALB_ROOF         ! roof albedo
00228 REAL, DIMENSION(:), INTENT(IN)    :: PALB_ROAD         ! road albedo
00229 REAL, DIMENSION(:), INTENT(IN)    :: PSVF_ROAD         ! road sky view factor
00230 REAL, DIMENSION(:), INTENT(IN)    :: PALB_WALL         ! wall albedo
00231 REAL, DIMENSION(:), INTENT(IN)    :: PSVF_WALL         ! wall sky view factor
00232 REAL, DIMENSION(:), INTENT(IN)    :: PALB_GARDEN       ! GARDEN areas albedo
00233 REAL, DIMENSION(:), INTENT(IN)    :: PSVF_GARDEN       ! GARDEN areas sky view factor
00234 REAL, DIMENSION(:), INTENT(IN)    :: PALB_GREENROOF    ! green roof albedo
00235 REAL, DIMENSION(:), INTENT(IN)    :: PASNOW_ROOF       ! roof snow albedo
00236 REAL, DIMENSION(:), INTENT(IN)    :: PASNOW_ROAD       ! road snow albedo
00237 REAL, DIMENSION(:), INTENT(IN)    :: PDN_ROOF          ! snow-covered roof fraction
00238 REAL, DIMENSION(:), INTENT(IN)    :: PDF_ROOF          ! snow-free    roof fraction
00239 REAL, DIMENSION(:), INTENT(IN)    :: PDN_ROAD          ! snow-covered road fraction
00240 REAL, DIMENSION(:), INTENT(IN)    :: PDF_ROAD          ! snow-free    road fraction
00241 !
00242 REAL, DIMENSION(:), INTENT(IN)    :: PGR               ! glazing ratio
00243 REAL, DIMENSION(:), INTENT(IN)    :: PABS_WIN          ! solar absortance of windows
00244 !
00245 !new arguments for shading
00246 REAL, DIMENSION(:), INTENT(IN)     :: PSHGC            ! solar transmittance of windows
00247 REAL, DIMENSION(:), INTENT(IN)     :: PSHGC_SH         ! window + shading solar heat gain coef.
00248 !
00249 REAL, DIMENSION(:), INTENT(OUT)    :: PALB_WIN         ! solar reflectance of windows
00250 !
00251 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_ROOF     ! solar radiation absorbed
00252 !                                                      ! by snow-free roofs
00253 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_ROAD     ! solar radiation absorbed
00254 !                                                      ! by snow-free roads
00255 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_WALL_A   ! solar radiation absorbed
00256 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_WALL_B   ! solar radiation absorbed
00257 !                                                      ! by walls
00258 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_GARDEN   ! solar radiation absorbed
00259 !                                                      ! by GARDEN areas
00260 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_GREENROOF! solar radiation absorbed by green roofs
00261 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_SNOW_ROOF! solar radiation absorbed
00262 !                                                      ! by snow-covered roofs
00263 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_SNOW_ROAD! solar radiation absorbed
00264 !                                                      ! by snow-covered roads
00265 REAL, DIMENSION(:), INTENT(OUT)    :: PREC_SW_ROAD     ! solar radiation received
00266 !                                                      ! by snow-free roads
00267 REAL, DIMENSION(:), INTENT(OUT)    :: PREC_SW_WALL_A   ! solar radiation received
00268 REAL, DIMENSION(:), INTENT(OUT)    :: PREC_SW_WALL_B   ! solar radiation received
00269 !                                                      ! by snow-free walls
00270 REAL, DIMENSION(:), INTENT(OUT)    :: PREC_SW_GARDEN   ! solar radiation received
00271 !                                                      ! by GARDEN areas
00272 REAL, DIMENSION(:), INTENT(OUT)    :: PREC_SW_SNOW_ROAD! solar radiation received
00273 !                                                      ! by snow-covered roads
00274 REAL, DIMENSION(:), INTENT(OUT)    :: PDIR_ALB_TOWN    ! town direct albedo
00275 REAL, DIMENSION(:), INTENT(OUT)    :: PSCA_ALB_TOWN    ! town diffuse albedo
00276 !
00277 REAL, DIMENSION(:), INTENT(OUT)    :: PSW_RAD_GARDEN   ! solar radiation reaching GARDEN areas
00278 REAL, DIMENSION(:), INTENT(OUT)    :: PABS_SW_WIN      ! solar radiation absorbed by windows
00279 REAL, DIMENSION(:), INTENT(OUT)    :: PREC_SW_WIN      ! solar radiation received by windows
00280 
00281 REAL, DIMENSION(:), INTENT(OUT)    :: PREF_SW_GRND     ! total solar radiation reflected by ground
00282 REAL, DIMENSION(:), INTENT(OUT)    :: PREF_SW_FAC      ! total solar radiation reflected by wall
00283 REAL, DIMENSION(:), INTENT(OUT)    :: PTR_SW_WIN       ! Solar radiation transmitted
00284                                                        ! through glazing [W/m²(bld)]
00285 !new arguments for shading
00286 REAL, DIMENSION(:), INTENT(OUT)    :: PE_SHADING       ! Energy that is not reflected 
00287                                                        ! by the shading, nor transmitted through
00288                                                        ! the bld, nor absorbed by the
00289                                                        ! [W/m²(win)]
00290 LOGICAL, DIMENSION(:),INTENT(INOUT):: OSHAD_DAY        ! has shading been necessary this day ?
00291 LOGICAL, DIMENSION(:),INTENT(IN)   :: OSHADE           ! are building conditions favorable for 
00292 !                                                      ! shading (independantly of solar irradiance) ?
00293 REAL, DIMENSION(:), INTENT(IN)     :: PTRAN_WIN        ! window transmittivity
00294 !
00295 !*      0.2    declarations of local variables
00296 !
00297 !                                                           
00298 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW               ! direct and diffuse incoming radiation
00299 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW               ! with a minimum to compute albedo
00300 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTANZEN               ! tangente of solar zenithal angle
00301 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTHETA0               ! canyon angle for
00302 !                                                       ! which solar
00303 !                                                       ! radiation
00304 !                                                       ! reaches the road
00305 !
00306 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZAALB_ROAD            ! averaged albedo
00307 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_ROAD          ! direct radiation reaching
00308 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WALL_A        ! road, wall A,
00309 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WALL_B        ! wall B,
00310 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_GARDEN        ! GARDEN areas,
00311 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WALL          ! and on average on 2 walls
00312 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_ROAD          ! diffuse radiation reaching
00313 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_WALL          ! road, wall,
00314 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_GARDEN        ! and GARDEN areas
00315 !
00316 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_ROOF      ! solar radiation
00317 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_ROAD      ! absorbed by roofs,
00318 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WALL_A    ! road, wall A,
00319 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WALL_B    ! wall B,
00320 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WALL      ! both walls on average,
00321 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_GARDEN    ! GARDEN areas,
00322 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_GREENROOF ! green roof areas,
00323 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WIN       ! window (abs+trans), and snow
00324 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SNOW_ROOF ! over roof, wall,
00325 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SNOW_ROAD ! and GARDEN areas
00326 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_ROOF      ! solar radiation
00327 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_ROAD      ! absorbed by roofs,
00328 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_WALL      ! road, wall,
00329 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_GARDEN    ! GARDEN areas,
00330 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_GREENROOF ! green roof areas,
00331 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_WIN       ! window (abs+trans), and snow
00332 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SNOW_ROOF ! over roof and wall,
00333 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SNOW_ROAD ! coming from diffuse rad.
00334 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDW                   ! difference of radiation
00335 !                                                       ! absorbed by the 2 walls
00336 !
00337 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZROAD                 !
00338 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZROAD_DIR             ! Road direction
00339 !                                                       ! (radian from N, clockwise)
00340 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZGARDEN               !
00341 !
00342 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREC_DIR_SW_WIN
00343 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREC_SCA_SW_WIN
00344 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZAALB_WALL
00345 !
00346 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTRAN_WIN             ! solar transmittivity of windows
00347 REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_WIN              ! solar transmittivity of windows
00348 LOGICAL, DIMENSION(SIZE(PDIR_SW)) :: G_EFF_SHAD         !TRUE if shading should be active considering actual rad
00349 !
00350 INTEGER                        :: JJ                    ! loop index
00351 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00352 !-------------------------------------------------------------------------------
00353 !
00354 IF (LHOOK) CALL DR_HOOK('URBAN_SOLAR_ABS',0,ZHOOK_HANDLE)
00355 PABS_SW_ROOF      (:) = 0.
00356 PABS_SW_ROAD      (:) = 0.
00357 PABS_SW_WALL_A    (:) = 0.
00358 PABS_SW_WALL_B    (:) = 0.
00359 PABS_SW_GARDEN    (:) = 0.
00360 PABS_SW_GREENROOF (:) = 0.
00361 PABS_SW_SNOW_ROOF (:) = 0.
00362 PABS_SW_SNOW_ROAD (:) = 0.
00363 PABS_SW_WIN       (:) = 0.
00364 PREC_SW_WIN       (:) = 0.
00365 !
00366 PREC_SW_ROAD      (:) = 0.
00367 PREC_SW_WALL_A    (:) = 0.
00368 PREC_SW_WALL_B    (:) = 0.
00369 PREC_SW_GARDEN    (:) = 0.
00370 PREC_SW_SNOW_ROAD (:) = 0.
00371 !
00372 ZDIR_SW = MAX(PDIR_SW,0.)
00373 ZSCA_SW = MAX(PSCA_SW,0.000001)
00374 !
00375 ZROAD_DIR = PROAD_DIR(:) * XPI/180.
00376 !
00377 DO JJ=1,SIZE(PROAD)
00378 !
00379   IF (PROAD(JJ)+PGARDEN(JJ).NE.0.) THEN
00380     ZROAD(JJ)  = PROAD(JJ)  / (PROAD(JJ)+PGARDEN(JJ))
00381     ZGARDEN(JJ) =  PGARDEN(JJ) / (PROAD(JJ)+PGARDEN(JJ))
00382   ELSE
00383     ZROAD(JJ)=0.
00384     ZGARDEN(JJ)=0.
00385   ENDIF
00386 !
00387 !-------------------------------------------------------------------------------
00388 !
00389 !*      1.     SOLAR RADIATIONS FOR ROOFS
00390 !              --------------------------
00391 !
00392   ZABS_DIR_SW_ROOF     (JJ) = ZDIR_SW(JJ) * (1. - PALB_ROOF     (JJ))
00393   ZABS_DIR_SW_SNOW_ROOF(JJ) = ZDIR_SW(JJ) * (1. - PASNOW_ROOF   (JJ))
00394   ZABS_DIR_SW_GREENROOF(JJ) = ZDIR_SW(JJ) * (1. - PALB_GREENROOF(JJ))
00395   ZABS_SCA_SW_ROOF     (JJ) = ZSCA_SW(JJ) * (1. - PALB_ROOF     (JJ))
00396   ZABS_SCA_SW_SNOW_ROOF(JJ) = ZSCA_SW(JJ) * (1. - PASNOW_ROOF   (JJ))
00397   ZABS_SCA_SW_GREENROOF(JJ) = ZSCA_SW(JJ) * (1. - PALB_GREENROOF(JJ))
00398 !
00399 !-------------------------------------------------------------------------------
00400 !
00401 !*      2.     SOLAR RADIATIONS FOR ROADS AND WALLS
00402 !              ------------------------------------
00403 !
00404   IF (ABS(0.5*XPI-PZENITH(JJ)) <  1.E-6) THEN
00405     IF(0.5*XPI-PZENITH(JJ) > 0.)  ZTANZEN(JJ)=TAN(0.5*XPI-1.E-6)
00406     IF(0.5*XPI-PZENITH(JJ) <= 0.) ZTANZEN(JJ)=TAN(0.5*XPI+1.E-6)
00407   ELSEIF (ABS(PZENITH(JJ)) <  1.E-6) THEN
00408     ZTANZEN(JJ)=SIGN(1.,PZENITH(JJ))*TAN(1.E-6)
00409   ELSE
00410     ZTANZEN(JJ) = TAN(PZENITH(JJ))
00411   ENDIF
00412 !
00413 !
00414   IF (PBLD(JJ) .GT. 0.) THEN
00415 !
00416 !*      2.1    radiation coefficients
00417 !              ----------------------
00418 !
00419 IF (HROAD_DIR=='UNIF') THEN
00420   ZTHETA0(JJ) = ASIN( MIN(ABS( 1./ZTANZEN(JJ))/PCAN_HW_RATIO(JJ), 1. ) )
00421 !
00422 !*      2.2    direct solar radiation received by roads and GARDEN areas
00423 !               -------------------------------------------------------
00424 !
00425   ZDIR_SW_ROAD (JJ) = (  ZDIR_SW(JJ) * 2. * ZTHETA0(JJ) / XPI                 &
00426                        - ZDIR_SW(JJ) * 2. * ZTANZEN(JJ) / XPI                 &
00427                                  * PCAN_HW_RATIO(JJ) * (1.-COS(ZTHETA0(JJ)))  )  
00428 !
00429   ZDIR_SW_GARDEN(JJ) = ( ZDIR_SW(JJ) * 2. * ZTHETA0(JJ) / XPI                 &
00430                        - ZDIR_SW(JJ) * 2. * ZTANZEN(JJ) / XPI                 &
00431                                  * PCAN_HW_RATIO(JJ) * (1.-COS(ZTHETA0(JJ)))  )  
00432 ELSE
00433   ZDIR_SW_ROAD (JJ) = ZDIR_SW(JJ) * MAX(0.,                           &
00434    1.-PCAN_HW_RATIO(JJ)*ZTANZEN(JJ)*ABS(SIN(PAZIM(JJ)-ZROAD_DIR(JJ))) &
00435                                        )
00436   ZDIR_SW_GARDEN(JJ) = ZDIR_SW_ROAD(JJ)
00437 
00438 END IF
00439 !
00440 !*      2.3    direct solar radiation received by walls
00441 !              ----------------------------------------
00442 !
00443   ZDIR_SW_WALL(JJ) = (ZDIR_SW(JJ) - (ZDIR_SW_ROAD(JJ)*ZROAD(JJ)+ZDIR_SW_GARDEN(JJ)*ZGARDEN(JJ))) &
00444                       * 0.5 / PCAN_HW_RATIO(JJ)  
00445 !
00446 
00447   ELSE
00448 !
00449    ZDIR_SW_ROAD (JJ) = ZDIR_SW(JJ)
00450    ZDIR_SW_GARDEN(JJ) = ZDIR_SW(JJ)
00451    ZDIR_SW_WALL (JJ) = 0.
00452 !
00453   ENDIF
00454 !
00455 IF (HROAD_DIR=='UNIF' .OR. HWALL_OPT=='UNIF') THEN
00456 !* if walls are averaged, then
00457   ZDIR_SW_WALL_A(JJ) = ZDIR_SW_WALL(JJ)
00458   ZDIR_SW_WALL_B(JJ) = ZDIR_SW_WALL(JJ)
00459 ELSE
00460 !* if walls are separated, then radiation reaches the wall facing sun
00461 ! Note that wall A is the one facing mostly to the South (depending to
00462 ! road orientation), and wall B in the one facing mostly to the North
00463 !
00464 ! In case of N-S road, wall A is the West  wall (= East-facing  wall), 
00465 !                  and wall B is the East  wall (= West-facing  wall)
00466 ! In case of E-W road, wall A is the North wall (= South-facing wall), 
00467 !                  and wall B is the South wall (= North-facing wall)
00468   IF (SIN(PAZIM(JJ)-ZROAD_DIR(JJ))>0.) THEN
00469     ZDIR_SW_WALL_A(JJ) = 2.* ZDIR_SW_WALL(JJ)
00470     ZDIR_SW_WALL_B(JJ) = 0.
00471   ELSE
00472     ZDIR_SW_WALL_A(JJ) = 0.
00473     ZDIR_SW_WALL_B(JJ) = 2.* ZDIR_SW_WALL(JJ)
00474   END IF
00475 END IF
00476 !
00477 !
00478 !
00479 !*      2.4    diffuse solar radiation received by roads and GARDEN areas
00480 !              ---------------------------------------------------------
00481 !
00482   ZSCA_SW_ROAD (JJ) = ZSCA_SW(JJ) * PSVF_ROAD(JJ)
00483 !
00484   ZSCA_SW_GARDEN(JJ) = ZSCA_SW(JJ) * PSVF_GARDEN(JJ)
00485 !
00486 !*      2.5    diffuse solar radiation received by walls
00487 !              -----------------------------------------
00488 !
00489   ZSCA_SW_WALL(JJ) = ZSCA_SW(JJ) * PSVF_WALL(JJ)
00490 !
00491 !*      2.6    total solar radiation received by GARDEN areas
00492 !              ---------------------------------------------
00493 !
00494   PSW_RAD_GARDEN(JJ) = ZDIR_SW_GARDEN(JJ) + ZSCA_SW_GARDEN(JJ)
00495 !
00496 !*      2.7    averaged albedos when snow is present
00497 !              -------------------------------------
00498 !
00499   ZAALB_ROAD (JJ) =  PDF_ROAD (JJ) * PALB_ROAD   (JJ) &
00500                   + PDN_ROAD (JJ) * PASNOW_ROAD (JJ)  
00501 !
00502 !
00503 ENDDO
00504 !
00505 !*      2.7b    averaged facade albedo
00506 !              -------------------------------------
00507 !
00508 IF (HBEM=='BEM') THEN
00509     !
00510     ZTRAN_WIN         (:) = PTRAN_WIN(:)
00511     !
00512     G_EFF_SHAD(:) = OSHADE(:)                              .AND. &
00513           (ZDIR_SW_WALL(:) + ZSCA_SW_WALL(:) > XWIN_SW_MAX) 
00514     !
00515     OSHAD_DAY(:)  = G_EFF_SHAD(:) .OR. OSHAD_DAY(:)
00516     !
00517     CALL WINDOW_SHADING(PSHGC, PSHGC_SH, OSHAD_DAY, PALB_WALL, &
00518                   PABS_WIN, ZABS_WIN, PALB_WIN, ZTRAN_WIN      )
00519     !
00520 ELSE
00521   !
00522   ZABS_WIN (:) = 0.
00523   PALB_WIN (:) = 0.
00524   ZTRAN_WIN(:) = 0.
00525   !
00526 ENDIF
00527 !
00528 ZAALB_WALL(:) =  PGR(:) * PALB_WIN(:) + (1.-PGR(:)) * PALB_WALL(:)
00529 !
00530 !*      2.8    absorption of direct incoming solar radiation
00531 !              ---------------------------------------------
00532 !
00533 !
00534  CALL SOLAR_REFLECTIONS(ZDIR_SW_ROAD,ZDIR_SW_WALL,                                 &
00535                          ZDIR_SW_GARDEN,                                          &
00536                          ZABS_DIR_SW_ROAD, ZABS_DIR_SW_SNOW_ROAD,                 &
00537                          ZABS_DIR_SW_WALL, ZABS_DIR_SW_GARDEN, ZABS_DIR_SW_WIN    )  
00538 !
00539 IF (HROAD_DIR=='UNIF' .OR. HWALL_OPT=='UNIF') THEN
00540 !* if walls are averaged, then
00541   ZABS_DIR_SW_WALL_A = ZABS_DIR_SW_WALL
00542   ZABS_DIR_SW_WALL_B = ZABS_DIR_SW_WALL
00543 ELSE
00544 !* if walls are separated, then radiation reaches the wall facing sun
00545 ! Note that wall A is the one facing mostly to the North (depending to
00546 ! road orientation), and wall B in the one facing mostly to the South.
00547   ZDW = (1.-PALB_WALL(:)) * ZAALB_WALL(:) * (1.-2.*PSVF_WALL(:)) &
00548        / (1.+ZAALB_WALL(:)*(1.-2.*PSVF_WALL(:)))                 &
00549        * 0.5 * (ZDIR_SW_WALL_A(:)-ZDIR_SW_WALL_B(:))            &
00550        + 0.5 * (1.-PALB_WALL(:)) * (ZDIR_SW_WALL_A-ZDIR_SW_WALL_B)
00551   ZABS_DIR_SW_WALL_A = ZABS_DIR_SW_WALL + ZDW
00552   ZABS_DIR_SW_WALL_B = ZABS_DIR_SW_WALL - ZDW
00553 END IF
00554 !
00555 !*      2.9    absorption of diffuse incoming solar radiation
00556 !              ----------------------------------------------
00557 !
00558  CALL SOLAR_REFLECTIONS(ZSCA_SW_ROAD,ZSCA_SW_WALL, ZSCA_SW_GARDEN,                 &
00559                          ZABS_SCA_SW_ROAD, ZABS_SCA_SW_SNOW_ROAD,                 &
00560                          ZABS_SCA_SW_WALL, ZABS_SCA_SW_GARDEN, ZABS_SCA_SW_WIN    )  
00561 !
00562 ! solar flux reflected for wall and road
00563 !
00564 PREF_SW_GRND = ZROAD   * PALB_ROAD   / (1. - PALB_ROAD  )                   * &
00565                                    (ZABS_DIR_SW_ROAD + ZABS_SCA_SW_ROAD)      &
00566              + ZGARDEN * PALB_GARDEN / (1. - PALB_GARDEN)                   * &
00567                                    (ZABS_DIR_SW_GARDEN + ZABS_SCA_SW_GARDEN)
00568 !
00569 PREF_SW_FAC = (1 - PGR) * PALB_WALL  / (1. - PALB_WALL)                     * &
00570                                      (ZABS_DIR_SW_WALL + ZABS_SCA_SW_WALL)    &
00571             +      PGR  * PALB_WIN   / (1 - PALB_WIN  )                     * &
00572                                    (ZABS_DIR_SW_WIN + ZABS_SCA_SW_WIN)
00573 !
00574 !-------------------------------------------------------------------------------
00575 !
00576 !*      3.     Town albedo
00577 !              -----------
00578 !
00579 !*      3.1    direct albedo
00580 !              -------------
00581 !
00582  CALL TOWN_ALBEDO(ZDIR_SW,ZABS_DIR_SW_ROOF,ZABS_DIR_SW_SNOW_ROOF,              &
00583                    ZABS_DIR_SW_ROAD, ZABS_DIR_SW_SNOW_ROAD,ZABS_DIR_SW_WALL,  &
00584                    ZABS_DIR_SW_GARDEN, ZABS_DIR_SW_GREENROOF, ZABS_DIR_SW_WIN,&
00585                    PDIR_ALB_TOWN                                              )  
00586 !
00587 !*      3.2    direct albedo
00588 !              -------------
00589 !
00590  CALL TOWN_ALBEDO(ZSCA_SW,ZABS_SCA_SW_ROOF,ZABS_SCA_SW_SNOW_ROOF,              &
00591                    ZABS_SCA_SW_ROAD, ZABS_SCA_SW_SNOW_ROAD,ZABS_SCA_SW_WALL,  &
00592                    ZABS_SCA_SW_GARDEN, ZABS_SCA_SW_GREENROOF, ZABS_SCA_SW_WIN,&
00593                    PSCA_ALB_TOWN                                              )  
00594 !
00595 !-------------------------------------------------------------------------------
00596 !
00597 !*      4.     Trivial cases
00598 !              -------------
00599 !
00600 WHERE(PDIR_SW(:)==0.)
00601   ZABS_DIR_SW_ROOF      (:) = 0.
00602   ZABS_DIR_SW_ROAD      (:) = 0.
00603   ZABS_DIR_SW_WALL_A    (:) = 0.
00604   ZABS_DIR_SW_WALL_B    (:) = 0.
00605   ZABS_DIR_SW_GARDEN    (:) = 0.
00606   ZABS_DIR_SW_GREENROOF (:) = 0.
00607   ZABS_DIR_SW_WIN       (:) = 0.
00608   ZABS_DIR_SW_SNOW_ROOF (:) = 0.
00609   ZABS_DIR_SW_SNOW_ROAD (:) = 0.
00610 END WHERE
00611 !
00612 WHERE(PSCA_SW(:)==0.)
00613   ZABS_SCA_SW_ROOF      (:) = 0.
00614   ZABS_SCA_SW_ROAD      (:) = 0.
00615   ZABS_SCA_SW_WALL      (:) = 0.
00616   ZABS_SCA_SW_GARDEN    (:) = 0.
00617   ZABS_SCA_SW_GREENROOF (:) = 0.
00618   ZABS_SCA_SW_WIN       (:) = 0.
00619   ZABS_SCA_SW_SNOW_ROOF (:) = 0.
00620   ZABS_SCA_SW_SNOW_ROAD (:) = 0.
00621 END WHERE
00622 !
00623 WHERE (PDIR_ALB_TOWN==XUNDEF) PDIR_ALB_TOWN = PSCA_ALB_TOWN
00624 !
00625 !-------------------------------------------------------------------------------
00626 !
00627 DO JJ=1,SIZE(PROAD)
00628 !
00629 !*      5.     Total solar radiation absorbed by each surface
00630 !              ----------------------------------------------
00631 !
00632 ! solar radiation absorbed by roofs
00633 !
00634   PABS_SW_ROOF     (JJ) = ZABS_DIR_SW_ROOF     (JJ) + ZABS_SCA_SW_ROOF     (JJ)
00635 !
00636 ! solar radiation absorbed by roads
00637 !
00638   PABS_SW_ROAD     (JJ) = ZABS_DIR_SW_ROAD     (JJ) + ZABS_SCA_SW_ROAD     (JJ)
00639 !
00640 ! solar radiation absorbed by GARDEN areas
00641 !
00642   PABS_SW_GARDEN   (JJ) = ZABS_DIR_SW_GARDEN   (JJ) + ZABS_SCA_SW_GARDEN   (JJ)
00643 !
00644 ! solar radiation absorbed by GREENROOF areas
00645 !
00646   PABS_SW_GREENROOF(JJ) = ZABS_DIR_SW_GREENROOF(JJ) + ZABS_SCA_SW_GREENROOF(JJ)
00647 !
00648 ! solar radiation absorbed by walls
00649 !
00650   PABS_SW_WALL_A   (JJ) = ZABS_DIR_SW_WALL_A   (JJ) + ZABS_SCA_SW_WALL     (JJ)
00651   PABS_SW_WALL_B   (JJ) = ZABS_DIR_SW_WALL_B   (JJ) + ZABS_SCA_SW_WALL     (JJ)
00652 !
00653 ! solar radiation absorbed (but not transmitted) by windows
00654 !
00655   ZREC_DIR_SW_WIN(JJ) = ZABS_DIR_SW_WIN(JJ) / (1.-PALB_WIN(JJ))
00656   ZREC_SCA_SW_WIN(JJ) = ZABS_SCA_SW_WIN(JJ) / (1.-PALB_WIN(JJ))
00657 !
00658   PABS_SW_WIN      (JJ) = (ZREC_DIR_SW_WIN  (JJ) + ZREC_SCA_SW_WIN   (JJ)) * ZABS_WIN(JJ)
00659 !
00660 !
00661 ! solar radiation absorbed by snow on roofs
00662 !
00663   PABS_SW_SNOW_ROOF (JJ) = ZABS_DIR_SW_SNOW_ROOF (JJ) + ZABS_SCA_SW_SNOW_ROOF (JJ)
00664 !
00665 ! solar radiation absorbed by snow on roads
00666 !
00667   PABS_SW_SNOW_ROAD (JJ) = ZABS_DIR_SW_SNOW_ROAD (JJ) + ZABS_SCA_SW_SNOW_ROAD (JJ)
00668 !
00669 !-------------------------------------------------------------------------------
00670 !
00671 !*      6.     total solar radiation received by roads and GARDEN areas
00672 !              -------------------------------------------------------
00673 !
00674   PREC_SW_ROAD      (JJ) = PABS_SW_ROAD      (JJ)/(1.-PALB_ROAD   (JJ))
00675 !
00676   PREC_SW_SNOW_ROAD (JJ) = PABS_SW_SNOW_ROAD (JJ)/(1.-PASNOW_ROAD (JJ))
00677 !
00678   PREC_SW_WALL_A    (JJ) = PABS_SW_WALL_A    (JJ)/(1.-PALB_WALL   (JJ))
00679   PREC_SW_WALL_B    (JJ) = PABS_SW_WALL_B    (JJ)/(1.-PALB_WALL   (JJ))
00680 !
00681   PREC_SW_WIN       (JJ) = ZREC_DIR_SW_WIN(JJ) + ZREC_SCA_SW_WIN(JJ)
00682 !
00683   PREC_SW_GARDEN    (JJ) = PABS_SW_GARDEN    (JJ)/(1.-PALB_GARDEN (JJ))
00684 !
00685 !-------------------------------------------------------------------------------
00686 !
00687 !*      7.     total solar radiation transmitted inside building
00688 !*             and energy not ref., nor absorbed, nor transmitted
00689 !              --------------------------------------------------
00690 !
00691     PTR_SW_WIN(JJ) = PREC_SW_WIN(JJ) * ZTRAN_WIN(JJ)
00692 !               [W/m2(bld)]
00693     PE_SHADING(JJ) = PREC_SW_WIN(JJ) * (1. - PALB_WIN(JJ) - ZABS_WIN(JJ) - ZTRAN_WIN(JJ))
00694 !               [W/m2(win)]
00695 
00696 ENDDO
00697 !
00698 !-------------------------------------------------------------------------------
00699 !
00700 IF (LHOOK) CALL DR_HOOK('URBAN_SOLAR_ABS',1,ZHOOK_HANDLE)
00701 CONTAINS
00702 !
00703 !-------------------------------------------------------------------------------
00704 SUBROUTINE SOLAR_REFLECTIONS(ZSW_ROAD,ZSW_WALL,ZSW_GARDEN,             &
00705                                ZABS_SW_ROAD,ZABS_SW_SNOW_ROAD,         &
00706                                ZABS_SW_WALL,                           &
00707                                ZABS_SW_GARDEN, ZABS_SW_WIN             )  
00708 !
00709 REAL, DIMENSION(:), INTENT(IN) :: ZSW_ROAD          ! solar radiation received by road,
00710 REAL, DIMENSION(:), INTENT(IN) :: ZSW_WALL          ! wall, and GARDEN areas 
00711 REAL, DIMENSION(:), INTENT(IN) :: ZSW_GARDEN        ! before reflection
00712 REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_ROAD      ! solar radiation absorbed by
00713 REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_SNOW_ROAD ! solar radiation absorbed by
00714 REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_WALL      ! road, snow over road, and wall 
00715 REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_GARDEN    ! solar radiation absorbed by garden
00716 REAL, DIMENSION(:), INTENT(OUT):: ZABS_SW_WIN       ! solar radiation absorbed by window
00717 !
00718 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZREF0_SW_ROAD    ! first solar reflection
00719 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZREF0_SW_WALL    ! against road, wall
00720 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZREF0_SW_GARDEN  ! and GARDEN areas
00721 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZSREF_SW_ROAD    ! sum of all reflections
00722 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZSREF_SW_WALL    ! against road, wall,
00723 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZSREF_SW_GARDEN  ! and GARDEN areas
00724 !
00725 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: ZWORK1, ZWORK2, ZDENOM
00726 INTEGER :: JJ
00727 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00728 !
00729 IF (LHOOK) CALL DR_HOOK('SOLAR_REFLECTIONS',0,ZHOOK_HANDLE)
00730 !
00731 DO JJ=1,SIZE(ZSW_ROAD)
00732 !*      A.     first solar radiation reflection
00733 !              --------------------------------
00734 !
00735   ZREF0_SW_ROAD(JJ)  = ZAALB_ROAD(JJ)   * ZSW_ROAD(JJ) 
00736 !
00737   ZREF0_SW_GARDEN(JJ) = PALB_GARDEN(JJ) * ZSW_GARDEN(JJ)
00738 !
00739   ZREF0_SW_WALL(JJ)  = ZAALB_WALL(JJ)   * ZSW_WALL(JJ)
00740 !
00741 !*      B.     sum of solar radiation reflected
00742 !              --------------------------------
00743 !
00744 
00745   ZDENOM(JJ) = 1. - (1.-2.*PSVF_WALL(JJ)) * PALB_WALL(JJ) &
00746                  - (1. - PSVF_ROAD(JJ))* &
00747       PSVF_WALL(JJ)*PALB_WALL(JJ)*ZAALB_ROAD(JJ)*ZROAD(JJ) &
00748                  - (1. - PSVF_GARDEN(JJ))* &
00749       PSVF_WALL(JJ)*PALB_WALL(JJ)*PALB_GARDEN(JJ)*ZGARDEN(JJ)  
00750 
00751  ZWORK1(JJ) = PSVF_WALL(JJ) * PALB_WALL(JJ) * ZROAD(JJ)
00752  ZWORK2(JJ) = PSVF_WALL(JJ) * PALB_WALL(JJ) * ZGARDEN(JJ)
00753 !
00754 !
00755   ZSREF_SW_WALL(JJ)  = (  ZREF0_SW_WALL(JJ)   &
00756                            + ZWORK1(JJ) *ZREF0_SW_ROAD(JJ)   &
00757                            + ZWORK2(JJ) *ZREF0_SW_GARDEN(JJ)) &
00758                         / ZDENOM(JJ)  
00759 
00760   ZSREF_SW_ROAD(JJ)  = ( (1.-   PSVF_ROAD(JJ) ) * ZAALB_ROAD(JJ)                     &
00761                                                 * ZREF0_SW_WALL(JJ)                  &
00762                          +(1.-   PSVF_ROAD(JJ) ) * ZAALB_ROAD(JJ)                     &
00763                                                 * ZWORK1(JJ)                     &
00764                                                 * ZREF0_SW_ROAD(JJ)                  &
00765                          +(1.-   PSVF_ROAD(JJ) ) * ZAALB_ROAD(JJ)                     &
00766                                                 * ZWORK2(JJ)                        &
00767                                                 * ZREF0_SW_GARDEN(JJ)               )&
00768                         / ZDENOM(JJ) &
00769                         + ZREF0_SW_ROAD(JJ)   
00770 
00771   ZSREF_SW_GARDEN(JJ) = ( (1.- PSVF_GARDEN(JJ)) * PALB_GARDEN(JJ)                    &
00772                                                 * ZREF0_SW_WALL(JJ)                  &
00773                          +(1.-  PSVF_GARDEN(JJ)) * PALB_GARDEN(JJ)                    &
00774                                                 * ZWORK1(JJ)                        &
00775                                                 * ZREF0_SW_ROAD(JJ)                  &
00776                          +(1.-  PSVF_GARDEN(JJ)) * PALB_GARDEN(JJ)                    &
00777                                                 * ZWORK2(JJ)                    &
00778                                                 * ZREF0_SW_GARDEN(JJ)               )&
00779                         / ZDENOM(JJ)  &
00780                         + ZREF0_SW_GARDEN(JJ)  
00781 !
00782 !
00783 !*      C.     total solar radiation received by roads and GARDEN areas
00784 !              -------------------------------------------------------
00785 !
00786   ZABS_SW_ROAD(JJ)       = (1.-PALB_ROAD(JJ)   )                              &
00787                           * (   ZSW_ROAD(JJ)                                   &
00788                             + ZSREF_SW_WALL(JJ)  * (1.- PSVF_ROAD(JJ) ) )  
00789 !
00790   ZABS_SW_SNOW_ROAD(JJ)  = (1.-PASNOW_ROAD(JJ) )                              &
00791                           * (   ZSW_ROAD(JJ)                                   &
00792                             + ZSREF_SW_WALL(JJ)  * (1.- PSVF_ROAD(JJ) ) )  
00793 !
00794   ZABS_SW_GARDEN(JJ)      = (1.-PALB_GARDEN(JJ))                               &
00795                           * (   ZSW_GARDEN(JJ)                                  &
00796                             + ZSREF_SW_WALL(JJ)  * (1.- PSVF_GARDEN(JJ)) )  
00797 !
00798 !
00799 !*      D.     total solar radiation received by walls
00800 !              ---------------------------------------
00801 !
00802   ZABS_SW_WALL(JJ)      = (1.-PALB_WALL(JJ))                                    &
00803                          * (   ZSW_WALL(JJ)                                      &
00804                            + ZSREF_SW_ROAD(JJ)   *        PSVF_WALL(JJ)*ZROAD(JJ)  &
00805                            + ZSREF_SW_GARDEN(JJ) *        PSVF_WALL(JJ)*ZGARDEN(JJ) &
00806                            + ZSREF_SW_WALL(JJ)   * (1.-2.*PSVF_WALL(JJ))          )  
00807 !
00808   ZABS_SW_WIN (JJ)      = (1.-PALB_WIN (JJ))                                    &
00809                          * (   ZSW_WALL(JJ)                                      &
00810                            + ZSREF_SW_ROAD(JJ)   *        PSVF_WALL(JJ)*ZROAD(JJ)  &
00811                            + ZSREF_SW_GARDEN(JJ) *        PSVF_WALL(JJ)*ZGARDEN(JJ) &
00812                            + ZSREF_SW_WALL(JJ)   * (1.-2.*PSVF_WALL(JJ))          )  
00813 !
00814 ENDDO
00815 !
00816 IF (LHOOK) CALL DR_HOOK('SOLAR_REFLECTIONS',1,ZHOOK_HANDLE)
00817 !
00818 END SUBROUTINE SOLAR_REFLECTIONS
00819 !
00820 !-------------------------------------------------------------------------------
00821 !
00822 SUBROUTINE TOWN_ALBEDO(ZSW,ZABS_SW_ROOF,ZABS_SW_SNOW_ROOF,              &
00823                          ZABS_SW_ROAD, ZABS_SW_SNOW_ROAD,ZABS_SW_WALL,  &
00824                          ZABS_SW_GARDEN, ZABS_SW_GREENROOF, ZABS_SW_WIN,&
00825                          ZALBEDO                                        )  
00826 !
00827 REAL, DIMENSION(:), INTENT(IN) :: ZSW               ! incoming solar radiation
00828 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_ROOF      ! solar radiation absorbed by roofs
00829 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_ROAD      ! solar radiation absorbed by roads
00830 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_WALL      ! solar radiation absorbed by walls
00831 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_WIN       ! solar radiation absorbed & transmitted by windows
00832 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_GARDEN    ! solar radiation absorbed by GARDEN areas
00833 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_GREENROOF ! solar radiation absorbed by green roof areas
00834 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_SNOW_ROOF ! solar radiation absorbed by roof snow
00835 REAL, DIMENSION(:), INTENT(IN) :: ZABS_SW_SNOW_ROAD ! solar radiation absorbed by road snow
00836 REAL, DIMENSION(:), INTENT(OUT):: ZALBEDO           ! town averaged albedo
00837 
00838 REAL, DIMENSION(SIZE(ZSW))     :: ZSW_UP            ! outgoing solar radiation
00839 INTEGER :: JJ
00840 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00841 
00842 IF (LHOOK) CALL DR_HOOK('TOWN_ALBEDO',0,ZHOOK_HANDLE)
00843 DO JJ=1,SIZE(ZSW)
00844 
00845   ZSW_UP(JJ) = ZSW(JJ)                                                           &
00846             - ( PBLD(JJ)   *(1.-PFRAC_GR(JJ))*PDF_ROOF(JJ) *ZABS_SW_ROOF(JJ)     &
00847                +PBLD(JJ)   *(1.-PFRAC_GR(JJ))*PDN_ROOF(JJ) *ZABS_SW_SNOW_ROOF(JJ)&
00848                +PBLD(JJ)   *    PFRAC_GR(JJ)               *ZABS_SW_GREENROOF(JJ)&
00849                +PROAD(JJ)                    *PDF_ROAD(JJ) *ZABS_SW_ROAD (JJ)    &
00850                +PROAD(JJ)                    *PDN_ROAD(JJ) *ZABS_SW_SNOW_ROAD(JJ)&
00851                +PGARDEN(JJ)                                *ZABS_SW_GARDEN(JJ)   &
00852                +PWALL_O_HOR(JJ)              *(1.-PGR(JJ)) *ZABS_SW_WALL(JJ)     &
00853                +PWALL_O_HOR(JJ)              *    PGR(JJ)  *ZABS_SW_WIN (JJ)     )  
00854 !
00855   IF (ZSW(JJ)>0.) THEN
00856     ZALBEDO(JJ)  = ZSW_UP(JJ) / ZSW(JJ)
00857   ELSE
00858     ZALBEDO(JJ)  = XUNDEF
00859   END IF
00860 !
00861 ENDDO
00862 IF (LHOOK) CALL DR_HOOK('TOWN_ALBEDO',1,ZHOOK_HANDLE)
00863 !
00864 END SUBROUTINE TOWN_ALBEDO
00865 !
00866 !-------------------------------------------------------------------------------
00867 !
00868 END SUBROUTINE URBAN_SOLAR_ABS