INTERFACE:
subroutine UrbanFluxes (nc, lbp, ubp, lbl, ubl, lbc, ubc, &
num_nourbanl, filter_nourbanl, &
num_urbanl, filter_urbanl, &
num_urbanc, filter_urbanc, &
num_urbanp, filter_urbanp)
DESCRIPTION:
Turbulent and momentum fluxes from urban canyon (consisting of roof, sunwall, shadewall, pervious and impervious road).
USES:
use clmtype
use clm_varcon , only : cpair, vkc, spval, icol_roof, icol_sunwall, &
icol_shadewall, icol_road_perv, icol_road_imperv, &
grav, pondmx_urban, rpi, rgas, &
ht_wasteheat_factor, ac_wasteheat_factor, &
wasteheat_limit
use filterMod , only : filter
use FrictionVelocityMod, only : FrictionVelocity, MoninObukIni
use QSatMod , only : QSat
use clm_varpar , only : maxpatch_urb, nlevurb
use clm_time_manager , only : get_curr_date, get_step_size, get_nstep
use clm_atmlnd , only : clm_a2l
ARGUMENTS:
implicit none
integer , intent(in) :: nc ! clump index
integer, intent(in) :: lbp, ubp ! pft-index bounds
integer, intent(in) :: lbl, ubl ! landunit-index bounds
integer, intent(in) :: lbc, ubc ! column-index bounds
integer , intent(in) :: num_nourbanl ! number of non-urban landunits in clump
integer , intent(in) :: filter_nourbanl(ubl-lbl+1) ! non-urban landunit filter
integer , intent(in) :: num_urbanl ! number of urban landunits in clump
integer , intent(in) :: filter_urbanl(ubl-lbl+1) ! urban landunit filter
integer , intent(in) :: num_urbanc ! number of urban columns in clump
integer , intent(in) :: filter_urbanc(ubc-lbc+1) ! urban column filter
integer , intent(in) :: num_urbanp ! number of urban pfts in clump
integer , intent(in) :: filter_urbanp(ubp-lbp+1) ! urban pft filter
CALLED FROM:
subroutine clm_driver1REVISION HISTORY:
Author: Keith Oleson 10/2005LOCAL VARIABLES:
local pointers to original implicit in arguments (urban clump)
real(r8), pointer :: ht_roof(:) ! height of urban roof (m)
real(r8), pointer :: wtlunit_roof(:) ! weight of roof with respect to landunit
real(r8), pointer :: canyon_hwr(:) ! ratio of building height to street width
real(r8), pointer :: wtroad_perv(:) ! weight of pervious road wrt total road
real(r8), pointer :: wind_hgt_canyon(:) ! height above road at which wind in canyon is to be computed (m)
local pointers to original implicit in arguments (clmtype)
real(r8), pointer :: forc_u(:) ! atmospheric wind speed in east direction (m/s)
real(r8), pointer :: forc_v(:) ! atmospheric wind speed in north direction (m/s)
real(r8), pointer :: forc_rho(:) ! density (kg/m**3)
real(r8), pointer :: forc_hgt_u_pft(:) ! observational height of wind at pft-level (m)
real(r8), pointer :: forc_hgt_t_pft(:) ! observational height of temperature at pft-level (m)
real(r8), pointer :: forc_q(:) ! atmospheric specific humidity (kg/kg)
real(r8), pointer :: forc_t(:) ! atmospheric temperature (K)
real(r8), pointer :: forc_th(:) ! atmospheric potential temperature (K)
real(r8), pointer :: forc_pbot(:) ! atmospheric pressure (Pa)
real(r8), pointer :: z_0_town(:) ! momentum roughness length of urban landunit (m)
real(r8), pointer :: z_d_town(:) ! displacement height of urban landunit (m)
integer , pointer :: pgridcell(:) ! gridcell of corresponding pft
integer , pointer :: pcolumn(:) ! column of corresponding pft
integer , pointer :: lgridcell(:) ! gridcell of corresponding landunit
integer , pointer :: plandunit(:) ! pft's landunit index
integer , pointer :: ctype(:) ! column type
integer , pointer :: coli(:) ! beginning column index for landunit
integer , pointer :: colf(:) ! ending column index for landunit
integer , pointer :: pfti(:) ! beginning pft index for landunit
integer , pointer :: pftf(:) ! ending pft index for landunit
real(r8), pointer :: taf(:) ! urban canopy air temperature (K)
real(r8), pointer :: qaf(:) ! urban canopy air specific humidity (kg/kg)
integer , pointer :: npfts(:) ! landunit's number of pfts (columns)
real(r8), pointer :: t_grnd(:) ! ground surface temperature (K)
real(r8), pointer :: qg(:) ! specific humidity at ground surface (kg/kg)
real(r8), pointer :: htvp(:) ! latent heat of evaporation (/sublimation) (J/kg)
real(r8), pointer :: dqgdT(:) ! temperature derivative of "qg"
real(r8), pointer :: eflx_traffic(:) ! traffic sensible heat flux (W/m**2)
real(r8), pointer :: eflx_traffic_factor(:) ! multiplicative urban traffic factor for sensible heat flux
real(r8), pointer :: eflx_wasteheat(:) ! sensible heat flux from urban heating/cooling sources of waste heat (W/m**2)
real(r8), pointer :: eflx_heat_from_ac(:) ! sensible heat flux put back into canyon due to removal by AC (W/m**2)
real(r8), pointer :: t_soisno(:,:) ! soil temperature (K)
real(r8), pointer :: eflx_urban_ac(:) ! urban air conditioning flux (W/m**2)
real(r8), pointer :: eflx_urban_heat(:) ! urban heating flux (W/m**2)
real(r8), pointer :: londeg(:) ! longitude (degrees)
real(r8), pointer :: h2osoi_ice(:,:) ! ice lens (kg/m2)
real(r8), pointer :: h2osoi_liq(:,:) ! liquid water (kg/m2)
real(r8), pointer :: frac_sno(:) ! fraction of ground covered by snow (0 to 1)
real(r8), pointer :: snowdp(:) ! snow height (m)
real(r8), pointer :: h2osno(:) ! snow water (mm H2O)
integer , pointer :: snl(:) ! number of snow layers
real(r8), pointer :: rootr_road_perv(:,:) ! effective fraction of roots in each soil layer for urban pervious road
real(r8), pointer :: soilalpha_u(:) ! Urban factor that reduces ground saturated specific humidity (-)
local pointers to original implicit out arguments
real(r8), pointer :: dlrad(:) ! downward longwave radiation below the canopy (W/m**2)
real(r8), pointer :: ulrad(:) ! upward longwave radiation above the canopy (W/m**2)
real(r8), pointer :: cgrnds(:) ! deriv, of soil sensible heat flux wrt soil temp (W/m**2/K)
real(r8), pointer :: cgrndl(:) ! deriv of soil latent heat flux wrt soil temp (W/m**2/K)
real(r8), pointer :: cgrnd(:) ! deriv. of soil energy flux wrt to soil temp (W/m**2/K)
real(r8), pointer :: taux(:) ! wind (shear) stress: e-w (kg/m/s**2)
real(r8), pointer :: tauy(:) ! wind (shear) stress: n-s (kg/m/s**2)
real(r8), pointer :: eflx_sh_grnd(:) ! sensible heat flux from ground (W/m**2) [+ to atm]
real(r8), pointer :: eflx_sh_tot(:) ! total sensible heat flux (W/m**2) [+ to atm]
real(r8), pointer :: eflx_sh_tot_u(:) ! urban total sensible heat flux (W/m**2) [+ to atm]
real(r8), pointer :: qflx_evap_soi(:) ! soil evaporation (mm H2O/s) (+ = to atm)
real(r8), pointer :: qflx_tran_veg(:) ! vegetation transpiration (mm H2O/s) (+ = to atm)
real(r8), pointer :: qflx_evap_veg(:) ! vegetation evaporation (mm H2O/s) (+ = to atm)
real(r8), pointer :: qflx_evap_tot(:) ! qflx_evap_soi + qflx_evap_can + qflx_tran_veg
real(r8), pointer :: t_ref2m(:) ! 2 m height surface air temperature (K)
real(r8), pointer :: q_ref2m(:) ! 2 m height surface specific humidity (kg/kg)
real(r8), pointer :: t_ref2m_u(:) ! Urban 2 m height surface air temperature (K)
real(r8), pointer :: t_veg(:) ! vegetation temperature (K)
real(r8), pointer :: ram1(:) ! aerodynamical resistance (s/m)
real(r8), pointer :: rootr(:,:) ! effective fraction of roots in each soil layer
real(r8), pointer :: psnsun(:) ! sunlit leaf photosynthesis (umol CO2 /m**2/ s)
real(r8), pointer :: psnsha(:) ! shaded leaf photosynthesis (umol CO2 /m**2/ s)
real(r8), pointer :: t_building(:) ! internal building temperature (K)
real(r8), pointer :: rh_ref2m(:) ! 2 m height surface relative humidity (%)
real(r8), pointer :: rh_ref2m_u(:) ! Urban 2 m height surface relative humidity (%)
!OTHER LOCAL VARIABLES