SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
urban_solar_abs.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! #########
6  SUBROUTINE urban_solar_abs(HBEM, HROAD_DIR, HWALL_OPT, &
7  pdir_sw, psca_sw, pzenith, pazim, &
8  pbld, pgarden, proad_dir, proad, pfrac_gr, &
9  pwall_o_hor, pcan_hw_ratio, &
10  palb_roof, &
11  palb_road, psvf_road, palb_wall, psvf_wall, &
12  pfrac_panel, palb_panel, &
13  palb_garden, psvf_garden, &
14  palb_greenroof, &
15  pasnow_roof, pasnow_road, &
16  pdn_roof, pdf_roof, pdn_road, pdf_road, &
17  pgr, pabs_win, pshgc, pshgc_sh, palb_win, &
18  pabs_sw_roof, pabs_sw_road, &
19  pabs_sw_wall_a, pabs_sw_wall_b, &
20  pabs_sw_garden, pabs_sw_greenroof, &
21  pabs_sw_snow_roof, pabs_sw_snow_road, &
22  pabs_sw_solar_panel, &
23  prec_sw_road, prec_sw_snow_road, &
24  prec_sw_wall_a, prec_sw_wall_b, &
25  prec_sw_garden, prec_sw_roof, &
26  pdir_alb_town, psca_alb_town, &
27  psw_rad_garden, pabs_sw_win, prec_sw_win, &
28  ptran_win, &
29  pref_sw_grnd, pref_sw_fac, ptr_sw_win, &
30  pe_shading, oshad_day, &
31  oshade )
32 ! ##########################################################################
33 !
34 !!**** *URBAN_SOLAR_ABS*
35 !!
36 !! PURPOSE
37 !! -------
38 !
39 ! Computes the solar radiation flux absorbed by roofs, roads and walls.
40 ! The absorption by roofs is trivial.
41 !
42 !
43 !!** METHOD
44 ! ------
45 !
46 !
47 ! computation of input solar radiation on each surface
48 ! ****************************************************
49 !
50 ! direct fluxes:
51 ! -------------
52 !
53 ! dir_Rg_road (Wm-2) = S * 2*theta0/pi
54 ! - S *2/tan(zen) * h/W /pi * (1-cos(theta0))
55 !
56 ! dir_Rg_wall (Wm-2) = S / tan(zen) /pi * (1-cos(theta0))
57 ! + S * W/h * (1/2 -theta0/pi)
58 !
59 ! where zen is the zenithal angle, from horizon
60 ! h/W is the aspect ratio of the canyon
61 ! S is the direct solar radiation flux on a horizontal surface
62 !
63 ! theta0 = arcsin(min(W/h * tan(zen),1))
64 !
65 ! The surfaces will keep (1-a) times these fluxes, and reflect the
66 ! remaining
67 !
68 ! scattered fluxes:
69 ! ----------------
70 !
71 ! sca_Rg_road = sca_Rg * SVF_road
72 !
73 ! sca_Rg_wall = sca_Rg * SVF_wall
74 !
75 !
76 ! solar flux and isotropic reflections :
77 ! ------------------------------------
78 !
79 ! after 0 reflection, the absorbed part of the flux is:
80 !
81 ! ARg_r(0) = (1-a_r) (sca_Rg_road + dir_Rg_road)
82 !
83 ! ARg_w(0) = (1-a_w) (sca_Rg_wall + dir_Rg_wall)
84 !
85 ! and the reflected parts are
86 !
87 ! RRg_r(0) = a_r (sca_Rg_road + dir_Rg_road)
88 !
89 ! RRg_w(0) = a_w (sca_Rg_wall + dir_Rg_wall)
90 !
91 ! after n reflection:
92 !
93 ! ARg_r(n) = ARg_r(n-1) + RRg_w(n-1) * (1- SVF_r)(1-a_r)
94 !
95 ! ARg_w(n) = ARg_w(n-1) + RRg_r(n-1) * SVF_w (1-a_w)
96 ! + RRg_w(n-1) * (1-2*SVF_w)(1-a_w)
97 !
98 ! RRg_r(n) = (1- SVF_r) a_r RRg_w(n-1)
99 !
100 ! RRg_w(n) = SVF_w a_w RRg_r(n-1)
101 ! +(1-2SVF_w) a_w RRg_w(n-1)
102 !
103 !
104 ! i.e.
105 ! n-1
106 ! ARg_r(n) = ARg_r(0) + (1- SVF_r)(1-a_r) SUM RRg_w(k)
107 ! k=0
108 !
109 ! n-1
110 ! ARg_w(n) = ARg_w(0) + SVF_w (1-a_w) SUM RRg_r(k)
111 ! k=0
112 ! n-1
113 ! + (1-2*SVF_w)(1-a_w) SUM RRg_w(k)
114 ! k=0
115 !
116 ! with
117 !
118 ! n n-1
119 ! SUM RRg_r(k) = (1- SVF_r) a_r SUM RRg_w(k) + RRg_r(0)
120 ! k=0 k=0
121 !
122 ! n n-1
123 ! SUM RRg_w(k) = SVF_w a_w SUM RRg_r(k)
124 ! k=0 k=0
125 ! n-1
126 ! +(1-2*SVF_w) a_w SUM RRg_w(k) + RRg_w(0)
127 ! k=0
128 !
129 !
130 ! Then
131 !
132 ! n n-1
133 ! SUM RRg_w(k) = (1-2*SVF_w) a_w SUM RRg_w(k)
134 ! k=0 k=0
135 ! n-2
136 ! + (1- SVF_r) SVF_w a_w a_r SUM RRg_w(k)
137 ! k=0
138 !
139 ! + RRg_w(0) + SVF_w a_w RRg_r(0)
140 !
141 !
142 !
143 !
144 ! solving this system, lead after an infinity of reflections/absorptions:
145 !
146 ! inf RRg_w(0) + SVF_w a_w RRg_r(0)
147 ! SUM RRg_w(k) = ----------------------------------------------------
148 ! k=0 1 - (1-2*SVF_w) a_w - (1- SVF_r) SVF_w a_w a_r
149 !
150 !
151 ! inf (1- SVF_r) a_r ( a_w SVF_w RRg_r(0) + RRg_w(0) )
152 ! SUM RRg_r(k) = ------------------------------------------------------------ + RRg_r(0)
153 ! k=0 1 - (1-2*SVF_w) a_w - (1- SVF_r) SVF_w a_w a_r
154 !
155 !
156 ! ARg_r(n) and ARg_w(n) follow
157 !
158 !
159 ! If snow is present, the albedos in all these formulae (and only these,
160 ! not the final net radiation budget) are modified by the albedo of the
161 ! snow-covered surface.
162 !
163 !
164 !
165 !! EXTERNAL
166 !! --------
167 !!
168 !!
169 !! IMPLICIT ARGUMENTS
170 !! ------------------
171 !!
172 !! MODD_CST
173 !!
174 !!
175 !! REFERENCE
176 !! ---------
177 !!
178 !!
179 !! AUTHOR
180 !! ------
181 !!
182 !! V. Masson * Meteo-France *
183 !!
184 !! MODIFICATIONS
185 !! -------------
186 !! Original 23/01/98
187 !! 21/11/00 (V. Masson) bug in reflections for roads
188 !! 12/02 (A. Lemonsu) bug in diagnostic of albedo
189 !! 12/11 (V. Masson ) adds road direction option
190 !! 01/12 (V. Masson ) adds 2 different wall direct insulations
191 !! 04/12 (G. Pigeon) add PTRAN_WIN
192 !! 09/12 (C. de Munck-A. Lemonsu) add green roofs
193 !-------------------------------------------------------------------------------
194 !
195 !* 0. DECLARATIONS
196 ! ------------
197 !
198 USE modd_csts, ONLY : xpi
199 USE modd_bem_cst, ONLY : xwin_sw_max
200 USE modd_surf_par, ONLY : xundef
201 !
202 USE modi_window_shading
203 !
204 !
205 USE yomhook ,ONLY : lhook, dr_hook
206 USE parkind1 ,ONLY : jprb
207 !
208 IMPLICIT NONE
209 !
210 !* 0.1 declarations of arguments
211 !
212  CHARACTER(LEN=3) , INTENT(IN) :: hbem ! Building Energy model 'DEF' or 'BEM'
213  CHARACTER(LEN=4), INTENT(IN) :: hroad_dir ! road direction option
214  ! 'UNIF' : classical TEB version, all roads uniformely present
215  ! 'ORIE' : specified road ORIENTATION (in fact many roads direction
216  ! possible because there can be many TEB patches)
217  CHARACTER(LEN=4), INTENT(IN) :: hwall_opt ! walls option
218  ! 'UNIF' : classical TEB version, all walls are identical
219  ! 'TWO ' : the two opposite walls are different & receive different solar energy
220 REAL, DIMENSION(:), INTENT(IN) :: pdir_sw ! incoming direct solar radiation
221 REAL, DIMENSION(:), INTENT(IN) :: psca_sw ! scattered incoming solar rad.
222 REAL, DIMENSION(:), INTENT(IN) :: pzenith ! solar zenithal angle
223 REAL, DIMENSION(:), INTENT(IN) :: pazim ! solar azimuthal angle
224 ! ! (radian from N, clockwise)
225 REAL, DIMENSION(:), INTENT(IN) :: pbld ! buildings fraction
226 REAL, DIMENSION(:), INTENT(IN) :: pgarden ! GARDEN area fraction
227 REAL, DIMENSION(:), INTENT(IN) :: proad_dir ! Road direction
228  ! (deg from N, clockwise)
229 REAL, DIMENSION(:), INTENT(IN) :: proad ! road fraction
230 REAL, DIMENSION(:), INTENT(IN) :: pfrac_gr ! green roof fraction
231 REAL, DIMENSION(:), INTENT(IN) :: pwall_o_hor ! wall surf. / hor. surf
232 REAL, DIMENSION(:), INTENT(IN) :: pcan_hw_ratio ! canyon h/W
233 REAL, DIMENSION(:), INTENT(IN) :: palb_roof ! roof albedo
234 REAL, DIMENSION(:), INTENT(IN) :: palb_road ! road albedo
235 REAL, DIMENSION(:), INTENT(IN) :: psvf_road ! road sky view factor
236 REAL, DIMENSION(:), INTENT(IN) :: palb_wall ! wall albedo
237 REAL, DIMENSION(:), INTENT(IN) :: psvf_wall ! wall sky view factor
238 REAL, DIMENSION(:), INTENT(IN) :: pfrac_panel ! Fraction of solar panel on roofs (-)
239 REAL, DIMENSION(:), INTENT(IN) :: palb_panel ! Albedo of solar panels (-)
240 REAL, DIMENSION(:), INTENT(IN) :: palb_garden ! GARDEN areas albedo
241 REAL, DIMENSION(:), INTENT(IN) :: psvf_garden ! GARDEN areas sky view factor
242 REAL, DIMENSION(:), INTENT(IN) :: palb_greenroof ! green roof albedo
243 REAL, DIMENSION(:), INTENT(IN) :: pasnow_roof ! roof snow albedo
244 REAL, DIMENSION(:), INTENT(IN) :: pasnow_road ! road snow albedo
245 REAL, DIMENSION(:), INTENT(IN) :: pdn_roof ! snow-covered roof fraction
246 REAL, DIMENSION(:), INTENT(IN) :: pdf_roof ! snow-free roof fraction
247 REAL, DIMENSION(:), INTENT(IN) :: pdn_road ! snow-covered road fraction
248 REAL, DIMENSION(:), INTENT(IN) :: pdf_road ! snow-free road fraction
249 !
250 REAL, DIMENSION(:), INTENT(IN) :: pgr ! glazing ratio
251 REAL, DIMENSION(:), INTENT(IN) :: pabs_win ! solar absortance of windows
252 !
253 !new arguments for shading
254 REAL, DIMENSION(:), INTENT(IN) :: pshgc ! solar transmittance of windows
255 REAL, DIMENSION(:), INTENT(IN) :: pshgc_sh ! window + shading solar heat gain coef.
256 !
257 REAL, DIMENSION(:), INTENT(OUT) :: palb_win ! solar reflectance of windows
258 !
259 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_roof ! solar radiation absorbed
260 ! ! by snow-free roofs
261 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_road ! solar radiation absorbed
262 ! ! by snow-free roads
263 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_wall_a ! solar radiation absorbed
264 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_wall_b ! solar radiation absorbed
265 ! ! by walls
266 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_garden ! solar radiation absorbed
267 ! ! by GARDEN areas
268 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_greenroof! solar radiation absorbed by green roofs
269 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_snow_roof! solar radiation absorbed
270 ! ! by snow-covered roofs
271 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_snow_road! solar radiation absorbed
272 ! ! by snow-covered roads
273 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_solar_panel! solar radiation absorbed
274 ! ! by solar panels
275 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_road ! solar radiation received
276 ! ! by snow-free roads
277 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_wall_a ! solar radiation received
278 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_wall_b ! solar radiation received
279 ! ! by snow-free walls
280 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_garden ! solar radiation received
281 ! ! by GARDEN areas
282 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_roof ! solar radiation received
283 ! ! by ROOF areas (below solar panels if any)
284 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_snow_road! solar radiation received
285 ! ! by snow-covered roads
286 REAL, DIMENSION(:), INTENT(OUT) :: pdir_alb_town ! town direct albedo
287 REAL, DIMENSION(:), INTENT(OUT) :: psca_alb_town ! town diffuse albedo
288 !
289 REAL, DIMENSION(:), INTENT(OUT) :: psw_rad_garden ! solar radiation reaching GARDEN areas
290 REAL, DIMENSION(:), INTENT(OUT) :: pabs_sw_win ! solar radiation absorbed by windows
291 REAL, DIMENSION(:), INTENT(OUT) :: prec_sw_win ! solar radiation received by windows
292 
293 REAL, DIMENSION(:), INTENT(OUT) :: pref_sw_grnd ! total solar radiation reflected by ground
294 REAL, DIMENSION(:), INTENT(OUT) :: pref_sw_fac ! total solar radiation reflected by wall
295 REAL, DIMENSION(:), INTENT(OUT) :: ptr_sw_win ! Solar radiation transmitted
296  ! through glazing [W/m2(bld)]
297 !new arguments for shading
298 REAL, DIMENSION(:), INTENT(OUT) :: pe_shading ! Energy that is not reflected
299  ! by the shading, nor transmitted through
300  ! the bld, nor absorbed by the
301  ! [W/m2(win)]
302 LOGICAL, DIMENSION(:),INTENT(INOUT):: oshad_day ! has shading been necessary this day ?
303 LOGICAL, DIMENSION(:),INTENT(IN) :: oshade ! are building conditions favorable for
304 ! ! shading (independantly of solar irradiance) ?
305 REAL, DIMENSION(:), INTENT(IN) :: ptran_win ! window transmittivity
306 !
307 !* 0.2 declarations of local variables
308 !
309 !
310 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdir_sw ! direct and diffuse incoming radiation
311 REAL, DIMENSION(SIZE(PDIR_SW)) :: zsca_sw ! with a minimum to compute albedo
312 REAL, DIMENSION(SIZE(PDIR_SW)) :: ztanzen ! tangente of solar zenithal angle
313 REAL, DIMENSION(SIZE(PDIR_SW)) :: ztheta0 ! canyon angle for
314 ! ! which solar
315 ! ! radiation
316 ! ! reaches the road
317 !
318 REAL, DIMENSION(SIZE(PDIR_SW)) :: zaalb_road ! averaged albedo
319 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdir_sw_road ! direct radiation reaching
320 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdir_sw_wall_a ! road, wall A,
321 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdir_sw_wall_b ! wall B,
322 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdir_sw_garden ! GARDEN areas,
323 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdir_sw_wall ! and on average on 2 walls
324 REAL, DIMENSION(SIZE(PDIR_SW)) :: zsca_sw_road ! diffuse radiation reaching
325 REAL, DIMENSION(SIZE(PDIR_SW)) :: zsca_sw_wall ! road, wall,
326 REAL, DIMENSION(SIZE(PDIR_SW)) :: zsca_sw_garden ! and GARDEN areas
327 !
328 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_roof ! solar radiation
329 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_road ! absorbed by roofs,
330 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_wall_a ! road, wall A,
331 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_wall_b ! wall B,
332 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_wall ! both walls on average,
333 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_garden ! GARDEN areas,
334 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_greenroof ! green roof areas,
335 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_panel ! solar panels,
336 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_win ! window (abs+trans), and snow
337 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_snow_roof ! over roof, wall,
338 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_dir_sw_snow_road ! and GARDEN areas
339 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_roof ! solar radiation
340 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_road ! absorbed by roofs,
341 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_wall ! road, wall,
342 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_garden ! GARDEN areas,
343 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_greenroof ! green roof areas,
344 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_panel ! solar panels,
345 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_win ! window (abs+trans), and snow
346 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_snow_roof ! over roof and wall,
347 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_sca_sw_snow_road ! coming from diffuse rad.
348 REAL, DIMENSION(SIZE(PDIR_SW)) :: zdw ! difference of radiation
349 ! ! absorbed by the 2 walls
350 !
351 REAL, DIMENSION(SIZE(PDIR_SW)) :: zroad !
352 REAL, DIMENSION(SIZE(PDIR_SW)) :: zroad_dir ! Road direction
353 ! ! (radian from N, clockwise)
354 REAL, DIMENSION(SIZE(PDIR_SW)) :: zgarden !
355 !
356 REAL, DIMENSION(SIZE(PDIR_SW)) :: zrec_dir_sw_win
357 REAL, DIMENSION(SIZE(PDIR_SW)) :: zrec_sca_sw_win
358 REAL, DIMENSION(SIZE(PDIR_SW)) :: zaalb_wall
359 !
360 REAL, DIMENSION(SIZE(PDIR_SW)) :: ztran_win ! solar transmittivity of windows
361 REAL, DIMENSION(SIZE(PDIR_SW)) :: zabs_win ! solar transmittivity of windows
362 LOGICAL, DIMENSION(SIZE(PDIR_SW)) :: g_eff_shad !TRUE if shading should be active considering actual rad
363 !
364 INTEGER :: jj ! loop index
365 REAL(KIND=JPRB) :: zhook_handle
366 !-------------------------------------------------------------------------------
367 !
368 IF (lhook) CALL dr_hook('URBAN_SOLAR_ABS',0,zhook_handle)
369 pabs_sw_roof(:) = 0.
370 pabs_sw_road(:) = 0.
371 pabs_sw_wall_a(:) = 0.
372 pabs_sw_wall_b(:) = 0.
373 pabs_sw_garden(:) = 0.
374 pabs_sw_greenroof(:) = 0.
375 pabs_sw_snow_roof(:) = 0.
376 pabs_sw_snow_road(:) = 0.
377 pabs_sw_win(:) = 0.
378 prec_sw_win(:) = 0.
379 !
380 prec_sw_road(:) = 0.
381 prec_sw_wall_a(:) = 0.
382 prec_sw_wall_b(:) = 0.
383 prec_sw_garden(:) = 0.
384 prec_sw_snow_road(:) = 0.
385 prec_sw_roof(:) = 0.
386 !
387 zdir_sw = max(pdir_sw,0.)
388 zsca_sw = max(psca_sw,0.000001)
389 !
390 zroad_dir = proad_dir(:) * xpi/180.
391 !
392 DO jj=1,SIZE(proad)
393 !
394  IF (proad(jj)+pgarden(jj).NE.0.) THEN
395  zroad(jj) = proad(jj) / (proad(jj)+pgarden(jj))
396  zgarden(jj) = pgarden(jj) / (proad(jj)+pgarden(jj))
397  ELSE
398  zroad(jj)=0.
399  zgarden(jj)=0.
400  ENDIF
401 !
402 !-------------------------------------------------------------------------------
403 !
404 !* 1. SOLAR RADIATIONS FOR ROOFS
405 ! --------------------------
406 !
407 !* One supposes that solar panels, if present, intercept all solar radiation
408 !
409  zabs_dir_sw_panel(jj) = zdir_sw(jj) * (1. - palb_panel(jj))
410  zabs_sca_sw_panel(jj) = zsca_sw(jj) * (1. - palb_panel(jj))
411 !
412 !* solar energy received by the surfaces below solar panels
413  zabs_dir_sw_roof(jj) = zdir_sw(jj) * (1. - palb_roof(jj)) * (1.-pfrac_panel(jj))
414  zabs_dir_sw_snow_roof(jj) = zdir_sw(jj) * (1. - pasnow_roof(jj)) * (1.-pfrac_panel(jj))
415  zabs_dir_sw_greenroof(jj) = zdir_sw(jj) * (1. - palb_greenroof(jj)) * (1.-pfrac_panel(jj))
416  zabs_sca_sw_roof(jj) = zsca_sw(jj) * (1. - palb_roof(jj)) * (1.-pfrac_panel(jj))
417  zabs_sca_sw_snow_roof(jj) = zsca_sw(jj) * (1. - pasnow_roof(jj)) * (1.-pfrac_panel(jj))
418  zabs_sca_sw_greenroof(jj) = zsca_sw(jj) * (1. - palb_greenroof(jj)) * (1.-pfrac_panel(jj))
419 !
420 !-------------------------------------------------------------------------------
421 !
422 !* 2. SOLAR RADIATIONS FOR ROADS AND WALLS
423 ! ------------------------------------
424 !
425  IF (abs(0.5*xpi-pzenith(jj)) < 1.e-6) THEN
426  IF(0.5*xpi-pzenith(jj) > 0.) ztanzen(jj)=tan(0.5*xpi-1.e-6)
427  IF(0.5*xpi-pzenith(jj) <= 0.) ztanzen(jj)=tan(0.5*xpi+1.e-6)
428  ELSEIF (abs(pzenith(jj)) < 1.e-6) THEN
429  ztanzen(jj)=sign(1.,pzenith(jj))*tan(1.e-6)
430  ELSE
431  ztanzen(jj) = tan(pzenith(jj))
432  ENDIF
433 !
434 !
435  IF (pbld(jj) .GT. 0.) THEN
436 !
437 !* 2.1 radiation coefficients
438 ! ----------------------
439 !
440 IF (hroad_dir=='UNIF') THEN
441  ztheta0(jj) = asin( min(abs( 1./ztanzen(jj))/pcan_hw_ratio(jj), 1. ) )
442 !
443 !* 2.2 direct solar radiation received by roads and GARDEN areas
444 ! -------------------------------------------------------
445 !
446  zdir_sw_road(jj) = ( zdir_sw(jj) * 2. * ztheta0(jj) / xpi &
447  - zdir_sw(jj) * 2. * ztanzen(jj) / xpi &
448  * pcan_hw_ratio(jj) * (1.-cos(ztheta0(jj))) )
449 !
450  zdir_sw_garden(jj) = ( zdir_sw(jj) * 2. * ztheta0(jj) / xpi &
451  - zdir_sw(jj) * 2. * ztanzen(jj) / xpi &
452  * pcan_hw_ratio(jj) * (1.-cos(ztheta0(jj))) )
453 ELSE
454  zdir_sw_road(jj) = zdir_sw(jj) * max(0., &
455  1.-pcan_hw_ratio(jj)*ztanzen(jj)*abs(sin(pazim(jj)-zroad_dir(jj))) &
456  )
457  zdir_sw_garden(jj) = zdir_sw_road(jj)
458 
459 END IF
460 !
461 !* 2.3 direct solar radiation received by walls
462 ! ----------------------------------------
463 !
464  zdir_sw_wall(jj) = (zdir_sw(jj) - (zdir_sw_road(jj)*zroad(jj)+zdir_sw_garden(jj)*zgarden(jj))) &
465  * 0.5 / pcan_hw_ratio(jj)
466 !
467 
468  ELSE
469 !
470  zdir_sw_road(jj) = zdir_sw(jj)
471  zdir_sw_garden(jj) = zdir_sw(jj)
472  zdir_sw_wall(jj) = 0.
473 !
474  ENDIF
475 !
476 IF (hroad_dir=='UNIF' .OR. hwall_opt=='UNIF') THEN
477 !* if walls are averaged, then
478  zdir_sw_wall_a(jj) = zdir_sw_wall(jj)
479  zdir_sw_wall_b(jj) = zdir_sw_wall(jj)
480 ELSE
481 !* if walls are separated, then radiation reaches the wall facing sun
482 ! Note that wall A is the one facing mostly to the South (depending to
483 ! road orientation), and wall B in the one facing mostly to the North
484 !
485 ! In case of N-S road, wall A is the West wall (= East-facing wall),
486 ! and wall B is the East wall (= West-facing wall)
487 ! In case of E-W road, wall A is the North wall (= South-facing wall),
488 ! and wall B is the South wall (= North-facing wall)
489  IF (sin(pazim(jj)-zroad_dir(jj))>0.) THEN
490  zdir_sw_wall_a(jj) = 2.* zdir_sw_wall(jj)
491  zdir_sw_wall_b(jj) = 0.
492  ELSE
493  zdir_sw_wall_a(jj) = 0.
494  zdir_sw_wall_b(jj) = 2.* zdir_sw_wall(jj)
495  END IF
496 END IF
497 !
498 !
499 !
500 !* 2.4 diffuse solar radiation received by roads and GARDEN areas
501 ! ---------------------------------------------------------
502 !
503  zsca_sw_road(jj) = zsca_sw(jj) * psvf_road(jj)
504 !
505  zsca_sw_garden(jj) = zsca_sw(jj) * psvf_garden(jj)
506 !
507 !* 2.5 diffuse solar radiation received by walls
508 ! -----------------------------------------
509 !
510  zsca_sw_wall(jj) = zsca_sw(jj) * psvf_wall(jj)
511 !
512 !* 2.6 total solar radiation received by GARDEN areas
513 ! ---------------------------------------------
514 !
515  psw_rad_garden(jj) = zdir_sw_garden(jj) + zsca_sw_garden(jj)
516 !
517 !* 2.7 averaged albedos when snow is present
518 ! -------------------------------------
519 !
520  zaalb_road(jj) = pdf_road(jj) * palb_road(jj) &
521  + pdn_road(jj) * pasnow_road(jj)
522 !
523 !
524 ENDDO
525 !
526 !* 2.7b averaged facade albedo
527 ! -------------------------------------
528 !
529 IF (hbem=='BEM') THEN
530  !
531  ztran_win(:) = ptran_win(:)
532  !
533  g_eff_shad(:) = oshade(:) .AND. &
534  (zdir_sw_wall(:) + zsca_sw_wall(:) > xwin_sw_max)
535  !
536  oshad_day(:) = g_eff_shad(:) .OR. oshad_day(:)
537  !
538  CALL window_shading(pshgc, pshgc_sh, oshad_day, palb_wall, &
539  pabs_win, zabs_win, palb_win, ztran_win )
540  !
541 ELSE
542  !
543  zabs_win(:) = 0.
544  palb_win(:) = 0.
545  ztran_win(:) = 0.
546  !
547 ENDIF
548 !
549 zaalb_wall(:) = pgr(:) * palb_win(:) + (1.-pgr(:)) * palb_wall(:)
550 !
551 !* 2.8 absorption of direct incoming solar radiation
552 ! ---------------------------------------------
553 !
554 !
555  CALL solar_reflections(zdir_sw_road,zdir_sw_wall, &
556  zdir_sw_garden, &
557  zabs_dir_sw_road, zabs_dir_sw_snow_road, &
558  zabs_dir_sw_wall, zabs_dir_sw_garden, zabs_dir_sw_win )
559 !
560 IF (hroad_dir=='UNIF' .OR. hwall_opt=='UNIF') THEN
561 !* if walls are averaged, then
562  zabs_dir_sw_wall_a = zabs_dir_sw_wall
563  zabs_dir_sw_wall_b = zabs_dir_sw_wall
564 ELSE
565 !* if walls are separated, then radiation reaches the wall facing sun
566 ! Note that wall A is the one facing mostly to the North (depending to
567 ! road orientation), and wall B in the one facing mostly to the South.
568  zdw = (1.-palb_wall(:)) * zaalb_wall(:) * (1.-2.*psvf_wall(:)) &
569  / (1.+zaalb_wall(:)*(1.-2.*psvf_wall(:))) &
570  * 0.5 * (zdir_sw_wall_a(:)-zdir_sw_wall_b(:)) &
571  + 0.5 * (1.-palb_wall(:)) * (zdir_sw_wall_a-zdir_sw_wall_b)
572  zabs_dir_sw_wall_a = zabs_dir_sw_wall + zdw
573  zabs_dir_sw_wall_b = zabs_dir_sw_wall - zdw
574 END IF
575 !
576 !* 2.9 absorption of diffuse incoming solar radiation
577 ! ----------------------------------------------
578 !
579  CALL solar_reflections(zsca_sw_road,zsca_sw_wall, zsca_sw_garden, &
580  zabs_sca_sw_road, zabs_sca_sw_snow_road, &
581  zabs_sca_sw_wall, zabs_sca_sw_garden, zabs_sca_sw_win )
582 !
583 ! solar flux reflected for wall and road
584 !
585 pref_sw_grnd = zroad * palb_road / (1. - palb_road ) * &
586  (zabs_dir_sw_road + zabs_sca_sw_road) &
587  + zgarden * palb_garden / (1. - palb_garden) * &
588  (zabs_dir_sw_garden + zabs_sca_sw_garden)
589 !
590 pref_sw_fac = (1 - pgr) * palb_wall / (1. - palb_wall) * &
591  (zabs_dir_sw_wall + zabs_sca_sw_wall) &
592  + pgr * palb_win / (1 - palb_win ) * &
593  (zabs_dir_sw_win + zabs_sca_sw_win)
594 !
595 !-------------------------------------------------------------------------------
596 !
597 !* 3. Town albedo
598 ! -----------
599 !
600 !* 3.1 direct albedo
601 ! -------------
602 !
603  CALL town_albedo(zdir_sw,zabs_dir_sw_roof,zabs_dir_sw_snow_roof, &
604  zabs_dir_sw_road, zabs_dir_sw_snow_road,zabs_dir_sw_wall, &
605  zabs_dir_sw_garden, zabs_dir_sw_greenroof, zabs_dir_sw_win,&
606  zabs_dir_sw_panel, pdir_alb_town )
607 !
608 !* 3.2 direct albedo
609 ! -------------
610 !
611  CALL town_albedo(zsca_sw,zabs_sca_sw_roof,zabs_sca_sw_snow_roof, &
612  zabs_sca_sw_road, zabs_sca_sw_snow_road,zabs_sca_sw_wall, &
613  zabs_sca_sw_garden, zabs_sca_sw_greenroof, zabs_sca_sw_win,&
614  zabs_sca_sw_panel, psca_alb_town )
615 !
616 !-------------------------------------------------------------------------------
617 !
618 !* 4. Trivial cases
619 ! -------------
620 !
621 WHERE(pdir_sw(:)==0.)
622  zabs_dir_sw_roof(:) = 0.
623  zabs_dir_sw_road(:) = 0.
624  zabs_dir_sw_wall_a(:) = 0.
625  zabs_dir_sw_wall_b(:) = 0.
626  zabs_dir_sw_garden(:) = 0.
627  zabs_dir_sw_greenroof(:) = 0.
628  zabs_dir_sw_panel(:) = 0.
629  zabs_dir_sw_win(:) = 0.
630  zabs_dir_sw_snow_roof(:) = 0.
631  zabs_dir_sw_snow_road(:) = 0.
632 END WHERE
633 !
634 WHERE(psca_sw(:)==0.)
635  zabs_sca_sw_roof(:) = 0.
636  zabs_sca_sw_road(:) = 0.
637  zabs_sca_sw_wall(:) = 0.
638  zabs_sca_sw_garden(:) = 0.
639  zabs_sca_sw_greenroof(:) = 0.
640  zabs_sca_sw_panel(:) = 0.
641  zabs_sca_sw_win(:) = 0.
642  zabs_sca_sw_snow_roof(:) = 0.
643  zabs_sca_sw_snow_road(:) = 0.
644 END WHERE
645 !
646 WHERE (pdir_alb_town==xundef) pdir_alb_town = psca_alb_town
647 !
648 !-------------------------------------------------------------------------------
649 !
650 DO jj=1,SIZE(proad)
651 !
652 !* 5. Total solar radiation absorbed by each surface
653 ! ----------------------------------------------
654 !
655 ! solar radiation absorbed by roofs
656 !
657  pabs_sw_roof(jj) = zabs_dir_sw_roof(jj) + zabs_sca_sw_roof(jj)
658 !
659 ! solar radiation absorbed by roads
660 !
661  pabs_sw_road(jj) = zabs_dir_sw_road(jj) + zabs_sca_sw_road(jj)
662 !
663 ! solar radiation absorbed by GARDEN areas
664 !
665  pabs_sw_garden(jj) = zabs_dir_sw_garden(jj) + zabs_sca_sw_garden(jj)
666 !
667 ! solar radiation absorbed by GREENROOF areas
668 !
669  pabs_sw_greenroof(jj) = zabs_dir_sw_greenroof(jj) + zabs_sca_sw_greenroof(jj)
670 !
671 ! solar radiation absorbed by solar panels
672 !
673  pabs_sw_solar_panel(jj)= zabs_dir_sw_panel(jj) + zabs_sca_sw_panel(jj)
674 !
675 ! solar radiation absorbed by walls
676 !
677  pabs_sw_wall_a(jj) = zabs_dir_sw_wall_a(jj) + zabs_sca_sw_wall(jj)
678  pabs_sw_wall_b(jj) = zabs_dir_sw_wall_b(jj) + zabs_sca_sw_wall(jj)
679 !
680 ! solar radiation absorbed (but not transmitted) by windows
681 !
682  zrec_dir_sw_win(jj) = zabs_dir_sw_win(jj) / (1.-palb_win(jj))
683  zrec_sca_sw_win(jj) = zabs_sca_sw_win(jj) / (1.-palb_win(jj))
684 !
685  pabs_sw_win(jj) = (zrec_dir_sw_win(jj) + zrec_sca_sw_win(jj)) * zabs_win(jj)
686 !
687 !
688 ! solar radiation absorbed by snow on roofs
689 !
690  pabs_sw_snow_roof(jj) = zabs_dir_sw_snow_roof(jj) + zabs_sca_sw_snow_roof(jj)
691 !
692 ! solar radiation absorbed by snow on roads
693 !
694  pabs_sw_snow_road(jj) = zabs_dir_sw_snow_road(jj) + zabs_sca_sw_snow_road(jj)
695 !
696 !-------------------------------------------------------------------------------
697 !
698 !* 6. total solar radiation received by roads and GARDEN areas
699 ! -------------------------------------------------------
700 !
701  prec_sw_road(jj) = pabs_sw_road(jj)/(1.-palb_road(jj))
702 !
703  prec_sw_snow_road(jj) = pabs_sw_snow_road(jj)/(1.-pasnow_road(jj))
704 !
705  prec_sw_wall_a(jj) = pabs_sw_wall_a(jj)/(1.-palb_wall(jj))
706  prec_sw_wall_b(jj) = pabs_sw_wall_b(jj)/(1.-palb_wall(jj))
707 !
708  prec_sw_win(jj) = zrec_dir_sw_win(jj) + zrec_sca_sw_win(jj)
709 !
710  prec_sw_garden(jj) = pabs_sw_garden(jj)/(1.-palb_garden(jj))
711 !
712 !* 6.2 total solar radiation received by roof surfaces below solar panels
713 !
714  prec_sw_roof(jj) = (pdir_sw(jj) + psca_sw(jj)) * (1.-pfrac_panel(jj))
715 !
716 !-------------------------------------------------------------------------------
717 !
718 !* 7. total solar radiation transmitted inside building
719 !* and energy not ref., nor absorbed, nor transmitted
720 ! --------------------------------------------------
721 !
722  ptr_sw_win(jj) = prec_sw_win(jj) * ztran_win(jj)
723 ! [W/m2(bld)]
724  pe_shading(jj) = prec_sw_win(jj) * (1. - palb_win(jj) - zabs_win(jj) - ztran_win(jj))
725 ! [W/m2(win)]
726 
727 ENDDO
728 !
729 !-------------------------------------------------------------------------------
730 !
731 IF (lhook) CALL dr_hook('URBAN_SOLAR_ABS',1,zhook_handle)
732  CONTAINS
733 !
734 !-------------------------------------------------------------------------------
735 SUBROUTINE solar_reflections(ZSW_ROAD,ZSW_WALL,ZSW_GARDEN, &
736  zabs_sw_road,zabs_sw_snow_road, &
737  zabs_sw_wall, &
738  zabs_sw_garden, zabs_sw_win )
739 !
740 REAL, DIMENSION(:), INTENT(IN) :: zsw_road ! solar radiation received by road,
741 REAL, DIMENSION(:), INTENT(IN) :: zsw_wall ! wall, and GARDEN areas
742 REAL, DIMENSION(:), INTENT(IN) :: zsw_garden ! before reflection
743 REAL, DIMENSION(:), INTENT(OUT):: zabs_sw_road ! solar radiation absorbed by
744 REAL, DIMENSION(:), INTENT(OUT):: zabs_sw_snow_road ! solar radiation absorbed by
745 REAL, DIMENSION(:), INTENT(OUT):: zabs_sw_wall ! road, snow over road, and wall
746 REAL, DIMENSION(:), INTENT(OUT):: zabs_sw_garden ! solar radiation absorbed by garden
747 REAL, DIMENSION(:), INTENT(OUT):: zabs_sw_win ! solar radiation absorbed by window
748 !
749 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zref0_sw_road ! first solar reflection
750 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zref0_sw_wall ! against road, wall
751 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zref0_sw_garden ! and GARDEN areas
752 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zsref_sw_road ! sum of all reflections
753 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zsref_sw_wall ! against road, wall,
754 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zsref_sw_garden ! and GARDEN areas
755 !
756 REAL, DIMENSION(SIZE(ZSW_ROAD)) :: zwork1, zwork2, zdenom
757 INTEGER :: jj
758 REAL(KIND=JPRB) :: zhook_handle
759 !
760 IF (lhook) CALL dr_hook('SOLAR_REFLECTIONS',0,zhook_handle)
761 !
762 DO jj=1,SIZE(zsw_road)
763 !* A. first solar radiation reflection
764 ! --------------------------------
765 !
766  zref0_sw_road(jj) = zaalb_road(jj) * zsw_road(jj)
767 !
768  zref0_sw_garden(jj) = palb_garden(jj) * zsw_garden(jj)
769 !
770  zref0_sw_wall(jj) = zaalb_wall(jj) * zsw_wall(jj)
771 !
772 !* B. sum of solar radiation reflected
773 ! --------------------------------
774 !
775 
776  zdenom(jj) = 1. - (1.-2.*psvf_wall(jj)) * palb_wall(jj) &
777  - (1. - psvf_road(jj))* &
778  psvf_wall(jj)*palb_wall(jj)*zaalb_road(jj)*zroad(jj) &
779  - (1. - psvf_garden(jj))* &
780  psvf_wall(jj)*palb_wall(jj)*palb_garden(jj)*zgarden(jj)
781 
782  zwork1(jj) = psvf_wall(jj) * palb_wall(jj) * zroad(jj)
783  zwork2(jj) = psvf_wall(jj) * palb_wall(jj) * zgarden(jj)
784 !
785 !
786  zsref_sw_wall(jj) = ( zref0_sw_wall(jj) &
787  + zwork1(jj) *zref0_sw_road(jj) &
788  + zwork2(jj) *zref0_sw_garden(jj)) &
789  / zdenom(jj)
790 
791  zsref_sw_road(jj) = ( (1.- psvf_road(jj) ) * zaalb_road(jj) &
792  * zref0_sw_wall(jj) &
793  +(1.- psvf_road(jj) ) * zaalb_road(jj) &
794  * zwork1(jj) &
795  * zref0_sw_road(jj) &
796  +(1.- psvf_road(jj) ) * zaalb_road(jj) &
797  * zwork2(jj) &
798  * zref0_sw_garden(jj) )&
799  / zdenom(jj) &
800  + zref0_sw_road(jj)
801 
802  zsref_sw_garden(jj) = ( (1.- psvf_garden(jj)) * palb_garden(jj) &
803  * zref0_sw_wall(jj) &
804  +(1.- psvf_garden(jj)) * palb_garden(jj) &
805  * zwork1(jj) &
806  * zref0_sw_road(jj) &
807  +(1.- psvf_garden(jj)) * palb_garden(jj) &
808  * zwork2(jj) &
809  * zref0_sw_garden(jj) )&
810  / zdenom(jj) &
811  + zref0_sw_garden(jj)
812 !
813 !
814 !* C. total solar radiation received by roads and GARDEN areas
815 ! -------------------------------------------------------
816 !
817  zabs_sw_road(jj) = (1.-palb_road(jj) ) &
818  * ( zsw_road(jj) &
819  + zsref_sw_wall(jj) * (1.- psvf_road(jj) ) )
820 !
821  zabs_sw_snow_road(jj) = (1.-pasnow_road(jj) ) &
822  * ( zsw_road(jj) &
823  + zsref_sw_wall(jj) * (1.- psvf_road(jj) ) )
824 !
825  zabs_sw_garden(jj) = (1.-palb_garden(jj)) &
826  * ( zsw_garden(jj) &
827  + zsref_sw_wall(jj) * (1.- psvf_garden(jj)) )
828 !
829 !
830 !* D. total solar radiation received by walls
831 ! ---------------------------------------
832 !
833  zabs_sw_wall(jj) = (1.-palb_wall(jj)) &
834  * ( zsw_wall(jj) &
835  + zsref_sw_road(jj) * psvf_wall(jj)*zroad(jj) &
836  + zsref_sw_garden(jj) * psvf_wall(jj)*zgarden(jj) &
837  + zsref_sw_wall(jj) * (1.-2.*psvf_wall(jj)) )
838 !
839  zabs_sw_win(jj) = (1.-palb_win(jj)) &
840  * ( zsw_wall(jj) &
841  + zsref_sw_road(jj) * psvf_wall(jj)*zroad(jj) &
842  + zsref_sw_garden(jj) * psvf_wall(jj)*zgarden(jj) &
843  + zsref_sw_wall(jj) * (1.-2.*psvf_wall(jj)) )
844 !
845 ENDDO
846 !
847 IF (lhook) CALL dr_hook('SOLAR_REFLECTIONS',1,zhook_handle)
848 !
849 END SUBROUTINE solar_reflections
850 !
851 !-------------------------------------------------------------------------------
852 !
853 SUBROUTINE town_albedo(ZSW,ZABS_SW_ROOF,ZABS_SW_SNOW_ROOF, &
854  zabs_sw_road, zabs_sw_snow_road,zabs_sw_wall, &
855  zabs_sw_garden, zabs_sw_greenroof, zabs_sw_win,&
856  zabs_sw_panel, zalbedo )
857 !
858 REAL, DIMENSION(:), INTENT(IN) :: zsw ! incoming solar radiation
859 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_roof ! solar radiation absorbed by roofs
860 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_road ! solar radiation absorbed by roads
861 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_wall ! solar radiation absorbed by walls
862 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_win ! solar radiation absorbed & transmitted by windows
863 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_garden ! solar radiation absorbed by GARDEN areas
864 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_greenroof ! solar radiation absorbed by green roof areas
865 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_snow_roof ! solar radiation absorbed by roof snow
866 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_snow_road ! solar radiation absorbed by road snow
867 REAL, DIMENSION(:), INTENT(IN) :: zabs_sw_panel ! solar radiation absorbed by solar panels
868 REAL, DIMENSION(:), INTENT(OUT):: zalbedo ! town averaged albedo
869 
870 REAL, DIMENSION(SIZE(ZSW)) :: zsw_up ! outgoing solar radiation
871 INTEGER :: jj
872 REAL(KIND=JPRB) :: zhook_handle
873 
874 IF (lhook) CALL dr_hook('TOWN_ALBEDO',0,zhook_handle)
875 DO jj=1,SIZE(zsw)
876 
877  zsw_up(jj) = zsw(jj) &
878  - ( pbld(jj) *(1.-pfrac_gr(jj))*pdf_roof(jj) *zabs_sw_roof(jj) &
879  +pbld(jj) *(1.-pfrac_gr(jj))*pdn_roof(jj) *zabs_sw_snow_roof(jj)&
880  +pbld(jj) * pfrac_gr(jj) *zabs_sw_greenroof(jj)&
881  +pbld(jj) * pfrac_panel(jj) *zabs_sw_panel(jj) &
882  +proad(jj) *pdf_road(jj) *zabs_sw_road(jj) &
883  +proad(jj) *pdn_road(jj) *zabs_sw_snow_road(jj)&
884  +pgarden(jj) *zabs_sw_garden(jj) &
885  +pwall_o_hor(jj) *(1.-pgr(jj)) *zabs_sw_wall(jj) &
886  +pwall_o_hor(jj) * pgr(jj) *zabs_sw_win(jj) )
887 !
888  IF (zsw(jj)>0.) THEN
889  zalbedo(jj) = zsw_up(jj) / zsw(jj)
890  ELSE
891  zalbedo(jj) = xundef
892  END IF
893 !
894 ENDDO
895 IF (lhook) CALL dr_hook('TOWN_ALBEDO',1,zhook_handle)
896 !
897 END SUBROUTINE town_albedo
898 !
899 !-------------------------------------------------------------------------------
900 !
901 END SUBROUTINE urban_solar_abs
subroutine window_shading(PSHGC, PSHGC_SH, O_SHADE, PALB_WALL, PABS_WIN, PABS_WINSH, PALB_WIN, PTRAN_WIN)
subroutine solar_reflections(ZSW_ROAD, ZSW_WALL, ZSW_GARDEN, ZABS_SW_ROAD, ZABS_SW_SNOW_ROAD, ZABS_SW_WALL, ZABS_SW_GARDEN, ZABS_SW_WIN)
subroutine town_albedo(ZSW, ZABS_SW_ROOF, ZABS_SW_SNOW_ROOF, ZABS_SW_ROAD, ZABS_SW_SNOW_ROAD, ZABS_SW_WALL, ZABS_SW_GARDEN, ZABS_SW_GREENROOF, ZABS_SW_WIN, ZABS_SW_PANEL, ZALBEDO)
subroutine urban_solar_abs(HBEM, HROAD_DIR, HWALL_OPT, PDIR_SW, PSCA_SW, PZENITH, PAZIM, PBLD, PGARDEN, PROAD_DIR, PROAD, PFRAC_GR, PWALL_O_HOR, PCAN_HW_RATIO, PALB_ROOF, PALB_ROAD, PSVF_ROAD, PALB_WALL, PSVF_WALL, PFRAC_PANEL, PALB_PANEL, PALB_GARDEN, PSVF_GARDEN, PALB_GREENROOF, PASNOW_ROOF, PASNOW_ROAD, PDN_ROOF, PDF_ROOF, PDN_ROAD, PDF_ROAD, PGR, PABS_WIN, PSHGC, PSHGC_SH, PALB_WIN, PABS_SW_ROOF, PABS_SW_ROAD, PABS_SW_WALL_A, PABS_SW_WALL_B, PABS_SW_GARDEN, PABS_SW_GREENROOF, PABS_SW_SNOW_ROOF, PABS_SW_SNOW_ROAD, PABS_SW_SOLAR_PANEL, PREC_SW_ROAD, PREC_SW_SNOW_ROAD, PREC_SW_WALL_A, PREC_SW_WALL_B, PREC_SW_GARDEN, PREC_SW_ROOF, PDIR_ALB_TOWN, PSCA_ALB_TOWN, PSW_RAD_GARDEN, PABS_SW_WIN, PREC_SW_WIN, PTRAN_WIN, PREF_SW_GRND, PREF_SW_FAC, PTR_SW_WIN, PE_SHADING, OSHAD_DAY, OSHADE)