next up previous contents
Next: CropPhenology Up: Fortran: Module Interface CNPhenologyMod Previous: CNSeasonDecidPhenology   Contents

CNStressDecidPhenology


INTERFACE:

 subroutine CNStressDecidPhenology (num_soilp, filter_soilp)
DESCRIPTION:

This routine handles phenology for vegetation types, such as grasses and tropical drought deciduous trees, that respond to cold and drought stress signals and that can have multiple growing seasons in a given year. This routine allows for the possibility that leaves might persist year-round in the absence of a suitable stress trigger, by switching to an essentially evergreen habit, but maintaining a deciduous leaf longevity, while waiting for the next stress trigger. This is in contrast to the seasonal deciduous algorithm (for temperate deciduous trees) that forces a single growing season per year.


USES:

    use clm_time_manager, only: get_days_per_year
    use clm_varcon      , only: secspday
    use shr_const_mod   , only: SHR_CONST_TKFRZ, SHR_CONST_PI
ARGUMENTS:
    integer, intent(in) :: num_soilp       ! number of soil pfts in filter
    integer, intent(in) :: filter_soilp(:) ! filter for soil pfts
CALLED FROM:
   subroutine CNPhenology
REVISION HISTORY:
   10/27/03: Created by Peter Thornton
   01/29/04: Made onset_gdd critical sum a function of temperature, as in
             seasonal deciduous algorithm.
