SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
urban_drag.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_drag(HZ0H, HIMPLICIT_WIND, PTSTEP, &
7  pt_canyon, pq_canyon, pu_canyon, &
8  pt_lowcan, pq_lowcan, pu_lowcan, pz_lowcan, &
9  pts_roof, pts_road, pts_wall, pts_garden, &
10  pdelt_snow_roof, pdelt_snow_road, &
11  pexns, pexna, pta, pqa, pps, prhoa, &
12  pzref, puref, pvmod, &
13  pz0_town, &
14  pbld, pgarden, proad, &
15  pbld_height, pcan_hw_ratio, &
16  pwall_o_grnd, &
17  pws_roof, pws_road, &
18  pws_roof_max, pws_road_max, &
19  ppew_a_coef, ppew_b_coef, &
20  ppew_a_coef_lowcan, ppew_b_coef_lowcan, &
21  pqsat_roof, pqsat_road, pdelt_roof, pdelt_road, &
22  pcd, pcdn, pac_roof, pac_roof_wat, &
23  pac_wall, pac_road, pac_road_wat, pac_top, &
24  pac_garden, pri, &
25  puw_road, puw_roof, pduwdu_road, pduwdu_roof, &
26  pustar_town, ocanopy, pts_win, pac_win, hch_bem, &
27  prough_roof, prough_wall )
28 ! ##########################################################################
29 !
30 !!**** *URBAN_DRAG*
31 !!
32 !! PURPOSE
33 !! -------
34 !
35 ! Computes the surface drag over artificial surfaces as towns,
36 ! taking into account the canyon like geometry of urbanized areas.
37 !
38 !
39 !!** METHOD
40 !! ------
41 !
42 !
43 !
44 !
45 !! EXTERNAL
46 !! --------
47 !!
48 !!
49 !! IMPLICIT ARGUMENTS
50 !! ------------------
51 !!
52 !!
53 !! REFERENCE
54 !! ---------
55 !!
56 !!
57 !! AUTHOR
58 !! ------
59 !!
60 !! V. Masson * Meteo-France *
61 !!
62 !! MODIFICATIONS
63 !! -------------
64 !! Original 20/01/98
65 !! 01/00 (V. Masson) separation of skimming, wake and isolated flows
66 !! 09/00 (V. Masson) use of Z0 for roads
67 !! 12/02 (A. Lemonsu) convective speed w* in canyon
68 ! 04 (A. Lemonsu) z0h=z0m for resistance canyon-atmosphere
69 ! 03/08 (S. Leroyer) debug PU_CAN (1. * H/3)
70 ! 12/08 (S. Leroyer) option (HZ0H) for z0h applied on roof, road and town
71 !! 09/12 B. Decharme new wind implicitation
72 ! 11/11 (G. Pigeon) apply only urban_exch_coef when necessary if
73 ! canopy/no canopy
74 ! 09/12 (G. Pigeon) add new formulation for outdoor conv. coef for
75 ! wall/roof/window
76 !!
77 !-------------------------------------------------------------------------------
78 !
79 !* 0. DECLARATIONS
80 ! ------------
81 !
82 USE modd_surf_par, ONLY : xundef
83 USE modd_csts,ONLY : xlvtt, xpi, xcpd, xg, xkarman
84 !
85 !USE MODE_SBLS
86 USE mode_thermos
87 USE modi_urban_exch_coef
88 USE mode_conv_doe
89 !
90 USE yomhook ,ONLY : lhook, dr_hook
91 USE parkind1 ,ONLY : jprb
92 !
93 IMPLICIT NONE
94 !
95 !* 0.1 declarations of arguments
96 !
97 !
98  CHARACTER(LEN=6), INTENT(IN) :: hz0h ! TEB option for z0h roof & road
99 !
100  CHARACTER(LEN=*), INTENT(IN) :: himplicit_wind ! wind implicitation option
101 ! ! 'OLD' = direct
102 ! ! 'NEW' = Taylor serie, order 1
103 !
104 REAL, INTENT(IN) :: ptstep ! time-step
105 REAL, DIMENSION(:), INTENT(IN) :: pt_canyon ! canyon air temperature
106 REAL, DIMENSION(:), INTENT(IN) :: pq_canyon ! canyon air specific humidity.
107 REAL, DIMENSION(:), INTENT(IN) :: pu_canyon ! hor. wind in canyon
108 REAL, DIMENSION(:), INTENT(IN) :: pu_lowcan ! wind near the road
109 REAL, DIMENSION(:), INTENT(IN) :: pt_lowcan ! temp. near the road
110 REAL, DIMENSION(:), INTENT(IN) :: pq_lowcan ! hum. near the road
111 REAL, DIMENSION(:), INTENT(IN) :: pz_lowcan ! height of atm. var. near the road
112 REAL, DIMENSION(:), INTENT(IN) :: pts_roof ! surface temperature
113 REAL, DIMENSION(:), INTENT(IN) :: pts_road ! surface temperature
114 REAL, DIMENSION(:), INTENT(IN) :: pts_wall ! surface temperature
115 REAL, DIMENSION(:), INTENT(IN) :: pts_garden ! surface temperature
116 REAL, DIMENSION(:), INTENT(IN) :: pdelt_snow_roof! fraction of snow on roof
117 REAL, DIMENSION(:), INTENT(IN) :: pdelt_snow_road! fraction of snow on road
118 REAL, DIMENSION(:), INTENT(IN) :: pexns ! surface exner function
119 REAL, DIMENSION(:), INTENT(IN) :: pta ! temperature at the lowest level
120 REAL, DIMENSION(:), INTENT(IN) :: pqa ! specific humidity
121  ! at the lowest level
122 REAL, DIMENSION(:), INTENT(IN) :: pvmod ! module of the horizontal wind
123 REAL, DIMENSION(:), INTENT(IN) :: pps ! pressure at the surface
124 REAL, DIMENSION(:), INTENT(IN) :: pexna ! exner function
125  ! at the lowest level
126 REAL, DIMENSION(:), INTENT(IN) :: prhoa ! air density
127 REAL, DIMENSION(:), INTENT(IN) :: pzref ! reference height of the first
128  ! atmospheric level (temperature)
129 REAL, DIMENSION(:), INTENT(IN) :: puref ! reference height of the first
130  ! atmospheric level (wind)
131 REAL, DIMENSION(:), INTENT(IN) :: pz0_town ! roughness length for momentum
132 REAL, DIMENSION(:), INTENT(IN) :: pbld ! fraction of buildings
133 REAL, DIMENSION(:), INTENT(IN) :: proad ! fraction of roads
134 REAL, DIMENSION(:), INTENT(IN) :: pgarden ! fraction of GARDEN areas
135 REAL, DIMENSION(:), INTENT(IN) :: pbld_height ! h
136 REAL, DIMENSION(:), INTENT(IN) :: pcan_hw_ratio ! h/W
137 REAL, DIMENSION(:), INTENT(IN) :: pwall_o_grnd ! wall surf. / (road+GARDEN area) surf.
138 !
139 REAL, DIMENSION(:), INTENT(IN) :: pws_roof ! roof water content (kg/m2)
140 REAL, DIMENSION(:), INTENT(IN) :: pws_road ! road water content (kg/m2)
141 REAL, DIMENSION(:), INTENT(IN) :: pws_roof_max ! maximum deepness of roof
142 REAL, DIMENSION(:), INTENT(IN) :: pws_road_max ! and water reservoirs (kg/m2)
143 !
144 !
145 REAL, DIMENSION(:), INTENT(IN) :: ppew_a_coef ! implicit coefficients (m2s/kg)
146 REAL, DIMENSION(:), INTENT(IN) :: ppew_b_coef ! for wind coupling (m/s)
147 REAL, DIMENSION(:), INTENT(IN) :: ppew_a_coef_lowcan ! implicit coefficients for wind coupling (m2s/kg)
148 REAL, DIMENSION(:), INTENT(IN) :: ppew_b_coef_lowcan ! between low canyon wind and road (m/s)
149 !
150 REAL, DIMENSION(:), INTENT(OUT) :: pqsat_roof ! qsat(Ts)
151 REAL, DIMENSION(:), INTENT(OUT) :: pqsat_road ! qsat(Ts)
152 REAL, DIMENSION(:), INTENT(OUT) :: pdelt_roof ! water fraction on
153 REAL, DIMENSION(:), INTENT(OUT) :: pdelt_road ! snow-free surfaces
154 REAL, DIMENSION(:), INTENT(OUT) :: pcd ! drag coefficient
155 REAL, DIMENSION(:), INTENT(OUT) :: pcdn ! neutral drag coefficient
156 REAL, DIMENSION(:), INTENT(OUT) :: pac_roof ! aerodynamical conductance
157 REAL, DIMENSION(:), INTENT(OUT) :: pac_roof_wat ! aerodynamical conductance (for water)
158 REAL, DIMENSION(:), INTENT(OUT) :: pac_wall ! aerodynamical conductance
159 ! ! between canyon air and
160 ! ! walls
161 REAL, DIMENSION(:), INTENT(OUT) :: pac_road ! aerodynamical conductance
162 ! ! between canyon air and
163 ! ! roads
164 REAL, DIMENSION(:), INTENT(OUT) :: pac_road_wat ! aerodynamical conductance
165 ! ! between canyon air and
166 ! ! road (for water)
167 REAL, DIMENSION(:), INTENT(OUT) :: pac_top ! aerodynamical conductance
168 ! ! between canyon top and atm.
169 REAL, DIMENSION(:), INTENT(IN) :: pac_garden ! aerodynamical conductance
170 ! ! between canyon air and GARDEN areas
171 REAL, DIMENSION(:), INTENT(OUT) :: pri ! Town Richardson number
172 !
173 REAL, DIMENSION(:), INTENT(OUT) :: puw_road ! Momentum flux for roads
174 REAL, DIMENSION(:), INTENT(OUT) :: puw_roof ! Momentum flux for roofs
175 REAL, DIMENSION(:), INTENT(OUT) :: pduwdu_road !
176 REAL, DIMENSION(:), INTENT(OUT) :: pduwdu_roof !
177 REAL, DIMENSION(:), INTENT(OUT) :: pustar_town ! Fraction velocity for town
178 !
179 LOGICAL, INTENT(IN) :: ocanopy ! is canopy active
180 REAL, DIMENSION(:), INTENT(OUT) :: pac_win ! aerodynamical conductance for window
181 REAL, DIMENSION(:), INTENT(IN) :: pts_win ! window outdoor surface temp
182  CHARACTER(LEN=5), INTENT(IN) :: hch_bem ! BEM option for convective heat transfer coef.
183 REAL, DIMENSION(:), INTENT(IN) :: prough_roof ! roughness coef for the roof
184 REAL, DIMENSION(:), INTENT(IN) :: prough_wall ! roughness coef for the wall
185 !
186 !* 0.2 declarations of local variables
187 !
188 !
189 REAL, DIMENSION(SIZE(PTA)) :: zts_town ! town averaged temp.
190 REAL, DIMENSION(SIZE(PTA)) :: zq_town ! town averaged hum.
191 REAL, DIMENSION(SIZE(PTA)) :: zavdelt_roof ! averaged water frac.
192 REAL, DIMENSION(SIZE(PTA)) :: zq_roof ! roof spec. hum.
193 REAL, DIMENSION(SIZE(PTA)) :: zz0_roof ! roof roughness length
194 REAL, DIMENSION(SIZE(PTA)) :: zz0_road ! road roughness length
195 REAL, DIMENSION(SIZE(PTA)) :: zw_can ! ver. wind in canyon
196 REAL, DIMENSION(SIZE(PTA)) :: zri ! Richardson number
197 REAL, DIMENSION(SIZE(PTA)) :: zle_max ! maximum latent heat flux available
198 REAL, DIMENSION(SIZE(PTA)) :: zle ! actual latent heat flux
199 REAL, DIMENSION(SIZE(PTA)) :: zra_roof ! aerodynamical resistance
200 REAL, DIMENSION(SIZE(PTA)) :: zch_roof ! drag coefficient for heat
201 REAL, DIMENSION(SIZE(PTA)) :: zra_top ! aerodynamical resistance
202 REAL, DIMENSION(SIZE(PTA)) :: zch_top ! drag coefficient for heat
203 REAL, DIMENSION(SIZE(PTA)) :: zra_road ! aerodynamical resistance
204 REAL, DIMENSION(SIZE(PTA)) :: zch_road ! drag coeifficient for heat
205 REAL, DIMENSION(SIZE(PTA)) :: zcd_road ! road surf. exchange coefficient
206 REAL, DIMENSION(SIZE(PTA)) :: zac ! town aerodynamical conductance (not used)
207 REAL, DIMENSION(SIZE(PTA)) :: zra ! town aerodynamical resistance (not used)
208 REAL, DIMENSION(SIZE(PTA)) :: zch ! town drag coefficient for heat (not used)
209 REAL, DIMENSION(SIZE(PTA)) :: zcd ! any surf. exchange coefficient (not used)
210 REAL, DIMENSION(SIZE(PTA)) :: zcdn ! any surf. neutral exch. coef. (not used)
211 !
212 REAL, DIMENSION(SIZE(PTA)) :: zu_star, zw_star !!
213 REAL, DIMENSION(SIZE(PTA)) :: zq0 !!
214 !
215 REAL, DIMENSION(SIZE(PTA)) :: zustar2 ! square of friction velocity (m2/s2
216 REAL, DIMENSION(SIZE(PTA)) :: zvmod ! module of the horizontal wind at t+1
217 !
218 ! for calculation of momentum fluxes
219 REAL, DIMENSION(SIZE(PTA)) :: zlmo ! Monin-Obukhov length
220 REAL, DIMENSION(SIZE(PTA)) :: zustar_road ! friction velocity for roads
221 REAL, DIMENSION(SIZE(PTA)) :: zustar_roof ! friction velocity for roofs
222 REAL, DIMENSION(SIZE(PTA)) :: zustar_town !
223 !
224 REAL, DIMENSION(SIZE(PTA)) :: zz0_top ! roughness length for zac_top calculation
225 REAL, DIMENSION(SIZE(PTA)) :: zchtcn_win ! natural convective heat transfer coef. for window [W/(m2.K)]
226 REAL, DIMENSION(SIZE(PTA)) :: zchtcn_roof ! natural convective heat transfer coef. for roof [W/(m2.K)]
227 REAL, DIMENSION(SIZE(PTA)) :: zchtcs_roof ! forced convective heat transfer coef. for smooth roof [W/(m2.K)]
228 REAL, DIMENSION(SIZE(PTA)) :: zchtcn_wall ! natural convective heat transfer coef. for wall [W/(m2.K)]
229 REAL, DIMENSION(SIZE(PTA)) :: zchtcs_wall ! forced natural convective heat transfer coef. for smooth wall [W/(m2.K)]
230 !
231 INTEGER :: jloop, jj !!
232 !
233 REAL :: zz0_o_z0h = 200. ! z0/z0h ratio used in Mascart (1995) formulation.
234 ! ! It is set to the maximum value acceptable by
235 ! ! formulation. Observed values are often larger in cities.
236 REAL(KIND=JPRB) :: zhook_handle
237 !-------------------------------------------------------------------------------
238 !
239 !
240 IF (lhook) CALL dr_hook('URBAN_DRAG',0,zhook_handle)
241 !
242 zz0_roof(:) = 0.15 ! z0 for roofs
243 zz0_road(:) = min(0.05,0.1*pz_lowcan(:))! z0 for roads
244 !
245 zz0_top(:) = pz0_town(:)
246 !
247 pcd(:) = xundef
248 pcdn(:) = xundef
249 pac_top(:) = xundef
250 pri(:) = xundef
251 !
252 puw_road(:) = xundef
253 puw_roof(:) = xundef
254 pduwdu_road(:) = xundef
255 pduwdu_roof(:) = xundef
256 pustar_town(:) = xundef
257 !
258 !-------------------------------------------------------------------------------
259 !
260 !* 1. roof and road saturation specific humidity
261 ! ------------------------------------------
262 !
263 pqsat_roof(:) = qsat(pts_roof(:), pps(:))
264 !
265 pqsat_road(:) = qsat(pts_road(:), pps(:))
266 !
267 !-------------------------------------------------------------------------------
268 !
269 !* 2. fraction of water on roofs
270 ! --------------------------
271 !
272 pdelt_roof=1.
273 !
274 !* 2.1 general case
275 ! ------------
276 !
277 WHERE (pqsat_roof(:) >= pqa(:) )
278  pdelt_roof(:) = (pws_roof(:)/pws_roof_max)**(2./3.)
279 END WHERE
280 !
281 !* 2.2 dew deposition on roofs (PDELT_ROOF=1)
282 ! -----------------------
283 !
284 !-------------------------------------------------------------------------------
285 !
286 !* 3. fraction of water on roads
287 ! --------------------------
288 !
289 pdelt_road=1.
290 !
291 !* 3.1 general case
292 ! ------------
293 !
294 WHERE (pqsat_road(:) >= pq_canyon(:) )
295  pdelt_road(:) = (pws_road(:)/pws_road_max)**(2./3.)
296 END WHERE
297 !
298 !* 3.2 dew deposition on roads (PDELT_ROAD=1)
299 ! -----------------------
300 !
301 !-------------------------------------------------------------------------------
302 !
303 !* 4. Drag coefficient for momentum between roof level and atmosphere
304 ! ---------------------------------------------------------------
305 !
306 !
307 DO jj=1,SIZE(pta)
308 !
309 !* 4.1 Averaged temperature at roof level
310 ! ----------------------------------
311 !
312  zts_town(jj) = pbld(jj) * pts_roof(jj) + (1.-pbld(jj)) * pt_canyon(jj)
313 !
314 !* 4.2 Averaged water fraction on roofs
315 ! -------------------------------
316 !
317  zavdelt_roof(jj) = pdelt_roof(jj) * pdelt_snow_roof(jj)
318 !
319 !* 4.3 Roof specific humidity
320 ! ----------------------
321 !
322  zq_roof(jj) = pqsat_roof(jj) * zavdelt_roof(jj)
323 !
324 !* 4.4 Averaged Saturation specific humidity
325 ! -------------------------------------
326 !
327  zq_town(jj) = pbld(jj) * zq_roof(jj) + (1.-pbld(jj)) * pq_canyon(jj)
328 !
329 ENDDO
330 !
331 !-------------------------------------------------------------------------------
332 !
333 !* 5. Momentum drag coefficient
334 ! -------------------------
335 !
336 IF (.NOT. ocanopy) THEN
337  CALL urban_exch_coef(hz0h, zz0_o_z0h, zts_town, zq_town, pexns, pexna, pta, pqa, &
338  pzref+ pbld_height/3.,puref+pbld_height/3.,pvmod,pz0_town, &
339  pri, pcd, pcdn, zac, zra, zch )
340 ENDIF
341 !
342 !-------------------------------------------------------------------------------
343 !
344 !* 6. Drag coefficient for heat fluxes between roofs and atmosphere
345 ! -------------------------------------------------------------
346 !
347 IF (hch_bem == "DOE-2") THEN
348  zchtcn_roof = chtc_up_doe(pts_roof, pta)
349  zchtcs_roof = chtc_smooth_wind_doe(zchtcn_roof, pvmod)
350  pac_roof = chtc_rough_doe(zchtcn_roof, zchtcs_roof, prough_roof) / prhoa / xcpd
351 ELSE
352  CALL urban_exch_coef(hz0h, zz0_o_z0h, pts_roof, zq_roof, pexns, pexna, pta, pqa, &
353  pzref, puref, pvmod, zz0_roof, &
354  zri, zcd, zcdn, pac_roof, zra_roof, zch_roof )
355 ENDIF
356 !
357 !
358 DO jj=1,SIZE(pta)
359  zle_max(jj) = pws_roof(jj) / ptstep * xlvtt
360  zle(jj) =(pqsat_roof(jj) - pqa(jj)) &
361  * pac_roof(jj) * pdelt_roof(jj) * xlvtt * prhoa(jj)
362 !
363  pac_roof_wat(jj) = pac_roof(jj)
364 !
365  IF (pdelt_roof(jj)==0.) pac_roof_wat(jj)=0.
366 !
367  IF (zle(jj)>0.) pac_roof_wat(jj) = pac_roof(jj) * min( 1. , zle_max(jj)/zle(jj) )
368 !
369 ENDDO
370 !-------------------------------------------------------------------------------
371 !
372 !* 7. Drag coefficient for heat fluxes between canyon and atmosphere
373 ! --------------------------------------------------------------
374 !
375 !* Because air/air exchanges are considered, roughness length for heat is set
376 ! equal to roughness length for momentum.
377 !
378 IF (.NOT. ocanopy) THEN
379  CALL urban_exch_coef('MASC95', 1., pt_canyon, pq_canyon, pexns, pexna, pta, pqa, &
380  pzref+pbld_height-pz_lowcan,puref+pbld_height-pz_lowcan, &
381  pvmod, zz0_top, &
382  zri, zcd, zcdn, pac_top, zra_top, zch_top )
383 ENDIF
384 !
385 !-------------------------------------------------------------------------------
386 !
387 !* 8. Drag coefficient for heat fluxes between walls, road and canyon
388 ! ---------------------------------------------------------------
389 !
390 !* 8.1 aerodynamical conductance for walls
391 ! -----------------------------------
392 !
393 IF (hch_bem == "DOE-2") THEN
394  DO jj=1,SIZE(pta)
395  zchtcn_wall(jj) = chtc_vert_doe(pts_wall(jj), pt_canyon(jj))
396  zchtcs_wall(jj) = 0.5 * (chtc_smooth_lee_doe(zchtcn_wall(jj), pu_canyon(jj)) + &
397  chtc_smooth_wind_doe(zchtcn_wall(jj), pu_canyon(jj)) )
398 
399  pac_wall(jj) = chtc_rough_doe(zchtcn_wall(jj), zchtcs_wall(jj), prough_wall(jj)) / xcpd / prhoa(jj)
400  END DO
401 ELSE
402  pac_wall(:) = ( 11.8 + 4.2 * pu_canyon(:) ) / xcpd / prhoa(:)
403 END IF
404 !
405 !* 8.2 aerodynamical conductance for roads
406 ! -----------------------------------
407 !
408 zw_star(:) = 0.
409 zq0(:) = 0.
410 !
411 !
412 DO jloop=1,3
413  !
414  zw_can(:) = zw_star(:)
415  !
416  !
417  CALL urban_exch_coef(hz0h, zz0_o_z0h, pts_road, pq_lowcan, pexns, pexna, &
418  pt_lowcan, pq_lowcan, &
419  pz_lowcan, pz_lowcan, pu_canyon+zw_can, zz0_road, &
420  zri, zcd_road, zcdn, pac_road, zra_road, zch_road )
421  !
422  DO jj=1,SIZE(pta)
423 
424  zq0(jj) = (pts_wall(jj) - pt_canyon(jj)) * pac_wall(jj) * pwall_o_grnd(jj)
425 
426  IF (proad(jj)+pgarden(jj) .GT. 0.) THEN
427  zq0(jj) = zq0(jj) &
428  +(pts_road(jj) - pt_lowcan(jj)) * pac_road(jj) * proad(jj)/(proad(jj)+pgarden(jj)) &
429  +(pts_garden(jj) - pt_lowcan(jj)) * pac_garden(jj) * pgarden(jj)/(proad(jj)+pgarden(jj))
430  ENDIF
431  !
432  IF (zq0(jj) >= 0.) THEN
433  zw_star(jj) = ( (xg * pexna(jj) / pta(jj)) * zq0(jj) * pbld_height(jj)) ** (1/3.)
434  ELSE
435  zw_star(jj) = 0.
436  ENDIF
437 !
438  ENDDO
439 !
440 END DO
441 !
442 !
443 !* 8.4 aerodynamical conductance for water limited by available water
444 ! --------------------------------------------------------------
445 !
446 DO jj=1,SIZE(pta)
447  !
448  zle_max(jj) = pws_road(jj) / ptstep * xlvtt
449  zle(jj) = ( pqsat_road(jj) - pq_lowcan(jj) ) &
450  * pac_road(jj) * pdelt_road(jj) * xlvtt * prhoa(jj)
451  !
452  pac_road_wat(jj) = pac_road(jj)
453  !
454  IF (pdelt_road(jj)==0.) pac_road_wat(jj) = 0.
455  !
456  IF (zle(jj)>0.) pac_road_wat(jj) = pac_road(jj) * min( 1. , zle_max(jj)/zle(jj) )
457  !
458  !
459  !* 8.5 aerodynamical conductance for window
460  ! ------------------------------------
461  !
462  zchtcn_win(jj) = chtc_vert_doe(pts_win(jj), pt_canyon(jj))
463  !
464  pac_win(jj) = 0.5 * (chtc_smooth_lee_doe(zchtcn_win(jj), pu_canyon(jj)) + &
465  chtc_smooth_wind_doe(zchtcn_win(jj), pu_canyon(jj)) ) &
466  / prhoa(jj) / xcpd
467  !
468  !-------------------------------------------------------------------------------
469  !
470  !* 9. Momentum fluxes
471  ! ---------------
472  !
473  !* 9.1 For roads
474  ! ---------
475  !
476  !* road friction
477  !
478  IF (ocanopy) THEN
479  !
480  zustar2(jj)=xundef
481  !
482  IF(himplicit_wind=='OLD')THEN
483  ! old implicitation
484  zustar2(jj) = (zcd_road(jj)*pu_lowcan(jj)*ppew_b_coef_lowcan(jj))/ &
485  (1.0-prhoa(jj)*zcd_road(jj)*pu_lowcan(jj)*ppew_a_coef_lowcan(jj))
486  ELSE
487  ! new implicitation
488  zustar2(jj) = (zcd_road(jj)*pu_lowcan(jj)*(2.*ppew_b_coef_lowcan(jj)-pu_lowcan(jj)))/ &
489  (1.0-2.0*prhoa(jj)*zcd_road(jj)*pu_lowcan(jj)*ppew_a_coef_lowcan(jj))
490  !
491  zvmod(jj) = prhoa(jj)*ppew_a_coef_lowcan(jj)*zustar2(jj) + ppew_b_coef_lowcan(jj)
492  zvmod(jj) = max(zvmod(jj),0.)
493  !
494  IF(ppew_a_coef_lowcan(jj)/= 0.)THEN
495  zustar2(jj) = max( ( zvmod(jj) - ppew_b_coef_lowcan(jj) ) / (prhoa(jj)*ppew_a_coef_lowcan(jj)), 0.)
496  ENDIF
497  !
498  ENDIF
499  !
500  puw_road(jj) = - zustar2(jj)
501  !
502  pduwdu_road(jj) = 0. ! implicitation already taken into account in PUW_ROAD
503  !
504  !* 9.2 For roofs
505  ! ---------
506  !
507  !* roof friction
508  !* neutral case, as guess
509  !
510  !
511  zustar_roof(jj) = pvmod(jj) * xkarman / log(pzref(jj)/zz0_roof(jj))
512  !
513  puw_roof(jj) = - zustar_roof(jj)**2
514  pduwdu_roof(jj) = 0.
515  IF (pvmod(jj)/=0.) pduwdu_roof(jj) = 2. * puw_roof(jj) / pvmod(jj)
516  !
517  ELSE
518  !
519  !* 9.3 For town
520  ! --------
521  !
522  zustar2(jj)=xundef
523  !
524  IF(himplicit_wind=='OLD')THEN
525  ! old implicitation
526  zustar2(jj) = (pcd(jj)*pvmod(jj)*ppew_b_coef(jj))/ &
527  (1.0-prhoa(jj)*pcd(jj)*pvmod(jj)*ppew_a_coef(jj))
528  ELSE
529  ! new implicitation
530  zustar2(jj) = (pcd(jj)*pvmod(jj)*(2.*ppew_b_coef(jj)-pvmod(jj)))/ &
531  (1.0-2.0*prhoa(jj)*pcd(jj)*pvmod(jj)*ppew_a_coef(jj))
532  !
533  zvmod(jj) = prhoa(jj)*ppew_a_coef(jj)*zustar2(jj) + ppew_b_coef(jj)
534  zvmod(jj) = max(zvmod(jj),0.)
535  !
536  IF(ppew_a_coef(jj)/= 0.)THEN
537  zustar2(jj) = max( ( zvmod(jj) - ppew_b_coef(jj) ) / (prhoa(jj)*ppew_a_coef(jj)), 0.)
538  ENDIF
539  !
540  ENDIF
541  !
542  pustar_town(jj) = sqrt(zustar2(jj))
543  !
544  ENDIF
545  !
546 ENDDO
547 !
548 IF (lhook) CALL dr_hook('URBAN_DRAG',1,zhook_handle)
549 !-------------------------------------------------------------------------------
550 !
551 END SUBROUTINE urban_drag
subroutine urban_drag(HZ0H, HIMPLICIT_WIND, PTSTEP, PT_CANYON, PQ_CANYON, PU_CANYON, PT_LOWCAN, PQ_LOWCAN, PU_LOWCAN, PZ_LOWCAN, PTS_ROOF, PTS_ROAD, PTS_WALL, PTS_GARDEN, PDELT_SNOW_ROOF, PDELT_SNOW_ROAD, PEXNS, PEXNA, PTA, PQA, PPS, PRHOA, PZREF, PUREF, PVMOD, PZ0_TOWN, PBLD, PGARDEN, PROAD, PBLD_HEIGHT, PCAN_HW_RATIO, PWALL_O_GRND, PWS_ROOF, PWS_ROAD, PWS_ROOF_MAX, PWS_ROAD_MAX, PPEW_A_COEF, PPEW_B_COEF, PPEW_A_COEF_LOWCAN, PPEW_B_COEF_LOWCAN, PQSAT_ROOF, PQSAT_ROAD, PDELT_ROOF, PDELT_ROAD, PCD, PCDN, PAC_ROOF, PAC_ROOF_WAT, PAC_WALL, PAC_ROAD, PAC_ROAD_WAT, PAC_TOP, PAC_GARDEN, PRI, PUW_ROAD, PUW_ROOF, PDUWDU_ROAD, PDUWDU_ROOF, PUSTAR_TOWN, OCANOPY, PTS_WIN, PAC_WIN, HCH_BEM, PROUGH_ROOF, PROUGH_WALL)
Definition: urban_drag.F90:6
subroutine urban_exch_coef(HZ0H, PZ0_O_Z0H, PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PVMOD, PZ0, PRI, PCD, PCDN, PAC, PRA, PCH)