LandscapeDNDC 1.37.0
Loading...
Searching...
No Matches
psim.h
1
9
10#ifndef LM_PHYSIOLOGY_GROWTHPSIM_H_
11#define LM_PHYSIOLOGY_GROWTHPSIM_H_
12
13#include "mbe_legacymodel.h"
14#include "state/mbe_state.h"
15#include "ld_shared.h"
16
17#include "physiology/ld_nitrogenfixation.h"
18#include "physiology/ld_plantfunctions.h"
19#include "physiology/ld_rootsystem.h"
20#include "physiology/ld_treedyn.h"
21#include "physiology/photofarquhar/berryball.h"
22
23#include "eventhandler/graze/graze.h"
24#include "eventhandler/cut/cut.h"
25
26namespace ldndc {
27
28extern cbm::logger_t * PhysiologyGrowthPSIMLogger;
29
38class LDNDC_API PhysiologyGrowthPSIM : public MBE_LegacyModel
39{
40 LMOD_EXPORT_MODULE_INFO(PhysiologyGrowthPSIM,"physiology:psim","Physiology GrowthPSIM");
41
42 public:
44 static const unsigned int IMAX_W;
46 static const double C1;
48 static const double CCOMNOX;
50 static const double CSATNH3;
52 static const double CSATNOX;
54 static const double EPOTNOX;
56 static const double FRFRT;
58 static const double FMIN;
60 static const double KMMM;
62 static const double PAMM;
64 static const double PGDD;
66 static const double PMIN;
68 static const double PNIT;
70 static const double PPHLOE;
72 static const double PREDFRT;
74 static const double PREDSAP;
76 static const double PTW;
78 static const double TAU;
80 static const double TGLIM;
82 static const double TRMAX;
84 static const double TRMIN;
86 static const double TROPT;
88 static const double UPOTNH3;
89
90 public:
91 PhysiologyGrowthPSIM(
92 MoBiLE_State *,
93 ::cbm::io_kcomm_t *,
94 timemode_e);
95
96 ~PhysiologyGrowthPSIM();
97
98 lerr_t configure( ::ldndc::config_file_t const *);
99 lerr_t register_ports( cbm::io_kcomm_t *);
100 lerr_t initialize();
101
102 lerr_t solve();
103 lerr_t unregister_ports( cbm::io_kcomm_t *);
104 lerr_t finalize() { return LDNDC_ERR_OK; }
105
106 lerr_t sleep();
107 lerr_t wake();
108
113 cbm::string_t branchfraction_opt;
114
119 cbm::string_t crownlength_opt;
120
126 bool rootgrowth_opt;
127
128 double clumping_factor;
129
134 cbm::string_t timemode_opt;
135
141 double target_biomass;
142 int target_treenumber;
143
144 enum canopy_nitrogen_uptake_e
145 {
146 NOUPTAKE,
147 STOMATALUPTAKE,
148 DIRECTUPTAKE
149 };
150
151 canopy_nitrogen_uptake_e n_uptake_canopy_method;
152
153 bool have_forest_structure();
154
155 protected:
156
160 lerr_t PSIM_ResizeVegetationVectors();
161
165 lerr_t PSIM_StepInit();
166
170 lerr_t PSIM_PlantingEvent();
171
175 lerr_t PSIM_HydraulicConductance();
176
180 lerr_t PSIM_Photosynthesis();
181
185 lerr_t PSIM_Potentialtranspiration();
186
187 lerr_t PSIM_ResetFlushing();
188
189 lerr_t PSIM_ResetPhenology( MoBiLE_Plant *);
190
191 lerr_t PSIM_Reset( MoBiLE_Plant *);
192
193 lerr_t PSIM_ResetBiomassFromLastYear();
194
195 lerr_t PSIM_UpdateNitrogenConc();
196
197 lerr_t PSIM_AgriculturalManagement();
198
199 lerr_t PSIM_BudBurst();
200
201 lerr_t PSIM_Senescence();
202
203 lerr_t PSIM_CarAllocation();
204
205 lerr_t PSIM_SoilCarbonRelease();
206
207 lerr_t PSIM_NitAllocation();
208
209 lerr_t PSIM_Respiration();
210
211 lerr_t PSIM_NitrogenFixation();
212
213 lerr_t PSIM_NitrogenUptake();
214
215 lerr_t PSIM_BiomassUpdate();
216
217 lerr_t PSIM_PhotosynthesisRates();
218
219 lerr_t PSIM_DroughtStress();
220
221 lerr_t PSIM_NitrogenBalance();
222
223 lerr_t PSIM_VegStructure();
224
225 lerr_t PSIM_BalanceCheck(size_t);
226
227 bool subdaily_timemode();
228
229 lerr_t PSIM_Harvest();
230
231 lerr_t PSIM_StepOut();
232
233 private:
234
235 MoBiLE_State * m_state;
236 cbm::io_kcomm_t * io_kcomm;
237
238 input_class_climate_t const & cl_;
239 input_class_soillayers_t const & sl_;
240 input_class_setup_t const * m_setup;
241 input_class_siteparameters_t const * m_sipar;
242 input_class_species_t const * m_species;
243
244 substate_airchemistry_t & ac_;
245 substate_microclimate_t & mc_;
246 substate_physiology_t & ph_;
247 substate_soilchemistry_t & sc_;
248 substate_watercycle_t & wc_;
249
250 MoBiLE_PlantVegetation * m_veg;
251
252 NitrogenFixation *NitrogenFixation_;
253
254 SubscribedEvent<LD_EventHandlerQueue> m_PlantEvents;
255 SubscribedEvent<LD_EventHandlerQueue> m_HarvestEvents;
256
257 lvector_t< bool > additional_season; //set to true if additional growing season within the current phenological year is possible
258 lvector_t< unsigned int > phenological_year; //stores year of start of current growing season
259 lvector_t< int > foliage_age_of_start_senescence; // age of foliage in days at which leaves start to shed
260
261 lvector_t< double > carbonuptake_vt;
262
263 lvector_t< int > days_since_emergence;
264 std::vector< std::vector< int > > foliage_age_na;
265
266 lvector_t< double > temp_sl;
267 lvector_t< double > ts_temp_fl;
268
269 lvector_t< double > no_concentration_fl;
270 lvector_t< double > no2_concentration_fl;
271 lvector_t< double > nh3_concentration_fl;
272
273 //lvector_t< double > xylem_resistance_smoothed_vt;
274 lvector_t< double > xylem_resistance_smoothed_old_vt;
275 lvector_t< double > psidecline_cum_vt;
276 lvector_t< double > psidecline_daycum_vt;
277 lvector_t< double > rehydrationindex_cum_vt;
278
279 lvector_t< double > mSapOld_vt;
280 lvector_t< double > mCorOld_vt;
281
282 lvector_t< double > qsaparea_vt;
283 lvector_t< double > fsub_vt;
284
285 lvector_t< double > mSapOpt_vt;
286 lvector_t< double > mBudLoss_vt;
287 lvector_t< double > mSapLoss_vt;
288 lvector_t< double > ncFolOpt;
289 lvector_t< double > ncBudOpt;
290 lvector_t< double > ts_leaftemp_vt;
291 lvector_t< double > nd_leaftemp_vt;
292 lvector_t< double > nDem_vt;
293 lvector_t< double > nFol_vt;
294 lvector_t< double > nFrt_vt;
295 lvector_t< double > nSap_vt;
296 lvector_t< double > nCor_vt;
297 lvector_t< double > nBud_vt;
298 lvector_t< double > cNOx_fl;
299
300 lvector_t< double > uptNH4Max_vt;
301 lvector_t< double > uptNO3Max_vt;
302 lvector_t< double > uptDONMax_vt;
303 lvector_t< double > uptNWetMax_vt;
304 lvector_t< double > uptNWet_vt;
305 lvector_t< double > uptNTot_vt;
306 std::vector< std::vector< double > > uptNH4Max_vtsl;
307 std::vector< std::vector< double > > uptNO3Max_vtsl;
308 std::vector< std::vector< double > > uptDONMax_vtsl;
309
310 lvector_t< double > rFolOld_vt;
311 lvector_t< double > rBudOld_vt;
312 lvector_t< double > rSapOld_vt;
313 lvector_t< double > rFrtOld_vt;
314 lvector_t< double > rTraOld_vt;
315 lvector_t< double > exsuLossOld_vt;
316
317 lvector_t< double > uptNH4_vt;
318 lvector_t< double > uptNO3_vt;
319 lvector_t< double > uptNH3_vt;
320 lvector_t< double > uptDON_vt;
321
322 lvector_t< double > uptNH4Old_vt;
323 lvector_t< double > uptNO3Old_vt;
324 lvector_t< double > uptNH3Old_vt;
325 lvector_t< double > uptDONOld_vt;
326
327 lvector_t< double > uptNOxOld_vt;
328 lvector_t< double > uptNHyOld_vt;
329
330 lvector_t< double > n_bud_to_fol_vt;
331
332 lvector_t< double > n_sap_to_cor_vt;
333 lvector_t< double > n_bud_to_cor_vt;
334 lvector_t< double > n_fol_to_cor_vt;
335 lvector_t< double > n_frt_to_cor_vt;
336
337 lvector_t< double > n_sap_to_litter_vt;
338
339 lvector_t< double > n_sap_to_redistribute_vt;
340 lvector_t< double > n_bud_to_redistribute_vt;
341 lvector_t< double > n_fol_to_redistribute_vt;
342 lvector_t< double > n_frt_to_redistribute_vt;
343
344 lvector_t< double > n_sap_gain_vt;
345 lvector_t< double > n_bud_gain_vt;
346 lvector_t< double > n_fol_gain_vt;
347 lvector_t< double > n_frt_gain_vt;
348
349 lvector_t< double > nhy_uptake_fl;
350 lvector_t< double > nox_uptake_fl;
351
352 double mFol_emergence;
353 double accumulated_wateruptake_old;
354 double accumulated_potentialtranspiration_old;
355
356 double plant_waterdeficit_old;
357 double psi_deficit_old;
358
359 double tot_c;
360 double tot_n;
361
362 bool daytime;
363 double SIM_DAY_FRACTION;
364
365 size_t fl_cnt_;
366
367 LD_PlantFunctions m_pf;
368 TreeDynamics m_treedyn;
369
370 lvector_t< double > no3_sl;
371 lvector_t< double > nh4_sl;
372 lvector_t< double > don_sl;
373
374 EventHandlerGraze m_eventgraze;
375 EventHandlerCut m_eventcut;
376
377 BerryBall m_photo;
378
385 std::map< int, RootSystemDNDC > root_system;
386};
387} /*namespace ldndc*/
388
389#endif /* !LM_PHYSIOLOGY_GROWTHPSIM_H_ */
390
cbm::string_t branchfraction_opt
...
Definition psim.h:113
cbm::string_t crownlength_opt
...
Definition psim.h:119
static const double TROPT
Definition psim.h:86
static const double CCOMNOX
Definition psim.h:48
static const double PREDFRT
Definition psim.h:72
static const double PNIT
Definition psim.h:68
static const double TAU
Definition psim.h:78
static const double PMIN
Definition psim.h:66
static const double CSATNOX
Definition psim.h:52
static const double PAMM
Definition psim.h:62
static const double C1
Definition psim.h:46
static const double FRFRT
Definition psim.h:56
static const double PTW
Definition psim.h:76
static const double KMMM
Definition psim.h:60
int stand_structure_opt
...
Definition psim.h:140
static const double PREDSAP
Definition psim.h:74
static const double EPOTNOX
Definition psim.h:54
static const double TRMAX
Definition psim.h:82
static const double UPOTNH3
Definition psim.h:88
static const double TGLIM
Definition psim.h:80
cbm::string_t timemode_opt
...
Definition psim.h:134
std::map< int, RootSystemDNDC > root_system
Root system.
Definition psim.h:385
static const double CSATNH3
Definition psim.h:50
static const unsigned int IMAX_W
Definition psim.h:44
static const double FMIN
Definition psim.h:58
static const double PPHLOE
Definition psim.h:70
static const double PGDD
Definition psim.h:64
bool competition_opt
...
Definition psim.h:125
static const double TRMIN
Definition psim.h:84
Spatially explicit groundwater model.
Definition airchemistryput.h:15