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"
12#include "TimeStepAlgorithm.h"
13
14namespace NumLib
15{
16
19{
21 config.checkConfigParameter("type", "IterationNumberBasedTimeStepping");
22
24 auto const t_initial = config.getConfigParameter<double>("t_initial");
26 auto const t_end = config.getConfigParameter<double>("t_end");
27 if (Time(t_end) <= Time(t_initial))
28 {
30 "iteration number based timestepping: t_end({}) must be larger "
31 "than t_initial({})",
32 t_end,
33 t_initial);
34 }
35
37 auto const initial_dt = config.getConfigParameter<double>("initial_dt");
39 auto const minimum_dt = config.getConfigParameter<double>("minimum_dt");
41 auto const maximum_dt = config.getConfigParameter<double>("maximum_dt");
42
43 auto number_iterations =
45 config.getConfigParameter<std::vector<int>>("number_iterations");
46 auto multiplier =
48 config.getConfigParameter<std::vector<double>>("multiplier");
49
50 std::string const multiplier_interpolation_type_string =
52 config.getConfigParameter<std::string>("multiplier_interpolation_type",
53 "PiecewiseConstant");
54 auto const multiplier_interpolation_type =
55 (multiplier_interpolation_type_string == "PiecewiseLinear")
58
59 return {t_initial,
60 t_end,
61 minimum_dt,
62 maximum_dt,
63 initial_dt,
64 multiplier_interpolation_type,
65 std::move(number_iterations),
66 std::move(multiplier)};
67}
68
71std::unique_ptr<TimeStepAlgorithm> createIterationNumberBasedTimeStepping(
73 std::vector<double> const& fixed_times_for_output)
74{
75 if (Time(parameters.t_end) <= Time(parameters.t_initial))
76 {
78 "iteration number based timestepping: end time ({}) must be larger "
79 "than initial time ({})",
80 parameters.t_end,
81 parameters.t_initial);
82 }
83
84 return std::make_unique<IterationNumberBasedTimeStepping>(
85 parameters.t_initial, parameters.t_end, parameters.minimum_dt,
86 parameters.maximum_dt, parameters.initial_dt,
87 parameters.multiplier_interpolation_type,
88 std::move(parameters.number_iterations),
89 std::move(parameters.multiplier), fixed_times_for_output);
90}
91
92} // namespace NumLib
#define OGS_FATAL(...)
Definition Error.h:10
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)