INTERFACE:
subroutine Biogeophysics1(lbg, ubg, lbc, ubc, lbp, ubp, &
num_nolakec, filter_nolakec, num_nolakep, filter_nolakep)
DESCRIPTION:
This is the main subroutine to execute the calculation of leaf temperature and surface fluxes. Biogeophysics2.F90 then determines soil/snow and ground temperatures and updates the surface fluxes for the new ground temperature.
Calling sequence is: Biogeophysics1: surface biogeophysics driver -> QSat: saturated vapor pressure, specific humidity, and derivatives at ground surface and derivatives at leaf surface using updated leaf temperature Leaf temperature Foliage energy conservation is given by the foliage energy budget equation: Rnet - Hf - LEf = 0 The equation is solved by Newton-Raphson iteration, in which this iteration includes the calculation of the photosynthesis and stomatal resistance, and the integration of turbulent flux profiles. The sensible and latent heat transfer between foliage and atmosphere and ground is linked by the equations: Ha = Hf + Hg and Ea = Ef + Eg
USES:
use clmtype
use clm_atmlnd , only : clm_a2l
use clm_varcon , only : denh2o, denice, roverg, hvap, hsub, &
istice, istice_mec, istwet, istsoil, isturb, istdlak, &
zlnd, zsno, tfrz, &
icol_roof, icol_sunwall, icol_shadewall, &
icol_road_imperv, icol_road_perv, tfrz, spval, istdlak
use clm_varcon , only : istcrop
use clm_varpar , only : nlevgrnd, nlevurb, nlevsno, max_pft_per_gcell, nlevsoi
use QSatMod , only : QSat
use shr_const_mod , only : SHR_CONST_PI
ARGUMENTS:
implicit none
integer, intent(in) :: lbg, ubg ! gridcell-index bounds
integer, intent(in) :: lbc, ubc ! column-index bounds
integer, intent(in) :: lbp, ubp ! pft-index bounds
integer, intent(in) :: num_nolakec ! number of column non-lake points in column filter
integer, intent(in) :: filter_nolakec(ubc-lbc+1) ! column filter for non-lake points
integer, intent(in) :: num_nolakep ! number of column non-lake points in pft filter
integer, intent(in) :: filter_nolakep(ubp-lbp+1) ! pft filter for non-lake points
CALLED FROM:
subroutine clm_driver1REVISION HISTORY:
15 September 1999: Yongjiu Dai; Initial code 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision Migrated to clm2.0 by Keith Oleson and Mariana Vertenstein Migrated to clm2.1 new data structures by Peter Thornton and M. Vertenstein 27 February 2008: Keith Oleson; weighted soil/snow emissivityLOCAL VARIABLES:
local pointers to implicit in arguments
integer , pointer :: ivt(:) !pft vegetation type
integer , pointer :: ityplun(:) !landunit type
integer , pointer :: clandunit(:) !column's landunit index
integer , pointer :: cgridcell(:) !column's gridcell index
real(r8), pointer :: pwtgcell(:) !weight relative to gridcell for each pft
integer , pointer :: ctype(:) !column type
real(r8), pointer :: forc_pbot(:) !atmospheric pressure (Pa)
real(r8), pointer :: forc_q(:) !atmospheric specific humidity (kg/kg)
real(r8), pointer :: forc_t(:) !atmospheric temperature (Kelvin)
real(r8), pointer :: forc_hgt_t(:) !observational height of temperature [m]
real(r8), pointer :: forc_hgt_u(:) !observational height of wind [m]
real(r8), pointer :: forc_hgt_q(:) !observational height of specific humidity [m]
integer , pointer :: npfts(:) !number of pfts on gridcell
integer , pointer :: pfti(:) !initial pft on gridcell
integer , pointer :: plandunit(:) !pft's landunit index
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_hgt_q_pft(:) !observational height of specific humidity at pft level [m]
integer , pointer :: frac_veg_nosno(:) !fraction of vegetation not covered by snow (0 OR 1) [-]
integer , pointer :: pgridcell(:) !pft's gridcell index
integer , pointer :: pcolumn(:) !pft's column index
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)
real(r8), pointer :: forc_th(:) !atmospheric potential temperature (Kelvin)
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 :: smpmin(:) !restriction for min of soil potential (mm)
integer , pointer :: snl(:) !number of snow layers
real(r8), pointer :: frac_sno(:) !fraction of ground covered by snow (0 to 1)
real(r8), pointer :: h2osno(:) !snow water (mm H2O)
real(r8), pointer :: elai(:) !one-sided leaf area index with burying by snow
real(r8), pointer :: esai(:) !one-sided stem area index with burying by snow
real(r8), pointer :: z0mr(:) !ratio of momentum roughness length to canopy top height (-)
real(r8), pointer :: displar(:) !ratio of displacement height to canopy top height (-)
real(r8), pointer :: htop(:) !canopy top (m)
real(r8), pointer :: dz(:,:) !layer depth (m)
real(r8), pointer :: t_soisno(:,:) !soil temperature (Kelvin)
real(r8), pointer :: h2osoi_liq(:,:) !liquid water (kg/m2)
real(r8), pointer :: h2osoi_ice(:,:) !ice lens (kg/m2)
real(r8), pointer :: watsat(:,:) !volumetric soil water at saturation (porosity)
real(r8), pointer :: sucsat(:,:) !minimum soil suction (mm)
real(r8), pointer :: bsw(:,:) !Clapp and Hornberger "b"
real(r8), pointer :: watfc(:,:) !volumetric soil water at field capacity
real(r8), pointer :: watopt(:,:) !volumetric soil moisture corresponding to no restriction on ET from urban pervious surface
real(r8), pointer :: watdry(:,:) !volumetric soil moisture corresponding to no restriction on ET from urban pervious surface
real(r8), pointer :: rootfr_road_perv(:,:) !fraction of roots in each soil layer for urban pervious road
real(r8), pointer :: rootr_road_perv(:,:) !effective fraction of roots in each soil layer for urban pervious road
local pointers to implicit out arguments
real(r8), pointer :: t_grnd(:) !ground temperature (Kelvin)
real(r8), pointer :: qg(:) !ground specific humidity [kg/kg]
real(r8), pointer :: dqgdT(:) !d(qg)/dT
real(r8), pointer :: emg(:) !ground emissivity
real(r8), pointer :: htvp(:) !latent heat of vapor of water (or sublimation) [j/kg]
real(r8), pointer :: beta(:) !coefficient of convective velocity [-]
real(r8), pointer :: zii(:) !convective boundary height [m]
real(r8), pointer :: thm(:) !intermediate variable (forc_t+0.0098*forc_hgt_t_pft)
real(r8), pointer :: thv(:) !virtual potential temperature (kelvin)
real(r8), pointer :: z0mg(:) !roughness length over ground, momentum [m]
real(r8), pointer :: z0hg(:) !roughness length over ground, sensible heat [m]
real(r8), pointer :: z0qg(:) !roughness length over ground, latent heat [m]
real(r8), pointer :: emv(:) !vegetation emissivity
real(r8), pointer :: z0m(:) !momentum roughness length (m)
real(r8), pointer :: displa(:) !displacement height (m)
real(r8), pointer :: z0mv(:) !roughness length over vegetation, momentum [m]
real(r8), pointer :: z0hv(:) !roughness length over vegetation, sensible heat [m]
real(r8), pointer :: z0qv(:) !roughness length over vegetation, latent heat [m]
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 :: eflx_sh_tot_r(:) !rural total sensible heat flux (W/m**2) [+ to atm]
real(r8), pointer :: eflx_lh_tot(:) !total latent heat flux (W/m**2) [+ to atm]
real(r8), pointer :: eflx_lh_tot_u(:) !urban total latent heat flux (W/m**2) [+ to atm]
real(r8), pointer :: eflx_lh_tot_r(:) !rural total latent heat flux (W/m**2) [+ to atm]
real(r8), pointer :: eflx_sh_veg(:) !sensible heat flux from leaves (W/m**2) [+ to atm]
real(r8), pointer :: qflx_evap_tot(:) !qflx_evap_soi + qflx_evap_can + qflx_tran_veg
real(r8), pointer :: qflx_evap_veg(:) !vegetation evaporation (mm H2O/s) (+ = to atm)
real(r8), pointer :: qflx_tran_veg(:) !vegetation transpiration (mm H2O/s) (+ = to atm)
real(r8), pointer :: cgrnd(:) !deriv. of soil energy flux wrt to soil temp [w/m2/k]
real(r8), pointer :: cgrnds(:) !deriv. of soil sensible heat flux wrt soil temp [w/m2/k]
real(r8), pointer :: cgrndl(:) !deriv. of soil latent heat flux wrt soil temp [w/m**2/k]
real(r8) ,pointer :: tssbef(:,:) !soil/snow temperature before update
real(r8) ,pointer :: soilalpha(:) !factor that reduces ground saturated specific humidity (-)
real(r8) ,pointer :: soilbeta(:) !factor that reduces ground evaporation
real(r8) ,pointer :: soilalpha_u(:) !Urban factor that reduces ground saturated specific humidity (-)
!OTHER LOCAL VARIABLES: