The BioCro C++ Library
leaf_gbw_nikolov.h
Go to the documentation of this file.
1#ifndef LEAF_GBW_NIKOLOV_H
2#define LEAF_GBW_NIKOLOV_H
3
4#include "../framework/module.h"
5#include "../framework/state_map.h"
6#include "conductance_helpers.h" // for g_to_mass
7#include "water_and_air_properties.h" // for saturation_vapor_pressure, molar_volume
8#include "boundary_layer_conductance.h" // for leaf_boundary_layer_conductance_nikolov
9
10namespace standardBML
11{
18class leaf_gbw_nikolov : public direct_module
19{
20 public:
22 state_map const& input_quantities,
23 state_map* output_quantities)
24 : direct_module{},
25
26 // Get references to input quantities
27 windspeed{get_input(input_quantities, "windspeed")},
28 leafwidth{get_input(input_quantities, "leafwidth")},
29 air_temperature{get_input(input_quantities, "temp")},
30 leaf_temperature{get_input(input_quantities, "leaf_temperature")},
31 Gs{get_input(input_quantities, "Gs")},
32 rh{get_input(input_quantities, "rh")},
33 air_pressure{get_input(input_quantities, "air_pressure")},
34
35 // Get pointers to output quantities
36 gbw_leaf_op{get_op(output_quantities, "gbw_leaf")}
37 {
38 }
39 static string_vector get_inputs();
40 static string_vector get_outputs();
41 static std::string get_name() { return "leaf_gbw_nikolov"; }
42
43 private:
44 // References to input quantities
45 double const& windspeed;
46 double const& leafwidth;
47 double const& air_temperature;
48 double const& leaf_temperature;
49 double const& Gs;
50 double const& rh;
51 double const& air_pressure;
52
53 // Pointers to output quantities
54 double* gbw_leaf_op;
55
56 // Main operation
57 void do_operation() const;
58};
59
61{
62 return {
63 "windspeed", // m / s
64 "leafwidth", // m
65 "temp", // degrees C
66 "leaf_temperature", // degrees C
67 "Gs", // mol / m^2 / s
68 "rh", // dimensionless
69 "air_pressure" // Pa
70 };
71}
72
74{
75 return {
76 "gbw_leaf" // m / s
77 };
78}
79
80void leaf_gbw_nikolov::do_operation() const
81{
82 // Determine the partial pressure of water vapor from the air temperature
83 // and relative humidity
84 const double SWVP = saturation_vapor_pressure(air_temperature); // Pa
85 const double water_vapor_pressure = rh * SWVP; // Pa
86
87 // Calculate the boundary layer conductance. Here we need to convert
88 // stomatal conductance from mol / m^2 / s to m / s.
89 const double gbw_leaf = leaf_boundary_layer_conductance_nikolov(
90 air_temperature,
91 leaf_temperature - air_temperature,
92 water_vapor_pressure,
93 g_to_mass(air_pressure, Gs, air_temperature),
94 leafwidth,
95 windspeed,
96 air_pressure); // m / s
97
98 // Update the output quantity list
99 update(gbw_leaf_op, gbw_leaf); // m / s
100}
101
102} // namespace standardBML
103#endif
double leaf_boundary_layer_conductance_nikolov(double air_temperature, double delta_t, double ea, double gsv, double lw, double windspeed, double p)
Calculates the conductance for water vapor flow from the leaf across its boundary layer using a model...
Calculates the boundary layer conductance using the leaf_boundary_layer_conductance_nikolov() functio...
leaf_gbw_nikolov(state_map const &input_quantities, state_map *output_quantities)
static string_vector get_outputs()
static string_vector get_inputs()
static std::string get_name()
double g_to_mass(double const pressure, double const conductance, double const temperature)
Convert a conductance value from a "molecular" basis (in units of mol / m^2 / s) to a "mass" basis (i...
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...
Definition: aba_decay.h:8
double saturation_vapor_pressure(double air_temperature)
Determine saturation water vapor pressure (Pa) from air temperature (degrees C) using the Arden Buck ...