Subversion Repositories public iLand

Rev

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