NADPH production
NADP > NADPH
PGA consumption
PGA > RuBP
PGA production - v_c
RuBP + CO2 + {2.0}NADPH > {2.0}PGA
PGA production - v_o
RuBP + O2 + {2.0}NADPH > {1.5}PGA
phi = 0.21 * (gm * O2 / Ko) / ((gm * CO2 - v_c + Rd) / Kc)
v_c = (abs((abs(Vc + Vj) - abs(Vc - Vj)) / 2.0 + Vp) - abs((abs(Vc + Vj) - abs(Vc - Vj)) / 2.0 - Vp)) / 2.0
Vc = Vcmax * (CO2 - 1.0 / 2.0 * (CO2 + Kc * (1.0 + O2 / Ko) + (Vcmax - Rd) / gm - sqrt(pow(CO2 + Kc * (1.0 + O2 / Ko) + (Vcmax - Rd) / gm, 2.0) + 4.0 / gm * (Rd * (CO2 + Kc * (1.0 + O2 / Ko)) + Vcmax * (Gamma - CO2))))) / (CO2 - 1.0 / 2.0 * (CO2 + Kc * (1.0 + O2 / Ko) + (Vcmax - Rd) / gm - sqrt(pow(CO2 + Kc * (1.0 + O2 / Ko) + (Vcmax - Rd) / gm, 2.0) + 4.0 / gm * (Rd * (CO2 + Kc * (1.0 + O2 / Ko)) + Vcmax * (Gamma - CO2)))) + Kc * (1.0 + O2 / Ko))
Vp = 3.0 * TPU * ((CO2 - (3.0 * TPU - Rd) / gm) / (CO2 - (3.0 * TPU - Rd) / gm - Gamma))
NADP = Nt - NADPH
Vj = J / 4.0 * (CO2 - 1.0 / 2.0 * (CO2 + 2.0 * Gamma + (J - 4.0 * Rd) / (4.0 * gm) - sqrt(pow(CO2 + 2.0 * Gamma + (J - 4.0 * Rd) / (4.0 * gm), 2.0) + 4.0 / gm * (Rd * (CO2 + 2.0 * Gamma) + J / 4.0 * (Gamma - CO2))))) / (CO2 - 1.0 / 2.0 * (CO2 + 2.0 * Gamma + (J - 4.0 * Rd) / (4.0 * gm) - sqrt(pow(CO2 + 2.0 * Gamma + (J - 4.0 * Rd) / (4.0 * gm), 2.0) + 4.0 / gm * (Rd * (CO2 + 2.0 * Gamma) + J / 4.0 * (Gamma - CO2)))) + 2.0 * Gamma)
oxygenation(phi, Vc, Vj, Vp) = phi * ((Vc + Vj - abs(Vc - Vj)) / 2 + Vp - abs((Vc + Vj - abs(Vc - Vj)) / 2 - Vp)) / 2
PGA_consumption(S1, Rp, R, Nt, Vc) = S1 / Rp * (R / Nt) * Vc
NADPH_production(j, S1, Nt) = j / 2 * (S1 / Nt)
carboxylation(Vc, Vj, Vp) = ((Vc + Vj - abs(Vc - Vj)) / 2 + Vp - abs((Vc + Vj - abs(Vc - Vj)) / 2 - Vp)) / 2
Note that constraints are not enforced in simulations. It remains the responsibility of the user to verify that simulation results satisfy these constraints.