1#ifndef THERMAL_TIME_TRILINEAR_H
2#define THERMAL_TIME_TRILINEAR_H
4#include "../framework/module.h"
5#include "../framework/state_map.h"
90 state_map
const& input_quantities,
91 state_map* output_quantities)
92 : differential_module{},
95 fractional_doy{get_input(input_quantities,
"fractional_doy")},
96 sowing_fractional_doy{get_input(input_quantities,
"sowing_fractional_doy")},
97 temp{get_input(input_quantities,
"temp")},
98 tbase{get_input(input_quantities,
"tbase")},
99 topt_lower{get_input(input_quantities,
"topt_lower")},
100 topt_upper{get_input(input_quantities,
"topt_upper")},
101 tmax{get_input(input_quantities,
"tmax")},
104 TTc_op{get_op(output_quantities,
"TTc")}
109 static std::string
get_name() {
return "thermal_time_trilinear"; }
113 double const& fractional_doy;
114 double const& sowing_fractional_doy;
117 double const& topt_lower;
118 double const& topt_upper;
125 void do_operation()
const;
132 "sowing_fractional_doy",
148void thermal_time_trilinear::do_operation()
const
151 double const rate_per_day =
152 fractional_doy < sowing_fractional_doy ? 0.0
153 : temp <= tbase ? 0.0
154 : temp <= topt_lower ? temp - tbase
155 : temp <= topt_upper ? topt_lower - tbase
156 : temp <= tmax ? (tmax - temp) * (topt_lower - tbase) / (tmax - topt_upper)
160 double const rate_per_hour = rate_per_day / 24.0;
163 update(TTc_op, rate_per_hour);
Calculates the rate of thermal time accumulation using a trilinear model.
static string_vector get_outputs()
static string_vector get_inputs()
static std::string get_name()
thermal_time_trilinear(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 ...