The BioCro C++ Library
cumulative_carbon_dynamics.h
Go to the documentation of this file.
1#ifndef STANDARDBML_CUMULATIVE_CARBON_DYNAMICS_H
2#define STANDARDBML_CUMULATIVE_CARBON_DYNAMICS_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6
7namespace standardBML
8{
34class cumulative_carbon_dynamics : public differential_module
35{
36 public:
38 state_map const& input_quantities,
39 state_map* output_quantities)
40 : differential_module{},
41
42 // Get references to input quantities
43 canopy_assimilation_rate{get_input(input_quantities, "canopy_assimilation_rate")},
44 canopy_gross_assimilation_rate{get_input(input_quantities, "canopy_gross_assimilation_rate")},
45 canopy_photorespiration_rate{get_input(input_quantities, "canopy_photorespiration_rate")},
46 canopy_RL_rate{get_input(input_quantities, "canopy_non_photorespiratory_CO2_release_rate")},
47 Grain_gr_rate{get_input(input_quantities, "Grain_gr_rate")},
48 Grain_mr_rate{get_input(input_quantities, "Grain_mr_rate")},
49 Leaf_gr_rate{get_input(input_quantities, "Leaf_gr_rate")},
50 Leaf_mr_rate{get_input(input_quantities, "Leaf_mr_rate")},
51 Leaf_WS_loss_rate{get_input(input_quantities, "Leaf_WS_loss_rate")},
52 Rhizome_gr_rate{get_input(input_quantities, "Rhizome_gr_rate")},
53 Rhizome_mr_rate{get_input(input_quantities, "Rhizome_mr_rate")},
54 Root_gr_rate{get_input(input_quantities, "Root_gr_rate")},
55 Root_mr_rate{get_input(input_quantities, "Root_mr_rate")},
56 Shell_gr_rate{get_input(input_quantities, "Shell_gr_rate")},
57 Shell_mr_rate{get_input(input_quantities, "Shell_mr_rate")},
58 Stem_gr_rate{get_input(input_quantities, "Stem_gr_rate")},
59 Stem_mr_rate{get_input(input_quantities, "Stem_mr_rate")},
60 whole_plant_growth_respiration_rate{get_input(input_quantities, "whole_plant_growth_respiration_rate")},
61
62 // Get pointers to output quantities
63 canopy_assimilation_op{get_op(output_quantities, "canopy_assimilation")},
64 canopy_gross_assimilation_op{get_op(output_quantities, "canopy_gross_assimilation")},
65 canopy_photorespiration_op{get_op(output_quantities, "canopy_photorespiration")},
66 canopy_RL_op{get_op(output_quantities, "canopy_non_photorespiratory_CO2_release")},
67 Grain_gr_op{get_op(output_quantities, "Grain_gr")},
68 Grain_mr_op{get_op(output_quantities, "Grain_mr")},
69 Leaf_gr_op{get_op(output_quantities, "Leaf_gr")},
70 Leaf_mr_op{get_op(output_quantities, "Leaf_mr")},
71 Leaf_WS_loss_op{get_op(output_quantities, "Leaf_WS_loss")},
72 Rhizome_gr_op{get_op(output_quantities, "Rhizome_gr")},
73 Rhizome_mr_op{get_op(output_quantities, "Rhizome_mr")},
74 Root_gr_op{get_op(output_quantities, "Root_gr")},
75 Root_mr_op{get_op(output_quantities, "Root_mr")},
76 Shell_gr_op{get_op(output_quantities, "Shell_gr")},
77 Shell_mr_op{get_op(output_quantities, "Shell_mr")},
78 Stem_gr_op{get_op(output_quantities, "Stem_gr")},
79 Stem_mr_op{get_op(output_quantities, "Stem_mr")},
80 whole_plant_growth_respiration_op{get_op(output_quantities, "whole_plant_growth_respiration")}
81 {
82 }
83 static string_vector get_inputs();
84 static string_vector get_outputs();
85 static std::string get_name() { return "cumulative_carbon_dynamics"; }
86
87 private:
88 // References to input quantities
89 double const& canopy_assimilation_rate;
90 double const& canopy_gross_assimilation_rate;
91 double const& canopy_photorespiration_rate;
92 double const& canopy_RL_rate;
93 double const& Grain_gr_rate;
94 double const& Grain_mr_rate;
95 double const& Leaf_gr_rate;
96 double const& Leaf_mr_rate;
97 double const& Leaf_WS_loss_rate;
98 double const& Rhizome_gr_rate;
99 double const& Rhizome_mr_rate;
100 double const& Root_gr_rate;
101 double const& Root_mr_rate;
102 double const& Shell_gr_rate;
103 double const& Shell_mr_rate;
104 double const& Stem_gr_rate;
105 double const& Stem_mr_rate;
106 double const& whole_plant_growth_respiration_rate;
107
108 // Pointers to output quantities
109 double* canopy_assimilation_op;
110 double* canopy_gross_assimilation_op;
111 double* canopy_photorespiration_op;
112 double* canopy_RL_op;
113 double* Grain_gr_op;
114 double* Grain_mr_op;
115 double* Leaf_gr_op;
116 double* Leaf_mr_op;
117 double* Leaf_WS_loss_op;
118 double* Rhizome_gr_op;
119 double* Rhizome_mr_op;
120 double* Root_gr_op;
121 double* Root_mr_op;
122 double* Shell_gr_op;
123 double* Shell_mr_op;
124 double* Stem_gr_op;
125 double* Stem_mr_op;
126 double* whole_plant_growth_respiration_op;
127
128 // Main operation
129 void do_operation() const;
130};
131
133{
134 return {
135 "canopy_assimilation_rate", // Mg / ha / hr
136 "canopy_gross_assimilation_rate", // Mg / ha / hr
137 "canopy_non_photorespiratory_CO2_release_rate", // Mg / ha / hr
138 "canopy_photorespiration_rate", // Mg / ha / hr
139 "Grain_gr_rate", // Mg / ha / hr
140 "Grain_mr_rate", // Mg / ha / hr
141 "Leaf_gr_rate", // Mg / ha / hr
142 "Leaf_mr_rate", // Mg / ha / hr
143 "Leaf_WS_loss_rate", // Mg / ha / hr
144 "Rhizome_gr_rate", // Mg / ha / hr
145 "Rhizome_mr_rate", // Mg / ha / hr
146 "Root_gr_rate", // Mg / ha / hr
147 "Root_mr_rate", // Mg / ha / hr
148 "Shell_gr_rate", // Mg / ha / hr
149 "Shell_mr_rate", // Mg / ha / hr
150 "Stem_gr_rate", // Mg / ha / hr
151 "Stem_mr_rate", // Mg / ha / hr
152 "whole_plant_growth_respiration_rate" // Mg / ha / hr
153 };
154}
155
157{
158 return {
159 "canopy_assimilation", // Mg / ha / hr
160 "canopy_gross_assimilation", // Mg / ha / hr
161 "canopy_non_photorespiratory_CO2_release", // Mg / ha / hr
162 "canopy_photorespiration", // Mg / ha / hr
163 "Grain_gr", // Mg / ha / hr
164 "Grain_mr", // Mg / ha / hr
165 "Leaf_gr", // Mg / ha / hr
166 "Leaf_mr", // Mg / ha / hr
167 "Leaf_WS_loss", // Mg / ha / hr
168 "Rhizome_gr", // Mg / ha / hr
169 "Rhizome_mr", // Mg / ha / hr
170 "Root_gr", // Mg / ha / hr
171 "Root_mr", // Mg / ha / hr
172 "Shell_gr", // Mg / ha / hr
173 "Shell_mr", // Mg / ha / hr
174 "Stem_gr", // Mg / ha / hr
175 "Stem_mr", // Mg / ha / hr
176 "whole_plant_growth_respiration" // Mg / ha / hr
177 };
178}
179
180void cumulative_carbon_dynamics::do_operation() const
181{
182 update(canopy_assimilation_op, canopy_assimilation_rate);
183 update(canopy_gross_assimilation_op, canopy_gross_assimilation_rate);
184 update(canopy_photorespiration_op, canopy_photorespiration_rate);
185 update(canopy_RL_op, canopy_RL_rate);
186 update(Grain_gr_op, Grain_gr_rate);
187 update(Grain_mr_op, Grain_mr_rate);
188 update(Leaf_gr_op, Leaf_gr_rate);
189 update(Leaf_mr_op, Leaf_mr_rate);
190 update(Leaf_WS_loss_op, Leaf_WS_loss_rate);
191 update(Rhizome_gr_op, Rhizome_gr_rate);
192 update(Rhizome_mr_op, Rhizome_mr_rate);
193 update(Root_gr_op, Root_gr_rate);
194 update(Root_mr_op, Root_mr_rate);
195 update(Shell_gr_op, Shell_gr_rate);
196 update(Shell_mr_op, Shell_mr_rate);
197 update(Stem_gr_op, Stem_gr_rate);
198 update(Stem_mr_op, Stem_mr_rate);
199 update(whole_plant_growth_respiration_op, whole_plant_growth_respiration_rate);
200}
201
202} // namespace standardBML
203#endif
Enables calculations of cumulative carbon dynamics.
cumulative_carbon_dynamics(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