#include <DimensionAnalysis.h>
Inheritance diagram for clDimensionAnalysis:
Public Types | |
mm | |
Millimeters. | |
cm | |
Centimeters. | |
in | |
Inches. | |
g | |
Gram. | |
kg | |
Kilogram. | |
lb | |
Pound. | |
enum | DbhUnits { mm, cm, in } |
Units of DBH that correspond to the parameters entered by the user. More... | |
enum | BiomassUnits { g, kg, lb } |
Units of biomass that correspond to the parameters entered by the user. More... | |
Public Member Functions | |
clDimensionAnalysis (clSimManager *p_oSimManager) | |
Constructor. | |
~clDimensionAnalysis () | |
Destructor. | |
void | Action () |
Makes biomass calculations. | |
void | GetData (xercesc::DOMDocument *p_oDoc) |
Does setup for this behavior. | |
void | RegisterTreeDataMembers () |
Registers the "Biomass" float data member. | |
Protected Attributes | |
float * | mp_fA |
a in a biomass equation. | |
float * | mp_fB |
b in a biomass equation. | |
float * | mp_fC |
c in a biomass equation. | |
float * | mp_fD |
d in a biomass equation. | |
float * | mp_fE |
e in a biomass equation. | |
float * | mp_fCorrectionFactor |
Correction factor for a biomass equation. | |
float * | mp_fDbhConverter |
Converts DBH values to the appropriate units. | |
float * | mp_fBiomassConverter |
Converts biomass values to metric tons. | |
int * | mp_iEquationID |
Equation ID, as a value from 1 to 9. | |
int * | mp_iIndexes |
Helps with array access. | |
bool * | mp_bUseCorrectionFactor |
Whether or not to use a correction factor. | |
bool * | mp_bConvertDBH |
Whether or not to convert DBH (i.e. | |
char * | m_cQuery |
String to pass to clTreePopulation::Find() in order to get the trees for which to calculate biomass. | |
short int ** | mp_iBiomassCodes |
Holds data member codes for "Biomass" float data member. |
This class calculates above-ground tree biomass. There are 9 possible equations. The equations, and all terminology, ID numbers, and parameter names, are taken directly from:
Jenkins, J.C., D.C. Chojnacky, L.S Heath, and R.A. Birdsey. 2004. Comprehensive Database of Diameter-based Biomass Regressions for North American Tree Species. United States Department of Agriculture, Forest Service General Technical Report NE-319. http://www.fs.fed.us/ne
The list of equations is in Table 6. The equations are as follows:
ID | Equation |
---|---|
1 | log10 biomass = a + b * (log10(dia^c)) |
2 | ln biomass = a + b * dia + c * (ln(dia^d)) |
3 | ln biomass = a + b * ln(dia) + c * (d + (e * ln(dia))) |
4 | biomass = a + b * dia + c * (dia ^ d) |
5 | biomass = a + (b * dia) + c * (dia ^ 2) + d * (dia ^ 3) |
6 | biomass = a * (exp(b + (c * ln(dia)) + (d * dia))) |
7 | biomass = a + ((b * (dia ^ c))/((dia ^ c) + d)) |
8 | log100 biomass = a + (b * log10(dia)) |
9 | ln biomass = ln(a) + (b * ln(dia)) |
There are lots of different parameters published in the literature, and the units are all over the place. We want users to be able to enter literature values as published. Therefore, the user specifies the units of DBH that work with the parameters they're entering: either cm, mm, or inches. Then they specify the units of biomass that the parameters they entered should produce: g, k, or lbs. This behavior does all necessary conversion so that in the end it reports biomass values in metric tons (Mg = 10 3 kg).
Users have the option of specifying a correction factor, which is sometimes used by the ln biomass or log10 biomass equations. This value is multiplied by the result before converting to metric tons.
The biomass value is stored in a float tree data member called "Biomass" that this behavior adds.
This class's namestring and parameter call string are both "tree biomass calculator" (to enhance backwards compatibility with an earlier version before this behavior was called "dimension analysis").
This behavior may not be applied to seedlings.
Copyright 2005 Charles D. Canham.
clDimensionAnalysis::clDimensionAnalysis | ( | clSimManager * | p_oSimManager | ) |
clDimensionAnalysis::~clDimensionAnalysis | ( | ) |
Destructor.
Deletes arrays.
void clDimensionAnalysis::Action | ( | ) | [virtual] |
Makes biomass calculations.
A query is sent to the tree population to get all trees to which this behavior is applied. For each, the biomass is calculated and the value is placed in the "Biomass" float tree data member.
This puts all the equations in an "if" statement. I think this is as fast a way as any to do this.
Reimplemented from clBehaviorBase.
void clDimensionAnalysis::GetData | ( | xercesc::DOMDocument * | p_oDoc | ) | [virtual] |
Does setup for this behavior.
Steps:
p_oDoc | DOM tree of parsed input file. |
modelErr | if:
|
Implements clWorkerBase.
void clDimensionAnalysis::RegisterTreeDataMembers | ( | ) | [virtual] |
Registers the "Biomass" float data member.
The return codes are captured in the mp_iBiomassCodes array.
modelErr | if this behavior is being applied to any tree type except saplings, adults, and snags. |
Reimplemented from clBehaviorBase.
char* clDimensionAnalysis::m_cQuery [protected] |
String to pass to clTreePopulation::Find() in order to get the trees for which to calculate biomass.
This will instigate a species/type search for all the species and types to which this behavior applies.
bool* clDimensionAnalysis::mp_bConvertDBH [protected] |
Whether or not to convert DBH (i.e.
whether or not DBH is supposed to be in cm). Array size is # species to which this behavior applies.
bool* clDimensionAnalysis::mp_bUseCorrectionFactor [protected] |
Whether or not to use a correction factor.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fA [protected] |
a in a biomass equation.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fB [protected] |
b in a biomass equation.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fBiomassConverter [protected] |
Converts biomass values to metric tons.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fC [protected] |
c in a biomass equation.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fCorrectionFactor [protected] |
Correction factor for a biomass equation.
This value, if desired by the user, is multiplied by the finished biomass. Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fD [protected] |
d in a biomass equation.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fDbhConverter [protected] |
Converts DBH values to the appropriate units.
Array size is # species to which this behavior applies.
float* clDimensionAnalysis::mp_fE [protected] |
e in a biomass equation.
Array size is # species to which this behavior applies.
short int** clDimensionAnalysis::mp_iBiomassCodes [protected] |
Holds data member codes for "Biomass" float data member.
First array index is # species to which this behavior applies, second is number types (3 - sapling, adult, snag)
int* clDimensionAnalysis::mp_iEquationID [protected] |
Equation ID, as a value from 1 to 9.
Array size is # species to which this behavior applies.
int* clDimensionAnalysis::mp_iIndexes [protected] |
Helps with array access.
Array size is number of total species.