INTERFACE:
subroutine SoilTemperature (c, xmf, fact)DESCRIPTION:
Snow and soil temperatures including phase change
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.
USES:
use shr_kind_mod, only: r8 => shr_kind_r8
use clmtype
use globals, only : dtime
use clm_varcon, only : sb, capr, cnfac
use clm_varpar, only : nlevsoi
use TridiagonalMod, only : Tridiagonal
ARGUMENTS:
implicit none
type (column_type),target,intent(inout):: c !column derived type
real(r8), intent(out) :: xmf ! total latent heat of phase change of ground water
real(r8), intent(out) :: fact(c%cps%snl+1 : nlevsoi) ! used in computing tridiagonal matrix\end{verbatim}{\sf CALLED FROM:}
\begin{verbatim} subroutine Biogeophysics2 in module Biogeophysics2Mod
REVISION HISTORY:
15 September 1999: Yongjiu Dai; Initial code 15 December 1999: Paul Houser and Jon Radakovich; F90 Revision 12/19/01, Peter Thornton Changed references for tg to t_grnd, for consistency with the rest of the code (tg eliminated as redundant) 2/14/02, Peter Thornton: Migrated to new data structures. Added pft loop in calculation of net ground heat flux.LOCAL VARIABLES:
local pointers to original implicit in arguments
real(r8), pointer :: forc_lwrad !downward infrared (longwave) radiation (W/m**2)
integer , pointer :: snl !number of snow layers
real(r8), pointer :: htvp !latent heat of vapor of water (or sublimation) [j/kg]
real(r8), pointer :: emg !ground emissivity
real(r8), pointer :: cgrnd !deriv. of soil energy flux wrt to soil temp [w/m2/k]
real(r8), pointer :: dlrad !downward longwave radiation blow the canopy [W/m2]
real(r8), pointer :: sabg !solar radiation absorbed by ground (W/m**2)
integer , pointer :: frac_veg_nosno !fraction of vegetation not covered by snow (0 OR 1 now) [-] (new)
real(r8), pointer :: eflx_sh_grnd !sensible heat flux from ground (W/m**2) [+ to atm]
real(r8), pointer :: qflx_evap_soi !soil evaporation (mm H2O/s) (+ = to atm)
local pointers to original implicit inout arguments
real(r8), pointer :: t_grnd !ground surface temperature [K]
local pointers to original implicit out arguments
these two are new variables added to clmtype at the pft level
real(r8), pointer :: eflx_gnet !net ground heat flux into the surface (W/m**2)
real(r8), pointer :: dgnetdT !temperature derivative of ground net heat flux
local pointers to original implicit in arrays
real(r8), dimension(:), pointer:: zi !interface level below a "z" level (m)
real(r8), dimension(:), pointer:: dz !layer depth (m)
real(r8), dimension(:), pointer:: z !layer thickness (m)
real(r8), dimension(:), pointer:: t_soisno !soil temperature (Kelvin)
real(r8), dimension(:), pointer:: tssbef !soil/snow temperature before update