1#ifndef MULTILAYER_CANOPY_PROPERTIES_H
2#define MULTILAYER_CANOPY_PROPERTIES_H
4#include "../framework/state_map.h"
5#include "../framework/module.h"
58 state_map
const& input_quantities,
59 state_map* output_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")},
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")}
107 double const& par_incident_direct;
108 double const& par_incident_diffuse;
110 double const& cosine_zenith_angle;
111 double const& k_diffuse;
113 double const& heightf;
114 double const& windspeed;
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;
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;
165 state_map
const& input_quantities,
166 state_map* output_quantities)
178 static std::string
get_name() {
return "ten_layer_canopy_properties"; }
182 int static const nlayers;
185 void do_operation()
const;
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....
static string_vector define_pure_multilayer_outputs()
static string_vector define_multiclass_multilayer_outputs()
static string_vector get_outputs()
ten_layer_canopy_properties(state_map const &input_quantities, state_map *output_quantities)
static string_vector get_inputs()
static std::string get_name()
static string_vector define_leaf_classes()
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...