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: p2cARGUMENTS:
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 pftsCALLED 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 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