Subversion Repositories public iLand

Rev

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