diff --git a/src/libs/antares/utils/include/antares/utils/utils.h b/src/libs/antares/utils/include/antares/utils/utils.h index e7e293da12..8c73dc53d2 100644 --- a/src/libs/antares/utils/include/antares/utils/utils.h +++ b/src/libs/antares/utils/include/antares/utils/utils.h @@ -59,6 +59,7 @@ double round(double d, unsigned precision); double ceilDiv(double numerator, double denominator); double floorDiv(double numerator, double denominator); +bool checkAllElementsIdenticalOrOne(std::vector w); bool checkAllElementsIdenticalOrOne(std::vector>& p); } // namespace Utils diff --git a/src/libs/antares/utils/utils.cpp b/src/libs/antares/utils/utils.cpp index 0ab44cdde1..fec6a07a71 100644 --- a/src/libs/antares/utils/utils.cpp +++ b/src/libs/antares/utils/utils.cpp @@ -172,6 +172,12 @@ double floorDiv(double numerator, double denominator) return std::floor(std::round(numerator / denominator * largeValue) / largeValue); } +bool checkAllElementsIdenticalOrOne(std::vector w) +{ + auto first_one = std::remove(w.begin(), w.end(), 1); // Reject all 1 to the end + return std::adjacent_find(w.begin(), first_one, std::not_equal_to()) == first_one; +} + bool checkAllElementsIdenticalOrOne(std::vector>& p) { // Reject all 1 to the end diff --git a/src/solver/simulation/timeseries-numbers.cpp b/src/solver/simulation/timeseries-numbers.cpp index 1b8e389be5..ca3addc1e3 100644 --- a/src/solver/simulation/timeseries-numbers.cpp +++ b/src/solver/simulation/timeseries-numbers.cpp @@ -207,16 +207,12 @@ class IntraModalConsistencyChecker bool IntraModalConsistencyChecker::checkTSconsistency() { logs.info() << "Checking intra-modal correlation: " << tsTitle_; - std::vector> listNumberTS; + std::vector listNumberTS; for (auto i = study_.areas.begin(); i != study_.areas.end(); ++i) { const Area& area = *(i->second); - vector areaNumberTSList = tsCounter_->getAreaTimeSeriesNumber(area); - listNumberTS.reserve(listNumberTS.size() + areaNumberTSList.size()); - for (const auto& ts: areaNumberTSList) - { - listNumberTS.push_back({ts, ""}); - } + std::vector areaNumberTSList = tsCounter_->getAreaTimeSeriesNumber(area); + listNumberTS.insert(listNumberTS.end(), areaNumberTSList.begin(), areaNumberTSList.end()); } if (!Utils::checkAllElementsIdenticalOrOne(listNumberTS)) @@ -226,10 +222,7 @@ bool IntraModalConsistencyChecker::checkTSconsistency() return false; } // At this point, all elements are identical or 1 - nbTimeseries_ = std::ranges::max_element(listNumberTS, - [](const auto& a, const auto& b) - { return a.first < b.first; }) - ->first; + nbTimeseries_ = *(std::ranges::max_element(listNumberTS)); return true; }