8#ifndef LD_ROOTSYSTEM_H_
9#define LD_ROOTSYSTEM_H_
11#include "state/mbe_state.h"
12#include "physiology/ld_plantfunctions.h"
16struct LDNDC_API BaseRootSystemDNDC
19 ~BaseRootSystemDNDC() = 0;
26 virtual void reset( MoBiLE_Plant *) = 0;
33 set_rooting_depth(
unsigned int &, MoBiLE_Plant *,
double,
34 double _max_rooting_depth = invalid_dbl) = 0;
41 update_root_fraction_sigmoid(
double ,
54 update_root_fraction_exponential(
double ,
64 update_roots_static(
const double ,
67 ldndc::growable_array < BaseRootSystemDNDC*, 1000, 1 > & ,
75 specific_root_length(
unsigned int const &,
77 lvector_t< double > &) = 0;
84 reduce_root_system(
unsigned int &,
86 lvector_t< double > ) = 0;
93 reduce_root_system(
unsigned int &,
102 update_rootlength(
unsigned int &,
111 update_rootlength(
unsigned int &,
113 lvector_t< double > ) = 0;
119 update_roots_dynamic(
const double ,
128 virtual lvector_t< double >
129 root_restrictions_coarse_fragments(
unsigned int ) = 0;
135 virtual lvector_t< double >
136 root_restrictions_soil_strength(
unsigned int ) = 0;
142 virtual lvector_t< double >
143 root_restrictions_aeration(
unsigned int ,
144 MoBiLE_Plant * ) = 0;
150 virtual lvector_t< double >
151 root_restrictions_temperature(
unsigned int ,
152 MoBiLE_Plant * ) = 0;
155 update_rooting_depth(
const double ,
158 MoBiLE_Plant * ) = 0;
161 target_rooting_depth_increase(
double &_rooting_depth_increase,
162 unsigned int &_sl_min_no_roots,
163 double const _dt_per_day,
164 MoBiLE_Plant*
const _p) = 0;
167 nitrogen_uptake(
unsigned int _deepest_rooted_layer,
171 lvector_t< double > _no3_sl,
172 lvector_t< double > _no3_uptake_sl,
173 lvector_t< double > _nh4_sl,
174 lvector_t< double > _nh4_uptake_sl,
175 lvector_t< double > _don_sl,
176 lvector_t< double > _don_uptake_sl,
177 lvector_t< double > _temp_sl,
178 MoBiLE_Plant * ) = 0;
182struct LDNDC_API RootSystemDNDC :
public BaseRootSystemDNDC
184 RootSystemDNDC( MoBiLE_State *, cbm::io_kcomm_t *);
187 input_class_soillayers_t
const * m_soillayers;
193 LD_PlantFunctions m_pf;
194 substate_soilchemistry_t & sc_;
195 substate_microclimate_t & mc_;
196 substate_physiology_t & ph_;
197 substate_watercycle_t & wc_;
198 MoBiLE_PlantVegetation * m_veg;
205 void reset( MoBiLE_Plant *);
212 set_rooting_depth(
unsigned int &, MoBiLE_Plant *,
213 double,
double _max_rooting_depth = invalid_dbl);
220 update_root_fraction_sigmoid(
double ,
230 update_root_fraction_sigmoid(
double ,
237 unsigned int nb_layers);
244 update_root_fraction_exponential(
double ,
250 update_root_fraction_exponential(
double ,
254 unsigned int nb_layers);
261 update_roots_static(
const double ,
264 ldndc::growable_array < BaseRootSystemDNDC*, 1000, 1 > &,
271 specific_root_length(
unsigned int const &,
273 lvector_t< double > &);
280 reduce_root_system(
unsigned int &,
289 reduce_root_system(
unsigned int &,
291 lvector_t< double > );
298 update_rootlength(
unsigned int &,
306 update_rootlength(
unsigned int &,
308 lvector_t< double > );
315 update_roots_dynamic(
const double ,
325 root_restrictions_coarse_fragments(
unsigned int );
331 root_restrictions_soil_strength(
unsigned int );
338 root_restrictions_aeration(
unsigned int ,
346 root_restrictions_temperature(
unsigned int ,
354 update_rooting_depth(
const double ,
364 target_rooting_depth_increase(
double &_rooting_depth_increase,
365 unsigned int &_sl_min_no_roots,
366 double const _dt_per_day,
367 MoBiLE_Plant*
const _p);
374 update_root_structure(
unsigned int & _root_q_vt, MoBiLE_Plant *);
377 nitrogen_uptake(
unsigned int _deepest_rooted_layer,
381 lvector_t< double > _no3_sl,
382 lvector_t< double > _no3_uptake_sl,
383 lvector_t< double > _nh4_sl,
384 lvector_t< double > _nh4_uptake_sl,
385 lvector_t< double > _don_sl,
386 lvector_t< double > _don_uptake_sl,
387 lvector_t< double > _temp_sl,
Spatially explicit groundwater model.
Definition: airchemistryput.h:15