Rev 1221 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | |||
671 | werner | 2 | /******************************************************************************************** |
3 | ** iLand - an individual based forest landscape and disturbance model |
||
4 | ** http://iland.boku.ac.at |
||
5 | ** Copyright (C) 2009- Werner Rammer, Rupert Seidl |
||
6 | ** |
||
7 | ** This program is free software: you can redistribute it and/or modify |
||
8 | ** it under the terms of the GNU General Public License as published by |
||
9 | ** the Free Software Foundation, either version 3 of the License, or |
||
10 | ** (at your option) any later version. |
||
11 | ** |
||
12 | ** This program is distributed in the hope that it will be useful, |
||
13 | ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
14 | ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
15 | ** GNU General Public License for more details. |
||
16 | ** |
||
17 | ** You should have received a copy of the GNU General Public License |
||
18 | ** along with this program. If not, see <http://www.gnu.org/licenses/>. |
||
19 | ********************************************************************************************/ |
||
20 | |||
90 | Werner | 21 | #ifndef SPECIESSET_H |
22 | #define SPECIESSET_H |
||
93 | Werner | 23 | #include <QtSql> |
90 | Werner | 24 | |
99 | Werner | 25 | #include "stampcontainer.h" |
274 | werner | 26 | #include "expression.h" |
211 | werner | 27 | class Species; |
387 | werner | 28 | class SeedDispersal; |
99 | Werner | 29 | |
90 | Werner | 30 | class SpeciesSet |
31 | { |
||
32 | public: |
||
33 | SpeciesSet(); |
||
91 | Werner | 34 | ~SpeciesSet(); |
318 | werner | 35 | const QString &name() const { return mName; } ///< table name of the species set |
91 | Werner | 36 | // access |
802 | werner | 37 | QList<Species*> activeSpecies() { return mActiveSpecies; } ///< list of species that are "active" (flag active in database) |
600 | werner | 38 | Species *species(const QString &speciesId) const { return mSpecies.value(speciesId); } |
111 | Werner | 39 | const Species *species(const int &index); ///< get by arbirtray index (slower than using string-id!) |
102 | Werner | 40 | const StampContainer &readerStamps() { return mReaderStamp; } |
209 | werner | 41 | QVariant var(const QString& varName); |
42 | int count() const { return mSpecies.count(); } |
||
1164 | werner | 43 | /// return 2 iterators. The range between 'rBegin' and 'rEnd' are indices of the current species set (all species are included, order is random). |
44 | void randomSpeciesOrder(QVector<int>::const_iterator &rBegin, QVector<int>::const_iterator &rEnd); |
||
209 | werner | 45 | // calculations |
46 | double nitrogenResponse(const double availableNitrogen, const double &responseClass) const; |
||
47 | double co2Response(const double ambientCO2, const double nitrogenResponse, const double soilWaterResponse) const; |
||
470 | werner | 48 | double lightResponse(const double lightResourceIndex, const double lightResponseClass) const; |
425 | werner | 49 | double LRIcorrection(const double lightResourceIndex, const double relativeHeight) const { return mLRICorrection.calculate(lightResourceIndex, relativeHeight);} |
91 | Werner | 50 | // maintenance |
51 | void clear(); |
||
102 | Werner | 52 | int setup(); |
391 | werner | 53 | void setupRegeneration(); ///< setup of regenartion related data |
54 | // running |
||
55 | void newYear(); ///< is called at the beginning of a year |
||
56 | void regeneration(); ///< run regeneration (after growth) |
||
91 | Werner | 57 | private: |
318 | werner | 58 | QString mName; |
209 | werner | 59 | double nitrogenResponse(const double &availableNitrogen, const double &NA, const double &NB) const; |
1164 | werner | 60 | void createRandomSpeciesOrder(); |
514 | werner | 61 | QList<Species*> mActiveSpecies; ///< list of species that are "active" (flag active in database) |
91 | Werner | 62 | QMap<QString, Species*> mSpecies; |
1164 | werner | 63 | static const int mNRandomSets = 20; |
64 | QVector<int> mRandomSpeciesOrder; |
||
91 | Werner | 65 | QSqlQuery *mSetupQuery; |
99 | Werner | 66 | StampContainer mReaderStamp; |
209 | werner | 67 | // nitrogen response classes |
68 | double mNitrogen_1a, mNitrogen_1b; ///< parameters of nitrogen response class 1 |
||
69 | double mNitrogen_2a, mNitrogen_2b; ///< parameters of nitrogen response class 2 |
||
70 | double mNitrogen_3a, mNitrogen_3b; ///< parameters of nitrogen response class 3 |
||
71 | // CO2 response |
||
72 | double mCO2base, mCO2comp; ///< CO2 concentration of measurements (base) and CO2 compensation point (comp) |
||
73 | double mCO2p0, mCO2beta0; ///< p0: production multiplier, beta0: relative productivity increase |
||
274 | werner | 74 | // Light Response classes |
75 | Expression mLightResponseIntolerant; ///< light response function for the the most shade tolerant species |
||
76 | Expression mLightResponseTolerant; ///< light response function for the most shade intolerant species |
||
425 | werner | 77 | Expression mLRICorrection; ///< function to modfiy LRI during read |
387 | werner | 78 | /// container holding the seed maps |
79 | QList<SeedDispersal*> mSeedDispersal; |
||
80 | |||
90 | Werner | 81 | }; |
82 | |||
83 | #endif // SPECIESSET_H |