Rev 141 | Rev 144 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | |||
3 | Werner | 2 | #ifndef TREE_H |
3 | #define TREE_H |
||
4 | #include <QPointF> |
||
5 | |||
83 | Werner | 6 | #include "grid.h" |
3 | Werner | 7 | |
90 | Werner | 8 | class Species; |
38 | Werner | 9 | class Stamp; |
106 | Werner | 10 | class RessourceUnit; |
3 | Werner | 11 | |
12 | class Tree |
||
13 | { |
||
14 | public: |
||
141 | Werner | 15 | // lifecycle |
3 | Werner | 16 | Tree(); |
141 | Werner | 17 | void setup(); |
18 | |||
19 | // access to properties |
||
106 | Werner | 20 | const int id() const { return mId; } |
117 | Werner | 21 | void setNewId() { mId = m_nextId++; } |
106 | Werner | 22 | void setPosition(const QPointF pos) { mPosition=pos; } |
23 | const QPointF position() const { return mPosition; } |
||
24 | void setDbh(const float dbh) { mDbh=dbh; } |
||
25 | const float dbh() const { return mDbh; } |
||
26 | void setHeight(const float height) { mHeight=height; } |
||
27 | const float height() const { return mHeight; } |
||
28 | const float lightRessourceIndex() const { return mLRI; } |
||
143 | Werner | 29 | const Species* species() const { Q_ASSERT(mRU!=0); return mSpecies; } |
106 | Werner | 30 | void setSpecies(Species *ts) { mSpecies=ts; } |
143 | Werner | 31 | const RessourceUnit *ru() const { Q_ASSERT(mRU!=0); return mRU; } |
106 | Werner | 32 | void setRU(RessourceUnit *ru) { mRU = ru; } |
141 | Werner | 33 | const double volume() const; ///< volume (m3) of stem volume based on geometry and density calculated on the fly. |
39 | Werner | 34 | |
141 | Werner | 35 | // actions |
137 | Werner | 36 | void enableDebugging(const bool enable=true) { mDebugging = enable; } |
107 | Werner | 37 | // grid based light-concurrency functions |
38 | void applyStamp(); ///< apply LightInfluencePattern onto the global grid |
||
40 | Werner | 39 | double readStamp(); |
141 | Werner | 40 | void readStampMul(); ///< calculate the lightRessourceIndex with multiplicative approach |
107 | Werner | 41 | void heightGrid(); ///< calculate the height grid |
39 | Werner | 42 | |
107 | Werner | 43 | // growth, etc. |
44 | void grow(); |
||
119 | Werner | 45 | void grow_diameter(const double &net_stem_npp); |
46 | double relative_height_growth(); |
||
107 | Werner | 47 | |
48 | // static functions |
||
49 | static void setGrid(FloatGrid* gridToStamp, FloatGrid *dominanceGrid) { mGrid = gridToStamp; mHeightGrid = dominanceGrid; } |
||
40 | Werner | 50 | // statistics |
51 | static void resetStatistics(); |
||
52 | static const int statPrints() { return m_statPrint; } |
||
106 | Werner | 53 | static const int statCreated() { return m_statCreated; } |
40 | Werner | 54 | |
53 | Werner | 55 | static float lafactor; |
58 | Werner | 56 | |
135 | Werner | 57 | QString dump(); |
58 | |||
3 | Werner | 59 | private: |
110 | Werner | 60 | // helping functions |
116 | Werner | 61 | void partitioning(double npp); |
107 | Werner | 62 | // state variables |
106 | Werner | 63 | int mId; |
125 | Werner | 64 | float mDbh; ///< diameter at breast height [cm] |
65 | float mHeight; ///< tree height [m] |
||
106 | Werner | 66 | QPointF mPosition; |
107 | Werner | 67 | // biomass compartements |
125 | Werner | 68 | float mLeafArea; ///< m2 leaf area?? |
107 | Werner | 69 | |
136 | Werner | 70 | float mFoliageMass; // kg |
71 | float mWoodyMass; // kg |
||
107 | Werner | 72 | float mRootMass; // kg |
116 | Werner | 73 | // production relevant |
74 | float mNPPReserve; // kg |
||
107 | Werner | 75 | |
125 | Werner | 76 | float mDbhDelta; ///< diameter growth [cm] |
107 | Werner | 77 | |
125 | Werner | 78 | float mLRI; ///< resulting lightRessourceIndex |
107 | Werner | 79 | // Stamp, Species, Ressource Unit |
106 | Werner | 80 | const Stamp *mStamp; |
111 | Werner | 81 | |
106 | Werner | 82 | Species *mSpecies; |
83 | RessourceUnit *mRU; |
||
107 | Werner | 84 | |
139 | Werner | 85 | // debugging |
86 | bool mDebugging; |
||
87 | |||
117 | Werner | 88 | // special functions |
137 | Werner | 89 | bool isDebugging() { return mDebugging; } |
135 | Werner | 90 | |
129 | Werner | 91 | void dumpList(DebugList &rTargetList); |
107 | Werner | 92 | // static data |
106 | Werner | 93 | static FloatGrid *mGrid; |
94 | static FloatGrid *mHeightGrid; |
||
53 | Werner | 95 | |
139 | Werner | 96 | |
40 | Werner | 97 | // statistics |
98 | static int m_statPrint; |
||
48 | Werner | 99 | static int m_statAboveZ; |
105 | Werner | 100 | static int m_statCreated; |
40 | Werner | 101 | static int m_nextId; |
3 | Werner | 102 | }; |
103 | |||
129 | Werner | 104 | |
3 | Werner | 105 | #endif // TREE_H |