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, &
14 pbld, pgarden, proad, &
15 pbld_height, pcan_hw_ratio, &
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, &
25 puw_road, puw_roof, pduwdu_road, pduwdu_roof, &
26 pustar_town, ocanopy, pts_win, pac_win, hch_bem, &
27 prough_roof, prough_wall )
83 USE modd_csts,ONLY : xlvtt, xpi, xcpd, xg, xkarman
87 USE modi_urban_exch_coef
90 USE yomhook
,ONLY : lhook, dr_hook
91 USE parkind1
,ONLY : jprb
98 CHARACTER(LEN=6),
INTENT(IN) :: hz0h
100 CHARACTER(LEN=*),
INTENT(IN) :: himplicit_wind
104 REAL,
INTENT(IN) :: ptstep
105 REAL,
DIMENSION(:),
INTENT(IN) :: pt_canyon
106 REAL,
DIMENSION(:),
INTENT(IN) :: pq_canyon
107 REAL,
DIMENSION(:),
INTENT(IN) :: pu_canyon
108 REAL,
DIMENSION(:),
INTENT(IN) :: pu_lowcan
109 REAL,
DIMENSION(:),
INTENT(IN) :: pt_lowcan
110 REAL,
DIMENSION(:),
INTENT(IN) :: pq_lowcan
111 REAL,
DIMENSION(:),
INTENT(IN) :: pz_lowcan
112 REAL,
DIMENSION(:),
INTENT(IN) :: pts_roof
113 REAL,
DIMENSION(:),
INTENT(IN) :: pts_road
114 REAL,
DIMENSION(:),
INTENT(IN) :: pts_wall
115 REAL,
DIMENSION(:),
INTENT(IN) :: pts_garden
116 REAL,
DIMENSION(:),
INTENT(IN) :: pdelt_snow_roof
117 REAL,
DIMENSION(:),
INTENT(IN) :: pdelt_snow_road
118 REAL,
DIMENSION(:),
INTENT(IN) :: pexns
119 REAL,
DIMENSION(:),
INTENT(IN) :: pta
120 REAL,
DIMENSION(:),
INTENT(IN) :: pqa
122 REAL,
DIMENSION(:),
INTENT(IN) :: pvmod
123 REAL,
DIMENSION(:),
INTENT(IN) :: pps
124 REAL,
DIMENSION(:),
INTENT(IN) :: pexna
126 REAL,
DIMENSION(:),
INTENT(IN) :: prhoa
127 REAL,
DIMENSION(:),
INTENT(IN) :: pzref
129 REAL,
DIMENSION(:),
INTENT(IN) :: puref
131 REAL,
DIMENSION(:),
INTENT(IN) :: pz0_town
132 REAL,
DIMENSION(:),
INTENT(IN) :: pbld
133 REAL,
DIMENSION(:),
INTENT(IN) :: proad
134 REAL,
DIMENSION(:),
INTENT(IN) :: pgarden
135 REAL,
DIMENSION(:),
INTENT(IN) :: pbld_height
136 REAL,
DIMENSION(:),
INTENT(IN) :: pcan_hw_ratio
137 REAL,
DIMENSION(:),
INTENT(IN) :: pwall_o_grnd
139 REAL,
DIMENSION(:),
INTENT(IN) :: pws_roof
140 REAL,
DIMENSION(:),
INTENT(IN) :: pws_road
141 REAL,
DIMENSION(:),
INTENT(IN) :: pws_roof_max
142 REAL,
DIMENSION(:),
INTENT(IN) :: pws_road_max
145 REAL,
DIMENSION(:),
INTENT(IN) :: ppew_a_coef
146 REAL,
DIMENSION(:),
INTENT(IN) :: ppew_b_coef
147 REAL,
DIMENSION(:),
INTENT(IN) :: ppew_a_coef_lowcan
148 REAL,
DIMENSION(:),
INTENT(IN) :: ppew_b_coef_lowcan
150 REAL,
DIMENSION(:),
INTENT(OUT) :: pqsat_roof
151 REAL,
DIMENSION(:),
INTENT(OUT) :: pqsat_road
152 REAL,
DIMENSION(:),
INTENT(OUT) :: pdelt_roof
153 REAL,
DIMENSION(:),
INTENT(OUT) :: pdelt_road
154 REAL,
DIMENSION(:),
INTENT(OUT) :: pcd
155 REAL,
DIMENSION(:),
INTENT(OUT) :: pcdn
156 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_roof
157 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_roof_wat
158 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_wall
161 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_road
164 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_road_wat
167 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_top
169 REAL,
DIMENSION(:),
INTENT(IN) :: pac_garden
171 REAL,
DIMENSION(:),
INTENT(OUT) :: pri
173 REAL,
DIMENSION(:),
INTENT(OUT) :: puw_road
174 REAL,
DIMENSION(:),
INTENT(OUT) :: puw_roof
175 REAL,
DIMENSION(:),
INTENT(OUT) :: pduwdu_road
176 REAL,
DIMENSION(:),
INTENT(OUT) :: pduwdu_roof
177 REAL,
DIMENSION(:),
INTENT(OUT) :: pustar_town
179 LOGICAL,
INTENT(IN) :: ocanopy
180 REAL,
DIMENSION(:),
INTENT(OUT) :: pac_win
181 REAL,
DIMENSION(:),
INTENT(IN) :: pts_win
182 CHARACTER(LEN=5),
INTENT(IN) :: hch_bem
183 REAL,
DIMENSION(:),
INTENT(IN) :: prough_roof
184 REAL,
DIMENSION(:),
INTENT(IN) :: prough_wall
189 REAL,
DIMENSION(SIZE(PTA)) :: zts_town
190 REAL,
DIMENSION(SIZE(PTA)) :: zq_town
191 REAL,
DIMENSION(SIZE(PTA)) :: zavdelt_roof
192 REAL,
DIMENSION(SIZE(PTA)) :: zq_roof
193 REAL,
DIMENSION(SIZE(PTA)) :: zz0_roof
194 REAL,
DIMENSION(SIZE(PTA)) :: zz0_road
195 REAL,
DIMENSION(SIZE(PTA)) :: zw_can
196 REAL,
DIMENSION(SIZE(PTA)) :: zri
197 REAL,
DIMENSION(SIZE(PTA)) :: zle_max
198 REAL,
DIMENSION(SIZE(PTA)) :: zle
199 REAL,
DIMENSION(SIZE(PTA)) :: zra_roof
200 REAL,
DIMENSION(SIZE(PTA)) :: zch_roof
201 REAL,
DIMENSION(SIZE(PTA)) :: zra_top
202 REAL,
DIMENSION(SIZE(PTA)) :: zch_top
203 REAL,
DIMENSION(SIZE(PTA)) :: zra_road
204 REAL,
DIMENSION(SIZE(PTA)) :: zch_road
205 REAL,
DIMENSION(SIZE(PTA)) :: zcd_road
206 REAL,
DIMENSION(SIZE(PTA)) :: zac
207 REAL,
DIMENSION(SIZE(PTA)) :: zra
208 REAL,
DIMENSION(SIZE(PTA)) :: zch
209 REAL,
DIMENSION(SIZE(PTA)) :: zcd
210 REAL,
DIMENSION(SIZE(PTA)) :: zcdn
212 REAL,
DIMENSION(SIZE(PTA)) :: zu_star, zw_star
213 REAL,
DIMENSION(SIZE(PTA)) :: zq0
215 REAL,
DIMENSION(SIZE(PTA)) :: zustar2
216 REAL,
DIMENSION(SIZE(PTA)) :: zvmod
219 REAL,
DIMENSION(SIZE(PTA)) :: zlmo
220 REAL,
DIMENSION(SIZE(PTA)) :: zustar_road
221 REAL,
DIMENSION(SIZE(PTA)) :: zustar_roof
222 REAL,
DIMENSION(SIZE(PTA)) :: zustar_town
224 REAL,
DIMENSION(SIZE(PTA)) :: zz0_top
225 REAL,
DIMENSION(SIZE(PTA)) :: zchtcn_win
226 REAL,
DIMENSION(SIZE(PTA)) :: zchtcn_roof
227 REAL,
DIMENSION(SIZE(PTA)) :: zchtcs_roof
228 REAL,
DIMENSION(SIZE(PTA)) :: zchtcn_wall
229 REAL,
DIMENSION(SIZE(PTA)) :: zchtcs_wall
233 REAL :: zz0_o_z0h = 200.
236 REAL(KIND=JPRB) :: zhook_handle
240 IF (lhook) CALL dr_hook(
'URBAN_DRAG',0,zhook_handle)
243 zz0_road(:) = min(0.05,0.1*pz_lowcan(:))
245 zz0_top(:) = pz0_town(:)
254 pduwdu_road(:) = xundef
255 pduwdu_roof(:) = xundef
256 pustar_town(:) = xundef
263 pqsat_roof(:) =
qsat(pts_roof(:), pps(:))
265 pqsat_road(:) =
qsat(pts_road(:), pps(:))
277 WHERE (pqsat_roof(:) >= pqa(:) )
278 pdelt_roof(:) = (pws_roof(:)/pws_roof_max)**(2./3.)
294 WHERE (pqsat_road(:) >= pq_canyon(:) )
295 pdelt_road(:) = (pws_road(:)/pws_road_max)**(2./3.)
312 zts_town(jj) = pbld(jj) * pts_roof(jj) + (1.-pbld(jj)) * pt_canyon(jj)
317 zavdelt_roof(jj) = pdelt_roof(jj) * pdelt_snow_roof(jj)
322 zq_roof(jj) = pqsat_roof(jj) * zavdelt_roof(jj)
327 zq_town(jj) = pbld(jj) * zq_roof(jj) + (1.-pbld(jj)) * pq_canyon(jj)
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 )
347 IF (hch_bem ==
"DOE-2")
THEN
350 pac_roof =
chtc_rough_doe(zchtcn_roof, zchtcs_roof, prough_roof) / prhoa / xcpd
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 )
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)
363 pac_roof_wat(jj) = pac_roof(jj)
365 IF (pdelt_roof(jj)==0.) pac_roof_wat(jj)=0.
367 IF (zle(jj)>0.) pac_roof_wat(jj) = pac_roof(jj) * min( 1. , zle_max(jj)/zle(jj) )
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, &
382 zri, zcd, zcdn, pac_top, zra_top, zch_top )
393 IF (hch_bem ==
"DOE-2")
THEN
399 pac_wall(jj) =
chtc_rough_doe(zchtcn_wall(jj), zchtcs_wall(jj), prough_wall(jj)) / xcpd / prhoa(jj)
402 pac_wall(:) = ( 11.8 + 4.2 * pu_canyon(:) ) / xcpd / prhoa(:)
414 zw_can(:) = zw_star(:)
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 )
424 zq0(jj) = (pts_wall(jj) - pt_canyon(jj)) * pac_wall(jj) * pwall_o_grnd(jj)
426 IF (proad(jj)+pgarden(jj) .GT. 0.)
THEN
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))
432 IF (zq0(jj) >= 0.)
THEN
433 zw_star(jj) = ( (xg * pexna(jj) / pta(jj)) * zq0(jj) * pbld_height(jj)) ** (1/3.)
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)
452 pac_road_wat(jj) = pac_road(jj)
454 IF (pdelt_road(jj)==0.) pac_road_wat(jj) = 0.
456 IF (zle(jj)>0.) pac_road_wat(jj) = pac_road(jj) * min( 1. , zle_max(jj)/zle(jj) )
482 IF(himplicit_wind==
'OLD')
THEN
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))
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))
491 zvmod(jj) = prhoa(jj)*ppew_a_coef_lowcan(jj)*zustar2(jj) + ppew_b_coef_lowcan(jj)
492 zvmod(jj) = max(zvmod(jj),0.)
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.)
500 puw_road(jj) = - zustar2(jj)
511 zustar_roof(jj) = pvmod(jj) * xkarman / log(pzref(jj)/zz0_roof(jj))
513 puw_roof(jj) = - zustar_roof(jj)**2
515 IF (pvmod(jj)/=0.) pduwdu_roof(jj) = 2. * puw_roof(jj) / pvmod(jj)
524 IF(himplicit_wind==
'OLD')
THEN
526 zustar2(jj) = (pcd(jj)*pvmod(jj)*ppew_b_coef(jj))/ &
527 (1.0-prhoa(jj)*pcd(jj)*pvmod(jj)*ppew_a_coef(jj))
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))
533 zvmod(jj) = prhoa(jj)*ppew_a_coef(jj)*zustar2(jj) + ppew_b_coef(jj)
534 zvmod(jj) = max(zvmod(jj),0.)
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.)
542 pustar_town(jj) = sqrt(zustar2(jj))
548 IF (lhook) CALL dr_hook(
'URBAN_DRAG',1,zhook_handle)
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)
subroutine urban_exch_coef(HZ0H, PZ0_O_Z0H, PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PVMOD, PZ0, PRI, PCD, PCDN, PAC, PRA, PCH)