The BioCro C++ Library
senescence_coefficient_logistic.h
Go to the documentation of this file.
1#ifndef SENESCENCE_COEFFICIENT_LOGISTIC_H
2#define SENESCENCE_COEFFICIENT_LOGISTIC_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6#include <cmath> // for exp
7
8namespace standardBML
9{
49double ksene(double rate, double alpha, double beta, double DVI);
50
51class senescence_coefficient_logistic : public direct_module
52{
53 public:
55 state_map const& input_quantities,
56 state_map* output_quantities)
57 : direct_module{},
58
59 // Get references to input quantities
60 DVI{get_input(input_quantities, "DVI")},
61 alphaSeneStem{get_input(input_quantities, "alphaSeneStem")},
62 alphaSeneLeaf{get_input(input_quantities, "alphaSeneLeaf")},
63 betaSeneStem{get_input(input_quantities, "betaSeneStem")},
64 betaSeneLeaf{get_input(input_quantities, "betaSeneLeaf")},
65 rateSeneLeaf{get_input(input_quantities, "rateSeneLeaf")},
66 rateSeneStem{get_input(input_quantities, "rateSeneStem")},
67 alphaSeneRoot{get_input(input_quantities, "alphaSeneRoot")},
68 alphaSeneRhizome{get_input(input_quantities, "alphaSeneRhizome")},
69 betaSeneRoot{get_input(input_quantities, "betaSeneRoot")},
70 betaSeneRhizome{get_input(input_quantities, "betaSeneRhizome")},
71 rateSeneRoot{get_input(input_quantities, "rateSeneRoot")},
72 rateSeneRhizome{get_input(input_quantities, "rateSeneRhizome")},
73
74 // Get pointers to output quantities
75 kSeneStem_op{get_op(output_quantities, "kSeneStem")},
76 kSeneLeaf_op{get_op(output_quantities, "kSeneLeaf")},
77 kSeneRoot_op{get_op(output_quantities, "kSeneRoot")},
78 kSeneRhizome_op{get_op(output_quantities, "kSeneRhizome")}
79 {
80 }
81 static string_vector get_inputs();
82 static string_vector get_outputs();
83 static std::string get_name() { return "senescence_coefficient_logistic"; }
84
85 private:
86 // Refernces to input quantities
87 const double& DVI;
88 const double& alphaSeneStem;
89 const double& alphaSeneLeaf;
90 const double& betaSeneStem;
91 const double& betaSeneLeaf;
92 const double& rateSeneLeaf;
93 const double& rateSeneStem;
94 const double& alphaSeneRoot;
95 const double& alphaSeneRhizome;
96 const double& betaSeneRoot;
97 const double& betaSeneRhizome;
98 const double& rateSeneRoot;
99 const double& rateSeneRhizome;
100
101 // Pointers to output quantities
102 double* kSeneStem_op;
103 double* kSeneLeaf_op;
104 double* kSeneRoot_op;
105 double* kSeneRhizome_op;
106
107 // Implement the pure virtual function do_operation():
108 void do_operation() const override final;
109};
110
112{
113 return {
114 "DVI", // dimensionless, development index
115 "alphaSeneStem", // dimensionless
116 "alphaSeneLeaf", // dimensionless
117 "betaSeneStem", // dimensionless
118 "betaSeneLeaf", // dimensionless
119 "rateSeneLeaf", // dimensionless, maximum percentage of leaf senesced at a given timestep
120 "rateSeneStem", // dimensionless, maximum percentage of stem senesced at a given timestep
121 "alphaSeneRoot", // dimensionless
122 "alphaSeneRhizome", // dimensionless
123 "betaSeneRoot", // dimensionless
124 "betaSeneRhizome", // dimensionless
125 "rateSeneRoot", // dimensionless, maximum percentage of root senesced at a given timestep
126 "rateSeneRhizome" // dimensionless, maximum percentage of rhizome senesced at a given timestep
127 };
128}
129
131{
132 return {
133 "kSeneStem", // dimensionless
134 "kSeneLeaf", // dimensionless
135 "kSeneRoot", // dimensionless
136 "kSeneRhizome" // dimensionless
137 };
138}
139
140void senescence_coefficient_logistic::do_operation() const
141{
142 double kSeneStem = ksene(rateSeneStem, alphaSeneStem, betaSeneStem, DVI);
143 double kSeneLeaf = ksene(rateSeneLeaf, alphaSeneLeaf, betaSeneLeaf, DVI);
144 double kSeneRoot = ksene(rateSeneRoot, alphaSeneRoot, betaSeneRoot, DVI);
145 double kSeneRhizome = ksene(rateSeneRhizome, alphaSeneRhizome, betaSeneRhizome, DVI);
146
147 // Update the output quantities
148 update(kSeneStem_op, kSeneStem); // dimensionless
149 update(kSeneLeaf_op, kSeneLeaf); // dimensionless
150 update(kSeneRoot_op, kSeneRoot); // dimensionless
151 update(kSeneRhizome_op, kSeneRhizome); // dimensionless
152}
153
154double ksene(double rate, double alpha, double beta, double DVI)
155{
156 double kSene = rate / (1.0 + exp(alpha + beta * DVI));
157 return kSene; // dimensionless
158}
159
160} // namespace standardBML
161#endif
Calculates coefficients representing fraction of biomass senesced for each organ; coefficents are rep...
senescence_coefficient_logistic(state_map const &input_quantities, state_map *output_quantities)
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...
Definition: aba_decay.h:8
double ksene(double rate, double alpha, double beta, double DVI)