OGS
CreateTimeStepper.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 "CreateTimeStepper.h"
5
6#include <memory>
7#include <string>
8
10#include "BaseLib/Error.h"
15
16namespace NumLib
17{
18std::unique_ptr<TimeStepAlgorithm> createTimeStepper(
19 BaseLib::ConfigTree const& config,
20 std::vector<double> const& fixed_times_for_output)
21{
23 auto const type = config.peekConfigParameter<std::string>("type");
24
25 if (type == "SingleStep")
26 {
28 config.ignoreConfigParameter("type");
29 return std::make_unique<NumLib::FixedTimeStepping>(0.0, 1.0, 1.0);
30 }
31 if (type == "FixedTimeStepping")
32 {
34 fixed_times_for_output);
35 }
36 if (type == "EvolutionaryPIDcontroller")
37 {
39 parseEvolutionaryPIDcontroller(config), fixed_times_for_output);
40 }
41 if (type == "IterationNumberBasedTimeStepping")
42 {
45 fixed_times_for_output);
46 }
48 "Unknown time stepping type: '{:s}'. The available types are: "
49 "\n\tSingleStep,"
50 "\n\tFixedTimeStepping,"
51 "\n\tEvolutionaryPIDcontroller,",
52 "\n\tIterationNumberBasedTimeStepping\n",
53 type.data());
54}
55
56} // end of namespace NumLib
#define OGS_FATAL(...)
Definition Error.h:19
T peekConfigParameter(std::string const &param) const
void ignoreConfigParameter(std::string const &param) const
std::unique_ptr< TimeStepAlgorithm > createEvolutionaryPIDcontroller(EvolutionaryPIDcontrollerParameters const &config, std::vector< double > const &fixed_times_for_output)
std::unique_ptr< TimeStepAlgorithm > createTimeStepper(BaseLib::ConfigTree const &config, std::vector< double > const &fixed_times_for_output)
EvolutionaryPIDcontrollerParameters parseEvolutionaryPIDcontroller(BaseLib::ConfigTree const &config)
FixedTimeSteppingParameters parseFixedTimeStepping(BaseLib::ConfigTree const &config)
IterationNumberBasedTimeSteppingParameters parseIterationNumberBasedTimeStepping(BaseLib::ConfigTree const &config)
std::unique_ptr< TimeStepAlgorithm > createFixedTimeStepping(FixedTimeSteppingParameters const &parameters, std::vector< double > const &fixed_times_for_output)
std::unique_ptr< TimeStepAlgorithm > createIterationNumberBasedTimeStepping(IterationNumberBasedTimeSteppingParameters &&parameters, std::vector< double > const &fixed_times_for_output)