25 std::vector<double> buffer;
28 [[nodiscard]]
auto max()
const {
return *std::ranges::max_element(buffer); }
29 [[nodiscard]]
auto min()
const {
return *std::ranges::min_element(buffer); }
30 [[nodiscard]]
auto mean()
const {
return std::accumulate(buffer.cbegin(), buffer.cend(), 0.) /
static_cast<double>(buffer.size()); }
33 enum class Type : std::uint8_t {
40 : buffer(std::max(std::size_t{1}, size), 0.)
45 head = (head + 1) % buffer.size();
50 std::ranges::fill(buffer, 0.);
68 const double initial, linear, saturation, rate;
77 [[nodiscard]] std::pair<double, double>
operator()(
const double q,
const bool check_positive)
const {
78 const auto exp_term = saturation * std::exp(-rate * q);
79 const auto y = initial + saturation + linear * q - exp_term;
80 return y < 0. && check_positive ? std::make_pair(0., 0.) : std::make_pair(y, linear + rate * exp_term);
85 const double bound, rate;
92 [[nodiscard]]
double a()
const {
return (rate > 0. ?
b() : 1.) * bound; }
93 [[nodiscard]]
double b()
const {
return rate; }
97 static constexpr double z_bound = 1
E-15;
98 inline static const double rate_bound = -std::log(z_bound);
102 if(z < z_bound)
return {rate_bound, 0.};
104 return {-log(z), -1. / z};
Definition BalloonUtil.h:96
static pod2 yield_ratio(const double z)
Definition BalloonUtil.h:101
Definition BalloonUtil.h:67
BalloonBound(const double I, const double K, const double S, const double M)
Definition BalloonUtil.h:71
std::pair< double, double > operator()(const double q, const bool check_positive) const
Definition BalloonUtil.h:77
Definition BalloonUtil.h:24
auto & enqueue(const double value)
Definition BalloonUtil.h:43
auto operator()(const Type memory_type) const
Definition BalloonUtil.h:54
Type
Definition BalloonUtil.h:33
auto zeros()
Definition BalloonUtil.h:49
BalloonBuffer(const std::size_t size)
Definition BalloonUtil.h:39
Definition BalloonUtil.h:84
BalloonSaturation(const double B, const double R)
Definition BalloonUtil.h:88
double a() const
Definition BalloonUtil.h:92
double b() const
Definition BalloonUtil.h:93
std::array< double, 2 > pod2
Definition Material.h:34