The BioCro C++ Library
collatz_photo.cpp
Go to the documentation of this file.
1#include <cmath>
2#include "collatz_photo.h"
3
5 double Qp, // micromol / m^2 / s. Incident photon flux density.
6 double leaf_temperature, // degrees C
7 double Vcmax_at_25, // micromol / m^2 / s
8 double alpha, // mol / mol. CO2 fixed per incident photon flux density.
9 double kparm, // mol / m%2 / s
10 double theta,
11 double beta,
12 double RL,
13 double upperT,
14 double lowerT,
15 double k_Q10, // dimensionless
16 double intercellular_co2_molar_fraction // micromol / mol
17)
18{
19 double kT = kparm * pow(k_Q10, (leaf_temperature - 25.0) / 10.0); // dimensionless
20
21 // Collatz 1992. Appendix B. Equation set 5B.
22 double Vtn = Vcmax_at_25 * pow(2, (leaf_temperature - 25.0) / 10.0); // micromol / m^2 / s
23 double Vtd = (1 + exp(0.3 * (lowerT - leaf_temperature))) * (1 + exp(0.3 * (leaf_temperature - upperT))); // dimensionless
24 double VT = Vtn / Vtd; // micromol / m^2 / s
25
26 // Collatz 1992. Appendix B. Equation set 5B.
27 double Rtn = RL * pow(2, (leaf_temperature - 25) / 10); // micromol / m^2 / s
28 double Rtd = 1 + exp(1.3 * (leaf_temperature - 55)); // dimensionless
29 double RT = Rtn / Rtd; // micromol / m^2 / s
30
31 // Collatz 1992. Appendix B. Equation 2B.
32 double b0 = VT * alpha * Qp;
33 double b1 = VT + alpha * Qp;
34 double b2 = theta;
35
36 /* Calculate the two roots */
37 double const c1 = sqrt(b1 * b1 - 4 * b0 * b2);
38 double const c2 = 2 * b2;
39 double M1 = (b1 + c1) / c2;
40 double M2 = (b1 - c1) / c2;
41
42 double M = M1 < M2 ? M1 : M2; // Use the smallest root.
43
44 // Collatz 1992. Appendix B. Equation 3B.
45 double kT_IC_P = kT * intercellular_co2_molar_fraction; // micromol / m^2 / s
46 double a = M * kT_IC_P;
47 double b = M + kT_IC_P;
48 double c = beta;
49
50 double gross_assim = (b - sqrt(b * b - 4 * a * c)) / 2 / c; // micromol / m^2 / s
51
52 double Assim = gross_assim - RT; // micromol / m^2 / s.
53
54 struct collatz_result result {
55 /* .assimilation = */ Assim, // micromol / m^2 / s. Leaf area basis.
56 /* .gross_assimilation = */ Assim + RT // micromol / m^2 / s. Leaf area basis.
57 };
58
59 return result;
60}
struct collatz_result collatz_photo(double Qp, double leaf_temperature, double Vcmax_at_25, double alpha, double kparm, double theta, double beta, double RL, double upperT, double lowerT, double k_Q10, double intercellular_co2_molar_fraction)