iLand
firemodule.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 FIREMODULE_H
21#define FIREMODULE_H
22
23#include "grid.h"
24#include "layeredgrid.h"
25#include "expression.h"
26
27class WaterCycleData;
28class ResourceUnit;
29class FireModule;
30class FireOut;
31class FireScript;
32
40{
41public:
42 FireRUData(): mKBDIref(0.), mRefMgmt(0.), mRefAnnualPrecipitation(0.), mKBDI(0.), mValid(false), mRU(nullptr) { fireRUStats.clear(); fireRUStats.n_cum_fire=0; fireRUStats.year_last_fire=0; }
43 void setup(const ResourceUnit *ru);
44 bool valid() const { return mValid; }
45 bool allowIgnition() const { return mRefMgmt>0.; }
46 void reset() { mKBDI = 0.; }
47 double kbdi() const { return mKBDI; }
48 double kbdiRef() const { return mKBDIref; }
49 double baseIgnitionProbability() const { return mBaseIgnitionProb; }
50 double managementSuppression() const { return mRefMgmt; }
51 const ResourceUnit *ru() const { return mRU; }
52
53 // access data
54
55 // statistics for the resource unit
56 struct {
58 // statistics for:
60 int n_trees;
61 int n_cells;
65 double basal_area;
66 double fuel_moss;
67 double fuel_ff;
68 double fuel_dwd;
69 double crown_kill;
70 double avg_dbh;
71 // enter() can be called multiple times
72 void enter(const int this_fire_id) {
73 if (fire_id!=this_fire_id) {
74 fire_id = this_fire_id;
75 // clear all stats
78 }
79 }
80 // call once after fire is finished
81 void calculate(const int this_fire_id, int current_year) {
82 if (fire_id==this_fire_id) {
83 // calculate averages
84 if (n_cells>0) {
85 crown_kill /= double(n_cells);
86 //fuel_moss /= double(n_cells);
87 //fuel_ff /= double(n_cells);
88 //fuel_dwd /= double(n_cells);
89 avg_dbh /= double(n_cells);
90 n_cum_fire++;
91 year_last_fire = current_year;
92 }
93 }
94 }
95 void clear() { fire_id=-1; enter(0);}
97private:
98 // parameters
99 double mKBDIref;
100 double mRefMgmt;
101 double mRefLand;
102 double mRefAnnualPrecipitation;
103 double mFireReturnInterval;
104 double mAverageFireSize;
105 double mMinFireSize;
106 double mMaxFireSize;
107 double mBaseIgnitionProb;
108 double mFireExtinctionProb;
109 // variables
110 double mKBDI;
111 bool mValid;
112 const ResourceUnit *mRU;
113
114 friend class FireModule; // allow access to member values
115 friend class FireLayers;
116};
117
121class FireLayers: public LayeredGrid<FireRUData> {
122 public:
123 void setData(const Grid<FireRUData> &grid, FireModule *module) { mGrid = &grid; mFireModule=module; }
124 double value(const FireRUData& data, const int index) const;
125 const QVector<LayeredGridBase::LayerElement> &names();
126private:
127 QVector<LayeredGridBase::LayerElement> mNames;
128 FireModule *mFireModule;
129};
141{
142public:
143 FireModule();
146 void setup();
147 void setup(const ResourceUnit *ru);
148 void setScriptObj(FireScript *sm) {mFireScript = sm; }
149
150 static double cellsize() { return 20.; }
151
152 // actions
155 void run();
158 void yearBegin();
161 void calculateDroughtIndex(const ResourceUnit *resource_unit, const WaterCycleData *water_data);
162
163 // main fire functions
165 double ignition(bool only_ignite = false);
167 void spread(const QPoint &start_point, const bool prescribed = false);
168 void severity();
169
170 // helper functions
171 int fireId() const { return mFireId; }
172 double fireX() const { return fireStats.startpoint.x(); }
173 double fireY() const { return fireStats.startpoint.y(); }
174 void testSpread();
175 double prescribedIgnition(const double x_m, const double y_m, const double firesize, const double windspeed, const double winddirection);
178 double burnInIgnition(const double x_m, const double y_m, const double length, double max_fire_size, bool simulate=false);
179
180private:
182 double calculateFireSize(const FireRUData *data);
183
184 // functions for the cellular automata
185 void probabilisticSpread(const QPoint &start_point, QRect burn_in=QRect(), int burn_in_cells=0);
188 void calculateSpreadProbability(const FireRUData &fire_data, const double height, const float *pixel_from, float *pixel_to, const int direction);
189
191 double calcSlopeFactor(const double slope) const;
192
194 double calcWindFactor(const double direction) const;
195
197 bool burnPixel(const QPoint &pos, FireRUData &ru_data);
199 void afterFire();
200
203 double calcCombustibleFuel(const FireRUData &ru_data, double &rMoss_kg_ha, double &rForestFloor_kg_ha, double &rDWD_kg_ha);
204
206 void setupBorderGrid();
207
208 int mFireId;
209 // parameters
210 double mWindSpeedMin;
211 double mWindSpeedMax;
212 double mWindDirection;
213 double mCurrentWindSpeed;
214 double mCurrentWindDirection;
215 double mPrescribedFiresize; // fire size from javascript
216 double mMinimumFuel;
217 // fuel parameters
218 double mFuelkFC1;
219 double mFuelkFC2;
220 double mFuelkFC3;
221 // crown kill
222 double mCrownKillkCK1;
223 double mCrownKillkCK2;
224 double mCrownKillDbh;
225 Expression mMortalityFormula;
226 double *mFormula_bt;
227 double *mFormula_ck;
228 double mBurnSoilBiomass;
229 double mBurnStemFraction;
230 double mBurnBranchFraction;
231 double mBurnFoliageFraction;
232
233 bool mOnlyFireSimulation;
234 bool mAllowBurnIn;
235 // event handler
236 QString mAfterFireEvent;
237
238 // data
239 Grid<FireRUData> mRUGrid;
240 Grid<float> mGrid;
241 Grid<char> mBorderGrid;
242 FireLayers mFireLayers;
243 FireScript *mFireScript;
244
245 // functions
246 FireRUData &data(const ResourceUnit *ru);
247
248 // statistics
249 struct {
255 QPointF startpoint;
256 } fireStats;
257 friend class FireOut;
258 friend class FireScript;
259 friend class FireLayers;
260
261};
262
263#endif // FIREMODULE_H
An expression engine for mathematical expressions provided as strings.
Definition: expression.h:29
Helper class manage and visualize data layers related to fire.
Definition: firemodule.h:121
double value(const FireRUData &data, const int index) const
Definition: firemodule.cpp:78
void setData(const Grid< FireRUData > &grid, FireModule *module)
Definition: firemodule.h:123
const QVector< LayeredGridBase::LayerElement > & names()
list of stored layers
Definition: firemodule.cpp:97
FireModule is the main class of the fire sub module.
Definition: firemodule.h:141
double fire_psme_total
psme (doug fir) on burning pixels (m2 basal area)
Definition: firemodule.h:253
void yearBegin()
called yearly from the plugin to perform some cleanup.
Definition: firemodule.cpp:209
void severity()
int fireId() const
return the ID of the last fire event
Definition: firemodule.h:171
double fireY() const
coordinates of the ignition point
Definition: firemodule.h:173
int iterations
Definition: firemodule.h:250
int fire_size_realized_m2
Definition: firemodule.h:252
void setup()
the setup function sets up the grids and parameters used for the fire module.
Definition: firemodule.cpp:138
void setScriptObj(FireScript *sm)
Definition: firemodule.h:148
double fireX() const
coordinates of the ignition point
Definition: firemodule.h:172
double prescribedIgnition(const double x_m, const double y_m, const double firesize, const double windspeed, const double winddirection)
Definition: firemodule.cpp:737
void calculateDroughtIndex(const ResourceUnit *resource_unit, const WaterCycleData *water_data)
called from the plugin to perform calculations (drought indices) during the water cycle routine.
Definition: firemodule.cpp:236
void spread(const QPoint &start_point, const bool prescribed=false)
spread a fire starting from 'start_point' (index of the 20m grid)
Definition: firemodule.cpp:360
static double cellsize()
Definition: firemodule.h:150
int fire_size_plan_m2
Definition: firemodule.h:251
double burnInIgnition(const double x_m, const double y_m, const double length, double max_fire_size, bool simulate=false)
triggers a burn-in at 'x' and 'y' (iLand coordinate system) with a length (along the border) of 'leng...
Definition: firemodule.cpp:765
FireModule()
Definition: firemodule.cpp:123
QPointF startpoint
Definition: firemodule.h:255
void testSpread()
Definition: firemodule.cpp:703
void run()
main function that is executed yearly (called by the plugin) performs the major processes (ignition,...
Definition: firemodule.cpp:219
double fire_psme_died
psme (doug fir) that died during the fire (based on m2)
Definition: firemodule.h:254
double ignition(bool only_ignite=false)
calculate the start and starting point of a possible fire. return: burnt area (-1 if nothing burnt)
Definition: firemodule.cpp:281
Definition: fireout.h:27
FireRUData contains data items for resource units.
Definition: firemodule.h:40
double kbdiRef() const
Definition: firemodule.h:48
int n_trees_died
number of trees that are killed
Definition: firemodule.h:59
double avg_dbh
average dbh (arithmetic mean) and limited to threshold
Definition: firemodule.h:70
void setup(const ResourceUnit *ru)
Definition: firemodule.cpp:50
FireRUData()
Definition: firemodule.h:42
const ResourceUnit * ru() const
Definition: firemodule.h:51
double died_basal_area
basal area (m2) of died trees
Definition: firemodule.h:64
double fuel_dwd
average fuel dead wood (kg/ha)
Definition: firemodule.h:68
int year_last_fire
the year of the last fire event on the RU
Definition: firemodule.h:63
void reset()
Definition: firemodule.h:46
bool valid() const
returns false if the cell is not a valid resource unit (outside of project area)
Definition: firemodule.h:44
struct FireRUData::@7 fireRUStats
int n_cells
number of burning cells
Definition: firemodule.h:61
double crown_kill
average crown kill percent
Definition: firemodule.h:69
int n_cum_fire
number of fire events affecting the resource unit
Definition: firemodule.h:62
double kbdi() const
Definition: firemodule.h:47
double managementSuppression() const
Definition: firemodule.h:50
double fuel_ff
average fuel fine material (kg/ha)
Definition: firemodule.h:67
bool allowIgnition() const
Definition: firemodule.h:45
int n_trees
number of trees that are on burning cells
Definition: firemodule.h:60
double baseIgnitionProbability() const
Definition: firemodule.h:49
int fire_id
Definition: firemodule.h:57
double basal_area
basal area (m2) of all trees on burning pixels
Definition: firemodule.h:65
double fuel_moss
average affected moss biomass (kg/ha)
Definition: firemodule.h:66
FireScript is the scripting shell for the fire module.
Definition: firescript.h:28
Grid class (template).
Definition: grid.h:44
This is the base class for multi-layer grids in iLand.
Definition: layeredgrid.h:95
const Grid< FireRUData > * mGrid
Definition: layeredgrid.h:130
ResourceUnit is the spatial unit that encapsulates a forest stand and links to several environmental ...
Definition: resourceunit.h:49
WaterCycleData is a data transfer container for water-related details.
Definition: watercycle.h:191