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

CNAllocation


INTERFACE:

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


USES:

    use clmtype
    use clm_varctl, only: iulog
    use shr_sys_mod, only: shr_sys_flush
    use pft2colMod, only: p2c
    use pftvarcon , only: npcropmin, declfact, bfact, aleaff, arootf, astemf, &
                          arooti, fleafi, allconsl, allconss, grperc, grpnow
    use clm_varcon, only: secspday, istsoil, istcrop
    use clm_varpar, only: max_pft_per_col
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
    integer, intent(in) :: num_pcropp      ! number of pfts in prognostic crop filter
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
    integer , pointer :: pfti(:)       ! initial pft index in landunit
    real(r8), pointer :: lgsf(:)       ! long growing season factor [0-1]
    real(r8), pointer :: xsmrpool(:)   ! (gC/m2) temporary photosynthate C pool
    real(r8), pointer :: retransn(:)   ! (gN/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(:)      ! (gN/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
    logical , pointer :: croplive(:)   ! flag, true if planted, not harvested
    integer , pointer :: peaklai(:)    ! 1: max allowed lai; 0: not at max
    real(r8), pointer :: gddmaturity(:)! gdd needed to harvest
    real(r8), pointer :: huileaf(:)    ! heat unit index needed from planting to leaf emergence
    real(r8), pointer :: huigrain(:)   ! same to reach vegetative maturity
    real(r8), pointer :: hui(:)        ! =gdd since planting (gddplant)
    real(r8), pointer :: leafout(:)    ! =gdd from top soil layer temperature
    real(r8), pointer :: aleafi(:)     ! saved allocation coefficient from phase 2
    real(r8), pointer :: astemi(:)     ! saved allocation coefficient from phase 2
    real(r8), pointer :: aleaf(:)      ! leaf allocation coefficient
    real(r8), pointer :: astem(:)      ! stem allocation coefficient
    real(r8), pointer :: graincn(:)    ! grain C:N (gC/gN)
   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(:)         ! allocation to growth respiration storage (gC/m2/s)
    real(r8), pointer :: retransn_to_npool(:)              ! deployment of retranslocated N (gN/m2/s)
    real(r8), pointer :: sminn_to_npool(:)                 ! deployment of soil mineral N uptake (gN/m2/s)
    real(r8), pointer :: cpool_to_grainc(:)                ! allocation to grain C (gC/m2/s)
    real(r8), pointer :: cpool_to_grainc_storage(:)        ! allocation to grain C storage (gC/m2/s)
    real(r8), pointer :: npool_to_grainn(:)                ! allocation to grain N (gN/m2/s)
    real(r8), pointer :: npool_to_grainn_storage(:)        ! allocation to grain N storage (gN/m2/s)
    real(r8), pointer :: npool_to_leafn(:)                 ! allocation to leaf N (gN/m2/s)
    real(r8), pointer :: npool_to_leafn_storage(:)         ! allocation to leaf N storage (gN/m2/s)
    real(r8), pointer :: npool_to_frootn(:)                ! allocation to fine root N (gN/m2/s)
    real(r8), pointer :: npool_to_frootn_storage(:)        ! allocation to fine root N storage (gN/m2/s)
    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,l,pi             !indices
    integer :: fp                   !lake filter pft index
    integer :: fc                   !lake filter column index
    integer :: nlimit               !flag for N limitation
    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):: 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):: curmr, curmr_ratio   !xsmrpool temporary variables
    real(r8) f5                     !grain allocation parameter
    real(r8) cng                    !C:N ratio for grain (= cnlw for now; slevis)
    real(r8) fleaf                  !fraction allocated to leaf



Erik Kluzek 2011-06-15