LandscapeDNDC 1.37.0
grassland-dndc.h
1
5#ifndef LM_PHYSIOLOGY_GRASSLANDDNDC_H_
6#define LM_PHYSIOLOGY_GRASSLANDDNDC_H_
7
8#include "mbe_legacymodel.h"
9#include "state/mbe_state.h"
10#include "ld_shared.h"
11#include "ld_eventqueue.h"
12
13#include "eventhandler/graze/graze.h"
14#include "eventhandler/cut/cut.h"
15#include "physiology/ld_plantfunctions.h"
16
17#include <containers/lgrowarray.h>
18
19namespace ldndc {
20
21struct BaseRootSystemDNDC;
22class LDNDC_API PhysiologyGrasslandDNDC : public MBE_LegacyModel
23{
24 LMOD_EXPORT_MODULE_INFO(PhysiologyGrasslandDNDC,"physiology:grasslanddndc","Physiology GrasslandDNDC");
25
26 /*** module specific constants ***/
27
29 static double const GROWTH_RESPIRATION_FRACTION;
30
32 static const double S_TLIMIT;
33
34public:
35 PhysiologyGrasslandDNDC(
36 MoBiLE_State *,
37 cbm::io_kcomm_t *,
38 timemode_e);
39
40 ~PhysiologyGrasslandDNDC();
41
42 lerr_t configure( ldndc::config_file_t const *);
43 lerr_t register_ports( cbm::io_kcomm_t *);
44 lerr_t initialize();
45
46 lerr_t solve();
47 lerr_t unregister_ports( cbm::io_kcomm_t *);
48 lerr_t finalize() { return LDNDC_ERR_OK; }
49
50 lerr_t sleep() { return LDNDC_ERR_OK; }
51 lerr_t wake() { return LDNDC_ERR_OK; }
52
53private:
54 MoBiLE_State * m_state;
55 cbm::io_kcomm_t * io_kcomm;
56
57 /* required input classes */
58 input_class_setup_t const * m_setup;
59 input_class_soillayers_t const * m_soillayers;
60 input_class_siteparameters_t const * m_sipar;
61 input_class_species_t const * m_species;
62
63 /* required state components */
64 substate_airchemistry_t const & ac_;
65 substate_microclimate_t & mc_;
66 substate_physiology_t & ph_;
67 substate_soilchemistry_t & sc_;
68 substate_watercycle_t & wc_;
69
70 MoBiLE_PlantVegetation * m_veg;
71
72 EventQueue m_HarvestEvents;
73 CBM_Handle m_HarvestHandle;
74 EventQueue m_PlantEvents;
75 CBM_Handle m_PlantHandle;
76
77 ldndc::growable_array < BaseRootSystemDNDC*, 1000, 1 > root_system;
78
79 double const *mc_temp;
80
81 double const FTS_TOT_;
82
87 LD_PlantFunctions m_pf;
88
89 double tot_c_;
90 double tot_n_;
91
92 EventHandlerGraze m_eventgraze;
93 EventHandlerCut m_eventcut;
94
95 lvector_t< double > n_demand_vt_;
96 lvector_t< double > n_uptake_vt_;
97 lvector_t< double > n_avail_tot_vt_;
98
107 lvector_t< unsigned int > root_q_vt_;
108
109 lvector_t< double > n2_fixation_vt;
110
111 lvector_t< double > dc_fol_vt;
112 lvector_t< double > dc_lst_vt;
113 lvector_t< double > dc_bud_vt;
114 lvector_t< double > dc_frt_vt;
115
116 lvector_t< double > r_res_vt;
117 lvector_t< double > r_gro_vt;
118 lvector_t< double > r_gro_below_vt;
119 lvector_t< double > r_fol_vt;
120 lvector_t< double > r_lst_vt;
121 lvector_t< double > r_bud_vt;
122 lvector_t< double > r_frt_vt;
123
124 lvector_t< double > s_fol_vt;
125 lvector_t< double > s_bud_vt;
126
127 lvector_t< double > n_lit_fol_vt;
128 lvector_t< double > n_lit_bud_vt;
129
130 lvector_t< double > exsuLoss_vt;
131
132 std::vector< std::vector< double > > s_frt_vtsl;
133 std::vector< std::vector< double > > n_lit_frt_vtsl;
134
135 std::vector< std::vector< double > > c_upt_vtfl;
136
137 lvector_t< double > temp_sl;
138 lvector_t< double > no3_sl;
139 lvector_t< double > nh4_sl;
140 lvector_t< double > don_sl;
141
142 lvector_t< double > nh4_uptake_sl;
143 lvector_t< double > don_uptake_sl;
144 lvector_t< double > no3_uptake_sl;
145
146 bool exponential_root_distribution;
147
152 double delta_c_at_planting;
153
154 /*** methods ***/
155
160 lerr_t step_init();
161 lerr_t step_out();
162
167 lerr_t GrasslandDNDCCuttingGrazing();
168
175 void update_species_related_state_items( MoBiLE_Plant *);
176
192 lerr_t event_plant( MoBiLE_Plant *, EventAttributes const &);
193
209 lerr_t event_harvest( MoBiLE_Plant *, EventAttributes const &);
210
216 lerr_t GrasslandDNDCPlantDevelopment();
217
218
219 void growth_respiration( MoBiLE_Plant *);
220
234 void maintenance_respiration( MoBiLE_Plant *);
235
249 double nitrogen_demand( MoBiLE_Plant *);
250
255 void nitrogen_uptake();
256
271 double nitrogen_fixation( MoBiLE_Plant *, double, double);
272 double total_fixed_nitrogen( MoBiLE_Plant *, double) const;
273
274
279 void
280 GrasslandDNDCPhotosynthesis( MoBiLE_Plant *, double);
281
282
283
294 void senescence( MoBiLE_Plant *);
295
296 /* coverage */
297 void update_canopy_coverage( MoBiLE_Plant *);
298
299 /* plant height */
300 void update_canopy_height( MoBiLE_Plant *);
301
302 /* canopy structure */
303 void update_canopy_items( MoBiLE_Plant *);
304
305
306 void GrasslandDNDCBalanceCheck( int /*stage*/);
307};
308} /*namespace ldndc*/
309
310#endif /* !LM_PHYSIOLOGY_GRASSLANDDNDC_H_ */
311
Spatially explicit groundwater model.
Definition: airchemistryput.h:15