1#ifndef PARTITIONING_GROWTH_H
2#define PARTITIONING_GROWTH_H
4#include "../framework/module.h"
5#include "../framework/state_map.h"
66 state_map
const& input_quantities,
67 state_map* output_quantities)
68 : differential_module{},
71 kGrain{get_input(input_quantities,
"kGrain")},
72 kLeaf{get_input(input_quantities,
"kLeaf")},
73 kRhizome{get_input(input_quantities,
"kRhizome")},
74 kRoot{get_input(input_quantities,
"kRoot")},
75 kShell{get_input(input_quantities,
"kShell")},
76 kStem{get_input(input_quantities,
"kStem")},
77 Leaf{get_input(input_quantities,
"Leaf")},
78 net_assimilation_rate_grain{get_input(input_quantities,
"net_assimilation_rate_grain")},
79 net_assimilation_rate_leaf{get_input(input_quantities,
"net_assimilation_rate_leaf")},
80 net_assimilation_rate_rhizome{get_input(input_quantities,
"net_assimilation_rate_rhizome")},
81 net_assimilation_rate_root{get_input(input_quantities,
"net_assimilation_rate_root")},
82 net_assimilation_rate_shell{get_input(input_quantities,
"net_assimilation_rate_shell")},
83 net_assimilation_rate_stem{get_input(input_quantities,
"net_assimilation_rate_stem")},
84 retrans{get_input(input_quantities,
"retrans")},
85 retrans_rhizome{get_input(input_quantities,
"retrans_rhizome")},
86 Rhizome{get_input(input_quantities,
"Rhizome")},
87 Root{get_input(input_quantities,
"Root")},
88 Stem{get_input(input_quantities,
"Stem")},
91 Grain_op{get_op(output_quantities,
"Grain")},
92 Leaf_op{get_op(output_quantities,
"Leaf")},
93 Rhizome_op{get_op(output_quantities,
"Rhizome")},
94 Root_op{get_op(output_quantities,
"Root")},
95 Shell_op{get_op(output_quantities,
"Shell")},
96 Stem_op{get_op(output_quantities,
"Stem")}
101 static std::string
get_name() {
return "partitioning_growth"; }
105 const double& kGrain;
107 const double& kRhizome;
109 const double& kShell;
112 const double& net_assimilation_rate_grain;
113 const double& net_assimilation_rate_leaf;
114 const double& net_assimilation_rate_rhizome;
115 const double& net_assimilation_rate_root;
116 const double& net_assimilation_rate_shell;
117 const double& net_assimilation_rate_stem;
118 const double& retrans;
119 const double& retrans_rhizome;
120 const double& Rhizome;
133 void do_operation() const override final;
146 "net_assimilation_rate_grain",
147 "net_assimilation_rate_leaf",
148 "net_assimilation_rate_rhizome",
149 "net_assimilation_rate_root",
150 "net_assimilation_rate_shell",
151 "net_assimilation_rate_stem",
172void partitioning_growth::do_operation()
const
177 double dRhizome{0.0};
184 dLeaf += net_assimilation_rate_leaf;
186 dLeaf += Leaf * kLeaf;
187 dRhizome += kRhizome * (-dLeaf) * retrans;
188 dStem += kStem * (-dLeaf) * retrans;
189 dRoot += kRoot * (-dLeaf) * retrans;
190 dGrain += kGrain * (-dLeaf) * retrans;
191 dShell += kShell * (-dLeaf) * retrans;
196 dStem += net_assimilation_rate_stem;
198 dStem += Stem * kStem;
199 dRhizome += kRhizome * (-dStem) * retrans;
200 dLeaf += kLeaf * (-dStem) * retrans;
201 dRoot += kRoot * (-dStem) * retrans;
202 dGrain += kGrain * (-dStem) * retrans;
203 dShell += kShell * (-dStem) * retrans;
208 dRoot += net_assimilation_rate_root;
210 dRoot += Root * kRoot;
211 dRhizome += kRhizome * (-dRoot) * retrans;
212 dStem += kStem * (-dRoot) * retrans;
213 dLeaf += kLeaf * (-dRoot) * retrans;
214 dGrain += kGrain * (-dRoot) * retrans;
215 dShell += kShell * (-dRoot) * retrans;
219 if (kRhizome > 0.0) {
220 dRhizome += net_assimilation_rate_rhizome;
222 dRhizome += Rhizome * kRhizome;
223 if (dRhizome + Rhizome < 0) {
225 dRhizome = -0.9 * Rhizome;
227 dRoot += kRoot * (-dRhizome) * retrans_rhizome;
228 dStem += kStem * (-dRhizome) * retrans_rhizome;
229 dLeaf += kLeaf * (-dRhizome) * retrans_rhizome;
230 dGrain += kGrain * (-dRhizome) * retrans_rhizome;
231 dShell += kShell * (-dRhizome) * retrans_rhizome;
236 dGrain += net_assimilation_rate_grain;
240 dShell += net_assimilation_rate_shell;
244 update(Grain_op, dGrain);
245 update(Leaf_op, dLeaf);
246 update(Rhizome_op, dRhizome);
247 update(Root_op, dRoot);
248 update(Shell_op, dShell);
249 update(Stem_op, dStem);
This module determines the growth rate for several plant organs from the net rate of carbon assimilat...
partitioning_growth(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 ...