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