next up previous contents
Next: Fortran: Module Interface CNAnnualUpdateMod Up: Fortran: Module Interface CNAllocationMod Previous: Fortran: Module Interface CNAllocationMod   Contents

CNAllocation


INTERFACE:

 subroutine CNAllocation (lbp, ubp, lbc, ubc, &
        num_soilc, filter_soilc, num_soilp, filter_soilp)
DESCRIPTION:


USES:

    use clmtype
    use clm_varctl, only: iulog
    use shr_sys_mod, only: shr_sys_flush
    use clm_time_manager, only: get_step_size
    use pft2colMod, only: p2c
ARGUMENTS:
    implicit none
    integer, intent(in) :: lbp, ubp        ! pft-index bounds
    integer, intent(in) :: lbc, ubc        ! column-index bounds
    integer, intent(in) :: num_soilc       ! number of soil columns in filter
    integer, intent(in) :: filter_soilc(:) ! filter for soil columns
    integer, intent(in) :: num_soilp       ! number of soil pfts in filter
    integer, intent(in) :: filter_soilp(:) ! filter for soil pfts
CALLED FROM:
   subroutine CNdecompAlloc in module CNdecompMod.F90
REVISION HISTORY:
   8/5/03: Created by Peter Thornton
   10/23/03, Peter Thornton: migrated to vector data structures
