The BioCro C++ Library
thermal_time_beta.h
Go to the documentation of this file.
1#ifndef THERMAL_TIME_BETA_H
2#define THERMAL_TIME_BETA_H
3
4#include <cmath> // for pow
5#include "../framework/module.h"
6#include "../framework/state_map.h"
7
8namespace standardBML
9{
106class thermal_time_beta : public differential_module
107{
108 public:
110 state_map const& input_quantities,
111 state_map* output_quantities)
112 : differential_module{},
113
114 // Get references to input quantities
115 fractional_doy{get_input(input_quantities, "fractional_doy")},
116 sowing_fractional_doy{get_input(input_quantities, "sowing_fractional_doy")},
117 temp{get_input(input_quantities, "temp")},
118 tbase{get_input(input_quantities, "tbase")},
119 tmax{get_input(input_quantities, "tmax")},
120 talpha{get_input(input_quantities, "talpha")},
121 tbeta{get_input(input_quantities, "tbeta")},
122 ttc_scale{get_input(input_quantities, "ttc_scale")},
123
124 // Get pointers to output quantities
125 TTc_op{get_op(output_quantities, "TTc")}
126 {
127 }
128 static string_vector get_inputs();
129 static string_vector get_outputs();
130 static std::string get_name() { return "thermal_time_beta"; }
131
132 private:
133 // References to input quantities
134 double const& fractional_doy;
135 double const& sowing_fractional_doy;
136 double const& temp;
137 double const& tbase;
138 double const& tmax;
139 double const& talpha;
140 double const& tbeta;
141 double const& ttc_scale;
142
143 // Pointers to output quantities
144 double* TTc_op;
145
146 // Main operation
147 void do_operation() const;
148};
149
151{
152 return {
153 "fractional_doy", // days
154 "sowing_fractional_doy", // days
155 "temp", // degrees C
156 "tbase", // degrees C
157 "tmax", // degrees C
158 "talpha", // dimensionless
159 "tbeta", // dimensionless
160 "ttc_scale" // degrees C * day / hr
161 };
162}
163
165{
166 return {
167 "TTc" // degrees C * day / hr
168 };
169}
170
171void thermal_time_beta::do_operation() const
172{
173 // Find the rate of change
174 double const rate =
175 fractional_doy < sowing_fractional_doy ? 0.0
176 : temp <= tbase ? 0.0
177 : temp <= tmax ? ttc_scale * pow(temp - tbase, talpha) * pow(tmax - temp, tbeta)
178 : 0.0; // degrees C * day / hr
179
180 // Update the output quantity list
181 update(TTc_op, rate);
182}
183
184} // namespace standardBML
185#endif
Calculates the rate of thermal time accumulation using a beta distribution function.
static string_vector get_outputs()
static string_vector get_inputs()
thermal_time_beta(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