OGS
TimeStepAlgorithm.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#include "TimeStepAlgorithm.h"
5
6#include <range/v3/algorithm/upper_bound.hpp>
7
9
10namespace NumLib
11{
13 Time const& t, double const dt,
14 std::vector<double> const& fixed_output_times)
15{
16 auto const specific_time = ranges::upper_bound(
17 fixed_output_times, t, ranges::less{}, [](auto t) { return Time(t); });
18
19 if (specific_time == ranges::cend(fixed_output_times))
20 {
21 return dt;
22 }
23
24 Time const fixed_output_time(*specific_time);
25 if ((t < fixed_output_time) && (t + dt) > fixed_output_time)
26 {
27 double const t_to_specific_time = fixed_output_time() - t();
28 return t_to_specific_time;
29 }
30
31 return dt;
32}
33
34bool canReduceTimestepSize(TimeStep const& timestep_previous,
35 TimeStep const& timestep_current,
36 double const min_dt)
37{
38 return !(timestep_current.dt() == min_dt &&
39 timestep_previous.dt() == min_dt);
40}
41} // namespace NumLib
Time step object.
Definition TimeStep.h:24
double dt() const
time step size from _previous
Definition TimeStep.h:73
double possiblyClampDtToNextFixedTime(Time const &t, double const dt, std::vector< double > const &fixed_output_times)
bool canReduceTimestepSize(TimeStep const &timestep_previous, TimeStep const &timestep_current, double const min_dt)