From c418dfa46a9fbbf822aeedfa6f79fec5dddd49c3 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Wed, 3 Jun 2020 14:17:53 +0200
Subject: [PATCH] [NL] TS creation; Refactor fixed times output.

---
 .../Algorithms/CreateEvolutionaryPIDcontroller.cpp       | 9 +++------
 .../CreateIterationNumberBasedTimeStepping.cpp           | 9 +++------
 .../Algorithms/EvolutionaryPIDcontroller.cpp             | 8 ++++++--
 .../Algorithms/IterationNumberBasedTimeStepping.cpp      | 8 ++++++--
 4 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/NumLib/TimeStepping/Algorithms/CreateEvolutionaryPIDcontroller.cpp b/NumLib/TimeStepping/Algorithms/CreateEvolutionaryPIDcontroller.cpp
index 848690bb255..37fdd0aeb83 100644
--- a/NumLib/TimeStepping/Algorithms/CreateEvolutionaryPIDcontroller.cpp
+++ b/NumLib/TimeStepping/Algorithms/CreateEvolutionaryPIDcontroller.cpp
@@ -45,12 +45,9 @@ std::unique_ptr<TimeStepAlgorithm> createEvolutionaryPIDcontroller(
     auto fixed_output_times =
         //! \ogs_file_param{prj__time_loop__processes__process__time_stepping__EvolutionaryPIDcontroller__fixed_output_times}
         config.getConfigParameter<std::vector<double>>("fixed_output_times",
-                                                       std::vector<double>{});
-    if (!fixed_output_times.empty())
-    {
-        // Remove possible duplicated elements and sort in descending order.
-        BaseLib::makeVectorUnique(fixed_output_times, std::greater<>());
-    }
+                                                       {});
+    // Remove possible duplicated elements and sort.
+    BaseLib::makeVectorUnique(fixed_output_times);
 
     //! \ogs_file_param{prj__time_loop__processes__process__time_stepping__EvolutionaryPIDcontroller__tol}
     auto const tol = config.getConfigParameter<double>("tol");
diff --git a/NumLib/TimeStepping/Algorithms/CreateIterationNumberBasedTimeStepping.cpp b/NumLib/TimeStepping/Algorithms/CreateIterationNumberBasedTimeStepping.cpp
index 74209718666..8a7b8ebaa1a 100644
--- a/NumLib/TimeStepping/Algorithms/CreateIterationNumberBasedTimeStepping.cpp
+++ b/NumLib/TimeStepping/Algorithms/CreateIterationNumberBasedTimeStepping.cpp
@@ -46,12 +46,9 @@ std::unique_ptr<TimeStepAlgorithm> createIterationNumberBasedTimeStepping(
     auto fixed_output_times =
         //! \ogs_file_param{prj__time_loop__processes__process__time_stepping__IterationNumberBasedTimeStepping__fixed_output_times}
         config.getConfigParameter<std::vector<double>>("fixed_output_times",
-                                                       std::vector<double>{});
-    if (!fixed_output_times.empty())
-    {
-        // Remove possible duplicated elements and sort in descending order.
-        BaseLib::makeVectorUnique(fixed_output_times, std::greater<>());
-    }
+                                                       {});
+    // Remove possible duplicated elements and sort.
+    BaseLib::makeVectorUnique(fixed_output_times);
 
     return std::make_unique<IterationNumberBasedTimeStepping>(
         t_initial, t_end, minimum_dt, maximum_dt, initial_dt,
diff --git a/NumLib/TimeStepping/Algorithms/EvolutionaryPIDcontroller.cpp b/NumLib/TimeStepping/Algorithms/EvolutionaryPIDcontroller.cpp
index b0d0c3de1a6..385a0ed9d9d 100644
--- a/NumLib/TimeStepping/Algorithms/EvolutionaryPIDcontroller.cpp
+++ b/NumLib/TimeStepping/Algorithms/EvolutionaryPIDcontroller.cpp
@@ -36,8 +36,12 @@ EvolutionaryPIDcontroller::EvolutionaryPIDcontroller(
       _e_n_minus2(0.),
       _is_accepted(true)
 {
-    // Remove possible duplicated elements. Result will be sorted.
-    BaseLib::makeVectorUnique(_fixed_output_times);
+    if (!std::is_sorted(cbegin(_fixed_output_times), cend(_fixed_output_times)))
+    {
+        OGS_FATAL(
+            "Vector of fixed time steps passed to the "
+            "EvolutionaryPIDcontroller constructor must be sorted");
+    }
 }
 
 bool EvolutionaryPIDcontroller::next(double const solution_error,
diff --git a/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp b/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp
index a204a053b02..a69d866af6d 100644
--- a/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp
+++ b/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp
@@ -53,8 +53,12 @@ IterationNumberBasedTimeStepping::IterationNumberBasedTimeStepping(
         OGS_FATAL("Vector of iteration numbers must be sorted.");
     }
 
-    // Remove possible duplicated elements. Result will be sorted.
-    BaseLib::makeVectorUnique(_fixed_output_times);
+    if (!std::is_sorted(cbegin(_fixed_output_times), cend(_fixed_output_times)))
+    {
+        OGS_FATAL(
+            "Vector of fixed time steps passed to the "
+            "IterationNumberBasedTimeStepping constructor must be sorted");
+    }
 }
 
 bool IterationNumberBasedTimeStepping::next(double const /*solution_error*/,
-- 
GitLab