clDensityLight Class Reference

Density Light - Version 1.0. More...

#include <DensityLight.h>

Inheritance diagram for clDensityLight:

clLightBase clBehaviorBase clWorkerBase

List of all members.

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

clGridBasemp_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.


Detailed Description

Density Light - Version 1.0.

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:

GLIm = a / (1 + (den/c) b)
where:

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:

μ = ln(mean) - (σ 2)/ 2

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.

Author:
Lora E. Murphy

Edit history:
-----------------
December 7, 2005 - Created (LEM)

Constructor & Destructor Documentation

clDensityLight::clDensityLight ( clSimManager p_oSimManager  ) 

Constructor.

Sets the namestring.

Parameters:
p_oSimManager Sim Manager object.


Member Function Documentation

void clDensityLight::DoShellSetup ( xercesc::DOMDocument *  p_oDoc  )  [virtual]

Does setup for this behavior.

This reads parameter file values and sets up the grid.

Parameters:
p_oDoc DOM tree of parsed input file.
Exceptions:
modelErr if:
  • The value for c = 0
  • If the density change threshold < 0
  • If the minimum DBH < 0
  • Grid cell lengths of "Density Light" don't divide evenly by the plot lengths

Reimplemented from clLightBase.

void clDensityLight::TimestepCleanup (  )  [inline, virtual]

Sets the grid updated flag back to false.

Reimplemented from clWorkerBase.

float clDensityLight::CalcLightValue ( clTree p_oTree,
clTreePopulation p_oPop 
) [virtual]

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.

Returns:
GLI value, as recorded in the tree's "Density Light" grid cell.

Implements clLightBase.

float clDensityLight::GetMeanGLI ( const int &  iDensity  )  [inline]

Calculates the mean GLI for a given density.

This is a separate function largely for testing purposes.

Parameters:
iDensity The tree density.
Returns:
Mean GLI, bounded between 0 and 100.

void clDensityLight::UpdateGridValues ( clTreePopulation p_oPop  )  [protected]

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.

Parameters:
p_oPop Pointer to the tree population.


Member Data Documentation

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.

float clDensityLight::m_fA [protected]

The "a" parameter for the mean light function.

float clDensityLight::m_fB [protected]

The "b" parameter for the mean light function.

float clDensityLight::m_fC [protected]

The "c" parameter for the mean light function.

float clDensityLight::m_fSigma [protected]

The sigma parameter of the lognormal PDF function.

float clDensityLight::m_fMinDbh [protected]

The minimum DBH for trees to count towards density in a cell.

The number by which the density in a cell has to change in order to trigger a new light calculation.

short int clDensityLight::m_iGridLightCode [protected]

Return code for the "Light" data member.

short int clDensityLight::m_iGridCountCode [protected]

Return code for the "Count" data member.

Whether or not the "Density Light" grid has been updated this timestep.


The documentation for this class was generated from the following file:

Generated on Tue Apr 19 13:56:08 2011 for SORTIE Core C++ Documentation by  doxygen 1.5.6