SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
averaged_albedo_teb.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 averaged_albedo_teb(HBEM, HROAD_DIR, HWALL_OPT, &
7  pzenith, pazim, &
8  pbld, pgarden, proad_dir, proad, pfrac_gr, &
9  pfrac_panel, palb_panel, &
10  pwall_o_hor, pcan_hw_ratio, &
11  palb_roof, &
12  palb_road, psvf_road, &
13  palb_wall, psvf_wall, &
14  palb_garden, psvf_garden, &
15  palb_greenroof, &
16  tsnow_roof, tsnow_road, &
17  pgr, pshgc, pshgc_sh, pabs_win, palb_win, &
18  oshad_day, &
19  pdir_alb_town, psca_alb_town, ptran_win )
20 ! ###################################################
21 !
22 !!**** *AVERAGED_ALBEDO_TEB* computes averaged albedo for TEB scheme
23 !!
24 !! PURPOSE
25 !! -------
26 !!
27 !! METHOD
28 !! ------
29 !!
30 !! EXTERNAL
31 !! --------
32 !!
33 !! IMPLICIT ARGUMENTS
34 !! ------------------
35 !!
36 !! REFERENCE
37 !! ---------
38 !!
39 !! AUTHOR
40 !! ------
41 !!
42 !! V. Masson Meteo-France
43 !!
44 !! MODIFICATION
45 !! ------------
46 !!
47 !! Original 01/2004
48 ! C. de Munck & A. Lemonsu 09/2011 Greenroofs
49 !! G. Pigeon 09/2012 PTRAN_WIN as arguments
50 !----------------------------------------------------------------------------
51 !
52 !* 0. DECLARATION
53 ! -----------
54 !
55 USE modd_surf_par, ONLY : xundef
57 !
58 USE modi_urban_solar_abs
60 !
61 !
62 USE yomhook ,ONLY : lhook, dr_hook
63 USE parkind1 ,ONLY : jprb
64 !
65 IMPLICIT NONE
66 !
67 !* 0.1 Declaration of arguments
68 ! ------------------------
69 !
70  CHARACTER(LEN=3), INTENT(IN) :: hbem ! Building Energy model 'DEF' or 'BEM'
71  CHARACTER(LEN=4), INTENT(IN) :: hroad_dir ! road direction options
72  ! 'UNIF' : classical TEB version, all roads uniformely present
73  ! 'ORIE' : specified road ORIEntation
74  ! (in fact many roads direction
75  ! possible because there can be many TEB patches)
76  CHARACTER(LEN=4), INTENT(IN) :: hwall_opt ! wall options
77  ! 'UNIF' : classical TEB version, all walls are uniform
78  ! 'TWO ' : the two opposite walls receive different solar energy
79 REAL, DIMENSION(:), INTENT(IN) :: pzenith ! zenithal solar angle
80 REAL, DIMENSION(:), INTENT(IN) :: pazim ! solar azimuthal angle
81 ! ! (radian from N, clockwise)
82 !
83 REAL, DIMENSION(:), INTENT(IN) :: pbld ! building fraction
84 REAL, DIMENSION(:), INTENT(IN) :: pgarden ! green area fraction
85 REAL, DIMENSION(:), INTENT(IN) :: proad_dir ! Road direction
86  ! (deg from N, clockwise)
87 REAL, DIMENSION(:), INTENT(IN) :: proad ! road fraction
88 REAL, DIMENSION(:), INTENT(IN) :: pfrac_gr ! fraction of greenroof
89 REAL, DIMENSION(:), INTENT(IN) :: pfrac_panel ! fraction of solar panels
90 REAL, DIMENSION(:), INTENT(IN) :: palb_panel ! albedo of solar panels
91 REAL, DIMENSION(:), INTENT(IN) :: pwall_o_hor ! vertical surf. / horizontal surf.
92 REAL, DIMENSION(:), INTENT(IN) :: psvf_road ! sky-view-factor from roads
93 REAL, DIMENSION(:), INTENT(IN) :: psvf_wall ! sky-view-factor from walls
94 REAL, DIMENSION(:), INTENT(IN) :: psvf_garden ! sky-view-factor from green areas
95 REAL, DIMENSION(:), INTENT(IN) :: pcan_hw_ratio ! canyon height/width ratio
96 !
97 REAL, DIMENSION(:), INTENT(IN) :: palb_roof ! roof albedo
98 REAL, DIMENSION(:), INTENT(IN) :: palb_road ! road albedo
99 REAL, DIMENSION(:), INTENT(IN) :: palb_wall ! wall albedo
100 REAL, DIMENSION(:), INTENT(IN) :: palb_garden ! green areas albedo
101 REAL, DIMENSION(:), INTENT(IN) :: palb_greenroof! green roof albedo
102 TYPE(surf_snow), INTENT(IN) :: tsnow_roof ! snow on roofs
103 TYPE(surf_snow), INTENT(IN) :: tsnow_road ! snow on roads
104 !
105 REAL, DIMENSION(:), INTENT(IN) :: pgr ! Glazing ratio
106 REAL, DIMENSION(:), INTENT(IN) :: pshgc ! Window solar transmittance
107 REAL, DIMENSION(:), INTENT(IN) :: pshgc_sh ! Window + shading solar heat gain coef.
108 !
109 REAL, DIMENSION(:), INTENT(IN) :: pabs_win ! Window solar absortance
110 REAL, DIMENSION(:), INTENT(OUT):: palb_win ! Window solar reflectance
111 LOGICAL, DIMENSION(:),INTENT(IN) :: oshad_day ! has shading been necessary this day ?
112 !
113 REAL, DIMENSION(:), INTENT(OUT):: pdir_alb_town ! direct albedo
114 REAL, DIMENSION(:), INTENT(OUT):: psca_alb_town ! diffuse albedo
115 REAL, DIMENSION(:), INTENT(IN) :: ptran_win ! window transmittance
116 !
117 !
118 !* 0.2 Declaration of local variables
119 ! ------------------------------
120 !
121 REAL, DIMENSION(SIZE(PBLD)) :: zdn_roof ! snow fraction
122 REAL, DIMENSION(SIZE(PBLD)) :: zdn_road ! on the surface
123 REAL, DIMENSION(SIZE(PBLD)) :: zdf_roof ! free-snow fraction
124 REAL, DIMENSION(SIZE(PBLD)) :: zdf_road ! on the surface
125 LOGICAL, DIMENSION(SIZE(PBLD)) :: gmask ! .false. (= no snow precip.)
126 !
127 !
128 REAL, DIMENSION(SIZE(PBLD)) :: zdir_sw ! direct and diffuse shortwave radiation
129 REAL, DIMENSION(SIZE(PBLD)) :: zsca_sw ! to mimic radiation behaviour of town
130 !
131 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_wall_a ! shortwave absorbed by walls
132 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_wall_b ! shortwave absorbed by walls
133 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_road ! shortwave absorbed by roads
134 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_roof ! shortwave absorbed by roofs
135 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_garden ! shortwave absorbed by green areas
136 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_greenroof ! shortwave absorbed by green roofs
137 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_snow_road ! shortwave absorbed by snow
138 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_snow_roof ! on roads, roofs,
139 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_panel ! shortwave absorbed by solar panels
140 !
141 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_road ! shortwave received by roads
142 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_wall_a ! shortwave received by walls
143 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_wall_b ! shortwave received by walls
144 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_garden ! shortwave received by green areas
145 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_snow_road ! shortwave received by snow on roads
146 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_roof ! shortwave received by roofs
147 !
148 REAL, DIMENSION(SIZE(PBLD)) :: zsw_rad_garden ! total solar radiation reaching green areas
149 REAL, DIMENSION(SIZE(PBLD)) :: zabs_sw_win ! shortwave absorbed by walls
150 REAL, DIMENSION(SIZE(PBLD)) :: zrec_sw_win ! shortwave received by walls
151 REAL, DIMENSION(SIZE(PBLD)) :: zref_sw_grnd !
152 REAL, DIMENSION(SIZE(PBLD)) :: zref_sw_fac !
153 REAL, DIMENSION(SIZE(PBLD)) :: ztr_sw_win !
154 REAL, DIMENSION(SIZE(PBLD)) :: ze_shading !
155 LOGICAL, DIMENSION(SIZE(PBLD)) :: gshad_day
156 REAL(KIND=JPRB) :: zhook_handle
157 !-------------------------------------------------------------------------------
158 !
159 !* snow fractions
160 ! --------------
161 !
162 IF (lhook) CALL dr_hook('AVERAGED_ALBEDO_TEB',0,zhook_handle)
163 gmask(:) = .false.
164  CALL snow_frac_road(tsnow_road%WSNOW(:,1,1),gmask,zdn_road,zdf_road)
165  CALL snow_frac_roof(tsnow_roof%WSNOW(:,1,1),gmask,zdn_roof,zdf_roof)
166 !
167 !
168 !* town direct and diffuse albedo
169 ! -------------------------------
170 !
171 zdir_sw=1.
172 zsca_sw=1.
173 gshad_day=.false.
174 IF (SIZE(oshad_day)>0) gshad_day=oshad_day
175 !
176  CALL urban_solar_abs(hbem, hroad_dir, hwall_opt, &
177  zdir_sw, zsca_sw, pzenith, pazim, &
178  pbld, pgarden, proad_dir, proad, pfrac_gr, &
179  pwall_o_hor, pcan_hw_ratio, &
180  palb_roof, &
181  palb_road, psvf_road, palb_wall, psvf_wall, &
182  pfrac_panel, palb_panel, &
183  palb_garden, psvf_garden, &
184  palb_greenroof, &
185  tsnow_roof%ALB(:,1), tsnow_road%ALB(:,1), &
186  zdn_roof, zdf_roof, zdn_road, zdf_road, &
187  pgr, pabs_win, pshgc, pshgc_sh, palb_win, &
188  zabs_sw_roof, zabs_sw_road, &
189  zabs_sw_wall_a, zabs_sw_wall_b, &
190  zabs_sw_garden, zabs_sw_greenroof, &
191  zabs_sw_snow_roof, zabs_sw_snow_road, &
192  zabs_sw_panel, &
193  zrec_sw_road, zrec_sw_snow_road, &
194  zrec_sw_wall_a, zrec_sw_wall_b, &
195  zrec_sw_garden, zrec_sw_roof, &
196  pdir_alb_town, psca_alb_town, &
197  zsw_rad_garden, zabs_sw_win, zrec_sw_win, &
198  ptran_win, &
199  zref_sw_grnd, zref_sw_fac, ztr_sw_win, &
200  ze_shading, gshad_day, gmask )
201 IF (lhook) CALL dr_hook('AVERAGED_ALBEDO_TEB',1,zhook_handle)
202 !
203 !-------------------------------------------------------------------------------
204 !
205 END SUBROUTINE averaged_albedo_teb
subroutine averaged_albedo_teb(HBEM, HROAD_DIR, HWALL_OPT, PZENITH, PAZIM, PBLD, PGARDEN, PROAD_DIR, PROAD, PFRAC_GR, PFRAC_PANEL, PALB_PANEL, PWALL_O_HOR, PCAN_HW_RATIO, PALB_ROOF, PALB_ROAD, PSVF_ROAD, PALB_WALL, PSVF_WALL, PALB_GARDEN, PSVF_GARDEN, PALB_GREENROOF, TSNOW_ROOF, TSNOW_ROAD, PGR, PSHGC, PSHGC_SH, PABS_WIN, PALB_WIN, OSHAD_DAY, PDIR_ALB_TOWN, PSCA_ALB_TOWN, PTRAN_WIN)
subroutine snow_frac_roof(PWSNOW_ROOF, OSNOW, PDN_ROOF, PDF_ROOF)
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)
subroutine snow_frac_road(PWSNOW_ROAD, OSNOW, PDN_ROAD, PDF_ROAD)