Newer
Older
!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
!SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
!SFX_LIC for details. version 1.
SUBROUTINE URBAN_SOLAR_ABS(TOP, T, B, DMT, GDP, PDIR_SW, PSCA_SW, PZENITH, PAZIM, &
PFRAC_PANEL, PALB_PANEL, PALB_GD, PALB_GR, PALB_HVEG,&
PDN_RF, PDF_RF, PDN_RD, PDF_RD, PTRANS_HVCR, &
PREC_SW_GD, PREC_SW_RF, PDIR_ALB_TWN, PSCA_ALB_TWN, &
PREC_SW_WIN, PREF_SW_GRND, PREF_SW_FAC, &
PREF_SW_HV, &
PE_SHADING, PSHAD_BEHAV_ANYWAY,PSHAD_BEHAV_ADAPTI, &
OALB_ONLY )
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
! ##########################################################################
!
!!**** *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
!! ------
!!
!!
!! MODIFICATIONS
!! -------------
!! Original 23/01/98
!! 21/11/00 (V. Masson) bug in reflections for roads
!! 12/02 (A. Lemonsu) bug in diagnostic of albedo
!! 12/11 (V. Masson ) adds road direction option
!! 01/12 (V. Masson ) adds 2 different wall direct insulations
!! 04/12 (G. Pigeon) add PTRAN_WIN
!! 09/12 (C. de Munck-A. Lemonsu) add green roofs
!! /15 (V. Masson) add solar panels
!! 01/16 (E. Redon - A. Lemonsu) add high vegetation
!! 12/16 (V. Masson) bug in reflections by facades: wall
!! albedo was used instead of wall+window albedo
!-------------------------------------------------------------------------------
!
!* 0. DECLARATIONS
! ------------
!
USE MODD_TEB_OPTION_n, ONLY : TEB_OPTIONS_t
USE MODD_TEB_n, ONLY : TEB_t
USE MODD_ISBA_n, ONLY : ISBA_P_t, ISBA_K_t
USE MODD_BEM_n, ONLY : BEM_t
USE MODD_DIAG_MISC_TEB_n, ONLY : DIAG_MISC_TEB_t
!
USE MODD_CSTS, ONLY : XPI
USE MODD_BEM_CST, ONLY : XWIN_SW_MAX
USE MODD_SURF_PAR, ONLY : XUNDEF, XSURF_EPSILON
!
USE MODI_WINDOW_SHADING
!
!
USE YOMHOOK ,ONLY : LHOOK, DR_HOOK
USE PARKIND1 ,ONLY : JPRB
USE MODI_ABOR1_SFX
!
IMPLICIT NONE
!
!* 0.1 declarations of arguments
!
TYPE(TEB_OPTIONS_t), INTENT(INOUT) :: TOP
! 'UNIF' : classical TEB version, all walls are identical
! 'TWO ' : the two opposite walls are different & receive different solar energy
TYPE(TEB_t), INTENT(INOUT) :: T
TYPE(BEM_t), INTENT(INOUT) :: B
TYPE(ISBA_P_t), INTENT(INOUT) :: GDP
TYPE(DIAG_MISC_TEB_t), INTENT(INOUT) :: DMT
!
REAL, DIMENSION(:), INTENT(IN) :: PDIR_SW ! incoming direct solar radiation
REAL, DIMENSION(:), INTENT(IN) :: PSCA_SW ! scattered incoming solar rad.
REAL, DIMENSION(:), INTENT(IN) :: PZENITH ! solar zenithal angle
REAL, DIMENSION(:), INTENT(IN) :: PAZIM ! solar azimuthal angle
! ! (radian from N, clockwise)
REAL, DIMENSION(:), INTENT(IN) :: PFRAC_PANEL ! Fraction of solar panel on roofs (-)
REAL, DIMENSION(:), INTENT(IN) :: PALB_PANEL ! Albedo of solar panels (-)
REAL, DIMENSION(:), INTENT(IN) :: PALB_GD ! GD areas albedo
REAL, DIMENSION(:), INTENT(IN) :: PALB_GR ! green roof albedo
REAL, DIMENSION(:), INTENT(IN) :: PALB_HVEG ! high-vegetation albedo
REAL, DIMENSION(:), INTENT(IN) :: PDN_RF ! snow-covered roof fraction
REAL, DIMENSION(:), INTENT(IN) :: PDF_RF ! snow-free roof fraction
REAL, DIMENSION(:), INTENT(IN) :: PDN_RD ! snow-covered road fraction
REAL, DIMENSION(:), INTENT(IN) :: PDF_RD ! snow-free road fraction
!new argument for parametrization of urban trees
REAL, DIMENSION(:), INTENT(IN) :: PTRANS_HVCR ! transmissivity for all crown of high veg
!
REAL, DIMENSION(:), INTENT(OUT) :: PREC_SW_GD ! solar radiation received
! ! by GD areas
REAL, DIMENSION(:), INTENT(OUT) :: PREC_SW_RF ! solar radiation received
! ! by RF areas (below solar panels if any)
REAL, DIMENSION(:), INTENT(OUT) :: PDIR_ALB_TWN ! town direct albedo
REAL, DIMENSION(:), INTENT(OUT) :: PSCA_ALB_TWN ! town diffuse albedo
!
REAL, DIMENSION(:), INTENT(OUT) :: PREC_SW_WIN ! solar radiation received by windows
REAL, DIMENSION(:), INTENT(OUT) :: PREF_SW_GRND ! total solar radiation reflected by ground
REAL, DIMENSION(:), INTENT(OUT) :: PREF_SW_FAC ! total solar radiation reflected by wall
REAL, DIMENSION(:), INTENT(OUT) :: PREF_SW_HV ! total solar radiation reflected by high vegetation
!new arguments for shading
REAL, DIMENSION(:), INTENT(OUT) :: PE_SHADING ! Energy that is not reflected
! by the shading, nor transmitted through
! the bld, nor absorbed by the
REAL, DIMENSION(:,:), INTENT(IN) :: PSHAD_BEHAV_ANYWAY ! Fraction of shades closes anyway
REAL, DIMENSION(:,:), INTENT(IN) :: PSHAD_BEHAV_ADAPTI ! Fraction of shades available for adaptive closing
!
!
LOGICAL, INTENT(IN), OPTIONAL :: OALB_ONLY
!
!* 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)) :: ZDIR_SW_UP ! direct outgoing radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_UP ! diffuse outgoing radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSW_UP_ROOF ! direct + diffuse reflected radiation by roofs
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSW_UP_CAN ! direct + diffuse reflected radiation by the canyon
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTANZEN ! tangente of solar zenithal angle
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTHETA0_R ! canyon angle for
! ! which solar
! ! radiation
! ! reaches the road
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZTHETA0_HV ! canyon angle for
! ! which solar
! ! radiation
! ! reaches the road
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZAALB_RD ! averaged albedo
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_RD ! direct radiation reaching
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WL_A ! road, wall A,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WL_B ! wall B,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_GD ! GD areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_HV ! high vegetation areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDIR_SW_WL ! and on average on 2 walls
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_RD ! diffuse radiation reaching
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_WL ! road, wall,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_GD ! and GD areas
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZSCA_SW_HV ! and high vegetation areas
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZNTR_DIR_SW_HV ! direct SR no transmitted (refl/abs) by high veg
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZCOEFF_RT ! coefficient for constraining reflections of HV to R in SWrad upward
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZCOEFF_WT ! coefficient for constraining reflections of HV to W in SWrad upward
!
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_RF ! solar radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_RD ! absorbed by roofs,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WL_A ! road, wall A,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WL_B ! wall B,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WL ! both walls on average,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_GD ! GD areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_HV ! direct SR absorbed by high veg
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_GR ! green roof areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_PANEL ! solar panels,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_WIN ! window (abs+trans), and snow
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SN_RF ! over roof, wall,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SN_RD ! and GD areas
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_DIR_SW_SKY ! sky
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_RF ! solar radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_RD ! absorbed by roofs,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_WL ! road, wall,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_GD ! GD areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_HV ! high vegetation areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_GR ! green roof areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_PANEL ! solar panels,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_WIN ! window (abs+trans), and snow
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SN_RF ! over roof and wall,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SN_RD ! coming from diffuse rad.
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZABS_SCA_SW_SKY ! sky
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZDW ! difference of radiation
! ! absorbed by the 2 walls
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_DIR_SW_RF ! solar radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_DIR_SW_RD ! refelcted by roofs,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_DIR_SW_WL ! both walls on average,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_DIR_SW_GD ! GARDEN areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_DIR_SW_HV ! GARDEN areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_SCA_SW_RF ! solar radiation
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_SCA_SW_RD ! refelcted by roofs,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_SCA_SW_WL ! both walls on average,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_SCA_SW_GD ! GARDEN areas,
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREF_SCA_SW_HV ! GARDEN areas,
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZRD !
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZRD_DIR ! Road direction
! ! (radian from N, clockwise)
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZGD ! garden fraction in the canyon
!
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREC_DIR_SW_WIN
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZREC_SCA_SW_WIN
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZAALB_WL
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZFRAC_SHAD
REAL, DIMENSION(SIZE(PDIR_SW),SIZE(B%XTI_BLD,2)) :: ZTRAN_WIN ! solar transmittivity of windows
REAL, DIMENSION(SIZE(PDIR_SW),SIZE(B%XTI_BLD,2)) :: ZABS_WIN ! solar transmittivity of windows
REAL, DIMENSION(SIZE(PDIR_SW),SIZE(B%XTI_BLD,2)) :: ZALB_WIN ! solar reflectance of windows
REAL, DIMENSION(SIZE(PDIR_SW)) :: ZAGG_ABS_WIN ! solar transmittivity of windows
REAL, DIMENSION(SIZE(PDIR_SW),SIZE(B%XTI_BLD,2)) :: ZEFF_SHAD ! Indicator for shading status
REAL, DIMENSION(SIZE(PDIR_SW),SIZE(B%XTI_BLD,2)) :: ZE_SHADING
INTEGER :: JJ, JCOMP ! loop index
!
REAL(KIND=JPRB) :: ZHOOK_HANDLE
!-------------------------------------------------------------------------------
!
IF (LHOOK) CALL DR_HOOK('URBAN_SOLAR_ABS',0,ZHOOK_HANDLE)
!
GALB_ONLY = .FALSE.
IF (PRESENT(OALB_ONLY)) GALB_ONLY = OALB_ONLY
!
ZDIR_SW = MAX(PDIR_SW,0.)
ZSCA_SW = MAX(PSCA_SW,0.000001)
!
ZDIR_SW_UP (:) = 0.
ZSCA_SW_UP (:) = 0.
ZSW_UP_ROOF (:) = 0.
ZSW_UP_CAN (:) = 0.
!
IF (T%XROAD(JJ)+T%XGARDEN(JJ).NE.0.) THEN
ZRD(JJ) = T%XROAD(JJ) / (T%XROAD(JJ)+T%XGARDEN(JJ))
ZGD(JJ) = T%XGARDEN(JJ) / (T%XROAD(JJ)+T%XGARDEN(JJ))
!
!-------------------------------------------------------------------------------
!
!* 1. SOLAR RADIATIONS FOR ROOFS
! --------------------------
!
!* One supposes that solar panels, if present, intercept all solar radiation
!
ZABS_DIR_SW_PANEL (JJ) = ZDIR_SW(JJ) * (1. - PALB_PANEL (JJ))
ZABS_SCA_SW_PANEL (JJ) = ZSCA_SW(JJ) * (1. - PALB_PANEL (JJ))
!
!* solar energy received by the surfaces below solar panels
ZABS_DIR_SW_RF (JJ) = ZDIR_SW(JJ) * (1. - T%XALB_ROOF (JJ)) * (1.-PFRAC_PANEL(JJ))
ZABS_DIR_SW_SN_RF(JJ) = ZDIR_SW(JJ) * (1. - T%TSNOW_ROOF%ALB(JJ)) * (1.-PFRAC_PANEL(JJ))
ZABS_DIR_SW_GR (JJ) = ZDIR_SW(JJ) * (1. - PALB_GR (JJ)) * (1.-PFRAC_PANEL(JJ))
ZABS_SCA_SW_RF (JJ) = ZSCA_SW(JJ) * (1. - T%XALB_ROOF (JJ)) * (1.-PFRAC_PANEL(JJ))
ZABS_SCA_SW_SN_RF(JJ) = ZSCA_SW(JJ) * (1. - T%TSNOW_ROOF%ALB(JJ)) * (1.-PFRAC_PANEL(JJ))
ZABS_SCA_SW_GR (JJ) = ZSCA_SW(JJ) * (1. - PALB_GR (JJ)) * (1.-PFRAC_PANEL(JJ))
!
!-------------------------------------------------------------------------------
!
!* 2. SOLAR RADIATIONS FOR ROADS AND WALLS
! ------------------------------------
!
IF (ABS(0.5*XPI-PZENITH(JJ)) < 1.E-6) THEN
IF(0.5*XPI-PZENITH(JJ) > 0.) ZTANZEN(JJ)=TAN(0.5*XPI-1.E-6)
IF(0.5*XPI-PZENITH(JJ) <= 0.) ZTANZEN(JJ)=TAN(0.5*XPI+1.E-6)
ELSEIF (ABS(PZENITH(JJ)) < 1.E-6) THEN
ZTANZEN(JJ)=SIGN(1.,PZENITH(JJ))*TAN(1.E-6)
ELSE
ZTANZEN(JJ) = TAN(PZENITH(JJ))
ENDIF
!
!
! Case with buildings
! -------------------
!
!* 2.1 radiation coefficients
! ----------------------
!
!* a. Case with isotropic street orientations
! ---------------------------------------
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
ZTHETA0_R(JJ) = ASIN( MIN(ABS( 1./ZTANZEN(JJ))/T%XCAN_HW_RATIO(JJ), 1. ) )
!
!
!* 2.2 direct solar radiation received by high vegetation (above HV, before interception)
! ----------------------------------------------------------------------------------
!
! * a.1. Case with explicit high vegetation
! ----------------------------------
IF (T%XURBTREE(JJ).GT.0.) THEN
!
! thetha0_hveg = (h/w)*((hbld-htree)/h)=(hbld-htree)/w
!
ZTHETA0_HV(JJ) = ASIN( MAX(MIN(ABS( 1./ZTANZEN(JJ))/(T%XCAN_HW_RATIO(JJ) &
* ((MAX(1.0E-6,T%XBLD_HEIGHT(JJ)-GDP%XH_TREE(JJ)))/T%XBLD_HEIGHT(JJ))), &
(1.0-XSURF_EPSILON) ), (-1.0+XSURF_EPSILON) ))
!
ZDIR_SW_HV(JJ) = ( ZDIR_SW(JJ) * 2. * ZTHETA0_HV(JJ) / XPI &
- ZDIR_SW(JJ) * 2. * ZTANZEN(JJ) / XPI &
* (T%XCAN_HW_RATIO(JJ)*((T%XBLD_HEIGHT(JJ)-GDP%XH_TREE(JJ))/T%XBLD_HEIGHT(JJ))) &
* (1.-COS(ZTHETA0_HV(JJ))) )
!
! flux of direct solar radiation reflected or absorbed by high vegetation
! (in other words, not transmitted)
!
ZNTR_DIR_SW_HV(JJ) = ZDIR_SW_HV(JJ)*(1.-PTRANS_HVCR(JJ))
!
! * a.2. Case without explicit high vegetation
! -------------------------------------
ELSE
ZDIR_SW_HV(JJ) = 0.
ZNTR_DIR_SW_HV(JJ) = 0.
ENDIF
!* 2.3 direct solar radiation received by roads and garden areas
! ---------------------------------------------------------
ZDIR_SW_RD (JJ) = ( ZDIR_SW(JJ) - T%XURBTREE(JJ)*ZNTR_DIR_SW_HV(JJ) ) &
*( 2. * ZTHETA0_R(JJ) / XPI &
-2. * ZTANZEN(JJ) / XPI &
* T%XCAN_HW_RATIO(JJ) * (1.-COS(ZTHETA0_R(JJ))) )
!
ZDIR_SW_GD(JJ)= ( ZDIR_SW(JJ) - T%XURBTREE(JJ)*ZNTR_DIR_SW_HV(JJ) ) &
*( 2. * ZTHETA0_R(JJ) / XPI &
-2. * ZTANZEN(JJ) / XPI &
* T%XCAN_HW_RATIO(JJ) * (1.-COS(ZTHETA0_R(JJ))) )
!
!
IF (.NOT. GALB_ONLY) THEN
IF (PZENITH(JJ).LT.0.5*XPI) THEN
DMT%XROAD_SHADE(JJ) = 1.0 - ( 2. * ZTHETA0_R(JJ) / XPI -2. * ZTANZEN(JJ) / XPI &
* T%XCAN_HW_RATIO(JJ) * (1.-COS(ZTHETA0_R(JJ))) )
IF (DMT%XROAD_SHADE(JJ).LT.-XSURF_EPSILON) DMT%XROAD_SHADE(JJ) = 1.0
ELSE
DMT%XROAD_SHADE(JJ) = 1.0
ENDIF
ENDIF
!* b. Case with prescribed street orientations
! ----------------------------------------
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
!
! * b.1. Case with explicit high vegetation
! ----------------------------------
IF (T%XURBTREE(JJ).GT.0.) THEN
!
! The reference height for tree canopy is the top of trees
ZDIR_SW_HV (JJ) = ZDIR_SW(JJ)* MAX(0., &
1.-(T%XCAN_HW_RATIO(JJ)*((T%XBLD_HEIGHT(JJ)-GDP%XH_TREE(JJ))/T%XBLD_HEIGHT(JJ))) &
*ZTANZEN(JJ)*ABS(SIN(PAZIM(JJ)-ZRD_DIR(JJ))) )
!
! * b.2. Case without explicit high vegetation
! -------------------------------------
ELSE
ZDIR_SW_HV (JJ) = 0.
ENDIF
!
! Flux of direct solar radiation reflected or absorbed by high vegetation (or no transmitted)
!
ZNTR_DIR_SW_HV(JJ) = ZDIR_SW_HV(JJ)*(1.-PTRANS_HVCR(JJ))
!
! Flux received by roads and gardens (at ground level)
ZDIR_SW_RD (JJ) = (ZDIR_SW(JJ) - T%XURBTREE(JJ)*ZNTR_DIR_SW_HV(JJ) ) * &
MAX(0.,1.-T%XCAN_HW_RATIO(JJ)*ZTANZEN(JJ) * &
ABS(SIN(PAZIM(JJ)-ZRD_DIR(JJ))))
ZDIR_SW_GD(JJ) = ZDIR_SW_RD(JJ)
!
IF (.NOT. GALB_ONLY) THEN
IF (PZENITH(JJ).LT.0.5*XPI) THEN
DMT%XROAD_SHADE(JJ) = 1.0 - MAX(0.,1.-T%XCAN_HW_RATIO(JJ)*ZTANZEN(JJ) * &
ABS(SIN(PAZIM(JJ)-ZRD_DIR(JJ))))
IF (DMT%XROAD_SHADE(JJ).LT.-XSURF_EPSILON) DMT%XROAD_SHADE(JJ) = 1.0
ELSE
DMT%XROAD_SHADE(JJ) = 1.0
ENDIF
ENDIF
!
!* 2.4 direct solar radiation received by walls
! ----------------------------------------
!
ZDIR_SW_WL(JJ) = (ZDIR_SW(JJ) - (ZDIR_SW_RD(JJ)*ZRD(JJ)+ &
ZDIR_SW_GD(JJ)*ZGD(JJ)+ &
ZNTR_DIR_SW_HV(JJ)*T%XURBTREE(JJ)) ) &
! Case without buildings
! ----------------------
IF (T%XURBTREE(JJ).GT.0.) THEN
ZDIR_SW_HV(JJ) = ZDIR_SW(JJ)
ELSE
ZDIR_SW_HV(JJ) = 0.
ENDIF
!
! Flux of direct solar radiation reflected or absorbed by high vegetation (or no transmitted)
ZNTR_DIR_SW_HV(JJ) = ZDIR_SW_HV(JJ)*(1.-PTRANS_HVCR(JJ))
!
ZDIR_SW_WL (JJ) = 0.
ZDIR_SW_RD (JJ) = ZDIR_SW(JJ) - T%XURBTREE(JJ)*ZNTR_DIR_SW_HV(JJ)
ZDIR_SW_GD (JJ) = ZDIR_SW(JJ) - T%XURBTREE(JJ)*ZNTR_DIR_SW_HV(JJ)
IF (TOP%CROAD_DIR=='UNIF' .OR. TOP%CWALL_OPT=='UNIF') THEN
ZDIR_SW_WL_A(JJ) = ZDIR_SW_WL(JJ)
ZDIR_SW_WL_B(JJ) = ZDIR_SW_WL(JJ)
ELSE
!* if walls are separated, then radiation reaches the wall facing sun
! Note that wall A is the one facing mostly to the South (depending to
! road orientation), and wall B in the one facing mostly to the North
!
! In case of N-S road, wall A is the West wall (= East-facing wall),
! and wall B is the East wall (= West-facing wall)
! In case of E-W road, wall A is the North wall (= South-facing wall),
! and wall B is the South wall (= North-facing wall)
IF (SIN(PAZIM(JJ)-ZRD_DIR(JJ))>0.) THEN
ZDIR_SW_WL_A(JJ) = 2.* ZDIR_SW_WL(JJ)
ZDIR_SW_WL_B(JJ) = 0.
ZDIR_SW_WL_A(JJ) = 0.
ZDIR_SW_WL_B(JJ) = 2.* ZDIR_SW_WL(JJ)
! The direct sw radiation received by the high vegetation is corrected by transmitted part =
! the intercepted direct sw radiation (absorbed + reflected terms), before reflections calculations
ZDIR_SW_HV(JJ) = ZDIR_SW_HV(JJ)*(1.-PTRANS_HVCR(JJ))
!* 2.5 diffuse solar radiation received by roads and garden areas
! ---------------------------------------------------------
!
!
ZSCA_SW_RD (JJ) = ZSCA_SW(JJ) * T%XSVF_RS(JJ) * T%XTAU_SR(JJ)
ZSCA_SW_GD (JJ) = ZSCA_SW(JJ) * T%XSVF_RS(JJ) * T%XTAU_SR(JJ)
!* 2.6 diffuse solar radiation received by walls
! -----------------------------------------
!
ZSCA_SW_WL (JJ) = ZSCA_SW(JJ) *T%XSVF_WS(JJ) * T%XTAU_SW(JJ)
!* 2.7 diffuse solar radiation received by high veg
! -----------------------------------------
!
! The diffuse sw radiation received by the high vegetation is corrected by transmitted part =
! the intercepted diffuse sw radiation (absorbed + reflected terms)
IF (T%XURBTREE(JJ).GT.0.) THEN
ZSCA_SW_HV (JJ) = (ZSCA_SW(JJ) &
- (ZRD(JJ) * ZSCA_SW_RD(JJ) + &
ZGD(JJ) * ZSCA_SW_GD(JJ) + &
T%XWALL_O_HOR(JJ)/(1.-T%XBLD(JJ)) * ZSCA_SW_WL(JJ)) )&
/ T%XURBTREE(JJ)
ELSE
ZSCA_SW_HV (JJ) = 0.
ENDIF
!* 2.9 averaged albedos when snow is present
! -------------------------------------
!
ZAALB_RD (JJ) = PDF_RD (JJ) * T%XALB_ROAD (JJ) + PDN_RD (JJ) * T%TSNOW_ROAD%ALB (JJ)
!* 2.9b averaged facade albedo
! -------------------------------------
!
ZEFF_SHAD(:,:) = -9999.0
DMT%XDIAGSHAD(:,:) = 0.0
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
DO JJ=1,SIZE(B%XSHADEARCHI,1)
DO JCOMP=1,SIZE(B%XFRACOMP,2)
!
IF (B%XSHADEARCHI(JJ).LT.0.5) THEN
!
! If shading elements are not present, shading is not possible
!
ZEFF_SHAD(JJ,JCOMP) = 0.0
DMT%XDIAGSHAD(JJ,JCOMP) = 0.0
!
ELSE IF (B%XSHADEARCHI(JJ).GT.1.5) THEN
!
! In this case shading elements are always present
! However, PDIAGSHAD=0 since this diagnostic
! represents only shading due to human behaviour.
!
ZEFF_SHAD(JJ,JCOMP) = 1.0
DMT%XDIAGSHAD(JJ,JCOMP) = 0.0
!
ELSE
!
! If shading elements are present, the shading behavioural
! indicators are used to determine the fraction of shades closed
! A logistic function is used to determine the fractions of shades actually closed.
!
ZFRAC_SHAD(JJ) = 1.0/(1.0+EXP(-0.05*(ZDIR_SW_WL(JJ)+ZSCA_SW_WL(JJ)-B%XWIN_SW_MAX(JJ))))
!
ZEFF_SHAD(JJ,JCOMP) = PSHAD_BEHAV_ANYWAY(JJ,JCOMP) + PSHAD_BEHAV_ADAPTI(JJ,JCOMP)*ZFRAC_SHAD(JJ)
!
DMT%XDIAGSHAD(JJ,JCOMP) = ZEFF_SHAD(JJ,JCOMP)
!
ENDIF
ENDDO
ENDDO
IF ((MINVAL(DMT%XDIAGSHAD).LT.-XSURF_EPSILON).OR. &
(MAXVAL(DMT%XDIAGSHAD).GT.(1.0+XSURF_EPSILON))) CALL ABOR1_SFX("Wrong shading fraction")
DO JCOMP=1,SIZE(B%XFRACOMP,2)
ZTRAN_WIN (:,JCOMP) = B%XTRAN_WIN(:)
ENDDO
!
CALL WINDOW_SHADING(B%XSHGC_SH, ZEFF_SHAD, T%XALB_WALL, &
B%XABS_WIN, ZABS_WIN, ZALB_WIN, ZTRAN_WIN )
!
! The values of the window albedo and window absorbance are aggregated
! over the bem compartments
!
ZAGG_ABS_WIN(:)=0.0
B%XALB_WIN(:)=0.0
DO JCOMP=1,SIZE(B%XFRACOMP,2)
B%XALB_WIN(:) = B%XALB_WIN(:) + B%XFRACOMP(:,JCOMP) * ZALB_WIN(:,JCOMP)
ZAGG_ABS_WIN(:) = ZAGG_ABS_WIN(:) + B%XFRACOMP(:,JCOMP) * ZABS_WIN(:,JCOMP)
ENDDO
ZAGG_ABS_WIN(:) = 0.0
ZABS_WIN (:,:) = 0.0
B%XALB_WIN (:) = 0.0
ZALB_WIN (:,:) = 0.0
ZTRAN_WIN(:,:) = 0.0
ZAALB_WL(:) = B%XGR(:) * B%XALB_WIN(:) + (1.-B%XGR(:)) * T%XALB_WALL(:)
!* 2.9 absorption of direct incoming solar radiation
! ---------------------------------------------
!
!
CALL SOLAR_REFLECTIONS( ZDIR_SW, ZDIR_SW_RD,ZDIR_SW_WL, ZDIR_SW_GD, ZDIR_SW_HV, &
ZREF_DIR_SW_RD, ZREF_DIR_SW_WL, &
ZREF_DIR_SW_GD, ZREF_DIR_SW_HV, &
ZABS_DIR_SW_SKY, &
ZABS_DIR_SW_RD, ZABS_DIR_SW_SN_RD, &
ZABS_DIR_SW_WL, ZABS_DIR_SW_GD, ZABS_DIR_SW_WIN, &
ZABS_DIR_SW_HV )
IF (TOP%CROAD_DIR=='UNIF' .OR. TOP%CWALL_OPT=='UNIF') THEN
ZABS_DIR_SW_WL_A = ZABS_DIR_SW_WL
ZABS_DIR_SW_WL_B = ZABS_DIR_SW_WL
ELSE
!* if walls are separated, then radiation reaches the wall facing sun
! Note that wall A is the one facing mostly to the North (depending to
! road orientation), and wall B in the one facing mostly to the South.
ZDW = (1.-T%XALB_WALL(:)) * ZAALB_WL(:) * (1.-2.*T%XSVF_WS(:)) &
/ (1.+ZAALB_WL(:)*(1.-2.*T%XSVF_WS(:))) &
* 0.5 * (ZDIR_SW_WL_A(:)-ZDIR_SW_WL_B(:)) &
+ 0.5 * (1.-T%XALB_WALL(:)) * (ZDIR_SW_WL_A-ZDIR_SW_WL_B)
DO JJ=1,SIZE(T%XROAD)
IF (ZDW(JJ) .GE. 0.) THEN
ZDW(JJ) = MIN( ZDW(JJ) , ZABS_DIR_SW_WL(JJ) )
ELSE
ZDW(JJ) = - MIN( ABS(ZDW(JJ)) , ZABS_DIR_SW_WL(JJ) )
ENDIF
ENDDO
ZABS_DIR_SW_WL_A = ZABS_DIR_SW_WL + ZDW
ZABS_DIR_SW_WL_B = ZABS_DIR_SW_WL - ZDW
!* 2.10 absorption of diffuse incoming solar radiation
! ----------------------------------------------
!
CALL SOLAR_REFLECTIONS( ZSCA_SW, &
ZSCA_SW_RD,ZSCA_SW_WL, &
ZSCA_SW_GD, ZSCA_SW_HV, &
ZREF_DIR_SW_RD, ZREF_DIR_SW_WL, &
ZREF_DIR_SW_GD, ZREF_DIR_SW_HV, &
ZABS_SCA_SW_SKY, &
ZABS_SCA_SW_RD, ZABS_SCA_SW_SN_RD, &
ZABS_SCA_SW_WL, ZABS_SCA_SW_GD, ZABS_SCA_SW_WIN, &
ZABS_SCA_SW_HV )
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
DO JJ=1,SIZE(T%XROAD)
!
! solar flux reflected for façade (wall + window) and soil (road + garden)
!
PREF_SW_GRND(JJ) = ZRD(JJ) * T%XALB_ROAD(JJ) / MAX( XSURF_EPSILON,(1. - T%XALB_ROAD(JJ)) ) * &
(ZABS_DIR_SW_RD(JJ) + ZABS_SCA_SW_RD(JJ)) &
+ ZGD(JJ) * PALB_GD(JJ) / MAX( XSURF_EPSILON,(1. - PALB_GD(JJ))) * &
(ZABS_DIR_SW_GD(JJ) + ZABS_SCA_SW_GD(JJ))
!
PREF_SW_FAC(JJ) = (1 - B%XGR(JJ)) * T%XALB_WALL(JJ) / MAX( XSURF_EPSILON,(1. - T%XALB_WALL(JJ)) ) * &
(ZABS_DIR_SW_WL(JJ) + ZABS_SCA_SW_WL(JJ)) &
+ B%XGR(JJ) * B%XALB_WIN(JJ) / MAX( XSURF_EPSILON,(1 - B%XALB_WIN(JJ)) ) * &
(ZABS_DIR_SW_WIN(JJ) + ZABS_SCA_SW_WIN(JJ))
!
! solar flux reflected for high vegetation
!
!! Calcul1
!! -------
!
IF (T%XURBTREE(JJ).GT.0.) THEN
! Calcul2
! -------
PREF_SW_HV(JJ) = ZRD(JJ) * (ZDIR_SW_RD(JJ) + ZSCA_SW_RD(JJ)) + &
ZGD(JJ) * (ZDIR_SW_GD(JJ) + ZSCA_SW_GD(JJ)) + &
T%XWALL_O_HOR(JJ)/(1.-T%XBLD(JJ))* (ZDIR_SW_WL(JJ) + ZSCA_SW_WL(JJ)) + &
T%XURBTREE(JJ) * (ZDIR_SW_HV(JJ) + ZSCA_SW_HV(JJ) ) - &
ZRD(JJ) * (ZABS_DIR_SW_RD(JJ) + ZABS_SCA_SW_RD(JJ)) - &
ZGD(JJ) * (ZABS_DIR_SW_GD(JJ) + ZABS_SCA_SW_GD(JJ)) - &
T%XWALL_O_HOR(JJ)/(1.-T%XBLD(JJ))* (ZABS_DIR_SW_WL(JJ) + ZABS_SCA_SW_WL(JJ) ) - &
T%XURBTREE(JJ) * (ZABS_DIR_SW_HV(JJ) + ZABS_SCA_SW_HV(JJ) ) - &
PREF_SW_GRND(JJ) - &
T%XWALL_O_HOR(JJ)/(1.-T%XBLD(JJ))* PREF_SW_FAC(JJ)
ELSE
PREF_SW_HV(JJ) = 0.
ENDIF
!
ENDDO
!----------------------------------------------------------------------------------------------------------
!
!* 3. Town albedo
! -----------
!
!* 3.1 direct albedo
! -------------
!
CALL TOWN_ALBEDO(ZDIR_SW,ZABS_DIR_SW_RF,ZABS_DIR_SW_SN_RF, &
ZABS_DIR_SW_RD, ZABS_DIR_SW_SN_RD,ZABS_DIR_SW_WL, &
ZABS_DIR_SW_GD, ZABS_DIR_SW_GR, ZABS_DIR_SW_WIN,&
ZABS_DIR_SW_HV, ZABS_DIR_SW_PANEL, &
PDIR_ALB_TWN,ZDIR_SW_UP )
!* 3.2 diffuse albedo
CALL TOWN_ALBEDO(ZSCA_SW,ZABS_SCA_SW_RF,ZABS_SCA_SW_SN_RF, &
ZABS_SCA_SW_RD, ZABS_SCA_SW_SN_RD,ZABS_SCA_SW_WL, &
ZABS_SCA_SW_GD, ZABS_SCA_SW_GR, ZABS_SCA_SW_WIN,&
ZABS_SCA_SW_HV, ZABS_SCA_SW_PANEL, &
PSCA_ALB_TWN,ZSCA_SW_UP )
IF (LHOOK) CALL DR_HOOK('URBAN_SOLAR_ABS',1,ZHOOK_HANDLE)
RETURN
!-------------------------------------------------------------------------------
!
!* 4. Trivial cases
! -------------
!
WHERE(PDIR_SW(:)==0.)
!
ZABS_DIR_SW_RF (:) = 0.
ZABS_DIR_SW_RD (:) = 0.
ZABS_DIR_SW_WL_A (:) = 0.
ZABS_DIR_SW_WL_B (:) = 0.
ZABS_DIR_SW_GD (:) = 0.
ZABS_DIR_SW_HV (:) = 0.
ZABS_DIR_SW_GR (:) = 0.
ZABS_DIR_SW_PANEL(:) = 0.
ZABS_DIR_SW_WIN (:) = 0.
ZABS_DIR_SW_SN_RF(:) = 0.
ZABS_DIR_SW_SN_RD(:) = 0.
!
ZREF_DIR_SW_RF (:) = 0.
ZREF_DIR_SW_RD (:) = 0.
ZREF_DIR_SW_WL (:) = 0.
ZREF_DIR_SW_GD (:) = 0.
ZREF_DIR_SW_HV (:) = 0.
!
ZREC_DIR_SW_WIN (:) = 0.
!
ZDIR_SW_RD (:) = 0.
ZDIR_SW_WL_A (:) = 0.
ZDIR_SW_WL_B (:) = 0.
ZDIR_SW_GD (:) = 0.
ZDIR_SW_HV (:) = 0.
ZDIR_SW_WL (:) = 0.
!
END WHERE
!
WHERE(PSCA_SW(:)==0.)
ZABS_SCA_SW_RF (:) = 0.
ZABS_SCA_SW_RD (:) = 0.
ZABS_SCA_SW_WL (:) = 0.
ZABS_SCA_SW_GD (:) = 0.
ZABS_SCA_SW_HV (:) = 0.
ZABS_SCA_SW_GR (:) = 0.
ZABS_SCA_SW_PANEL(:) = 0.
ZABS_SCA_SW_WIN (:) = 0.
ZABS_SCA_SW_SN_RF(:) = 0.
ZABS_SCA_SW_SN_RD(:) = 0.
!
ZREF_SCA_SW_RF (:) = 0.
ZREF_SCA_SW_RD (:) = 0.
ZREF_SCA_SW_WL (:) = 0.
ZREF_SCA_SW_GD (:) = 0.
ZREF_SCA_SW_HV (:) = 0.
!
ZREC_SCA_SW_WIN (:) = 0.
!
ZSCA_SW_RD (:) = 0.
ZSCA_SW_WL (:) = 0.
ZSCA_SW_GD (:) = 0.
ZSCA_SW_HV (:) = 0.
!
WHERE((PDIR_SW(:)==0.).AND.(PSCA_SW(:)==0.))
PREF_SW_HV (:) = 0.0
PREF_SW_FAC (:) = 0.0
PREF_SW_GRND (:) = 0.0
END WHERE
WHERE (PDIR_ALB_TWN==XUNDEF) PDIR_ALB_TWN = PSCA_ALB_TWN
!
!-------------------------------------------------------------------------------
!
!
!* 5. Total solar radiation absorbed by each surface
! ----------------------------------------------
!
! solar radiation absorbed by sky
!
DMT%XABS_SW_SKY (JJ) = ZABS_DIR_SW_SKY (JJ) + ZABS_SCA_SW_SKY (JJ)
!
! solar radiation absorbed by roofs
!
DMT%XABS_SW_ROOF (JJ) = ZABS_DIR_SW_RF (JJ) + ZABS_SCA_SW_RF (JJ)
!
! solar radiation absorbed by roads
!
DMT%XABS_SW_ROAD (JJ) = ZABS_DIR_SW_RD (JJ) + ZABS_SCA_SW_RD (JJ)
!
! solar radiation absorbed by garden areas
!
DMT%XABS_SW_GARDEN (JJ) = ZABS_DIR_SW_GD (JJ) + ZABS_SCA_SW_GD (JJ)
! solar radiation absorbed by high vegetation
DMT%XABS_SW_HVEG (JJ) = ZABS_DIR_SW_HV (JJ) + ZABS_SCA_SW_HV (JJ)
! solar radiation absorbed by greenroofs
DMT%XABS_SW_GREENROOF(JJ) = ZABS_DIR_SW_GR (JJ) + ZABS_SCA_SW_GR (JJ)
!
! solar radiation absorbed by solar panels
!
DMT%XABS_SW_PANEL(JJ)= ZABS_DIR_SW_PANEL (JJ) + ZABS_SCA_SW_PANEL (JJ)
! solar radiation absorbed by walls
!
DMT%XABS_SW_WALL_A (JJ) = ZABS_DIR_SW_WL_A (JJ) + ZABS_SCA_SW_WL (JJ)
DMT%XABS_SW_WALL_B (JJ) = ZABS_DIR_SW_WL_B (JJ) + ZABS_SCA_SW_WL (JJ)
!
! solar radiation absorbed (but not transmitted) by windows
!
ZREC_DIR_SW_WIN(JJ) = ZABS_DIR_SW_WIN(JJ) / MAX( XSURF_EPSILON,(1.-B%XALB_WIN(JJ)) )
ZREC_SCA_SW_WIN(JJ) = ZABS_SCA_SW_WIN(JJ) / MAX( XSURF_EPSILON,(1.-B%XALB_WIN(JJ)) )
!
DMT%XABS_SW_WIN (JJ) = (ZREC_DIR_SW_WIN (JJ) + ZREC_SCA_SW_WIN (JJ)) * ZAGG_ABS_WIN(JJ)
!
!
! solar radiation absorbed by snow on roofs
!
IF (PDN_RF(JJ).GT.0.0) THEN
DMT%XABS_SW_SNOW_ROOF (JJ) = ZABS_DIR_SW_SN_RF (JJ) + ZABS_SCA_SW_SN_RF (JJ)
ELSE
DMT%XABS_SW_SNOW_ROOF (JJ) = XUNDEF
ENDIF
!
! solar radiation absorbed by snow on roads
!
IF (PDN_RD(JJ).GT.0.0) THEN
DMT%XABS_SW_SNOW_ROAD (JJ) = ZABS_DIR_SW_SN_RD (JJ) + ZABS_SCA_SW_SN_RD (JJ)
ELSE
DMT%XABS_SW_SNOW_ROAD (JJ) = XUNDEF
ENDIF
!
!-------------------------------------------------------------------------------
!
!* 6. total solar radiation received by each surfaces
! -------------------------------------------------------
!
PREC_SW_WIN (JJ) = ZREC_DIR_SW_WIN(JJ) + ZREC_SCA_SW_WIN(JJ)
PREC_SW_GD (JJ) = DMT%XABS_SW_GARDEN (JJ)/MAX( XSURF_EPSILON,(1.-PALB_GD (JJ)))
!* 6.2 total solar radiation received by roof surfaces below solar panels
!
PREC_SW_RF (JJ) = (PDIR_SW(JJ) + PSCA_SW(JJ)) * (1.-PFRAC_PANEL(JJ))
!-------------------------------------------------------------------------------
!
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
!* 6.2 solar radiation received by high veg
!
IF (T%XURBTREE(JJ).GT.0. .AND. PTRANS_HVCR(JJ)<1.) THEN
DMT%XREC_SW_HVEG (JJ) = DMT%XABS_SW_HVEG (JJ) &
/ ( MAX( XSURF_EPSILON,(1.-PALB_HVEG (JJ))) * (1.-PTRANS_HVCR(JJ)) )
ELSE
DMT%XREC_SW_HVEG (JJ) = 0.
ENDIF
!
!
!* 8. total solar radiation reflected by roof
! --------------------------------------------------
!
!
DMT%XSW_UP_ROOF(JJ) = (PDIR_SW(JJ) + PSCA_SW(JJ)) &
- ( (1.-T%XGREENROOF(JJ)) * PDF_RF(JJ) * DMT%XABS_SW_ROOF(JJ) &
+(1.-T%XGREENROOF(JJ)) * PDN_RF(JJ) * DMT%XABS_SW_SNOW_ROOF(JJ) &
+ T%XGREENROOF(JJ) * DMT%XABS_SW_GREENROOF(JJ) &
+ PFRAC_PANEL(JJ) * DMT%XABS_SW_PANEL(JJ) )
!-------------------------------------------------------------------------------
!
!* 9. total solar radiation reflected by the canyon
! --------------------------------------------------
!
DMT%XSW_UP_CAN(JJ) = (PDIR_SW(JJ) + PSCA_SW(JJ)) &
- ( ZRD(JJ) *PDF_RD(JJ) *DMT%XABS_SW_ROAD (JJ) &
+ZRD(JJ) *PDN_RD(JJ) *DMT%XABS_SW_SNOW_ROAD(JJ)&
+ZGD(JJ) *DMT%XABS_SW_GARDEN(JJ) &
+T%XURBTREE(JJ) *DMT%XABS_SW_HVEG(JJ) &
+T%XCAN_HW_RATIO(JJ) *(1.-B%XGR(JJ)) *DMT%XABS_SW_WALL_A(JJ) &
+T%XCAN_HW_RATIO(JJ) *(1.-B%XGR(JJ)) *DMT%XABS_SW_WALL_B(JJ) &
+T%XCAN_HW_RATIO(JJ) * 2. * B%XGR(JJ) *DMT%XABS_SW_WIN (JJ) )
!
!-------------------------------------------------------------------------------
ENDDO
!-------------------------------------------------------------------------------
!
!* 7. total solar radiation transmitted inside building
!* and energy not ref., nor absorbed, nor transmitted
! --------------------------------------------------
!
IF (TOP%CBEM=='BEM') THEN
PE_SHADING(:) = 0.0
DO JCOMP=1,SIZE(B%XFRACOMP,2)
DMT%XTR_SW_WIN(:,JCOMP) = PREC_SW_WIN(:) * ZTRAN_WIN(:,JCOMP)
ZE_SHADING(:,JCOMP) = PREC_SW_WIN(:) * &
(1.-ZALB_WIN(:,JCOMP)-ZABS_WIN(:,JCOMP)-ZTRAN_WIN(:,JCOMP))
PE_SHADING(:) = PE_SHADING(:) + B%XFRACOMP(:,JCOMP) * ZE_SHADING(:,JCOMP)
ENDDO
END IF