SURFEX v8.1
General documentation of Surfex
averaged_tsrad_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_tsrad_teb(T, B, PEMIS_GARDEN, PTS_GARDEN, PEMIS_GREENROOF, &
7  PTS_GREENROOF, PEMIS, PTSRAD )
8 ! ###################################################
9 !
10 !!**** *AVERAGED_TSRAD_TEB* computes averaged emissivity and radiative surface
11 !! temperature for TEB scheme
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !! METHODi
17 !! ------
18 !!
19 !! EXTERNAL
20 !! --------
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !! AUTHOR
29 !! ------
30 !!
31 !! V. Masson Meteo-France
32 !!
33 !! MODIFICATION
34 !! ------------
35 !! 09/2012 C. de Munck, A. Lemonsu : add green roofs
36 !!
37 !! Original 01/2004
38 !----------------------------------------------------------------------------
39 !
40 !* 0. DECLARATION
41 ! -----------
42 !
43 USE modd_teb_n, ONLY : teb_t
44 USE modd_bem_n, ONLY : bem_t
45 !
47 !
48 USE modd_surf_par, ONLY : xundef
49 USE modd_csts, ONLY : xstefan
50 !
51 USE modi_urban_lw_coef
52 !
54 !
55 !
56 USE yomhook ,ONLY : lhook, dr_hook
57 USE parkind1 ,ONLY : jprb
58 !
59 IMPLICIT NONE
60 !
61 !* 0.1 Declaration of arguments
62 ! ------------------------
63 !
64 TYPE(teb_t), INTENT(INOUT) :: T
65 TYPE(bem_t), INTENT(INOUT) :: B
66 !
67 REAL, DIMENSION(:), INTENT(IN) :: PEMIS_GARDEN ! green area emissivity (snowfree)
68 REAL, DIMENSION(:), INTENT(IN) :: PTS_GARDEN ! green area surf. temp.
69 REAL, DIMENSION(:), INTENT(IN) :: PEMIS_GREENROOF! green roof emissivity (snowfree)
70 REAL, DIMENSION(:), INTENT(IN) :: PTS_GREENROOF ! green roof surf. temp.
71 REAL, DIMENSION(:), INTENT(OUT):: PEMIS ! averaged emissivity (all tiles)
72 REAL, DIMENSION(:), INTENT(OUT):: PTSRAD ! averaged radiaitve temp. (all tiles)
73 !
74 !* 0.2 Declaration of local variables
75 ! ------------------------------
76 !
77 REAL, DIMENSION(SIZE(T%XEMIS_ROOF)) :: ZDN_ROOF ! snow fraction
78 REAL, DIMENSION(SIZE(T%XEMIS_ROOF)) :: ZDN_ROAD ! on the surface
79 REAL, DIMENSION(SIZE(T%XBLD)) :: ZDF_ROOF ! free-snow fraction
80 REAL, DIMENSION(SIZE(T%XBLD)) :: ZDF_ROAD ! on the surface
81 LOGICAL, DIMENSION(SIZE(T%XBLD)) :: GMASK ! .false. (= no snow precip.)
82 !
83 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WA_TO_WB ! longwave exchange coefficients
84 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WA_TO_R
85 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WB_TO_R
86 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WA_TO_NR
87 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WB_TO_NR
88 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WA_TO_G
89 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WB_TO_G
90 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WA_TO_WIN
91 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WB_TO_WIN
92 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_R_TO_WA
93 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_R_TO_WB
94 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_R_TO_WIN
95 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_G_TO_WA
96 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_G_TO_WB
97 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_G_TO_WIN
98 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_S_TO_WA
99 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_S_TO_WB
100 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_S_TO_R
101 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_S_TO_NR
102 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_S_TO_G
103 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_S_TO_WIN
104 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WIN_TO_WA
105 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WIN_TO_WB
106 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WIN_TO_R
107 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WIN_TO_NR
108 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_WIN_TO_G
109 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_NR_TO_WA
110 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_NR_TO_WB
111 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_NR_TO_WIN
112 !
113 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_RAD ! incoming LW to mimic
114 ! ! radiation behaviour of town
115 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_WALL ! longwave absorbed by walls
116 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_ROAD ! longwave absorbed by roads
117 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_ROOF ! longwave absorbed by roofs
118 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_SNOW_ROAD! longwave absorbed by snow
119 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_SNOW_ROOF! on roads and roofs
120 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_GARDEN ! longwave absorbed by gardens
121 REAL, DIMENSION(SIZE(T%XBLD)) :: ZABS_LW_GREENROOF! longwave absorbed by green roofs
122 REAL, DIMENSION(SIZE(T%XBLD)) :: ZLW_UP ! outgoing longwave
123 !
124 REAL, DIMENSION(SIZE(T%XBLD)) :: ZT_SKY
125 REAL(KIND=JPRB) :: ZHOOK_HANDLE
126 !
127 !-------------------------------------------------------------------------------
128 !
129 !* snow fractions
130 ! --------------
131 !
132 IF (lhook) CALL dr_hook('AVERAGED_TSRAD_TEB',0,zhook_handle)
133 gmask(:) = .false.
134  CALL snow_frac_road(t%TSNOW_ROAD%WSNOW(:,1),gmask,zdn_road,zdf_road)
135  CALL snow_frac_roof(t%TSNOW_ROOF%WSNOW(:,1),gmask,zdn_roof,zdf_roof)
136 !
137 ! fixed incoming LW (W/m2)
138 zlw_rad(:)= xstefan * (t%XT_ROAD(:,1) ** 4)
139 !
140 ! LW absorbed by roofs
141 zabs_lw_roof(:) = t%XEMIS_ROOF(:) * (zlw_rad(:) - xstefan * t%XT_ROOF(:,1)**4)
142 !
143 !* LW absorbed by snow on roof
144 zabs_lw_snow_roof(:) = t%TSNOW_ROOF%EMIS(:) * (zlw_rad(:) - xstefan * t%TSNOW_ROOF%TS(:)**4)
145 !
146 !* town averaged emissivity
147 pemis(:) = t%XBLD(:) * (1.-t%XGREENROOF(:)) * (zdf_roof(:)*t%XEMIS_ROOF (:) &
148  + zdn_roof(:)*t%TSNOW_ROOF%EMIS(:)) &
149  + t%XBLD(:) * t%XGREENROOF(:) * pemis_greenroof(:)
150 
151 !
152 !* long-wave trapping coefficients
153 ! -------------------------------
154 !
155  zt_sky(:) = (zlw_rad(:)/xstefan)**0.25
156  !
157  CALL urban_lw_coef(b, t, zlw_rad, pemis_garden, &
158  t%XT_ROAD(:,1), pts_garden, &
159  zlw_wa_to_wb, zlw_wa_to_r, zlw_wb_to_r, &
160  zlw_wa_to_nr,zlw_wb_to_nr, &
161  zlw_wa_to_g, zlw_wb_to_g, &
162  zlw_wa_to_win, zlw_wb_to_win, &
163  zlw_r_to_wa, zlw_r_to_wb, zlw_r_to_win, &
164  zlw_g_to_wa, zlw_g_to_wb, zlw_g_to_win, &
165  zlw_s_to_wa, zlw_s_to_wb, zlw_s_to_r, &
166  zlw_s_to_nr, zlw_s_to_g, zlw_s_to_win, &
167  zlw_win_to_wa, zlw_win_to_wb, zlw_win_to_r, &
168  zlw_win_to_nr, zlw_win_to_g, &
169  zlw_nr_to_wa, zlw_nr_to_wb, zlw_nr_to_win )
170  !
171  !
172  !* town averaged emissivity
173  ! ------------------------
174  !
175  pemis(:) = pemis(:) &
176  + t%XROAD(:)*t%XSVF_ROAD(:)* (zdf_road(:)* t%XEMIS_ROAD(:) &
177  + zdn_road(:)* t%TSNOW_ROAD%EMIS(:)) &
178  + t%XWALL_O_HOR(:) * t%XSVF_WALL(:) * t%XEMIS_WALL(:) &
179  + t%XGARDEN(:) * t%XSVF_GARDEN(:) * pemis_garden(:)
180 
181  !
182  ! LW absorbed by roads
183  zabs_lw_road(:) = zlw_s_to_r(:) * (zt_sky(:) - t%XT_ROAD(:,1)) &
184  + zlw_wa_to_r(:) * (t%XT_WALL_A(:,1) - t%XT_ROAD(:,1)) &
185  + zlw_wb_to_r(:) * (t%XT_WALL_B(:,1) - t%XT_ROAD(:,1)) &
186  + zlw_win_to_r(:) * (b%XT_WIN1 (:) - t%XT_ROAD(:,1))
187 
188  !
189  ! LW absorbed by walls
190  zabs_lw_wall(:) =( zlw_s_to_wa(:) * (zt_sky(:) - t%XT_WALL_A(:,1)) &
191  + zlw_r_to_wa(:) * (t%XT_ROAD(:,1) - t%XT_WALL_A(:,1)) &
192  + zlw_g_to_wa(:) * (pts_garden(:) - t%XT_WALL_A(:,1)) &
193  + zlw_win_to_wa(:)* (b%XT_WIN1(:) - t%XT_WALL_A(:,1)) &
194  + zlw_s_to_wb(:) * (zt_sky(:) - t%XT_WALL_B(:,1)) &
195  + zlw_r_to_wb(:) * (t%XT_ROAD(:,1) - t%XT_WALL_B(:,1)) &
196  + zlw_g_to_wb(:) * (pts_garden(:) - t%XT_WALL_B(:,1)) &
197  + zlw_win_to_wb(:)* (b%XT_WIN1(:) - t%XT_WALL_B(:,1)))&
198  * 0.5
199 
200  !
201  !* LW absorbed by snow on road
202  zabs_lw_snow_road(:) = zlw_s_to_r(:) * (zt_sky(:) - t%TSNOW_ROAD%TS(:)) &
203  + zlw_wa_to_nr(:) * (t%XT_WALL_A(:,1) - t%TSNOW_ROAD%TS(:)) &
204  + zlw_wb_to_nr(:) * (t%XT_WALL_B(:,1) - t%TSNOW_ROAD%TS(:)) &
205  + zlw_win_to_nr(:) * (b%XT_WIN1(:) - t%TSNOW_ROAD%TS(:))
206  !
207  !* LW absorbed by gardens
208  zabs_lw_garden(:) = zlw_s_to_g(:)*(zt_sky(:)-pts_garden(:)) &
209  + zlw_wa_to_g(:)*(t%XT_WALL_A(:,1)-pts_garden(:)) &
210  + zlw_wb_to_g(:)*(t%XT_WALL_B(:,1)-pts_garden(:)) &
211  + zlw_win_to_g(:)*(b%XT_WIN1 (:)-pts_garden(:))
212  !
213  !* LW absorbed by green roofs
214 zabs_lw_greenroof(:) = pemis_greenroof(:) * (zlw_rad(:) - xstefan * pts_greenroof(:)** 4)
215 
216 !
217 !* outgoing longwave radiation
218 zlw_up(:) = zlw_rad(:) &
219  - ( t%XBLD(:) *(1.-t%XGREENROOF(:))*zdf_roof(:)*zabs_lw_roof(:) &
220  +t%XBLD(:) *(1.-t%XGREENROOF(:))*zdn_roof(:)*zabs_lw_snow_roof(:) &
221  +t%XBLD(:) * t%XGREENROOF(:) *zabs_lw_greenroof(:) &
222  +t%XROAD(:) *zdf_road(:)*zabs_lw_road(:) &
223  +t%XROAD(:) *zdn_road(:)*zabs_lw_snow_road(:) &
224  +t%XWALL_O_HOR(:) *zabs_lw_wall(:) &
225  +t%XGARDEN(:) *zabs_lw_garden(:))
226 !
227 !* town radiative surface temperature
228 ptsrad(:) = ((zlw_up(:) - zlw_rad(:)*(1.-pemis(:))) /pemis(:)/xstefan)**0.25
229 !
230 IF (lhook) CALL dr_hook('AVERAGED_TSRAD_TEB',1,zhook_handle)
231 !-------------------------------------------------------------------------------
232 !
233 END SUBROUTINE averaged_tsrad_teb
subroutine snow_frac_road(PWSNOW_ROAD, OSNOW, PDN_ROAD, PDF_ROAD)
real, save xstefan
Definition: modd_csts.F90:59
real, parameter xundef
subroutine urban_lw_coef(B, T, PLW_RAD, PEMIS_G, PTS_SR, PTS_G, PLW_WA_TO_WB, PLW_WA_TO_R, PLW_WB_TO_R, PLW_WA_TO_NR, PLW_WB_TO_NR, PLW_WA_TO_G, PLW_WB_TO_G, PLW_WA_TO_WIN, PLW_WB_TO_WIN, PLW_R_TO_WA, PLW_R_TO_WB, PLW_R_TO_WIN, PLW_G_TO_WA, PLW_G_TO_WB, PLW_G_TO_WIN, PLW_S_TO_WA, PLW_S_TO_WB, PLW_S_TO_R, PLW_S_TO_NR, PLW_S_TO_G, PLW_S_TO_WIN, PLW_WIN_TO_WA, PLW_WIN_TO_WB, PLW_WIN_TO_R, PLW_WIN_TO_NR, PLW_WIN_TO_G, PLW_NR_TO_WA, PLW_NR_TO_WB, PLW_NR_TO_WIN)
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15
subroutine snow_frac_roof(PWSNOW_ROOF, OSNOW, PDN_ROOF, PDF_ROOF)
subroutine averaged_tsrad_teb(T, B, PEMIS_GARDEN, PTS_GARDEN, PEMI