![]() |
LandscapeDNDC 1.37.0
|
Fine root system used by PlaMox and, for the distribution functions and nitrogen uptake, by other physiology modules (see Root system). More...
#include <models/physiology/ld_rootsystem.h>


Public Member Functions | |
| RootSystemDNDC (MoBiLE_State *, cbm::io_kcomm_t *) | |
| Connects the root system to the model state (soil, microclimate, water, vegetation). | |
| void | reset (MoBiLE_Plant *) |
| Resets rooting depth, fine root mass and the fine root distribution across soil layers of a plant to zero. | |
| void | set_rooting_depth (unsigned int &, MoBiLE_Plant *, double, double _max_rooting_depth=invalid_dbl) |
| Sets the rooting depth, limited by a given maximum or, if none is given, by the species parameter ZRTMC, and determines the number of rooted layers. | |
| void | update_root_fraction_sigmoid (double, unsigned int, double, double, double, double, MoBiLE_Plant *) |
| Updates the fine root distribution of a plant with the sigmoid shape (Sigmoid root distribution). | |
| template<class _S> | |
| void | update_root_fraction_sigmoid (double, unsigned int, double, double, double, double, _S _fFrt_sl, unsigned int nb_layers) |
| Sigmoid root distribution applied to an arbitrary array of root fractions. | |
| void | update_root_fraction_exponential (double, unsigned int, double, MoBiLE_Plant *) |
| Updates the fine root distribution of a plant with the exponential shape (Exponential root distribution). | |
| template<class _S> | |
| void | update_root_fraction_exponential (double, unsigned int, double, _S _fFrt_sl, unsigned int nb_layers) |
| Exponential root distribution applied to an arbitrary array of root fractions. | |
| void | update_roots_static (const double, unsigned int &, MoBiLE_Plant *, ldndc::growable_array< BaseRootSystemDNDC *, 1000, 1 > &, double) |
| Root growth of one time step with the static approach (Static root growth model). | |
| void | specific_root_length (unsigned int const &, MoBiLE_Plant *, lvector_t< double > &) |
| Specific root length of every evaluated layer (Root length and density). | |
| void | reduce_root_system (unsigned int &, MoBiLE_Plant *, double) |
| Removes root mass uniformly from all layers (respiration, exudation); the root distribution stays the same and root length is reduced accordingly. | |
| void | reduce_root_system (unsigned int &, MoBiLE_Plant *, lvector_t< double >) |
| Removes root mass from individual layers (e.g., senescence depending on layer conditions); root length, total root mass and the root distribution are updated. | |
| void | update_rootlength (unsigned int &, MoBiLE_Plant *, double) |
| Root length change for a root mass change of the whole root system, which is distributed over the layers according to the current fractions (see Root length and density). | |
| void | update_rootlength (unsigned int &, MoBiLE_Plant *, lvector_t< double >) |
| Root length change for root mass changes of individual layers (see Root length and density). | |
| void | update_roots_dynamic (const double, unsigned int &, MoBiLE_Plant *, double) |
| Root growth of one time step with the dynamic approach (Dynamic root growth model). | |
| lvector_t< double > | root_restrictions_coarse_fragments (unsigned int) |
| Root growth restriction by coarse fragments (stones) for every layer (Root growth restrictions). | |
| lvector_t< double > | root_restrictions_soil_strength (unsigned int) |
| Root growth restriction by soil strength for every layer (Root growth restrictions). | |
| lvector_t< double > | root_restrictions_aeration (unsigned int, MoBiLE_Plant *) |
| Root growth restriction by oxygen shortage for every layer (Root growth restrictions). | |
| lvector_t< double > | root_restrictions_temperature (unsigned int, MoBiLE_Plant *) |
| Root growth restriction by soil temperature for every layer (Root growth restrictions). | |
| void | update_rooting_depth (const double, double &, unsigned int &, MoBiLE_Plant *) |
| Increases the rooting depth by the restricted target increment (step 4 of the Dynamic root growth model) and updates the number of rooted layers. | |
| void | target_rooting_depth_increase (double &_rooting_depth_increase, unsigned int &_sl_min_no_roots, double const _dt_per_day, MoBiLE_Plant *const _p) |
| Target increase of the rooting depth under optimum conditions (Target rooting depth). | |
| unsigned int | first_layer_below (double) const |
| Number of rooted soil layers for a given rooting depth [m]. | |
| void | nitrogen_uptake (unsigned int _deepest_rooted_layer, double &n_plant, double n_opt, double _fts_tot, lvector_t< double > _no3_sl, lvector_t< double > _no3_uptake_sl, lvector_t< double > _nh4_sl, lvector_t< double > _nh4_uptake_sl, lvector_t< double > _don_sl, lvector_t< double > _don_uptake_sl, lvector_t< double > _temp_sl, MoBiLE_Plant *) |
| Uptake of NH4, NO3 and DON from the rooted layers (Nitrogen uptake). | |
Fine root system used by PlaMox and, for the distribution functions and nitrogen uptake, by other physiology modules (see Root system).
| unsigned int ldndc::RootSystemDNDC::first_layer_below | ( | double | _rooting_depth | ) | const |
Number of rooted soil layers for a given rooting depth [m].
Number of rooted soil layers for a given rooting depth, i.e., the index of the first soil layer that does not hold any roots.
Layer depths are not commensurate with the root elongation, so the layer that contains the root tip counts as rooted. Used for the target and the actual rooting depth alike.
| _rooting_depth | rooting depth [m] |
References m_soillayers, and sc_.
Referenced by set_rooting_depth(), target_rooting_depth_increase(), and update_rooting_depth().

