clNciGrowth Class Reference

NCI growth - Version 2.1. More...

#include <NCIGrowth.h>

Inheritance diagram for clNciGrowth:

clGrowthBase clNCIBase clBehaviorBase clWorkerBase

List of all members.

Public Member Functions

 clNciGrowth (clSimManager *p_oSimManager)
 Constructor.
 ~clNciGrowth ()
 Destructor.
float CalcDiameterGrowthValue (clTree *p_oTree, clTreePopulation *p_oPop, float fHeightGrowth)
 Returns the value in the tree's float data member that holds the value that was calculated by PreGrowthCalcs().
void PreGrowthCalcs (clTreePopulation *p_oPop)
 Calculates growth for all NCI trees.
void DoShellSetup (xercesc::DOMDocument *p_oDoc)
 Does setup.
void SetNameData (char *cNameString)
 Captures the namestring passed to this behavior.

Protected Member Functions

void ValidateData ()
 Makes sure all input data is valid.
void GetTreeMemberCodes ()
 Gets the return codes for needed tree data members.
void ReadParameterFile (xercesc::DOMDocument *p_oDoc)
 Reads data from the parameter file.
void AssembleUniqueTypes ()
 Assembles a unique list of types applied to this behavior and places it in mp_iWhatBehaviorTypes.

Protected Attributes

short int ** mp_iGrowthCodes
 Holds return data codes for the "Growth" tree data member.
short int * mp_iWhatBehaviorTypes
 List of types managed by this behavior.
short int m_iNumBehaviorTypes
 Number of types managed by this behavior.


Detailed Description

NCI growth - Version 2.1.

This is a growth shell object which applies the NCI (neighborhood competition index) function as it is defined in clNCIBase.

The amount of growth is in cm/year. For multi-year timesteps, the behavior will calculate total growth with a loop. Each loop iteration will increment DBH for one year. For each year, the Size Effect (SE) value and the DBHγ portion of the Crowding Effect is recalculated with the previous year's new DBH value. All values for each year of growth are summed to get the growth for the timestep.

This is a generic behavior. It is expected that not all terms in the growth equation will be used. A user can turn off some of the terms by setting key parameters to 0 or 1. To be efficient, this behavior looks for this and has several alternate function forms to avoid extra math. It calls the correct function form through function pointers, which it sets during setup.