LOCAL VARIABLES:
   local pointers to implicit in arrays
    ! pft level
    integer , pointer :: ivt(:)        ! pft vegetation type
    integer , pointer :: pcolumn(:)    ! pft's column index
    real(r8), pointer :: lgsf(:)       ! long growing season factor [0-1]
    real(r8), pointer :: xsmrpool(:)      ! (kgC/m2) temporary photosynthate C pool
    real(r8), pointer :: retransn(:)   ! (kgN/m2) plant pool of retranslocated N
    real(r8), pointer :: psnsun(:)     ! sunlit leaf-level photosynthesis (umol CO2 /m**2/ s)
    real(r8), pointer :: psnsha(:)     ! shaded leaf-level photosynthesis (umol CO2 /m**2/ s)
 #if (defined C13)
    real(r8), pointer :: c13_psnsun(:) ! C13 sunlit leaf-level photosynthesis (umol CO2 /m**2/ s)
    real(r8), pointer :: c13_psnsha(:) ! C13 shaded leaf-level photosynthesis (umol CO2 /m**2/ s)
 #endif
    real(r8), pointer :: laisun(:)     ! sunlit projected leaf area index
    real(r8), pointer :: laisha(:)     ! shaded projected leaf area index
    real(r8), pointer :: leaf_mr(:)
    real(r8), pointer :: froot_mr(:)
    real(r8), pointer :: livestem_mr(:)
    real(r8), pointer :: livecroot_mr(:)
    real(r8), pointer :: leaf_curmr(:)
    real(r8), pointer :: froot_curmr(:)
    real(r8), pointer :: livestem_curmr(:)
    real(r8), pointer :: livecroot_curmr(:)
    real(r8), pointer :: leaf_xsmr(:)
    real(r8), pointer :: froot_xsmr(:)
    real(r8), pointer :: livestem_xsmr(:)
    real(r8), pointer :: livecroot_xsmr(:)
    ! column level
    real(r8), pointer :: sminn(:)      ! (kgN/m2) soil mineral N
    ! ecophysiological constants
    real(r8), pointer :: woody(:)      ! binary flag for woody lifeform (1=woody, 0=not woody)
    real(r8), pointer :: froot_leaf(:) ! allocation parameter: new fine root C per new leaf C (gC/gC)
    real(r8), pointer :: croot_stem(:) ! allocation parameter: new coarse root C per new stem C (gC/gC)
    real(r8), pointer :: stem_leaf(:)  ! allocation parameter: new stem c per new leaf C (gC/gC)
    real(r8), pointer :: flivewd(:)    ! allocation parameter: fraction of new wood that is live (phloem and ray parenchyma) (no units)
    real(r8), pointer :: leafcn(:)     ! leaf C:N (gC/gN)
    real(r8), pointer :: frootcn(:)    ! fine root C:N (gC/gN)
    real(r8), pointer :: livewdcn(:)   ! live wood (phloem and ray parenchyma) C:N (gC/gN)
    real(r8), pointer :: deadwdcn(:)   ! dead wood (xylem and heartwood) C:N (gC/gN)
    real(r8), pointer :: fcur2(:)      ! allocation parameter: fraction of allocation that goes to currently displayed growth, remainder to storage
    integer, pointer :: plandunit(:)   ! index into landunit level quantities
    integer, pointer :: clandunit(:)   ! index into landunit level quantities
    integer , pointer :: itypelun(:)   ! landunit type
   local pointers to implicit in/out arrays
    ! pft level
    real(r8), pointer :: gpp(:)                   ! GPP flux before downregulation (gC/m2/s)
    real(r8), pointer :: availc(:)                ! C flux available for allocation (gC/m2/s)
    real(r8), pointer :: xsmrpool_recover(:)         ! C flux assigned to recovery of negative cpool (gC/m2/s)
    real(r8), pointer :: c_allometry(:)           ! C allocation index (DIM)
    real(r8), pointer :: n_allometry(:)           ! N allocation index (DIM)
    real(r8), pointer :: plant_ndemand(:)         ! N flux required to support initial GPP (gN/m2/s)
    real(r8), pointer :: tempsum_potential_gpp(:) ! temporary annual sum of potential GPP 
    real(r8), pointer :: tempmax_retransn(:)      ! temporary annual max of retranslocated N pool (gN/m2)
    real(r8), pointer :: annsum_potential_gpp(:)  ! annual sum of potential GPP
    real(r8), pointer :: avail_retransn(:)        ! N flux available from retranslocation pool (gN/m2/s)
    real(r8), pointer :: annmax_retransn(:)       ! annual max of retranslocated N pool
    real(r8), pointer :: plant_nalloc(:)          ! total allocated N flux (gN/m2/s)
    real(r8), pointer :: plant_calloc(:)          ! total allocated C flux (gC/m2/s)
    real(r8), pointer :: excess_cflux(:)          ! C flux not allocated due to downregulation (gC/m2/s)
    real(r8), pointer :: downreg(:)               ! fractional reduction in GPP due to N limitation (DIM)
    real(r8), pointer :: annsum_npp(:)            ! annual sum of NPP, for wood allocation
    real(r8), pointer :: cpool_to_xsmrpool(:)
    real(r8), pointer :: psnsun_to_cpool(:)
    real(r8), pointer :: psnshade_to_cpool(:)
 #if (defined C13)
    real(r8), pointer :: c13_psnsun_to_cpool(:)
    real(r8), pointer :: c13_psnshade_to_cpool(:)
 #endif
    real(r8), pointer :: cpool_to_leafc(:)
    real(r8), pointer :: cpool_to_leafc_storage(:)
    real(r8), pointer :: cpool_to_frootc(:)
    real(r8), pointer :: cpool_to_frootc_storage(:)
    real(r8), pointer :: cpool_to_livestemc(:)
    real(r8), pointer :: cpool_to_livestemc_storage(:)
    real(r8), pointer :: cpool_to_deadstemc(:)
    real(r8), pointer :: cpool_to_deadstemc_storage(:)
    real(r8), pointer :: cpool_to_livecrootc(:)
    real(r8), pointer :: cpool_to_livecrootc_storage(:)
    real(r8), pointer :: cpool_to_deadcrootc(:)
    real(r8), pointer :: cpool_to_deadcrootc_storage(:)
    real(r8), pointer :: cpool_to_gresp_storage(:)
    real(r8), pointer :: retransn_to_npool(:)
    real(r8), pointer :: sminn_to_npool(:)
    real(r8), pointer :: npool_to_leafn(:)
    real(r8), pointer :: npool_to_leafn_storage(:)
    real(r8), pointer :: npool_to_frootn(:)
    real(r8), pointer :: npool_to_frootn_storage(:)
    real(r8), pointer :: npool_to_livestemn(:)
    real(r8), pointer :: npool_to_livestemn_storage(:)
    real(r8), pointer :: npool_to_deadstemn(:)
    real(r8), pointer :: npool_to_deadstemn_storage(:)
    real(r8), pointer :: npool_to_livecrootn(:)
    real(r8), pointer :: npool_to_livecrootn_storage(:)
    real(r8), pointer :: npool_to_deadcrootn(:)
    real(r8), pointer :: npool_to_deadcrootn_storage(:)
    ! column level
    real(r8), pointer :: fpi(:) ! fraction of potential immobilization (no units)
    real(r8), pointer :: fpg(:) ! fraction of potential gpp (no units)
    real(r8), pointer :: potential_immob(:)
    real(r8), pointer :: actual_immob(:)
    real(r8), pointer :: sminn_to_plant(:)
    real(r8), pointer :: sminn_to_denit_excess(:)
    real(r8), pointer :: supplement_to_sminn(:)
   local pointers to implicit out arrays
   !OTHER LOCAL VARIABLES:
    integer :: c,p                  !indices
    integer :: fp                   !lake filter pft index
    integer :: fc                   !lake filter column index
    real(r8):: dt                   !decomp timestep (seconds)
    integer :: nlimit               !flag for N limitation
    real(r8), pointer:: col_plant_ndemand(:)    !column-level plant N demand
    real(r8):: dayscrecover         !number of days to recover negative cpool
    real(r8):: mr                   !maintenance respiration (gC/m2/s)
    real(r8):: f1,f2,f3,f4,g1,g2    !allocation parameters
    real(r8):: cnl,cnfr,cnlw,cndw   !C:N ratios for leaf, fine root, and wood
    real(r8):: grperc, grpnow       !growth respirarion parameters
    real(r8):: fcur                 !fraction of current psn displayed as growth
    real(r8):: sum_ndemand          !total column N demand (gN/m2/s)
    real(r8):: gresp_storage        !temporary variable for growth resp to storage
    real(r8):: nlc                  !temporary variable for total new leaf carbon allocation
    real(r8):: bdnr                 !bulk denitrification rate (1/s)
    real(r8):: curmr, curmr_ratio   !xsmrpool temporary variables



Erik Kluzek 2010-06-21