#include <misc.h> #include <preproc.h> module CNSummaryMod 1,1 #ifdef CN !----------------------------------------------------------------------- !BOP ! ! !MODULE: CNSummaryMod ! ! !DESCRIPTION: ! Module for carbon and nitrogen summary calculations ! ! !USES: use shr_kind_mod, only: r8 => shr_kind_r8 implicit none save private ! !PUBLIC MEMBER FUNCTIONS: public :: CSummary public :: NSummary ! ! !REVISION HISTORY: ! 4/23/2004: Created by Peter Thornton ! !EOP !----------------------------------------------------------------------- contains !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: CSummary ! ! !INTERFACE: subroutine CSummary(num_soilc, filter_soilc, num_soilp, filter_soilp) 1,15 ! ! !DESCRIPTION: ! On the radiation time step, perform pft and column-level carbon ! summary calculations ! ! !USES: use clmtype use pft2colMod, only: p2c use clm_varctl, only: iulog use shr_sys_mod, only: shr_sys_flush ! ! !ARGUMENTS: implicit none 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 CNEcosystemDyn ! ! !REVISION HISTORY: ! 12/9/03: Created by Peter Thornton ! ! !LOCAL VARIABLES: ! local pointers to implicit in scalars real(r8), pointer :: col_fire_closs(:) ! (gC/m2/s) total column-level fire C loss real(r8), pointer :: er(:) ! (gC/m2/s) total ecosystem respiration, autotrophic + heterotrophic real(r8), pointer :: hr(:) ! (gC/m2/s) total heterotrophic respiration real(r8), pointer :: litfire(:) ! (gC/m2/s) litter fire losses real(r8), pointer :: lithr(:) ! (gC/m2/s) litter heterotrophic respiration real(r8), pointer :: litr1_hr(:) real(r8), pointer :: litr2_hr(:) real(r8), pointer :: litr3_hr(:) real(r8), pointer :: m_cwdc_to_fire(:) real(r8), pointer :: m_litr1c_to_fire(:) real(r8), pointer :: m_litr2c_to_fire(:) real(r8), pointer :: m_litr3c_to_fire(:) real(r8), pointer :: nee(:) ! (gC/m2/s) net ecosystem exchange of carbon, includes fire, land-use, harvest, and hrv_xsmrpool flux, positive for source real(r8), pointer :: nep(:) ! (gC/m2/s) net ecosystem production, excludes fire, land-use, and harvest flux, positive for sink real(r8), pointer :: nbp(:) ! (gC/m2/s) net biome production, includes fire, land-use, and harvest flux, positive for sink real(r8), pointer :: col_ar(:) ! (gC/m2/s) autotrophic respiration (MR + GR) real(r8), pointer :: col_gpp(:) ! GPP flux before downregulation (gC/m2/s) real(r8), pointer :: col_npp(:) ! (gC/m2/s) net primary production real(r8), pointer :: col_pft_fire_closs(:) ! (gC/m2/s) total pft-level fire C loss real(r8), pointer :: col_litfall(:) ! (gC/m2/s) total pft-level litterfall C loss real(r8), pointer :: col_rr(:) ! (gC/m2/s) root respiration (fine root MR + total root GR) real(r8), pointer :: col_vegfire(:) ! (gC/m2/s) pft-level fire loss (obsolete, mark for removal) real(r8), pointer :: col_wood_harvestc(:) real(r8), pointer :: soil1_hr(:) real(r8), pointer :: soil2_hr(:) real(r8), pointer :: soil3_hr(:) real(r8), pointer :: soil4_hr(:) real(r8), pointer :: somfire(:) ! (gC/m2/s) soil organic matter fire losses real(r8), pointer :: somhr(:) ! (gC/m2/s) soil organic matter heterotrophic respiration real(r8), pointer :: sr(:) ! (gC/m2/s) total soil respiration (HR + root resp) real(r8), pointer :: totfire(:) ! (gC/m2/s) total ecosystem fire losses real(r8), pointer :: cwdc(:) ! (gC/m2) coarse woody debris C real(r8), pointer :: litr1c(:) ! (gC/m2) litter labile C real(r8), pointer :: litr2c(:) ! (gC/m2) litter cellulose C real(r8), pointer :: litr3c(:) ! (gC/m2) litter lignin C real(r8), pointer :: col_totpftc(:) ! (gC/m2) total pft-level carbon, including cpool real(r8), pointer :: col_totvegc(:) ! (gC/m2) total vegetation carbon, excluding cpool real(r8), pointer :: soil1c(:) ! (gC/m2) soil organic matter C (fast pool) real(r8), pointer :: soil2c(:) ! (gC/m2) soil organic matter C (medium pool) real(r8), pointer :: soil3c(:) ! (gC/m2) soil organic matter C (slow pool) real(r8), pointer :: soil4c(:) ! (gC/m2) soil organic matter C (slowest pool) real(r8), pointer :: col_ctrunc(:) ! (gC/m2) column-level sink for C truncation real(r8), pointer :: totcolc(:) ! (gC/m2) total column carbon, incl veg and cpool real(r8), pointer :: totecosysc(:) ! (gC/m2) total ecosystem carbon, incl veg but excl cpool real(r8), pointer :: totlitc(:) ! (gC/m2) total litter carbon real(r8), pointer :: totsomc(:) ! (gC/m2) total soil organic matter carbon real(r8), pointer :: agnpp(:) ! (gC/m2/s) aboveground NPP real(r8), pointer :: ar(:) ! (gC/m2/s) autotrophic respiration (MR + GR) real(r8), pointer :: bgnpp(:) ! (gC/m2/s) belowground NPP real(r8), pointer :: cpool_deadcroot_gr(:) real(r8), pointer :: cpool_deadcroot_storage_gr(:) real(r8), pointer :: cpool_deadstem_gr(:) real(r8), pointer :: cpool_deadstem_storage_gr(:) real(r8), pointer :: cpool_froot_gr(:) real(r8), pointer :: cpool_froot_storage_gr(:) real(r8), pointer :: cpool_leaf_gr(:) real(r8), pointer :: cpool_leaf_storage_gr(:) real(r8), pointer :: cpool_livecroot_gr(:) real(r8), pointer :: cpool_livecroot_storage_gr(:) real(r8), pointer :: cpool_livestem_gr(:) real(r8), pointer :: cpool_livestem_storage_gr(:) real(r8), pointer :: cpool_to_deadcrootc(:) real(r8), pointer :: cpool_to_deadstemc(:) real(r8), pointer :: cpool_to_frootc(:) real(r8), pointer :: cpool_to_leafc(:) real(r8), pointer :: cpool_to_livecrootc(:) real(r8), pointer :: cpool_to_livestemc(:) real(r8), pointer :: current_gr(:) ! (gC/m2/s) growth resp for new growth displayed in this timestep real(r8), pointer :: deadcrootc_xfer_to_deadcrootc(:) real(r8), pointer :: deadstemc_xfer_to_deadstemc(:) real(r8), pointer :: frootc_to_litter(:) real(r8), pointer :: frootc_xfer_to_frootc(:) real(r8), pointer :: froot_mr(:) real(r8), pointer :: gpp(:) !GPP flux before downregulation (gC/m2/s) real(r8), pointer :: gr(:) ! (gC/m2/s) total growth respiration real(r8), pointer :: leafc_to_litter(:) real(r8), pointer :: leafc_xfer_to_leafc(:) real(r8), pointer :: leaf_mr(:) real(r8), pointer :: litfall(:) ! (gC/m2/s) litterfall (leaves and fine roots) real(r8), pointer :: livecrootc_xfer_to_livecrootc(:) real(r8), pointer :: livecroot_mr(:) real(r8), pointer :: livestemc_xfer_to_livestemc(:) real(r8), pointer :: livestem_mr(:) real(r8), pointer :: m_deadcrootc_storage_to_fire(:) real(r8), pointer :: m_deadcrootc_storage_to_litter(:) real(r8), pointer :: m_deadcrootc_to_fire(:) real(r8), pointer :: m_deadcrootc_to_litter(:) real(r8), pointer :: m_deadcrootc_to_litter_fire(:) real(r8), pointer :: m_deadcrootc_xfer_to_fire(:) real(r8), pointer :: m_deadcrootc_xfer_to_litter(:) real(r8), pointer :: m_deadstemc_storage_to_fire(:) real(r8), pointer :: m_deadstemc_storage_to_litter(:) real(r8), pointer :: m_deadstemc_to_fire(:) real(r8), pointer :: m_deadstemc_to_litter(:) real(r8), pointer :: m_deadstemc_to_litter_fire(:) real(r8), pointer :: m_deadstemc_xfer_to_fire(:) real(r8), pointer :: m_deadstemc_xfer_to_litter(:) real(r8), pointer :: m_frootc_storage_to_fire(:) real(r8), pointer :: m_frootc_storage_to_litter(:) real(r8), pointer :: m_frootc_to_fire(:) real(r8), pointer :: m_frootc_to_litter(:) real(r8), pointer :: m_frootc_xfer_to_fire(:) real(r8), pointer :: m_frootc_xfer_to_litter(:) real(r8), pointer :: m_gresp_storage_to_fire(:) real(r8), pointer :: m_gresp_storage_to_litter(:) real(r8), pointer :: m_gresp_xfer_to_fire(:) real(r8), pointer :: m_gresp_xfer_to_litter(:) real(r8), pointer :: m_leafc_storage_to_fire(:) real(r8), pointer :: m_leafc_storage_to_litter(:) real(r8), pointer :: m_leafc_to_fire(:) real(r8), pointer :: m_leafc_to_litter(:) real(r8), pointer :: m_leafc_xfer_to_fire(:) real(r8), pointer :: m_leafc_xfer_to_litter(:) real(r8), pointer :: m_livecrootc_storage_to_fire(:) real(r8), pointer :: m_livecrootc_storage_to_litter(:) real(r8), pointer :: m_livecrootc_to_fire(:) real(r8), pointer :: m_livecrootc_to_litter(:) real(r8), pointer :: m_livecrootc_xfer_to_fire(:) real(r8), pointer :: m_livecrootc_xfer_to_litter(:) real(r8), pointer :: m_livestemc_storage_to_fire(:) real(r8), pointer :: m_livestemc_storage_to_litter(:) real(r8), pointer :: m_livestemc_to_fire(:) real(r8), pointer :: m_livestemc_to_litter(:) real(r8), pointer :: m_livestemc_xfer_to_fire(:) real(r8), pointer :: m_livestemc_xfer_to_litter(:) real(r8), pointer :: hrv_leafc_to_litter(:) real(r8), pointer :: hrv_leafc_storage_to_litter(:) real(r8), pointer :: hrv_leafc_xfer_to_litter(:) real(r8), pointer :: hrv_frootc_to_litter(:) real(r8), pointer :: hrv_frootc_storage_to_litter(:) real(r8), pointer :: hrv_frootc_xfer_to_litter(:) real(r8), pointer :: hrv_livestemc_to_litter(:) real(r8), pointer :: hrv_livestemc_storage_to_litter(:) real(r8), pointer :: hrv_livestemc_xfer_to_litter(:) real(r8), pointer :: hrv_deadstemc_to_prod10c(:) real(r8), pointer :: hrv_deadstemc_to_prod100c(:) real(r8), pointer :: hrv_deadstemc_storage_to_litter(:) real(r8), pointer :: hrv_deadstemc_xfer_to_litter(:) real(r8), pointer :: hrv_livecrootc_to_litter(:) real(r8), pointer :: hrv_livecrootc_storage_to_litter(:) real(r8), pointer :: hrv_livecrootc_xfer_to_litter(:) real(r8), pointer :: hrv_deadcrootc_to_litter(:) real(r8), pointer :: hrv_deadcrootc_storage_to_litter(:) real(r8), pointer :: hrv_deadcrootc_xfer_to_litter(:) real(r8), pointer :: hrv_gresp_storage_to_litter(:) real(r8), pointer :: hrv_gresp_xfer_to_litter(:) real(r8), pointer :: hrv_xsmrpool_to_atm(:) real(r8), pointer :: col_hrv_xsmrpool_to_atm(:) real(r8), pointer :: mr(:) ! (gC/m2/s) maintenance respiration real(r8), pointer :: npp(:) ! (gC/m2/s) net primary production real(r8), pointer :: pft_fire_closs(:) ! (gC/m2/s) total pft-level fire C loss real(r8), pointer :: psnshade_to_cpool(:) real(r8), pointer :: psnsun_to_cpool(:) real(r8), pointer :: rr(:) ! (gC/m2/s) root respiration (fine root MR + total root GR) real(r8), pointer :: storage_gr(:) ! (gC/m2/s) growth resp for growth sent to storage for later display real(r8), pointer :: transfer_deadcroot_gr(:) real(r8), pointer :: transfer_deadstem_gr(:) real(r8), pointer :: transfer_froot_gr(:) real(r8), pointer :: transfer_gr(:) ! (gC/m2/s) growth resp for transfer growth displayed in this timestep real(r8), pointer :: transfer_leaf_gr(:) real(r8), pointer :: transfer_livecroot_gr(:) real(r8), pointer :: transfer_livestem_gr(:) real(r8), pointer :: wood_harvestc(:) ! (gC/m2/s) pft-level wood harvest (to product pools) real(r8), pointer :: vegfire(:) ! (gC/m2/s) pft-level fire loss (obsolete, mark for removal) real(r8), pointer :: cpool(:) ! (gC/m2) temporary photosynthate C pool real(r8), pointer :: xsmrpool(:) ! (gC/m2) temporary photosynthate C pool real(r8), pointer :: pft_ctrunc(:) ! (gC/m2) pft-level sink for C truncation real(r8), pointer :: deadcrootc(:) ! (gC/m2) dead coarse root C real(r8), pointer :: deadcrootc_storage(:) ! (gC/m2) dead coarse root C storage real(r8), pointer :: deadcrootc_xfer(:) ! (gC/m2) dead coarse root C transfer real(r8), pointer :: deadstemc(:) ! (gC/m2) dead stem C real(r8), pointer :: deadstemc_storage(:) ! (gC/m2) dead stem C storage real(r8), pointer :: deadstemc_xfer(:) ! (gC/m2) dead stem C transfer real(r8), pointer :: dispvegc(:) ! (gC/m2) displayed veg carbon, excluding storage and cpool real(r8), pointer :: frootc(:) ! (gC/m2) fine root C real(r8), pointer :: frootc_storage(:) ! (gC/m2) fine root C storage real(r8), pointer :: frootc_xfer(:) ! (gC/m2) fine root C transfer real(r8), pointer :: gresp_storage(:) ! (gC/m2) growth respiration storage real(r8), pointer :: gresp_xfer(:) ! (gC/m2) growth respiration transfer real(r8), pointer :: leafc(:) ! (gC/m2) leaf C real(r8), pointer :: leafc_storage(:) ! (gC/m2) leaf C storage real(r8), pointer :: leafc_xfer(:) ! (gC/m2) leaf C transfer real(r8), pointer :: livecrootc(:) ! (gC/m2) live coarse root C real(r8), pointer :: livecrootc_storage(:) ! (gC/m2) live coarse root C storage real(r8), pointer :: livecrootc_xfer(:) ! (gC/m2) live coarse root C transfer real(r8), pointer :: livestemc(:) ! (gC/m2) live stem C real(r8), pointer :: livestemc_storage(:) ! (gC/m2) live stem C storage real(r8), pointer :: livestemc_xfer(:) ! (gC/m2) live stem C transfer real(r8), pointer :: storvegc(:) ! (gC/m2) stored vegetation carbon, excluding cpool real(r8), pointer :: totpftc(:) ! (gC/m2) total pft-level carbon, including cpool real(r8), pointer :: totvegc(:) ! (gC/m2) total vegetation carbon, excluding cpool real(r8), pointer :: tempsum_npp(:) ! temporary annual sum of NPP (gC/m2/yr) #if (defined CNDV) real(r8), pointer :: tempsum_litfall(:) !temporary annual sum of litfall (gC/m2/yr) #endif ! for landcover change real(r8), pointer :: landuseflux(:) ! (gC/m2/s) dwt_closs+product_closs real(r8), pointer :: landuptake(:) ! (gC/m2/s) nee-landuseflux real(r8), pointer :: dwt_closs(:) ! (gC/m2/s) total carbon loss from land cover conversion real(r8), pointer :: dwt_conv_cflux(:) ! (gC/m2/s) conversion C flux (immediate loss to atm) real(r8), pointer :: prod10c_loss(:) ! (gC/m2/s) loss from 10-yr wood product pool real(r8), pointer :: prod100c_loss(:) ! (gC/m2/s) loss from 100-yr wood product pool real(r8), pointer :: product_closs(:) ! (gC/m2/s) total wood product carbon loss real(r8), pointer :: seedc(:) ! (gC/m2) column-level pool for seeding new PFTs real(r8), pointer :: prod10c(:) ! (gC/m2) wood product C pool, 10-year lifespan real(r8), pointer :: prod100c(:) ! (gC/m2) wood product C pool, 100-year lifespan real(r8), pointer :: totprodc(:) ! (gC/m2) total wood product C #if (defined CLAMP) ! CLAMP real(r8), pointer :: frootc_alloc(:) ! fine root C allocation (gC/m2/s) real(r8), pointer :: frootc_loss(:) ! fine root C loss (gC/m2/s) real(r8), pointer :: leafc_alloc(:) ! leaf C allocation (gC/m2/s) real(r8), pointer :: leafc_loss(:) ! leaf C loss (gC/m2/s) real(r8), pointer :: woodc(:) ! wood C (gC/m2) real(r8), pointer :: woodc_alloc(:) ! wood C allocation (gC/m2/s) real(r8), pointer :: woodc_loss(:) ! wood C loss (gC/m2/s) real(r8), pointer :: cwdc_hr(:) ! coarse woody debris C heterotrophic respiration (gC/m2/s) real(r8), pointer :: cwdc_loss(:) ! coarse woody debris C loss (gC/m2/s) real(r8), pointer :: litterc_loss(:) ! litter C loss (gC/m2/s) real(r8), pointer :: litr1c_to_soil1c(:) ! litter1 C loss to soil1 (gC/m2/s) real(r8), pointer :: litr2c_to_soil2c(:) ! litter2 C loss to soil2 (gC/m2/s) real(r8), pointer :: litr3c_to_soil3c(:) ! litter3 C loss to soil3 (gC/m2/s) ! Added for CLAMP real(r8), pointer :: cwdc_to_litr2c(:) ! cwdc C to soil2 (gC/m2/s) real(r8), pointer :: cwdc_to_litr3c(:) ! cwdc C to soil3 (gC/m2/s) #endif ! ! ! local pointers to implicit in/out scalars ! ! ! local pointers to implicit out scalars ! ! ! !OTHER LOCAL VARIABLES: integer :: c,p ! indices integer :: fp,fc ! lake filter indices !EOP !----------------------------------------------------------------------- ! assign local pointers col_fire_closs => clm3%g%l%c%ccf%col_fire_closs er => clm3%g%l%c%ccf%er hr => clm3%g%l%c%ccf%hr litfire => clm3%g%l%c%ccf%litfire lithr => clm3%g%l%c%ccf%lithr litr1_hr => clm3%g%l%c%ccf%litr1_hr litr2_hr => clm3%g%l%c%ccf%litr2_hr litr3_hr => clm3%g%l%c%ccf%litr3_hr m_cwdc_to_fire => clm3%g%l%c%ccf%m_cwdc_to_fire m_litr1c_to_fire => clm3%g%l%c%ccf%m_litr1c_to_fire m_litr2c_to_fire => clm3%g%l%c%ccf%m_litr2c_to_fire m_litr3c_to_fire => clm3%g%l%c%ccf%m_litr3c_to_fire #if (defined CLAMP) ! Added for CLAMP cwdc_to_litr2c => clm3%g%l%c%ccf%cwdc_to_litr2c cwdc_to_litr3c => clm3%g%l%c%ccf%cwdc_to_litr3c ! CLAMP litr1c_to_soil1c => clm3%g%l%c%ccf%litr1c_to_soil1c litr2c_to_soil2c => clm3%g%l%c%ccf%litr2c_to_soil2c litr3c_to_soil3c => clm3%g%l%c%ccf%litr3c_to_soil3c #endif nee => clm3%g%l%c%ccf%nee nep => clm3%g%l%c%ccf%nep nbp => clm3%g%l%c%ccf%nbp col_ar => clm3%g%l%c%ccf%pcf_a%ar col_gpp => clm3%g%l%c%ccf%pcf_a%gpp col_npp => clm3%g%l%c%ccf%pcf_a%npp col_pft_fire_closs => clm3%g%l%c%ccf%pcf_a%pft_fire_closs col_litfall => clm3%g%l%c%ccf%pcf_a%litfall col_rr => clm3%g%l%c%ccf%pcf_a%rr col_vegfire => clm3%g%l%c%ccf%pcf_a%vegfire col_wood_harvestc => clm3%g%l%c%ccf%pcf_a%wood_harvestc soil1_hr => clm3%g%l%c%ccf%soil1_hr soil2_hr => clm3%g%l%c%ccf%soil2_hr soil3_hr => clm3%g%l%c%ccf%soil3_hr soil4_hr => clm3%g%l%c%ccf%soil4_hr somfire => clm3%g%l%c%ccf%somfire somhr => clm3%g%l%c%ccf%somhr sr => clm3%g%l%c%ccf%sr totfire => clm3%g%l%c%ccf%totfire #if (defined CLAMP) cwdc_hr => clm3%g%l%c%ccf%cwdc_hr cwdc_loss => clm3%g%l%c%ccf%cwdc_loss litterc_loss => clm3%g%l%c%ccf%litterc_loss #endif ! dynamic landcover pointers dwt_closs => clm3%g%l%c%ccf%dwt_closs landuseflux => clm3%g%l%c%ccf%landuseflux landuptake => clm3%g%l%c%ccf%landuptake dwt_conv_cflux => clm3%g%l%c%ccf%dwt_conv_cflux seedc => clm3%g%l%c%ccs%seedc ! wood product pointers prod10c_loss => clm3%g%l%c%ccf%prod10c_loss prod100c_loss => clm3%g%l%c%ccf%prod100c_loss product_closs => clm3%g%l%c%ccf%product_closs prod10c => clm3%g%l%c%ccs%prod10c prod100c => clm3%g%l%c%ccs%prod100c totprodc => clm3%g%l%c%ccs%totprodc cwdc => clm3%g%l%c%ccs%cwdc litr1c => clm3%g%l%c%ccs%litr1c litr2c => clm3%g%l%c%ccs%litr2c litr3c => clm3%g%l%c%ccs%litr3c col_totpftc => clm3%g%l%c%ccs%pcs_a%totpftc col_totvegc => clm3%g%l%c%ccs%pcs_a%totvegc soil1c => clm3%g%l%c%ccs%soil1c soil2c => clm3%g%l%c%ccs%soil2c soil3c => clm3%g%l%c%ccs%soil3c soil4c => clm3%g%l%c%ccs%soil4c col_ctrunc => clm3%g%l%c%ccs%col_ctrunc totcolc => clm3%g%l%c%ccs%totcolc totecosysc => clm3%g%l%c%ccs%totecosysc totlitc => clm3%g%l%c%ccs%totlitc totsomc => clm3%g%l%c%ccs%totsomc agnpp => clm3%g%l%c%p%pcf%agnpp ar => clm3%g%l%c%p%pcf%ar bgnpp => clm3%g%l%c%p%pcf%bgnpp cpool_deadcroot_gr => clm3%g%l%c%p%pcf%cpool_deadcroot_gr cpool_deadcroot_storage_gr => clm3%g%l%c%p%pcf%cpool_deadcroot_storage_gr cpool_deadstem_gr => clm3%g%l%c%p%pcf%cpool_deadstem_gr cpool_deadstem_storage_gr => clm3%g%l%c%p%pcf%cpool_deadstem_storage_gr cpool_froot_gr => clm3%g%l%c%p%pcf%cpool_froot_gr cpool_froot_storage_gr => clm3%g%l%c%p%pcf%cpool_froot_storage_gr cpool_leaf_gr => clm3%g%l%c%p%pcf%cpool_leaf_gr cpool_leaf_storage_gr => clm3%g%l%c%p%pcf%cpool_leaf_storage_gr cpool_livecroot_gr => clm3%g%l%c%p%pcf%cpool_livecroot_gr cpool_livecroot_storage_gr => clm3%g%l%c%p%pcf%cpool_livecroot_storage_gr cpool_livestem_gr => clm3%g%l%c%p%pcf%cpool_livestem_gr cpool_livestem_storage_gr => clm3%g%l%c%p%pcf%cpool_livestem_storage_gr cpool_to_deadcrootc => clm3%g%l%c%p%pcf%cpool_to_deadcrootc cpool_to_deadstemc => clm3%g%l%c%p%pcf%cpool_to_deadstemc cpool_to_frootc => clm3%g%l%c%p%pcf%cpool_to_frootc cpool_to_leafc => clm3%g%l%c%p%pcf%cpool_to_leafc cpool_to_livecrootc => clm3%g%l%c%p%pcf%cpool_to_livecrootc cpool_to_livestemc => clm3%g%l%c%p%pcf%cpool_to_livestemc current_gr => clm3%g%l%c%p%pcf%current_gr deadcrootc_xfer_to_deadcrootc => clm3%g%l%c%p%pcf%deadcrootc_xfer_to_deadcrootc deadstemc_xfer_to_deadstemc => clm3%g%l%c%p%pcf%deadstemc_xfer_to_deadstemc frootc_to_litter => clm3%g%l%c%p%pcf%frootc_to_litter frootc_xfer_to_frootc => clm3%g%l%c%p%pcf%frootc_xfer_to_frootc froot_mr => clm3%g%l%c%p%pcf%froot_mr gpp => clm3%g%l%c%p%pcf%gpp gr => clm3%g%l%c%p%pcf%gr leafc_to_litter => clm3%g%l%c%p%pcf%leafc_to_litter leafc_xfer_to_leafc => clm3%g%l%c%p%pcf%leafc_xfer_to_leafc leaf_mr => clm3%g%l%c%p%pcf%leaf_mr litfall => clm3%g%l%c%p%pcf%litfall livecrootc_xfer_to_livecrootc => clm3%g%l%c%p%pcf%livecrootc_xfer_to_livecrootc livecroot_mr => clm3%g%l%c%p%pcf%livecroot_mr livestemc_xfer_to_livestemc => clm3%g%l%c%p%pcf%livestemc_xfer_to_livestemc livestem_mr => clm3%g%l%c%p%pcf%livestem_mr m_deadcrootc_storage_to_fire => clm3%g%l%c%p%pcf%m_deadcrootc_storage_to_fire m_deadcrootc_storage_to_litter => clm3%g%l%c%p%pcf%m_deadcrootc_storage_to_litter m_deadcrootc_to_fire => clm3%g%l%c%p%pcf%m_deadcrootc_to_fire m_deadcrootc_to_litter => clm3%g%l%c%p%pcf%m_deadcrootc_to_litter m_deadcrootc_to_litter_fire => clm3%g%l%c%p%pcf%m_deadcrootc_to_litter_fire m_deadcrootc_xfer_to_fire => clm3%g%l%c%p%pcf%m_deadcrootc_xfer_to_fire m_deadcrootc_xfer_to_litter => clm3%g%l%c%p%pcf%m_deadcrootc_xfer_to_litter m_deadstemc_storage_to_fire => clm3%g%l%c%p%pcf%m_deadstemc_storage_to_fire m_deadstemc_storage_to_litter => clm3%g%l%c%p%pcf%m_deadstemc_storage_to_litter m_deadstemc_to_fire => clm3%g%l%c%p%pcf%m_deadstemc_to_fire m_deadstemc_to_litter => clm3%g%l%c%p%pcf%m_deadstemc_to_litter m_deadstemc_to_litter_fire => clm3%g%l%c%p%pcf%m_deadstemc_to_litter_fire m_deadstemc_xfer_to_fire => clm3%g%l%c%p%pcf%m_deadstemc_xfer_to_fire m_deadstemc_xfer_to_litter => clm3%g%l%c%p%pcf%m_deadstemc_xfer_to_litter m_frootc_storage_to_fire => clm3%g%l%c%p%pcf%m_frootc_storage_to_fire m_frootc_storage_to_litter => clm3%g%l%c%p%pcf%m_frootc_storage_to_litter m_frootc_to_fire => clm3%g%l%c%p%pcf%m_frootc_to_fire m_frootc_to_litter => clm3%g%l%c%p%pcf%m_frootc_to_litter m_frootc_xfer_to_fire => clm3%g%l%c%p%pcf%m_frootc_xfer_to_fire m_frootc_xfer_to_litter => clm3%g%l%c%p%pcf%m_frootc_xfer_to_litter m_gresp_storage_to_fire => clm3%g%l%c%p%pcf%m_gresp_storage_to_fire m_gresp_storage_to_litter => clm3%g%l%c%p%pcf%m_gresp_storage_to_litter m_gresp_xfer_to_fire => clm3%g%l%c%p%pcf%m_gresp_xfer_to_fire m_gresp_xfer_to_litter => clm3%g%l%c%p%pcf%m_gresp_xfer_to_litter m_leafc_storage_to_fire => clm3%g%l%c%p%pcf%m_leafc_storage_to_fire m_leafc_storage_to_litter => clm3%g%l%c%p%pcf%m_leafc_storage_to_litter m_leafc_to_fire => clm3%g%l%c%p%pcf%m_leafc_to_fire m_leafc_to_litter => clm3%g%l%c%p%pcf%m_leafc_to_litter m_leafc_xfer_to_fire => clm3%g%l%c%p%pcf%m_leafc_xfer_to_fire m_leafc_xfer_to_litter => clm3%g%l%c%p%pcf%m_leafc_xfer_to_litter m_livecrootc_storage_to_fire => clm3%g%l%c%p%pcf%m_livecrootc_storage_to_fire m_livecrootc_storage_to_litter => clm3%g%l%c%p%pcf%m_livecrootc_storage_to_litter m_livecrootc_to_fire => clm3%g%l%c%p%pcf%m_livecrootc_to_fire m_livecrootc_to_litter => clm3%g%l%c%p%pcf%m_livecrootc_to_litter m_livecrootc_xfer_to_fire => clm3%g%l%c%p%pcf%m_livecrootc_xfer_to_fire m_livecrootc_xfer_to_litter => clm3%g%l%c%p%pcf%m_livecrootc_xfer_to_litter m_livestemc_storage_to_fire => clm3%g%l%c%p%pcf%m_livestemc_storage_to_fire m_livestemc_storage_to_litter => clm3%g%l%c%p%pcf%m_livestemc_storage_to_litter m_livestemc_to_fire => clm3%g%l%c%p%pcf%m_livestemc_to_fire m_livestemc_to_litter => clm3%g%l%c%p%pcf%m_livestemc_to_litter m_livestemc_xfer_to_fire => clm3%g%l%c%p%pcf%m_livestemc_xfer_to_fire m_livestemc_xfer_to_litter => clm3%g%l%c%p%pcf%m_livestemc_xfer_to_litter hrv_leafc_to_litter => clm3%g%l%c%p%pcf%hrv_leafc_to_litter hrv_leafc_storage_to_litter => clm3%g%l%c%p%pcf%hrv_leafc_storage_to_litter hrv_leafc_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_leafc_xfer_to_litter hrv_frootc_to_litter => clm3%g%l%c%p%pcf%hrv_frootc_to_litter hrv_frootc_storage_to_litter => clm3%g%l%c%p%pcf%hrv_frootc_storage_to_litter hrv_frootc_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_frootc_xfer_to_litter hrv_livestemc_to_litter => clm3%g%l%c%p%pcf%hrv_livestemc_to_litter hrv_livestemc_storage_to_litter => clm3%g%l%c%p%pcf%hrv_livestemc_storage_to_litter hrv_livestemc_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_livestemc_xfer_to_litter hrv_deadstemc_to_prod10c => clm3%g%l%c%p%pcf%hrv_deadstemc_to_prod10c hrv_deadstemc_to_prod100c => clm3%g%l%c%p%pcf%hrv_deadstemc_to_prod100c hrv_deadstemc_storage_to_litter => clm3%g%l%c%p%pcf%hrv_deadstemc_storage_to_litter hrv_deadstemc_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_deadstemc_xfer_to_litter hrv_livecrootc_to_litter => clm3%g%l%c%p%pcf%hrv_livecrootc_to_litter hrv_livecrootc_storage_to_litter => clm3%g%l%c%p%pcf%hrv_livecrootc_storage_to_litter hrv_livecrootc_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_livecrootc_xfer_to_litter hrv_deadcrootc_to_litter => clm3%g%l%c%p%pcf%hrv_deadcrootc_to_litter hrv_deadcrootc_storage_to_litter => clm3%g%l%c%p%pcf%hrv_deadcrootc_storage_to_litter hrv_deadcrootc_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_deadcrootc_xfer_to_litter hrv_gresp_storage_to_litter => clm3%g%l%c%p%pcf%hrv_gresp_storage_to_litter hrv_gresp_xfer_to_litter => clm3%g%l%c%p%pcf%hrv_gresp_xfer_to_litter hrv_xsmrpool_to_atm => clm3%g%l%c%p%pcf%hrv_xsmrpool_to_atm col_hrv_xsmrpool_to_atm => clm3%g%l%c%ccf%pcf_a%hrv_xsmrpool_to_atm mr => clm3%g%l%c%p%pcf%mr npp => clm3%g%l%c%p%pcf%npp pft_fire_closs => clm3%g%l%c%p%pcf%pft_fire_closs psnshade_to_cpool => clm3%g%l%c%p%pcf%psnshade_to_cpool psnsun_to_cpool => clm3%g%l%c%p%pcf%psnsun_to_cpool rr => clm3%g%l%c%p%pcf%rr storage_gr => clm3%g%l%c%p%pcf%storage_gr transfer_deadcroot_gr => clm3%g%l%c%p%pcf%transfer_deadcroot_gr transfer_deadstem_gr => clm3%g%l%c%p%pcf%transfer_deadstem_gr transfer_froot_gr => clm3%g%l%c%p%pcf%transfer_froot_gr transfer_gr => clm3%g%l%c%p%pcf%transfer_gr transfer_leaf_gr => clm3%g%l%c%p%pcf%transfer_leaf_gr transfer_livecroot_gr => clm3%g%l%c%p%pcf%transfer_livecroot_gr transfer_livestem_gr => clm3%g%l%c%p%pcf%transfer_livestem_gr vegfire => clm3%g%l%c%p%pcf%vegfire wood_harvestc => clm3%g%l%c%p%pcf%wood_harvestc #if (defined CLAMP) !CLAMP frootc_alloc => clm3%g%l%c%p%pcf%frootc_alloc frootc_loss => clm3%g%l%c%p%pcf%frootc_loss leafc_alloc => clm3%g%l%c%p%pcf%leafc_alloc leafc_loss => clm3%g%l%c%p%pcf%leafc_loss woodc_alloc => clm3%g%l%c%p%pcf%woodc_alloc woodc_loss => clm3%g%l%c%p%pcf%woodc_loss #endif cpool => clm3%g%l%c%p%pcs%cpool xsmrpool => clm3%g%l%c%p%pcs%xsmrpool pft_ctrunc => clm3%g%l%c%p%pcs%pft_ctrunc deadcrootc => clm3%g%l%c%p%pcs%deadcrootc deadcrootc_storage => clm3%g%l%c%p%pcs%deadcrootc_storage deadcrootc_xfer => clm3%g%l%c%p%pcs%deadcrootc_xfer deadstemc => clm3%g%l%c%p%pcs%deadstemc deadstemc_storage => clm3%g%l%c%p%pcs%deadstemc_storage deadstemc_xfer => clm3%g%l%c%p%pcs%deadstemc_xfer dispvegc => clm3%g%l%c%p%pcs%dispvegc frootc => clm3%g%l%c%p%pcs%frootc frootc_storage => clm3%g%l%c%p%pcs%frootc_storage frootc_xfer => clm3%g%l%c%p%pcs%frootc_xfer gresp_storage => clm3%g%l%c%p%pcs%gresp_storage gresp_xfer => clm3%g%l%c%p%pcs%gresp_xfer leafc => clm3%g%l%c%p%pcs%leafc leafc_storage => clm3%g%l%c%p%pcs%leafc_storage leafc_xfer => clm3%g%l%c%p%pcs%leafc_xfer livecrootc => clm3%g%l%c%p%pcs%livecrootc livecrootc_storage => clm3%g%l%c%p%pcs%livecrootc_storage livecrootc_xfer => clm3%g%l%c%p%pcs%livecrootc_xfer livestemc => clm3%g%l%c%p%pcs%livestemc livestemc_storage => clm3%g%l%c%p%pcs%livestemc_storage livestemc_xfer => clm3%g%l%c%p%pcs%livestemc_xfer storvegc => clm3%g%l%c%p%pcs%storvegc totpftc => clm3%g%l%c%p%pcs%totpftc totvegc => clm3%g%l%c%p%pcs%totvegc #if (defined CLAMP) woodc => clm3%g%l%c%p%pcs%woodc #endif tempsum_npp => clm3%g%l%c%p%pepv%tempsum_npp #if (defined CNDV) tempsum_litfall => clm3%g%l%c%p%pepv%tempsum_litfall #endif ! pft loop do fp = 1,num_soilp p = filter_soilp(fp) ! calculate pft-level summary carbon fluxes and states ! gross primary production (GPP) gpp(p) = & psnsun_to_cpool(p) + & psnshade_to_cpool(p) ! maintenance respiration (MR) mr(p) = & leaf_mr(p) + & froot_mr(p) + & livestem_mr(p) + & livecroot_mr(p) ! growth respiration (GR) ! current GR is respired this time step for new growth displayed in this timestep current_gr(p) = & cpool_leaf_gr(p) + & cpool_froot_gr(p) + & cpool_livestem_gr(p) + & cpool_deadstem_gr(p) + & cpool_livecroot_gr(p) + & cpool_deadcroot_gr(p) ! transfer GR is respired this time step for transfer growth displayed in this timestep transfer_gr(p) = & transfer_leaf_gr(p) + & transfer_froot_gr(p) + & transfer_livestem_gr(p) + & transfer_deadstem_gr(p) + & transfer_livecroot_gr(p) + & transfer_deadcroot_gr(p) ! storage GR is respired this time step for growth sent to storage for later display storage_gr(p) = & cpool_leaf_storage_gr(p) + & cpool_froot_storage_gr(p) + & cpool_livestem_storage_gr(p) + & cpool_deadstem_storage_gr(p) + & cpool_livecroot_storage_gr(p) + & cpool_deadcroot_storage_gr(p) ! GR is the sum of current + transfer + storage GR gr(p) = & current_gr(p) + & transfer_gr(p) + & storage_gr(p) ! autotrophic respiration (AR) ar(p) = mr(p) + gr(p) ! root respiration (RR) rr(p) = & froot_mr(p) + & cpool_froot_gr(p) + & cpool_livecroot_gr(p) + & cpool_deadcroot_gr(p) + & transfer_froot_gr(p) + & transfer_livecroot_gr(p) + & transfer_deadcroot_gr(p) + & cpool_froot_storage_gr(p) + & cpool_livecroot_storage_gr(p) + & cpool_deadcroot_storage_gr(p) ! net primary production (NPP) npp(p) = gpp(p) - ar(p) ! update the annual NPP accumulator, for use in allocation code tempsum_npp(p) = tempsum_npp(p) + npp(p) ! aboveground NPP: leaf, live stem, dead stem (AGNPP) ! This is supposed to correspond as closely as possible to ! field measurements of AGNPP, so it ignores the storage pools ! and only treats the fluxes into displayed pools. agnpp(p) = & cpool_to_leafc(p) + & leafc_xfer_to_leafc(p) + & cpool_to_livestemc(p) + & livestemc_xfer_to_livestemc(p) + & cpool_to_deadstemc(p) + & deadstemc_xfer_to_deadstemc(p) ! belowground NPP: fine root, live coarse root, dead coarse root (BGNPP) ! This is supposed to correspond as closely as possible to ! field measurements of BGNPP, so it ignores the storage pools ! and only treats the fluxes into displayed pools. bgnpp(p) = & cpool_to_frootc(p) + & frootc_xfer_to_frootc(p) + & cpool_to_livecrootc(p) + & livecrootc_xfer_to_livecrootc(p) + & cpool_to_deadcrootc(p) + & deadcrootc_xfer_to_deadcrootc(p) ! litterfall (LITFALL) litfall(p) = & leafc_to_litter(p) + & frootc_to_litter(p) + & m_leafc_to_litter(p) + & m_leafc_storage_to_litter(p) + & m_leafc_xfer_to_litter(p) + & m_frootc_to_litter(p) + & m_frootc_storage_to_litter(p) + & m_frootc_xfer_to_litter(p) + & m_livestemc_to_litter(p) + & m_livestemc_storage_to_litter(p) + & m_livestemc_xfer_to_litter(p) + & m_deadstemc_to_litter(p) + & m_deadstemc_storage_to_litter(p) + & m_deadstemc_xfer_to_litter(p) + & m_livecrootc_to_litter(p) + & m_livecrootc_storage_to_litter(p) + & m_livecrootc_xfer_to_litter(p) + & m_deadcrootc_to_litter(p) + & m_deadcrootc_storage_to_litter(p) + & m_deadcrootc_xfer_to_litter(p) + & m_gresp_storage_to_litter(p) + & m_gresp_xfer_to_litter(p) + & m_deadstemc_to_litter_fire(p) + & m_deadcrootc_to_litter_fire(p) + & hrv_leafc_to_litter(p) + & hrv_leafc_storage_to_litter(p) + & hrv_leafc_xfer_to_litter(p) + & hrv_frootc_to_litter(p) + & hrv_frootc_storage_to_litter(p) + & hrv_frootc_xfer_to_litter(p) + & hrv_livestemc_to_litter(p) + & hrv_livestemc_storage_to_litter(p) + & hrv_livestemc_xfer_to_litter(p) + & hrv_deadstemc_storage_to_litter(p) + & hrv_deadstemc_xfer_to_litter(p) + & hrv_livecrootc_to_litter(p) + & hrv_livecrootc_storage_to_litter(p)+ & hrv_livecrootc_xfer_to_litter(p) + & hrv_deadcrootc_to_litter(p) + & hrv_deadcrootc_storage_to_litter(p)+ & hrv_deadcrootc_xfer_to_litter(p) + & hrv_gresp_storage_to_litter(p) + & hrv_gresp_xfer_to_litter(p) #if (defined CNDV) ! update the annual litfall accumulator, for use in mortality code tempsum_litfall(p) = tempsum_litfall(p) + leafc_to_litter(p) + frootc_to_litter(p) #endif ! pft-level fire losses (VEGFIRE) vegfire(p) = 0._r8 ! pft-level wood harvest wood_harvestc(p) = & hrv_deadstemc_to_prod10c(p) + & hrv_deadstemc_to_prod100c(p) ! pft-level carbon losses to fire pft_fire_closs(p) = & m_leafc_to_fire(p) + & m_leafc_storage_to_fire(p) + & m_leafc_xfer_to_fire(p) + & m_frootc_to_fire(p) + & m_frootc_storage_to_fire(p) + & m_frootc_xfer_to_fire(p) + & m_livestemc_to_fire(p) + & m_livestemc_storage_to_fire(p) + & m_livestemc_xfer_to_fire(p) + & m_deadstemc_to_fire(p) + & m_deadstemc_storage_to_fire(p) + & m_deadstemc_xfer_to_fire(p) + & m_livecrootc_to_fire(p) + & m_livecrootc_storage_to_fire(p) + & m_livecrootc_xfer_to_fire(p) + & m_deadcrootc_to_fire(p) + & m_deadcrootc_storage_to_fire(p) + & m_deadcrootc_xfer_to_fire(p) + & m_gresp_storage_to_fire(p) + & m_gresp_xfer_to_fire(p) ! displayed vegetation carbon, excluding storage and cpool (DISPVEGC) dispvegc(p) = & leafc(p) + & frootc(p) + & livestemc(p) + & deadstemc(p) + & livecrootc(p) + & deadcrootc(p) ! stored vegetation carbon, excluding cpool (STORVEGC) storvegc(p) = & cpool(p) + & leafc_storage(p) + & frootc_storage(p) + & livestemc_storage(p) + & deadstemc_storage(p) + & livecrootc_storage(p) + & deadcrootc_storage(p) + & leafc_xfer(p) + & frootc_xfer(p) + & livestemc_xfer(p) + & deadstemc_xfer(p) + & livecrootc_xfer(p) + & deadcrootc_xfer(p) + & gresp_storage(p) + & gresp_xfer(p) ! total vegetation carbon, excluding cpool (TOTVEGC) totvegc(p) = dispvegc(p) + storvegc(p) ! total pft-level carbon, including xsmrpool, ctrunc totpftc(p) = totvegc(p) + xsmrpool(p) + pft_ctrunc(p) #if (defined CLAMP) ! new summary variables for CLAMP ! (FROOTC_ALLOC) - fine root C allocation frootc_alloc(p) = & frootc_xfer_to_frootc(p) + & cpool_to_frootc(p) ! (FROOTC_LOSS) - fine root C loss frootc_loss(p) = & m_frootc_to_litter(p) + & m_frootc_to_fire(p) + & hrv_frootc_to_litter(p) + & frootc_to_litter(p) ! (LEAFC_ALLOC) - leaf C allocation leafc_alloc(p) = & leafc_xfer_to_leafc(p) + & cpool_to_leafc(p) ! (LEAFC_LOSS) - leaf C loss leafc_loss(p) = & m_leafc_to_litter(p) + & m_leafc_to_fire(p) + & hrv_leafc_to_litter(p) + & leafc_to_litter(p) ! (WOODC) - wood C woodc(p) = & deadstemc(p) + & livestemc(p) + & deadcrootc(p) + & livecrootc(p) ! (WOODC_ALLOC) - wood C allocation woodc_alloc(p) = & livestemc_xfer_to_livestemc(p) + & deadstemc_xfer_to_deadstemc(p) + & livecrootc_xfer_to_livecrootc(p) + & deadcrootc_xfer_to_deadcrootc(p) + & cpool_to_livestemc(p) + & cpool_to_deadstemc(p) + & cpool_to_livecrootc(p) + & cpool_to_deadcrootc(p) ! (WOODC_LOSS) - wood C loss woodc_loss(p) = & m_livestemc_to_litter(p) + & m_deadstemc_to_litter(p) + & m_livecrootc_to_litter(p) + & m_deadcrootc_to_litter(p) + & m_livestemc_to_fire(p) + & m_deadstemc_to_fire(p) + & m_livecrootc_to_fire(p) + & m_deadcrootc_to_fire(p) + & hrv_livestemc_to_litter(p) + & hrv_livestemc_storage_to_litter(p) + & hrv_livestemc_xfer_to_litter(p) + & hrv_deadstemc_to_prod10c(p) + & hrv_deadstemc_to_prod100c(p) + & hrv_deadstemc_storage_to_litter(p) + & hrv_deadstemc_xfer_to_litter(p) + & hrv_livecrootc_to_litter(p) + & hrv_livecrootc_storage_to_litter(p)+ & hrv_livecrootc_xfer_to_litter(p) + & hrv_deadcrootc_to_litter(p) + & hrv_deadcrootc_storage_to_litter(p)+ & hrv_deadcrootc_xfer_to_litter(p) #endif end do ! end of pfts loop ! use p2c routine to get selected column-average pft-level fluxes and states call p2c(num_soilc, filter_soilc, gpp, col_gpp) call p2c(num_soilc, filter_soilc, ar, col_ar) call p2c(num_soilc, filter_soilc, rr, col_rr) call p2c(num_soilc, filter_soilc, npp, col_npp) call p2c(num_soilc, filter_soilc, vegfire, col_vegfire) call p2c(num_soilc, filter_soilc, wood_harvestc, col_wood_harvestc) call p2c(num_soilc, filter_soilc, totvegc, col_totvegc) call p2c(num_soilc, filter_soilc, totpftc, col_totpftc) call p2c(num_soilc, filter_soilc, pft_fire_closs, col_pft_fire_closs) call p2c(num_soilc, filter_soilc, litfall, col_litfall) call p2c(num_soilc, filter_soilc, hrv_xsmrpool_to_atm, col_hrv_xsmrpool_to_atm) ! column loop do fc = 1,num_soilc c = filter_soilc(fc) ! litter heterotrophic respiration (LITHR) lithr(c) = & litr1_hr(c) + & litr2_hr(c) + & litr3_hr(c) ! soil organic matter heterotrophic respiration (SOMHR) somhr(c) = & soil1_hr(c) + & soil2_hr(c) + & soil3_hr(c) + & soil4_hr(c) ! total heterotrophic respiration (HR) hr(c) = lithr(c) + somhr(c) ! total soil respiration, heterotrophic + root respiration (SR) sr(c) = col_rr(c) + hr(c) ! total ecosystem respiration, autotrophic + heterotrophic (ER) er(c) = col_ar(c) + hr(c) ! litter fire losses (LITFIRE) litfire(c) = 0._r8 ! total wood product loss product_closs(c) = & prod10c_loss(c) + & prod100c_loss(c) ! soil organic matter fire losses (SOMFIRE) somfire(c) = 0._r8 ! total ecosystem fire losses (TOTFIRE) totfire(c) = & litfire(c) + & somfire(c) + & col_vegfire(c) ! column-level carbon losses to fire, including pft losses col_fire_closs(c) = & m_litr1c_to_fire(c) + & m_litr2c_to_fire(c) + & m_litr3c_to_fire(c) + & m_cwdc_to_fire(c) + & col_pft_fire_closs(c) ! column-level carbon losses due to landcover change dwt_closs(c) = & dwt_conv_cflux(c) ! net ecosystem production, excludes fire flux, landcover change, and loss from wood products, positive for sink (NEP) nep(c) = col_gpp(c) - er(c) ! net biome production of carbon, includes depletion from: fire flux, landcover change flux, and loss ! from wood products pools, positive for sink (NBP) nbp(c) = nep(c) - col_fire_closs(c) - dwt_closs(c) - product_closs(c) ! net ecosystem exchange of carbon, includes fire flux, landcover change flux, loss ! from wood products pools, and hrv_xsmrpool flux, positive for source (NEE) nee(c) = -nep(c) + col_fire_closs(c) + dwt_closs(c) + product_closs(c) + col_hrv_xsmrpool_to_atm(c) ! land use flux and land uptake landuseflux(c) = dwt_closs(c) + product_closs(c) landuptake(c) = nee(c) - landuseflux(c) ! total litter carbon (TOTLITC) totlitc(c) = & litr1c(c) + & litr2c(c) + & litr3c(c) ! total soil organic matter carbon (TOTSOMC) totsomc(c) = & soil1c(c) + & soil2c(c) + & soil3c(c) + & soil4c(c) ! total wood product carbon totprodc(c) = & prod10c(c) + & prod100c(c) ! total ecosystem carbon, including veg but excluding cpool (TOTECOSYSC) totecosysc(c) = & cwdc(c) + & totlitc(c) + & totsomc(c) + & totprodc(c) + & col_totvegc(c) ! total column carbon, including veg and cpool (TOTCOLC) ! adding col_ctrunc, seedc totcolc(c) = & col_totpftc(c) + & cwdc(c) + & totlitc(c) + & totsomc(c) + & totprodc(c) + & seedc(c) + & col_ctrunc(c) #if (defined CLAMP) ! new summary variables for CLAMP ! (CWDC_HR) - coarse woody debris heterotrophic respiration cwdc_hr(c) = 0._r8 ! (CWDC_LOSS) - coarse woody debris C loss cwdc_loss(c) = & m_cwdc_to_fire(c) + & cwdc_to_litr2c(c) + & cwdc_to_litr3c(c) ! (LITTERC_LOSS) - litter C loss litterc_loss(c) = & lithr(c) + & m_litr1c_to_fire(c) + & m_litr2c_to_fire(c) + & m_litr3c_to_fire(c) + & litr1c_to_soil1c(c) + & litr2c_to_soil2c(c) + & litr3c_to_soil3c(c) #endif end do ! end of columns loop end subroutine CSummary !----------------------------------------------------------------------- !----------------------------------------------------------------------- !BOP ! ! !IROUTINE: NSummary ! ! !INTERFACE: subroutine NSummary(num_soilc, filter_soilc, num_soilp, filter_soilp) 1,6 ! ! !DESCRIPTION: ! On the radiation time step, perform pft and column-level nitrogen ! summary calculations ! ! !USES: use clmtype use pft2colMod, only: p2c ! ! !ARGUMENTS: implicit none 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 CNEcosystemDyn ! ! !REVISION HISTORY: ! 6/28/04: Created by Peter Thornton ! ! !LOCAL VARIABLES: ! local pointers to implicit in scalars real(r8), pointer :: col_fire_nloss(:) ! (gN/m2/s) total column-level fire N loss real(r8), pointer :: col_wood_harvestn(:) real(r8), pointer :: denit(:) real(r8), pointer :: m_cwdn_to_fire(:) real(r8), pointer :: m_litr1n_to_fire(:) real(r8), pointer :: m_litr2n_to_fire(:) real(r8), pointer :: m_litr3n_to_fire(:) real(r8), pointer :: col_pft_fire_nloss(:) ! (gN/m2/s) total pft-level fire C loss real(r8), pointer :: sminn_to_denit_excess(:) real(r8), pointer :: sminn_to_denit_l1s1(:) real(r8), pointer :: sminn_to_denit_l2s2(:) real(r8), pointer :: sminn_to_denit_l3s3(:) real(r8), pointer :: sminn_to_denit_s1s2(:) real(r8), pointer :: sminn_to_denit_s2s3(:) real(r8), pointer :: sminn_to_denit_s3s4(:) real(r8), pointer :: sminn_to_denit_s4(:) real(r8), pointer :: cwdn(:) ! (gN/m2) coarse woody debris N real(r8), pointer :: litr1n(:) ! (gN/m2) litter labile N real(r8), pointer :: litr2n(:) ! (gN/m2) litter cellulose N real(r8), pointer :: litr3n(:) ! (gN/m2) litter lignin N real(r8), pointer :: col_totpftn(:) ! (gN/m2) total pft-level nitrogen real(r8), pointer :: col_totvegn(:) ! (gN/m2) total vegetation nitrogen real(r8), pointer :: sminn(:) ! (gN/m2) soil mineral N real(r8), pointer :: soil1n(:) ! (gN/m2) soil organic matter N (fast pool) real(r8), pointer :: soil2n(:) ! (gN/m2) soil organic matter N (medium pool) real(r8), pointer :: soil3n(:) ! (gN/m2) soil orgainc matter N (slow pool) real(r8), pointer :: soil4n(:) ! (gN/m2) soil orgainc matter N (slowest pool) real(r8), pointer :: col_ntrunc(:) ! (gN/m2) column-level sink for N truncation real(r8), pointer :: totcoln(:) ! (gN/m2) total column nitrogen, incl veg real(r8), pointer :: totecosysn(:) ! (gN/m2) total ecosystem nitrogen, incl veg real(r8), pointer :: totlitn(:) ! (gN/m2) total litter nitrogen real(r8), pointer :: totsomn(:) ! (gN/m2) total soil organic matter nitrogen real(r8), pointer :: m_deadcrootn_storage_to_fire(:) real(r8), pointer :: m_deadcrootn_to_fire(:) real(r8), pointer :: m_deadcrootn_xfer_to_fire(:) real(r8), pointer :: m_deadstemn_storage_to_fire(:) real(r8), pointer :: m_deadstemn_to_fire(:) real(r8), pointer :: m_deadstemn_xfer_to_fire(:) real(r8), pointer :: m_frootn_storage_to_fire(:) real(r8), pointer :: m_frootn_to_fire(:) real(r8), pointer :: m_frootn_xfer_to_fire(:) real(r8), pointer :: m_leafn_storage_to_fire(:) real(r8), pointer :: m_leafn_to_fire(:) real(r8), pointer :: m_leafn_xfer_to_fire(:) real(r8), pointer :: m_livecrootn_storage_to_fire(:) real(r8), pointer :: m_livecrootn_to_fire(:) real(r8), pointer :: m_livecrootn_xfer_to_fire(:) real(r8), pointer :: m_livestemn_storage_to_fire(:) real(r8), pointer :: m_livestemn_to_fire(:) real(r8), pointer :: m_livestemn_xfer_to_fire(:) real(r8), pointer :: m_retransn_to_fire(:) real(r8), pointer :: hrv_deadstemn_to_prod10n(:) real(r8), pointer :: hrv_deadstemn_to_prod100n(:) real(r8), pointer :: ndeploy(:) real(r8), pointer :: pft_fire_nloss(:) ! (gN/m2/s) total pft-level fire C loss real(r8), pointer :: retransn_to_npool(:) real(r8), pointer :: sminn_to_npool(:) real(r8), pointer :: deadcrootn(:) ! (gN/m2) dead coarse root N real(r8), pointer :: deadcrootn_storage(:) ! (gN/m2) dead coarse root N storage real(r8), pointer :: deadcrootn_xfer(:) ! (gN/m2) dead coarse root N transfer real(r8), pointer :: deadstemn(:) ! (gN/m2) dead stem N real(r8), pointer :: deadstemn_storage(:) ! (gN/m2) dead stem N storage real(r8), pointer :: deadstemn_xfer(:) ! (gN/m2) dead stem N transfer real(r8), pointer :: dispvegn(:) ! (gN/m2) displayed veg nitrogen, excluding storage real(r8), pointer :: frootn(:) ! (gN/m2) fine root N real(r8), pointer :: frootn_storage(:) ! (gN/m2) fine root N storage real(r8), pointer :: frootn_xfer(:) ! (gN/m2) fine root N transfer real(r8), pointer :: leafn(:) ! (gN/m2) leaf N real(r8), pointer :: leafn_storage(:) ! (gN/m2) leaf N storage real(r8), pointer :: leafn_xfer(:) ! (gN/m2) leaf N transfer real(r8), pointer :: livecrootn(:) ! (gN/m2) live coarse root N real(r8), pointer :: livecrootn_storage(:) ! (gN/m2) live coarse root N storage real(r8), pointer :: livecrootn_xfer(:) ! (gN/m2) live coarse root N transfer real(r8), pointer :: livestemn(:) ! (gN/m2) live stem N real(r8), pointer :: livestemn_storage(:) ! (gN/m2) live stem N storage real(r8), pointer :: livestemn_xfer(:) ! (gN/m2) live stem N transfer real(r8), pointer :: retransn(:) ! (gN/m2) plant pool of retranslocated N real(r8), pointer :: npool(:) ! (gN/m2) temporary plant N pool real(r8), pointer :: pft_ntrunc(:) ! (gN/m2) pft-level sink for N truncation real(r8), pointer :: storvegn(:) ! (gN/m2) stored vegetation nitrogen real(r8), pointer :: totpftn(:) ! (gN/m2) total pft-level nitrogen real(r8), pointer :: totvegn(:) ! (gN/m2) total vegetation nitrogen ! for landcover change real(r8), pointer :: wood_harvestn(:) ! total N losses to wood product pools (gN/m2/s) real(r8), pointer :: dwt_nloss(:) ! (gN/m2/s) total nitrogen loss from product pools and conversion real(r8), pointer :: dwt_conv_nflux(:) ! (gN/m2/s) conversion N flux (immediate loss to atm) real(r8), pointer :: seedn(:) ! (gN/m2) column-level pool for seeding new PFTs real(r8), pointer :: prod10n_loss(:) ! (gN/m2/s) loss from 10-yr wood product pool real(r8), pointer :: prod100n_loss(:) ! (gN/m2/s) loss from 100-yr wood product pool real(r8), pointer :: product_nloss(:) ! (gN/m2/s) total wood product nitrogen loss real(r8), pointer :: prod10n(:) ! (gN/m2) wood product N pool, 10-year lifespan real(r8), pointer :: prod100n(:) ! (gN/m2) wood product N pool, 100-year lifespan real(r8), pointer :: totprodn(:) ! (gN/m2) total wood product N ! ! local pointers to implicit in/out scalars ! ! local pointers to implicit out scalars ! ! !OTHER LOCAL VARIABLES: integer :: c,p ! indices integer :: fp,fc ! lake filter indices !EOP !----------------------------------------------------------------------- ! assign local pointers col_fire_nloss => clm3%g%l%c%cnf%col_fire_nloss denit => clm3%g%l%c%cnf%denit m_cwdn_to_fire => clm3%g%l%c%cnf%m_cwdn_to_fire m_litr1n_to_fire => clm3%g%l%c%cnf%m_litr1n_to_fire m_litr2n_to_fire => clm3%g%l%c%cnf%m_litr2n_to_fire m_litr3n_to_fire => clm3%g%l%c%cnf%m_litr3n_to_fire col_pft_fire_nloss => clm3%g%l%c%cnf%pnf_a%pft_fire_nloss sminn_to_denit_excess => clm3%g%l%c%cnf%sminn_to_denit_excess sminn_to_denit_l1s1 => clm3%g%l%c%cnf%sminn_to_denit_l1s1 sminn_to_denit_l2s2 => clm3%g%l%c%cnf%sminn_to_denit_l2s2 sminn_to_denit_l3s3 => clm3%g%l%c%cnf%sminn_to_denit_l3s3 sminn_to_denit_s1s2 => clm3%g%l%c%cnf%sminn_to_denit_s1s2 sminn_to_denit_s2s3 => clm3%g%l%c%cnf%sminn_to_denit_s2s3 sminn_to_denit_s3s4 => clm3%g%l%c%cnf%sminn_to_denit_s3s4 sminn_to_denit_s4 => clm3%g%l%c%cnf%sminn_to_denit_s4 cwdn => clm3%g%l%c%cns%cwdn litr1n => clm3%g%l%c%cns%litr1n litr2n => clm3%g%l%c%cns%litr2n litr3n => clm3%g%l%c%cns%litr3n col_totpftn => clm3%g%l%c%cns%pns_a%totpftn col_totvegn => clm3%g%l%c%cns%pns_a%totvegn sminn => clm3%g%l%c%cns%sminn col_ntrunc => clm3%g%l%c%cns%col_ntrunc soil1n => clm3%g%l%c%cns%soil1n soil2n => clm3%g%l%c%cns%soil2n soil3n => clm3%g%l%c%cns%soil3n soil4n => clm3%g%l%c%cns%soil4n totcoln => clm3%g%l%c%cns%totcoln totecosysn => clm3%g%l%c%cns%totecosysn totlitn => clm3%g%l%c%cns%totlitn totsomn => clm3%g%l%c%cns%totsomn m_deadcrootn_storage_to_fire => clm3%g%l%c%p%pnf%m_deadcrootn_storage_to_fire m_deadcrootn_to_fire => clm3%g%l%c%p%pnf%m_deadcrootn_to_fire m_deadcrootn_xfer_to_fire => clm3%g%l%c%p%pnf%m_deadcrootn_xfer_to_fire m_deadstemn_storage_to_fire => clm3%g%l%c%p%pnf%m_deadstemn_storage_to_fire m_deadstemn_to_fire => clm3%g%l%c%p%pnf%m_deadstemn_to_fire m_deadstemn_xfer_to_fire => clm3%g%l%c%p%pnf%m_deadstemn_xfer_to_fire m_frootn_storage_to_fire => clm3%g%l%c%p%pnf%m_frootn_storage_to_fire m_frootn_to_fire => clm3%g%l%c%p%pnf%m_frootn_to_fire m_frootn_xfer_to_fire => clm3%g%l%c%p%pnf%m_frootn_xfer_to_fire m_leafn_storage_to_fire => clm3%g%l%c%p%pnf%m_leafn_storage_to_fire m_leafn_to_fire => clm3%g%l%c%p%pnf%m_leafn_to_fire m_leafn_xfer_to_fire => clm3%g%l%c%p%pnf%m_leafn_xfer_to_fire m_livecrootn_storage_to_fire => clm3%g%l%c%p%pnf%m_livecrootn_storage_to_fire m_livecrootn_to_fire => clm3%g%l%c%p%pnf%m_livecrootn_to_fire m_livecrootn_xfer_to_fire => clm3%g%l%c%p%pnf%m_livecrootn_xfer_to_fire m_livestemn_storage_to_fire => clm3%g%l%c%p%pnf%m_livestemn_storage_to_fire m_livestemn_to_fire => clm3%g%l%c%p%pnf%m_livestemn_to_fire m_livestemn_xfer_to_fire => clm3%g%l%c%p%pnf%m_livestemn_xfer_to_fire m_retransn_to_fire => clm3%g%l%c%p%pnf%m_retransn_to_fire hrv_deadstemn_to_prod10n => clm3%g%l%c%p%pnf%hrv_deadstemn_to_prod10n hrv_deadstemn_to_prod100n => clm3%g%l%c%p%pnf%hrv_deadstemn_to_prod100n ndeploy => clm3%g%l%c%p%pnf%ndeploy pft_fire_nloss => clm3%g%l%c%p%pnf%pft_fire_nloss retransn_to_npool => clm3%g%l%c%p%pnf%retransn_to_npool sminn_to_npool => clm3%g%l%c%p%pnf%sminn_to_npool deadcrootn => clm3%g%l%c%p%pns%deadcrootn deadcrootn_storage => clm3%g%l%c%p%pns%deadcrootn_storage deadcrootn_xfer => clm3%g%l%c%p%pns%deadcrootn_xfer deadstemn => clm3%g%l%c%p%pns%deadstemn deadstemn_storage => clm3%g%l%c%p%pns%deadstemn_storage deadstemn_xfer => clm3%g%l%c%p%pns%deadstemn_xfer dispvegn => clm3%g%l%c%p%pns%dispvegn frootn => clm3%g%l%c%p%pns%frootn frootn_storage => clm3%g%l%c%p%pns%frootn_storage frootn_xfer => clm3%g%l%c%p%pns%frootn_xfer leafn => clm3%g%l%c%p%pns%leafn leafn_storage => clm3%g%l%c%p%pns%leafn_storage leafn_xfer => clm3%g%l%c%p%pns%leafn_xfer livecrootn => clm3%g%l%c%p%pns%livecrootn livecrootn_storage => clm3%g%l%c%p%pns%livecrootn_storage livecrootn_xfer => clm3%g%l%c%p%pns%livecrootn_xfer livestemn => clm3%g%l%c%p%pns%livestemn livestemn_storage => clm3%g%l%c%p%pns%livestemn_storage livestemn_xfer => clm3%g%l%c%p%pns%livestemn_xfer retransn => clm3%g%l%c%p%pns%retransn npool => clm3%g%l%c%p%pns%npool pft_ntrunc => clm3%g%l%c%p%pns%pft_ntrunc storvegn => clm3%g%l%c%p%pns%storvegn totpftn => clm3%g%l%c%p%pns%totpftn totvegn => clm3%g%l%c%p%pns%totvegn ! dynamic landcover pointers wood_harvestn => clm3%g%l%c%p%pnf%wood_harvestn col_wood_harvestn => clm3%g%l%c%cnf%pnf_a%wood_harvestn dwt_nloss => clm3%g%l%c%cnf%dwt_nloss dwt_conv_nflux => clm3%g%l%c%cnf%dwt_conv_nflux prod10n_loss => clm3%g%l%c%cnf%prod10n_loss prod100n_loss => clm3%g%l%c%cnf%prod100n_loss product_nloss => clm3%g%l%c%cnf%product_nloss seedn => clm3%g%l%c%cns%seedn prod10n => clm3%g%l%c%cns%prod10n prod100n => clm3%g%l%c%cns%prod100n totprodn => clm3%g%l%c%cns%totprodn ! pft loop do fp = 1,num_soilp p = filter_soilp(fp) ! calculate pft-level summary nitrogen fluxes and states ! total N deployment (from sminn and retranslocated N pool) (NDEPLOY) ndeploy(p) = & sminn_to_npool(p) + & retransn_to_npool(p) ! pft-level wood harvest wood_harvestn(p) = & hrv_deadstemn_to_prod10n(p) + & hrv_deadstemn_to_prod100n(p) ! total pft-level fire N losses pft_fire_nloss(p) = & m_leafn_to_fire(p) + & m_leafn_storage_to_fire(p) + & m_leafn_xfer_to_fire(p) + & m_frootn_to_fire(p) + & m_frootn_storage_to_fire(p) + & m_frootn_xfer_to_fire(p) + & m_livestemn_to_fire(p) + & m_livestemn_storage_to_fire(p) + & m_livestemn_xfer_to_fire(p) + & m_deadstemn_to_fire(p) + & m_deadstemn_storage_to_fire(p) + & m_deadstemn_xfer_to_fire(p) + & m_livecrootn_to_fire(p) + & m_livecrootn_storage_to_fire(p) + & m_livecrootn_xfer_to_fire(p) + & m_deadcrootn_to_fire(p) + & m_deadcrootn_storage_to_fire(p) + & m_deadcrootn_xfer_to_fire(p) + & m_retransn_to_fire(p) ! displayed vegetation nitrogen, excluding storage (DISPVEGN) dispvegn(p) = & leafn(p) + & frootn(p) + & livestemn(p) + & deadstemn(p) + & livecrootn(p) + & deadcrootn(p) ! stored vegetation nitrogen, including retranslocated N pool (STORVEGN) storvegn(p) = & leafn_storage(p) + & frootn_storage(p) + & livestemn_storage(p) + & deadstemn_storage(p) + & livecrootn_storage(p) + & deadcrootn_storage(p) + & leafn_xfer(p) + & frootn_xfer(p) + & livestemn_xfer(p) + & deadstemn_xfer(p) + & livecrootn_xfer(p) + & deadcrootn_xfer(p) + & npool(p) + & retransn(p) ! total vegetation nitrogen (TOTVEGN) totvegn(p) = dispvegn(p) + storvegn(p) ! total pft-level carbon (add pft_ntrunc) totpftn(p) = totvegn(p) + pft_ntrunc(p) end do ! end of pfts loop ! use p2c routine to get selected column-average pft-level fluxes and states call p2c(num_soilc, filter_soilc, pft_fire_nloss, col_pft_fire_nloss) call p2c(num_soilc, filter_soilc, wood_harvestn, col_wood_harvestn) call p2c(num_soilc, filter_soilc, totvegn, col_totvegn) call p2c(num_soilc, filter_soilc, totpftn, col_totpftn) ! column loop do fc = 1,num_soilc c = filter_soilc(fc) ! total N denitrification (DENIT) denit(c) = & sminn_to_denit_l1s1(c) + & sminn_to_denit_l2s2(c) + & sminn_to_denit_l3s3(c) + & sminn_to_denit_s1s2(c) + & sminn_to_denit_s2s3(c) + & sminn_to_denit_s3s4(c) + & sminn_to_denit_s4(c) + & sminn_to_denit_excess(c) ! total column-level fire N losses col_fire_nloss(c) = & m_litr1n_to_fire(c) + & m_litr2n_to_fire(c) + & m_litr3n_to_fire(c) + & m_cwdn_to_fire(c) + & col_pft_fire_nloss(c) ! column-level N losses due to landcover change dwt_nloss(c) = & dwt_conv_nflux(c) ! total wood product N loss product_nloss(c) = & prod10n_loss(c) + & prod100n_loss(c) ! total litter nitrogen (TOTLITN) totlitn(c) = & litr1n(c) + & litr2n(c) + & litr3n(c) ! total soil organic matter nitrogen (TOTSOMN) totsomn(c) = & soil1n(c) + & soil2n(c) + & soil3n(c) + & soil4n(c) ! total wood product nitrogen totprodn(c) = & prod10n(c) + & prod100n(c) ! total ecosystem nitrogen, including veg (TOTECOSYSN) totecosysn(c) = & cwdn(c) + & totlitn(c) + & totsomn(c) + & sminn(c) + & totprodn(c) + & col_totvegn(c) ! total column nitrogen, including pft (TOTCOLN) totcoln(c) = & col_totpftn(c) + & cwdn(c) + & totlitn(c) + & totsomn(c) + & sminn(c) + & totprodn(c) + & seedn(c) + & col_ntrunc(c) end do ! end of columns loop end subroutine NSummary !----------------------------------------------------------------------- #endif end module CNSummaryMod