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_;
103 lvector_t< unsigned int > root_q_vt_;
105 lvector_t< double > n2_fixation_vt;
107 lvector_t< double > dc_fol_vt;
108 lvector_t< double > dc_lst_vt;
109 lvector_t< double > dc_bud_vt;
110 lvector_t< double > dc_frt_vt;
112 lvector_t< double > r_res_vt;
113 lvector_t< double > r_gro_vt;
114 lvector_t< double > r_gro_below_vt;
115 lvector_t< double > r_fol_vt;
116 lvector_t< double > r_lst_vt;
117 lvector_t< double > r_bud_vt;
118 lvector_t< double > r_frt_vt;
120 lvector_t< double > s_fol_vt;
121 lvector_t< double > s_bud_vt;
123 lvector_t< double > n_lit_fol_vt;
124 lvector_t< double > n_lit_bud_vt;
126 lvector_t< double > exsuLoss_vt;
128 std::vector< std::vector< double > > s_frt_vtsl;
129 std::vector< std::vector< double > > n_lit_frt_vtsl;
131 std::vector< std::vector< double > > c_upt_vtfl;
133 lvector_t< double > temp_sl;
134 lvector_t< double > no3_sl;
135 lvector_t< double > nh4_sl;
136 lvector_t< double > don_sl;
138 lvector_t< double > nh4_uptake_sl;
139 lvector_t< double > don_uptake_sl;
140 lvector_t< double > no3_uptake_sl;
142 bool exponential_root_distribution;
148 double delta_c_at_planting;
163 lerr_t GrasslandDNDCCuttingGrazing();
171 void update_species_related_state_items( MoBiLE_Plant *);
188 lerr_t event_plant( MoBiLE_Plant *, EventAttributes
const &);
205 lerr_t event_harvest( MoBiLE_Plant *, EventAttributes
const &);
212 lerr_t GrasslandDNDCPlantDevelopment();
215 void growth_respiration( MoBiLE_Plant *);
230 void maintenance_respiration( MoBiLE_Plant *);
245 double nitrogen_demand( MoBiLE_Plant *);
251 void nitrogen_uptake();
267 double nitrogen_fixation( MoBiLE_Plant *,
double,
double);
268 double total_fixed_nitrogen( MoBiLE_Plant *,
double)
const;
276 GrasslandDNDCPhotosynthesis( MoBiLE_Plant *,
double);
290 void senescence( MoBiLE_Plant *);
293 void update_canopy_coverage( MoBiLE_Plant *);
296 void update_canopy_height( MoBiLE_Plant *);
299 void update_canopy_items( MoBiLE_Plant *);
302 void GrasslandDNDCBalanceCheck(
int );
Spatially explicit groundwater model.
Definition: airchemistryput.h:15