LOCAL VARIABLES:
   local pointers to implicit in scalars
    integer , pointer :: ivt(:)                ! pft vegetation type
    integer , pointer :: pcolumn(:)            ! pft's column index
    integer , pointer :: pgridcell(:)          ! pft's gridcell index
    real(r8), pointer :: latdeg(:)             ! latitude (radians)
    real(r8), pointer :: decl(:)               ! solar declination (radians)
    real(r8), pointer :: leafc_storage(:)      ! (gC/m2) leaf C storage
    real(r8), pointer :: frootc_storage(:)     ! (gC/m2) fine root C storage
    real(r8), pointer :: livestemc_storage(:)  ! (gC/m2) live stem C storage
    real(r8), pointer :: deadstemc_storage(:)  ! (gC/m2) dead stem C storage
    real(r8), pointer :: livecrootc_storage(:) ! (gC/m2) live coarse root C storage
    real(r8), pointer :: deadcrootc_storage(:) ! (gC/m2) dead coarse root C storage
    real(r8), pointer :: gresp_storage(:)      ! (gC/m2) growth respiration storage
    real(r8), pointer :: leafn_storage(:)      ! (gN/m2) leaf N storage
    real(r8), pointer :: frootn_storage(:)     ! (gN/m2) fine root N storage
    real(r8), pointer :: livestemn_storage(:)  ! (gN/m2) live stem N storage
    real(r8), pointer :: deadstemn_storage(:)  ! (gN/m2) dead stem N storage
    real(r8), pointer :: livecrootn_storage(:) ! (gN/m2) live coarse root N storage
    real(r8), pointer :: deadcrootn_storage(:) ! (gN/m2) dead coarse root N storage
    real(r8), pointer :: t_soisno(:,:)         ! soil temperature (Kelvin)  (-nlevsno+1:nlevgrnd)
    real(r8), pointer :: soilpsi(:,:)          ! soil water potential in each soil layer (MPa)
    real(r8), pointer :: leaf_long(:)          ! leaf longevity (yrs)
    real(r8), pointer :: stress_decid(:)       ! binary flag for stress-deciduous leaf habit (0 or 1)
    real(r8), pointer :: woody(:)              ! binary flag for woody lifeform (1=woody, 0=not woody)
 
   local pointers to implicit in/out scalars
    real(r8), pointer :: dormant_flag(:)    ! dormancy flag
    real(r8), pointer :: days_active(:)     ! number of days since last dormancy
    real(r8), pointer :: onset_flag(:)      ! onset flag
    real(r8), pointer :: onset_counter(:)   ! onset counter (seconds)
    real(r8), pointer :: onset_gddflag(:)   ! onset freeze flag
    real(r8), pointer :: onset_fdd(:)       ! onset freezing degree days counter
    real(r8), pointer :: onset_gdd(:)       ! onset growing degree days
    real(r8), pointer :: onset_swi(:)       ! onset soil water index
    real(r8), pointer :: offset_flag(:)     ! offset flag
    real(r8), pointer :: offset_counter(:)  ! offset counter (seconds)
    real(r8), pointer :: dayl(:)            ! daylength (seconds)
    real(r8), pointer :: offset_fdd(:)      ! offset freezing degree days counter
    real(r8), pointer :: offset_swi(:)      ! offset soil water index
    real(r8), pointer :: annavg_t2m(:)      ! annual average 2m air temperature (K)
    real(r8), pointer :: lgsf(:)            ! long growing season factor [0-1]
    real(r8), pointer :: bglfr(:)           ! background litterfall rate (1/s)
    real(r8), pointer :: bgtr(:)            ! background transfer growth rate (1/s)
    real(r8), pointer :: prev_leafc_to_litter(:)  ! previous timestep leaf C litterfall flux (gC/m2/s)
    real(r8), pointer :: prev_frootc_to_litter(:) ! previous timestep froot C litterfall flux (gC/m2/s)
    real(r8), pointer :: leafc_xfer_to_leafc(:)
    real(r8), pointer :: frootc_xfer_to_frootc(:)
    real(r8), pointer :: livestemc_xfer_to_livestemc(:)
    real(r8), pointer :: deadstemc_xfer_to_deadstemc(:)
    real(r8), pointer :: livecrootc_xfer_to_livecrootc(:)
    real(r8), pointer :: deadcrootc_xfer_to_deadcrootc(:)
    real(r8), pointer :: leafn_xfer_to_leafn(:)
    real(r8), pointer :: frootn_xfer_to_frootn(:)
    real(r8), pointer :: livestemn_xfer_to_livestemn(:)
    real(r8), pointer :: deadstemn_xfer_to_deadstemn(:)
    real(r8), pointer :: livecrootn_xfer_to_livecrootn(:)
    real(r8), pointer :: deadcrootn_xfer_to_deadcrootn(:)
    real(r8), pointer :: leafc_xfer(:)      ! (gC/m2) leaf C transfer
    real(r8), pointer :: frootc_xfer(:)     ! (gC/m2) fine root C transfer
    real(r8), pointer :: livestemc_xfer(:)  ! (gC/m2) live stem C transfer
    real(r8), pointer :: deadstemc_xfer(:)  ! (gC/m2) dead stem C transfer
    real(r8), pointer :: livecrootc_xfer(:) ! (gC/m2) live coarse root C transfer
    real(r8), pointer :: deadcrootc_xfer(:) ! (gC/m2) dead coarse root C transfer
    real(r8), pointer :: leafn_xfer(:)      ! (gN/m2) leaf N transfer
    real(r8), pointer :: frootn_xfer(:)     ! (gN/m2) fine root N transfer
    real(r8), pointer :: livestemn_xfer(:)  ! (gN/m2) live stem N transfer
    real(r8), pointer :: deadstemn_xfer(:)  ! (gN/m2) dead stem N transfer
    real(r8), pointer :: livecrootn_xfer(:) ! (gN/m2) live coarse root N transfer
    real(r8), pointer :: deadcrootn_xfer(:) ! (gN/m2) dead coarse root N transfer
    real(r8), pointer :: leafc_storage_to_xfer(:)
    real(r8), pointer :: frootc_storage_to_xfer(:)
    real(r8), pointer :: livestemc_storage_to_xfer(:)
    real(r8), pointer :: deadstemc_storage_to_xfer(:)
    real(r8), pointer :: livecrootc_storage_to_xfer(:)
    real(r8), pointer :: deadcrootc_storage_to_xfer(:)
    real(r8), pointer :: gresp_storage_to_xfer(:)
    real(r8), pointer :: leafn_storage_to_xfer(:)
    real(r8), pointer :: frootn_storage_to_xfer(:)
    real(r8), pointer :: livestemn_storage_to_xfer(:)
    real(r8), pointer :: deadstemn_storage_to_xfer(:)
    real(r8), pointer :: livecrootn_storage_to_xfer(:)
    real(r8), pointer :: deadcrootn_storage_to_xfer(:)
   local pointers to implicit out scalars
   !OTHER LOCAL VARIABLES:
    real(r8),parameter :: secspqtrday = secspday / 4  ! seconds per quarter day
    integer :: c,p             ! indices
    integer :: fp              ! lake filter pft index
    real(r8):: dayspyr         ! days per year
    real(r8):: crit_onset_gdd  ! degree days for onset trigger
    real(r8):: soilt           ! temperature of top soil layer
    real(r8):: psi             ! water stress of top soil layer
    real(r8):: lat             !latitude (radians)
    real(r8):: temp            !temporary variable for daylength calculation



Erik Kluzek 2011-06-15