The BioCro C++ Library
c3_canopy.h
Go to the documentation of this file.
1#ifndef C3_CANOPY_H
2#define C3_CANOPY_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6
7namespace standardBML
8{
9class c3_canopy : public direct_module
10{
11 public:
13 state_map const& input_quantities,
14 state_map* output_quantities)
15 : direct_module{},
16
17 // Get references to input quantities
18 absorbed_longwave{get_input(input_quantities, "absorbed_longwave")},
19 atmospheric_pressure{get_input(input_quantities, "atmospheric_pressure")},
20 atmospheric_scattering{get_input(input_quantities, "atmospheric_scattering")},
21 atmospheric_transmittance{get_input(input_quantities, "atmospheric_transmittance")},
22 b0{get_input(input_quantities, "b0")},
23 b1{get_input(input_quantities, "b1")},
24 beta_PSII{get_input(input_quantities, "beta_PSII")},
25 Catm{get_input(input_quantities, "Catm")},
26 chil{get_input(input_quantities, "chil")},
27 cosine_zenith_angle{get_input(input_quantities, "cosine_zenith_angle")},
28 electrons_per_carboxylation{get_input(input_quantities, "electrons_per_carboxylation")},
29 electrons_per_oxygenation{get_input(input_quantities, "electrons_per_oxygenation")},
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 Gstar_c{get_input(input_quantities, "Gstar_c")},
34 Gstar_Ea{get_input(input_quantities, "Gstar_Ea")},
35 heightf{get_input(input_quantities, "heightf")},
36 Jmax_at_25{get_input(input_quantities, "Jmax_at_25")},
37 Jmax_c{get_input(input_quantities, "Jmax_c")},
38 Jmax_Ea{get_input(input_quantities, "Jmax_Ea")},
39 k_diffuse{get_input(input_quantities, "k_diffuse")},
40 Kc_c{get_input(input_quantities, "Kc_c")},
41 Kc_Ea{get_input(input_quantities, "Kc_Ea")},
42 Ko_c{get_input(input_quantities, "Ko_c")},
43 Ko_Ea{get_input(input_quantities, "Ko_Ea")},
44 kpLN{get_input(input_quantities, "kpLN")},
45 lai{get_input(input_quantities, "lai")},
46 leaf_reflectance_nir{get_input(input_quantities, "leaf_reflectance_nir")},
47 leaf_reflectance_par{get_input(input_quantities, "leaf_reflectance_par")},
48 leaf_transmittance_nir{get_input(input_quantities, "leaf_transmittance_nir")},
49 leaf_transmittance_par{get_input(input_quantities, "leaf_transmittance_par")},
50 LeafN{get_input(input_quantities, "LeafN")},
51 leafwidth{get_input(input_quantities, "leafwidth")},
52 lnb0{get_input(input_quantities, "lnb0")},
53 lnb1{get_input(input_quantities, "lnb1")},
54 lnfun{get_input(input_quantities, "lnfun")},
55 nlayers{get_input(input_quantities, "nlayers")},
56 O2{get_input(input_quantities, "O2")},
57 par_energy_content{get_input(input_quantities, "par_energy_content")},
58 par_energy_fraction{get_input(input_quantities, "par_energy_fraction")},
59 phi_PSII_0{get_input(input_quantities, "phi_PSII_0")},
60 phi_PSII_1{get_input(input_quantities, "phi_PSII_1")},
61 phi_PSII_2{get_input(input_quantities, "phi_PSII_2")},
62 rh{get_input(input_quantities, "rh")},
63 RL_at_25{get_input(input_quantities, "RL_at_25")},
64 RL_c{get_input(input_quantities, "RL_c")},
65 RL_Ea{get_input(input_quantities, "RL_Ea")},
66 solar{get_input(input_quantities, "solar")},
67 StomataWS{get_input(input_quantities, "StomataWS")},
68 temp{get_input(input_quantities, "temp")},
69 theta_0{get_input(input_quantities, "theta_0")},
70 theta_1{get_input(input_quantities, "theta_1")},
71 theta_2{get_input(input_quantities, "theta_2")},
72 Tp_at_25{get_input(input_quantities, "Tp_at_25")},
73 Tp_c{get_input(input_quantities, "Tp_c")},
74 Tp_Ha{get_input(input_quantities, "Tp_Ha")},
75 Tp_Hd{get_input(input_quantities, "Tp_Hd")},
76 Tp_S{get_input(input_quantities, "Tp_S")},
77 Vcmax_at_25{get_input(input_quantities, "Vcmax_at_25")},
78 Vcmax_c{get_input(input_quantities, "Vcmax_c")},
79 Vcmax_Ea{get_input(input_quantities, "Vcmax_Ea")},
80 windspeed{get_input(input_quantities, "windspeed")},
81 windspeed_height{get_input(input_quantities, "windspeed_height")},
82
83 // Get pointers to output quantities
84 canopy_assimilation_molar_flux_op{get_op(output_quantities, "canopy_assimilation_molar_flux")},
85 canopy_conductance_op{get_op(output_quantities, "canopy_conductance")},
86 canopy_gross_assimilation_molar_flux_op{get_op(output_quantities, "canopy_gross_assimilation_molar_flux")},
87 canopy_non_photorespiratory_CO2_release_rate_op{get_op(output_quantities, "canopy_non_photorespiratory_CO2_release_molar_flux")},
88 canopy_photorespiration_molar_flux_op{get_op(output_quantities, "canopy_photorespiration_molar_flux")},
89 canopy_transpiration_rate_op{get_op(output_quantities, "canopy_transpiration_rate")},
90 whole_plant_growth_respiration_molar_flux_op{get_op(output_quantities, "whole_plant_growth_respiration_molar_flux")}
91 {
92 }
93 static string_vector get_inputs();
94 static string_vector get_outputs();
95 static std::string get_name() { return "c3_canopy"; }
96
97 private:
98 // References to input quantities
99 double const& absorbed_longwave;
100 double const& atmospheric_pressure;
101 double const& atmospheric_scattering;
102 double const& atmospheric_transmittance;
103 double const& b0;
104 double const& b1;
105 double const& beta_PSII;
106 double const& Catm;
107 double const& chil;
108 double const& cosine_zenith_angle;
109 double const& electrons_per_carboxylation;
110 double const& electrons_per_oxygenation;
111 double const& gbw_canopy;
112 double const& growth_respiration_fraction;
113 double const& Gs_min;
114 double const& Gstar_c;
115 double const& Gstar_Ea;
116 double const& heightf;
117 double const& Jmax_at_25;
118 double const& Jmax_c;
119 double const& Jmax_Ea;
120 double const& k_diffuse;
121 double const& Kc_c;
122 double const& Kc_Ea;
123 double const& Ko_c;
124 double const& Ko_Ea;
125 double const& kpLN;
126 double const& lai;
127 double const& leaf_reflectance_nir;
128 double const& leaf_reflectance_par;
129 double const& leaf_transmittance_nir;
130 double const& leaf_transmittance_par;
131 double const& LeafN;
132 double const& leafwidth;
133 double const& lnb0;
134 double const& lnb1;
135 double const& lnfun;
136 double const& nlayers;
137 double const& O2;
138 double const& par_energy_content;
139 double const& par_energy_fraction;
140 double const& phi_PSII_0;
141 double const& phi_PSII_1;
142 double const& phi_PSII_2;
143 double const& rh;
144 double const& RL_at_25;
145 double const& RL_c;
146 double const& RL_Ea;
147 double const& solar;
148 double const& StomataWS;
149 double const& temp;
150 double const& theta_0;
151 double const& theta_1;
152 double const& theta_2;
153 double const& Tp_at_25;
154 double const& Tp_c;
155 double const& Tp_Ha;
156 double const& Tp_Hd;
157 double const& Tp_S;
158 double const& Vcmax_at_25;
159 double const& Vcmax_c;
160 double const& Vcmax_Ea;
161 double const& windspeed;
162 double const& windspeed_height;
163
164 // Pointers to output quantities
165 double* canopy_assimilation_molar_flux_op;
166 double* canopy_conductance_op;
167 double* canopy_gross_assimilation_molar_flux_op;
168 double* canopy_non_photorespiratory_CO2_release_rate_op;
169 double* canopy_photorespiration_molar_flux_op;
170 double* canopy_transpiration_rate_op;
171 double* whole_plant_growth_respiration_molar_flux_op;
172
173 // Main operation
174 void do_operation() const;
175};
176
177} // namespace standardBML
178#endif
static string_vector get_outputs()
Definition: c3_canopy.cpp:78
static string_vector get_inputs()
Definition: c3_canopy.cpp:8
static std::string get_name()
Definition: c3_canopy.h:95
c3_canopy(state_map const &input_quantities, state_map *output_quantities)
Definition: c3_canopy.h:12
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...
Definition: aba_decay.h:8