Skip to content

Insufficient carbon for growth should cause mortality, and fix C balance #325

@dlebauer

Description

@dlebauer

Problem

SIPNET can generate negative values of biomass. When biomass <0, plants should die.

In the current code, impossible negative states biomass pools are repaired after they are updated by clamping stocks to zero rather than handling plant carbon-deficit failure explicitly.

However, when plantWoodCStorageDelta term added to the wood update, it is possible for aboveground biomass to be negative at the end of the time step (and thus, in the sipnet.out).

Related but out of scope:
If the clamping is > tolerance, the ensureNonNegative function warns but still clamps to 0. It seems this could introduce phantom mass.

Proposed change

Implement a mortality rule:

  • do not allow live structural biomass pools (wood, leaf, fine root, root) to go negative (current clamping behavior)
  • do not let negative wood storage make wood-based fluxes or biomass outputs negative
  • trigger mortality before stock clamping if a timestep would drive any live structural biomass pool negative
  • on mortality, set plantWoodC, plantLeafC, fineRootC, coarseRootC, and plantWoodCStorageDelta to zero in the same timestep
  • transfer the biomass of the dead plants as currently implemented:
    • roots --> soil
    • leaves and wood --> litter if litter-pool=on, otherwise --> soil
  • if plantWoodCStorageDelta is negative at death, remove that from the amount transferred to litter / soil
  • do not rely on clampedC / clampedN in the mortality path

Acceptance criteria

  • No live structural biomass pool < -eps [eps = small tolerance].
  • Carbon-deficit triggers explicit mortality instead of clamp-based repair.
  • Mortality conserves mass and uses current aboveground/belowground routing conventions.
  • If wood storage is negative at death, mortality routing does not create phantom carbon. I can't think of anything simpler than mass balance is maintained by taking from other pools either evenly or in order: wood, root, [leaf + fine root])

Alternatives

After looking into this, I realized how complex it is to represent mortality! In croplands especially, mortality is not a high priority. If it is simpler to throw an error, lets tag this issue 'on hold' and just do that.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions