next up previous contents
Next: CNOnsetGrowth 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_step_size
    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(:)      ! (kgC/m2) leaf C storage
    real(r8), pointer :: frootc_storage(:)     ! (kgC/m2) fine root C storage
    real(r8), pointer :: livestemc_storage(:)  ! (kgC/m2) live stem C storage
    real(r8), pointer :: deadstemc_storage(:)  ! (kgC/m2) dead stem C storage
    real(r8), pointer :: livecrootc_storage(:) ! (kgC/m2) live coarse root C storage
    real(r8), pointer :: deadcrootc_storage(:) ! (kgC/m2) dead coarse root C storage
    real(r8), pointer :: gresp_storage(:)      ! (kgC/m2) growth respiration storage
    real(r8), pointer :: leafn_storage(:)      ! (kgN/m2) leaf N storage
    real(r8), pointer :: frootn_storage(:)     ! (kgN/m2) fine root N storage
    real(r8), pointer :: livestemn_storage(:)  ! (kgN/m2) live stem N storage
    real(r8), pointer :: deadstemn_storage(:)  ! (kgN/m2) dead stem N storage
    real(r8), pointer :: livecrootn_storage(:) ! (kgN/m2) live coarse root N storage
    real(r8), pointer :: deadcrootn_storage(:) ! (kgN/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(:)      ! (kgC/m2) leaf C transfer
    real(r8), pointer :: frootc_xfer(:)     ! (kgC/m2) fine root C transfer
    real(r8), pointer :: livestemc_xfer(:)  ! (kgC/m2) live stem C transfer
    real(r8), pointer :: deadstemc_xfer(:)  ! (kgC/m2) dead stem C transfer
    real(r8), pointer :: livecrootc_xfer(:) ! (kgC/m2) live coarse root C transfer
    real(r8), pointer :: deadcrootc_xfer(:) ! (kgC/m2) dead coarse root C transfer
    real(r8), pointer :: leafn_xfer(:)      ! (kgN/m2) leaf N transfer
    real(r8), pointer :: frootn_xfer(:)     ! (kgN/m2) fine root N transfer
    real(r8), pointer :: livestemn_xfer(:)  ! (kgN/m2) live stem N transfer
    real(r8), pointer :: deadstemn_xfer(:)  ! (kgN/m2) dead stem N transfer
    real(r8), pointer :: livecrootn_xfer(:) ! (kgN/m2) live coarse root N transfer
    real(r8), pointer :: deadcrootn_xfer(:) ! (kgN/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:
    integer :: c,p             ! indices
    integer :: fp              ! lake filter pft index
    real(r8):: fracday         ! dtime as a fraction of day
    real(r8):: dt              ! radiation time step delta t (seconds)
    real(r8):: crit_onset_fdd  ! critical number of freezing days
    real(r8):: crit_onset_gdd  ! degree days for onset trigger
    real(r8):: crit_offset_fdd ! critical number of freezing degree days
                               ! to trigger offset
    real(r8):: crit_onset_swi  ! water stress days for offset trigger
    real(r8):: crit_offset_swi ! water stress days for offset trigger
    real(r8):: soilpsi_on      ! water potential for onset trigger (MPa)
    real(r8):: soilpsi_off     ! water potential for offset trigger (MPa)
    real(r8):: ndays_on        ! number of days to complete onset
    real(r8):: ndays_off       ! number of days to complete offset
    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
    real(r8):: fstor2tran      ! fraction of storage to move to transfer
                               ! on each onset



Erik Kluzek 2010-06-21