#include <DensityLight.h>
Inheritance diagram for clDensityLight:
Public Member Functions | |
clDensityLight (clSimManager *p_oSimManager) | |
Constructor. | |
void | DoShellSetup (xercesc::DOMDocument *p_oDoc) |
Does setup for this behavior. | |
void | TimestepCleanup () |
Sets the grid updated flag back to false. | |
float | CalcLightValue (clTree *p_oTree, clTreePopulation *p_oPop) |
Gets the light value for a particular tree. | |
float | GetMeanGLI (const int &iDensity) |
Calculates the mean GLI for a given density. | |
Protected Member Functions | |
void | UpdateGridValues (clTreePopulation *p_oPop) |
Performs the grid updating each timestep. | |
Protected Attributes | |
clGridBase * | mp_oLightGrid |
Grid object which holds the light values. | |
float | m_fA |
The "a" parameter for the mean light function. | |
float | m_fB |
The "b" parameter for the mean light function. | |
float | m_fC |
The "c" parameter for the mean light function. | |
float | m_fSigma |
The sigma parameter of the lognormal PDF function. | |
float | m_fMinDbh |
The minimum DBH for trees to count towards density in a cell. | |
int | m_iChangeThreshold |
The number by which the density in a cell has to change in order to trigger a new light calculation. | |
short int | m_iGridLightCode |
Return code for the "Light" data member. | |
short int | m_iGridCountCode |
Return code for the "Count" data member. | |
bool | m_bGridUpdated |
Whether or not the "Density Light" grid has been updated this timestep. |
This behavior calculates light level as a function of local tree density. The density is used to calculate a mean light level, which is used to choose a random value from a lognormal probability distribution. In order to ensure some level of continuity through time, a grid cell's light level is not recalculated unless the local tree density has changed by at least an amount set by the user.
A grid, "Density Light", is used to store light values. Trees get the light levels of their grid cell.
The mean light level for a grid cell is calculated as follows:
When counting trees for the density, seedlings and snags are never counted. Other trees only count if they have a DBH above a user-set minimum.
After the mean light level is calculated, it is turned into a "location parameter" (mu) for the lognormal PDF as follows:
The mu value is used as the zeta value in a lognormal random draw.
Note that this behavior is dependent on the size of grid cells for its behavior.
This behavior creates a new grid called "Density Light". There's more on that grid below.
The namestring for this behavior is "densitylightshell"; the parameter file call string is "Density Light".
Copyright 2005 Charles D. Canham.
|
Constructor. Sets the namestring.
|
|
Gets the light value for a particular tree. First, it checks to see if the grid has been updated this timestep. If not, then UpdateGridValues() is called. Then the value in the tree's grid cell of the "Density Light" grid is returned.
Implements clLightBase. |
|
Does setup for this behavior. This reads parameter file values and sets up the grid.
Reimplemented from clLightBase. |
|
Calculates the mean GLI for a given density. This is a separate function largely for testing purposes.
|
|
Performs the grid updating each timestep. It counts up the trees in each cell of the grid. It then compares them to the previous timestep's density. For any cell that has changed by more than the change threshold, a new light level is calculated. At the end, this sets m_bGridUpdated to true.
|
|
Grid object which holds the light values. The name of this grid is "Density Light". It has one float data member called "Light", and one int data member called "Count", which holds the number of trees (that count towards density) in the cell. It uses the default grid cell resolution unless otherwise instructed in the parameter file. A map of this grid in the parameter file will be honored. |