INTERFACE:
subroutine CNVegStructUpdate(num_soilp, filter_soilp)DESCRIPTION:
On the radiation time step, use C state variables and epc to diagnose vegetation structure (LAI, SAI, height)
USES:
use clmtype
use clm_atmlnd , only: clm_a2l
use pftvarcon , only: noveg, nc3crop, nirrig, nbrdlf_evr_shrub, nbrdlf_dcd_brl_shrub
use pftvarcon , only: ncorn, npcropmin, ztopmx, laimx
use clm_varctl , only: iulog
use shr_sys_mod , only: shr_sys_flush
use shr_const_mod, only: SHR_CONST_PI
use clm_time_manager , only : get_rad_step_size
ARGUMENTS:
implicit none
integer, intent(in) :: num_soilp ! number of column soil points in pft filter
integer, intent(in) :: filter_soilp(:) ! pft filter for soil points
CALLED FROM:
subroutine CNEcosystemDynREVISION HISTORY:
10/28/03: Created by Peter Thornton 2/29/08, David Lawrence: revised snow burial fraction for short vegetationLOCAL VARIABLES:
local pointers to implicit in scalars
#if (defined CNDV)
real(r8), pointer :: allom2(:) ! ecophys const
real(r8), pointer :: allom3(:) ! ecophys const
real(r8), pointer :: nind(:) ! number of individuals (#/m**2)
real(r8), pointer :: fpcgrid(:) ! fractional area of pft (pft area/nat veg area)
#endif
integer , pointer :: ivt(:) ! pft vegetation type
integer , pointer :: pcolumn(:) ! column index associated with each pft
integer , pointer :: pgridcell(:) ! pft's gridcell index
real(r8), pointer :: snowdp(:) ! snow height (m)
real(r8), pointer :: leafc(:) ! (gC/m2) leaf C
real(r8), pointer :: deadstemc(:) ! (gC/m2) dead stem C
real(r8), pointer :: woody(:) !binary flag for woody lifeform (1=woody, 0=not woody)
real(r8), pointer :: slatop(:) !specific leaf area at top of canopy, projected area basis [m^2/gC]
real(r8), pointer :: dsladlai(:) !dSLA/dLAI, projected area basis [m^2/gC]
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 :: forc_hgt_u_pft(:) ! observational height of wind at pft-level [m]
real(r8), pointer :: dwood(:) ! density of wood (gC/m^3)
local pointers to implicit in/out scalars
integer , pointer :: frac_veg_nosno_alb(:) ! frac of vegetation not covered by snow [-]
real(r8), pointer :: tlai(:) !one-sided leaf area index, no burying by snow
real(r8), pointer :: tsai(:) !one-sided stem area index, no burying by snow
real(r8), pointer :: htop(:) !canopy top (m)
real(r8), pointer :: hbot(:) !canopy bottom (m)
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 :: htmx(:) ! max hgt attained by a crop during yr (m)
integer , pointer :: peaklai(:) ! 1: max allowed lai; 0: not at max
integer , pointer :: harvdate(:) ! harvest date
local pointers to implicit out scalars
!OTHER LOCAL VARIABLES:
integer :: p,c,g !indices
integer :: fp !lake filter indices
real(r8):: taper ! ratio of height:radius_breast_height (tree allometry)
real(r8):: stocking ! #stems / ha (stocking density)
real(r8):: ol ! thickness of canopy layer covered by snow (m)
real(r8):: fb ! fraction of canopy layer covered by snow
real(r8) :: tlai_old ! for use in Zeng tsai formula
real(r8) :: tsai_old ! for use in Zeng tsai formula
real(r8) :: tsai_min ! PFT derived minimum tsai
real(r8) :: tsai_alpha ! monthly decay rate of tsai
real(r8) dt ! radiation time step (sec)
real(r8), parameter :: dtsmonth = 2592000._r8 ! number of seconds in a 30 day month (60x60x24x30)