6 double leaf_temperature,
16 double intercellular_co2_molar_fraction
19 double kT = kparm * pow(k_Q10, (leaf_temperature - 25.0) / 10.0);
22 double Vtn = Vcmax_at_25 * pow(2, (leaf_temperature - 25.0) / 10.0);
23 double Vtd = (1 + exp(0.3 * (lowerT - leaf_temperature))) * (1 + exp(0.3 * (leaf_temperature - upperT)));
24 double VT = Vtn / Vtd;
27 double Rtn = RL * pow(2, (leaf_temperature - 25) / 10);
28 double Rtd = 1 + exp(1.3 * (leaf_temperature - 55));
29 double RT = Rtn / Rtd;
32 double b0 = VT * alpha * Qp;
33 double b1 = VT + alpha * Qp;
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;
42 double M = M1 < M2 ? M1 : M2;
45 double kT_IC_P = kT * intercellular_co2_molar_fraction;
46 double a = M * kT_IC_P;
47 double b = M + kT_IC_P;
50 double gross_assim = (b - sqrt(b * b - 4 * a * c)) / 2 / c;
52 double Assim = gross_assim - RT;
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)