00001
00002
00003 #ifndef AllometryH
00004 #define AllometryH
00005
00006
00007 #include <math.h>
00008 #include "TreePopulation.h"
00009
00029 class clAllometry {
00030
00031 public:
00033 enum iHeightDiamFunction {
00034 standard,
00035 linear,
00036 reverse_linear,
00037 power
00038 };
00039
00041 enum iCrownRadDiamFunction {
00042 standard_cr,
00043 chapman_richards_cr
00044 };
00045
00047 enum iCrownHtDiamFunction {
00048 standard_ch,
00049 chapman_richards_ch
00050 };
00051
00055 clAllometry();
00056
00060 ~clAllometry();
00061
00067 void GetData(xercesc::DOMDocument *p_oDoc, clTreePopulation *p_oPop);
00068
00076 float GetMaxTreeHeight(int iSpecies);
00077
00086 float CalcAdultHeight( const float &fDbh, const int &iSpecies );
00087
00097 float CalcAdultDbh( float fHeight, const int &iSpecies );
00098
00107 float CalcAdultCrownRadius( const float &fDbh, const int &iSpecies );
00108
00117 float CalcAdultCrownHeight(float fHeight, const int &iSpecies);
00118
00127 float CalcSaplingHeight(const float &fDbh, const int &iSpecies);
00128
00138 float CalcSaplingDbh( float fHeight, const int &iSpecies );
00139
00148 float CalcSaplingCrownRadius( const float &fDbh, const int &iSpecies );
00149
00158 float CalcSaplingCrownHeight(float fHeight, const int &iSpecies);
00159
00168 float CalcSeedlingHeight( float fDiam10, const int &iSpecies );
00169
00179 float CalcSeedlingDiam10( float fHeight, const int &iSpecies );
00180
00191 float ConvertDiam10ToDbh( float fDiam10, const int &iSpecies );
00192
00203 float ConvertDbhToDiam10( const float &fDbh, const int &iSpecies );
00204
00209 float GetMaxCrownRadius() {return m_fMaxCrownRad;};
00210
00211 protected:
00212
00214 typedef float (clAllometry::*Ptr2Allometry)(const float&, const int&);
00215
00218 Ptr2Allometry* mp_AdultHeight;
00219
00222 Ptr2Allometry* mp_AdultDiam;
00223
00226 Ptr2Allometry* mp_AdultCrownRad;
00227
00230 Ptr2Allometry* mp_AdultCrownHeight;
00231
00234 Ptr2Allometry* mp_SaplingHeight;
00235
00238 Ptr2Allometry* mp_SaplingDiam;
00239
00242 Ptr2Allometry* mp_SaplingCrownRad;
00243
00246 Ptr2Allometry* mp_SaplingCrownHeight;
00247
00250 Ptr2Allometry* mp_SeedlingHeight;
00251
00254 Ptr2Allometry* mp_SeedlingDiam;
00255
00258 float *mp_fMaxTreeHeight;
00259
00261 float *mp_fAsympCrownRad;
00262
00264 float *mp_fCrownRadExp;
00265
00268 float *mp_fDbhToDiam10Slope;
00269
00272 float *mp_fDbhToDiam10Intercept;
00273
00275 float *mp_fAsympCrownHeight;
00276
00278 float *mp_fCrownHeightExp;
00279
00282 float *mp_fSlopeHeightDiam10;
00283
00285 float *mp_fSlopeAsympHeight;
00286
00289 float *mp_fAdultLinearSlope;
00290
00293 float *mp_fAdultLinearIntercept;
00294
00297 float *mp_fAdultReverseLinearSlope;
00298
00301 float *mp_fAdultReverseLinearIntercept;
00302
00305 float *mp_fSaplingLinearSlope;
00306
00309 float *mp_fSaplingLinearIntercept;
00310
00313 float *mp_fSaplingReverseLinearSlope;
00314
00317 float *mp_fSaplingReverseLinearIntercept;
00318
00321 float *mp_fSeedlingLinearSlope;
00322
00325 float *mp_fSeedlingLinearIntercept;
00326
00329 float *mp_fSeedlingReverseLinearSlope;
00330
00333 float *mp_fSeedlingReverseLinearIntercept;
00334
00337 float *mp_fCRCrownRadIntercept;
00338
00341 float *mp_fCRAsympCrownRad;
00342
00345 float *mp_fCRCrownRadShape1;
00346
00349 float *mp_fCRCrownRadShape2;
00350
00353 float *mp_fCRCrownHtIntercept;
00354
00357 float *mp_fCRAsympCrownHt;
00358
00361 float *mp_fCRCrownHtShape1;
00362
00365 float *mp_fCRCrownHtShape2;
00366
00368 float *mp_fPowerA;
00369
00371 float *mp_fPowerExpB;
00372
00374 float m_fMaxStdCrownRad;
00375
00377 float m_fMaxCrownRad;
00378
00380 int m_iNumSpecies;
00381
00382
00395 float CalcStandardSapAdultHeight(const float &fDbh, const int &iSpecies);
00396
00408 float CalcLinearAdultHeight(const float &fDbh, const int &iSpecies );
00409
00421 float CalcReverseLinearAdultHeight(const float &fDbh, const int &iSpecies );
00422
00434 float CalcLinearSaplingHeight(const float &fDbh, const int &iSpecies );
00435
00448 float CalcReverseLinearSaplingHeight(const float &fDbh, const int &iSpecies );
00449
00462 float CalcPowerSaplingHeight(const float &fDbh, const int &iSpecies );
00463
00475 float CalcStandardSeedlingHeight( const float &fDiam10, const int &iSpecies );
00476
00488 float CalcLinearSeedlingHeight(const float &fDiam10, const int &iSpecies );
00489
00501 float CalcReverseLinearSeedlingHeight(const float &fDiam10, const int &iSpecies );
00502
00514 float CalcStandardSapAdultDbh( const float &fHeight, const int &iSpecies );
00515
00526 float CalcLinearAdultDbh(const float &fHeight, const int &iSpecies );
00527
00539 float CalcReverseLinearAdultDbh(const float &fHeight, const int &iSpecies );
00540
00551 float CalcLinearSaplingDbh(const float &fHeight, const int &iSpecies );
00552
00564 float CalcReverseLinearSaplingDbh(const float &fHeight, const int &iSpecies );
00565
00577 float CalcPowerSaplingDbh(const float &fHeight, const int &iSpecies );
00578
00591 float CalcStandardSeedlingDiam10( const float &fHeight, const int &iSpecies );
00592
00603 float CalcLinearSeedlingDiam10(const float &fHeight, const int &iSpecies );
00604
00616 float CalcReverseLinearSeedlingDiam10(const float &fHeight, const int &iSpecies );
00617
00629 float CalcStandardSapAdultCrownRad(const float &fDbh, const int &iSpecies);
00630
00643 float CalcChapRichSapAdultCrownRad(const float &fDbh, const int &iSpecies);
00644
00656 float CalcStandardSapAdultCrownHeight(const float &fHeight, const int &iSpecies);
00657
00670 float CalcChapRichSapAdultCrownHeight(const float &fHeight, const int &iSpecies);
00671 };
00672
00673
00674
00675 #endif