|
virtual |
Uptake of NH4, NO3 and DON from the rooted layers (Nitrogen uptake).
| _deepest_rooted_layer | index of the deepest rooted layer (inclusive) |
| _n_plant | plant nitrogen [kgN m-2] (updated) |
| _n_opt | optimum plant nitrogen [kgN m-2] |
| _fts_tot | length of the time step [d] |
| _no3_sl | nitrate of every layer [kgN m-2] (updated) |
| _no3_uptake_sl | nitrate uptake of every layer [kgN m-2] (accumulated) |
| _nh4_sl | ammonium of every layer [kgN m-2] (updated) |
| _nh4_uptake_sl | ammonium uptake of every layer [kgN m-2] (accumulated) |
| _don_sl | dissolved organic nitrogen of every layer [kgN m-2] (updated) |
| _don_uptake_sl | DON uptake of every layer [kgN m-2] (accumulated) |
| _temp_sl | soil temperature of every layer [oC] |
| _vt | plant |
Implements ldndc::BaseRootSystemDNDC.
|
virtual |
Removes root mass uniformly from all layers (respiration, exudation); the root distribution stays the same and root length is reduced accordingly.
| _sl_below_roots | number of rooted soil layers |
| _p | plant |
| _delta_dw_frt | root mass loss [kgDW m-2] (> 0) |
Implements ldndc::BaseRootSystemDNDC.
References update_rootlength().

|
virtual |
Removes root mass from individual layers (e.g., senescence depending on layer conditions); root length, total root mass and the root distribution are updated.
| _sl_below_roots | number of rooted soil layers |
| _p | plant |
| _delta_dw_frt_sl | root mass loss of every rooted layer [kgDW m-2] (> 0) |
Implements ldndc::BaseRootSystemDNDC.
References update_rootlength().

|
virtual |
Resets rooting depth, fine root mass and the fine root distribution across soil layers of a plant to zero.
rootlength_sl) is not reset here. Implements ldndc::BaseRootSystemDNDC.
|
virtual |
Root growth restriction by oxygen shortage for every layer (Root growth restrictions).
| _sl_no_roots | number of soil layers to evaluate |
| _p | plant |
Implements ldndc::BaseRootSystemDNDC.
Referenced by update_roots_dynamic().

