4#include "../framework/module.h"
5#include "../framework/state_map.h"
14 state_map
const& input_quantities,
15 state_map* output_quantities)
19 absorbed_longwave{get_input(input_quantities,
"absorbed_longwave")},
20 alpha1{get_input(input_quantities,
"alpha1")},
21 atmospheric_pressure{get_input(input_quantities,
"atmospheric_pressure")},
22 atmospheric_scattering{get_input(input_quantities,
"atmospheric_scattering")},
23 atmospheric_transmittance{get_input(input_quantities,
"atmospheric_transmittance")},
24 b0{get_input(input_quantities,
"b0")},
25 b1{get_input(input_quantities,
"b1")},
26 beta{get_input(input_quantities,
"beta")},
27 Catm{get_input(input_quantities,
"Catm")},
28 chil{get_input(input_quantities,
"chil")},
29 cosine_zenith_angle{get_input(input_quantities,
"cosine_zenith_angle")},
30 gbw_canopy{get_input(input_quantities,
"gbw_canopy")},
31 growth_respiration_fraction{get_input(input_quantities,
"growth_respiration_fraction")},
32 Gs_min{get_input(input_quantities,
"Gs_min")},
33 k_diffuse{get_input(input_quantities,
"k_diffuse")},
34 kparm{get_input(input_quantities,
"kparm")},
35 kpLN{get_input(input_quantities,
"kpLN")},
36 lai{get_input(input_quantities,
"lai")},
37 leaf_reflectance_nir{get_input(input_quantities,
"leaf_reflectance_nir")},
38 leaf_reflectance_par{get_input(input_quantities,
"leaf_reflectance_par")},
39 leaf_transmittance_nir{get_input(input_quantities,
"leaf_transmittance_nir")},
40 leaf_transmittance_par{get_input(input_quantities,
"leaf_transmittance_par")},
41 LeafN{get_input(input_quantities,
"LeafN")},
42 leafwidth{get_input(input_quantities,
"leafwidth")},
43 lnfun{get_input(input_quantities,
"lnfun")},
44 lowerT{get_input(input_quantities,
"lowerT")},
45 nalphab0{get_input(input_quantities,
"nalphab0")},
46 nalphab1{get_input(input_quantities,
"nalphab1")},
47 nileafn{get_input(input_quantities,
"nileafn")},
48 nkln{get_input(input_quantities,
"nkln")},
49 nkpLN{get_input(input_quantities,
"nkpLN")},
50 nlayers{get_input(input_quantities,
"nlayers")},
51 nlnb0{get_input(input_quantities,
"nlnb0")},
52 nlnb1{get_input(input_quantities,
"nlnb1")},
53 nRdb0{get_input(input_quantities,
"nRdb0")},
54 nRdb1{get_input(input_quantities,
"nRdb1")},
55 nvmaxb0{get_input(input_quantities,
"nvmaxb0")},
56 nvmaxb1{get_input(input_quantities,
"nvmaxb1")},
57 par_energy_content{get_input(input_quantities,
"par_energy_content")},
58 par_energy_fraction{get_input(input_quantities,
"par_energy_fraction")},
59 rh{get_input(input_quantities,
"rh")},
60 RL_at_25{get_input(input_quantities,
"RL_at_25")},
61 solar{get_input(input_quantities,
"solar")},
62 StomataWS{get_input(input_quantities,
"StomataWS")},
63 temp{get_input(input_quantities,
"temp")},
64 theta{get_input(input_quantities,
"theta")},
65 upperT{get_input(input_quantities,
"upperT")},
66 Vcmax_at_25{get_input(input_quantities,
"Vcmax_at_25")},
67 windspeed{get_input(input_quantities,
"windspeed")},
70 canopy_assimilation_molar_flux_op{get_op(output_quantities,
"canopy_assimilation_molar_flux")},
71 canopy_conductance_op{get_op(output_quantities,
"canopy_conductance")},
72 canopy_gross_assimilation_molar_flux_op{get_op(output_quantities,
"canopy_gross_assimilation_molar_flux")},
73 canopy_non_photorespiratory_CO2_release_rate_op{get_op(output_quantities,
"canopy_non_photorespiratory_CO2_release_molar_flux")},
74 canopy_photorespiration_molar_flux_op{get_op(output_quantities,
"canopy_photorespiration_molar_flux")},
75 canopy_transpiration_rate_op{get_op(output_quantities,
"canopy_transpiration_rate")},
76 whole_plant_growth_respiration_molar_flux_op{get_op(output_quantities,
"whole_plant_growth_respiration_molar_flux")}
81 static std::string
get_name() {
return "c4_canopy"; }
85 double const& absorbed_longwave;
87 double const& atmospheric_pressure;
88 double const& atmospheric_scattering;
89 double const& atmospheric_transmittance;
95 double const& cosine_zenith_angle;
96 double const& gbw_canopy;
97 double const& growth_respiration_fraction;
99 double const& k_diffuse;
103 double const& leaf_reflectance_nir;
104 double const& leaf_reflectance_par;
105 double const& leaf_transmittance_nir;
106 double const& leaf_transmittance_par;
108 double const& leafwidth;
110 double const& lowerT;
111 double const& nalphab0;
112 double const& nalphab1;
113 double const& nileafn;
116 double const& nlayers;
121 double const& nvmaxb0;
122 double const& nvmaxb1;
123 double const& par_energy_content;
124 double const& par_energy_fraction;
126 double const& RL_at_25;
128 double const& StomataWS;
131 double const& upperT;
132 double const& Vcmax_at_25;
133 double const& windspeed;
136 double* canopy_assimilation_molar_flux_op;
137 double* canopy_conductance_op;
138 double* canopy_gross_assimilation_molar_flux_op;
139 double* canopy_non_photorespiratory_CO2_release_rate_op;
140 double* canopy_photorespiration_molar_flux_op;
141 double* canopy_transpiration_rate_op;
142 double* whole_plant_growth_respiration_molar_flux_op;
145 void do_operation()
const;
153 "atmospheric_pressure",
154 "atmospheric_scattering",
155 "atmospheric_transmittance",
161 "cosine_zenith_angle",
163 "growth_respiration_fraction",
169 "leaf_reflectance_nir",
170 "leaf_reflectance_par",
171 "leaf_transmittance_nir",
172 "leaf_transmittance_par",
189 "par_energy_content",
190 "par_energy_fraction",
206 "canopy_assimilation_molar_flux",
207 "canopy_conductance",
208 "canopy_gross_assimilation_molar_flux",
209 "canopy_non_photorespiratory_CO2_release_molar_flux",
210 "canopy_photorespiration_molar_flux",
211 "canopy_transpiration_rate",
212 "whole_plant_growth_respiration_molar_flux"
216void c4_canopy::do_operation()
const
222 nitroP.Vmaxb1 = nvmaxb1;
223 nitroP.Vmaxb0 = nvmaxb0;
224 nitroP.alphab1 = nalphab1;
225 nitroP.alphab0 = nalphab0;
237 atmospheric_pressure,
238 atmospheric_scattering,
239 atmospheric_transmittance,
247 growth_respiration_fraction,
253 leaf_reflectance_nir,
254 leaf_reflectance_par,
255 leaf_transmittance_nir,
256 leaf_transmittance_par,
274 update(canopy_assimilation_molar_flux_op, can_result.
Assim);
276 update(canopy_gross_assimilation_molar_flux_op, can_result.
GrossAssim);
277 update(canopy_non_photorespiratory_CO2_release_rate_op, can_result.
RL);
278 update(canopy_photorespiration_molar_flux_op, can_result.
Rp);
279 update(canopy_transpiration_rate_op, can_result.
Trans);
280 update(whole_plant_growth_respiration_molar_flux_op, can_result.
whole_plant_gr);
canopy_photosynthesis_outputs CanAC(const nitroParms &nitroP, double absorbed_longwave, double Alpha, double ambient_temperature, double atmospheric_pressure, double atmospheric_scattering, double atmospheric_transmittance, double b0, double b1, double beta, double Catm, double chil, double cosine_zenith_angle, double gbw_canopy, double growth_respiration_fraction, double Gs_min, double k_diffuse, double Kparm, double kpLN, double LAI, double leaf_reflectance_nir, double leaf_reflectance_par, double leaf_transmittance_nir, double leaf_transmittance_par, double leafN, double leafwidth, double lowerT, double par_energy_content, double par_energy_fraction, double RH, double RL_at_25, double solarR, double StomataWS, double theta, double upperT, double Vcmax_at_25, double WindSpeed, int lnfun, int nlayers)
static string_vector get_outputs()
c4_canopy(state_map const &input_quantities, state_map *output_quantities)
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 canopy photosynthesis calculations.
double RL
Rate of non-photorespiratory CO2 release in the light (micromol / m^2 / s)
double canopy_conductance
Stomatal conductance to water vapor (mol / m^2 / s)
double Rp
Rate of photorespiration (micromol / m^2 / s)
double whole_plant_gr
Whole-plant growth respiration rate (micromol / m^2 / s)
double Assim
Net CO2 assimilation rate (micromol / m^2 / s)
double GrossAssim
Gross CO2 assimilation rate (micromol / m^2 / s)
double Trans
Transpiration rate (Mg / ha / hr)