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_sizeARGUMENTS:
implicit none integer, intent(in) :: num_soilp ! number of column soil points in pft filter integer, intent(in) :: filter_soilp(:) ! pft filter for soil pointsCALLED 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)