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_varcon , only : denh2o, denice, roverg, hvap, hsub, &
istice, istwet, zlnd, zsno
use clm_varpar , only : nlevsoi, nlevsno
use QSatMod , only : QSat
ARGUMENTS:
implicit none
integer, intent(in) :: lbg, ubg ! gridcell-index bound
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
integer, intent(in) :: filter_nolakec(ubc-lbc+1) ! column filter for no
integer, intent(in) :: num_nolakep ! number of column non
integer, intent(in) :: filter_nolakep(ubp-lbp+1) ! pft filter for non-l
CALLED FROM:
subroutine driverREVISION 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. VertensteinLOCAL 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 :: forc_pbot(:) !atmospheric pressure (Pa)
real(r8), pointer :: forc_q(:) !atmospheric specific humidity (kg/
real(r8), pointer :: forc_t(:) !atmospheric temperature (Kelvin)
real(r8), pointer :: forc_hgt_t(:) !observational height of temperatur
real(r8), pointer :: forc_th(:) !atmospheric potential temperature
real(r8), pointer :: forc_u(:) !atmospheric wind speed in east dir
real(r8), pointer :: forc_v(:) !atmospheric wind speed in north di
real(r8), pointer :: smpmin(:) !restriction for min of soil potent
integer , pointer :: snl(:) !number of snow layers
real(r8), pointer :: frac_sno(:) !fraction of ground covered by snow
real(r8), pointer :: h2osno(:) !snow water (mm H2O)
real(r8), pointer :: elai(:) !one-sided leaf area index with bur
real(r8), pointer :: esai(:) !one-sided stem area index with bur
real(r8), pointer :: z0mr(:) !ratio of momentum roughness length
real(r8), pointer :: displar(:) !ratio of displacement height to ca
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 saturati
real(r8), pointer :: sucsat(:,:) !minimum soil suction (mm)
real(r8), pointer :: bsw(:,:) !Clapp and Hornberger "b"
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
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.00
real(r8), pointer :: thv(:) !virtual potential temperature (kel
real(r8), pointer :: z0mg(:) !roughness length over ground, mome
real(r8), pointer :: z0hg(:) !roughness length over ground, sens
real(r8), pointer :: z0qg(:) !roughness length over ground, late
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,
real(r8), pointer :: z0hv(:) !roughness length over vegetation,
real(r8), pointer :: z0qv(:) !roughness length over vegetation,
real(r8), pointer :: eflx_sh_tot(:) !total sensible heat flux (W/m**2)
real(r8), pointer :: eflx_lh_tot(:) !total latent heat flux (W/m8*2) [
real(r8), pointer :: eflx_sh_veg(:) !sensible heat flux from leaves (W/
real(r8), pointer :: qflx_evap_tot(:) !qflx_evap_soi + qflx_evap_veg + qf
real(r8), pointer :: qflx_evap_veg(:) !vegetation evaporation (mm H2O/s)
real(r8), pointer :: qflx_tran_veg(:) !vegetation transpiration (mm H2O/s
real(r8), pointer :: cgrnd(:) !deriv. of soil energy flux wrt to
real(r8), pointer :: cgrnds(:) !deriv. of soil sensible heat flux
real(r8), pointer :: cgrndl(:) !deriv. of soil latent heat flux wr
real(r8) ,pointer :: tssbef(:,:) !soil/snow temperature before updat