If any damage effect parameters are used, this behavior must be combined with the storm damage behaviors. If the shading effect is used, some light behavior must be used (and it really should be clSailLight, but this isn't enforced).

This cannot be applied to seedlings. An error will be thrown if seedlings are passed.

The parameter file call string for this to be diameter-incrementing with auto-height updating is "ncigrowth"; for diameter-only incrementing, use "ncigrowth diam only". The namestring for this behavior is "ncigrowthshell".

Copyright 2003 Charles D. Canham.

Author:
Lora E. Murphy

Edit history:
-----------------
April 28, 2004 - Submitted as beta (LEM)
May 21, 2004 - Updated to support diameter-only growth (LEM)
July 26, 2004 - Fixed multi-year timestep growth compounding (LEM)
January 18, 2005 - Rewrote as generic behavior and promoted to Version 2.0 (LEM)
February 24, 2005 - Removed the "nci_growth" tree data member (LEM)
March 16, 2005 - Subclassed this to NCIBase (LEM)
February 5, 2008 - Changed ValidateData to not require crowding effect (LEM)

Constructor & Destructor Documentation

clNciGrowth::clNciGrowth ( clSimManager p_oSimManager  ) 

Constructor.

Parameters:
p_oSimManager Sim Manager object.

clNciGrowth::~clNciGrowth (  ) 

Destructor.


Member Function Documentation

float clNciGrowth::CalcDiameterGrowthValue ( clTree p_oTree,
clTreePopulation p_oPop,
float  fHeightGrowth 
) [virtual]

Returns the value in the tree's float data member that holds the value that was calculated by PreGrowthCalcs().

Parameters:
p_oTree Tree to which to apply growth.
p_oPop Tree population object.
fHeightGrowth Amount of height growth, in m (ignored).
Returns:
Amount of diameter growth, in cm.

Reimplemented from clGrowthBase.

void clNciGrowth::PreGrowthCalcs ( clTreePopulation p_oPop  )  [virtual]

Calculates growth for all NCI trees.

The values are stashed in the "Growth" tree float data member for later application.

Steps:

  1. Get all trees for this behavior.
  2. For each tree, calculate NCIi by calling the function in the function pointer NCI. Stash the value in "Growth" for each tree. On the way, pick up the max NCIi value for each species (NCImax) if it is being used (if m_bUseNciMax = true).
  3. Go through all the NCI trees again. Calculate the amount of growth for each using the equations above. Use the function pointers to make sure that the proper function forms are used. Stash the end result in "Growth".
This must be called first of any growth stuff, since it uses other trees' DBHs to calculate NCI, and these must be before growth has been applied.

Growth per timestep is calculated by looping over the number of years per timestep and incrementing the DBH.

Parameters:
p_oPop Tree population object.

Reimplemented from clGrowthBase.

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

Does setup.

  1. AssembleUniqueTypes() is called to create a list of unique behavior types.
  2. ReadParameterFile() is called to read the parameter file's data.
  3. ValidateData() is called to validate the data.
  4. GetTreeMemberCodes() is called to get tree data return codes.
  5. SetFunctionPointers() is called to set up our function pointers.

Parameters:
p_oDoc DOM tree of parsed input tree.

Reimplemented from clGrowthBase.

void clNciGrowth::SetNameData ( char *  cNameString  )  [virtual]

Captures the namestring passed to this behavior.

This is overridden from clBehaviorBase so we can capture the namestring passed. Since this class can create multiple kinds of behaviors that function differently, this will capture what kind of behavior this is supposed to be.

Parameters:
cNameString Behavior's namestring.

Reimplemented from clBehaviorBase.

void clNciGrowth::ValidateData (  )  [protected]

Makes sure all input data is valid.

The following must all be true:

  • Max radius of neighbor effects must be >= 0
  • Max growth for each species must be > 0
  • X0 (size effect mode) for each species must be > 0
  • Xb (size effect variance) for each species must not = 0
  • Eta for each species for each damage category beyond undamaged must be between 0 and 1, if used
  • Storm Effect parameters for each species for each damage category beyond undamaged must be between 0 and 1, if used
  • DBH divisor must be > 0
  • Any species using Shading (mp_fShadingCoefficient != 0) must have a light behavior assigned (has data member "Light" registered)
Exceptions:
modelErr if any of the above conditions are not met.

void clNciGrowth::GetTreeMemberCodes (  )  [protected]

Gets the return codes for needed tree data members.

If storm damage is used (any of the storm damage parameters are != 1), this declares and populates the mp_iDamageCodes array with the return codes for the "stm_dmg" tree int data member.

Exceptions:
modelErr if a code comes back -1 for any species/type combo to which this behavior is applied.

void clNciGrowth::ReadParameterFile ( xercesc::DOMDocument *  p_oDoc  )  [protected]

Reads data from the parameter file.

Parameters:
p_oDoc DOM tree of parsed input tree.
Exceptions:
modelErr if this behavior has been applied to any types except sapling and adult.

void clNciGrowth::AssembleUniqueTypes (  )  [protected]

Assembles a unique list of types applied to this behavior and places it in mp_iWhatBehaviorTypes.


Member Data Documentation

short int** clNciGrowth::mp_iGrowthCodes [protected]

Holds return data codes for the "Growth" tree data member.

Array size is number of species to which this behavior applies by 2 (saplings and adults).

short int* clNciGrowth::mp_iWhatBehaviorTypes [protected]

List of types managed by this behavior.

short int clNciGrowth::m_iNumBehaviorTypes [protected]

Number of types managed by this behavior.


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

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