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_colARGUMENTS:
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 filterCALLED 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