SURFEX v8.1
General documentation of Surfex
urban_lw_coef.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_lw_coef(B, T, PLW_RAD, PEMIS_G, PTS_SR, PTS_G, &
7  PLW_WA_TO_WB, PLW_WA_TO_R, PLW_WB_TO_R, &
8  PLW_WA_TO_NR,PLW_WB_TO_NR, &
9  PLW_WA_TO_G, PLW_WB_TO_G, &
10  PLW_WA_TO_WIN, PLW_WB_TO_WIN, &
11  PLW_R_TO_WA, PLW_R_TO_WB, PLW_R_TO_WIN, &
12  PLW_G_TO_WA, PLW_G_TO_WB, PLW_G_TO_WIN, &
13  PLW_S_TO_WA, PLW_S_TO_WB, PLW_S_TO_R, &
14  PLW_S_TO_NR, PLW_S_TO_G, PLW_S_TO_WIN, &
15  PLW_WIN_TO_WA, PLW_WIN_TO_WB, PLW_WIN_TO_R, &
16  PLW_WIN_TO_NR, PLW_WIN_TO_G, &
17  PLW_NR_TO_WA, PLW_NR_TO_WB, PLW_NR_TO_WIN )
18 ! ##########################################################################
19 !
20 !!**** *URBAN_LW_COEF*
21 !!
22 !! PURPOSE
23 !! -------
24 !
25 ! Computes the coefficients before each of the temperatures in the
26 ! radiative budgets
27 !
28 !
29 !!** METHOD
30 ! ------
31 !
32 !
33 !
34 !
35 !
36 !! EXTERNAL
37 !! --------
38 !!
39 !!
40 !! IMPLICIT ARGUMENTS
41 !! ------------------
42 !!
43 !! MODD_CST
44 !!
45 !!
46 !! REFERENCE
47 !! ---------
48 !!
49 !!
50 !! AUTHOR
51 !! ------
52 !!
53 !! V. Masson * Meteo-France *
54 !!
55 !! MODIFICATIONS
56 !! -------------
57 !! Original 08/09/98
58 !-------------------------------------------------------------------------------
59 !
60 !* 0. DECLARATIONS
61 ! ------------
62 !
63 USE modd_bem_n, ONLY : bem_t
64 USE modd_teb_n, ONLY : teb_t
65 !
66 USE modd_csts,ONLY : xstefan
67 USE modd_surf_par,ONLY : xundef
68 !
69 USE yomhook ,ONLY : lhook, dr_hook
70 USE parkind1 ,ONLY : jprb
71 !
72 IMPLICIT NONE
73 !
74 !* 0.1 declarations of arguments
75 !
76 TYPE(bem_t), INTENT(INOUT) :: B
77 TYPE(teb_t), INTENT(INOUT) :: T
78 !
79 REAL, DIMENSION(:), INTENT(IN) :: PLW_RAD ! incoming LW radiation
80 REAL, DIMENSION(:), INTENT(IN) :: PEMIS_G ! GARDEN area emissivity
81 !
82 REAL, DIMENSION(:), INTENT(IN) :: PTS_G ! garden surface temperature
83 REAL, DIMENSION(:), INTENT(IN) :: PTS_SR ! snow surface temperature
84 !
85 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WA_TO_WB! L.W. interactions wall->opposite wall
86 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WA_TO_R ! L.W. interactions wall->road for road balance
87 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WB_TO_R ! L.W. interactions wall->road for road balance
88 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WA_TO_NR ! L.W. interactions wall->snow for snow balance
89 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WB_TO_NR ! L.W. interactions wall->snow for snow balance
90 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WA_TO_G ! L.W. interactions wall->GARDEN areas for garden balance
91 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WB_TO_G ! L.W. interactions wall->GARDEN areas for garden balance
92 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WA_TO_WIN! L.W. interactions wall->win for window balance
93 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WB_TO_WIN! L.W. interactions wall->win for window balance
94 !
95 REAL, DIMENSION(:), INTENT(OUT) :: PLW_R_TO_WA ! L.W. interactions road->wall for wall balance
96 REAL, DIMENSION(:), INTENT(OUT) :: PLW_R_TO_WB ! L.W. interactions road->wall for wall balance
97 REAL, DIMENSION(:), INTENT(OUT) :: PLW_R_TO_WIN ! L.W. interactions road->win for win balance
98 !
99 REAL, DIMENSION(:), INTENT(OUT) :: PLW_G_TO_WA ! L.W. interactions GARDEN areas->wall for wall balance
100 REAL, DIMENSION(:), INTENT(OUT) :: PLW_G_TO_WB ! L.W. interactions GARDEN areas->wall for wall balance
101 REAL, DIMENSION(:), INTENT(OUT) :: PLW_G_TO_WIN ! L.W. interactions GARDEN areas->road for window balance
102 !
103 REAL, DIMENSION(:), INTENT(OUT) :: PLW_S_TO_WA ! L.W. interactions sky->wall for wall balance
104 REAL, DIMENSION(:), INTENT(OUT) :: PLW_S_TO_WB ! L.W. interactions sky->wall for wall balance
105 REAL, DIMENSION(:), INTENT(OUT) :: PLW_S_TO_R ! L.W. interactions sky->road for raod balance
106 REAL, DIMENSION(:), INTENT(OUT) :: PLW_S_TO_NR ! L.W. interactions sky->snow for snow balance
107 REAL, DIMENSION(:), INTENT(OUT) :: PLW_S_TO_G ! L.W. interactions sky->GARDEN areas for garden balance
108 REAL, DIMENSION(:), INTENT(OUT) :: PLW_S_TO_WIN ! L.W. interactions sky->win for window balance
109 !
110 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WIN_TO_WA ! L.W. interactions win->wall for wall balance
111 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WIN_TO_WB ! L.W. interactions win->wall for wall balance
112 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WIN_TO_R ! L.W. interactions win->road for road balance
113 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WIN_TO_NR ! L.W. interactions win->GARDEN areas for snow balance
114 REAL, DIMENSION(:), INTENT(OUT) :: PLW_WIN_TO_G ! L.W. interactions win->GARDEN areas for garden balance
115 !
116 REAL, DIMENSION(:), INTENT(OUT) :: PLW_NR_TO_WA! L.W. interactions snow(road)->wall for wall balance
117 REAL, DIMENSION(:), INTENT(OUT) :: PLW_NR_TO_WB! L.W. interactions snow(road)->wall for wall balance
118 REAL, DIMENSION(:), INTENT(OUT) :: PLW_NR_TO_WIN ! L.W. interactions snow(road)->WIN areas for window balance
119 !
120 !* 0.2 declarations of local variables
121 !
122 REAL, DIMENSION(SIZE(T%XBLD)) :: ZT_S ! sky temperature
123 !
124 REAL, DIMENSION(SIZE(T%XBLD)) :: ZEMIS_WIN
125 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_W_W
126 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_R_W
127 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_R_WIN
128 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_W_R
129 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_W_G
130 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_W_WIN
131 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_W_NR
132 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_WIN_W
133 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_WIN_R
134 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_WIN_G
135 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_WIN_NR
136 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_G_W
137 REAL, DIMENSION(SIZE(T%XBLD)) :: ZF_G_WIN
138 !
139 REAL :: ZE1, ZE2, ZF, ZT1, ZT2, ZLW
140 zlw(ze1,ze2,zf,zt1,zt2) = 4.*xstefan*ze1*ze2*zf*((zt1+zt2)/2.)**3
141 !
142 INTEGER :: JJ
143 REAL(KIND=JPRB) :: ZHOOK_HANDLE
144 !-------------------------------------------------------------------------------
145 IF (lhook) CALL dr_hook('URBAN_LW_COEF',0,zhook_handle)
146 !
147 zt_s(:) = (plw_rad(:)/xstefan)**0.25
148 !
149 DO jj=1,SIZE(t%XROAD)
150  !
151  zemis_win(jj) = 0.84 !from Energy Plus Engineering Reference, p219
152  ! see http://apps1.eere.energy.gov/buildings/energyplus/
153  !
154  zf_w_r(jj) = t%XSVF_WALL(jj) * (t%XROAD(jj) /(1.-t%XBLD(jj)))
155  zf_w_g(jj) = t%XSVF_WALL(jj) * (t%XGARDEN(jj) /(1.-t%XBLD(jj)))
156  zf_w_nr(jj) = t%XSVF_WALL(jj)
157  !
158  zf_win_r(jj) = zf_w_r(jj)
159  zf_win_g(jj) = zf_w_g(jj)
160  zf_win_nr(jj) = zf_w_nr(jj)
161  !
162  zf_r_w(jj) = (1 - t%XSVF_ROAD(jj))*(1.-b%XGR(jj)) * 0.5
163  zf_r_win(jj) = (1 - t%XSVF_ROAD(jj))*b%XGR(jj)
164  !
165  zf_g_w(jj) = zf_r_w(jj)
166  zf_g_win(jj) = zf_r_win(jj)
167  !
168  zf_win_w(jj) = (1.-2.*t%XSVF_WALL(jj))*(1.-b%XGR(jj))
169  zf_w_w(jj) = (1.-2.*t%XSVF_WALL(jj))*(1.-b%XGR(jj))
170  zf_w_win(jj) = (1.-2.*t%XSVF_WALL(jj))*b%XGR(jj)
171  !
172  !
173  plw_wa_to_wb(jj)=zlw(t%XEMIS_WALL(jj),t%XEMIS_WALL(jj),zf_w_w(jj),t%XT_WALL_A(jj,1),t%XT_WALL_B(jj,1))
174  !
175  plw_wa_to_r(jj) = zlw(t%XEMIS_WALL(jj),t%XEMIS_ROAD(jj),zf_r_w(jj),t%XT_WALL_A(jj,1),t%XT_ROAD(jj,1))
176  plw_wb_to_r(jj) = zlw(t%XEMIS_WALL(jj),t%XEMIS_ROAD(jj),zf_r_w(jj),t%XT_WALL_B(jj,1),t%XT_ROAD(jj,1))
177  plw_r_to_wa(jj) = zlw(t%XEMIS_ROAD(jj),t%XEMIS_WALL(jj),zf_w_r(jj),t%XT_ROAD(jj,1),t%XT_WALL_A(jj,1))
178  plw_r_to_wb(jj) = zlw(t%XEMIS_ROAD(jj),t%XEMIS_WALL(jj),zf_w_r(jj),t%XT_ROAD(jj,1),t%XT_WALL_B(jj,1))
179  !
180  IF (SIZE(pts_g)>0) THEN
181  plw_wa_to_g(jj) = zlw(t%XEMIS_WALL(jj),pemis_g(jj),zf_g_w(jj),t%XT_WALL_A(jj,1),pts_g(jj))
182  plw_wb_to_g(jj) = zlw(t%XEMIS_WALL(jj),pemis_g(jj),zf_g_w(jj),t%XT_WALL_B(jj,1),pts_g(jj))
183  plw_g_to_wa(jj) = zlw(pemis_g(jj),t%XEMIS_WALL(jj),zf_w_g(jj),pts_g(jj),t%XT_WALL_A(jj,1))
184  plw_g_to_wb(jj) = zlw(pemis_g(jj),t%XEMIS_WALL(jj),zf_w_g(jj),pts_g(jj),t%XT_WALL_B(jj,1))
185  ELSE
186  plw_wa_to_g(jj) = 0.
187  plw_wb_to_g(jj) = 0.
188  plw_g_to_wa(jj) = 0.
189  plw_g_to_wb(jj) = 0.
190  ENDIF
191  !
192  !
193  IF (pts_sr(jj) .EQ. xundef) THEN
194  plw_wa_to_nr(jj) = 0.
195  plw_wb_to_nr(jj) = 0.
196  plw_nr_to_wa(jj) = 0.
197  plw_nr_to_wb(jj) = 0.
198  !
199  plw_win_to_nr(jj) = 0.
200  plw_nr_to_win(jj) = 0
201  !
202  plw_s_to_nr(jj) = 0.
203  ELSE
204  plw_wa_to_nr(jj) = zlw(t%XEMIS_WALL(jj),t%TSNOW_ROAD%EMIS(jj),zf_r_w(jj),t%XT_WALL_A(jj,1),pts_sr(jj))
205  plw_wb_to_nr(jj) = zlw(t%XEMIS_WALL(jj),t%TSNOW_ROAD%EMIS(jj),zf_r_w(jj),t%XT_WALL_B(jj,1),pts_sr(jj))
206  plw_nr_to_wa(jj) = zlw(t%TSNOW_ROAD%EMIS(jj),t%XEMIS_WALL(jj),zf_w_nr(jj),pts_sr(jj),t%XT_WALL_A(jj,1))
207  plw_nr_to_wb(jj) = zlw(t%TSNOW_ROAD%EMIS(jj),t%XEMIS_WALL(jj),zf_w_nr(jj),pts_sr(jj),t%XT_WALL_B(jj,1))
208  !
209  plw_win_to_nr(jj)= zlw(zemis_win(jj),t%TSNOW_ROAD%EMIS(jj),zf_r_win(jj),b%XT_WIN1(jj),pts_sr(jj))
210  plw_nr_to_win(jj)= zlw(t%TSNOW_ROAD%EMIS(jj),zemis_win(jj),zf_win_nr(jj),pts_sr(jj),b%XT_WIN1(jj))
211  !
212  plw_s_to_nr(jj) = zlw(1.,t%TSNOW_ROAD%EMIS(jj),t%XSVF_ROAD(jj),zt_s(jj),pts_sr(jj))
213  ENDIF
214  !
215  plw_win_to_r(jj)= zlw(zemis_win(jj),t%XEMIS_ROAD(jj),zf_r_win(jj),b%XT_WIN1(jj),t%XT_ROAD(jj,1))
216  plw_r_to_win(jj)= zlw(t%XEMIS_ROAD(jj),zemis_win(jj),zf_win_r(jj),t%XT_ROAD(jj,1),b%XT_WIN1(jj))
217  !
218  IF (SIZE(pts_g)>0) THEN
219  plw_win_to_g(jj)= zlw(zemis_win(jj),pemis_g(jj),zf_g_win(jj),b%XT_WIN1(jj),pts_g(jj))
220  plw_g_to_win(jj)= zlw(pemis_g(jj),zemis_win(jj),zf_win_g(jj),pts_g(jj),b%XT_WIN1(jj))
221  ELSE
222  plw_win_to_g(jj) = 0.
223  plw_g_to_win(jj) = 0.
224  ENDIF
225  !
226  plw_win_to_wa(jj) = zlw(zemis_win(jj),t%XEMIS_WALL(jj),zf_w_win(jj),b%XT_WIN1(jj),t%XT_WALL_A(jj,1))
227  plw_win_to_wb(jj) = zlw(zemis_win(jj),t%XEMIS_WALL(jj),zf_w_win(jj),b%XT_WIN1(jj),t%XT_WALL_B(jj,1))
228  plw_wa_to_win(jj) = zlw(t%XEMIS_WALL(jj),zemis_win(jj),zf_win_w(jj),t%XT_WALL_A(jj,1),b%XT_WIN1(jj))
229  plw_wb_to_win(jj) = zlw(t%XEMIS_WALL(jj),zemis_win(jj),zf_win_w(jj),t%XT_WALL_B(jj,1),b%XT_WIN1(jj))
230  !
231  plw_s_to_win(jj) = zlw(1.,zemis_win(jj),t%XSVF_WALL(jj),zt_s(jj),b%XT_WIN1(jj))
232  !
233  plw_s_to_wa(jj) = zlw(1.,t%XEMIS_WALL(jj),t%XSVF_WALL(jj),zt_s(jj),t%XT_WALL_A(jj,1))
234  plw_s_to_wb(jj) = zlw(1.,t%XEMIS_WALL(jj),t%XSVF_WALL(jj),zt_s(jj),t%XT_WALL_B(jj,1))
235  !
236  IF (SIZE(pts_g)>0) THEN
237  plw_s_to_g(jj) = zlw(1.,pemis_g(jj),t%XSVF_ROAD(jj),zt_s(jj),pts_g(jj))
238  ENDIF
239  plw_s_to_r(jj) = zlw(1.,t%XEMIS_ROAD(jj),t%XSVF_ROAD(jj),zt_s(jj),t%XT_ROAD(jj,1))
240  plw_s_to_nr(jj) = zlw(1.,t%TSNOW_ROAD%EMIS(jj),t%XSVF_ROAD(jj),zt_s(jj),pts_sr(jj))
241  !
242 ENDDO
243 !-------------------------------------------------------------------------------
244 IF (lhook) CALL dr_hook('URBAN_LW_COEF',1,zhook_handle)
245 !
246 END SUBROUTINE urban_lw_coef
247 
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