LandscapeDNDC 1.37.0
ld_treedyn.h
1
11#ifndef LD_TREEDYN_H_
12#define LD_TREEDYN_H_
13
14#include "ld_modelsconfig.h"
15#include "physiology/ld_plantfunctions.h"
16#include "physiology/ld_rootsystem.h"
17
18#include "state/mbe_state.h"
19#include "ld_eventqueue.h"
20//
21//#include <input/species/species.h>
22//
23//namespace ldndc {
24//
25//extern cbm::logger_t * VegStructureTREEDYNLogger;
26//
27namespace ldndc
28{
29
30 class LDNDC_API TreeDynamics
31 {
32
33
34 public:
35 TreeDynamics(
36 MoBiLE_State *,
37 cbm::io_kcomm_t *);
38
39 ~TreeDynamics();
40
41 lerr_t register_ports( cbm::io_kcomm_t *);
42 lerr_t unregister_ports( cbm::io_kcomm_t *);
43
44 LD_Allometry m_alm;
45 LD_PlantFunctions m_pf;
46 substate_soilchemistry_t & sc_;
47 substate_physiology_t & ph_;
48 MoBiLE_PlantVegetation * m_veg;
49 input_class_setup_t const * m_se;
50 input_class_soillayers_t const * m_sl;
51
52 lerr_t
53 Mortality( MoBiLE_Plant *,
54 double &_sWoodAbove,
55 double &_nLitWoodAbove,
56 double *_sWoodBelow_sl,
57 double *_nLitWoodBelow_sl);
58
59 lerr_t
60 Growth( MoBiLE_Plant *,
61 bool,
62 bool,
63 cbm::string_t,
64 cbm::string_t,
65 double);
66
67 lerr_t
68 update_grass_coverage( MoBiLE_Plant * /* plant species */);
69
70 lerr_t
71 Crowding( MoBiLE_Plant *,
72 cbm::string_t);
73
74 double
75 get_branch_fraction(
76 cbm::string_t ,
77 MoBiLE_Plant *);
78
79 lerr_t
80 OnStructureChange( MoBiLE_Plant *,
81 RootSystemDNDC *_rs = NULL);
82
83 lerr_t
84 UpdateBiomass( MoBiLE_Plant *);
85
86 lerr_t
87 MassDistribution( MoBiLE_Plant *,
88 RootSystemDNDC *_rs = NULL);
89
90 lerr_t
91 LaiDistribution( MoBiLE_Plant *);
92
93 /* events methods */
94
95 int
96 HandleDisturbanceEvents(
97 cbm::io_kcomm_t *_io_kcomm,
98 cbm::string_t /* crownlength_method */,
99 cbm::string_t /* branchfraction method */,
100 bool /* _competition method */,
101 double & /* foliage dry weight litter */,
102 double & /* foliage nitrogen litter */,
103 double & /* fruit dry weight litter */,
104 double & /* fruit nitrogen dry weight litter */,
105 double & /* aboveground wood dry weight litter */,
106 double & /* aboveground wood nitrogen litter */,
107 double * /* belowground wood dry weight litter */,
108 double * /* belowground wood dry weight litter */,
109 double * /* fineroots dry weight litter */,
110 double * /* fineroots nitrogen litter */);
111
112 EventQueue DefoliateEvents;
113 CBM_Handle DefoliateHandle;
114 struct EventDefoliateData
115 {
116 double reduction_volume;
117 bool export_foliage;
118 };
119 /* defoliation, e.g., for insect calamities or crown fires */
120 lerr_t HandleEventDefoliate(
121 MoBiLE_Plant*, EventDefoliateData const *,
122 double & /* foliage dry weight litter */,
123 double & /* foliage nitrogen litter */);
124 int HandleEventsDefoliate(
125 double & /* foliage dry weight litter */,
126 double & /* foliage nitrogen litter */);
127
128 EventQueue RegrowEvents;
129 CBM_Handle RegrowHandle;
130 struct EventRegrowData
131 {
132 double export_agb;
133 double tree_number;
134 double tree_number_resize_factor;
135 double height_max;
136 };
137 lerr_t HandleEventRegrow(
138 MoBiLE_Plant*, EventRegrowData const *,
139 cbm::string_t /* crownlength method */,
140 cbm::string_t /* branchfraction method */,
141 double & /* foliage dry weight litter */,
142 /* double * foliage dry weight litter per age class ,*/
143 double & /* foliage nitrogen litter */,
144 double & /* fruit dry weight litter */,
145 double & /* fruit nitrogen dry weight litter */,
146 double & /* aboveground wood dry weight litter */,
147 double & /* aboveground wood nitrogen litter */);
148 int HandleEventsRegrow(
149 cbm::string_t /* crownlength method */,
150 cbm::string_t /* branchfraction method */,
151 double & /* foliage dry weight litter */,
152 double & /* foliage nitrogen litter */,
153 double & /* fruit dry weight litter */,
154 double & /* fruit nitrogen dry weight litter */,
155 double & /* aboveground wood dry weight litter */,
156 double & /* aboveground wood nitrogen litter */);
157
158 EventQueue ThrowEvents;
159 CBM_Handle ThrowHandle;
160 struct EventThrowData
161 {
162 double reduction_volume;
163 };
164 lerr_t HandleEventThrow(
165 cbm::io_kcomm_t *_io_kcomm, MoBiLE_Plant*, EventThrowData const *,
166 double & /* foliage dry weight litter */,
167 double & /* foliage nitrogen litter */,
168 double & /* fruit dry weight litter */,
169 double & /* fruit nitrogen dry weight litter */,
170 double & /* aboveground wood dry weight litter */,
171 double & /* aboveground wood nitrogen litter */,
172 double * /* belowground wood dry weight litter */,
173 double * /* belowground wood dry weight litter */,
174 double * /* fineroots dry weight litter */,
175 double * /* fineroots nitrogen litter */);
176 int HandleEventsThrow(
177 cbm::io_kcomm_t *_io_kcomm,
178 double & /* foliage dry weight litter */,
179 double & /* foliage nitrogen litter */,
180 double & /* fruit dry weight litter */,
181 double & /* fruit nitrogen dry weight litter */,
182 double & /* aboveground wood dry weight litter */,
183 double & /* aboveground wood nitrogen litter */,
184 double * /* belowground wood dry weight litter */,
185 double * /* belowground wood dry weight litter */,
186 double * /* fineroots dry weight litter */,
187 double * /* fineroots nitrogen litter */);
188
189 EventQueue ThinEvents;
190 CBM_Handle ThinHandle;
191 struct EventThinData
192 {
193 double reduction_volume;
194 double reduction_number;
195 double export_foliage;
196 double export_branch_wood;
197 double export_root_wood;
198 double export_stem_wood;
199 };
200 lerr_t HandleEventThin(
201 cbm::io_kcomm_t *_io_kcomm,
202 MoBiLE_Plant*, EventThinData const *,
203 cbm::string_t /* crownlength method */,
204 bool /* competition method */,
205 double & /* foliage dry weight litter */,
206 double & /* foliage nitrogen litter */,
207 double & /* fruit dry weight litter */,
208 double & /* fruit nitrogen dry weight litter */,
209 double & /* aboveground wood dry weight litter */,
210 double & /* aboveground wood nitrogen litter */,
211 double * /* belowground wood dry weight litter per layer */,
212 double * /* belowground wood nitrogen litter */,
213 double * /* fineroots dry weight litter per layer*/,
214 double * /* fineroots nitrogen litter per layer*/);
215 int HandleEventsThin(
216 cbm::io_kcomm_t *_io_kcomm,
217 cbm::string_t /* crownlength method */,
218 bool /* competition method */,
219 double & /* foliage dry weight litter */,
220 double & /* foliage nitrogen litter */,
221 double & /* fruit dry weight litter */,
222 double & /* fruit nitrogen dry weight litter */,
223 double & /* aboveground wood dry weight litter */,
224 double & /* aboveground wood nitrogen litter */,
225 double * /* belowground wood dry weight litter */,
226 double * /* belowground wood dry weight litter */,
227 double * /* fineroots dry weight litter */,
228 double * /* fineroots nitrogen litter */);
229
230 EventQueue HarvestEvents;
231 CBM_Handle HarvestHandle;
232 struct EventHarvestData
233 {
234 double export_branch_wood;
235 double export_root_wood;
236 double export_stem_wood;
237 };
238 lerr_t HandleEventHarvest(
239 cbm::io_kcomm_t *_io_kcomm,
240 MoBiLE_Plant*, EventHarvestData const *,
241 double & /* foliage dry weight litter */,
242 double & /* foliage nitrogen litter */,
243 double & /* fruit dry weight litter */,
244 double & /* aboveground wood dry weight litter */,
245 double & /* aboveground wood nitrogen litter */,
246 double * /* belowground wood dry weight litter */,
247 double * /* belowground wood dry weight litter */,
248 double * /* fineroots dry weight litter */,
249 double * /* fineroots nitrogen litter */);
250 int HandleEventsHarvest(
251 cbm::io_kcomm_t *_io_kcomm,
252 double & /* foliage dry weight litter */,
253 double & /* foliage nitrogen litter */,
254 double & /* fruit dry weight litter */,
255 double & /* aboveground wood dry weight litter */,
256 double & /* aboveground wood nitrogen litter */,
257 double * /* belowground wood dry weight litter */,
258 double * /* belowground wood dry weight litter */,
259 double * /* fineroots dry weight litter */,
260 double * /* fineroots nitrogen litter */);
261
262 };
263}
264
265#endif /* !LD_TREEDYN_H_ */
266
Spatially explicit groundwater model.
Definition: airchemistryput.h:15