Subversion Repositories public iLand

Rev

Rev 706 | Rev 779 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 706 Rev 707
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/global.h':
1
Redirecting to URL 'https://iland.boku.ac.at/svn/iland/tags/release_1.0/src/core/global.h':
2
/********************************************************************************************
2
/********************************************************************************************
3
**    iLand - an individual based forest landscape and disturbance model
3
**    iLand - an individual based forest landscape and disturbance model
4
**    http://iland.boku.ac.at
4
**    http://iland.boku.ac.at
5
**    Copyright (C) 2009-  Werner Rammer, Rupert Seidl
5
**    Copyright (C) 2009-  Werner Rammer, Rupert Seidl
6
**
6
**
7
**    This program is free software: you can redistribute it and/or modify
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
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
9
**    the Free Software Foundation, either version 3 of the License, or
10
**    (at your option) any later version.
10
**    (at your option) any later version.
11
**
11
**
12
**    This program is distributed in the hope that it will be useful,
12
**    This program is distributed in the hope that it will be useful,
13
**    but WITHOUT ANY WARRANTY; without even the implied warranty of
13
**    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
**    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
**    GNU General Public License for more details.
15
**    GNU General Public License for more details.
16
**
16
**
17
**    You should have received a copy of the GNU General Public License
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/>.
18
**    along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
********************************************************************************************/
19
********************************************************************************************/
20
20
21
#ifndef GLOBAL_H
21
#ifndef GLOBAL_H
22
#define GLOBAL_H
22
#define GLOBAL_H
23
23
24
#define MSGRETURN(x) { qDebug() << x; return; }
24
#define MSGRETURN(x) { qDebug() << x; return; }
25
#define WARNINGRETURN(x) { qWarning() << x; return; }
25
#define WARNINGRETURN(x) { qWarning() << x; return; }
26
#define ERRORRETURN(x) { qError() << x; return; }
26
#define ERRORRETURN(x) { qError() << x; return; }
27
// conversions rad/degree
27
// conversions rad/degree
28
#define RAD(x) (x*M_PI/180.)
28
#define RAD(x) (x*M_PI/180.)
29
#define GRAD(x) (x/M_PI*180.)
29
#define GRAD(x) (x/M_PI*180.)
30
#define PI2 2*M_PI
30
#define PI2 2*M_PI
31
31
32
#include <cstdlib>
32
#include <cstdlib>
33
#include "math.h"
33
#include "math.h"
34
#include "exception.h"
34
#include "exception.h"
35
// general datatypes
35
// general datatypes
36
//typedef int TreeSpecies;
36
//typedef int TreeSpecies;
37
37
38
// global debug helpers (used by macros!)
38
// global debug helpers (used by macros!)
39
void dbg_helper(const char *where, const char *what,const char* file,int line);
39
void dbg_helper(const char *where, const char *what,const char* file,int line);
40
void dbg_helper_ext(const char *where, const char *what,const char* file,int line, const QString &s);
40
void dbg_helper_ext(const char *where, const char *what,const char* file,int line, const QString &s);
41
41
42
// change to enabled detailed debug messages.
42
// change to enabled detailed debug messages.
43
// if NO_DEBUG_MSGS is defined, NO debug outputs are generated.
43
// if NO_DEBUG_MSGS is defined, NO debug outputs are generated.
44
#if defined(QT_NO_DEBUG)
44
#if defined(QT_NO_DEBUG)
45
#define NO_DEBUG_MSGS
45
#define NO_DEBUG_MSGS
46
#endif
46
#endif
47
47
48
#if !defined(DBG_IF)
48
#if !defined(DBG_IF)
49
#  ifndef NO_DEBUG_MSGS
49
#  ifndef NO_DEBUG_MSGS
50
#    define DBG_IF(cond, where, what) ((cond) ? dbg_helper(where, what, __FILE__, __LINE__) : qt_noop())
50
#    define DBG_IF(cond, where, what) ((cond) ? dbg_helper(where, what, __FILE__, __LINE__) : qt_noop())
51
#  else
51
#  else
52
#    define DBG_IF(cond, where, what) qt_noop()
52
#    define DBG_IF(cond, where, what) qt_noop()
53
#  endif
53
#  endif
54
#endif
54
#endif
55
55
56
#if !defined(DBG_IF_X)
56
#if !defined(DBG_IF_X)
57
#  ifndef NO_DEBUG_MSGS
57
#  ifndef NO_DEBUG_MSGS
58
#    define DBG_IF_X(cond, where, what,more) ((cond) ? dbg_helper_ext(where, what, __FILE__, __LINE__,more) : qt_noop())
58
#    define DBG_IF_X(cond, where, what,more) ((cond) ? dbg_helper_ext(where, what, __FILE__, __LINE__,more) : qt_noop())
59
#  else
59
#  else
60
#    define DBG_IF_X(cond, where, what,more) qt_noop()
60
#    define DBG_IF_X(cond, where, what,more) qt_noop()
61
#  endif
61
#  endif
62
#endif
62
#endif
63
63
64
#if !defined(DBGMODE)
64
#if !defined(DBGMODE)
65
#  ifndef NO_DEBUG_MSGS
65
#  ifndef NO_DEBUG_MSGS
66
#    define DBGMODE(stmts) { stmts }
66
#    define DBGMODE(stmts) { stmts }
67
#  else
67
#  else
68
#    define DBGMODE(stmts) qt_noop()
68
#    define DBGMODE(stmts) qt_noop()
69
#  endif
69
#  endif
70
#endif
70
#endif
71
71
72
// log level functions
72
// log level functions
73
bool logLevelDebug(); // true, if detailed debug information is logged
73
bool logLevelDebug(); // true, if detailed debug information is logged
74
bool logLevelInfo(); // true, if only important aggreate info is logged
74
bool logLevelInfo(); // true, if only important aggreate info is logged
75
bool logLevelWarning(); // true if only severe warnings/errors are logged.
75
bool logLevelWarning(); // true if only severe warnings/errors are logged.
76
void setLogLevel(int loglevel); // setter function
76
void setLogLevel(int loglevel); // setter function
77
// choose the random number generator:
-
 
