From 358d5b0b2765b023b46e003eb3b922bacfec53a7 Mon Sep 17 00:00:00 2001 From: Sulman B N Date: Tue, 10 Mar 2020 16:26:30 -0400 Subject: [PATCH] Add rhizomes to all plants including graminoids --- .../elm/src/biogeochem/AllocationMod.F90 | 19 +++- .../src/biogeochem/CarbonStateUpdate1Mod.F90 | 26 ++--- .../elm/src/biogeochem/GrowthRespMod.F90 | 11 +- .../elm/src/biogeochem/MaintenanceRespMod.F90 | 2 + .../biogeochem/NitrogenStateUpdate1Mod.F90 | 16 +-- .../src/biogeochem/PhenologyFluxLimitMod.F90 | 100 +++++++++--------- .../elm/src/biogeochem/PhenologyMod.F90 | 63 +++++------ .../biogeochem/PhosphorusStateUpdate1Mod.F90 | 18 ++-- 8 files changed, 138 insertions(+), 117 deletions(-) diff --git a/components/elm/src/biogeochem/AllocationMod.F90 b/components/elm/src/biogeochem/AllocationMod.F90 index 44847b47974..eb392453561 100644 --- a/components/elm/src/biogeochem/AllocationMod.F90 +++ b/components/elm/src/biogeochem/AllocationMod.F90 @@ -844,9 +844,12 @@ subroutine Allocation1_PlantNPDemand (bounds, num_soilc, filter_soilc, num_soilp (f3*(1._r8-f4)*(1._r8+f2))/cpdw else - c_allometry(p) = 1._r8+g1+f1+f1*g1 + c_allometry(p) = (1._r8+g1)*(1._r8+f1+f3) ! B Sulman: Let graminoids allocate rhizomes (all livecroot) using stem_leaf parameter n_allometry(p) = 1._r8/cnl + f1/cnfr + if(cnlw>0) n_allometry(p) = n_allometry(p) + f3/cnlw ! Rhizomes p_allometry(p) = 1._r8/cpl + f1/cpfr + if(cplw>0) p_allometry(p) = p_allometry(p) + f3/cplw ! Rhizomes + end if plant_ndemand(p) = availc(p)*(n_allometry(p)/c_allometry(p)) plant_pdemand(p) = availc(p)*(p_allometry(p)/c_allometry(p)) @@ -2601,6 +2604,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , & cpool_to_livecrootc_storage(p) = nlc * f2 * f3 * f4 * (1._r8 - fcur) cpool_to_deadcrootc(p) = nlc * f2 * f3 * (1._r8 - f4) * fcur cpool_to_deadcrootc_storage(p) = nlc * f2 * f3 * (1._r8 - f4) * (1._r8 - fcur) + else + ! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman) + cpool_to_livecrootc(p) = nlc * f3 * fcur + cpool_to_livecrootc_storage(p) = nlc * f3 * (1._r8 - fcur) end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops cpool_to_livestemc(p) = nlc * f3 * f4 * fcur @@ -2654,6 +2661,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , & npool_to_livecrootn_storage(p) = (nlc * f2 * f3 * f4 / cnlw) * (1._r8 - fcur) npool_to_deadcrootn(p) = (nlc * f2 * f3 * (1._r8 - f4) / cndw) * fcur npool_to_deadcrootn_storage(p) = (nlc * f2 * f3 * (1._r8 - f4) / cndw) * (1._r8 - fcur) + elseif (cnlw > 0.0_r8) then + ! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman) + npool_to_livecrootn(p) = (nlc * f3 / cnlw ) * fcur + npool_to_livecrootn_storage(p) = (nlc * f3 / cnlw ) * (1._r8 - fcur) end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops cng = graincn(ivt(p)) @@ -2698,6 +2709,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , & ppool_to_livecrootp_storage(p) = (nlc * f2 * f3 * f4 / cplw) * (1._r8 -fcur) ppool_to_deadcrootp(p) = (nlc * f2 * f3 * (1._r8 - f4) / cpdw)* fcur ppool_to_deadcrootp_storage(p) = (nlc * f2 * f3 * (1._r8 - f4) / cpdw)* (1._r8 - fcur) + elseif (cplw > 0.0_r8) then + ! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman) + ppool_to_livecrootp(p) = (nlc * f3 / cplw ) * fcur + ppool_to_livecrootp_storage(p) = (nlc * f3 / cplw ) * (1._r8 - fcur) end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops cpg = graincp(ivt(p)) @@ -2723,10 +2738,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , & ! growth is assigned here. gresp_storage = cpool_to_leafc_storage(p) + cpool_to_frootc_storage(p) + gresp_storage = gresp_storage + cpool_to_livecrootc_storage(p) !Graminoid rhizomes (B Sulman) if (woody(ivt(p)) == 1._r8) then gresp_storage = gresp_storage + cpool_to_livestemc_storage(p) gresp_storage = gresp_storage + cpool_to_deadstemc_storage(p) - gresp_storage = gresp_storage + cpool_to_livecrootc_storage(p) gresp_storage = gresp_storage + cpool_to_deadcrootc_storage(p) end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops diff --git a/components/elm/src/biogeochem/CarbonStateUpdate1Mod.F90 b/components/elm/src/biogeochem/CarbonStateUpdate1Mod.F90 index 057fd0e56b6..45f8c779b0c 100644 --- a/components/elm/src/biogeochem/CarbonStateUpdate1Mod.F90 +++ b/components/elm/src/biogeochem/CarbonStateUpdate1Mod.F90 @@ -274,13 +274,13 @@ subroutine CarbonStateUpdate1(bounds, & veg_cs%leafc_xfer(p) = veg_cs%leafc_xfer(p) - veg_cf%leafc_xfer_to_leafc(p)*dt veg_cs%frootc(p) = veg_cs%frootc(p) + veg_cf%frootc_xfer_to_frootc(p)*dt veg_cs%frootc_xfer(p) = veg_cs%frootc_xfer(p) - veg_cf%frootc_xfer_to_frootc(p)*dt + veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%livecrootc_xfer_to_livecrootc(p)*dt + veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) - veg_cf%livecrootc_xfer_to_livecrootc(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%livestemc(p) = veg_cs%livestemc(p) + veg_cf%livestemc_xfer_to_livestemc(p)*dt veg_cs%livestemc_xfer(p) = veg_cs%livestemc_xfer(p) - veg_cf%livestemc_xfer_to_livestemc(p)*dt veg_cs%deadstemc(p) = veg_cs%deadstemc(p) + veg_cf%deadstemc_xfer_to_deadstemc(p)*dt veg_cs%deadstemc_xfer(p) = veg_cs%deadstemc_xfer(p) - veg_cf%deadstemc_xfer_to_deadstemc(p)*dt - veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%livecrootc_xfer_to_livecrootc(p)*dt - veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) - veg_cf%livecrootc_xfer_to_livecrootc(p)*dt veg_cs%deadcrootc(p) = veg_cs%deadcrootc(p) + veg_cf%deadcrootc_xfer_to_deadcrootc(p)*dt veg_cs%deadcrootc_xfer(p) = veg_cs%deadcrootc_xfer(p) - veg_cf%deadcrootc_xfer_to_deadcrootc(p)*dt end if @@ -315,9 +315,9 @@ subroutine CarbonStateUpdate1(bounds, & veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_xsmrpool(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%leaf_curmr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%froot_curmr(p)*dt + veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livecroot_curmr(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livestem_curmr(p)*dt - veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livecroot_curmr(p)*dt end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livestem_curmr(p)*dt @@ -330,12 +330,12 @@ subroutine CarbonStateUpdate1(bounds, & veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) + veg_cf%cpool_to_xsmrpool(p)*dt veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%leaf_xsmr(p)*dt veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%froot_xsmr(p)*dt + veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livecroot_xsmr(p)*dt if (nu_com .ne. 'RD') then veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%xsmrpool_turnover(p)*dt end if if (woody(ivt(p)) == 1._r8) then veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livestem_xsmr(p)*dt - veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livecroot_xsmr(p)*dt end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livestem_xsmr(p)*dt @@ -355,6 +355,10 @@ subroutine CarbonStateUpdate1(bounds, & veg_cs%frootc(p) = veg_cs%frootc(p) + veg_cf%cpool_to_frootc(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_frootc_storage(p)*dt veg_cs%frootc_storage(p) = veg_cs%frootc_storage(p) + veg_cf%cpool_to_frootc_storage(p)*dt + veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc(p)*dt + veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%cpool_to_livecrootc(p)*dt + veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc_storage(p)*dt + veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p) + veg_cf%cpool_to_livecrootc_storage(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livestemc(p)*dt veg_cs%livestemc(p) = veg_cs%livestemc(p) + veg_cf%cpool_to_livestemc(p)*dt @@ -364,10 +368,6 @@ subroutine CarbonStateUpdate1(bounds, & veg_cs%deadstemc(p) = veg_cs%deadstemc(p) + veg_cf%cpool_to_deadstemc(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_deadstemc_storage(p)*dt veg_cs%deadstemc_storage(p) = veg_cs%deadstemc_storage(p) + veg_cf%cpool_to_deadstemc_storage(p)*dt - veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc(p)*dt - veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%cpool_to_livecrootc(p)*dt - veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc_storage(p)*dt - veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p) + veg_cf%cpool_to_livecrootc_storage(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_deadcrootc(p)*dt veg_cs%deadcrootc(p) = veg_cs%deadcrootc(p) + veg_cf%cpool_to_deadcrootc(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_deadcrootc_storage(p)*dt @@ -387,10 +387,10 @@ subroutine CarbonStateUpdate1(bounds, & ! growth respiration fluxes for current growth veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_leaf_gr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_froot_gr(p)*dt + veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_gr(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livestem_gr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadstem_gr(p)*dt - veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_gr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadcroot_gr(p)*dt end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops @@ -401,10 +401,10 @@ subroutine CarbonStateUpdate1(bounds, & ! growth respiration for transfer growth veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_leaf_gr(p)*dt veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_froot_gr(p)*dt + veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_livecroot_gr(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_livestem_gr(p)*dt veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_deadstem_gr(p)*dt - veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_livecroot_gr(p)*dt veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_deadcroot_gr(p)*dt end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops @@ -415,10 +415,10 @@ subroutine CarbonStateUpdate1(bounds, & ! growth respiration at time of storage veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_leaf_storage_gr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_froot_storage_gr(p)*dt + veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_storage_gr(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livestem_storage_gr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadstem_storage_gr(p)*dt - veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_storage_gr(p)*dt veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadcroot_storage_gr(p)*dt end if if (ivt(p) >= npcropmin) then ! skip 2 generic crops @@ -435,13 +435,13 @@ subroutine CarbonStateUpdate1(bounds, & veg_cs%leafc_xfer(p) = veg_cs%leafc_xfer(p) + veg_cf%leafc_storage_to_xfer(p)*dt veg_cs%frootc_storage(p) = veg_cs%frootc_storage(p) - veg_cf%frootc_storage_to_xfer(p)*dt veg_cs%frootc_xfer(p) = veg_cs%frootc_xfer(p) + veg_cf%frootc_storage_to_xfer(p)*dt + veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p)- veg_cf%livecrootc_storage_to_xfer(p)*dt + veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) + veg_cf%livecrootc_storage_to_xfer(p)*dt if (woody(ivt(p)) == 1._r8) then veg_cs%livestemc_storage(p) = veg_cs%livestemc_storage(p) - veg_cf%livestemc_storage_to_xfer(p)*dt veg_cs%livestemc_xfer(p) = veg_cs%livestemc_xfer(p) + veg_cf%livestemc_storage_to_xfer(p)*dt veg_cs%deadstemc_storage(p) = veg_cs%deadstemc_storage(p) - veg_cf%deadstemc_storage_to_xfer(p)*dt veg_cs%deadstemc_xfer(p) = veg_cs%deadstemc_xfer(p) + veg_cf%deadstemc_storage_to_xfer(p)*dt - veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p)- veg_cf%livecrootc_storage_to_xfer(p)*dt - veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) + veg_cf%livecrootc_storage_to_xfer(p)*dt veg_cs%deadcrootc_storage(p) = veg_cs%deadcrootc_storage(p)- veg_cf%deadcrootc_storage_to_xfer(p)*dt veg_cs%deadcrootc_xfer(p) = veg_cs%deadcrootc_xfer(p) + veg_cf%deadcrootc_storage_to_xfer(p)*dt veg_cs%gresp_storage(p) = veg_cs%gresp_storage(p) - veg_cf%gresp_storage_to_xfer(p)*dt diff --git a/components/elm/src/biogeochem/GrowthRespMod.F90 b/components/elm/src/biogeochem/GrowthRespMod.F90 index f499dedb2e0..a38f4870b8a 100644 --- a/components/elm/src/biogeochem/GrowthRespMod.F90 +++ b/components/elm/src/biogeochem/GrowthRespMod.F90 @@ -133,6 +133,12 @@ subroutine GrowthResp(num_soilp, filter_soilp) transfer_froot_gr(p) = frootc_xfer_to_frootc(p) * grperc(ivt(p)) * & (1._r8 - grpnow(ivt(p))) + ! B. Sulman: Moved out of woody to allow graminoid rhizomes + cpool_livecroot_gr(p) = cpool_to_livecrootc(p) * grperc(ivt(p)) + cpool_livecroot_storage_gr(p) = cpool_to_livecrootc_storage(p) * & + grperc(ivt(p)) * grpnow(ivt(p)) + transfer_livecroot_gr(p) = livecrootc_xfer_to_livecrootc(p) * & + grperc(ivt(p)) * (1._r8 - grpnow(ivt(p))) if (woody(ivt(p)) == 1._r8) then cpool_livestem_gr(p) = cpool_to_livestemc(p) * grperc(ivt(p)) cpool_livestem_storage_gr(p) = cpool_to_livestemc_storage(p) * & @@ -144,11 +150,6 @@ subroutine GrowthResp(num_soilp, filter_soilp) grperc(ivt(p)) * grpnow(ivt(p)) transfer_deadstem_gr(p) = deadstemc_xfer_to_deadstemc(p) * & grperc(ivt(p)) * (1._r8 - grpnow(ivt(p))) - cpool_livecroot_gr(p) = cpool_to_livecrootc(p) * grperc(ivt(p)) - cpool_livecroot_storage_gr(p) = cpool_to_livecrootc_storage(p) * & - grperc(ivt(p)) * grpnow(ivt(p)) - transfer_livecroot_gr(p) = livecrootc_xfer_to_livecrootc(p) * & - grperc(ivt(p)) * (1._r8 - grpnow(ivt(p))) cpool_deadcroot_gr(p) = cpool_to_deadcrootc(p) * grperc(ivt(p)) cpool_deadcroot_storage_gr(p) = cpool_to_deadcrootc_storage(p) * & grperc(ivt(p)) * grpnow(ivt(p)) diff --git a/components/elm/src/biogeochem/MaintenanceRespMod.F90 b/components/elm/src/biogeochem/MaintenanceRespMod.F90 index ea9e063cf79..5a763ba95e6 100644 --- a/components/elm/src/biogeochem/MaintenanceRespMod.F90 +++ b/components/elm/src/biogeochem/MaintenanceRespMod.F90 @@ -236,6 +236,8 @@ subroutine MaintenanceResp(bounds, & else if (ivt(p) >= npcropmin .and. livestemn(p) .gt. 0._r8) then livestem_mr(p) = livestemn(p)*br_mr*tc grain_mr(p) = grainn(p)*br_mr*tc + else ! Graminoid rhizomes + livecroot_mr(p) = livecrootn(p)*br_mr*tc end if if (br_xr(ivt(p)) .gt. 1e-9_r8) then !xr(p) = cpool(p) * br_xr(ivt(p)) * tc diff --git a/components/elm/src/biogeochem/NitrogenStateUpdate1Mod.F90 b/components/elm/src/biogeochem/NitrogenStateUpdate1Mod.F90 index 1eefadd7bea..4e4682ad766 100644 --- a/components/elm/src/biogeochem/NitrogenStateUpdate1Mod.F90 +++ b/components/elm/src/biogeochem/NitrogenStateUpdate1Mod.F90 @@ -285,14 +285,14 @@ subroutine NitrogenStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp veg_ns%leafn_xfer(p) = veg_ns%leafn_xfer(p) - veg_nf%leafn_xfer_to_leafn(p)*dt veg_ns%frootn(p) = veg_ns%frootn(p) + veg_nf%frootn_xfer_to_frootn(p)*dt veg_ns%frootn_xfer(p) = veg_ns%frootn_xfer(p) - veg_nf%frootn_xfer_to_frootn(p)*dt + veg_ns%livecrootn(p) = veg_ns%livecrootn(p) + veg_nf%livecrootn_xfer_to_livecrootn(p)*dt + veg_ns%livecrootn_xfer(p) = veg_ns%livecrootn_xfer(p) - veg_nf%livecrootn_xfer_to_livecrootn(p)*dt if (woody(ivt(p)) == 1.0_r8) then veg_ns%livestemn(p) = veg_ns%livestemn(p) + veg_nf%livestemn_xfer_to_livestemn(p)*dt veg_ns%livestemn_xfer(p) = veg_ns%livestemn_xfer(p) - veg_nf%livestemn_xfer_to_livestemn(p)*dt veg_ns%deadstemn(p) = veg_ns%deadstemn(p) + veg_nf%deadstemn_xfer_to_deadstemn(p)*dt veg_ns%deadstemn_xfer(p) = veg_ns%deadstemn_xfer(p) - veg_nf%deadstemn_xfer_to_deadstemn(p)*dt - veg_ns%livecrootn(p) = veg_ns%livecrootn(p) + veg_nf%livecrootn_xfer_to_livecrootn(p)*dt - veg_ns%livecrootn_xfer(p) = veg_ns%livecrootn_xfer(p) - veg_nf%livecrootn_xfer_to_livecrootn(p)*dt veg_ns%deadcrootn(p) = veg_ns%deadcrootn(p) + veg_nf%deadcrootn_xfer_to_deadcrootn(p)*dt veg_ns%deadcrootn_xfer(p) = veg_ns%deadcrootn_xfer(p) - veg_nf%deadcrootn_xfer_to_deadcrootn(p)*dt end if @@ -353,6 +353,10 @@ subroutine NitrogenStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp veg_ns%frootn(p) = veg_ns%frootn(p) + veg_nf%npool_to_frootn(p)*dt veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_frootn_storage(p)*dt veg_ns%frootn_storage(p) = veg_ns%frootn_storage(p) + veg_nf%npool_to_frootn_storage(p)*dt + veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_livecrootn(p)*dt + veg_ns%livecrootn(p) = veg_ns%livecrootn(p) + veg_nf%npool_to_livecrootn(p)*dt + veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_livecrootn_storage(p)*dt + veg_ns%livecrootn_storage(p) = veg_ns%livecrootn_storage(p) + veg_nf%npool_to_livecrootn_storage(p)*dt if (woody(ivt(p)) == 1._r8) then veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_livestemn(p)*dt @@ -363,10 +367,6 @@ subroutine NitrogenStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp veg_ns%deadstemn(p) = veg_ns%deadstemn(p) + veg_nf%npool_to_deadstemn(p)*dt veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_deadstemn_storage(p)*dt veg_ns%deadstemn_storage(p) = veg_ns%deadstemn_storage(p) + veg_nf%npool_to_deadstemn_storage(p)*dt - veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_livecrootn(p)*dt - veg_ns%livecrootn(p) = veg_ns%livecrootn(p) + veg_nf%npool_to_livecrootn(p)*dt - veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_livecrootn_storage(p)*dt - veg_ns%livecrootn_storage(p) = veg_ns%livecrootn_storage(p) + veg_nf%npool_to_livecrootn_storage(p)*dt veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_deadcrootn(p)*dt veg_ns%deadcrootn(p) = veg_ns%deadcrootn(p) + veg_nf%npool_to_deadcrootn(p)*dt veg_ns%npool(p) = veg_ns%npool(p) - veg_nf%npool_to_deadcrootn_storage(p)*dt @@ -389,14 +389,14 @@ subroutine NitrogenStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soilp veg_ns%leafn_xfer(p) = veg_ns%leafn_xfer(p) + veg_nf%leafn_storage_to_xfer(p)*dt veg_ns%frootn_storage(p) = veg_ns%frootn_storage(p) - veg_nf%frootn_storage_to_xfer(p)*dt veg_ns%frootn_xfer(p) = veg_ns%frootn_xfer(p) + veg_nf%frootn_storage_to_xfer(p)*dt + veg_ns%livecrootn_storage(p) = veg_ns%livecrootn_storage(p) - veg_nf%livecrootn_storage_to_xfer(p)*dt + veg_ns%livecrootn_xfer(p) = veg_ns%livecrootn_xfer(p) + veg_nf%livecrootn_storage_to_xfer(p)*dt if (woody(ivt(p)) == 1._r8) then veg_ns%livestemn_storage(p) = veg_ns%livestemn_storage(p) - veg_nf%livestemn_storage_to_xfer(p)*dt veg_ns%livestemn_xfer(p) = veg_ns%livestemn_xfer(p) + veg_nf%livestemn_storage_to_xfer(p)*dt veg_ns%deadstemn_storage(p) = veg_ns%deadstemn_storage(p) - veg_nf%deadstemn_storage_to_xfer(p)*dt veg_ns%deadstemn_xfer(p) = veg_ns%deadstemn_xfer(p) + veg_nf%deadstemn_storage_to_xfer(p)*dt - veg_ns%livecrootn_storage(p) = veg_ns%livecrootn_storage(p) - veg_nf%livecrootn_storage_to_xfer(p)*dt - veg_ns%livecrootn_xfer(p) = veg_ns%livecrootn_xfer(p) + veg_nf%livecrootn_storage_to_xfer(p)*dt veg_ns%deadcrootn_storage(p) = veg_ns%deadcrootn_storage(p) - veg_nf%deadcrootn_storage_to_xfer(p)*dt veg_ns%deadcrootn_xfer(p) = veg_ns%deadcrootn_xfer(p) + veg_nf%deadcrootn_storage_to_xfer(p)*dt end if diff --git a/components/elm/src/biogeochem/PhenologyFluxLimitMod.F90 b/components/elm/src/biogeochem/PhenologyFluxLimitMod.F90 index b6d05460c0b..e8c0fe30011 100644 --- a/components/elm/src/biogeochem/PhenologyFluxLimitMod.F90 +++ b/components/elm/src/biogeochem/PhenologyFluxLimitMod.F90 @@ -630,13 +630,13 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& ystates(s_frootc) = veg_cs%frootc(p) ystates(s_frootc_xfer) = veg_cs%frootc_xfer(p) ystates(s_frootc_storage) = veg_cs%frootc_storage(p) + ystates(s_livecrootc) = veg_cs%livecrootc(p) + ystates(s_livecrootc_xfer) = veg_cs%livecrootc_xfer(p) + ystates(s_livecrootc_storage) = veg_cs%livecrootc_storage(p) if (woody(ivt(p)) == 1._r8) then ystates(s_livestemc) = veg_cs%livestemc(p) ystates(s_livestemc_xfer) = veg_cs%livestemc_xfer(p) ystates(s_livestemc_storage) = veg_cs%livestemc_storage(p) - ystates(s_livecrootc) = veg_cs%livecrootc(p) - ystates(s_livecrootc_xfer) = veg_cs%livecrootc_xfer(p) - ystates(s_livecrootc_storage) = veg_cs%livecrootc_storage(p) ystates(s_deadstemc) = veg_cs%deadstemc(p) ystates(s_deadstemc_xfer) = veg_cs%deadstemc_xfer(p) ystates(s_deadstemc_storage) = veg_cs%deadstemc_storage(p) @@ -661,18 +661,18 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& + veg_cf%cpool_leaf_gr(p) & + veg_cf%cpool_froot_gr(p) & + veg_cf%cpool_leaf_storage_gr(p) & - + veg_cf%cpool_froot_storage_gr(p) + + veg_cf%cpool_froot_storage_gr(p) & + + veg_cf%livecroot_curmr(p) & + + veg_cf%cpool_livecroot_gr(p) & + + veg_cf%cpool_livecroot_storage_gr(p) if (woody(ivt(p)) == 1._r8) then ar_p = ar_p & + veg_cf%livestem_curmr(p) & - + veg_cf%livecroot_curmr(p) & + veg_cf%cpool_livestem_gr(p) & + veg_cf%cpool_deadstem_gr(p) & - + veg_cf%cpool_livecroot_gr(p) & + veg_cf%cpool_deadcroot_gr(p) & + veg_cf%cpool_livestem_storage_gr(p) & + veg_cf%cpool_deadstem_storage_gr(p) & - + veg_cf%cpool_livecroot_storage_gr(p) & + veg_cf%cpool_deadcroot_storage_gr(p) endif if (ivt(p) >= npcropmin) then @@ -692,13 +692,16 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& rfluxes(f_cpool_to_xsmrpool) = veg_cf%cpool_to_xsmrpool(p) rfluxes(f_cpool_to_gresp_storage) = veg_cf%cpool_to_gresp_storage(p) rfluxes(f_cpool_to_ar) = ar_p + rfluxes(f_cpool_to_livecrootc) = veg_cf%cpool_to_livecrootc(p) + rfluxes(f_cpool_to_livecrootc_storage) = veg_cf%cpool_to_livecrootc_storage(p) + rfluxes(f_livecrootc_xfer_to_livecrootc)= veg_cf%livecrootc_xfer_to_livecrootc(p) + rfluxes(f_livecrootc_storage_to_xfer) = veg_cf%livecrootc_storage_to_xfer(p) + rfluxes(f_livecrootc_to_deadcrootc) = veg_cf%livecrootc_to_deadcrootc(p) if (woody(ivt(p)) == 1._r8) then rfluxes(f_cpool_to_livestemc) = veg_cf%cpool_to_livestemc(p) rfluxes(f_cpool_to_livestemc_storage) = veg_cf%cpool_to_livestemc_storage(p) rfluxes(f_cpool_to_deadstemc) = veg_cf%cpool_to_deadstemc(p) rfluxes(f_cpool_to_deadstemc_storage) = veg_cf%cpool_to_deadstemc_storage(p) - rfluxes(f_cpool_to_livecrootc) = veg_cf%cpool_to_livecrootc(p) - rfluxes(f_cpool_to_livecrootc_storage) = veg_cf%cpool_to_livecrootc_storage(p) rfluxes(f_cpool_to_deadcrootc) = veg_cf%cpool_to_deadcrootc(p) rfluxes(f_cpool_to_deadcrootc_storage) = veg_cf%cpool_to_deadcrootc_storage(p) rfluxes(f_livestemc_to_deadstemc) = veg_cf%livestemc_to_deadstemc(p) @@ -706,9 +709,6 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& rfluxes(f_livestemc_storage_to_xfer) = veg_cf%livestemc_storage_to_xfer(p) rfluxes(f_deadstemc_xfer_to_deadstemc) = veg_cf%deadstemc_xfer_to_deadstemc(p) rfluxes(f_deadstemc_storage_to_xfer) = veg_cf%deadstemc_storage_to_xfer(p) - rfluxes(f_livecrootc_xfer_to_livecrootc)= veg_cf%livecrootc_xfer_to_livecrootc(p) - rfluxes(f_livecrootc_storage_to_xfer) = veg_cf%livecrootc_storage_to_xfer(p) - rfluxes(f_livecrootc_to_deadcrootc) = veg_cf%livecrootc_to_deadcrootc(p) rfluxes(f_deadcrootc_xfer_to_deadcrootc)= veg_cf%deadcrootc_xfer_to_deadcrootc(p) rfluxes(f_deadcrootc_storage_to_xfer) = veg_cf%deadcrootc_storage_to_xfer(p) rfluxes(f_gresp_storage_to_xfer) = veg_cf%gresp_storage_to_xfer(p) @@ -745,14 +745,17 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& call fpmax(rfluxes(f_cpool_to_frootc_storage) , veg_cf%cpool_to_frootc_storage(p)) call fpmax(rfluxes(f_cpool_to_xsmrpool) , veg_cf%cpool_to_xsmrpool(p)) call fpmax(rfluxes(f_cpool_to_gresp_storage) , veg_cf%cpool_to_gresp_storage(p)) + call fpmax(rfluxes(f_cpool_to_livecrootc) , veg_cf%cpool_to_livecrootc(p)) + call fpmax(rfluxes(f_cpool_to_livecrootc_storage) , veg_cf%cpool_to_livecrootc_storage(p)) + call fpmax(rfluxes(f_livecrootc_xfer_to_livecrootc), veg_cf%livecrootc_xfer_to_livecrootc(p)) + call fpmax(rfluxes(f_livecrootc_storage_to_xfer) , veg_cf%livecrootc_storage_to_xfer(p)) + call fpmax(rfluxes(f_livecrootc_to_deadcrootc) , veg_cf%livecrootc_to_deadcrootc(p)) if (woody(ivt(p)) == 1._r8) then call fpmax(rfluxes(f_cpool_to_livestemc) , veg_cf%cpool_to_livestemc(p)) call fpmax(rfluxes(f_cpool_to_livestemc_storage) , veg_cf%cpool_to_livestemc_storage(p)) call fpmax(rfluxes(f_cpool_to_deadstemc) , veg_cf%cpool_to_deadstemc(p)) call fpmax(rfluxes(f_cpool_to_deadstemc_storage) , veg_cf%cpool_to_deadstemc_storage(p)) - call fpmax(rfluxes(f_cpool_to_livecrootc) , veg_cf%cpool_to_livecrootc(p)) - call fpmax(rfluxes(f_cpool_to_livecrootc_storage) , veg_cf%cpool_to_livecrootc_storage(p)) call fpmax(rfluxes(f_cpool_to_deadcrootc) , veg_cf%cpool_to_deadcrootc(p)) call fpmax(rfluxes(f_cpool_to_deadcrootc_storage) , veg_cf%cpool_to_deadcrootc_storage(p)) call fpmax(rfluxes(f_livestemc_to_deadstemc) , veg_cf%livestemc_to_deadstemc(p)) @@ -760,9 +763,6 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& call fpmax(rfluxes(f_livestemc_storage_to_xfer) , veg_cf%livestemc_storage_to_xfer(p)) call fpmax(rfluxes(f_deadstemc_xfer_to_deadstemc) , veg_cf%deadstemc_xfer_to_deadstemc(p)) call fpmax(rfluxes(f_deadstemc_storage_to_xfer) , veg_cf%deadstemc_storage_to_xfer(p)) - call fpmax(rfluxes(f_livecrootc_xfer_to_livecrootc), veg_cf%livecrootc_xfer_to_livecrootc(p)) - call fpmax(rfluxes(f_livecrootc_storage_to_xfer) , veg_cf%livecrootc_storage_to_xfer(p)) - call fpmax(rfluxes(f_livecrootc_to_deadcrootc) , veg_cf%livecrootc_to_deadcrootc(p)) call fpmax(rfluxes(f_deadcrootc_xfer_to_deadcrootc), veg_cf%deadcrootc_xfer_to_deadcrootc(p)) call fpmax(rfluxes(f_deadcrootc_storage_to_xfer) , veg_cf%deadcrootc_storage_to_xfer(p)) call fpmax(rfluxes(f_gresp_storage_to_xfer) , veg_cf%gresp_storage_to_xfer(p)) @@ -794,16 +794,16 @@ subroutine carbon_flux_limiter(bounds, num_soilc, filter_soilc,& call ascal(veg_cf%cpool_froot_gr(p) , rscal) call ascal(veg_cf%cpool_leaf_storage_gr(p) , rscal) call ascal(veg_cf%cpool_froot_storage_gr(p) , rscal) + call ascal(veg_cf%livecroot_curmr(p) , rscal) + call ascal(veg_cf%cpool_livecroot_gr(p) , rscal) + call ascal(veg_cf%cpool_livecroot_storage_gr(p), rscal) if (woody(ivt(p)) == 1._r8) then call ascal(veg_cf%livestem_curmr(p) , rscal) - call ascal(veg_cf%livecroot_curmr(p) , rscal) call ascal(veg_cf%cpool_livestem_gr(p) , rscal) call ascal(veg_cf%cpool_deadstem_gr(p) , rscal) - call ascal(veg_cf%cpool_livecroot_gr(p) , rscal) call ascal(veg_cf%cpool_deadcroot_gr(p) , rscal) call ascal(veg_cf%cpool_livestem_storage_gr(p) , rscal) call ascal(veg_cf%cpool_deadstem_storage_gr(p) , rscal) - call ascal(veg_cf%cpool_livecroot_storage_gr(p), rscal) call ascal(veg_cf%cpool_deadcroot_storage_gr(p), rscal) endif if (ivt(p) >= npcropmin) then @@ -864,6 +864,9 @@ subroutine nitrogen_flux_limiter(bounds, num_soilc, filter_soilc,& ystates(s_frootn) = veg_ns%frootn(p) ystates(s_frootn_xfer) = veg_ns%frootn_xfer(p) ystates(s_frootn_storage) = veg_ns%frootn_storage(p) + ystates(s_livecrootn) = veg_ns%livecrootn(p) + ystates(s_livecrootn_xfer) = veg_ns%livecrootn_xfer(p) + ystates(s_livecrootn_storage) = veg_ns%livecrootn_storage(p) if (woody(ivt(p)) == 1.0_r8) then ystates(s_livestemn) = veg_ns%livestemn(p) ystates(s_livestemn_xfer) = veg_ns%livestemn_xfer(p) @@ -871,9 +874,6 @@ subroutine nitrogen_flux_limiter(bounds, num_soilc, filter_soilc,& ystates(s_deadstemn) = veg_ns%deadstemn(p) ystates(s_deadstemn_xfer) = veg_ns%deadstemn_xfer(p) ystates(s_deadstemn_storage) = veg_ns%deadstemn_storage(p) - ystates(s_livecrootn) = veg_ns%livecrootn(p) - ystates(s_livecrootn_xfer) = veg_ns%livecrootn_xfer(p) - ystates(s_livecrootn_storage) = veg_ns%livecrootn_storage(p) ystates(s_deadcrootn) = veg_ns%deadcrootn(p) ystates(s_deadcrootn_xfer) = veg_ns%deadcrootn_xfer(p) ystates(s_deadcrootn_storage) = veg_ns%deadcrootn_storage(p) @@ -894,11 +894,15 @@ subroutine nitrogen_flux_limiter(bounds, num_soilc, filter_soilc,& rfluxes(f_npool_to_leafn_storage) = veg_nf%npool_to_leafn_storage(p) rfluxes(f_npool_to_frootn) = veg_nf%npool_to_frootn(p) rfluxes(f_npool_to_frootn_storage) = veg_nf%npool_to_frootn_storage(p) + rfluxes(f_npool_to_livecrootn) = veg_nf%npool_to_livecrootn(p) + rfluxes(f_npool_to_livecrootn_storage) = veg_nf%npool_to_livecrootn_storage(p) + rfluxes(f_livecrootn_to_deadcrootn) = veg_nf%livecrootn_to_deadcrootn(p) + rfluxes(f_livecrootn_to_retransn) = veg_nf%livecrootn_to_retransn(p) + rfluxes(f_livecrootn_storage_to_xfer) = veg_nf%livecrootn_storage_to_xfer(p) + rfluxes(f_livecrootn_xfer_to_livecrootn) = veg_nf%livecrootn_xfer_to_livecrootn(p) if (woody(ivt(p)) == 1.0_r8) then rfluxes(f_npool_to_livestemn) = veg_nf%npool_to_livestemn(p) rfluxes(f_npool_to_livestemn_storage) = veg_nf%npool_to_livestemn_storage(p) - rfluxes(f_npool_to_livecrootn) = veg_nf%npool_to_livecrootn(p) - rfluxes(f_npool_to_livecrootn_storage) = veg_nf%npool_to_livecrootn_storage(p) rfluxes(f_npool_to_deadstemn) = veg_nf%npool_to_deadstemn(p) rfluxes(f_npool_to_deadcrootn) = veg_nf%npool_to_deadcrootn(p) rfluxes(f_npool_to_deadstemn_storage) = veg_nf%npool_to_deadstemn_storage(p) @@ -907,10 +911,6 @@ subroutine nitrogen_flux_limiter(bounds, num_soilc, filter_soilc,& rfluxes(f_livestemn_xfer_to_livestemn) = veg_nf%livestemn_xfer_to_livestemn(p) rfluxes(f_livestemn_to_retransn) = veg_nf%livestemn_to_retransn(p) rfluxes(f_livestemn_to_deadstemn) = veg_nf%livestemn_to_deadstemn(p) - rfluxes(f_livecrootn_to_deadcrootn) = veg_nf%livecrootn_to_deadcrootn(p) - rfluxes(f_livecrootn_to_retransn) = veg_nf%livecrootn_to_retransn(p) - rfluxes(f_livecrootn_storage_to_xfer) = veg_nf%livecrootn_storage_to_xfer(p) - rfluxes(f_livecrootn_xfer_to_livecrootn) = veg_nf%livecrootn_xfer_to_livecrootn(p) rfluxes(f_deadstemn_storage_to_xfer) = veg_nf%deadstemn_storage_to_xfer(p) rfluxes(f_deadstemn_xfer_to_deadstem) = veg_nf%deadstemn_xfer_to_deadstemn(p) rfluxes(f_deadcrootn_storage_to_xfer) = veg_nf%deadcrootn_storage_to_xfer(p) @@ -950,11 +950,15 @@ subroutine nitrogen_flux_limiter(bounds, num_soilc, filter_soilc,& call fpmax(rfluxes(f_npool_to_leafn_storage) , veg_nf%npool_to_leafn_storage(p)) call fpmax(rfluxes(f_npool_to_frootn) , veg_nf%npool_to_frootn(p)) call fpmax(rfluxes(f_npool_to_frootn_storage) , veg_nf%npool_to_frootn_storage(p)) + call fpmax(rfluxes(f_npool_to_livecrootn) , veg_nf%npool_to_livecrootn(p)) + call fpmax(rfluxes(f_npool_to_livecrootn_storage) , veg_nf%npool_to_livecrootn_storage(p)) + call fpmax(rfluxes(f_livecrootn_to_deadcrootn) , veg_nf%livecrootn_to_deadcrootn(p)) + call fpmax(rfluxes(f_livecrootn_to_retransn) , veg_nf%livecrootn_to_retransn(p)) + call fpmax(rfluxes(f_livecrootn_storage_to_xfer) , veg_nf%livecrootn_storage_to_xfer(p)) + call fpmax(rfluxes(f_livecrootn_xfer_to_livecrootn) , veg_nf%livecrootn_xfer_to_livecrootn(p)) if (woody(ivt(p)) == 1.0_r8) then call fpmax(rfluxes(f_npool_to_livestemn) , veg_nf%npool_to_livestemn(p)) call fpmax(rfluxes(f_npool_to_livestemn_storage) , veg_nf%npool_to_livestemn_storage(p)) - call fpmax(rfluxes(f_npool_to_livecrootn) , veg_nf%npool_to_livecrootn(p)) - call fpmax(rfluxes(f_npool_to_livecrootn_storage) , veg_nf%npool_to_livecrootn_storage(p)) call fpmax(rfluxes(f_npool_to_deadstemn) , veg_nf%npool_to_deadstemn(p)) call fpmax(rfluxes(f_npool_to_deadcrootn) , veg_nf%npool_to_deadcrootn(p)) call fpmax(rfluxes(f_npool_to_deadstemn_storage) , veg_nf%npool_to_deadstemn_storage(p)) @@ -963,10 +967,6 @@ subroutine nitrogen_flux_limiter(bounds, num_soilc, filter_soilc,& call fpmax(rfluxes(f_livestemn_xfer_to_livestemn) , veg_nf%livestemn_xfer_to_livestemn(p)) call fpmax(rfluxes(f_livestemn_to_retransn) , veg_nf%livestemn_to_retransn(p)) call fpmax(rfluxes(f_livestemn_to_deadstemn) , veg_nf%livestemn_to_deadstemn(p)) - call fpmax(rfluxes(f_livecrootn_to_deadcrootn) , veg_nf%livecrootn_to_deadcrootn(p)) - call fpmax(rfluxes(f_livecrootn_to_retransn) , veg_nf%livecrootn_to_retransn(p)) - call fpmax(rfluxes(f_livecrootn_storage_to_xfer) , veg_nf%livecrootn_storage_to_xfer(p)) - call fpmax(rfluxes(f_livecrootn_xfer_to_livecrootn) , veg_nf%livecrootn_xfer_to_livecrootn(p)) call fpmax(rfluxes(f_deadstemn_storage_to_xfer) , veg_nf%deadstemn_storage_to_xfer(p)) call fpmax(rfluxes(f_deadstemn_xfer_to_deadstem) , veg_nf%deadstemn_xfer_to_deadstemn(p)) call fpmax(rfluxes(f_deadcrootn_storage_to_xfer) , veg_nf%deadcrootn_storage_to_xfer(p)) @@ -1049,6 +1049,9 @@ subroutine phosphorus_flux_limiter(bounds, num_soilc, filter_soilc,& ystates(s_frootn) = veg_ps%frootp(p) ystates(s_frootn_xfer) = veg_ps%frootp_xfer(p) ystates(s_frootn_storage) = veg_ps%frootp_storage(p) + ystates(s_livecrootn) = veg_ps%livecrootp(p) + ystates(s_livecrootn_xfer) = veg_ps%livecrootp_xfer(p) + ystates(s_livecrootn_storage) = veg_ps%livecrootp_storage(p) if (woody(ivt(p)) == 1.0_r8) then ystates(s_livestemn) = veg_ps%livestemp(p) ystates(s_livestemn_xfer) = veg_ps%livestemp_xfer(p) @@ -1056,9 +1059,6 @@ subroutine phosphorus_flux_limiter(bounds, num_soilc, filter_soilc,& ystates(s_deadstemn) = veg_ps%deadstemp(p) ystates(s_deadstemn_xfer) = veg_ps%deadstemp_xfer(p) ystates(s_deadstemn_storage) = veg_ps%deadstemp_storage(p) - ystates(s_livecrootn) = veg_ps%livecrootp(p) - ystates(s_livecrootn_xfer) = veg_ps%livecrootp_xfer(p) - ystates(s_livecrootn_storage) = veg_ps%livecrootp_storage(p) ystates(s_deadcrootn) = veg_ps%deadcrootp(p) ystates(s_deadcrootn_xfer) = veg_ps%deadcrootp_xfer(p) ystates(s_deadcrootn_storage) = veg_ps%deadcrootp_storage(p) @@ -1079,11 +1079,15 @@ subroutine phosphorus_flux_limiter(bounds, num_soilc, filter_soilc,& rfluxes(f_npool_to_leafn_storage) = veg_pf%ppool_to_leafp_storage(p) rfluxes(f_npool_to_frootn) = veg_pf%ppool_to_frootp(p) rfluxes(f_npool_to_frootn_storage) = veg_pf%ppool_to_frootp_storage(p) + rfluxes(f_npool_to_livecrootn) = veg_pf%ppool_to_livecrootp(p) + rfluxes(f_npool_to_livecrootn_storage) = veg_pf%ppool_to_livecrootp_storage(p) + rfluxes(f_livecrootn_to_deadcrootn) = veg_pf%livecrootp_to_deadcrootp(p) + rfluxes(f_livecrootn_to_retransn) = veg_pf%livecrootp_to_retransp(p) + rfluxes(f_livecrootn_storage_to_xfer) = veg_pf%livecrootp_storage_to_xfer(p) + rfluxes(f_livecrootn_xfer_to_livecrootn) = veg_pf%livecrootp_xfer_to_livecrootp(p) if (woody(ivt(p)) == 1._r8) then rfluxes(f_npool_to_livestemn) = veg_pf%ppool_to_livestemp(p) rfluxes(f_npool_to_livestemn_storage) = veg_pf%ppool_to_livestemp_storage(p) - rfluxes(f_npool_to_livecrootn) = veg_pf%ppool_to_livecrootp(p) - rfluxes(f_npool_to_livecrootn_storage) = veg_pf%ppool_to_livecrootp_storage(p) rfluxes(f_npool_to_deadstemn) = veg_pf%ppool_to_deadstemp(p) rfluxes(f_npool_to_deadcrootn) = veg_pf%ppool_to_deadcrootp(p) rfluxes(f_npool_to_deadstemn_storage) = veg_pf%ppool_to_deadstemp_storage(p) @@ -1092,10 +1096,6 @@ subroutine phosphorus_flux_limiter(bounds, num_soilc, filter_soilc,& rfluxes(f_livestemn_xfer_to_livestemn) = veg_pf%livestemp_xfer_to_livestemp(p) rfluxes(f_livestemn_to_retransn) = veg_pf%livestemp_to_retransp(p) rfluxes(f_livestemn_to_deadstemn) = veg_pf%livestemp_to_deadstemp(p) - rfluxes(f_livecrootn_to_deadcrootn) = veg_pf%livecrootp_to_deadcrootp(p) - rfluxes(f_livecrootn_to_retransn) = veg_pf%livecrootp_to_retransp(p) - rfluxes(f_livecrootn_storage_to_xfer) = veg_pf%livecrootp_storage_to_xfer(p) - rfluxes(f_livecrootn_xfer_to_livecrootn) = veg_pf%livecrootp_xfer_to_livecrootp(p) rfluxes(f_deadstemn_storage_to_xfer) = veg_pf%deadstemp_storage_to_xfer(p) rfluxes(f_deadstemn_xfer_to_deadstem) = veg_pf%deadstemp_xfer_to_deadstemp(p) rfluxes(f_deadcrootn_storage_to_xfer) = veg_pf%deadcrootp_storage_to_xfer(p) @@ -1135,11 +1135,15 @@ subroutine phosphorus_flux_limiter(bounds, num_soilc, filter_soilc,& call fpmax(rfluxes(f_npool_to_leafn_storage) , veg_pf%ppool_to_leafp_storage(p)) call fpmax(rfluxes(f_npool_to_frootn) , veg_pf%ppool_to_frootp(p)) call fpmax(rfluxes(f_npool_to_frootn_storage) , veg_pf%ppool_to_frootp_storage(p)) + call fpmax(rfluxes(f_npool_to_livecrootn) , veg_pf%ppool_to_livecrootp(p)) + call fpmax(rfluxes(f_npool_to_livecrootn_storage) , veg_pf%ppool_to_livecrootp_storage(p)) + call fpmax(rfluxes(f_livecrootn_to_deadcrootn) , veg_pf%livecrootp_to_deadcrootp(p)) + call fpmax(rfluxes(f_livecrootn_to_retransn) , veg_pf%livecrootp_to_retransp(p)) + call fpmax(rfluxes(f_livecrootn_storage_to_xfer) , veg_pf%livecrootp_storage_to_xfer(p)) + call fpmax(rfluxes(f_livecrootn_xfer_to_livecrootn) , veg_pf%livecrootp_xfer_to_livecrootp(p)) if (woody(ivt(p)) == 1._r8) then call fpmax(rfluxes(f_npool_to_livestemn) , veg_pf%ppool_to_livestemp(p)) call fpmax(rfluxes(f_npool_to_livestemn_storage) , veg_pf%ppool_to_livestemp_storage(p)) - call fpmax(rfluxes(f_npool_to_livecrootn) , veg_pf%ppool_to_livecrootp(p)) - call fpmax(rfluxes(f_npool_to_livecrootn_storage) , veg_pf%ppool_to_livecrootp_storage(p)) call fpmax(rfluxes(f_npool_to_deadstemn) , veg_pf%ppool_to_deadstemp(p)) call fpmax(rfluxes(f_npool_to_deadcrootn) , veg_pf%ppool_to_deadcrootp(p)) call fpmax(rfluxes(f_npool_to_deadstemn_storage) , veg_pf%ppool_to_deadstemp_storage(p)) @@ -1148,10 +1152,6 @@ subroutine phosphorus_flux_limiter(bounds, num_soilc, filter_soilc,& call fpmax(rfluxes(f_livestemn_xfer_to_livestemn) , veg_pf%livestemp_xfer_to_livestemp(p)) call fpmax(rfluxes(f_livestemn_to_retransn) , veg_pf%livestemp_to_retransp(p)) call fpmax(rfluxes(f_livestemn_to_deadstemn) , veg_pf%livestemp_to_deadstemp(p)) - call fpmax(rfluxes(f_livecrootn_to_deadcrootn) , veg_pf%livecrootp_to_deadcrootp(p)) - call fpmax(rfluxes(f_livecrootn_to_retransn) , veg_pf%livecrootp_to_retransp(p)) - call fpmax(rfluxes(f_livecrootn_storage_to_xfer) , veg_pf%livecrootp_storage_to_xfer(p)) - call fpmax(rfluxes(f_livecrootn_xfer_to_livecrootn) , veg_pf%livecrootp_xfer_to_livecrootp(p)) call fpmax(rfluxes(f_deadstemn_storage_to_xfer) , veg_pf%deadstemp_storage_to_xfer(p)) call fpmax(rfluxes(f_deadstemn_xfer_to_deadstem) , veg_pf%deadstemp_xfer_to_deadstemp(p)) call fpmax(rfluxes(f_deadcrootn_storage_to_xfer) , veg_pf%deadcrootp_storage_to_xfer(p)) diff --git a/components/elm/src/biogeochem/PhenologyMod.F90 b/components/elm/src/biogeochem/PhenologyMod.F90 index c4a4211199f..03f4bc81fd6 100644 --- a/components/elm/src/biogeochem/PhenologyMod.F90 +++ b/components/elm/src/biogeochem/PhenologyMod.F90 @@ -614,31 +614,32 @@ subroutine CNEvergreenPhenology (num_soilp, filter_soilp , & ! B. Sulman: Allow evergreen plants to transfer C/N/P from storage pools to growth, at a constant rate (for now) leafc_storage_to_xfer(p) = bgtr(p) * leafc_storage(p) frootc_storage_to_xfer(p) = bgtr(p) * frootc_storage(p) + gresp_storage_to_xfer(p) = bgtr(p) * gresp_storage(p) + livecrootc_storage_to_xfer(p) = bgtr(p) * livecrootc_storage(p) ! For graminoid rhizomes + if (woody(ivt(p)) == 1.0_r8) then livestemc_storage_to_xfer(p) = bgtr(p) * livestemc_storage(p) deadstemc_storage_to_xfer(p) = bgtr(p) * deadstemc_storage(p) - livecrootc_storage_to_xfer(p) = bgtr(p) * livecrootc_storage(p) deadcrootc_storage_to_xfer(p) = bgtr(p) * deadcrootc_storage(p) - gresp_storage_to_xfer(p) = bgtr(p) * gresp_storage(p) end if ! set nitrogen fluxes for shifting storage pools to transfer pools leafn_storage_to_xfer(p) = bgtr(p) * leafn_storage(p) frootn_storage_to_xfer(p) = bgtr(p) * frootn_storage(p) + livecrootn_storage_to_xfer(p) = bgtr(p) * livecrootn_storage(p) if (woody(ivt(p)) == 1.0_r8) then livestemn_storage_to_xfer(p) = bgtr(p) * livestemn_storage(p) deadstemn_storage_to_xfer(p) = bgtr(p) * deadstemn_storage(p) - livecrootn_storage_to_xfer(p) = bgtr(p) * livecrootn_storage(p) deadcrootn_storage_to_xfer(p) = bgtr(p) * deadcrootn_storage(p) end if ! set phosphorus fluxes for shifting storage pools to transfer pools leafp_storage_to_xfer(p) = bgtr(p) * leafp_storage(p) frootp_storage_to_xfer(p) = bgtr(p) * frootp_storage(p) + livecrootp_storage_to_xfer(p) = bgtr(p) * livecrootp_storage(p) if (woody(ivt(p)) == 1.0_r8) then livestemp_storage_to_xfer(p) = bgtr(p) * livestemp_storage(p) deadstemp_storage_to_xfer(p) = bgtr(p) * deadstemp_storage(p) - livecrootp_storage_to_xfer(p) = bgtr(p) * livecrootp_storage(p) deadcrootp_storage_to_xfer(p) = bgtr(p) * deadcrootp_storage(p) end if end if @@ -856,18 +857,18 @@ subroutine CNSeasonDecidPhenology (num_soilp, filter_soilp, cnstate_vars) frootn_xfer_to_frootn(p) = 0.0_r8 leafp_xfer_to_leafp(p) = 0.0_r8 frootp_xfer_to_frootp(p) = 0.0_r8 + livecrootc_xfer_to_livecrootc(p) = 0.0_r8 ! Graminoid rhizomes + livecrootn_xfer_to_livecrootn(p) = 0.0_r8 + livecrootp_xfer_to_livecrootp(p) = 0.0_r8 if (woody(ivt(p)) == 1.0_r8) then livestemc_xfer_to_livestemc(p) = 0.0_r8 deadstemc_xfer_to_deadstemc(p) = 0.0_r8 - livecrootc_xfer_to_livecrootc(p) = 0.0_r8 deadcrootc_xfer_to_deadcrootc(p) = 0.0_r8 livestemn_xfer_to_livestemn(p) = 0.0_r8 deadstemn_xfer_to_deadstemn(p) = 0.0_r8 - livecrootn_xfer_to_livecrootn(p) = 0.0_r8 deadcrootn_xfer_to_deadcrootn(p) = 0.0_r8 livestemp_xfer_to_livestemp(p) = 0.0_r8 deadstemp_xfer_to_deadstemp(p) = 0.0_r8 - livecrootp_xfer_to_livecrootp(p) = 0.0_r8 deadcrootp_xfer_to_deadcrootp(p) = 0.0_r8 end if ! set transfer pools to 0.0 @@ -877,6 +878,9 @@ subroutine CNSeasonDecidPhenology (num_soilp, filter_soilp, cnstate_vars) frootc_xfer(p) = 0.0_r8 frootn_xfer(p) = 0.0_r8 frootp_xfer(p) = 0.0_r8 + livecrootc_xfer(p) = 0.0_r8 + livecrootn_xfer(p) = 0.0_r8 + livecrootp_xfer(p) = 0.0_r8 if (woody(ivt(p)) == 1.0_r8) then livestemc_xfer(p) = 0.0_r8 livestemn_xfer(p) = 0.0_r8 @@ -884,9 +888,6 @@ subroutine CNSeasonDecidPhenology (num_soilp, filter_soilp, cnstate_vars) deadstemc_xfer(p) = 0.0_r8 deadstemn_xfer(p) = 0.0_r8 deadstemp_xfer(p) = 0.0_r8 - livecrootc_xfer(p) = 0.0_r8 - livecrootn_xfer(p) = 0.0_r8 - livecrootp_xfer(p) = 0.0_r8 deadcrootc_xfer(p) = 0.0_r8 deadcrootn_xfer(p) = 0.0_r8 deadcrootp_xfer(p) = 0.0_r8 @@ -973,10 +974,10 @@ subroutine CNSeasonDecidPhenology (num_soilp, filter_soilp, cnstate_vars) ! set carbon fluxes for shifting storage pools to transfer pools leafc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * leafc_storage(p)/dt frootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * frootc_storage(p)/dt + livecrootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootc_storage(p)/dt if (woody(ivt(p)) == 1.0_r8) then livestemc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livestemc_storage(p)/dt deadstemc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadstemc_storage(p)/dt - livecrootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootc_storage(p)/dt deadcrootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadcrootc_storage(p)/dt gresp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * gresp_storage(p)/dt end if @@ -984,20 +985,20 @@ subroutine CNSeasonDecidPhenology (num_soilp, filter_soilp, cnstate_vars) ! set nitrogen fluxes for shifting storage pools to transfer pools leafn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * leafn_storage(p)/dt frootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * frootn_storage(p)/dt + livecrootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootn_storage(p)/dt if (woody(ivt(p)) == 1.0_r8) then livestemn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livestemn_storage(p)/dt deadstemn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadstemn_storage(p)/dt - livecrootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootn_storage(p)/dt deadcrootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadcrootn_storage(p)/dt end if ! set phosphorus fluxes for shifting storage pools to transfer pools leafp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * leafp_storage(p)/dt frootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * frootp_storage(p)/dt + livecrootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootp_storage(p)/dt if (woody(ivt(p)) == 1.0_r8) then livestemp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livestemp_storage(p)/dt deadstemp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadstemp_storage(p)/dt - livecrootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootp_storage(p)/dt deadcrootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadcrootp_storage(p)/dt end if end if @@ -1262,18 +1263,18 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & frootn_xfer_to_frootn(p) = 0._r8 leafp_xfer_to_leafp(p) = 0._r8 frootp_xfer_to_frootp(p) = 0._r8 + livecrootc_xfer_to_livecrootc(p) = 0._r8 + livecrootn_xfer_to_livecrootn(p) = 0._r8 + livecrootp_xfer_to_livecrootp(p) = 0._r8 if (woody(ivt(p)) == 1.0_r8) then livestemc_xfer_to_livestemc(p) = 0._r8 deadstemc_xfer_to_deadstemc(p) = 0._r8 - livecrootc_xfer_to_livecrootc(p) = 0._r8 deadcrootc_xfer_to_deadcrootc(p) = 0._r8 livestemn_xfer_to_livestemn(p) = 0._r8 deadstemn_xfer_to_deadstemn(p) = 0._r8 - livecrootn_xfer_to_livecrootn(p) = 0._r8 deadcrootn_xfer_to_deadcrootn(p) = 0._r8 livestemp_xfer_to_livestemp(p) = 0._r8 deadstemp_xfer_to_deadstemp(p) = 0._r8 - livecrootp_xfer_to_livecrootp(p) = 0._r8 deadcrootp_xfer_to_deadcrootp(p) = 0._r8 end if ! set transfer pools to 0.0 @@ -1283,6 +1284,9 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & frootc_xfer(p) = 0._r8 frootn_xfer(p) = 0._r8 frootp_xfer(p) = 0._r8 + livecrootc_xfer(p) = 0._r8 + livecrootn_xfer(p) = 0._r8 + livecrootp_xfer(p) = 0._r8 if (woody(ivt(p)) == 1.0_r8) then livestemc_xfer(p) = 0._r8 livestemn_xfer(p) = 0._r8 @@ -1290,9 +1294,6 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & deadstemc_xfer(p) = 0._r8 deadstemn_xfer(p) = 0._r8 deadstemp_xfer(p) = 0._r8 - livecrootc_xfer(p) = 0._r8 - livecrootn_xfer(p) = 0._r8 - livecrootp_xfer(p) = 0._r8 deadcrootc_xfer(p) = 0._r8 deadcrootn_xfer(p) = 0._r8 deadcrootp_xfer(p) = 0._r8 @@ -1375,10 +1376,10 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & ! set carbon fluxes for shifting storage pools to transfer pools leafc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * leafc_storage(p)/dt frootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * frootc_storage(p)/dt + livecrootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootc_storage(p)/dt if (woody(ivt(p)) == 1.0_r8) then livestemc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livestemc_storage(p)/dt deadstemc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadstemc_storage(p)/dt - livecrootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootc_storage(p)/dt deadcrootc_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadcrootc_storage(p)/dt gresp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * gresp_storage(p)/dt end if @@ -1386,20 +1387,20 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & ! set nitrogen fluxes for shifting storage pools to transfer pools leafn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * leafn_storage(p)/dt frootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * frootn_storage(p)/dt + livecrootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootn_storage(p)/dt if (woody(ivt(p)) == 1.0_r8) then livestemn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livestemn_storage(p)/dt deadstemn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadstemn_storage(p)/dt - livecrootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootn_storage(p)/dt deadcrootn_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadcrootn_storage(p)/dt end if ! set phosphorus fluxes for shifting storage pools to transfer pools leafp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * leafp_storage(p)/dt frootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * frootp_storage(p)/dt + livecrootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootp_storage(p)/dt if (woody(ivt(p)) == 1.0_r8) then livestemp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livestemp_storage(p)/dt deadstemp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadstemp_storage(p)/dt - livecrootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * livecrootp_storage(p)/dt deadcrootp_storage_to_xfer(p) = PhenolParamsInst%fstor2tran * deadcrootp_storage(p)/dt end if @@ -1503,10 +1504,10 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & leafc_storage_to_xfer(p) = leafc_storage(p) * bgtr(p) frootc_storage_to_xfer(p) = frootc_storage(p) * bgtr(p) + livecrootc_storage_to_xfer(p) = livecrootc_storage(p) * bgtr(p) if (woody(ivt(p)) == 1.0_r8) then livestemc_storage_to_xfer(p) = livestemc_storage(p) * bgtr(p) deadstemc_storage_to_xfer(p) = deadstemc_storage(p) * bgtr(p) - livecrootc_storage_to_xfer(p) = livecrootc_storage(p) * bgtr(p) deadcrootc_storage_to_xfer(p) = deadcrootc_storage(p) * bgtr(p) gresp_storage_to_xfer(p) = gresp_storage(p) * bgtr(p) end if @@ -1514,10 +1515,10 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & ! set nitrogen fluxes for shifting storage pools to transfer pools leafn_storage_to_xfer(p) = leafn_storage(p) * bgtr(p) frootn_storage_to_xfer(p) = frootn_storage(p) * bgtr(p) + livecrootn_storage_to_xfer(p) = livecrootn_storage(p) * bgtr(p) if (woody(ivt(p)) == 1.0_r8) then livestemn_storage_to_xfer(p) = livestemn_storage(p) * bgtr(p) deadstemn_storage_to_xfer(p) = deadstemn_storage(p) * bgtr(p) - livecrootn_storage_to_xfer(p) = livecrootn_storage(p) * bgtr(p) deadcrootn_storage_to_xfer(p) = deadcrootn_storage(p) * bgtr(p) end if @@ -1525,10 +1526,10 @@ subroutine CNStressDecidPhenology (num_soilp, filter_soilp , & ! set phosphorus fluxes for shifting storage pools to transfer pools leafp_storage_to_xfer(p) = leafp_storage(p) * bgtr(p) frootp_storage_to_xfer(p) = frootp_storage(p) * bgtr(p) + livecrootp_storage_to_xfer(p) = livecrootp_storage(p) * bgtr(p) if (woody(ivt(p)) == 1.0_r8) then livestemp_storage_to_xfer(p) = livestemp_storage(p) * bgtr(p) deadstemp_storage_to_xfer(p) = deadstemp_storage(p) * bgtr(p) - livecrootp_storage_to_xfer(p) = livecrootp_storage(p) * bgtr(p) deadcrootp_storage_to_xfer(p) = deadcrootp_storage(p) * bgtr(p) end if end if @@ -2845,19 +2846,19 @@ subroutine CNOnsetGrowth (num_soilp, filter_soilp, & frootn_xfer_to_frootn(p) = t1 * frootn_xfer(p) leafp_xfer_to_leafp(p) = t1 * leafp_xfer(p) frootp_xfer_to_frootp(p) = t1 * frootp_xfer(p) + livecrootc_xfer_to_livecrootc(p) = t1 * livecrootc_xfer(p) + livecrootn_xfer_to_livecrootn(p) = t1 * livecrootn_xfer(p) + livecrootp_xfer_to_livecrootp(p) = t1 * livecrootp_xfer(p) if (woody(ivt(p)) == 1.0_r8) then livestemc_xfer_to_livestemc(p) = t1 * livestemc_xfer(p) deadstemc_xfer_to_deadstemc(p) = t1 * deadstemc_xfer(p) - livecrootc_xfer_to_livecrootc(p) = t1 * livecrootc_xfer(p) deadcrootc_xfer_to_deadcrootc(p) = t1 * deadcrootc_xfer(p) livestemn_xfer_to_livestemn(p) = t1 * livestemn_xfer(p) deadstemn_xfer_to_deadstemn(p) = t1 * deadstemn_xfer(p) - livecrootn_xfer_to_livecrootn(p) = t1 * livecrootn_xfer(p) deadcrootn_xfer_to_deadcrootn(p) = t1 * deadcrootn_xfer(p) livestemp_xfer_to_livestemp(p) = t1 * livestemp_xfer(p) deadstemp_xfer_to_deadstemp(p) = t1 * deadstemp_xfer(p) - livecrootp_xfer_to_livecrootp(p) = t1 * livecrootp_xfer(p) deadcrootp_xfer_to_deadcrootp(p) = t1 * deadcrootp_xfer(p) end if @@ -2874,18 +2875,18 @@ subroutine CNOnsetGrowth (num_soilp, filter_soilp, & frootn_xfer_to_frootn(p) = frootn_xfer(p) / dt leafp_xfer_to_leafp(p) = leafp_xfer(p) / dt frootp_xfer_to_frootp(p) = frootp_xfer(p) / dt + livecrootc_xfer_to_livecrootc(p) = livecrootc_xfer(p) / dt + livecrootn_xfer_to_livecrootn(p) = livecrootn_xfer(p) / dt + livecrootp_xfer_to_livecrootp(p) = livecrootp_xfer(p) / dt if (woody(ivt(p)) == 1.0_r8) then livestemc_xfer_to_livestemc(p) = livestemc_xfer(p) / dt deadstemc_xfer_to_deadstemc(p) = deadstemc_xfer(p) / dt - livecrootc_xfer_to_livecrootc(p) = livecrootc_xfer(p) / dt deadcrootc_xfer_to_deadcrootc(p) = deadcrootc_xfer(p) / dt livestemn_xfer_to_livestemn(p) = livestemn_xfer(p) / dt deadstemn_xfer_to_deadstemn(p) = deadstemn_xfer(p) / dt - livecrootn_xfer_to_livecrootn(p) = livecrootn_xfer(p) / dt deadcrootn_xfer_to_deadcrootn(p) = deadcrootn_xfer(p) / dt livestemp_xfer_to_livestemp(p) = livestemp_xfer(p) / dt deadstemp_xfer_to_deadstemp(p) = deadstemp_xfer(p) / dt - livecrootp_xfer_to_livecrootp(p) = livecrootp_xfer(p) / dt deadcrootp_xfer_to_deadcrootp(p) = deadcrootp_xfer(p) / dt end if end if ! end if bgtr diff --git a/components/elm/src/biogeochem/PhosphorusStateUpdate1Mod.F90 b/components/elm/src/biogeochem/PhosphorusStateUpdate1Mod.F90 index 63390dc419e..47928a0edd3 100644 --- a/components/elm/src/biogeochem/PhosphorusStateUpdate1Mod.F90 +++ b/components/elm/src/biogeochem/PhosphorusStateUpdate1Mod.F90 @@ -244,13 +244,15 @@ subroutine PhosphorusStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soi veg_ps%frootp(p) = veg_ps%frootp(p) + veg_pf%frootp_xfer_to_frootp(p)*dt veg_ps%frootp_xfer(p) = veg_ps%frootp_xfer(p) - veg_pf%frootp_xfer_to_frootp(p)*dt + ! B Sulman: Allow graminoid rhizomes + veg_ps%livecrootp(p) = veg_ps%livecrootp(p) + veg_pf%livecrootp_xfer_to_livecrootp(p)*dt + veg_ps%livecrootp_xfer(p) = veg_ps%livecrootp_xfer(p) - veg_pf%livecrootp_xfer_to_livecrootp(p)*dt + if (woody(ivt(p)) == 1.0_r8) then veg_ps%livestemp(p) = veg_ps%livestemp(p) + veg_pf%livestemp_xfer_to_livestemp(p)*dt veg_ps%livestemp_xfer(p) = veg_ps%livestemp_xfer(p) - veg_pf%livestemp_xfer_to_livestemp(p)*dt veg_ps%deadstemp(p) = veg_ps%deadstemp(p) + veg_pf%deadstemp_xfer_to_deadstemp(p)*dt veg_ps%deadstemp_xfer(p) = veg_ps%deadstemp_xfer(p) - veg_pf%deadstemp_xfer_to_deadstemp(p)*dt - veg_ps%livecrootp(p) = veg_ps%livecrootp(p) + veg_pf%livecrootp_xfer_to_livecrootp(p)*dt - veg_ps%livecrootp_xfer(p) = veg_ps%livecrootp_xfer(p) - veg_pf%livecrootp_xfer_to_livecrootp(p)*dt veg_ps%deadcrootp(p) = veg_ps%deadcrootp(p) + veg_pf%deadcrootp_xfer_to_deadcrootp(p)*dt veg_ps%deadcrootp_xfer(p) = veg_ps%deadcrootp_xfer(p) - veg_pf%deadcrootp_xfer_to_deadcrootp(p)*dt end if @@ -311,6 +313,10 @@ subroutine PhosphorusStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soi veg_ps%frootp(p) = veg_ps%frootp(p) + veg_pf%ppool_to_frootp(p)*dt veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_frootp_storage(p)*dt veg_ps%frootp_storage(p) = veg_ps%frootp_storage(p) + veg_pf%ppool_to_frootp_storage(p)*dt + veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_livecrootp(p)*dt + veg_ps%livecrootp(p) = veg_ps%livecrootp(p) + veg_pf%ppool_to_livecrootp(p)*dt + veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_livecrootp_storage(p)*dt + veg_ps%livecrootp_storage(p) = veg_ps%livecrootp_storage(p) + veg_pf%ppool_to_livecrootp_storage(p)*dt if (woody(ivt(p)) == 1._r8) then veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_livestemp(p)*dt @@ -321,10 +327,6 @@ subroutine PhosphorusStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soi veg_ps%deadstemp(p) = veg_ps%deadstemp(p) + veg_pf%ppool_to_deadstemp(p)*dt veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_deadstemp_storage(p)*dt veg_ps%deadstemp_storage(p) = veg_ps%deadstemp_storage(p) + veg_pf%ppool_to_deadstemp_storage(p)*dt - veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_livecrootp(p)*dt - veg_ps%livecrootp(p) = veg_ps%livecrootp(p) + veg_pf%ppool_to_livecrootp(p)*dt - veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_livecrootp_storage(p)*dt - veg_ps%livecrootp_storage(p) = veg_ps%livecrootp_storage(p) + veg_pf%ppool_to_livecrootp_storage(p)*dt veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_deadcrootp(p)*dt veg_ps%deadcrootp(p) = veg_ps%deadcrootp(p) + veg_pf%ppool_to_deadcrootp(p)*dt veg_ps%ppool(p) = veg_ps%ppool(p) - veg_pf%ppool_to_deadcrootp_storage(p)*dt @@ -347,14 +349,14 @@ subroutine PhosphorusStateUpdate1(num_soilc, filter_soilc, num_soilp, filter_soi veg_ps%leafp_xfer(p) = veg_ps%leafp_xfer(p) + veg_pf%leafp_storage_to_xfer(p)*dt veg_ps%frootp_storage(p) = veg_ps%frootp_storage(p) - veg_pf%frootp_storage_to_xfer(p)*dt veg_ps%frootp_xfer(p) = veg_ps%frootp_xfer(p) + veg_pf%frootp_storage_to_xfer(p)*dt + veg_ps%livecrootp_storage(p) = veg_ps%livecrootp_storage(p) - veg_pf%livecrootp_storage_to_xfer(p)*dt + veg_ps%livecrootp_xfer(p) = veg_ps%livecrootp_xfer(p) + veg_pf%livecrootp_storage_to_xfer(p)*dt if (woody(ivt(p)) == 1._r8) then veg_ps%livestemp_storage(p) = veg_ps%livestemp_storage(p) - veg_pf%livestemp_storage_to_xfer(p)*dt veg_ps%livestemp_xfer(p) = veg_ps%livestemp_xfer(p) + veg_pf%livestemp_storage_to_xfer(p)*dt veg_ps%deadstemp_storage(p) = veg_ps%deadstemp_storage(p) - veg_pf%deadstemp_storage_to_xfer(p)*dt veg_ps%deadstemp_xfer(p) = veg_ps%deadstemp_xfer(p) + veg_pf%deadstemp_storage_to_xfer(p)*dt - veg_ps%livecrootp_storage(p) = veg_ps%livecrootp_storage(p) - veg_pf%livecrootp_storage_to_xfer(p)*dt - veg_ps%livecrootp_xfer(p) = veg_ps%livecrootp_xfer(p) + veg_pf%livecrootp_storage_to_xfer(p)*dt veg_ps%deadcrootp_storage(p) = veg_ps%deadcrootp_storage(p) - veg_pf%deadcrootp_storage_to_xfer(p)*dt veg_ps%deadcrootp_xfer(p) = veg_ps%deadcrootp_xfer(p) + veg_pf%deadcrootp_storage_to_xfer(p)*dt end if