The BioCro C++ Library
multilayer_canopy_properties.h
Go to the documentation of this file.
1#ifndef MULTILAYER_CANOPY_PROPERTIES_H
2#define MULTILAYER_CANOPY_PROPERTIES_H
3
4#include "../framework/state_map.h"
5#include "../framework/module.h"
6
7namespace standardBML
8{
53class multilayer_canopy_properties : public direct_module
54{
55 public:
57 int const& nlayers,
58 state_map const& input_quantities,
59 state_map* output_quantities)
60 : direct_module{},
61
62 // Store the number of layers
63 nlayers(nlayers),
64
65 // Get references to input quantities
66 par_incident_direct{get_input(input_quantities, "par_incident_direct")},
67 par_incident_diffuse{get_input(input_quantities, "par_incident_diffuse")},
68 lai{get_input(input_quantities, "lai")},
69 cosine_zenith_angle{get_input(input_quantities, "cosine_zenith_angle")},
70 k_diffuse{get_input(input_quantities, "k_diffuse")},
71 chil{get_input(input_quantities, "chil")},
72 heightf{get_input(input_quantities, "heightf")},
73 windspeed{get_input(input_quantities, "windspeed")},
74 LeafN{get_input(input_quantities, "LeafN")},
75 kpLN{get_input(input_quantities, "kpLN")},
76 lnfun{get_input(input_quantities, "lnfun")},
77 par_energy_content{get_input(input_quantities, "par_energy_content")},
78 par_energy_fraction{get_input(input_quantities, "par_energy_fraction")},
79 leaf_transmittance_nir{get_input(input_quantities, "leaf_transmittance_nir")},
80 leaf_transmittance_par{get_input(input_quantities, "leaf_transmittance_par")},
81 leaf_reflectance_nir{get_input(input_quantities, "leaf_reflectance_nir")},
82 leaf_reflectance_par{get_input(input_quantities, "leaf_reflectance_par")},
83
84 // Get pointers to output quantities
85 sunlit_fraction_ops{get_multilayer_op(output_quantities, nlayers, "sunlit_fraction")},
86 sunlit_incident_nir_ops{get_multilayer_op(output_quantities, nlayers, "sunlit_incident_nir")},
87 sunlit_incident_ppfd_ops{get_multilayer_op(output_quantities, nlayers, "sunlit_incident_ppfd")},
88 sunlit_absorbed_ppfd_ops{get_multilayer_op(output_quantities, nlayers, "sunlit_absorbed_ppfd")},
89 sunlit_absorbed_shortwave_ops{get_multilayer_op(output_quantities, nlayers, "sunlit_absorbed_shortwave")},
90 shaded_fraction_ops{get_multilayer_op(output_quantities, nlayers, "shaded_fraction")},
91 shaded_incident_nir_ops{get_multilayer_op(output_quantities, nlayers, "shaded_incident_nir")},
92 shaded_incident_ppfd_ops{get_multilayer_op(output_quantities, nlayers, "shaded_incident_ppfd")},
93 shaded_absorbed_ppfd_ops{get_multilayer_op(output_quantities, nlayers, "shaded_absorbed_ppfd")},
94 shaded_absorbed_shortwave_ops{get_multilayer_op(output_quantities, nlayers, "shaded_absorbed_shortwave")},
95 height_ops{get_multilayer_op(output_quantities, nlayers, "height")},
96 windspeed_ops{get_multilayer_op(output_quantities, nlayers, "windspeed")},
97 LeafN_ops{get_multilayer_op(output_quantities, nlayers, "LeafN")},
98 canopy_direct_transmission_fraction_op{get_op(output_quantities, "canopy_direct_transmission_fraction")}
99 {
100 }
101
102 private:
103 // Number of layers
104 int const nlayers;
105
106 // References to input parameters
107 double const& par_incident_direct;
108 double const& par_incident_diffuse;
109 double const& lai;
110 double const& cosine_zenith_angle;
111 double const& k_diffuse;
112 double const& chil;
113 double const& heightf;
114 double const& windspeed;
115 double const& LeafN;
116 double const& kpLN;
117 double const& lnfun;
118 double const& par_energy_content;
119 double const& par_energy_fraction;
120 double const& leaf_transmittance_nir;
121 double const& leaf_transmittance_par;
122 double const& leaf_reflectance_nir;
123 double const& leaf_reflectance_par;
124
125 // Pointers to output parameters
126 std::vector<double*> const sunlit_fraction_ops;
127 std::vector<double*> const sunlit_incident_nir_ops;
128 std::vector<double*> const sunlit_incident_ppfd_ops;
129 std::vector<double*> const sunlit_absorbed_ppfd_ops;
130 std::vector<double*> const sunlit_absorbed_shortwave_ops;
131 std::vector<double*> const shaded_fraction_ops;
132 std::vector<double*> const shaded_incident_nir_ops;
133 std::vector<double*> const shaded_incident_ppfd_ops;
134 std::vector<double*> const shaded_absorbed_ppfd_ops;
135 std::vector<double*> const shaded_absorbed_shortwave_ops;
136 std::vector<double*> const height_ops;
137 std::vector<double*> const windspeed_ops;
138 std::vector<double*> const LeafN_ops;
139 double* canopy_direct_transmission_fraction_op;
140
141 protected:
142 void run() const;
143 static string_vector get_inputs(int nlayers);
144 static string_vector define_leaf_classes(); // required by derived modules for compatibility with the multilayer_canopy_photosynthesis module
145 static string_vector define_multiclass_multilayer_outputs(); // required by derived modules for compatibility with the multilayer_canopy_photosynthesis module
146 static string_vector define_pure_multilayer_outputs(); // required by derived modules for compatibility with the multilayer_canopy_photosynthesis module
147 static string_vector get_outputs(int nlayers);
148};
149
151// TEN LAYER CANOPY PROPERTIES MODULE //
153
162{
163 public:
165 state_map const& input_quantities,
166 state_map* output_quantities)
169 input_quantities,
170 output_quantities)
171 {
172 }
173 static string_vector get_inputs();
174 static string_vector define_leaf_classes();
175 static string_vector define_multiclass_multilayer_outputs();
176 static string_vector define_pure_multilayer_outputs();
177 static string_vector get_outputs();
178 static std::string get_name() { return "ten_layer_canopy_properties"; }
179
180 private:
181 // Number of layers
182 int static const nlayers;
183
184 // Main operation
185 void do_operation() const;
186};
187
188} // namespace standardBML
189#endif
Calculates environmental properties for sunlit and shaded leaves in each layer of a multilayer canopy...
static string_vector define_pure_multilayer_outputs()
Define all outputs that have different values for each layer, not including outputs that also depend ...
static string_vector define_multiclass_multilayer_outputs()
Define all outputs that have different values for each leaf class and layer.
static string_vector get_inputs(int nlayers)
Define all inputs required by the module.
static string_vector get_outputs(int nlayers)
Define all output names by appending leaf class prefixes and layer number suffixes....
static string_vector define_leaf_classes()
Define the different leaf classes included by the module.
multilayer_canopy_properties(int const &nlayers, state_map const &input_quantities, state_map *output_quantities)
A child class of multilayer_canopy_properties where the number of layers has been defined....
ten_layer_canopy_properties(state_map const &input_quantities, state_map *output_quantities)
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...
Definition: aba_decay.h:8