OGS
CreateFixedTimeStepping.cpp
Go to the documentation of this file.
1
13
14#include "BaseLib/ConfigTree.h"
15#include "BaseLib/Error.h"
16#include "FixedTimeStepping.h"
17#include "TimeStepAlgorithm.h"
18
19namespace NumLib
20{
21std::unique_ptr<TimeStepAlgorithm> createFixedTimeStepping(
22 BaseLib::ConfigTree const& config,
23 std::vector<double> const& fixed_times_for_output)
24{
26 config.checkConfigParameter("type", "FixedTimeStepping");
27
29 auto const t_initial = config.getConfigParameter<double>("t_initial");
31 auto const t_end = config.getConfigParameter<double>("t_end");
33 auto const delta_ts_config = config.getConfigSubtree("timesteps");
34
35 // TODO: consider adding call "listNonEmpty" to config tree
37 auto const range = delta_ts_config.getConfigSubtreeList("pair");
38 if (range.begin() == range.end())
39 {
40 OGS_FATAL("no timesteps have been given");
41 }
42
43 std::vector<RepeatDtPair> repeat_dt_pairs;
44 for (auto const pair : range)
45 {
46 repeat_dt_pairs.emplace_back(
48 pair.getConfigParameter<std::size_t>("repeat"),
50 pair.getConfigParameter<double>("delta_t"));
51 }
52 if (!FixedTimeStepping::areRepeatDtPairsValid(repeat_dt_pairs))
53 {
55 "CreateFixedTimeStepping: invalid specification of (repeat, "
56 "delta_t) pairs");
57 }
58
59 return std::make_unique<FixedTimeStepping>(
60 t_initial, t_end, repeat_dt_pairs, fixed_times_for_output);
61}
62} // end of namespace NumLib
#define OGS_FATAL(...)
Definition Error.h:26
T getConfigParameter(std::string const &param) const
Range< SubtreeIterator > getConfigSubtreeList(std::string const &root) const
ConfigTree getConfigSubtree(std::string const &root) const
void checkConfigParameter(std::string const &param, std::string_view const value) const
static bool areRepeatDtPairsValid(std::vector< RepeatDtPair > const &repeat_dt_pairs)
std::unique_ptr< TimeStepAlgorithm > createFixedTimeStepping(BaseLib::ConfigTree const &config, std::vector< double > const &fixed_times_for_output)