78
// either:
-
 
79
// cool random number generator (using the mersenne-twister) by http://www-personal.umich.edu/~wagnerr/MersenneTwister.html
-
 
80
#include "../3rdparty/MersenneTwister.h"
-
 
81
// or
-
 
82
//#include "randomwell.h"
-
 
83
-
 
84
MTRand *randomGenerator(); // static object lives in globalsettings
-
 
85
/// nrandom returns a random number from [p1, p2] -> p2 is a possible result!
-
 
86
inline double nrandom(const double& p1, const double& p2)
-
 
87
{
-
 
88
    return p1 + randomGenerator()->rand(p2-p1);
-
 
89
    //return p1 + (p2-p1)*(rand()/double(RAND_MAX));
-
 
90
}
-
 
91
/// returns a random number in [0,1] (i.e.="1" is a possible result!)
-
 
92
inline double drandom()
-
 
93
{
-
 
94
    return randomGenerator()->rand();
-
 
95
    //return rand()/double(RAND_MAX);
-
 
96
}
-
 
97
/// return a random number from "from" to "to" (incl.), i.e. irandom(3,5) results in 3, 4 or 5.
-
 
98
inline int irandom(int from, int to)
-
 
99
{
-
 
100
    return from + randomGenerator()->randInt(to-from);
-
 
101
    //return from +  rand()%(to-from);
-
 
102
}
-
 
103
-
 
104
// random number function with additional ptr to random function
-
 
105
inline double nrandom(MTRand *random, const double& p1, const double& p2)
-
 
106
{
-
 
107
    return p1 + random->rand(p2-p1);
-
 
108
    //return p1 + (p2-p1)*(rand()/double(RAND_MAX));
-
 
109
}
-
 
110
/// returns a random number in [0,1] (i.e.="1" is a possible result!)
-
 
111
inline double drandom(MTRand *random)
-
 
112
{
-
 
113
    return random->rand();
-
 
114
    //return rand()/double(RAND_MAX);
-
 
115
}
-
 
116
/// return a random number from "from" to "to" (incl.), i.e. irandom(3,5) results in 3, 4 or 5.
-
 
117
inline int irandom(MTRand *random, int from, int to)
-
 
118
{
-
 
119
    return from + random->randInt(to-from);
-
 
120
    //return from +  rand()%(to-from);
-
 
121
}
-
 
122
77
-
 
78
// the random number generator:
-
 
79
#include "randomgenerator.h"
123
80
124
81
125
inline double limit(const double value, const double lower, const double upper)
82
inline double limit(const double value, const double lower, const double upper)
126
{
83
{
127
    return qMax(qMin(value, upper), lower);
84
    return qMax(qMin(value, upper), lower);
128
}
85
}
129
inline int limit(const int value, const int lower, const int upper)
86
inline int limit(const int value, const int lower, const int upper)
130
{
87
{
131
    return qMax(qMin(value, upper), lower);
88
    return qMax(qMin(value, upper), lower);
132
}
89
}
133
inline void setBit(int &rTarget, const int bit, const bool value)
90
inline void setBit(int &rTarget, const int bit, const bool value)
134
{
91
{
135
    if (value)
92
    if (value)
136
        rTarget |= (1 << bit);  // set bit
93
        rTarget |= (1 << bit);  // set bit
137
    else
94
    else
138
        rTarget &= ( (1 << bit) ^ 0xffffff ); // clear bit
95
        rTarget &= ( (1 << bit) ^ 0xffffff ); // clear bit
139
}
96
}
140
inline bool isBitSet(const int value, const int bit)
97
inline bool isBitSet(const int value, const int bit)
141
{
98
{
142
    return value & (1 << bit);
99
    return value & (1 << bit);
143
}
100
}
144
101
145
// define a global isnan() function
102
// define a global isnan() function
146
#ifndef isnan
103
#ifndef isnan
147
#define isnan(x) ((x) != (x))
104
#define isnan(x) ((x) != (x))
148
#endif
105
#endif
149
106
150
#include "globalsettings.h"
107
#include "globalsettings.h"
151
108
152
#endif // GLOBAL_H
109
#endif // GLOBAL_H
153
 
110