The BioCro C++ Library
c4_assimilation.h
Go to the documentation of this file.
1#ifndef C4_ASSIMILATION_H
2#define C4_ASSIMILATION_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6#include "c4photo.h"
7
8namespace standardBML
9{
67class c4_assimilation : public direct_module
68{
69 public:
71 state_map const& input_quantities,
72 state_map* output_quantities)
73 : direct_module{},
74
75 // Get pointers to input quantities
76 alpha{get_input(input_quantities, "alpha")},
77 atmospheric_pressure{get_input(input_quantities, "atmospheric_pressure")},
78 b0{get_input(input_quantities, "b0")},
79 b1{get_input(input_quantities, "b1")},
80 beta{get_input(input_quantities, "beta")},
81 Catm{get_input(input_quantities, "Catm")},
82 gbw{get_input(input_quantities, "gbw")},
83 Gs_min{get_input(input_quantities, "Gs_min")},
84 kparm{get_input(input_quantities, "kparm")},
85 lowerT{get_input(input_quantities, "lowerT")},
86 Qp{get_input(input_quantities, "Qp")},
87 rh{get_input(input_quantities, "rh")},
88 RL_at_25{get_input(input_quantities, "RL_at_25")},
89 StomataWS{get_input(input_quantities, "StomataWS")},
90 Tambient{get_input(input_quantities, "temp")},
91 theta{get_input(input_quantities, "theta")},
92 Tleaf{get_input(input_quantities, "Tleaf")},
93 upperT{get_input(input_quantities, "upperT")},
94 Vcmax_at_25{get_input(input_quantities, "Vcmax_at_25")},
95
96 // Get pointers to output quantities
97 Assim_op{get_op(output_quantities, "Assim")},
98 Assim_check_op{get_op(output_quantities, "Assim_check")},
99 Assim_conductance_op{get_op(output_quantities, "Assim_conductance")},
100 Ci_op{get_op(output_quantities, "Ci")},
101 Cs_op{get_op(output_quantities, "Cs")},
102 GrossAssim_op{get_op(output_quantities, "GrossAssim")},
103 Gs_op{get_op(output_quantities, "Gs")},
104 RHs_op{get_op(output_quantities, "RHs")},
105 RL_op{get_op(output_quantities, "RL")},
106 Rp_op{get_op(output_quantities, "Rp")},
107 iterations_op{get_op(output_quantities, "iterations")}
108 {
109 }
110 static string_vector get_inputs();
111 static string_vector get_outputs();
112 static std::string get_name() { return "c4_assimilation"; }
113
114 private:
115 // References to input quantities
116 double const& alpha;
117 double const& atmospheric_pressure;
118 double const& b0;
119 double const& b1;
120 double const& beta;
121 double const& Catm;
122 double const& gbw;
123 double const& Gs_min;
124 double const& kparm;
125 double const& lowerT;
126 double const& Qp;
127 double const& rh;
128 double const& RL_at_25;
129 double const& StomataWS;
130 double const& Tambient;
131 double const& theta;
132 double const& Tleaf;
133 double const& upperT;
134 double const& Vcmax_at_25;
135
136 // Pointers to output quantities
137 double* Assim_op;
138 double* Assim_check_op;
139 double* Assim_conductance_op;
140 double* Ci_op;
141 double* Cs_op;
142 double* GrossAssim_op;
143 double* Gs_op;
144 double* RHs_op;
145 double* RL_op;
146 double* Rp_op;
147 double* iterations_op;
148
149 // Main operation
150 void do_operation() const;
151};
152
154{
155 return {
156 "alpha", // mol / mol
157 "atmospheric_pressure", // Pa
158 "b0", // mol / m^2 / s
159 "b1", // dimensionless
160 "beta", // dimensionless
161 "Catm", // micromol / mol
162 "gbw", // mol / m^2 / s
163 "Gs_min", // mol / m^2 / s
164 "kparm", // mol / mol
165 "lowerT", // degrees C
166 "Qp", // micromol / m^2 / s
167 "rh", // dimensionless
168 "RL_at_25", // micromol / m^2 / s
169 "StomataWS", // dimensionless
170 "temp", // degrees C
171 "theta", // dimensionless
172 "Tleaf", // degrees C
173 "upperT", // degrees C
174 "Vcmax_at_25" // micromol / m^2 / s
175 };
176}
177
179{
180 return {
181 "Assim", // micromol / m^2 / s
182 "Assim_check", // micromol / m^2 / s
183 "Assim_conductance", // micromol / m^2 / s
184 "Ci", // micromol / mol
185 "Cs", // micromol / m^2 / s
186 "GrossAssim", // micromol / m^2 / s
187 "Gs", // mol / m^2 / s
188 "RHs", // dimensionless from Pa / Pa
189 "RL", // micromol / m^2 / s
190 "Rp", // micromol / m^2 / s
191 "iterations" // not a physical quantity
192 };
193}
194
195void c4_assimilation::do_operation() const
196{
197 photosynthesis_outputs c4_results = c4photoC(
198 Qp,
199 Tleaf,
200 Tambient,
201 rh,
202 Vcmax_at_25,
203 alpha,
204 kparm,
205 theta,
206 beta,
207 RL_at_25,
208 b0,
209 b1,
210 Gs_min,
211 StomataWS,
212 Catm,
213 atmospheric_pressure,
214 upperT,
215 lowerT,
216 gbw);
217
218 // Update the output quantity list
219 update(Assim_op, c4_results.Assim);
220 update(Assim_check_op, c4_results.Assim_check);
221 update(Assim_conductance_op, c4_results.Assim_conductance);
222 update(Ci_op, c4_results.Ci);
223 update(Cs_op, c4_results.Cs);
224 update(GrossAssim_op, c4_results.GrossAssim);
225 update(Gs_op, c4_results.Gs);
226 update(RHs_op, c4_results.RHs);
227 update(RL_op, c4_results.RL);
228 update(Rp_op, c4_results.Rp);
229 update(iterations_op, c4_results.iterations);
230}
231
232} // namespace standardBML
233#endif
photosynthesis_outputs c4photoC(double const Qp, double const leaf_temperature, double const ambient_temperature, double const relative_humidity, double const Vcmax_at_25, double const alpha, double const kparm, double const theta, double const beta, double const RL_at_25, double const bb0, double const bb1, double const Gs_min, double const StomaWS, double const Ca, double const atmospheric_pressure, double const upperT, double const lowerT, double const gbw)
Definition: c4photo.cpp:22
Calculates net assimilation, stomatal conductance, and intercellular CO2 concentration for a C4 leaf ...
static string_vector get_outputs()
static string_vector get_inputs()
static std::string get_name()
c4_assimilation(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
A simple structure for holding the output of photosynthesis calculations.
double RL
Rate of non-photorespiratory CO2 release in the light (micromol / m^2 / s)
double Rp
Rate of photorespiration (micromol / m^2 / s)
double Assim_check
Equals zero if loop has converged (micromol / m^2 / s)
double Cs
CO2 concentration at the leaf surface (micromol / mol)
double Assim
Net CO2 assimilation rate (micromol / m^2 / s)
double Assim_conductance
Conductance-limited net CO2 assim. rate (micromol / m^2 / s)
size_t iterations
Number of iterations used by convergence loop.
double RHs
Relative humidity at the leaf surface (dimensionless)
double Ci
CO2 concentration in intercellular spaces (micromol / mol)
double GrossAssim
Gross CO2 assimilation rate (micromol / m^2 / s)
double Gs
Stomatal conductance to water vapor (mol / m^2 / s)