SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
road_layer_e_budget.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 road_layer_e_budget(PT_ROAD, PTSTEP, PHC_ROAD, PTC_ROAD, PD_ROAD, &
7  pdn_road, prhoa, pac_road, pac_road_wat, &
8  plw_rad, pps, pqsat_road, pdelt_road, pexns, &
9  pabs_sw_road, pgsnow_road, pq_lowcan, pt_lowcan, &
10  pts_wall_a, pts_wall_b, ptsnow_road, &
11  pts_garden, pts_win, &
12  plw_wa_to_r, plw_wb_to_r, plw_s_to_r, plw_win_to_r, &
13  pemis_road, pemit_lw_road, pdqs_road, pabs_lw_road, &
14  phfree_road, plefree_road, pimb_road, prr )
15 ! ##########################################################################
16 !
17 !!**** *ROAD_LAYER_E_BUDGET*
18 !!
19 !! PURPOSE
20 !! -------
21 !
22 ! Computes the evoultion of roads surface temperatures
23 !
24 !
25 !!** METHOD
26 ! ------
27 !
28 ! 6 : equations for evolution of Ts_road
29 ! **********************************
30 !
31 !
32 ! dTr_1(t) / dt = 1/(dr_1*Cr_1) * ( Rn_r - H_r - LE_r
33 ! - 2*Kr_1*(Tr_1-Tr_2)/(dr_1 +dr_2) )
34 !
35 ! dTr_k(t) / dt = 1/(dr_k*Cr_k) * (- 2*Kr_k-1*(Tr_k-Tr_k-1)/(dr_k-1 +dr_k)
36 ! - 2*Kr_k *(Tr_k-Tr_k+1)/(dr_k+1 +dr_k) )
37 !
38 ! with
39 !
40 ! K*_k = (d*_k+ d*_k+1)/(d*_k/k*_k+ d*_k+1/k*_k+1)
41 !
42 ! Rn_r = abs_Rg_r
43 ! - sigma * emis_r * Ts_r**4 (t+dt)
44 ! + emis_r * SVF_r * LWR
45 ! + sigma * emis_r * emis_w * (1-SVF_r) * Ts_w**4 (t+dt)
46 ! + emis_r (1-emis_w) * (1-SVF_r) * SVF_w * LWR
47 ! + sigma * emis_r * emis_w * (1-emis_w) * (1-SVF_r) * (1-2*SVF_w) * Ts_w**4 (t+dt)
48 ! + sigma * emis_r * emis_r * (1-emis_w) * (1-SVF_r) * SVF_w * Ts_r**4 (t+dt)
49 !
50 ! H_r = rho Cp CH V ( Ts_r (t+dt) - Ta_canyon )
51 !
52 ! LE_r = rho Lv CH V ( qs_r (t+dt) - qa_canyon )
53 !
54 !
55 ! The system is implicited (or semi-implicited).
56 !
57 ! ZIMPL=1 ---> implicit system
58 ! ZIMPL=0.5 ---> semi-implicit system
59 ! ZIMPL=0 ---> explicit system
60 !
61 !
62 !
63 !
64 !! EXTERNAL
65 !! --------
66 !!
67 !!
68 !! IMPLICIT ARGUMENTS
69 !! ------------------
70 !!
71 !! MODD_CST
72 !!
73 !!
74 !! REFERENCE
75 !! ---------
76 !!
77 !!
78 !! AUTHOR
79 !! ------
80 !!
81 !! V. Masson * Meteo-France *
82 !!
83 !! MODIFICATIONS
84 !! -------------
85 !! Original 23/01/98
86 !! 21/11/01 (V. Masson and A. Lemonsu) bug of latent flux
87 !! for very strong evaporation (all reservoir emptied
88 !! in one time-step)
89 !! 02/11 (V. Masson) split of the routine for roads and walls separately
90 !! G. Pigeon 09/2012: add heating/cooling of rain from air temperature
91 !! to surface road temp. for the road energy budget
92 !-------------------------------------------------------------------------------
93 !
94 !* 0. DECLARATIONS
95 ! ------------
96 !
97 USE modd_csts,ONLY : xcpd, xlvtt, xstefan, xcl
98 !
99 USE mode_thermos
100 !
101 USE modi_layer_e_budget
102 USE modi_layer_e_budget_get_coef
103 !
104 USE yomhook ,ONLY : lhook, dr_hook
105 USE parkind1 ,ONLY : jprb
106 !
107 IMPLICIT NONE
108 !
109 !* 0.1 declarations of arguments
110 !
111 !
112 REAL, DIMENSION(:,:), INTENT(INOUT) :: pt_road ! road layers temperatures
113 REAL, INTENT(IN) :: ptstep ! time step
114 REAL, DIMENSION(:,:), INTENT(IN) :: phc_road ! heat capacity for road layers
115 REAL, DIMENSION(:,:), INTENT(IN) :: ptc_road ! thermal conductivity for road layers
116 REAL, DIMENSION(:,:), INTENT(IN) :: pd_road ! depth of road layers
117 REAL, DIMENSION(:), INTENT(IN) :: pdn_road ! road snow fraction
118 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! rho
119 REAL, DIMENSION(:), INTENT(IN) :: pac_road ! aerodynamical conductance
120 ! ! between road and canyon
121 REAL, DIMENSION(:), INTENT(IN) :: pac_road_wat ! aerodynamical conductance
122 ! ! between road and canyon
123 ! ! (for water)
124 REAL, DIMENSION(:), INTENT(IN) :: plw_rad ! atmospheric infrared radiation
125 REAL, DIMENSION(:), INTENT(IN) :: pps ! pressure at the surface
126 REAL, DIMENSION(:), INTENT(IN) :: pqsat_road ! q_sat(Ts)
127 REAL, DIMENSION(:), INTENT(IN) :: pdelt_road ! fraction of water
128 REAL, DIMENSION(:), INTENT(IN) :: pexns ! surface Exner function
129 REAL, DIMENSION(:), INTENT(IN) :: pabs_sw_road ! absorbed solar radiation
130 REAL, DIMENSION(:), INTENT(IN) :: pgsnow_road ! road snow conduction
131 ! ! heat fluxes at mantel
132 ! ! base
133 REAL, DIMENSION(:), INTENT(IN) :: pq_lowcan ! and specific humidity
134 REAL, DIMENSION(:), INTENT(IN) :: pt_lowcan ! low canyon air temperature
135 REAL, DIMENSION(:), INTENT(IN) :: pts_wall_a ! wall surface temperature
136 REAL, DIMENSION(:), INTENT(IN) :: pts_wall_b ! wall surface temperature
137 REAL, DIMENSION(:), INTENT(IN) :: ptsnow_road ! road snow temperature
138 REAL, DIMENSION(:), INTENT(IN) :: pts_garden ! green area surface temperature
139 REAL, DIMENSION(:), INTENT(IN) :: pts_win ! window outdoor surface temperature [K]
140 !
141 REAL, DIMENSION(:), INTENT(IN) :: plw_wa_to_r ! LW interactions wall -> road
142 REAL, DIMENSION(:), INTENT(IN) :: plw_wb_to_r ! LW interactions wall -> road
143 REAL, DIMENSION(:), INTENT(IN) :: plw_s_to_r ! LW interactions sky -> road
144 REAL, DIMENSION(:), INTENT(IN) :: plw_win_to_r ! LW interactions window -> road
145 !
146 REAL, DIMENSION(:), INTENT(IN) :: pemis_road ! road emissivity
147 !
148 REAL, DIMENSION(:), INTENT(OUT) :: pemit_lw_road! LW flux emitted by the road (W/m2 of road)
149 REAL, DIMENSION(:), INTENT(OUT) :: pdqs_road !heat storage inside the road
150 REAL, DIMENSION(:), INTENT(OUT) :: pabs_lw_road ! absorbed infrared rad.
151 REAL, DIMENSION(:), INTENT(OUT) :: phfree_road ! sensible heat flux on the
152  ! snow free part of the road [W m-2]
153 REAL, DIMENSION(:), INTENT(OUT) :: plefree_road ! latent heat flux on the
154  ! snow free part of the road [W m-2]
155 REAL, DIMENSION(:), INTENT(OUT) :: pimb_road ! road residual energy imbalance
156  ! for verification [W m-2]
157 REAL, DIMENSION(:), INTENT(IN) :: prr ! rain rate [kg m-2 s-1]
158 
159 !
160 !* 0.2 declarations of local variables
161 !
162 REAL :: zimpl=1.0 ! implicit coefficient
163 REAL :: zexpl=0.0 ! explicit coefficient
164 !
165 REAL, DIMENSION(SIZE(PT_ROAD,1),SIZE(PT_ROAD,2)) :: za,& ! lower diag.
166  zb,& ! main diag.
167  zc,& ! upper diag.
168  zy ! r.h.s.
169 !
170 REAL, DIMENSION(SIZE(PPS)) :: zdn_road ! snow-covered surface fraction on road
171 REAL, DIMENSION(SIZE(PPS)) :: zdf_road ! snow-free surface fraction on road
172 !
173 REAL, DIMENSION(SIZE(PPS)) :: zdqsat_road ! dq_sat/dTs
174 REAL, DIMENSION(SIZE(PPS)) :: zrho_acf_r ! rho * conductance
175 ! ! * snow-free f.
176 REAL, DIMENSION(SIZE(PPS)) :: zrho_acf_r_wat ! rho * conductance for water
177 ! ! * snow-free f.
178 ! thermal capacity times layer depth
179 REAL, DIMENSION(SIZE(PPS)) :: zts_road ! road surface temperature
180 REAL, DIMENSION(SIZE(PPS)) :: zheat_rr ! heat used too cool/heat the rain from the roof
181 REAL, DIMENSION(SIZE(PPS)) :: zt_sky ! road surface temperature
182 !
183 INTEGER :: iroad_layer ! number of road layers
184 INTEGER :: jj ! loop counter
185 REAL(KIND=JPRB) :: zhook_handle
186 !-------------------------------------------------------------------------------
187 IF (lhook) CALL dr_hook('ROAD_LAYER_E_BUDGET',0,zhook_handle)
188 !
189  CALL layer_e_budget_get_coef( pt_road, ptstep, zimpl, phc_road, ptc_road, pd_road, &
190  za, zb, zc, zy )
191 !
192 !* 1. Layer thermal properties
193 ! ------------------------
194 !
195 iroad_layer = SIZE(pt_road,2)
196 !
197 DO jj=1, SIZE(pdn_road)
198  !
199  zdn_road(jj) = pdn_road(jj)
200  zdf_road(jj) = 1. - zdn_road(jj)
201  !
202  !* 2.3 Surface temperatures
203  ! --------------------
204  !
205  zts_road(jj) = pt_road(jj,1)
206  !
207  !* 2.2 flux properties
208  ! ---------------
209  !
210  zrho_acf_r(jj) = prhoa(jj) * pac_road(jj) * zdf_road(jj)
211  zrho_acf_r_wat(jj) = prhoa(jj) * pac_road_wat(jj) * zdf_road(jj)
212  !
213  !* 2.4 Sky temperature
214  ! ---------------
215  !
216  zt_sky(jj) = (plw_rad(jj)/xstefan)**0.25
217  !
218 ENDDO
219 !
220 !* 2.4 qsat, dqsat/dTs, and humidity for roads
221 ! ---------------------------------------
222 !
223 zdqsat_road(:) = dqsat(zts_road(:),pps(:),pqsat_road(:))
224 !
225 !-------------------------------------------------------------------------------
226 !
227 !* 3. First road layers coefficients (in contact with outdoor env.)
228 ! -------------------------------------------------------------
229 !
230 DO jj=1,SIZE(pt_road,1)
231  !
232  zb(jj,1) = zb(jj,1) + zimpl * xcpd/pexns(jj) * zrho_acf_r(jj) &
233  + zimpl * xlvtt * zrho_acf_r_wat(jj) * pdelt_road(jj) * zdqsat_road(jj)
234  !
235  zy(jj,1) = zy(jj,1) &
236  + xcpd/pexns(jj) * zrho_acf_r(jj) * ( pt_lowcan(jj) - zexpl * zts_road(jj) ) &
237  + zdf_road(jj)*pabs_sw_road(jj) + zdn_road(jj)*pgsnow_road(jj) &
238  + xlvtt * zrho_acf_r_wat(jj) * pdelt_road(jj) &
239  * ( pq_lowcan(jj) - pqsat_road(jj) + zimpl * zdqsat_road(jj) * zts_road(jj) )
240  !
241  zb(jj,1) = zb(jj,1) &
242  + zimpl * zdf_road(jj) * ( plw_s_to_r(jj) + plw_wa_to_r(jj) + &
243  plw_wb_to_r(jj) + plw_win_to_r(jj) + &
244  prr(jj) * xcl ) ! heat/cool rain
245  !
246  zy(jj,1) = zy(jj,1) &
247  + zdf_road(jj) * ( &
248  plw_s_to_r(jj) * (zt_sky(jj) - zexpl * zts_road(jj)) &
249  + plw_win_to_r(jj) * (pts_win(jj) - zexpl * zts_road(jj)) &
250  + plw_wa_to_r(jj) * (pts_wall_a(jj) - zexpl * zts_road(jj)) &
251  + plw_wb_to_r(jj) * (pts_wall_b(jj) - zexpl * zts_road(jj)) &
252  + prr(jj) * xcl * (pt_lowcan(jj)- zexpl * zts_road(jj) )) !heat/cool rain
253  !
254 ENDDO
255 !
256 !
257  CALL layer_e_budget( pt_road, ptstep, zimpl, phc_road, ptc_road, pd_road, &
258  za, zb, zc, zy, pdqs_road )
259 !
260 !-------------------------------------------------------------------------------
261 !
262 !* 12. Road and wall absorbed infra-red radiation on snow-free surfaces
263 ! ----------------------------------------------------------------
264 !
265 !* absorbed LW
266 DO jj=1,SIZE(pt_road,1)
267  !
268  ! surface temperature used in energy balance
269  zts_road(jj) = zexpl * zts_road(jj) + zimpl * pt_road(jj,1)
270  pabs_lw_road(jj) = plw_s_to_r(jj) * (zt_sky(jj) - zts_road(jj)) + &
271  plw_wa_to_r(jj) * (pts_wall_a(jj) - zts_road(jj)) + &
272  plw_wb_to_r(jj) * (pts_wall_b(jj) - zts_road(jj)) + &
273  plw_win_to_r(jj) * (pts_win(jj) - zts_road(jj))
274  !
275  !* 9. Road emitted LW radiation on snow-free surfaces
276  ! -----------------------------------------------
277  pemit_lw_road(jj) = xstefan * pt_road(jj,1)**4 + &
278  (1 - pemis_road(jj))/pemis_road(jj) * pabs_lw_road(jj)
279  !
280  !* 10. road and wall sensible heat flux
281  ! --------------------------------
282  !
283  phfree_road(jj) = zrho_acf_r(jj) * xcpd/pexns(jj) * &
284  ( zimpl*pt_road(jj,1) + zexpl*zts_road(jj) - pt_lowcan(jj) )
285  !
286  !* 11 road latent heat flux
287  ! ---------------------
288  !
289  plefree_road(jj) = zrho_acf_r_wat(jj) * xlvtt * pdelt_road(jj) * &
290  ( pqsat_road(jj) - pq_lowcan(jj) + &
291  zimpl * zdqsat_road(jj) * (pt_road(jj,1) - zts_road(jj)) )
292  zheat_rr(jj) = prr(jj) * xcl * (zts_road(jj) - pt_lowcan(jj))
293  !
294  !* 12 heat storage inside roads
295  ! -------------------------
296  !
297  !* 13 road energy residual imbalance for verification
298  ! -----------------------------------------------
299  !
300  pimb_road(jj) = pabs_sw_road(jj) + pabs_lw_road(jj) - pdqs_road(jj) &
301  - zdf_road(jj) * ( phfree_road(jj) + plefree_road(jj)) &
302  - zdn_road(jj) * pgsnow_road(jj)
303  !
304 ENDDO
305 !
306 !-------------------------------------------------------------------------------
307 IF (lhook) CALL dr_hook('ROAD_LAYER_E_BUDGET',1,zhook_handle)
308 !
309 END SUBROUTINE road_layer_e_budget
310 
subroutine layer_e_budget(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY, PDQS)
subroutine road_layer_e_budget(PT_ROAD, PTSTEP, PHC_ROAD, PTC_ROAD, PD_ROAD, PDN_ROAD, PRHOA, PAC_ROAD, PAC_ROAD_WAT, PLW_RAD, PPS, PQSAT_ROAD, PDELT_ROAD, PEXNS, PABS_SW_ROAD, PGSNOW_ROAD, PQ_LOWCAN, PT_LOWCAN, PTS_WALL_A, PTS_WALL_B, PTSNOW_ROAD, PTS_GARDEN, PTS_WIN, PLW_WA_TO_R, PLW_WB_TO_R, PLW_S_TO_R, PLW_WIN_TO_R, PEMIS_ROAD, PEMIT_LW_ROAD, PDQS_ROAD, PABS_LW_ROAD, PHFREE_ROAD, PLEFREE_ROAD, PIMB_ROAD, PRR)
subroutine layer_e_budget_get_coef(PT, PTSTEP, PIMPL, PHC, PTC, PD, PA, PB, PC, PY)