1#ifndef SONG_FLOWERING_H
2#define SONG_FLOWERING_H
4#include "../framework/module.h"
5#include "../framework/state_map.h"
24 song_flowering(state_map
const& input_quantities, state_map* output_quantities)
25 : differential_module{},
28 solar_ip{get_ip(input_quantities,
"solar")},
29 cLm_ip{get_ip(input_quantities,
"cLm")},
30 cLc_ip{get_ip(input_quantities,
"cLc")},
31 cLn_ip{get_ip(input_quantities,
"cLn")},
32 cTm_ip{get_ip(input_quantities,
"cTm")},
33 cTc_ip{get_ip(input_quantities,
"cTc")},
34 cTn_ip{get_ip(input_quantities,
"cTn")},
35 cXm_ip{get_ip(input_quantities,
"cXm")},
36 cXc_ip{get_ip(input_quantities,
"cXc")},
37 cXn_ip{get_ip(input_quantities,
"cXn")},
38 cYm_ip{get_ip(input_quantities,
"cYm")},
39 cYc_ip{get_ip(input_quantities,
"cYc")},
40 cYn_ip{get_ip(input_quantities,
"cYn")},
41 cPn_ip{get_ip(input_quantities,
"cPn")},
44 cLm_op{get_op(output_quantities,
"cLm")},
45 cLc_op{get_op(output_quantities,
"cLc")},
46 cLn_op{get_op(output_quantities,
"cLn")},
47 cTm_op{get_op(output_quantities,
"cTm")},
48 cTc_op{get_op(output_quantities,
"cTc")},
49 cTn_op{get_op(output_quantities,
"cTn")},
50 cXm_op{get_op(output_quantities,
"cXm")},
51 cXc_op{get_op(output_quantities,
"cXc")},
52 cXn_op{get_op(output_quantities,
"cXn")},
53 cYm_op{get_op(output_quantities,
"cYm")},
54 cYc_op{get_op(output_quantities,
"cYc")},
55 cYn_op{get_op(output_quantities,
"cYn")},
56 cPn_op{get_op(output_quantities,
"cPn")}
61 static std::string
get_name() {
return "song_flowering"; }
65 const double* solar_ip;
96 void do_operation()
const;
136void song_flowering::do_operation()
const
143 double solar = *solar_ip;
146 double cLm = *cLm_ip;
147 double cLc = *cLc_ip;
148 double cLn = *cLn_ip;
149 double cTm = *cTm_ip;
150 double cTc = *cTc_ip;
151 double cTn = *cTn_ip;
152 double cXm = *cXm_ip;
153 double cXc = *cXc_ip;
154 double cXn = *cXn_ip;
155 double cYm = *cYm_ip;
156 double cYc = *cYc_ip;
157 double cYn = *cYn_ip;
158 double cPn = *cPn_ip;
167 double g1 = 0.876738488;
168 double g2 = 0.036805783;
169 double g3 = 0.26593318;
170 double g4 = 0.538811228;
171 double g5 = 1.17803247;
172 double g6 = 0.064455137;
229 double L = 1.0 / (1.0 + exp(-0.058 * (solar - 100.0)));
236 auto hill = [](
double s,
double km,
double n) {
return pow(s, n) / (pow(km, n) + pow(s, n)); };
237 auto mm = [](
double s,
double km) {
return s / (km + s); };
240 update(cLm_op, L * q1 * cPn + n1 * hill(cXn, g1, a) - m1 * mm(cLm, k1));
241 update(cLc_op, p1 * cLm - r1 * cLc + r2 * cLn - m2 * mm(cLc, k2));
242 update(cLn_op, r1 * cLc - r2 * cLn - m3 * mm(cLn, k3));
243 update(cTm_op, n2 * hill(cYn, g2, b) * hill(g3, cLn, c) - m4 * mm(cTm, k4));
244 update(cTc_op, p2 * cTm - r3 * cTc + r4 * cTn - ((1.0 - L) * m5 + m6) * mm(cTc, k5));
245 update(cTn_op, r3 * cTc - r4 * cTn - ((1.0 - L) * m7 + m8) * mm(cTn, k6));
246 update(cXm_op, n3 * hill(cTn, g4, d) - m9 * mm(cXm, k7));
247 update(cXc_op, p3 * cXm - r5 * cXc + r6 * cXn - m10 * mm(cXc, k8));
248 update(cXn_op, r5 * cXc - r6 * cXn - m11 * mm(cXn, k9));
249 update(cYm_op, (L * q2 * cPn + (L * n4 + n5) * hill(g5, cTn, e)) * hill(g6, cLn, f) - m12 * mm(cYm, k10));
250 update(cYc_op, p4 * cYm - r7 * cYc + r8 * cYn - m13 * mm(cYc, k11));
251 update(cYn_op, r7 * cYc - r8 * cYn - m14 * mm(cYn, k12));
252 update(cPn_op, (1.0 - L) * p5 - m15 * mm(cPn, k13) - q3 * L * cPn);
song_flowering(state_map const &input_quantities, state_map *output_quantities)
static string_vector get_outputs()
static string_vector get_inputs()
static std::string get_name()
This is the standard BioCro module library; it includes the essential modules used in typical BioCro ...