next up previous contents index
Next: Module Biogeophysics2Mod (File: Biogeophysics2Mod.F90) Up: Module Biogeophysics1Mod (File: Biogeophysics1Mod.F90) Previous: Module Biogeophysics1Mod (File: Biogeophysics1Mod.F90)   Contents   Index


Biogeophysics1


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 driver
REVISION 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
LOCAL 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



Mariana Vertenstein 2004-06-21