1#ifndef DAYLENGTH_CALCULATOR_H
2#define DAYLENGTH_CALCULATOR_H
6#include "../framework/module.h"
7#include "../framework/state_map.h"
8#include "../framework/constants.h"
56 state_map
const& input_quantities,
57 state_map* output_quantities)
61 lat{get_input(input_quantities,
"lat")},
62 solar_dec{get_input(input_quantities,
"solar_dec")},
63 p{get_input(input_quantities,
"sunrise_sunset_elevation")},
65 daylength{get_op(output_quantities,
"day_length")}
71 static std::string
get_name() {
return "daylength_calculator"; }
76 const double& solar_dec;
82 void do_operation()
const;
90 "sunrise_sunset_elevation"
101void daylength_calculator::do_operation()
const
103 using math_constants::pi;
104 constexpr double to_rad = pi / 180;
105 double offset = std::sin(p * to_rad);
106 double lam = lat * to_rad;
107 double phi = solar_dec * to_rad;
108 double num = offset + std::sin(lam) * std::sin(phi);
109 double denom = std::cos(lam) * std::cos(phi);
110 double u = std::max(std::min(num / denom, 1.0), -1.0);
111 double D = 24 - 24 / pi * std::acos(u);
112 update(daylength, D);
Computes day_length using a model described by Forsythe et al. (1995).
daylength_calculator(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 ...