|
virtual |
Root growth restriction by coarse fragments (stones) for every layer (Root growth restrictions).
| _sl_no_roots | number of soil layers to evaluate |
Implements ldndc::BaseRootSystemDNDC.
References sc_.
Referenced by update_roots_dynamic().

|
virtual |
Root growth restriction by soil strength for every layer (Root growth restrictions).
| _sl_no_roots | number of soil layers to evaluate |
Implements ldndc::BaseRootSystemDNDC.
Referenced by update_roots_dynamic().

|
virtual |
Root growth restriction by soil temperature for every layer (Root growth restrictions).
| _sl_no_roots | number of soil layers to evaluate |
Implements ldndc::BaseRootSystemDNDC.
References mc_.
Referenced by update_roots_dynamic().

|
virtual |
Sets the rooting depth, limited by a given maximum or, if none is given, by the species parameter ZRTMC, and determines the number of rooted layers.
The number of rooted layers follows the same definition as in the dynamic root model (first_layer_below()): the layer that contains the root tip is rooted; if the rooting depth reaches the bottom of the soil profile, all layers are rooted. The rooting depth itself is not limited by the soil depth.
Used by ArableDNDC, GrasslandDNDC and Oryza2000.
| _root_q_vt | number of rooted soil layers (output) |
| _p | plant |
| _rooting_depth | new rooting depth [m] |
| _max_rooting_depth | optional maximum rooting depth [m] |
Implements ldndc::BaseRootSystemDNDC.
References first_layer_below(), and m_soillayers.

|
virtual |
Specific root length of every evaluated layer (Root length and density).
| _sl_below_roots | number of layers to evaluate \( n \) |
| _p | plant |
| specifific_root_length_sl | specific root length of every evaluated layer [m kgDW-1] (output) |
Implements ldndc::BaseRootSystemDNDC.
References sc_.
Referenced by update_roots_dynamic(), and update_roots_static().

|
virtual |
Target increase of the rooting depth under optimum conditions (Target rooting depth).
| _rooting_depth_increase | target increase of the rooting depth [m] (output) |
| _sl_min_no_roots | number of rooted layers at the target depth (output) |
| _dt_per_day | length of the time step [d] |
| _p | plant |
Implements ldndc::BaseRootSystemDNDC.
References first_layer_below().
Referenced by update_roots_dynamic().


| void ldndc::RootSystemDNDC::update_root_fraction_exponential | ( | double | _adaption_rate, |
| unsigned int | _deepest_rooted_layer, | ||
| double | _fact_exp, | ||
| _S | _fFrt_sl, | ||
| unsigned int | nb_layers ) |
Exponential root distribution applied to an arbitrary array of root fractions.
Exponential root distribution (Exponential root distribution) applied to an arbitrary array of root fractions.
| _adaption_rate | adaption rate \( a \) [0-1] |
| _deepest_rooted_layer | number of rooted soil layers \( n_r \) |
| _fact_exp | \( k \) [m-1] |
| _fFrt_sl | root fractions to update |
| nb_layers | size of _fFrt_sl; entries of non-rooted layers are set to 0 |
References sc_.
|
virtual |
Updates the fine root distribution of a plant with the exponential shape (Exponential root distribution).
| _adaption_rate | adaption rate \( a \) [0-1] |
| _deepest_rooted_layer | number of rooted soil layers \( n_r \) |
| _fact_exp | \( k \) [m-1] |
| _vt | plant (its fFrt_sl is updated) |
Implements ldndc::BaseRootSystemDNDC.
References update_root_fraction_exponential().
Referenced by update_root_fraction_exponential(), and update_roots_dynamic().


