clStormDamageApplier Class Reference

Storm Damage Applier - Version 1.1. More...

#include <StormDamageApplier.h>

Inheritance diagram for clStormDamageApplier:

clBehaviorBase clWorkerBase

List of all members.

Public Member Functions

 clStormDamageApplier (clSimManager *p_oSimManager)
 Constructor.
 ~clStormDamageApplier ()
 Destructor.
void RegisterTreeDataMembers ()
 Registers the "stm_dmg" tree data member.
void GetData (xercesc::DOMDocument *p_oDoc)
 Does behavior setup.
void Action ()
 Applies storm damage to trees.

Protected Member Functions

void GetParameterFileData (xercesc::DOMDocument *p_oDoc)
 Reads parameter file data.
void FormatQueryString ()
 Formats the string in m_cQuery.

Protected Attributes

clGridBasemp_oStormDamageGrid
 Pointer to the "Storm Damage" grid.
char * m_cQuery
 String to pass to clTreePopulation::Find() in order to get the trees to apply damage to.
float * mp_fMinStormDBH
 The minimum DBH, in cm, for trees that can be damaged by storms.
float * mp_fStmDmgInterceptMed
 Storm damage intercept for medium damage (a).
float * mp_fStmDmgInterceptFull
 Storm damage intercept for complete damage (a).
float * mp_fStmIntensityCoeff
 Storm intensity coefficient (b).
float * mp_fStmDBHCoeff
 Storm DBH coefficient (d).
int ** mp_iStmDmgCodes
 Return codes for the "stm_dmg" int tree data member.
int m_iNumYearsToHeal
 Number of years damaged trees stay damaged.
int m_iNumTypes
 Number of total types (despite the fact that this behavior won't deal with all of them).
int m_iDmgIndexCode
 Return code for the "1dmg_index" float data member of the "Storm Damage" grid.


Detailed Description

Storm Damage Applier - Version 1.1.

The damage applier manages the population of trees that are storm-damaged. It adds new trees to the damaged population after storms have occurred, and removes trees from the damaged population (back to the healthy population) by keeping track of the time they have been damaged until a maximum has been reached. This behavior also keeps track of the damage category into which each tree falls (no damage, medium damage, and heavy damage).

Whether storms have occurred is assessed by clStorm. This behavior uses the values in the "Storm Damage" grid for storm severity, with 0 meaning that no storm has occurred.

A given tree's probability of damage in a given damage category is

P(i) = exp(ai + b*c*DBH^d) / (1+exp(ai + b*c*DBH^d))
where:

There is a minimum DBH for which to apply storms for each species. Set this to zero if storms apply to all trees.

This behavior will use a random number to determine what damage category a tree falls in. If rand <= P(d0), it's undamaged. If P(d0) < rand <= P(d1), it has medium damage. If P(d1) < rand <= 1, it has heavy damage.

If a tree is damaged, a flag is set with the damage category. Then a counter is set to count the time since damage. When the counter reaches the number of years that it takes a damaged tree to heal, the tree is undamaged once again.

If a live tree is already damaged and is damaged again (and survives again), it gets the most severe damage category that can apply to it and the damage counter is reset to the max time for tree healing again.

This behavior adds one tree data member: an int, "stm_dmg", which holds both the damage category and the amount of time left to heal. The possible damage category values are 0, 1, and 2 (no damage, medium damage, full damage). The value in stm_dmg will be x*1000 + count, where x is the damage category and count is the number of years since damage. So a full-damaged tree with 5 years on its counter has a stm_dmg value of 2005, and a medium-damaged tree with 8 years on its counter has a stm_dmg value of 1008. If a tree is undamaged, the value will be 0.

This behavior cannot be applied to seedlings. It can be applied to snags but they will be ignored. This is potentially a good tactic though, to allow clStormKiller to deal with snags.

The call string for this is "storm damage applier".


Edit history:
-----------------
September 29, 2004 - Created (LEM)
April 1, 2005 - Added the ability to kill trees and upgraded to version 1.1 (LEM)
Added all this snag stuff and upgrated to version 2.0
December 21, 2005 - Removed all the tree killing stuff to the clStormKiller class, and reduced the version number back to 1.0, since nobody has actually used it in production yet. (LEM)
May 30, 2007 - Updated to support multiple storm packages and set version to 1.1 (LEM)


Constructor & Destructor Documentation

clStormDamageApplier::clStormDamageApplier ( clSimManager p_oSimManager  ) 

Constructor.

Parameters:
p_oSimManager clSimManager object.

clStormDamageApplier::~clStormDamageApplier (  ) 

Destructor.


Member Function Documentation

void clStormDamageApplier::RegisterTreeDataMembers (  )  [virtual]

Registers the "stm_dmg" tree data member.

Exceptions:
modelErr if this behavior has been applied to seedlings.

Reimplemented from clBehaviorBase.

void clStormDamageApplier::GetData ( xercesc::DOMDocument *  p_oDoc  )  [virtual]

Does behavior setup.

It calls GetParameterFileData() to read in values from the parameter file. Then it calls FormatQueryString(). Then it gets a pointer to the "Storm Damage" grid.

Parameters:
p_oDoc Parsed parameter file.
Exceptions:
modelErr if the "Storm Damage" grid has not been created.

Implements clWorkerBase.

void clStormDamageApplier::Action (  )  [virtual]

Applies storm damage to trees.

It uses the value in m_cQuery to get the trees to which this behavior applies. Then, for each tree, it will assess its damage based on the damage equation.

If a tree got no new damage but had existing damage, the healing time counter is reset to 0.

Reimplemented from clBehaviorBase.

void clStormDamageApplier::GetParameterFileData ( xercesc::DOMDocument *  p_oDoc  )  [protected]

Reads parameter file data.

Parameters:
p_oDoc Parsed parameter file.
Exceptions:
modelErr if the value for m_iNumYearsToHeal is not greater than 0.

void clStormDamageApplier::FormatQueryString (  )  [protected]

Formats the string in m_cQuery.

This value will be used in Action() to pass to clTreePopulation::Find() in order to get the trees to act on.


Member Data Documentation

Pointer to the "Storm Damage" grid.

This grid is created by clStorm.

char* clStormDamageApplier::m_cQuery [protected]

String to pass to clTreePopulation::Find() in order to get the trees to apply damage to.

This will instigate a species/type search for all the species and types to which this behavior applies.

The minimum DBH, in cm, for trees that can be damaged by storms.

Array size is total number of species. From the parameter file.

Storm damage intercept for medium damage (a).

Array size is total number of species. From the parameter file.

Storm damage intercept for complete damage (a).

Array size is total number of species. From the parameter file.

Storm intensity coefficient (b).

Array size is total number of species. From the parameter file.

Storm DBH coefficient (d).

Array size is total number of species. From the parameter file.

Return codes for the "stm_dmg" int tree data member.

This is the data member that this behavior is adding. Array index one is sized m_iNumTypes; array index two is sized total number of species.

Number of years damaged trees stay damaged.

From the parameter file.

Number of total types (despite the fact that this behavior won't deal with all of them).

Return code for the "1dmg_index" float data member of the "Storm Damage" grid.


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

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