1#ifndef SENESCENCE_LOGISTIC_H
2#define SENESCENCE_LOGISTIC_H
4#include "../framework/module.h"
5#include "../framework/state_map.h"
26 state_map
const& input_quantities,
27 state_map* output_quantities)
28 : differential_module{},
31 Leaf{get_input(input_quantities,
"Leaf")},
32 Stem{get_input(input_quantities,
"Stem")},
33 Root{get_input(input_quantities,
"Root")},
34 Rhizome{get_input(input_quantities,
"Rhizome")},
35 kSeneLeaf{get_input(input_quantities,
"kSeneLeaf")},
36 kSeneStem{get_input(input_quantities,
"kSeneStem")},
37 kSeneRoot{get_input(input_quantities,
"kSeneRoot")},
38 kSeneRhizome{get_input(input_quantities,
"kSeneRhizome")},
39 kLeaf{get_input(input_quantities,
"kLeaf")},
40 kStem{get_input(input_quantities,
"kStem")},
41 kRoot{get_input(input_quantities,
"kRoot")},
42 kRhizome{get_input(input_quantities,
"kRhizome")},
43 kGrain{get_input(input_quantities,
"kGrain")},
44 kShell{get_input(input_quantities,
"kShell")},
45 remobilization_fraction{get_input(input_quantities,
"remobilization_fraction")},
48 Leaf_op{get_op(output_quantities,
"Leaf")},
49 LeafLitter_op{get_op(output_quantities,
"LeafLitter")},
50 Stem_op{get_op(output_quantities,
"Stem")},
51 StemLitter_op{get_op(output_quantities,
"StemLitter")},
52 Root_op{get_op(output_quantities,
"Root")},
53 RootLitter_op{get_op(output_quantities,
"RootLitter")},
54 Rhizome_op{get_op(output_quantities,
"Rhizome")},
55 RhizomeLitter_op{get_op(output_quantities,
"RhizomeLitter")},
56 Grain_op{get_op(output_quantities,
"Grain")},
57 Shell_op{get_op(output_quantities,
"Shell")}
62 static std::string
get_name() {
return "senescence_logistic"; }
69 const double& Rhizome;
70 const double& kSeneLeaf;
71 const double& kSeneStem;
72 const double& kSeneRoot;
73 const double& kSeneRhizome;
77 const double& kRhizome;
80 const double& remobilization_fraction;
84 double* LeafLitter_op;
86 double* StemLitter_op;
88 double* RootLitter_op;
90 double* RhizomeLitter_op;
95 void do_operation() const override final;
115 "remobilization_fraction"
136void senescence_logistic::do_operation()
const
138 double senescence_leaf = kSeneLeaf * Leaf;
139 double senescence_stem = kSeneStem * Stem;
140 double senescence_root = kSeneRoot * Root;
141 double senescence_rhizome = kSeneRhizome * Rhizome;
146 double dLeaf = -senescence_leaf + kLeaf * senescence_leaf * remobilization_fraction;
149 double dLeafLitter = senescence_leaf * (1 - remobilization_fraction);
153 double dStem = -senescence_stem + kStem * senescence_leaf * remobilization_fraction;
155 double dStemLitter = senescence_stem;
159 double dRoot = -senescence_root + kRoot * senescence_leaf * remobilization_fraction;
161 double dRootLitter = senescence_root;
165 double dRhizome = -senescence_rhizome + kRhizome * senescence_leaf * remobilization_fraction;
166 double dRhizomeLitter = senescence_rhizome;
170 double dGrain = kGrain * senescence_leaf * remobilization_fraction;
174 double dShell = kShell * senescence_leaf * remobilization_fraction;
176 update(Leaf_op, dLeaf);
177 update(Stem_op, dStem);
178 update(Root_op, dRoot);
179 update(Rhizome_op, dRhizome);
180 update(Grain_op, dGrain);
181 update(Shell_op, dShell);
182 update(LeafLitter_op, dLeafLitter);
183 update(StemLitter_op, dStemLitter);
184 update(RootLitter_op, dRootLitter);
185 update(RhizomeLitter_op, dRhizomeLitter);
Calculates the change in plant organ biomasses due to senescence.
senescence_logistic(state_map const &input_quantities, state_map *output_quantities)
static string_vector get_outputs()
static string_vector get_inputs()
static std::string get_name()
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...