1#ifndef C3_ASSIMILATION_H
2#define C3_ASSIMILATION_H
4#include "../framework/module.h"
5#include "../framework/state_map.h"
72 state_map
const& input_quantities,
73 state_map* output_quantities)
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_PSII{get_input(input_quantities,
"beta_PSII")},
81 Catm{get_input(input_quantities,
"Catm")},
82 electrons_per_carboxylation{get_input(input_quantities,
"electrons_per_carboxylation")},
83 electrons_per_oxygenation{get_input(input_quantities,
"electrons_per_oxygenation")},
84 gbw{get_input(input_quantities,
"gbw")},
85 Gs_min{get_input(input_quantities,
"Gs_min")},
86 Gstar_c{get_input(input_quantities,
"Gstar_c")},
87 Gstar_Ea{get_input(input_quantities,
"Gstar_Ea")},
88 Jmax_at_25{get_input(input_quantities,
"Jmax_at_25")},
89 Jmax_c{get_input(input_quantities,
"Jmax_c")},
90 Jmax_Ea{get_input(input_quantities,
"Jmax_Ea")},
91 Kc_c{get_input(input_quantities,
"Kc_c")},
92 Kc_Ea{get_input(input_quantities,
"Kc_Ea")},
93 Ko_c{get_input(input_quantities,
"Ko_c")},
94 Ko_Ea{get_input(input_quantities,
"Ko_Ea")},
95 O2{get_input(input_quantities,
"O2")},
96 phi_PSII_0{get_input(input_quantities,
"phi_PSII_0")},
97 phi_PSII_1{get_input(input_quantities,
"phi_PSII_1")},
98 phi_PSII_2{get_input(input_quantities,
"phi_PSII_2")},
99 Qabs{get_input(input_quantities,
"Qabs")},
100 rh{get_input(input_quantities,
"rh")},
101 RL_at_25{get_input(input_quantities,
"RL_at_25")},
102 RL_c{get_input(input_quantities,
"RL_c")},
103 RL_Ea{get_input(input_quantities,
"RL_Ea")},
104 StomataWS{get_input(input_quantities,
"StomataWS")},
105 Tambient{get_input(input_quantities,
"temp")},
106 theta_0{get_input(input_quantities,
"theta_0")},
107 theta_1{get_input(input_quantities,
"theta_1")},
108 theta_2{get_input(input_quantities,
"theta_2")},
109 Tleaf{get_input(input_quantities,
"Tleaf")},
110 Tp_at_25{get_input(input_quantities,
"Tp_at_25")},
111 Tp_c{get_input(input_quantities,
"Tp_c")},
112 Tp_Ha{get_input(input_quantities,
"Tp_Ha")},
113 Tp_Hd{get_input(input_quantities,
"Tp_Hd")},
114 Tp_S{get_input(input_quantities,
"Tp_S")},
115 Vcmax_at_25{get_input(input_quantities,
"Vcmax_at_25")},
116 Vcmax_c{get_input(input_quantities,
"Vcmax_c")},
117 Vcmax_Ea{get_input(input_quantities,
"Vcmax_Ea")},
120 Assim_op{get_op(output_quantities,
"Assim")},
121 Assim_check_op{get_op(output_quantities,
"Assim_check")},
122 Assim_conductance_op{get_op(output_quantities,
"Assim_conductance")},
123 Ci_op{get_op(output_quantities,
"Ci")},
124 Cs_op{get_op(output_quantities,
"Cs")},
125 GrossAssim_op{get_op(output_quantities,
"GrossAssim")},
126 Gs_op{get_op(output_quantities,
"Gs")},
127 RHs_op{get_op(output_quantities,
"RHs")},
128 RL_op{get_op(output_quantities,
"RL")},
129 Rp_op{get_op(output_quantities,
"Rp")},
130 iterations_op{get_op(output_quantities,
"iterations")}
135 static std::string
get_name() {
return "c3_assimilation"; }
139 double const& atmospheric_pressure;
142 double const& beta_PSII;
144 double const& electrons_per_carboxylation;
145 double const& electrons_per_oxygenation;
147 double const& Gs_min;
148 double const& Gstar_c;
149 double const& Gstar_Ea;
150 double const& Jmax_at_25;
151 double const& Jmax_c;
152 double const& Jmax_Ea;
158 double const& phi_PSII_0;
159 double const& phi_PSII_1;
160 double const& phi_PSII_2;
163 double const& RL_at_25;
166 double const& StomataWS;
167 double const& Tambient;
168 double const& theta_0;
169 double const& theta_1;
170 double const& theta_2;
172 double const& Tp_at_25;
177 double const& Vcmax_at_25;
178 double const& Vcmax_c;
179 double const& Vcmax_Ea;
183 double* Assim_check_op;
184 double* Assim_conductance_op;
187 double* GrossAssim_op;
192 double* iterations_op;
195 void do_operation()
const;
201 "atmospheric_pressure",
206 "electrons_per_carboxylation",
207 "electrons_per_oxygenation",
262void c3_assimilation::do_operation()
const
303 atmospheric_pressure,
306 electrons_per_carboxylation,
307 electrons_per_oxygenation,
314 update(Assim_op, c3_results.
Assim);
315 update(Ci_op, c3_results.
Ci);
316 update(Cs_op, c3_results.
Cs);
318 update(Gs_op, c3_results.
Gs);
319 update(RHs_op, c3_results.
RHs);
320 update(RL_op, c3_results.
RL);
321 update(Rp_op, c3_results.
Rp);
photosynthesis_outputs c3photoC(c3_temperature_response_parameters const tr_param, double const absorbed_ppfd, double const Tleaf, double const Tambient, double const RH, double const Vcmax_at_25, double const Jmax_at_25, double const TPU_rate_max, double const RL_at_25, double const b0, double const b1, double const Gs_min, double const Ca, double const AP, double const O2, double const StomWS, double const electrons_per_carboxylation, double const electrons_per_oxygenation, double const beta_PSII, double const gbw)
Calculates net assimilation, stomatal conductance, and intercellular CO2 concentration for a C3 leaf ...
c3_assimilation(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 ...
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)