SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/urban_drag.F90
Go to the documentation of this file.
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