diff --git a/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp b/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp index d9646d2150dac23ed4017aa71016eb90a93c0350..4dbaf6a52435f5cb82e72106ebb86886e86522a1 100644 --- a/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp +++ b/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.cpp @@ -80,6 +80,26 @@ bool IterationNumberBasedTimeStepping::next(double const /*solution_error*/, return true; } +double IterationNumberBasedTimeStepping::findMultiplier( + int const number_iterations) const +{ + double multiplier = 1.0; + // get the first multiplier by default + if (!_multiplier_vector.empty()) + { + multiplier = _multiplier_vector[0]; + } + // finding the right multiplier + for (std::size_t i = 0; i < _iter_times_vector.size(); i++) + { + if (_iter_times > _iter_times_vector[i]) + { + multiplier = _multiplier_vector[i]; + } + } + return multiplier; +} + double IterationNumberBasedTimeStepping::getNextTimeStepSize() const { double dt = 0.0; @@ -92,21 +112,7 @@ double IterationNumberBasedTimeStepping::getNextTimeStepSize() const } else // not the first time step { - double multiplier = 1.0; - // get the first multiplier by default - if (!_multiplier_vector.empty()) - { - multiplier = _multiplier_vector[0]; - } - // finding the right multiplier - for (std::size_t i = 0; i < _iter_times_vector.size(); i++) - { - if (_iter_times > _iter_times_vector[i]) - { - multiplier = _multiplier_vector[i]; - } - } - dt = _ts_prev.dt() * multiplier; + dt = _ts_prev.dt() * findMultiplier(_iter_times); } dt = std::min(std::max(dt, _min_dt), _max_dt); diff --git a/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.h b/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.h index d2f8ae3e59503d022b5275eff59b25f8db743aef..ac73d8839a75ff576962fc712850352e642aa8aa 100644 --- a/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.h +++ b/NumLib/TimeStepping/Algorithms/IterationNumberBasedTimeStepping.h @@ -105,6 +105,9 @@ private: /// Calculate the next time step size. double getNextTimeStepSize() const; + /// Find a multiplier for the given number of iterations. + double findMultiplier(int number_iterations) const; + /// This vector stores the number of iterations to which the respective /// multiplier coefficient will be applied. const std::vector<int> _iter_times_vector;