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_PIARGUMENTS:
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 pointsCALLED 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: