CSR plant growth

Jump to: navigation, search
This page no longer contains the most actual facts and needs to be updated.
It was marked as out-dated on 01-07-2014.

Starting point for plant growth is the nett amount of glucose (NPP) produced by photosynthesis. This amount has been scaled down in case of water limitation.

Next, the allocation process assigns a share of the NPP to each plant organ.

Then each organ tries to convert the assigned amount of glucose into biomass increase. The default way (a specialized plant organ may override that way) to convert the available glucose into body-mass is:

  • the plant organ calculates how much of its constituent compounds can be constructed, based on the available amount of glucose. This process uses a given fraction for each compound.


Suppose, a certain plant part consists for 60% of cellulose and 40% of lignin. The used stoichiometries are C6H10O5 and C10H12O3 respectively. Additionally, cellulose uses 0.42 mol C from glusose per mol product as energy to build, and lignin requires 3.12 mol for construction related respiration.

So, to build one mole of new body tissue, or 0.6 mol cellulose + 0.4 mol lignin, it requires:

  0.6 * (( 6 + 0.42) Carbon + 5 Oxygen + 10 Hydrogen)
+ 0.4 * ((10 + 3.12) Carbon + 3 Oxygen + 12 Hydrogen)
=             9.1 Carbon + 4.2 Oxygen + 10.8 Hydrogen

To realize this, 9.1 / 6 = 1.52 moles of glucose is needed as carbon source. Since glucose also contains 6H2O, no additional oxygen and hydrogen is necessary, but on the contrary, the reaction produces 1.42 mol of water.

  • the entire production is scaled down for nitrogeneous compounds to fit the available N-sources.


To produce protein, in addition to C, O, and H, also Nitrogen is necessary, and therefore a nitrogen source in addition to glucose as carbon source. Proteins come in thousands of kinds, but for the CSR-model a protein is a icosapeptide consisting of 20 amino acids (C107H157N29O29).

The energetic cost of construction proteins vary depending on the nitrogen source and location in the plant. CSR can construct proteins from amino acids, ammonium and nitrate. For the latter two, amino acids are tacidly constructed as intermediate products within the process.

In the previous calculation step, the stoichiometry of the construction was determined, which was subsequently scaled to fit the available amount of carbon from glucose. For one kmol of glucose this would be (N-source = NO3 in the leaf):

º glucose  = 1000.0
º nitrate  = 1140.5
º protein  =   39.3
º oxygen   = 2684.2
º water    = 2912.7

In case of a limiting supply of nitrogen, these amounts are scaled down to Navailable/ 1140.5

  • the remaining production is taken from the available resources and incorporated into the organ's mass.

  1. At present, there is no recycling of resources if e.g. due to limitation not all available glucose is used.
  2. Should plants actively redistribute resources from organs with a surplus to those with shortage?


  def grow(self, share, availableResourceStates):
    turn NPP into bodymass
    @param share: share of resources available
    @param availableResourceStates: available dict (State)
    unlimited = self._getUnlimitedGrowth()
    for source in unlimited:
      # available glucose equals 1/6th of available C:
      multiplyDictionary(unlimited[source], share * availableResourceStates['carbon'].value / 6)
    realized = self._implyResourceLimitation(unlimited, share, availableResourceStates)
    # note thate it is quite possible that either side products or limitiations of one
    # compound can slacken the constraints on others. With the curent set of constituent
    # definitions, this is unlikely to become the case with N-sources, but quite probable
    # for glucose that will be left over after N-limitation.
    # transfering mass from sources to destinations:
    self.states['carbon'].transferFrom(availableResourceStates['carbon'], -6* realized['glucose'])
    for c in CompoundConversion.supported_N_sources:
      if realized.has_key(c):
        self.states[c].transferFrom(availableResourceStates[c], -realized[c])
    availableResourceStates['water'].transferFrom(biomass_bound, realized['water']) # may also be negative