Skip to content

Commit d519db7

Browse files
committed
Add rhizomes to all plants including graminoids
Add rhizome turnover
1 parent 8f567d3 commit d519db7

12 files changed

+326
-162
lines changed

components/elm/src/biogeochem/AllocationMod.F90

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,12 @@ subroutine Allocation1_PlantNPDemand (bounds, num_soilc, filter_soilc, num_soilp
832832
(f3*(1._r8-f4)*(1._r8+f2))/cpdw
833833

834834
else
835-
c_allometry(p) = 1._r8+g1+f1+f1*g1
835+
c_allometry(p) = (1._r8+g1)*(1._r8+f1+f3) ! B Sulman: Let graminoids allocate rhizomes (all livecroot) using stem_leaf parameter
836836
n_allometry(p) = 1._r8/cnl + f1/cnfr
837+
if(cnlw>0) n_allometry(p) = n_allometry(p) + f3/cnlw ! Rhizomes
837838
p_allometry(p) = 1._r8/cpl + f1/cpfr
839+
if(cplw>0) p_allometry(p) = p_allometry(p) + f3/cplw ! Rhizomes
840+
838841
end if
839842
plant_ndemand(p) = availc(p)*(n_allometry(p)/c_allometry(p))
840843
plant_pdemand(p) = availc(p)*(p_allometry(p)/c_allometry(p))
@@ -2589,6 +2592,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
25892592
cpool_to_livecrootc_storage(p) = nlc * f2 * f3 * f4 * (1._r8 - fcur)
25902593
cpool_to_deadcrootc(p) = nlc * f2 * f3 * (1._r8 - f4) * fcur
25912594
cpool_to_deadcrootc_storage(p) = nlc * f2 * f3 * (1._r8 - f4) * (1._r8 - fcur)
2595+
else
2596+
! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman)
2597+
cpool_to_livecrootc(p) = nlc * f3 * fcur
2598+
cpool_to_livecrootc_storage(p) = nlc * f3 * (1._r8 - fcur)
25922599
end if
25932600
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
25942601
cpool_to_livestemc(p) = nlc * f3 * f4 * fcur
@@ -2642,6 +2649,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
26422649
npool_to_livecrootn_storage(p) = (nlc * f2 * f3 * f4 / cnlw) * (1._r8 - fcur)
26432650
npool_to_deadcrootn(p) = (nlc * f2 * f3 * (1._r8 - f4) / cndw) * fcur
26442651
npool_to_deadcrootn_storage(p) = (nlc * f2 * f3 * (1._r8 - f4) / cndw) * (1._r8 - fcur)
2652+
elseif (cnlw > 0.0_r8) then
2653+
! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman)
2654+
npool_to_livecrootn(p) = (nlc * f3 / cnlw ) * fcur
2655+
npool_to_livecrootn_storage(p) = (nlc * f3 / cnlw ) * (1._r8 - fcur)
26452656
end if
26462657
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
26472658
cng = graincn(ivt(p))
@@ -2686,6 +2697,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
26862697
ppool_to_livecrootp_storage(p) = (nlc * f2 * f3 * f4 / cplw) * (1._r8 -fcur)
26872698
ppool_to_deadcrootp(p) = (nlc * f2 * f3 * (1._r8 - f4) / cpdw)* fcur
26882699
ppool_to_deadcrootp_storage(p) = (nlc * f2 * f3 * (1._r8 - f4) / cpdw)* (1._r8 - fcur)
2700+
elseif (cplw > 0.0_r8) then
2701+
! Assume "stem" allocation in graminoids goes to rhizomes which are all live wood (B Sulman)
2702+
ppool_to_livecrootp(p) = (nlc * f3 / cplw ) * fcur
2703+
ppool_to_livecrootp_storage(p) = (nlc * f3 / cplw ) * (1._r8 - fcur)
26892704
end if
26902705
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
26912706
cpg = graincp(ivt(p))
@@ -2711,10 +2726,10 @@ subroutine Allocation3_PlantCNPAlloc (bounds , &
27112726
! growth is assigned here.
27122727

27132728
gresp_storage = cpool_to_leafc_storage(p) + cpool_to_frootc_storage(p)
2714-
if (woody(ivt(p)) == 1._r8) then
2729+
gresp_storage = gresp_storage + cpool_to_livecrootc_storage(p) !Graminoid rhizomes (B Sulman)
2730+
if (woody(ivt(p)) >= 1.0_r8) then
27152731
gresp_storage = gresp_storage + cpool_to_livestemc_storage(p)
27162732
gresp_storage = gresp_storage + cpool_to_deadstemc_storage(p)
2717-
gresp_storage = gresp_storage + cpool_to_livecrootc_storage(p)
27182733
gresp_storage = gresp_storage + cpool_to_deadcrootc_storage(p)
27192734
end if
27202735
if (ivt(p) >= npcropmin) then ! skip 2 generic crops

components/elm/src/biogeochem/CarbonIsoFluxMod.F90

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,11 @@ subroutine CarbonIsoFlux1(num_soilc, filter_soilc, num_soilp, filter_soilp, &
131131
isoveg_cf%livecrootc_to_deadcrootc , veg_cf%livecrootc_to_deadcrootc, &
132132
isoveg_cs%livecrootc , veg_cs%livecrootc, &
133133
num_soilp , filter_soilp, 1._r8, 0, isotope)
134+
135+
call CarbonIsoFluxCalc(&
136+
isoveg_cf%livecrootc_to_litter , veg_cf%livecrootc_to_litter, &
137+
isoveg_cs%livecrootc , veg_cs%livecrootc, &
138+
num_soilp , filter_soilp, 1._r8, 0, isotope)
134139

135140
call CarbonIsoFluxCalc(&
136141
isoveg_cf%leaf_curmr , veg_cf%leaf_curmr, &
@@ -937,9 +942,11 @@ subroutine CNCIsoLitterToColumn (num_soilc, filter_soilc, &
937942

938943
leaf_prof => cnstate_vars%leaf_prof_patch , & ! Input: [real(r8) (:,:) ] (1/m) profile of leaves
939944
froot_prof => cnstate_vars%froot_prof_patch , & ! Input: [real(r8) (:,:) ] (1/m) profile of fine roots
945+
croot_prof => cnstate_vars%croot_prof_patch , & ! Input: [real(r8) (:,:) ] (1/m) profile of coarse roots
940946

941947
leafc_to_litter => veg_cf%leafc_to_litter , & ! Input: [real(r8) (:) ]
942948
frootc_to_litter => veg_cf%frootc_to_litter , & ! Input: [real(r8) (:) ]
949+
livecrootc_to_litter => veg_cf%livecrootc_to_litter , & ! Input: [real(r8) (:) ]
943950
phenology_c_to_litr_met_c => col_cf%phenology_c_to_litr_met_c , & ! InOut: [real(r8) (:,:) ] C fluxes associated with phenology (litterfall and crop) to litter metabolic pool (gC/m3/s)
944951
phenology_c_to_litr_cel_c => col_cf%phenology_c_to_litr_cel_c , & ! InOut: [real(r8) (:,:) ] C fluxes associated with phenology (litterfall and crop) to litter cellulose pool (gC/m3/s)
945952
phenology_c_to_litr_lig_c => col_cf%phenology_c_to_litr_lig_c & ! InOut: [real(r8) (:,:) ] C fluxes associated with phenology (litterfall and crop) to litter lignin pool (gC/m3/s)
@@ -968,6 +975,14 @@ subroutine CNCIsoLitterToColumn (num_soilc, filter_soilc, &
968975
+ frootc_to_litter(p) * fr_fcel(ivt(p)) * wtcol(p) * froot_prof(p,j)
969976
phenology_c_to_litr_lig_c(c,j) = phenology_c_to_litr_lig_c(c,j) &
970977
+ frootc_to_litter(p) * fr_flig(ivt(p)) * wtcol(p) * froot_prof(p,j)
978+
979+
! nonwoody rhizome litter carbon fluxes
980+
phenology_c_to_litr_met_c(c,j) = phenology_c_to_litr_met_c(c,j) &
981+
+ livecrootc_to_litter(p) * fr_flab(ivt(p)) * wtcol(p) * croot_prof(p,j)
982+
phenology_c_to_litr_cel_c(c,j) = phenology_c_to_litr_cel_c(c,j) &
983+
+ livecrootc_to_litter(p) * fr_fcel(ivt(p)) * wtcol(p) * croot_prof(p,j)
984+
phenology_c_to_litr_lig_c(c,j) = phenology_c_to_litr_lig_c(c,j) &
985+
+ livecrootc_to_litter(p) * fr_flig(ivt(p)) * wtcol(p) * croot_prof(p,j)
971986
end if
972987
end if
973988

components/elm/src/biogeochem/CarbonStateUpdate1Mod.F90

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -274,13 +274,13 @@ subroutine CarbonStateUpdate1(bounds, &
274274
veg_cs%leafc_xfer(p) = veg_cs%leafc_xfer(p) - veg_cf%leafc_xfer_to_leafc(p)*dt
275275
veg_cs%frootc(p) = veg_cs%frootc(p) + veg_cf%frootc_xfer_to_frootc(p)*dt
276276
veg_cs%frootc_xfer(p) = veg_cs%frootc_xfer(p) - veg_cf%frootc_xfer_to_frootc(p)*dt
277-
if (woody(ivt(p)) == 1._r8) then
277+
veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%livecrootc_xfer_to_livecrootc(p)*dt
278+
veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) - veg_cf%livecrootc_xfer_to_livecrootc(p)*dt
279+
if (woody(ivt(p)) >= 1.0_r8) then
278280
veg_cs%livestemc(p) = veg_cs%livestemc(p) + veg_cf%livestemc_xfer_to_livestemc(p)*dt
279281
veg_cs%livestemc_xfer(p) = veg_cs%livestemc_xfer(p) - veg_cf%livestemc_xfer_to_livestemc(p)*dt
280282
veg_cs%deadstemc(p) = veg_cs%deadstemc(p) + veg_cf%deadstemc_xfer_to_deadstemc(p)*dt
281283
veg_cs%deadstemc_xfer(p) = veg_cs%deadstemc_xfer(p) - veg_cf%deadstemc_xfer_to_deadstemc(p)*dt
282-
veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%livecrootc_xfer_to_livecrootc(p)*dt
283-
veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) - veg_cf%livecrootc_xfer_to_livecrootc(p)*dt
284284
veg_cs%deadcrootc(p) = veg_cs%deadcrootc(p) + veg_cf%deadcrootc_xfer_to_deadcrootc(p)*dt
285285
veg_cs%deadcrootc_xfer(p) = veg_cs%deadcrootc_xfer(p) - veg_cf%deadcrootc_xfer_to_deadcrootc(p)*dt
286286
end if
@@ -302,6 +302,8 @@ subroutine CarbonStateUpdate1(bounds, &
302302
veg_cs%deadstemc(p) = veg_cs%deadstemc(p) + veg_cf%livestemc_to_deadstemc(p)*dt
303303
veg_cs%livecrootc(p) = veg_cs%livecrootc(p) - veg_cf%livecrootc_to_deadcrootc(p)*dt
304304
veg_cs%deadcrootc(p) = veg_cs%deadcrootc(p) + veg_cf%livecrootc_to_deadcrootc(p)*dt
305+
else ! nonwoody rhizome turnover (B Sulman)
306+
veg_cs%livecrootc(p) = veg_cs%livecrootc(p) - veg_cf%livecrootc_to_litter(p)*dt
305307
end if
306308
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
307309
veg_cs%livestemc(p) = veg_cs%livestemc(p) - veg_cf%livestemc_to_litter(p)*dt
@@ -315,9 +317,9 @@ subroutine CarbonStateUpdate1(bounds, &
315317
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_xsmrpool(p)*dt
316318
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%leaf_curmr(p)*dt
317319
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%froot_curmr(p)*dt
318-
if (woody(ivt(p)) == 1._r8) then
319-
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livestem_curmr(p)*dt
320320
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livecroot_curmr(p)*dt
321+
if (woody(ivt(p)) >= 1.0_r8) then
322+
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livestem_curmr(p)*dt
321323
end if
322324
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
323325
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%livestem_curmr(p)*dt
@@ -330,12 +332,12 @@ subroutine CarbonStateUpdate1(bounds, &
330332
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) + veg_cf%cpool_to_xsmrpool(p)*dt
331333
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%leaf_xsmr(p)*dt
332334
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%froot_xsmr(p)*dt
335+
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livecroot_xsmr(p)*dt
333336
if (nu_com .ne. 'RD') then
334337
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%xsmrpool_turnover(p)*dt
335338
end if
336339
if (woody(ivt(p)) == 1._r8) then
337340
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livestem_xsmr(p)*dt
338-
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livecroot_xsmr(p)*dt
339341
end if
340342
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
341343
veg_cs%xsmrpool(p) = veg_cs%xsmrpool(p) - veg_cf%livestem_xsmr(p)*dt
@@ -355,7 +357,11 @@ subroutine CarbonStateUpdate1(bounds, &
355357
veg_cs%frootc(p) = veg_cs%frootc(p) + veg_cf%cpool_to_frootc(p)*dt
356358
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_frootc_storage(p)*dt
357359
veg_cs%frootc_storage(p) = veg_cs%frootc_storage(p) + veg_cf%cpool_to_frootc_storage(p)*dt
358-
if (woody(ivt(p)) == 1._r8) then
360+
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc(p)*dt
361+
veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%cpool_to_livecrootc(p)*dt
362+
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc_storage(p)*dt
363+
veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p) + veg_cf%cpool_to_livecrootc_storage(p)*dt
364+
if (woody(ivt(p)) >= 1.0_r8) then
359365
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livestemc(p)*dt
360366
veg_cs%livestemc(p) = veg_cs%livestemc(p) + veg_cf%cpool_to_livestemc(p)*dt
361367
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livestemc_storage(p)*dt
@@ -364,10 +370,6 @@ subroutine CarbonStateUpdate1(bounds, &
364370
veg_cs%deadstemc(p) = veg_cs%deadstemc(p) + veg_cf%cpool_to_deadstemc(p)*dt
365371
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_deadstemc_storage(p)*dt
366372
veg_cs%deadstemc_storage(p) = veg_cs%deadstemc_storage(p) + veg_cf%cpool_to_deadstemc_storage(p)*dt
367-
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc(p)*dt
368-
veg_cs%livecrootc(p) = veg_cs%livecrootc(p) + veg_cf%cpool_to_livecrootc(p)*dt
369-
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_livecrootc_storage(p)*dt
370-
veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p) + veg_cf%cpool_to_livecrootc_storage(p)*dt
371373
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_deadcrootc(p)*dt
372374
veg_cs%deadcrootc(p) = veg_cs%deadcrootc(p) + veg_cf%cpool_to_deadcrootc(p)*dt
373375
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_to_deadcrootc_storage(p)*dt
@@ -387,10 +389,10 @@ subroutine CarbonStateUpdate1(bounds, &
387389
! growth respiration fluxes for current growth
388390
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_leaf_gr(p)*dt
389391
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_froot_gr(p)*dt
390-
if (woody(ivt(p)) == 1._r8) then
392+
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_gr(p)*dt
393+
if (woody(ivt(p)) >= 1.0_r8) then
391394
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livestem_gr(p)*dt
392395
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadstem_gr(p)*dt
393-
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_gr(p)*dt
394396
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadcroot_gr(p)*dt
395397
end if
396398
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
@@ -401,10 +403,10 @@ subroutine CarbonStateUpdate1(bounds, &
401403
! growth respiration for transfer growth
402404
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_leaf_gr(p)*dt
403405
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_froot_gr(p)*dt
404-
if (woody(ivt(p)) == 1._r8) then
406+
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_livecroot_gr(p)*dt
407+
if (woody(ivt(p)) >= 1.0_r8) then
405408
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_livestem_gr(p)*dt
406409
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_deadstem_gr(p)*dt
407-
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_livecroot_gr(p)*dt
408410
veg_cs%gresp_xfer(p) = veg_cs%gresp_xfer(p) - veg_cf%transfer_deadcroot_gr(p)*dt
409411
end if
410412
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
@@ -415,10 +417,10 @@ subroutine CarbonStateUpdate1(bounds, &
415417
! growth respiration at time of storage
416418
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_leaf_storage_gr(p)*dt
417419
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_froot_storage_gr(p)*dt
418-
if (woody(ivt(p)) == 1._r8) then
420+
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_storage_gr(p)*dt
421+
if (woody(ivt(p)) >= 1.0_r8) then
419422
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livestem_storage_gr(p)*dt
420423
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadstem_storage_gr(p)*dt
421-
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_livecroot_storage_gr(p)*dt
422424
veg_cs%cpool(p) = veg_cs%cpool(p) - veg_cf%cpool_deadcroot_storage_gr(p)*dt
423425
end if
424426
if (ivt(p) >= npcropmin) then ! skip 2 generic crops
@@ -435,13 +437,13 @@ subroutine CarbonStateUpdate1(bounds, &
435437
veg_cs%leafc_xfer(p) = veg_cs%leafc_xfer(p) + veg_cf%leafc_storage_to_xfer(p)*dt
436438
veg_cs%frootc_storage(p) = veg_cs%frootc_storage(p) - veg_cf%frootc_storage_to_xfer(p)*dt
437439
veg_cs%frootc_xfer(p) = veg_cs%frootc_xfer(p) + veg_cf%frootc_storage_to_xfer(p)*dt
438-
if (woody(ivt(p)) == 1._r8) then
440+
veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p)- veg_cf%livecrootc_storage_to_xfer(p)*dt
441+
veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) + veg_cf%livecrootc_storage_to_xfer(p)*dt
442+
if (woody(ivt(p)) >= 1.0_r8) then
439443
veg_cs%livestemc_storage(p) = veg_cs%livestemc_storage(p) - veg_cf%livestemc_storage_to_xfer(p)*dt
440444
veg_cs%livestemc_xfer(p) = veg_cs%livestemc_xfer(p) + veg_cf%livestemc_storage_to_xfer(p)*dt
441445
veg_cs%deadstemc_storage(p) = veg_cs%deadstemc_storage(p) - veg_cf%deadstemc_storage_to_xfer(p)*dt
442446
veg_cs%deadstemc_xfer(p) = veg_cs%deadstemc_xfer(p) + veg_cf%deadstemc_storage_to_xfer(p)*dt
443-
veg_cs%livecrootc_storage(p) = veg_cs%livecrootc_storage(p)- veg_cf%livecrootc_storage_to_xfer(p)*dt
444-
veg_cs%livecrootc_xfer(p) = veg_cs%livecrootc_xfer(p) + veg_cf%livecrootc_storage_to_xfer(p)*dt
445447
veg_cs%deadcrootc_storage(p) = veg_cs%deadcrootc_storage(p)- veg_cf%deadcrootc_storage_to_xfer(p)*dt
446448
veg_cs%deadcrootc_xfer(p) = veg_cs%deadcrootc_xfer(p) + veg_cf%deadcrootc_storage_to_xfer(p)*dt
447449
veg_cs%gresp_storage(p) = veg_cs%gresp_storage(p) - veg_cf%gresp_storage_to_xfer(p)*dt

components/elm/src/biogeochem/GrowthRespMod.F90

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,13 @@ subroutine GrowthResp(num_soilp, filter_soilp)
133133
transfer_froot_gr(p) = frootc_xfer_to_frootc(p) * grperc(ivt(p)) * &
134134
(1._r8 - grpnow(ivt(p)))
135135

136-
if (woody(ivt(p)) == 1._r8) then
136+
! B. Sulman: Moved out of woody to allow graminoid rhizomes
137+
cpool_livecroot_gr(p) = cpool_to_livecrootc(p) * grperc(ivt(p))
138+
cpool_livecroot_storage_gr(p) = cpool_to_livecrootc_storage(p) * &
139+
grperc(ivt(p)) * grpnow(ivt(p))
140+
transfer_livecroot_gr(p) = livecrootc_xfer_to_livecrootc(p) * &
141+
grperc(ivt(p)) * (1._r8 - grpnow(ivt(p)))
142+
if (woody(ivt(p)) >= 1.0_r8) then
137143
cpool_livestem_gr(p) = cpool_to_livestemc(p) * grperc(ivt(p))
138144
cpool_livestem_storage_gr(p) = cpool_to_livestemc_storage(p) * &
139145
grperc(ivt(p)) * grpnow(ivt(p))
@@ -144,11 +150,6 @@ subroutine GrowthResp(num_soilp, filter_soilp)
144150
grperc(ivt(p)) * grpnow(ivt(p))
145151
transfer_deadstem_gr(p) = deadstemc_xfer_to_deadstemc(p) * &
146152
grperc(ivt(p)) * (1._r8 - grpnow(ivt(p)))
147-
cpool_livecroot_gr(p) = cpool_to_livecrootc(p) * grperc(ivt(p))
148-
cpool_livecroot_storage_gr(p) = cpool_to_livecrootc_storage(p) * &
149-
grperc(ivt(p)) * grpnow(ivt(p))
150-
transfer_livecroot_gr(p) = livecrootc_xfer_to_livecrootc(p) * &
151-
grperc(ivt(p)) * (1._r8 - grpnow(ivt(p)))
152153
cpool_deadcroot_gr(p) = cpool_to_deadcrootc(p) * grperc(ivt(p))
153154
cpool_deadcroot_storage_gr(p) = cpool_to_deadcrootc_storage(p) * &
154155
grperc(ivt(p)) * grpnow(ivt(p))

components/elm/src/biogeochem/MaintenanceRespMod.F90

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,8 @@ subroutine MaintenanceResp(bounds, &
235235
else if (ivt(p) >= npcropmin .and. livestemn(p) .gt. 0._r8) then
236236
livestem_mr(p) = livestemn(p)*br_mr*tc
237237
grain_mr(p) = grainn(p)*br_mr*tc
238+
else ! Graminoid rhizomes
239+
livecroot_mr(p) = livecrootn(p)*br_mr*tc
238240
end if
239241
if (br_xr(ivt(p)) .gt. 1e-9_r8) then
240242
xr(p) = cpool(p) * br_xr(ivt(p)) * tc

0 commit comments

Comments
 (0)