6 SUBROUTINE urban_drag(TOP, T, B, HIMPLICIT_WIND, PTSTEP, PT_CANYON, PQ_CANYON, &
7 PU_CANYON, PT_LOWCAN, PQ_LOWCAN, PU_LOWCAN, PZ_LOWCAN, &
8 PTS_ROOF, PTS_ROAD, PTS_WALL, PTS_GARDEN, &
9 PDELT_SNOW_ROOF, PDELT_SNOW_ROAD, PEXNS, PEXNA, PTA, &
10 PQA, PPS, PRHOA,PZREF, PUREF, PVMOD, PWS_ROOF_MAX, &
11 PWS_ROAD_MAX, PPEW_A_COEF, PPEW_B_COEF, &
12 PPEW_A_COEF_LOWCAN, PPEW_B_COEF_LOWCAN, PQSAT_ROOF, &
13 PQSAT_ROAD, PDELT_ROOF, PDELT_ROAD, PCD, PCDN, PAC_ROOF, &
14 PAC_ROOF_WAT, PAC_WALL, PAC_ROAD, PAC_ROAD_WAT, PAC_TOP, &
15 PAC_GARDEN, PRI, PUW_ROAD, PUW_ROOF, PDUWDU_ROAD, &
16 PDUWDU_ROOF, PUSTAR_TOWN, PAC_WIN )
80 USE modi_urban_exch_coef
91 TYPE(
teb_t),
INTENT(INOUT) :: T
92 TYPE(
bem_t),
INTENT(INOUT) :: B
94 CHARACTER(LEN=*),
INTENT(IN) :: HIMPLICIT_WIND
98 REAL,
INTENT(IN) :: PTSTEP
99 REAL,
DIMENSION(:),
INTENT(IN) :: PT_CANYON
100 REAL,
DIMENSION(:),
INTENT(IN) :: PQ_CANYON
101 REAL,
DIMENSION(:),
INTENT(IN) :: PU_CANYON
102 REAL,
DIMENSION(:),
INTENT(IN) :: PU_LOWCAN
103 REAL,
DIMENSION(:),
INTENT(IN) :: PT_LOWCAN
104 REAL,
DIMENSION(:),
INTENT(IN) :: PQ_LOWCAN
105 REAL,
DIMENSION(:),
INTENT(IN) :: PZ_LOWCAN
106 REAL,
DIMENSION(:),
INTENT(IN) :: PTS_ROOF
107 REAL,
DIMENSION(:),
INTENT(IN) :: PTS_ROAD
108 REAL,
DIMENSION(:),
INTENT(IN) :: PTS_WALL
109 REAL,
DIMENSION(:),
INTENT(IN) :: PTS_GARDEN
110 REAL,
DIMENSION(:),
INTENT(IN) :: PDELT_SNOW_ROOF
111 REAL,
DIMENSION(:),
INTENT(IN) :: PDELT_SNOW_ROAD
112 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNS
113 REAL,
DIMENSION(:),
INTENT(IN) :: PTA
114 REAL,
DIMENSION(:),
INTENT(IN) :: PQA
116 REAL,
DIMENSION(:),
INTENT(IN) :: PVMOD
117 REAL,
DIMENSION(:),
INTENT(IN) :: PPS
118 REAL,
DIMENSION(:),
INTENT(IN) :: PEXNA
120 REAL,
DIMENSION(:),
INTENT(IN) :: PRHOA
121 REAL,
DIMENSION(:),
INTENT(IN) :: PZREF
123 REAL,
DIMENSION(:),
INTENT(IN) :: PUREF
125 REAL,
DIMENSION(:),
INTENT(IN) :: PWS_ROOF_MAX
126 REAL,
DIMENSION(:),
INTENT(IN) :: PWS_ROAD_MAX
127 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_A_COEF
128 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_B_COEF
129 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_A_COEF_LOWCAN
130 REAL,
DIMENSION(:),
INTENT(IN) :: PPEW_B_COEF_LOWCAN
132 REAL,
DIMENSION(:),
INTENT(OUT) :: PQSAT_ROOF
133 REAL,
DIMENSION(:),
INTENT(OUT) :: PQSAT_ROAD
134 REAL,
DIMENSION(:),
INTENT(OUT) :: PDELT_ROOF
135 REAL,
DIMENSION(:),
INTENT(OUT) :: PDELT_ROAD
136 REAL,
DIMENSION(:),
INTENT(OUT) :: PCD
137 REAL,
DIMENSION(:),
INTENT(OUT) :: PCDN
138 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_ROOF
139 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_ROOF_WAT
140 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_WALL
143 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_ROAD
146 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_ROAD_WAT
149 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_TOP
151 REAL,
DIMENSION(:),
INTENT(IN) :: PAC_GARDEN
153 REAL,
DIMENSION(:),
INTENT(OUT) :: PRI
155 REAL,
DIMENSION(:),
INTENT(OUT) :: PUW_ROAD
156 REAL,
DIMENSION(:),
INTENT(OUT) :: PUW_ROOF
157 REAL,
DIMENSION(:),
INTENT(OUT) :: PDUWDU_ROAD
158 REAL,
DIMENSION(:),
INTENT(OUT) :: PDUWDU_ROOF
159 REAL,
DIMENSION(:),
INTENT(OUT) :: PUSTAR_TOWN
161 REAL,
DIMENSION(:),
INTENT(OUT) :: PAC_WIN
166 REAL,
DIMENSION(SIZE(PTA)) :: ZTS_TOWN
167 REAL,
DIMENSION(SIZE(PTA)) :: ZQ_TOWN
168 REAL,
DIMENSION(SIZE(PTA)) :: ZAVDELT_ROOF
169 REAL,
DIMENSION(SIZE(PTA)) :: ZQ_ROOF
170 REAL,
DIMENSION(SIZE(PTA)) :: ZZ0_ROOF
171 REAL,
DIMENSION(SIZE(PTA)) :: ZZ0_ROAD
172 REAL,
DIMENSION(SIZE(PTA)) :: ZW_CAN
173 REAL,
DIMENSION(SIZE(PTA)) :: ZRI
174 REAL,
DIMENSION(SIZE(PTA)) :: ZLE_MAX
175 REAL,
DIMENSION(SIZE(PTA)) :: ZLE
176 REAL,
DIMENSION(SIZE(PTA)) :: ZRA_ROOF
177 REAL,
DIMENSION(SIZE(PTA)) :: ZCH_ROOF
178 REAL,
DIMENSION(SIZE(PTA)) :: ZRA_TOP
179 REAL,
DIMENSION(SIZE(PTA)) :: ZCH_TOP
180 REAL,
DIMENSION(SIZE(PTA)) :: ZRA_ROAD
181 REAL,
DIMENSION(SIZE(PTA)) :: ZCH_ROAD
182 REAL,
DIMENSION(SIZE(PTA)) :: ZCD_ROAD
183 REAL,
DIMENSION(SIZE(PTA)) :: ZAC
184 REAL,
DIMENSION(SIZE(PTA)) :: ZRA
185 REAL,
DIMENSION(SIZE(PTA)) :: ZCH
186 REAL,
DIMENSION(SIZE(PTA)) :: ZCD
187 REAL,
DIMENSION(SIZE(PTA)) :: ZCDN
189 REAL,
DIMENSION(SIZE(PTA)) :: ZU_STAR, ZW_STAR
190 REAL,
DIMENSION(SIZE(PTA)) :: ZQ0
192 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR2
193 REAL,
DIMENSION(SIZE(PTA)) :: ZVMOD
196 REAL,
DIMENSION(SIZE(PTA)) :: ZLMO
197 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR_ROAD
198 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR_ROOF
199 REAL,
DIMENSION(SIZE(PTA)) :: ZUSTAR_TOWN
201 REAL,
DIMENSION(SIZE(PTA)) :: ZZ0_TOP
202 REAL,
DIMENSION(SIZE(PTA)) :: ZCHTCN_WIN
203 REAL,
DIMENSION(SIZE(PTA)) :: ZCHTCN_ROOF
204 REAL,
DIMENSION(SIZE(PTA)) :: ZCHTCS_ROOF
205 REAL,
DIMENSION(SIZE(PTA)) :: ZCHTCN_WALL
206 REAL,
DIMENSION(SIZE(PTA)) :: ZCHTCS_WALL
210 REAL :: ZZ0_O_Z0H = 200.
213 REAL(KIND=JPRB) :: ZHOOK_HANDLE
220 zz0_road(:) = min(0.05,0.1*pz_lowcan(:))
222 zz0_top(:) = t%XZ0_TOWN(:)
240 pqsat_roof(:) =
qsat(pts_roof(:), pps(:))
242 pqsat_road(:) =
qsat(pts_road(:), pps(:))
254 WHERE (pqsat_roof(:) >= pqa(:) )
255 pdelt_roof(:) = (t%XWS_ROOF(:)/pws_roof_max)**(2./3.)
271 WHERE (pqsat_road(:) >= pq_canyon(:) )
272 pdelt_road(:) = (t%XWS_ROAD(:)/pws_road_max)**(2./3.)
289 zts_town(jj) = t%XBLD(jj) * pts_roof(jj) + (1.-t%XBLD(jj)) * pt_canyon(jj)
294 zavdelt_roof(jj) = pdelt_roof(jj) * pdelt_snow_roof(jj)
299 zq_roof(jj) = pqsat_roof(jj) * zavdelt_roof(jj)
304 zq_town(jj) = t%XBLD(jj) * zq_roof(jj) + (1.-t%XBLD(jj)) * pq_canyon(jj)
313 IF (.NOT. top%LCANOPY)
THEN 314 CALL urban_exch_coef(top%CZ0H, zz0_o_z0h, zts_town, zq_town, pexns, pexna, pta, pqa, &
315 pzref+ t%XBLD_HEIGHT/3., puref+t%XBLD_HEIGHT/3., pvmod, t%XZ0_TOWN, &
316 pri, pcd, pcdn, zac, zra, zch )
324 IF (top%CCH_BEM ==
"DOE-2")
THEN 329 CALL urban_exch_coef(top%CZ0H, zz0_o_z0h, pts_roof, zq_roof, pexns, pexna, pta, pqa, &
330 pzref, puref, pvmod, zz0_roof, zri, zcd, zcdn, pac_roof, &
336 zle_max(jj) = t%XWS_ROOF(jj) / ptstep *
xlvtt 337 zle(jj) =(pqsat_roof(jj) - pqa(jj)) &
338 * pac_roof(jj) * pdelt_roof(jj) *
xlvtt * prhoa(jj)
340 pac_roof_wat(jj) = pac_roof(jj)
342 IF (pdelt_roof(jj)==0.) pac_roof_wat(jj)=0.
344 IF (zle(jj)>0.) pac_roof_wat(jj) = pac_roof(jj) * min( 1. , zle_max(jj)/zle(jj) )
355 IF (.NOT. top%LCANOPY)
THEN 356 CALL urban_exch_coef(
'MASC95', 1., pt_canyon, pq_canyon, pexns, pexna, pta, pqa, &
357 pzref+t%XBLD_HEIGHT-pz_lowcan, puref+t%XBLD_HEIGHT-pz_lowcan, &
358 pvmod, zz0_top, zri, zcd, zcdn, pac_top, zra_top, zch_top )
369 IF (top%CCH_BEM ==
"DOE-2")
THEN 375 pac_wall(jj) =
chtc_rough_doe(zchtcn_wall(jj), zchtcs_wall(jj), t%XROUGH_WALL(jj)) /
xcpd / prhoa(jj)
378 pac_wall(:) = ( 11.8 + 4.2 * pu_canyon(:) ) /
xcpd / prhoa(:)
390 zw_can(:) = zw_star(:)
393 CALL urban_exch_coef(top%CZ0H, zz0_o_z0h, pts_road, pq_lowcan, pexns, pexna, &
394 pt_lowcan, pq_lowcan, pz_lowcan, pz_lowcan, &
395 pu_lowcan+zw_can, zz0_road, zri, zcd_road, zcdn, &
396 pac_road, zra_road, zch_road )
400 zq0(jj) = (pts_wall(jj) - pt_canyon(jj)) * pac_wall(jj) * t%XWALL_O_GRND(jj)
402 IF (t%XROAD(jj) .GT. 0.)
THEN 404 + (pts_road(jj) - pt_lowcan(jj)) * pac_road(jj) * t%XROAD (jj)/(t%XROAD(jj)+t%XGARDEN(jj))
406 IF (t%XGARDEN(jj) .GT. 0.)
THEN 408 + (pts_garden(jj) - pt_lowcan(jj)) * pac_garden(jj) * t%XGARDEN(jj)/(t%XROAD(jj)+t%XGARDEN(jj))
411 IF (zq0(jj) >= 0.)
THEN 412 zw_star(jj) = ( (
xg * pexna(jj) / pta(jj)) * zq0(jj) * t%XBLD_HEIGHT(jj)) ** (1/3.)
427 zle_max(jj) = t%XWS_ROAD(jj) / ptstep *
xlvtt 428 zle(jj) = ( pqsat_road(jj) - pq_lowcan(jj) ) &
429 * pac_road(jj) * pdelt_road(jj) *
xlvtt * prhoa(jj)
431 pac_road_wat(jj) = pac_road(jj)
433 IF (pdelt_road(jj)==0.) pac_road_wat(jj) = 0.
435 IF (zle(jj)>0.) pac_road_wat(jj) = pac_road(jj) * min( 1. , zle_max(jj)/zle(jj) )
457 IF (top%LCANOPY)
THEN 461 IF(himplicit_wind==
'OLD')
THEN 463 zustar2(jj) = (zcd_road(jj)*pu_lowcan(jj)*ppew_b_coef_lowcan(jj))/ &
464 (1.0-prhoa(jj)*zcd_road(jj)*pu_lowcan(jj)*ppew_a_coef_lowcan(jj))
467 zustar2(jj) = (zcd_road(jj)*pu_lowcan(jj)*(2.*ppew_b_coef_lowcan(jj)-pu_lowcan(jj)))/ &
468 (1.0-2.0*prhoa(jj)*zcd_road(jj)*pu_lowcan(jj)*ppew_a_coef_lowcan(jj))
470 zvmod(jj) = prhoa(jj)*ppew_a_coef_lowcan(jj)*zustar2(jj) + ppew_b_coef_lowcan(jj)
471 zvmod(jj) = max(zvmod(jj),0.)
473 IF(ppew_a_coef_lowcan(jj)/= 0.)
THEN 474 zustar2(jj) = max( ( zvmod(jj) - ppew_b_coef_lowcan(jj) ) / (prhoa(jj)*ppew_a_coef_lowcan(jj)), 0.)
479 puw_road(jj) = - zustar2(jj)
490 zustar_roof(jj) = pvmod(jj) *
xkarman / log(pzref(jj)/zz0_roof(jj))
492 puw_roof(jj) = - zustar_roof(jj)**2
494 IF (pvmod(jj)/=0.) pduwdu_roof(jj) = 2. * puw_roof(jj) / pvmod(jj)
503 IF(himplicit_wind==
'OLD')
THEN 505 zustar2(jj) = (pcd(jj)*pvmod(jj)*ppew_b_coef(jj))/ &
506 (1.0-prhoa(jj)*pcd(jj)*pvmod(jj)*ppew_a_coef(jj))
509 zustar2(jj) = (pcd(jj)*pvmod(jj)*(2.*ppew_b_coef(jj)-pvmod(jj)))/ &
510 (1.0-2.0*prhoa(jj)*pcd(jj)*pvmod(jj)*ppew_a_coef(jj))
512 zvmod(jj) = prhoa(jj)*ppew_a_coef(jj)*zustar2(jj) + ppew_b_coef(jj)
513 zvmod(jj) = max(zvmod(jj),0.)
515 IF(ppew_a_coef(jj)/= 0.)
THEN 516 zustar2(jj) = max( ( zvmod(jj) - ppew_b_coef(jj) ) / (prhoa(jj)*ppew_a_coef(jj)), 0.)
521 pustar_town(jj) = sqrt(zustar2(jj))
subroutine urban_drag(TOP, T, B, 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, 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, PAC_WIN)
subroutine urban_exch_coef(HZ0H, PZ0_O_Z0H, PTG, PQS, PEXNS, PEXNA, PTA, PQA, PZREF, PUREF, PVMOD, PZ0, PRI, PCD, PCDN, PAC, PRA, PCH)