INTERFACE:
subroutine Biogeophysics1 (c)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
-> SurfaceRadiation: surface solar radiation
-> BareGroundFluxes: surface fluxes for bare soil or
snow-covered vegetation patches
-> MoninObukIni: first-guess Monin-Obukhov length and
wind speed
-> FrictionVelocity: friction velocity and potential
temperature and humidity profiles
-> CanopyFluxes: leaf temperature and surface fluxes
for vegetated patches
-> QSat saturated vapor pressure, specific humidity,
and derivatives at leaf surface
-> MoninObukIni first-guess Monin-Obukhov length and
wind speed
-> FrictionVelocity friction velocity and potential
temperature and humidity profiles
-> Stomata stomatal resistance and photosynthesis
for sunlit leaves
-> Stomata stomatal resistance and photosynthesis
for shaded leaves
-> QSat recalculation of saturated vapor pressure,
specific humidity, 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 shr_kind_mod, only: r8 => shr_kind_r8
use clmtype
use clm_varcon, only : denh2o, denice, roverg, hvap, hsub, istice, istwet, &
zlnd, zsno
use clm_varpar, only : nlevsoi
use QSatMod, only : QSat
use SurfaceRadiationMod, only : SurfaceRadiation
use BareGroundFluxesMod, only : BareGroundFluxes
use CanopyFluxesMod, only : CanopyFluxes
ARGUMENTS:
implicit none
type (column_type),target,intent(inout):: c !column derived type
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 scalars
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_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)
integer,pointer:: itypwat !water type
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:: htop !canopy top (m)
real(r8),pointer:: displar !ratio of displacement height to canopy top height (-)
integer,pointer :: frac_veg_nosno !fraction of vegetation not covered by snow (0 OR 1 now) [-]
local pointers to implicit out scalars
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)
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:: ur !wind speed at reference height [m/s]
real(r8),pointer:: psnsun !sunlit leaf photosynthesis (umol CO2 /m**2/ s)
real(r8),pointer:: psnsha !shaded leaf photosynthesis (umol CO2 /m**2/ s)
local pointers to implicit in arrays
real(r8),dimension(:),pointer:: dz !layer depth (m)
real(r8),dimension(:),pointer:: t_soisno !soil temperature (Kelvin)
real(r8),dimension(:),pointer:: h2osoi_liq !liquid water (kg/m2)
real(r8),dimension(:),pointer:: h2osoi_ice !ice lens (kg/m2)
real(r8),dimension(:),pointer:: watsat !volumetric soil water at saturation (porosity)
real(r8),dimension(:),pointer:: sucsat !minimum soil suction (mm)
real(r8),dimension(:),pointer:: bsw !Clapp and Hornberger "b"
local pointers to implicit out arrays
real(r8),dimension(:),pointer:: tssbef !soil/snow temperature before update