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)
Turbulent and momentum fluxes from urban canyon (consisting of roof, sunwall, shadewall, pervious and impervious road).
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
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
subroutine clm_driver1
Author: Keith Oleson 10/2005
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