5#ifndef LM_PHYSIOLOGY_GRASSLANDDNDC_H_
6#define LM_PHYSIOLOGY_GRASSLANDDNDC_H_
8#include "mbe_legacymodel.h"
9#include "state/mbe_state.h"
11#include "ld_eventqueue.h"
13#include "eventhandler/graze/graze.h"
14#include "eventhandler/cut/cut.h"
15#include "physiology/ld_plantfunctions.h"
17#include <containers/lgrowarray.h>
21struct BaseRootSystemDNDC;
22class LDNDC_API PhysiologyGrasslandDNDC :
public MBE_LegacyModel
24 LMOD_EXPORT_MODULE_INFO(PhysiologyGrasslandDNDC,
"physiology:grasslanddndc",
"Physiology GrasslandDNDC");
29 static double const GROWTH_RESPIRATION_FRACTION;
32 static const double S_TLIMIT;
35 PhysiologyGrasslandDNDC(
40 ~PhysiologyGrasslandDNDC();
42 lerr_t configure( ldndc::config_file_t
const *);
43 lerr_t register_ports( cbm::io_kcomm_t *);
47 lerr_t unregister_ports( cbm::io_kcomm_t *);
48 lerr_t finalize() {
return LDNDC_ERR_OK; }
50 lerr_t sleep() {
return LDNDC_ERR_OK; }
51 lerr_t wake() {
return LDNDC_ERR_OK; }
54 MoBiLE_State * m_state;
55 cbm::io_kcomm_t * io_kcomm;
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;
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_;
70 MoBiLE_PlantVegetation * m_veg;
72 EventQueue m_HarvestEvents;
73 CBM_Handle m_HarvestHandle;
74 EventQueue m_PlantEvents;
75 CBM_Handle m_PlantHandle;
77 ldndc::growable_array < BaseRootSystemDNDC*, 1000, 1 > root_system;
79 double const *mc_temp;
81 double const FTS_TOT_;
87 LD_PlantFunctions m_pf;
92 EventHandlerGraze m_eventgraze;
93 EventHandlerCut m_eventcut;
95 lvector_t< double > n_demand_vt_;
96 lvector_t< double > n_uptake_vt_;
97 lvector_t< double > n_avail_tot_vt_;
107 lvector_t< unsigned int > root_q_vt_;
109 lvector_t< double > n2_fixation_vt;
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;
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;
124 lvector_t< double > s_fol_vt;
125 lvector_t< double > s_bud_vt;
127 lvector_t< double > n_lit_fol_vt;
128 lvector_t< double > n_lit_bud_vt;
130 lvector_t< double > exsuLoss_vt;
132 std::vector< std::vector< double > > s_frt_vtsl;
133 std::vector< std::vector< double > > n_lit_frt_vtsl;
135 std::vector< std::vector< double > > c_upt_vtfl;
137 lvector_t< double > temp_sl;
138 lvector_t< double > no3_sl;
139 lvector_t< double > nh4_sl;
140 lvector_t< double > don_sl;
142 lvector_t< double > nh4_uptake_sl;
143 lvector_t< double > don_uptake_sl;
144 lvector_t< double > no3_uptake_sl;
146 bool exponential_root_distribution;
152 double delta_c_at_planting;
167 lerr_t GrasslandDNDCCuttingGrazing();
175 void update_species_related_state_items( MoBiLE_Plant *);
192 lerr_t event_plant( MoBiLE_Plant *, EventAttributes
const &);
209 lerr_t event_harvest( MoBiLE_Plant *, EventAttributes
const &);
216 lerr_t GrasslandDNDCPlantDevelopment();
219 void growth_respiration( MoBiLE_Plant *);
234 void maintenance_respiration( MoBiLE_Plant *);
249 double nitrogen_demand( MoBiLE_Plant *);
255 void nitrogen_uptake();
271 double nitrogen_fixation( MoBiLE_Plant *,
double,
double);
272 double total_fixed_nitrogen( MoBiLE_Plant *,
double)
const;
280 GrasslandDNDCPhotosynthesis( MoBiLE_Plant *,
double);
294 void senescence( MoBiLE_Plant *);
297 void update_canopy_coverage( MoBiLE_Plant *);
300 void update_canopy_height( MoBiLE_Plant *);
303 void update_canopy_items( MoBiLE_Plant *);
306 void GrasslandDNDCBalanceCheck(
int );
Spatially explicit groundwater model.
Definition: airchemistryput.h:15