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.F90REVISION HISTORY:
8/5/03: Created by Peter Thornton 10/23/03, Peter Thornton: migrated to vector data structuresLOCAL 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