The BioCro C++ Library
soil_evaporation.h
Go to the documentation of this file.
1#ifndef SOIL_EVAPORATION_H
2#define SOIL_EVAPORATION_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6#include "BioCro.h" // For SoilEvapo
7
8namespace standardBML
9{
10class soil_evaporation : public direct_module
11{
12 public:
14 state_map const& input_quantities,
15 state_map* output_quantities)
16 : direct_module{},
17
18 // Get references to input quantities
19 lai{get_input(input_quantities, "lai")},
20 temp{get_input(input_quantities, "temp")},
21 solar{get_input(input_quantities, "solar")},
22 soil_water_content{get_input(input_quantities, "soil_water_content")},
23 soil_field_capacity{get_input(input_quantities, "soil_field_capacity")},
24 soil_wilting_point{get_input(input_quantities, "soil_wilting_point")},
25 windspeed{get_input(input_quantities, "windspeed")},
26 rh{get_input(input_quantities, "rh")},
27 rsec{get_input(input_quantities, "rsec")},
28 soil_clod_size{get_input(input_quantities, "soil_clod_size")},
29 soil_reflectance{get_input(input_quantities, "soil_reflectance")},
30 soil_transmission{get_input(input_quantities, "soil_transmission")},
31 specific_heat_of_air{get_input(input_quantities, "specific_heat_of_air")},
32 par_energy_content{get_input(input_quantities, "par_energy_content")},
33
34 // Get pointers to output quantities
35 soil_evaporation_rate_op{get_op(output_quantities, "soil_evaporation_rate")}
36 {
37 }
38 static string_vector get_inputs();
39 static string_vector get_outputs();
40 static std::string get_name() { return "soil_evaporation"; }
41
42 private:
43 // Pointers to input quantities
44 double const& lai;
45 double const& temp;
46 double const& solar;
47 double const& soil_water_content;
48 double const& soil_field_capacity;
49 double const& soil_wilting_point;
50 double const& windspeed;
51 double const& rh;
52 double const& rsec;
53 double const& soil_clod_size;
54 double const& soil_reflectance;
55 double const& soil_transmission;
56 double const& specific_heat_of_air;
57 double const& par_energy_content;
58
59 // Pointers to output quantities
60 double* soil_evaporation_rate_op;
61
62 // Main operation
63 void do_operation() const;
64};
65
67{
68 return {
69 "lai", // dimensionless
70 "temp", // degrees C
71 "solar", // micromol / m^2 / s
72 "soil_water_content", // dimensionless
73 "soil_field_capacity", // dimensionless
74 "soil_wilting_point", // dimensionless
75 "windspeed", // m / s
76 "rh", // dimensionless
77 "rsec",
78 "soil_clod_size",
79 "soil_reflectance",
80 "soil_transmission",
81 "specific_heat_of_air", // J / kg / K
82 "par_energy_content" // J / micromol
83 };
84}
85
87{
88 return {
89 "soil_evaporation_rate" // Mg / ha / hr
90 };
91}
92
93void soil_evaporation::do_operation() const
94{
95 // Collect inputs and make calculations
96 // SoilEvapo(...) is located in AuxBioCro.cpp
97 double soilEvap = SoilEvapo(
98 lai, 0.68, temp, solar, soil_water_content, soil_field_capacity,
99 soil_wilting_point, windspeed, rh, rsec, soil_clod_size,
100 soil_reflectance, soil_transmission, specific_heat_of_air,
101 par_energy_content); // kg / m^2 / s
102
103 // Convert units for consistency with canopy_transpiration_rate and
104 // two_layer_soil_profile's output
105 soilEvap *= 3600 * 1e-3 * 10000; // Mg / ha / hr
106
107 // Update the output quantity list
108 update(soil_evaporation_rate_op, soilEvap);
109}
110
111} // namespace standardBML
112#endif
double SoilEvapo(double LAI, double k, double air_temperature, double ppfd, double soil_water_content, double fieldc, double wiltp, double winds, double RelH, double rsec, double soil_clod_size, double soil_reflectance, double soil_transmission, double specific_heat_of_air, double par_energy_content)
Definition: AuxBioCro.cpp:202
static string_vector get_outputs()
static string_vector get_inputs()
soil_evaporation(state_map const &input_quantities, state_map *output_quantities)
static std::string get_name()
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...
Definition: aba_decay.h:8