14 std::vector<PairTimeParameterName>
15 time_parameter_name_mapping)
37 "Coordinate system not expected to be set for curve scaled "
59 "Could not find parameter for time {}. There are {:d} "
60 "time-parameter pairs.",
65 auto const alpha = (t - t0) / (t1 - t0);
68 std::transform(r0.begin(), r0.end(), r0.begin(),
69 [alpha](
auto const& v) { return (1 - alpha) * v; });
71 std::transform(r1.begin(), r1.end(), r1.begin(),
72 [alpha](
auto const& v) { return alpha * v; });
73 std::transform(r0.begin(), r0.end(), r1.begin(), r0.begin(),
74 [](
auto const& v0,
auto const& v1) { return v0 + v1; });
79 std::vector<std::unique_ptr<ParameterBase>>
const& parameters)
81 DBUG(
"TimeDependentHeterogeneousParameter init {:d} time series entries.",
97 { return n == p.second->getNumberOfGlobalComponents(); }))
100 "All referenced parameters in time dependent heterogeneous "
101 "parameter '{:s}' have to have the same number of components.",
111 if (type !=
"TimeDependentHeterogeneous" &&
112 type !=
"TimeDependentHeterogeneousParameter")
115 "Expected the parameter type 'TimeDependentHeterogeneous' (or its "
116 "deprecated spelling 'TimeDependentHeterogeneousParameter'), but "
120 auto const time_series_config =
124 std::vector<TimeDependentHeterogeneousParameter::PairTimeParameterName>
127 for (
auto const p : time_series_config.getConfigSubtreeList(
"pair"))
130 auto time = p.getConfigParameter<
double>(
"time");
131 auto parameter_name =
133 p.getConfigParameter<std::string>(
"parameter_name");
134 time_series.emplace_back(time, parameter_name);
137 if (time_series.empty())
140 "Time dependent heterogeneous parameter '{:s}' doesn't contain "
141 "necessary time series data.",
146 time_series.begin(), time_series.end(),
150 & p1) { return p0.first < p1.first; }))
153 "The points in time in the time series '{:s}' aren't in ascending "
158 return std::make_unique<TimeDependentHeterogeneousParameter>(
159 name, std::move(time_series));
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
T getConfigParameter(std::string const ¶m) const
ConfigTree getConfigSubtree(std::string const &root) const
std::vector< double > operator()(double const t, SpatialPosition const &pos) const override
Returns the parameter value at the given time and position.
TimeDependentHeterogeneousParameter(std::string name, std::vector< PairTimeParameterName > time_parameter_name_mapping)
std::vector< PairTimeParameter > _time_parameter_mapping
bool isTimeDependent() const override
std::pair< double, std::string > PairTimeParameterName
int getNumberOfGlobalComponents() const override
void initialize(std::vector< std::unique_ptr< ParameterBase > > const ¶meters) override
std::vector< PairTimeParameterName > _time_parameter_name_mapping
std::unique_ptr< ParameterBase > createTimeDependentHeterogeneousParameter(std::string const &name, BaseLib::ConfigTree const &config)
OGS_NO_DANGLING Parameter< ParameterDataType > & findParameter(std::string const ¶meter_name, std::vector< std::unique_ptr< ParameterBase > > const ¶meters, int const num_components, MeshLib::Mesh const *const mesh=nullptr)
std::optional< CoordinateSystem > _coordinate_system