SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE URBAN_DRAG(HZ0H, HIMPLICIT_WIND, PTSTEP, & 00003 PT_CANYON, PQ_CANYON, PU_CANYON, & 00004 PT_LOWCAN, PQ_LOWCAN, PU_LOWCAN, PZ_LOWCAN, & 00005 PTS_ROOF, PTS_ROAD, PTS_WALL, PTS_GARDEN, & 00006 PDELT_SNOW_ROOF, PDELT_SNOW_ROAD, & 00007 PEXNS, PEXNA, PTA, PQA, PPS, PRHOA, & 00008 PZREF, PUREF, PVMOD, & 00009 PZ0_TOWN, & 00010 PBLD, PGARDEN, PROAD, & 00011 PBLD_HEIGHT, PCAN_HW_RATIO, & 00012 PWALL_O_GRND, & 00013 PWS_ROOF, PWS_ROAD, & 00014 PWS_ROOF_MAX, PWS_ROAD_MAX, & 00015 PPEW_A_COEF, PPEW_B_COEF, & 00016 PPEW_A_COEF_LOWCAN, PPEW_B_COEF_LOWCAN, & 00017 PQSAT_ROOF, PQSAT_ROAD, PDELT_ROOF, PDELT_ROAD, & 00018 PCD, PCDN, PAC_ROOF, PAC_ROOF_WAT, & 00019 PAC_WALL, PAC_ROAD, PAC_ROAD_WAT, PAC_TOP, & 00020 PAC_GARDEN, PRI, & 00021 PUW_ROAD, PUW_ROOF, PDUWDU_ROAD, PDUWDU_ROOF, & 00022 PUSTAR_TOWN, OCANOPY, PTS_WIN, PAC_WIN, HCH_BEM, & 00023 PROUGH_ROOF, PROUGH_WALL ) 00024 ! ########################################################################## 00025 ! 00026 !!**** *URBAN_DRAG* 00027 !! 00028 !! PURPOSE 00029 !! ------- 00030 ! 00031 ! Computes the surface drag over artificial surfaces as towns, 00032 ! taking into account the canyon like geometry of urbanized areas. 00033 ! 00034 ! 00035 !!** METHOD 00036 !! ------ 00037 ! 00038 ! 00039 ! 00040 ! 00041 !! EXTERNAL 00042 !! -------- 00043 !! 00044 !! 00045 !! IMPLICIT ARGUMENTS 00046 !! ------------------ 00047 !! 00048 !! 00049 !! REFERENCE 00050 !! --------- 00051 !! 00052 !! 00053 !! AUTHOR 00054 !! ------ 00055 !! 00056 !! V. Masson * Meteo-France * 00057 !! 00058 !! MODIFICATIONS 00059 !! ------------- 00060 !! Original 20/01/98 00061 !! 01/00 (V. Masson) separation of skimming, wake and isolated flows 00062 !! 09/00 (V. Masson) use of Z0 for roads 00063 !! 12/02 (A. Lemonsu) convective speed w* in canyon 00064 ! 04 (A. Lemonsu) z0h=z0m for resistance canyon-atmosphere 00065 ! 03/08 (S. Leroyer) debug PU_CAN (1. * H/3) 00066 ! 12/08 (S. Leroyer) option (HZ0H) for z0h applied on roof, road and town 00067 !! 09/12 B. Decharme new wind implicitation 00068 ! 11/11 (G. Pigeon) apply only urban_exch_coef when necessary if 00069 ! canopy/no canopy 00070 ! 09/12 (G. Pigeon) add new formulation for outdoor conv. coef for 00071 ! wall/roof/window 00072 !! 00073 !------------------------------------------------------------------------------- 00074 ! 00075 !* 0. DECLARATIONS 00076 ! ------------ 00077 ! 00078 USE MODD_SURF_PAR, ONLY : XUNDEF 00079 USE MODD_CSTS,ONLY : XLVTT, XPI, XCPD, XG, XKARMAN 00080 ! 00081 !USE MODE_SBLS 00082 USE MODE_THERMOS 00083 USE MODI_URBAN_EXCH_COEF 00084 USE MODE_CONV_DOE 00085 ! 00086 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00087 USE PARKIND1 ,ONLY : JPRB 00088 ! 00089 IMPLICIT NONE 00090 ! 00091 !* 0.1 declarations of arguments 00092 ! 00093 ! 00094 CHARACTER(LEN=6), INTENT(IN) :: HZ0H ! TEB option for z0h roof & road 00095 ! 00096 CHARACTER(LEN=*), INTENT(IN) :: HIMPLICIT_WIND ! wind implicitation option 00097 ! ! 'OLD' = direct 00098 ! ! 'NEW' = Taylor serie, order 1 00099 ! 00100 REAL, INTENT(IN) :: PTSTEP ! time-step 00101 REAL, DIMENSION(:), INTENT(IN) :: PT_CANYON ! canyon air temperature 00102 REAL, DIMENSION(:), INTENT(IN) :: PQ_CANYON ! canyon air specific humidity. 00103 REAL, DIMENSION(:), INTENT(IN) :: PU_CANYON ! hor. wind in canyon 00104 REAL, DIMENSION(:), INTENT(IN) :: PU_LOWCAN ! wind near the road 00105 REAL, DIMENSION(:), INTENT(IN) :: PT_LOWCAN ! temp. near the road 00106 REAL, DIMENSION(:), INTENT(IN) :: PQ_LOWCAN ! hum. near the road 00107 REAL, DIMENSION(:), INTENT(IN) :: PZ_LOWCAN ! height of atm. var. near the road 00108 REAL, DIMENSION(:), INTENT(IN) :: PTS_ROOF ! surface temperature 00109 REAL, DIMENSION(:), INTENT(IN) :: PTS_ROAD ! surface temperature 00110 REAL, DIMENSION(:), INTENT(IN) :: PTS_WALL ! surface temperature 00111 REAL, DIMENSION(:), INTENT(IN) :: PTS_GARDEN ! surface temperature 00112 REAL, DIMENSION(:), INTENT(IN) :: PDELT_SNOW_ROOF! fraction of snow on roof 00113 REAL, DIMENSION(:), INTENT(IN) :: PDELT_SNOW_ROAD! fraction of snow on road 00114 REAL, DIMENSION(:), INTENT(IN) :: PEXNS ! surface exner function 00115 REAL, DIMENSION(:), INTENT(IN) :: PTA ! temperature at the lowest level 00116 REAL, DIMENSION(:), INTENT(IN) :: PQA ! specific humidity 00117 ! at the lowest level 00118 REAL, DIMENSION(:), INTENT(IN) :: PVMOD ! module of the horizontal wind 00119 REAL, DIMENSION(:), INTENT(IN) :: PPS ! pressure at the surface 00120 REAL, DIMENSION(:), INTENT(IN) :: PEXNA ! exner function 00121 ! at the lowest level 00122 REAL, DIMENSION(:), INTENT(IN) :: PRHOA ! air density 00123 REAL, DIMENSION(:), INTENT(IN) :: PZREF ! reference height of the first 00124 ! atmospheric level (temperature) 00125 REAL, DIMENSION(:), INTENT(IN) :: PUREF ! reference height of the first 00126 ! atmospheric level (wind) 00127 REAL, DIMENSION(:), INTENT(IN) :: PZ0_TOWN ! roughness length for momentum 00128 REAL, DIMENSION(:), INTENT(IN) :: PBLD ! fraction of buildings 00129 REAL, DIMENSION(:), INTENT(IN) :: PROAD ! fraction of roads 00130 REAL, DIMENSION(:), INTENT(IN) :: PGARDEN ! fraction of GARDEN areas 00131 REAL, DIMENSION(:), INTENT(IN) :: PBLD_HEIGHT ! h 00132 REAL, DIMENSION(:), INTENT(IN) :: PCAN_HW_RATIO ! h/W 00133 REAL, DIMENSION(:), INTENT(IN) :: PWALL_O_GRND ! wall surf. / (road+GARDEN area) surf. 00134 ! 00135 REAL, DIMENSION(:), INTENT(IN) :: PWS_ROOF ! roof water content (kg/m2) 00136 REAL, DIMENSION(:), INTENT(IN) :: PWS_ROAD ! road water content (kg/m2) 00137 REAL, DIMENSION(:), INTENT(IN) :: PWS_ROOF_MAX ! maximum deepness of roof 00138 REAL, DIMENSION(:), INTENT(IN) :: PWS_ROAD_MAX ! and water reservoirs (kg/m2) 00139 ! 00140 ! 00141 REAL, DIMENSION(:), INTENT(IN) :: PPEW_A_COEF ! implicit coefficients (m2s/kg) 00142 REAL, DIMENSION(:), INTENT(IN) :: PPEW_B_COEF ! for wind coupling (m/s) 00143 REAL, DIMENSION(:), INTENT(IN) :: PPEW_A_COEF_LOWCAN ! implicit coefficients for wind coupling (m2s/kg) 00144 REAL, DIMENSION(:), INTENT(IN) :: PPEW_B_COEF_LOWCAN ! between low canyon wind and road (m/s) 00145 ! 00146 REAL, DIMENSION(:), INTENT(OUT) :: PQSAT_ROOF ! qsat(Ts) 00147 REAL, DIMENSION(:), INTENT(OUT) :: PQSAT_ROAD ! qsat(Ts) 00148 REAL, DIMENSION(:), INTENT(OUT) :: PDELT_ROOF ! water fraction on 00149 REAL, DIMENSION(:), INTENT(OUT) :: PDELT_ROAD ! snow-free surfaces 00150 REAL, DIMENSION(:), INTENT(OUT) :: PCD ! drag coefficient 00151 REAL, DIMENSION(:), INTENT(OUT) :: PCDN ! neutral drag coefficient 00152 REAL, DIMENSION(:), INTENT(OUT) :: PAC_ROOF ! aerodynamical conductance 00153 REAL, DIMENSION(:), INTENT(OUT) :: PAC_ROOF_WAT ! aerodynamical conductance (for water) 00154 REAL, DIMENSION(:), INTENT(OUT) :: PAC_WALL ! aerodynamical conductance 00155 ! ! between canyon air and 00156 ! ! walls 00157 REAL, DIMENSION(:), INTENT(OUT) :: PAC_ROAD ! aerodynamical conductance 00158 ! ! between canyon air and 00159 ! ! roads 00160 REAL, DIMENSION(:), INTENT(OUT) :: PAC_ROAD_WAT ! aerodynamical conductance 00161 ! ! between canyon air and 00162 ! ! road (for water) 00163 REAL, DIMENSION(:), INTENT(OUT) :: PAC_TOP ! aerodynamical conductance 00164 ! ! between canyon top and atm. 00165 REAL, DIMENSION(:), INTENT(IN) :: PAC_GARDEN ! aerodynamical conductance 00166 ! ! between canyon air and GARDEN areas 00167 REAL, DIMENSION(:), INTENT(OUT) :: PRI ! Town Richardson number 00168 ! 00169 REAL, DIMENSION(:), INTENT(OUT) :: PUW_ROAD ! Momentum flux for roads 00170 REAL, DIMENSION(:), INTENT(OUT) :: PUW_ROOF ! Momentum flux for roofs 00171 REAL, DIMENSION(:), INTENT(OUT) :: PDUWDU_ROAD ! 00172 REAL, DIMENSION(:), INTENT(OUT) :: PDUWDU_ROOF ! 00173 REAL, DIMENSION(:), INTENT(OUT) :: PUSTAR_TOWN ! Fraction velocity for town 00174 ! 00175 LOGICAL, INTENT(IN) :: OCANOPY ! is canopy active 00176 REAL, DIMENSION(:), INTENT(OUT) :: PAC_WIN ! aerodynamical conductance for window 00177 REAL, DIMENSION(:), INTENT(IN) :: PTS_WIN ! window outdoor surface temp 00178 CHARACTER(LEN=5), INTENT(IN) :: HCH_BEM ! BEM option for convective heat transfer coef. 00179 REAL, DIMENSION(:), INTENT(IN) :: PROUGH_ROOF ! roughness coef for the roof 00180 REAL, DIMENSION(:), INTENT(IN) :: PROUGH_WALL ! roughness coef for the wall 00181 ! 00182 !* 0.2 declarations of local variables 00183 ! 00184 ! 00185 REAL, DIMENSION(SIZE(PTA)) :: ZTS_TOWN ! town averaged temp. 00186 REAL, DIMENSION(SIZE(PTA)) :: ZQ_TOWN ! town averaged hum. 00187 REAL, DIMENSION(SIZE(PTA)) :: ZAVDELT_ROOF ! averaged water frac. 00188 REAL, DIMENSION(SIZE(PTA)) :: ZQ_ROOF ! roof spec. hum. 00189 REAL, DIMENSION(SIZE(PTA)) :: ZZ0_ROOF ! roof roughness length 00190 REAL, DIMENSION(SIZE(PTA)) :: ZZ0_ROAD ! road roughness length 00191 REAL, DIMENSION(SIZE(PTA)) :: ZW_CAN ! ver. wind in canyon 00192 REAL, DIMENSION(SIZE(PTA)) :: ZRI ! Richardson number 00193 REAL, DIMENSION(SIZE(PTA)) :: ZLE_MAX ! maximum latent heat flux available 00194 REAL, DIMENSION(SIZE(PTA)) :: ZLE ! actual latent heat flux 00195 REAL, DIMENSION(SIZE(PTA)) :: ZRA_ROOF ! aerodynamical resistance 00196 REAL, DIMENSION(SIZE(PTA)) :: ZCH_ROOF ! drag coefficient for heat 00197 REAL, DIMENSION(SIZE(PTA)) :: ZRA_TOP ! aerodynamical resistance 00198 REAL, DIMENSION(SIZE(PTA)) :: ZCH_TOP ! drag coefficient for heat 00199 REAL, DIMENSION(SIZE(PTA)) :: ZRA_ROAD ! aerodynamical resistance 00200 REAL, DIMENSION(SIZE(PTA)) :: ZCH_ROAD ! drag coeifficient for heat 00201 REAL, DIMENSION(SIZE(PTA)) :: ZCD_ROAD ! road surf. exchange coefficient 00202 REAL, DIMENSION(SIZE(PTA)) :: ZAC ! town aerodynamical conductance (not used) 00203 REAL, DIMENSION(SIZE(PTA)) :: ZRA ! town aerodynamical resistance (not used) 00204 REAL, DIMENSION(SIZE(PTA)) :: ZCH ! town drag coefficient for heat (not used) 00205 REAL, DIMENSION(SIZE(PTA)) :: ZCD ! any surf. exchange coefficient (not used) 00206 REAL, DIMENSION(SIZE(PTA)) :: ZCDN ! any surf. neutral exch. coef. (not used) 00207 ! 00208 REAL, DIMENSION(SIZE(PTA)) :: ZU_STAR, ZW_STAR !! 00209 REAL, DIMENSION(SIZE(PTA)) :: ZQ0 !! 00210 ! 00211 REAL, DIMENSION(SIZE(PTA)) :: ZUSTAR2 ! square of friction velocity (m2/s2 00212 REAL, DIMENSION(SIZE(PTA)) :: ZVMOD ! module of the horizontal wind at t+1 00213 ! 00214 ! for calculation of momentum fluxes 00215 REAL, DIMENSION(SIZE(PTA)) :: ZLMO ! Monin-Obukhov length 00216 REAL, DIMENSION(SIZE(PTA)) :: ZUSTAR_ROAD ! friction velocity for roads 00217 REAL, DIMENSION(SIZE(PTA)) :: ZUSTAR_ROOF ! friction velocity for roofs 00218 REAL, DIMENSION(SIZE(PTA)) :: ZUSTAR_TOWN ! 00219 ! 00220 REAL, DIMENSION(SIZE(PTA)) :: ZZ0_TOP ! roughness length for zac_top calculation 00221 REAL, DIMENSION(SIZE(PTA)) :: ZCHTCN_WIN ! natural convective heat transfer coef. for window [W/(m².K)] 00222 REAL, DIMENSION(SIZE(PTA)) :: ZCHTCN_ROOF ! natural convective heat transfer coef. for roof [W/(m².K)] 00223 REAL, DIMENSION(SIZE(PTA)) :: ZCHTCS_ROOF ! forced convective heat transfer coef. for smooth roof [W/(m².K)] 00224 REAL, DIMENSION(SIZE(PTA)) :: ZCHTCN_WALL ! natural convective heat transfer coef. for wall [W/(m².K)] 00225 REAL, DIMENSION(SIZE(PTA)) :: ZCHTCS_WALL ! forced natural convective heat transfer coef. for smooth wall [W/(m².K)] 00226 ! 00227 INTEGER :: JLOOP, JJ !! 00228 ! 00229 REAL :: ZZ0_O_Z0H = 200. ! z0/z0h ratio used in Mascart (1995) formulation. 00230 ! ! It is set to the maximum value acceptable by 00231 ! ! formulation. Observed values are often larger in cities. 00232 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00233 !------------------------------------------------------------------------------- 00234 ! 00235 ! 00236 IF (LHOOK) CALL DR_HOOK('URBAN_DRAG',0,ZHOOK_HANDLE) 00237 ! 00238 ZZ0_ROOF(:) = 0.15 ! z0 for roofs 00239 ZZ0_ROAD(:) = MIN(0.05,0.1*PZ_LOWCAN(:))! z0 for roads 00240 ! 00241 ZZ0_TOP(:) = PZ0_TOWN(:) 00242 ! 00243 !------------------------------------------------------------------------------- 00244 ! 00245 !* 1. roof and road saturation specific humidity 00246 ! ------------------------------------------ 00247 ! 00248 PQSAT_ROOF(:) = QSAT (PTS_ROOF(:), PPS(:)) 00249 ! 00250 PQSAT_ROAD(:) = QSAT (PTS_ROAD(:), PPS(:)) 00251 ! 00252 !------------------------------------------------------------------------------- 00253 ! 00254 !* 2. fraction of water on roofs 00255 ! -------------------------- 00256 ! 00257 PDELT_ROOF=1. 00258 ! 00259 !* 2.1 general case 00260 ! ------------ 00261 ! 00262 WHERE (PQSAT_ROOF(:) >= PQA(:) ) 00263 PDELT_ROOF(:) = (PWS_ROOF(:)/PWS_ROOF_MAX)**(2./3.) 00264 END WHERE 00265 ! 00266 !* 2.2 dew deposition on roofs (PDELT_ROOF=1) 00267 ! ----------------------- 00268 ! 00269 !------------------------------------------------------------------------------- 00270 ! 00271 !* 3. fraction of water on roads 00272 ! -------------------------- 00273 ! 00274 PDELT_ROAD=1. 00275 ! 00276 !* 3.1 general case 00277 ! ------------ 00278 ! 00279 WHERE (PQSAT_ROAD(:) >= PQ_CANYON(:) ) 00280 PDELT_ROAD(:) = (PWS_ROAD(:)/PWS_ROAD_MAX)**(2./3.) 00281 END WHERE 00282 ! 00283 !* 3.2 dew deposition on roads (PDELT_ROAD=1) 00284 ! ----------------------- 00285 ! 00286 !------------------------------------------------------------------------------- 00287 ! 00288 !* 4. Drag coefficient for momentum between roof level and atmosphere 00289 ! --------------------------------------------------------------- 00290 ! 00291 ! 00292 DO JJ=1,SIZE(PTA) 00293 ! 00294 !* 4.1 Averaged temperature at roof level 00295 ! ---------------------------------- 00296 ! 00297 ZTS_TOWN(JJ) = PBLD(JJ) * PTS_ROOF(JJ) + (1.-PBLD(JJ)) * PT_CANYON(JJ) 00298 ! 00299 !* 4.2 Averaged water fraction on roofs 00300 ! ------------------------------- 00301 ! 00302 ZAVDELT_ROOF(JJ) = PDELT_ROOF(JJ) * PDELT_SNOW_ROOF(JJ) 00303 ! 00304 !* 4.3 Roof specific humidity 00305 ! ---------------------- 00306 ! 00307 ZQ_ROOF(JJ) = PQSAT_ROOF(JJ) * ZAVDELT_ROOF(JJ) 00308 ! 00309 !* 4.4 Averaged Saturation specific humidity 00310 ! ------------------------------------- 00311 ! 00312 ZQ_TOWN(JJ) = PBLD(JJ) * ZQ_ROOF(JJ) + (1.-PBLD(JJ)) * PQ_CANYON(JJ) 00313 ! 00314 ENDDO 00315 ! 00316 !------------------------------------------------------------------------------- 00317 ! 00318 !* 5. Momentum drag coefficient 00319 ! ------------------------- 00320 ! 00321 IF (.NOT. OCANOPY) THEN 00322 CALL URBAN_EXCH_COEF(HZ0H, ZZ0_O_Z0H, ZTS_TOWN, ZQ_TOWN, PEXNS, PEXNA, PTA, PQA, & 00323 PZREF+ PBLD_HEIGHT/3.,PUREF+PBLD_HEIGHT/3.,PVMOD,PZ0_TOWN, & 00324 PRI, PCD, PCDN, ZAC, ZRA, ZCH ) 00325 ENDIF 00326 ! 00327 !------------------------------------------------------------------------------- 00328 ! 00329 !* 6. Drag coefficient for heat fluxes between roofs and atmosphere 00330 ! ------------------------------------------------------------- 00331 ! 00332 IF (HCH_BEM == "DOE-2") THEN 00333 ZCHTCN_ROOF = CHTC_UP_DOE(PTS_ROOF, PTA) 00334 ZCHTCS_ROOF = CHTC_SMOOTH_WIND_DOE(ZCHTCN_ROOF, PVMOD) 00335 PAC_ROOF = CHTC_ROUGH_DOE(ZCHTCN_ROOF, ZCHTCS_ROOF, PROUGH_ROOF) / PRHOA / XCPD 00336 ELSE 00337 CALL URBAN_EXCH_COEF(HZ0H, ZZ0_O_Z0H, PTS_ROOF, ZQ_ROOF, PEXNS, PEXNA, PTA, PQA, & 00338 PZREF, PUREF, PVMOD, ZZ0_ROOF, & 00339 ZRI, ZCD, ZCDN, PAC_ROOF, ZRA_ROOF, ZCH_ROOF ) 00340 ENDIF 00341 ! 00342 ! 00343 DO JJ=1,SIZE(PTA) 00344 ZLE_MAX(JJ) = PWS_ROOF(JJ) / PTSTEP * XLVTT 00345 ZLE (JJ) =(PQSAT_ROOF(JJ) - PQA(JJ)) & 00346 * PAC_ROOF(JJ) * PDELT_ROOF(JJ) * XLVTT * PRHOA(JJ) 00347 ! 00348 PAC_ROOF_WAT(JJ) = PAC_ROOF(JJ) 00349 ! 00350 IF (PDELT_ROOF(JJ)==0.) PAC_ROOF_WAT(JJ)=0. 00351 ! 00352 IF (ZLE(JJ)>0.) PAC_ROOF_WAT(JJ) = PAC_ROOF(JJ) * MIN ( 1. , ZLE_MAX(JJ)/ZLE(JJ) ) 00353 ! 00354 ENDDO 00355 !------------------------------------------------------------------------------- 00356 ! 00357 !* 7. Drag coefficient for heat fluxes between canyon and atmosphere 00358 ! -------------------------------------------------------------- 00359 ! 00360 !* Because air/air exchanges are considered, roughness length for heat is set 00361 ! equal to roughness length for momentum. 00362 ! 00363 IF (.NOT. OCANOPY) THEN 00364 CALL URBAN_EXCH_COEF('MASC95', 1., PT_CANYON, PQ_CANYON, PEXNS, PEXNA, PTA, PQA, & 00365 PZREF+PBLD_HEIGHT-PZ_LOWCAN,PUREF+PBLD_HEIGHT-PZ_LOWCAN, & 00366 PVMOD, ZZ0_TOP, & 00367 ZRI, ZCD, ZCDN, PAC_TOP, ZRA_TOP, ZCH_TOP ) 00368 ENDIF 00369 ! 00370 !------------------------------------------------------------------------------- 00371 ! 00372 !* 8. Drag coefficient for heat fluxes between walls, road and canyon 00373 ! --------------------------------------------------------------- 00374 ! 00375 !* 8.1 aerodynamical conductance for walls 00376 ! ----------------------------------- 00377 ! 00378 IF (HCH_BEM == "DOE-2") THEN 00379 DO JJ=1,SIZE(PTA) 00380 ZCHTCN_WALL(JJ) = CHTC_VERT_DOE(PTS_WALL(JJ), PT_CANYON(JJ)) 00381 ZCHTCS_WALL(JJ) = 0.5 * (CHTC_SMOOTH_LEE_DOE(ZCHTCN_WALL(JJ), PU_CANYON(JJ)) + & 00382 CHTC_SMOOTH_WIND_DOE(ZCHTCN_WALL(JJ), PU_CANYON(JJ)) ) 00383 00384 PAC_WALL(JJ) = CHTC_ROUGH_DOE(ZCHTCN_WALL(JJ), ZCHTCS_WALL(JJ), PROUGH_WALL(JJ)) / XCPD / PRHOA(JJ) 00385 END DO 00386 ELSE 00387 PAC_WALL(:) = ( 11.8 + 4.2 * PU_CANYON(:) ) / XCPD / PRHOA(:) 00388 END IF 00389 ! 00390 !* 8.2 aerodynamical conductance for roads 00391 ! ----------------------------------- 00392 ! 00393 ZW_STAR(:) = 0. 00394 ZQ0(:) = 0. 00395 ! 00396 ! 00397 DO JLOOP=1,3 00398 ! 00399 ZW_CAN(:) = ZW_STAR(:) 00400 ! 00401 ! 00402 CALL URBAN_EXCH_COEF(HZ0H, ZZ0_O_Z0H, PTS_ROAD, PQ_LOWCAN, PEXNS, PEXNA, & 00403 PT_LOWCAN, PQ_LOWCAN, & 00404 PZ_LOWCAN, PZ_LOWCAN, PU_CANYON+ZW_CAN, ZZ0_ROAD, & 00405 ZRI, ZCD_ROAD, ZCDN, PAC_ROAD, ZRA_ROAD, ZCH_ROAD ) 00406 ! 00407 DO JJ=1,SIZE(PTA) 00408 00409 ZQ0(JJ) = (PTS_WALL (JJ) - PT_CANYON(JJ)) * PAC_WALL (JJ) * PWALL_O_GRND(JJ) 00410 00411 IF (PROAD(JJ)+PGARDEN(JJ) .GT. 0.) THEN 00412 ZQ0(JJ) = ZQ0(JJ) & 00413 +(PTS_ROAD (JJ) - PT_LOWCAN(JJ)) * PAC_ROAD (JJ) * PROAD (JJ)/(PROAD(JJ)+PGARDEN(JJ)) & 00414 +(PTS_GARDEN(JJ) - PT_LOWCAN(JJ)) * PAC_GARDEN(JJ) * PGARDEN(JJ)/(PROAD(JJ)+PGARDEN(JJ)) 00415 ENDIF 00416 ! 00417 IF (ZQ0(JJ) >= 0.) THEN 00418 ZW_STAR(JJ) = ( (XG * PEXNA(JJ) / PTA(JJ)) * ZQ0(JJ) * PBLD_HEIGHT(JJ)) ** (1/3.) 00419 ELSE 00420 ZW_STAR(JJ) = 0. 00421 ENDIF 00422 ! 00423 ENDDO 00424 ! 00425 END DO 00426 ! 00427 ! 00428 !* 8.4 aerodynamical conductance for water limited by available water 00429 ! -------------------------------------------------------------- 00430 ! 00431 DO JJ=1,SIZE(PTA) 00432 ! 00433 ZLE_MAX(JJ) = PWS_ROAD(JJ) / PTSTEP * XLVTT 00434 ZLE (JJ) = ( PQSAT_ROAD(JJ) - PQ_LOWCAN(JJ) ) & 00435 * PAC_ROAD(JJ) * PDELT_ROAD(JJ) * XLVTT * PRHOA(JJ) 00436 ! 00437 PAC_ROAD_WAT(JJ) = PAC_ROAD(JJ) 00438 ! 00439 IF (PDELT_ROAD(JJ)==0.) PAC_ROAD_WAT(JJ) = 0. 00440 ! 00441 IF (ZLE(JJ)>0.) PAC_ROAD_WAT(JJ) = PAC_ROAD(JJ) * MIN ( 1. , ZLE_MAX(JJ)/ZLE(JJ) ) 00442 ! 00443 ! 00444 !* 8.5 aerodynamical conductance for window 00445 ! ------------------------------------ 00446 ! 00447 ZCHTCN_WIN(JJ) = CHTC_VERT_DOE(PTS_WIN(JJ), PT_CANYON(JJ)) 00448 ! 00449 PAC_WIN(JJ) = 0.5 * (CHTC_SMOOTH_LEE_DOE(ZCHTCN_WIN(JJ), PU_CANYON(JJ)) + & 00450 CHTC_SMOOTH_WIND_DOE(ZCHTCN_WIN(JJ), PU_CANYON(JJ)) ) & 00451 / PRHOA(JJ) / XCPD 00452 ! 00453 !------------------------------------------------------------------------------- 00454 ! 00455 !* 9. Momentum fluxes 00456 ! --------------- 00457 ! 00458 !* 9.1 For roads 00459 ! --------- 00460 ! 00461 !* road friction 00462 ! 00463 IF (OCANOPY) THEN 00464 ! 00465 ZUSTAR2(JJ)=XUNDEF 00466 ! 00467 IF(HIMPLICIT_WIND=='OLD')THEN 00468 ! old implicitation 00469 ZUSTAR2(JJ) = (ZCD_ROAD(JJ)*PU_LOWCAN(JJ)*PPEW_B_COEF_LOWCAN(JJ))/ & 00470 (1.0-PRHOA(JJ)*ZCD_ROAD(JJ)*PU_LOWCAN(JJ)*PPEW_A_COEF_LOWCAN(JJ)) 00471 ELSE 00472 ! new implicitation 00473 ZUSTAR2(JJ) = (ZCD_ROAD(JJ)*PU_LOWCAN(JJ)*(2.*PPEW_B_COEF_LOWCAN(JJ)-PU_LOWCAN(JJ)))/ & 00474 (1.0-2.0*PRHOA(JJ)*ZCD_ROAD(JJ)*PU_LOWCAN(JJ)*PPEW_A_COEF_LOWCAN(JJ)) 00475 ! 00476 ZVMOD(JJ) = PRHOA(JJ)*PPEW_A_COEF_LOWCAN(JJ)*ZUSTAR2(JJ) + PPEW_B_COEF_LOWCAN(JJ) 00477 ZVMOD(JJ) = MAX(ZVMOD(JJ),0.) 00478 ! 00479 IF(PPEW_A_COEF_LOWCAN(JJ)/= 0.)THEN 00480 ZUSTAR2(JJ) = MAX( ( ZVMOD(JJ) - PPEW_B_COEF_LOWCAN(JJ) ) / (PRHOA(JJ)*PPEW_A_COEF_LOWCAN(JJ)), 0.) 00481 ENDIF 00482 ! 00483 ENDIF 00484 ! 00485 PUW_ROAD(JJ) = - ZUSTAR2(JJ) 00486 ! 00487 PDUWDU_ROAD(JJ) = 0. ! implicitation already taken into account in PUW_ROAD 00488 ! 00489 !* 9.2 For roofs 00490 ! --------- 00491 ! 00492 !* roof friction 00493 !* neutral case, as guess 00494 ! 00495 ! 00496 ZUSTAR_ROOF(JJ) = PVMOD(JJ) * XKARMAN / LOG(PZREF(JJ)/ZZ0_ROOF(JJ)) 00497 ! 00498 PUW_ROOF(JJ) = - ZUSTAR_ROOF(JJ)**2 00499 PDUWDU_ROOF(JJ) = 0. 00500 IF (PVMOD(JJ)/=0.) PDUWDU_ROOF(JJ) = 2. * PUW_ROOF(JJ) / PVMOD(JJ) 00501 ! 00502 ELSE 00503 ! 00504 !* 9.3 For town 00505 ! -------- 00506 ! 00507 ZUSTAR2(JJ)=XUNDEF 00508 ! 00509 IF(HIMPLICIT_WIND=='OLD')THEN 00510 ! old implicitation 00511 ZUSTAR2(JJ) = (PCD(JJ)*PVMOD(JJ)*PPEW_B_COEF(JJ))/ & 00512 (1.0-PRHOA(JJ)*PCD(JJ)*PVMOD(JJ)*PPEW_A_COEF(JJ)) 00513 ELSE 00514 ! new implicitation 00515 ZUSTAR2(JJ) = (PCD(JJ)*PVMOD(JJ)*(2.*PPEW_B_COEF(JJ)-PVMOD(JJ)))/ & 00516 (1.0-2.0*PRHOA(JJ)*PCD(JJ)*PVMOD(JJ)*PPEW_A_COEF(JJ)) 00517 ! 00518 ZVMOD(JJ) = PRHOA(JJ)*PPEW_A_COEF(JJ)*ZUSTAR2(JJ) + PPEW_B_COEF(JJ) 00519 ZVMOD(JJ) = MAX(ZVMOD(JJ),0.) 00520 ! 00521 IF(PPEW_A_COEF(JJ)/= 0.)THEN 00522 ZUSTAR2(JJ) = MAX( ( ZVMOD(JJ) - PPEW_B_COEF(JJ) ) / (PRHOA(JJ)*PPEW_A_COEF(JJ)), 0.) 00523 ENDIF 00524 ! 00525 ENDIF 00526 ! 00527 PUSTAR_TOWN(JJ) = SQRT(ZUSTAR2(JJ)) 00528 ! 00529 ENDIF 00530 ! 00531 ENDDO 00532 ! 00533 IF (LHOOK) CALL DR_HOOK('URBAN_DRAG',1,ZHOOK_HANDLE) 00534 !------------------------------------------------------------------------------- 00535 ! 00536 END SUBROUTINE URBAN_DRAG