clWeibullClimateQuadratGrowth Class Reference

Weibull Climate growth - Version 1.0. More...

#include <WeibullClimateQuadratGrowth.h>

Inheritance diagram for clWeibullClimateQuadratGrowth:

clGrowthBase clBehaviorBase clWorkerBase

List of all members.

Public Member Functions

 clWeibullClimateQuadratGrowth (clSimManager *p_oSimManager)
 Constructor.
 ~clWeibullClimateQuadratGrowth ()
 Destructor.
float CalcDiameterGrowthValue (clTree *p_oTree, clTreePopulation *p_oPop, float fHeightGrowth)
 Queries the grid for the growth value for this tree's cell that was calculated by PreGrowthCalcs() and returns it.
void PreGrowthCalcs (clTreePopulation *p_oPop)
 Calculates growth.
void DoShellSetup (xercesc::DOMDocument *p_oDoc)
 Does setup.
void SetNameData (char *cNameString)
 Captures the namestring passed to this behavior.

Protected Member Functions

void ValidateData (clTreePopulation *p_oPop)
 Makes sure all input data is valid.
void ReadParameterFile (xercesc::DOMDocument *p_oDoc, clTreePopulation *p_oPop)
 Reads data from the parameter file.
int GetNumNeighbors (float &fX, float &fY, clTreePopulation *p_oPop)
 Counts the number of trees a target's neighborhood that have a DBH bigger than the minimum cutoff.
void FormatQuery (clTreePopulation *p_oPop)
 Populates m_cQuery with the query for getting target trees.
void SetupGrid (clTreePopulation *p_oPop)
 Sets up the "Weibull Climate Quadrat Growth" grid.

Protected Attributes

clGridBasemp_oGrid
 Grid holding amount of growth for each species.
float * mp_fCompC
 Competition effect C.
float * mp_fCompD
 Competition effect D.
float * mp_fMinimumNeighborDBH
 The minimum DBH, in cm, of neighbors to be included in the neighbor count.
float * mp_fPrecipA
 Precipitation effect A.
float * mp_fPrecipB
 Precipitation effect B.
float * mp_fPrecipC
 Precipitation effect C.
float * mp_fTempA
 Temperature effect A.
float * mp_fTempB
 Temperature effect B.
float * mp_fTempC
 Temperature effect C.
float * mp_fMaxRG
 Maximum potential growth value, in cm.
short int * mp_iIndexes
 Speeds access to the arrays.
short int * mp_iGridGrowthCodes
 Holds data member codes for the "growth_x" data members of the "Weibull Climate Quadrat Growth" grid.
char * m_cQuery
 Query string to get target trees.
float m_fMinSaplingHeight
 Minimum sapling height.
float m_fMaxCrowdingRadius
 Maximum search radius, in meters, in which to look for crowding neighbors.
short int m_iNumNeighCode
 Return code for the "num_neigh" grid data member.


Detailed Description

Weibull Climate growth - Version 1.0.

This is a growth shell object which calculates growth as a function of climate and neighbor density. This simplifies the process by calculating annual growth on a per quadrat basis.

The growth equation for one year's growth is:

Growth = Max Growth * Precipitation Effect * Climate Effect * Competition Effect

where Max Growth is annual amount of diameter growth, and the Effects are values between 0 and 1 which serve to reduce the maximum.

Precipitation Effect and Temperature Effect use the same function form. The function is:
Climate Effect <- exp(-0.5*(abs(CV - C)/A)B) where:

Competition Effect is calculated as:

