OGS
CreateIterationNumberBasedTimeStepping.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
5
6#include <string>
7
8#include "BaseLib/Algorithm.h"
11#include "TimeStepAlgorithm.h"
12
13namespace NumLib
14{
15
18{
20 config.checkConfigParameter("type", "IterationNumberBasedTimeStepping");
21
23 auto const t_initial = config.getConfigParameter<double>("t_initial");
25 auto const t_end = config.getConfigParameter<double>("t_end");
26 if (t_end < t_initial)
27 {
29 "iteration number based timestepping: t_end({}) is smaller than "
30 "t_initial({})",
31 t_end,
32 t_initial);
33 }
34
36 auto const initial_dt = config.getConfigParameter<double>("initial_dt");
38 auto const minimum_dt = config.getConfigParameter<double>("minimum_dt");
40 auto const maximum_dt = config.getConfigParameter<double>("maximum_dt");
41
42 auto number_iterations =
44 config.getConfigParameter<std::vector<int>>("number_iterations");
45 auto multiplier =
47 config.getConfigParameter<std::vector<double>>("multiplier");
48
49 std::string const multiplier_interpolation_type_string =
51 config.getConfigParameter<std::string>("multiplier_interpolation_type",
52 "PiecewiseConstant");
53 auto const multiplier_interpolation_type =
54 (multiplier_interpolation_type_string == "PiecewiseLinear")
57
58 return {t_initial,
59 t_end,
60 minimum_dt,
61 maximum_dt,
62 initial_dt,
63 multiplier_interpolation_type,
64 std::move(number_iterations),
65 std::move(multiplier)};
66}
67
70std::unique_ptr<TimeStepAlgorithm> createIterationNumberBasedTimeStepping(
72 std::vector<double> const& fixed_times_for_output)
73{
74 if (parameters.t_end < parameters.t_initial)
75 {
77 "iteration number based timestepping: end time ({}) is smaller "
78 "than initial time ({})",
79 parameters.t_end,
80 parameters.t_initial);
81 }
82
83 return std::make_unique<IterationNumberBasedTimeStepping>(
84 parameters.t_initial, parameters.t_end, parameters.minimum_dt,
85 parameters.maximum_dt, parameters.initial_dt,
86 parameters.multiplier_interpolation_type,
87 std::move(parameters.number_iterations),
88 std::move(parameters.multiplier), fixed_times_for_output);
89}
90
91} // namespace NumLib
#define OGS_FATAL(...)
Definition Error.h:19
T getConfigParameter(std::string const &param) const
void checkConfigParameter(std::string const &param, std::string_view const value) const
IterationNumberBasedTimeSteppingParameters parseIterationNumberBasedTimeStepping(BaseLib::ConfigTree const &config)
std::unique_ptr< TimeStepAlgorithm > createIterationNumberBasedTimeStepping(IterationNumberBasedTimeSteppingParameters &&parameters, std::vector< double > const &fixed_times_for_output)