From 872e488cef8cf99d3c133337d2061ac22d6144da Mon Sep 17 00:00:00 2001 From: Razvan Aguridan Date: Sun, 4 Aug 2024 12:58:51 +0000 Subject: [PATCH] Fix missing value configuration code --- .../action/statistics/StatisticsConfiguration.cc | 11 +++++------ src/multio/action/statistics/operations/Average.h | 13 +++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/multio/action/statistics/StatisticsConfiguration.cc b/src/multio/action/statistics/StatisticsConfiguration.cc index 6a0eb1d5..d422a71b 100644 --- a/src/multio/action/statistics/StatisticsConfiguration.cc +++ b/src/multio/action/statistics/StatisticsConfiguration.cc @@ -267,13 +267,12 @@ void StatisticsConfiguration::readStepFrequency(const message::Message& msg) { void StatisticsConfiguration::readMissingValue(const message::Message& msg) { const auto& md = msg.metadata(); - auto missingVal = md.getOpt(glossary().missingValue); - std::optional bitMapPresent; - if (missingVal && (bitMapPresent = md.get(glossary().bitmapPresent) && *bitMapPresent)) { - haveMissingValue_ = true; + const auto missingVal = md.getOpt(glossary().missingValue); + const auto bitMapPresent = md.getOpt(glossary().bitmapPresent); + haveMissingValue_ = missingVal && bitMapPresent && *bitMapPresent; + if (haveMissingValue_) { missingValue_ = *missingVal; } - return; }; void StatisticsConfiguration::createLoggingPrefix(const StatisticsConfiguration& cfg, const message::Message& msg) { std::ostringstream os; @@ -432,7 +431,7 @@ bool StatisticsConfiguration::solver_send_initial_condition() const { } bool StatisticsConfiguration::haveMissingValue() const { - return haveMissingValue_ != 0; + return haveMissingValue_; }; double StatisticsConfiguration::missingValue() const { diff --git a/src/multio/action/statistics/operations/Average.h b/src/multio/action/statistics/operations/Average.h index 3f4e29d6..4ff425b6 100644 --- a/src/multio/action/statistics/operations/Average.h +++ b/src/multio/action/statistics/operations/Average.h @@ -41,19 +41,20 @@ class Average final : public OperationWithData { private: void updateWithoutMissing(const T* val) { - const double c2 = icntpp(), c1 = sc(c2); + const T c2 = icntpp(), c1 = sc(c2); std::transform(values_.begin(), values_.end(), val, values_.begin(), - [c1, c2](T v1, T v2) { return static_cast(v1 * c1 + v2 * c2); }); + [c1, c2](T v1, T v2) { return v1 * c1 + v2 * c2; }); return; } void updateWithMissing(const T* val) { - const double c2 = icntpp(), c1 = sc(c2), m = cfg_.missingValue(); + const T c2 = icntpp(), c1 = sc(c2); + const T m = static_cast(cfg_.missingValue()); std::transform(values_.begin(), values_.end(), val, values_.begin(), - [c1, c2, m](T v1, T v2) { return static_cast(m == v2 ? m : v1 * c1 + v2 * c2); }); + [c1, c2, m](T v1, T v2) { return (m == v2) ? m : v1 * c1 + v2 * c2; }); return; } - double icntpp() const { return double(1.0) / double(win_.count()); }; - double sc(double v) const { return double(win_.count() - 1) * v; }; + T icntpp() const { return T(1.0) / T(win_.count()); }; + T sc(T v) const { return T(win_.count() - 1) * v; }; void print(std::ostream& os) const override { os << logHeader_; } };