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