From 120580fd1e50fceb663ba1860bdde91f0fb6d722 Mon Sep 17 00:00:00 2001 From: Tom Fischer <thomas.fischer@ufz.de> Date: Mon, 29 Apr 2024 15:30:21 +0200 Subject: [PATCH] [NL/TimeStepping] Extract checks to extra function --- .../Algorithms/FixedTimeStepping.cpp | 37 ++++++++++++++----- .../Algorithms/FixedTimeStepping.h | 3 ++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/NumLib/TimeStepping/Algorithms/FixedTimeStepping.cpp b/NumLib/TimeStepping/Algorithms/FixedTimeStepping.cpp index b9e53ca8fcc..88d4bfe2dd0 100644 --- a/NumLib/TimeStepping/Algorithms/FixedTimeStepping.cpp +++ b/NumLib/TimeStepping/Algorithms/FixedTimeStepping.cpp @@ -147,17 +147,12 @@ FixedTimeStepping::FixedTimeStepping( { double t_curr = _t_initial; + if (!areRepeatDtPairsValid(repeat_dt_pairs)) + { + OGS_FATAL("FixedTimeStepping: Couldn't construct object from data"); + } for (auto const& [repeat, delta_t] : repeat_dt_pairs) { - if (repeat == 0) - { - OGS_FATAL("<repeat> is zero."); - } - if (delta_t <= 0.0) - { - OGS_FATAL("timestep <delta_t> is <= 0.0."); - } - if (t_curr <= _t_end) { t_curr = addTimeIncrement(_dt_vector, repeat, delta_t, t_curr); @@ -230,4 +225,28 @@ std::tuple<bool, double> FixedTimeStepping::next( return std::make_tuple(true, dt); } +bool FixedTimeStepping::areRepeatDtPairsValid( + std::vector<RepeatDtPair> const& repeat_dt_pairs) +{ + if (repeat_dt_pairs.empty()) + { + return false; + } + + for (auto const& [repeat, delta_t] : repeat_dt_pairs) + { + if (repeat == 0) + { + ERR("FixedTimeStepping: <repeat> is zero."); + return false; + } + if (delta_t <= 0.0) + { + ERR("FixedTimeStepping: timestep <delta_t> is <= 0.0."); + return false; + } + } + return true; +} + } // namespace NumLib diff --git a/NumLib/TimeStepping/Algorithms/FixedTimeStepping.h b/NumLib/TimeStepping/Algorithms/FixedTimeStepping.h index 3c0972294e3..d12bade3295 100644 --- a/NumLib/TimeStepping/Algorithms/FixedTimeStepping.h +++ b/NumLib/TimeStepping/Algorithms/FixedTimeStepping.h @@ -56,6 +56,9 @@ public: NumLib::TimeStep& ts_previous, NumLib::TimeStep& ts_current) override; + static bool areRepeatDtPairsValid( + std::vector<RepeatDtPair> const& repeat_dt_pairs); + private: /// a vector of time step sizes std::vector<double> _dt_vector; -- GitLab