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


Biogeophysics2


INTERFACE:

   subroutine Biogeophysics2 (lbc, ubc, lbp, ubp, num_nolakec, &
              filter_nolakec, num_nolakep, filter_nolakep)
DESCRIPTION:

   This is the main subroutine to execute the calculation of soil/snow and
   ground temperatures and update surface fluxes based on the new ground
   temperature
   Calling sequence is:
   Biogeophysics2:             surface biogeophysics driver
      -> SoilTemperature:      soil/snow and ground temperatures
            -> SoilTermProp    thermal conductivities and heat capacities
            -> Tridiagonal     tridiagonal matrix solution
            -> PhaseChange     phase change of liquid/ice contents
   (1) Snow and soil temperatures
       o The volumetric heat capacity is calculated as a linear combination
         in terms of the volumetric fraction of the constituent phases.
       o The thermal conductivity of soil is computed from
         the algorithm of Johansen (as reported by Farouki 1981), and the
         conductivity of snow is from the formulation used in
         SNTHERM (Jordan 1991).
       o Boundary conditions:
         F = Rnet - Hg - LEg (top),  F= 0 (base of the soil column).
       o Soil / snow temperature is predicted from heat conduction
         in 10 soil layers and up to 5 snow layers.
         The thermal conductivities at the interfaces between two
         neighboring layers (j, j+1) are derived from an assumption that
         the flux across the interface is equal to that from the node j
         to the interface and the flux from the interface to the node j+1.
         The equation is solved using the Crank-Nicholson method and
         results in a tridiagonal system equation.
   (2) Phase change (see PhaseChange.F90)
USES:
     use clmtype
     use time_manager      , only : get_step_size
     use clm_varcon        , only : hvap, cpair, grav, vkc, tfrz, sb
     use clm_varpar        , only : nlevsno, nlevsoi, maxpatch_pft
     use SoilTemperatureMod, only : SoilTemperature
     use subgridAveMod     , only : p2c
ARGUMENTS:
     implicit none
     integer, intent(in) :: lbp, ubp                    ! pft bounds
     integer, intent(in) :: lbc, ubc                    ! column 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 :: pcolumn(:)         !pft's column index
     integer , pointer :: pgridcell(:)       !pft's gridcell index
     integer , pointer :: npfts(:)           !column's number of pfts - ADD
     integer , pointer :: pfti(:)            !column's beginning pft index - A
     integer , pointer :: snl(:)             !number of snow layers
     logical , pointer :: do_capsnow(:)      !true => do snow capping
     real(r8), pointer :: forc_lwrad(:)      !downward infrared (longwave) rad
     real(r8), pointer :: emg(:)             !ground emissivity
     real(r8), pointer :: htvp(:)            !latent heat of vapor of water (o
     real(r8), pointer :: t_grnd(:)          !ground temperature (Kelvin)
     integer , pointer :: frac_veg_nosno(:)  !fraction of vegetation not cover
     real(r8), pointer :: cgrnds(:)          !deriv, of soil sensible heat flu
     real(r8), pointer :: cgrndl(:)          !deriv of soil latent heat flux w
     real(r8), pointer :: sabg(:)            !solar radiation absorbed by grou
     real(r8), pointer :: dlrad(:)           !downward longwave radiation belo
     real(r8), pointer :: ulrad(:)           !upward longwave radiation above 
     real(r8), pointer :: eflx_sh_veg(:)     !sensible heat flux from leaves (
     real(r8), pointer :: qflx_evap_veg(:)   !vegetation evaporation (mm H2O/s
     real(r8), pointer :: qflx_tran_veg(:)   !vegetation transpiration (mm H2O
     real(r8), pointer :: qflx_evap_can(:)   !evaporation from leaves and stem
     real(r8), pointer :: wtcol(:)           !pft weight relative to column
     real(r8), pointer :: tssbef(:,:)        !soil/snow temperature before upd
     real(r8), pointer :: t_soisno(:,:)      !soil temperature (Kelvin)
     real(r8), pointer :: h2osoi_ice(:,:)    !ice lens (kg/m2) (new)
     real(r8), pointer :: h2osoi_liq(:,:)    !liquid water (kg/m2) (new)
   local pointers to implicit inout arguments
     real(r8), pointer :: eflx_sh_grnd(:)    !sensible heat flux from ground (
     real(r8), pointer :: qflx_evap_soi(:)   !soil evaporation (mm H2O/s) (+ =
     real(r8), pointer :: qflx_snowcap(:)    !excess precipitation due to snow
   local pointers to implicit out arguments
     real(r8), pointer :: dt_grnd(:)         !change in t_grnd, last iteration
     real(r8), pointer :: eflx_soil_grnd(:)  !soil heat flux (W/m**2) [+ = int
     real(r8), pointer :: eflx_sh_tot(:)     !total sensible heat flux (W/m**2
     real(r8), pointer :: qflx_evap_tot(:)   !qflx_evap_soi + qflx_evap_veg + 
     real(r8), pointer :: eflx_lh_tot(:)     !total latent heat flux (W/m8*2) 
     real(r8), pointer :: qflx_evap_grnd(:)  !ground surface evaporation rate 
     real(r8), pointer :: qflx_sub_snow(:)   !sublimation rate from snow pack 
     real(r8), pointer :: qflx_dew_snow(:)   !surface dew added to snow pack (
     real(r8), pointer :: qflx_dew_grnd(:)   !ground surface dew formation (mm
     real(r8), pointer :: eflx_lwrad_out(:)  !emitted infrared (longwave) radi
     real(r8), pointer :: eflx_lwrad_net(:)  !net infrared (longwave) rad (W/m
     real(r8), pointer :: eflx_lh_vege(:)    !veg evaporation heat flux (W/m**
     real(r8), pointer :: eflx_lh_vegt(:)    !veg transpiration heat flux (W/m
     real(r8), pointer :: eflx_lh_grnd(:)    !ground evaporation heat flux (W/
     real(r8), pointer :: errsoi_pft(:)      !pft-level soil/lake energy conse
     real(r8), pointer :: errsoi_col(:)      !column-level soil/lake energy co



Mariana Vertenstein 2004-06-21