CE = exp(-(C * ndD)

where:

Snags, seedlings, and already-dead trees are never counted in the neighbor count.

The annual growth for each species is calculated for each grid cell in the "Weibull Climate Quadrat Growth" grid, which this behavior creates. Trees take their growth from the grid cell in which they are found.

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

Copyright 2010 Charles D. Canham.

Author:
Lora E. Murphy

Edit history:
-----------------
September 23, 2010 - Created (LEM)

Constructor & Destructor Documentation

clWeibullClimateQuadratGrowth::clWeibullClimateQuadratGrowth ( clSimManager p_oSimManager  ) 

Constructor.

Parameters:
p_oSimManager Sim Manager object.

clWeibullClimateQuadratGrowth::~clWeibullClimateQuadratGrowth (  ) 

Destructor.


Member Function Documentation

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

Queries the grid for the growth value for this tree's cell that was calculated by PreGrowthCalcs() and returns it.

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 clWeibullClimateQuadratGrowth::PreGrowthCalcs ( clTreePopulation p_oPop  )  [virtual]

Calculates growth.

This retrieves trees to which this behavior applies, and for each one makes sure that growth has been calculated for its species and grid cell. This does not assign a growth value to the trees; that happens in CalcDiameterGrowthValue. Doing it this way ensures two things: that growth is not calculated if it is not needed, and that we don't have to worry about accidentally assigning growth to a tree to which this behavior is not applied.

Steps:

  1. Reset all growth values in the grid to -1.
  2. Calculate temperature and precipitation effects for each species for the current values of the plot climate variables
  3. Get all trees for this behavior.
  4. For each tree, determine whether or not growth has been calculated for the grid cell that it is in; if yes, do nothing
  5. If growth needs to be calculated, count the number of neighbors
  6. Calculate the amount of growth for each using the equations above. Stash the end result in "Growth".
This must be called first of any growth stuff, since it uses other trees' DBHs to count neighbors, and this must be done before growth has been applied.

Parameters:
p_oPop Tree population object.

Reimplemented from clGrowthBase.

void clWeibullClimateQuadratGrowth::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. SetupGrid() is called to create the growth grid.

Parameters:
p_oDoc DOM tree of parsed input tree.

Reimplemented from clGrowthBase.

void clWeibullClimateQuadratGrowth::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 clWeibullClimateQuadratGrowth::ValidateData ( clTreePopulation p_oPop  )  [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
  • Temp and precip A for each species must be > 0
Parameters:
p_oPop Tree population object.
Exceptions:
modelErr if any of the above conditions are not met.

void clWeibullClimateQuadratGrowth::ReadParameterFile ( xercesc::DOMDocument *  p_oDoc,
clTreePopulation p_oPop 
) [protected]

Reads data from the parameter file.

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

int clWeibullClimateQuadratGrowth::GetNumNeighbors ( float &  fX,
float &  fY,
clTreePopulation p_oPop 
) [protected]

Counts the number of trees a target's neighborhood that have a DBH bigger than the minimum cutoff.

Parameters:
fX X location from which to count the larger neighbors.
fY Y location from which to count the larger neighbors.
p_oPop Tree population, for getting neighbors.
Returns:
Number of larger neighbors.

void clWeibullClimateQuadratGrowth::FormatQuery ( clTreePopulation p_oPop  )  [protected]

Populates m_cQuery with the query for getting target trees.

Parameters:
p_oPop Tree population object.

void clWeibullClimateQuadratGrowth::SetupGrid ( clTreePopulation p_oPop  )  [protected]

Sets up the "Weibull Climate Quadrat Growth" grid.

This ignores any maps.

Parameters:
p_oPop Tree population object.


Member Data Documentation

Grid holding amount of growth for each species.

The grid name is "Weibull Climate Quadrat Growth". It has X+1 float data members, where X = the total number of species. The data member names are "growth_x", for the amount of diameter growth (where "x" is the species number), and "num_neigh" for the number of neighbors.

Competition effect C.

Array size is number of species to which this behavior applies.

Competition effect D.

Array size is number of species to which this behavior applies.

The minimum DBH, in cm, of neighbors to be included in the neighbor count.

Array is sized number of species.

Precipitation effect A.

Array size is number of species to which this behavior applies.

Precipitation effect B.

Array size is number of species to which this behavior applies.

Precipitation effect C.

Array size is number of species to which this behavior applies.

Temperature effect A.

Array size is number of species to which this behavior applies.

Temperature effect B.

Array size is number of species to which this behavior applies.

Temperature effect C.

Array size is number of species to which this behavior applies.

Maximum potential growth value, in cm.

Array is sized number of species to which this behavior applies.

Speeds access to the arrays.

Array size is number of species.

Holds data member codes for the "growth_x" data members of the "Weibull Climate Quadrat Growth" grid.

Array size is total # species.

Query string to get target trees.

Minimum sapling height.

For doing neighbor searches.

Maximum search radius, in meters, in which to look for crowding neighbors.

For calculating the Competition Effect.

Return code for the "num_neigh" grid data member.


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

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