next up previous contents
Next: CNStressDecidPhenology Up: Fortran: Module Interface CNPhenologyMod Previous: CNEvergreenPhenology   Contents

CNSeasonDecidPhenology


INTERFACE:

 subroutine CNSeasonDecidPhenology (num_soilp, filter_soilp)
DESCRIPTION:

For coupled carbon-nitrogen code (CN). This routine handles the seasonal deciduous phenology code (temperate deciduous vegetation that has only one growing season per year).


USES:

    use shr_const_mod   , only: SHR_CONST_TKFRZ, SHR_CONST_PI
    use clm_varcon      , only: secspday
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/6/03: Created by Peter Thornton
   10/24/03, Peter Thornton: migrated to vector data structures
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 :: t_soisno(:,:)         ! soil temperature (Kelvin)  (-nlevsno+1:nlevgrnd)
    real(r8), pointer :: soilpsi(:,:)          ! soil water potential in each soil layer (MPa)
    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
    ! ecophysiological constants
    real(r8), pointer :: season_decid(:) ! binary flag for seasonal-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_gdd(:)       ! onset growing degree days
    real(r8), pointer :: offset_flag(:)     ! offset flag
    real(r8), pointer :: offset_counter(:)  ! offset counter (seconds)
    real(r8), pointer :: dayl(:)            ! daylength (seconds)
    real(r8), pointer :: prev_dayl(:)       ! daylength from previous albedo timestep (seconds)
    real(r8), pointer :: annavg_t2m(:)      ! annual average 2m air temperature (K)
    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 :: 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 :: 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(:)
 #if (defined CNDV)
    logical , pointer :: pftmayexist(:)     ! exclude seasonal decid pfts from tropics
 #endif
   local pointers to implicit out scalars
   !OTHER LOCAL VARIABLES:
    integer :: c,p            !indices
    integer :: fp             !lake filter pft index
    real(r8):: ws_flag        !winter-summer solstice flag (0 or 1)
    real(r8):: crit_onset_gdd !critical onset growing degree-day sum
    real(r8):: soilt
    real(r8):: lat            !latitude (radians)
    real(r8):: temp           !temporary variable for daylength calculation



Erik Kluzek 2011-06-15