| void ldndc::RootSystemDNDC::update_root_fraction_sigmoid | ( | double | _adaption_rate, |
| unsigned int | _deepest_rooted_layer, | ||
| double | _root_min, | ||
| double | _root_max, | ||
| double | _root_width, | ||
| double | _root_height, | ||
| _S | _fFrt_sl, | ||
| unsigned int | _nb_layers ) |
Sigmoid root distribution applied to an arbitrary array of root fractions.
Sigmoid root distribution (Sigmoid root distribution) applied to an arbitrary array of root fractions.
| _adaption_rate | adaption rate \( a \) [0-1] |
| _deepest_rooted_layer | number of rooted soil layers \( n_r \) |
| _root_min | \( r_{min} \) [-] |
| _root_max | \( r_{max} \), depth of maximum root density [cm] |
| _root_width | \( r_{width} \) [cm2] |
| _root_height | \( r_{height} \) [-] |
| _fFrt_sl | root fractions to update |
| _nb_layers | size of _fFrt_sl; entries of non-rooted layers are set to 0 |
References sc_.
|
virtual |
Updates the fine root distribution of a plant with the sigmoid shape (Sigmoid root distribution).
| _adaption_rate | adaption rate \( a \) [0-1] |
| _deepest_rooted_layer | number of rooted soil layers \( n_r \) |
| _root_min | \( r_{min} \) [-] |
| _root_max | \( r_{max} \), depth of maximum root density [cm] |
| _root_width | \( r_{width} \) [cm2] |
| _root_height | \( r_{height} \) [-] |
| _vt | plant (its fFrt_sl is updated) |
Implements ldndc::BaseRootSystemDNDC.
References update_root_fraction_sigmoid().
Referenced by update_root_fraction_sigmoid(), and update_roots_dynamic().


|
virtual |
Increases the rooting depth by the restricted target increment (step 4 of the Dynamic root growth model) and updates the number of rooted layers.
| target_rooting_depthincrease | target increase under optimum conditions [m] |
| growthrestriction | combined restriction at the root front [0-1] |
| root_q_vt_ | number of rooted soil layers (output) |
| _p | plant |
Implements ldndc::BaseRootSystemDNDC.
References first_layer_below().
Referenced by update_roots_dynamic().


|
virtual |
Root length change for a root mass change of the whole root system, which is distributed over the layers according to the current fractions (see Root length and density).
Must be called before the root mass is changed.
| _sl_below_roots | number of rooted soil layers |
| _p | plant |
| _delta_dw_frt | root mass change of the whole root system [kgDW m-2] (< 0 for losses) |
Implements ldndc::BaseRootSystemDNDC.
References update_rootlength().
Referenced by reduce_root_system(), reduce_root_system(), and update_rootlength().


|
virtual |
Root length change for root mass changes of individual layers (see Root length and density).
Must be called before the root mass is changed. The mean specific root length of each layer is kept and bounded by SRL_MAX with respect to the root mass after the change; no lower bound is applied, since it would undo the SRL reduction of the Dynamic root growth model. Layers with root mass but without root length get \( L_i = SRL_{min} \, m_i \).
| _sl_below_roots | number of rooted soil layers |
| _p | plant |
| _delta_dw_frt_sl | root mass change of every rooted layer [kgDW m-2] (< 0 for losses) |
Implements ldndc::BaseRootSystemDNDC.
|
virtual |
Root growth of one time step with the dynamic approach (Dynamic root growth model).
| FTS_TOT_ | length of the time step [d] |
| _sl_min_no_roots | number of rooted soil layers (updated) |
| _p | plant; mFrt already includes the new growth |
| _dw_frt_growth | fine root growth of this time step [kgDW m-2] |
Implements ldndc::BaseRootSystemDNDC.
References m_soillayers, root_restrictions_aeration(), root_restrictions_coarse_fragments(), root_restrictions_soil_strength(), root_restrictions_temperature(), specific_root_length(), target_rooting_depth_increase(), update_root_fraction_exponential(), update_root_fraction_sigmoid(), and update_rooting_depth().

|
virtual |
Root growth of one time step with the static approach (Static root growth model).
| FTS_TOT_ | length of the time step [d] |
| root_q_vt_ | number of rooted soil layers (updated) |
| _vt | plant |
| root_system | root systems of all plants (indexed by plant slot) |
| rootgrowthrestriction | factor reducing root extension [0-1] |
Implements ldndc::BaseRootSystemDNDC.
References m_soillayers, sc_, and specific_root_length().
