Calculation of growth

From Heureka Wiki
Jump to navigation Jump to search

Introduction

Growth from one period to another period is done as follows (assuming 5-year periods)

  1. Make a growth prognosis based on the residual state (state after treatment, if any) of the treatment unit
  2. Calculate the state in the new period
  3. Assign height and volume to trees in the new period (based on the state before treatment in the new period)
  4. Make growth adjustments that are treatment related

Make growth prognosis

Growth prognosis is done in the following steps, per prediction unit:

  1. Update tree values
    1. Determine Bal for each tree (basal area of all larger trees)
    2. Determine if each tree is an overstorey tree or not
    3. If any tree changed to/from overstorey, update aggregated values for the prediction unit (e.g. mean age, total volume, and mean diameter), since some of these values are per forest layer
  2. Assign diameter growth and mortality to trees
  3. Assign height growth and mortality to saplings
  4. Prognos ingrowth (only if stand is established)
  5. Adjust diameter growth due to stand growth model and thinning effect

Calculate state in a new period

  1. Set the values for the new period:
    1. Update diameter (for trees) or height (for saplings), and stems (for both trees and saplings)
  2. If there are saplings but not waiting saplings, and mean height exceeds height limit for young stand, change saplings to trees:
    1. Change tree type of saplings with diameter < 4 cm to removed
    2. Change tree type of remaining saplings to trees
    3. Update aggregated values for each prediction unit where there was saplings
  3. If there are ingrown trees:
    1. Assign age, height, and growth to each ingrown tree
    2. Update aggregated values for each prediction unit where there was ingrown trees
  4. If aggregated values for any prediction unit has been changed, update aggregated values for the treatment unit
  5. Perform growth adjustment that is not treatment related

Assigning height and volume

For each prediction unit:

  1. Height and volume is assigned to trees
  2. Volume is assigned to saplings
  3. If first period, dead trees is estimated
  4. Aggregated volume is updated

Making growth adjustments

When are growth adjusters called and why?

Certain treatments and models may affect the forest state a long time after the treatment has occured or the model was activated. For instance, doing a final felling with seed trees also requires that the seed trees are removed after some time, extracting biofuel causes a growth reduction, intensive fertilization causes increased growth.

To solve this problem, it is possible to register a IGrowthAdjuster to a treatment unit.

Registered growth adjusters are called two times during growth prognosis:

"BeforeTreatment"
Just after the state in a new period has been calculated, but before height and volume has been calculated
"AfterTreatment"
After height and volume has been calculated

(The terms BeforeTreatment and AfterTreatment are not so descriptive, but will be explained more below.)

A IGrowthAdjuster must decide if it should be applied BeforeTreatment, or AfterTreatment.

BeforeTreatment is used if the adjustment is due to an expected growth change caused by the treatment. For instance, extraction of biofuel or intensive fertilization adjusts the growth and this will also affect volume, height, and the state before treatment for the new period. Growth adjusters that has BeforeTreatment set to true are those that affects the state before treatment for the new period

AfterTreatment is used if the adjustment is due to an extra treatment being automatically invoked in the new period. For instance, removal of overstorey trees. Growth adjusters that has BeforeTreatment set to false are those that affects the state after treatment for the new period

Implementing a growth adjuster

A growth adjuster typically stores a period or a period range internally to know when to do the adjustment. For example, the OverstoreyRemover class stores the removal period. When AdjustGrowth is called, it can then check if the current period is the removal period, and then remove the overstorey layer.

Implementation Remarks

Growth adjusters has proven to be powerful when implementing certain types of treatments, but also hard to understand. An alternative solution would be to define events on the TreatmentUnit class, and allow other classes register to those events. Suggested events are:

GrowthCalculated
Occurs when growth prognosis has been made, but before a new period is entered. This allows classes like the BioFuelGrowthAdjuster to make further adjustments to the growth prognosis.
NewPeriodEntered
Occurs when the state of a new period has been calculated, but before any other calculations (such as volume and height) in the new period. This allows classes like the IntensiveFertilizor to adjust variables like site index in the new period.
GrowthComplete
Occurs when the growth calculcation is complete. This can be used by most existing growth adjusters, to perform additional treatments for instance.

Growing for other period lengths

Growing for other period lengths than 5 years is done by first growing a normal 5-year period, and then interpolate the values to the desired length.