iLand
globalsettings.h
Go to the documentation of this file.
1/********************************************************************************************
2** iLand - an individual based forest landscape and disturbance model
3** http://iland-model.org
4** Copyright (C) 2009- Werner Rammer, Rupert Seidl
5**
6** This program is free software: you can redistribute it and/or modify
7** it under the terms of the GNU General Public License as published by
8** the Free Software Foundation, either version 3 of the License, or
9** (at your option) any later version.
10**
11** This program is distributed in the hope that it will be useful,
12** but WITHOUT ANY WARRANTY; without even the implied warranty of
13** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14** GNU General Public License for more details.
15**
16** You should have received a copy of the GNU General Public License
17** along with this program. If not, see <http://www.gnu.org/licenses/>.
18********************************************************************************************/
19
20#ifndef GLOBALSETTINGS_H
21#define GLOBALSETTINGS_H
22
23#include <QtCore>
24#include <QtSql>
25#include <QtSql/QSqlDatabase>
26
27#include "global.h"
28#include "settingmetadata.h"
29#include "xmlhelper.h"
30// The favorite random number generator:
31// use either the MersenneTwister or the WELLS algoritm:
32// #include "randomwell.h"
33// #include "../3rdparty/MersenneTwister.h"
34// use faster method to concatenate strings (see qt - documentation on QString)
35#define QT_USE_FAST_CONCATENATION
36#define QT_USE_FAST_OPERATOR_PLUS
37
38typedef QList<QVariant> DebugList;
39
40class Model;
41class OutputManager;
42class ModelController; // forward
44class QJSEngine; // forward
45
48{
49public:
50 // singleton-access
51 static GlobalSettings *instance() { if (mInstance) return mInstance; mInstance = new GlobalSettings(); return mInstance; }
53 // Access
54 // model and clock
55 Model *model() const { return mModel; }
56 ModelController *controller() const { return mModelController; }
57
58 void setModel(Model *model) {mModel = model; }
59 void setModelController(ModelController *mc) {mModelController = mc; }
60
61 int currentYear() const { return mRunYear; }
62 void setCurrentYear(const int year) { mRunYear = year; }
63
66 QString executeJavascript(const QString &command);
68 QString executeJSFunction(const QString function_name);
69 QJSEngine *scriptEngine() const { return mScriptEngine; }
70 void resetScriptEngine();
71
72 // system statistics
73 SystemStatistics *systemStatistics() { return mSystemStatistics; }
74
75 // debugging fain grained debug outputs
80 void setDebugOutput(const int debug) { mDebugOutputs = GlobalSettings::DebugOutputs(debug); }
81 void setDebugOutput(const DebugOutputs dbg, const bool enable=true);
82 bool isDebugEnabled(const DebugOutputs dbg) {return int(dbg) & mDebugOutputs;}
83 int currentDebugOutput() const { return mDebugOutputs; }
84 QString debugOutputName(const DebugOutputs d);
85 DebugOutputs debugOutputId(const QString debug_name);
86 DebugList &debugList(const int ID, const DebugOutputs dbg);
87 const QList<const DebugList*> debugLists(const int ID, const DebugOutputs dbg);
88 QStringList debugListCaptions(const DebugOutputs dbg);
89 QList<QPair<QString, QVariant> > debugValues(const int ID);
91 void clearDebugLists();
93 QStringList debugDataTable(GlobalSettings::DebugOutputs type, const QString separator, const QString fileName=QString(), const bool do_append=false);
94
95 // database access functions
96 QSqlDatabase dbin() { return QSqlDatabase::database("in"); }
97 QSqlDatabase dbout() { return QSqlDatabase::database("out"); }
98 QSqlDatabase dbclimate() { return QSqlDatabase::database("climate"); }
99
100 // path and directory
101 QString path(const QString &fileName, const QString &type="home");
102 bool fileExists(const QString &fileName, const QString &type="home");
103
104 // xml project file
105 const XmlHelper &settings() const { return mXml; }
106
107 // setup and maintenance
108
109 // xml project settings
110 void loadProjectFile(const QString &fileName);
111
112 // Database connections
113 bool setupDatabaseConnection(const QString& dbname, const QString &fileName, bool fileMustExist);
115 // output manager
116 OutputManager *outputManager() { return mOutputManager; }
117
118 // path
119 void setupDirectories(QDomElement pathNode, const QString &projectFilePath);
120 void printDirectories() const;
121
122
123private:
124 GlobalSettings(); // private ctor
125 static GlobalSettings *mInstance;
126 Model *mModel;
127 ModelController *mModelController;
128 OutputManager *mOutputManager;
129 QJSEngine *mScriptEngine;
130 int mRunYear;
131 SystemStatistics *mSystemStatistics;
132
133 // special debug outputs
134 QMultiHash<int, DebugList> mDebugLists;
135 int mDebugOutputs; // "bitmap" of enabled debugoutputs.
136
137 QHash<QString, QString> mFilePath;
138
139 XmlHelper mXml;
140};
141
142// constants
143// We assume:
144// Light-Grid: 2x2m
145// Height-Grid: 10x10m
146// Resource-Unit: 100x100m
147const int cPxSize = 2; // size of light grid (m)
148const int cRUSize = 100; // size of resource unit (m)
149const double cRUArea = 10000.; // area of a resource unit (m2)
150const int cHeightSize = 10; // size of a height grid pixel (m)
151const int cPxPerHeight = 5; // 10 / 2 LIF pixels per height pixel
152const int cPxPerRU = 50; // 100/2
153const int cHeightPerRU = 10; // 100/10 height pixels per resource unit
154const int cPxPerHectare = 2500; // pixel/ha ( 10000 / (2*2) )
155const double cHeightPixelArea = 100.; // 100m2 area of a height pixel
156const float cSapHeight = 4.f; // height from which on trees are modeled as individual trees (instead of saplings)
157
158// other constants
159const double biomassCFraction = 0.5; // fraction of (dry) biomass which is carbon
160const double cAutotrophicRespiration = 0.47;
161
163#define Globals (GlobalSettings::instance())
164
165// provide a hashing function for the QPoint type (needed from stand init functions, ABE, ...)
166inline uint qHash(const QPoint &key)
167{
168 return qHash(key.x()) ^ qHash(key.y());
169}
170#endif // GLOBALSETTINGS_H
General settings and globally available data.
Definition: globalsettings.h:18
bool fileExists(const QString &fileName, const QString &type="home")
returns true if file fileName exists.
Definition: globalsettings.cpp:484
DebugList & debugList(const int ID, const DebugOutputs dbg)
returns a ref to a list ready to be filled with debug output of a type/id combination.
Definition: globalsettings.cpp:221
QStringList debugListCaptions(const DebugOutputs dbg)
returns stringlist of captions for a specific output type
Definition: globalsettings.cpp:263
void clearDebugLists()
clear all debug data
Definition: globalsettings.cpp:215
void loadProjectFile(const QString &fileName)
Definition: globalsettings.cpp:496
QSqlDatabase dbout()
Definition: globalsettings.h:97
const QList< const DebugList * > debugLists(const int ID, const DebugOutputs dbg)
return a list of debug outputs
Definition: globalsettings.cpp:238
Model * model() const
Definition: globalsettings.h:55
void clearDatabaseConnections()
shutdown and clear connections
Definition: globalsettings.cpp:400
QString executeJavascript(const QString &command)
access the global QScriptEngine used throughout the model for all Javascript related functionality.
Definition: globalsettings.cpp:156
static GlobalSettings * instance()
Definition: globalsettings.h:51
QString executeJSFunction(const QString function_name)
execute a javasript function in the global context
Definition: globalsettings.cpp:161
void setDebugOutput(const int debug)
Definition: globalsettings.h:80
ModelController * controller() const
Definition: globalsettings.h:56
void setupDirectories(QDomElement pathNode, const QString &projectFilePath)
Definition: globalsettings.cpp:444
void setModel(Model *model)
Definition: globalsettings.h:58
DebugOutputs debugOutputId(const QString debug_name)
returns the DebugOutputs bit or 0 if not found
Definition: globalsettings.cpp:206
QString debugOutputName(const DebugOutputs d)
returns the name attached to 'd' or an empty string if not found
Definition: globalsettings.cpp:195
void setModelController(ModelController *mc)
Definition: globalsettings.h:59
void resetScriptEngine()
re-creates the script engine (when the Model is re-created)
Definition: globalsettings.cpp:166
int currentYear() const
Definition: globalsettings.h:61
void setCurrentYear(const int year)
Definition: globalsettings.h:62
QStringList debugDataTable(GlobalSettings::DebugOutputs type, const QString separator, const QString fileName=QString(), const bool do_append=false)
output for all available items (trees, ...) in table form or write to a file
Definition: globalsettings.cpp:318
SystemStatistics * systemStatistics()
Definition: globalsettings.h:73
void printDirectories() const
Definition: globalsettings.cpp:436
QJSEngine * scriptEngine() const
Definition: globalsettings.h:69
OutputManager * outputManager()
Definition: globalsettings.h:116
bool setupDatabaseConnection(const QString &dbname, const QString &fileName, bool fileMustExist)
Definition: globalsettings.cpp:407
~GlobalSettings()
Definition: globalsettings.cpp:145
bool isDebugEnabled(const DebugOutputs dbg)
returns true, if a specific debug outut type is enabled.
Definition: globalsettings.h:82
QList< QPair< QString, QVariant > > debugValues(const int ID)
all debug values for object with given ID
Definition: globalsettings.cpp:369
QString path(const QString &fileName, const QString &type="home")
extend the file to a full absoulte path of the given type (temp, home, ...).
Definition: globalsettings.cpp:464
const XmlHelper & settings() const
Definition: globalsettings.h:105
int currentDebugOutput() const
Definition: globalsettings.h:83
QSqlDatabase dbin()
Definition: globalsettings.h:96
QSqlDatabase dbclimate()
Definition: globalsettings.h:98
DebugOutputs
Definition: globalsettings.h:76
@ dCarbonCycle
Definition: globalsettings.h:78
@ dTreeGrowth
Definition: globalsettings.h:76
@ dPerformance
Definition: globalsettings.h:79
@ dSaplingGrowth
Definition: globalsettings.h:78
@ dEstablishment
Definition: globalsettings.h:78
@ dDailyResponses
Definition: globalsettings.h:77
@ dWaterCycle
Definition: globalsettings.h:77
@ dStandGPP
Definition: globalsettings.h:77
@ dTreePartition
Definition: globalsettings.h:76
@ dTreeNPP
Definition: globalsettings.h:76
Definition: modelcontroller.h:32
Main object of the iLand model composited of various sub models / sub components.
Definition: model.h:90
Global container that handles data output.
Definition: outputmanager.h:25
holds a couple of system statistics primarily aimed for performance and memory analyis.
Definition: standstatistics.h:107
XmlHelper wraps a XML file and provides some convenient functions to retrieve values.
Definition: xmlhelper.h:26
const int cPxPerHeight
Definition: globalsettings.h:9
const double cRUArea
Definition: globalsettings.h:7
const int cRUSize
Definition: globalsettings.h:6
const int cPxPerRU
Definition: globalsettings.h:10
const int cHeightSize
Definition: globalsettings.h:8
const int cHeightPerRU
Definition: globalsettings.h:11
const int cPxPerHectare
Definition: globalsettings.h:12
const int cPxSize
Definition: globalsettings.h:5
const double cHeightPixelArea
Definition: globalsettings.h:13
const float cSapHeight
Definition: globalsettings.h:156
const double cAutotrophicRespiration
Definition: globalsettings.h:160
uint qHash(const QPoint &key)
Definition: globalsettings.h:166
const double biomassCFraction
Definition: globalsettings.h:159
QList< QVariant > DebugList
Definition: globalsettings.h:38