OGS
FunctionParameter.h
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#pragma once
5
6#include <memory>
7#include <string>
8#include <vector>
9
11#include "FunctionEvaluation.h"
12#include "Parameter.h"
13
14namespace ParameterLib
15{
23template <typename T>
24struct FunctionParameter final : public Parameter<T>
25{
35 std::string const& name,
36 std::vector<std::string> const& vec_expression_str,
37 std::map<std::string,
38 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
39 curves)
40 : Parameter<T>(name, nullptr),
41 function_evaluation_(BaseLib::getNumberOfThreads(),
42 {"x", "y", "z", "t"}, vec_expression_str, curves)
43 {
44 }
45
46 bool isTimeDependent() const override
47 {
48 return function_evaluation_.isTimeDependent();
49 }
50
51 int getNumberOfGlobalComponents() const override
52 {
53 return function_evaluation_.getNumberOfComponents();
54 }
55
56 std::vector<T> operator()(double const t,
57 SpatialPosition const& pos) const override
58 {
59 std::vector<T> values(static_cast<std::size_t>(
60 function_evaluation_.getNumberOfComponents()));
61 function_evaluation_.evaluate(pos, t, values);
62 if (!this->_coordinate_system)
63 {
64 return values;
65 }
66 return this->rotateWithCoordinateSystem(values, pos);
67 }
68
70};
71
72std::unique_ptr<ParameterBase> createFunctionParameter(
73 std::string const& name,
74 BaseLib::ConfigTree const& config,
75 std::map<std::string,
76 std::unique_ptr<MathLib::PiecewiseLinearInterpolation>> const&
77 curves);
78
79} // namespace ParameterLib
std::unique_ptr< ParameterBase > createFunctionParameter(std::string const &name, BaseLib::ConfigTree const &config, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
FunctionEvaluation function_evaluation_
bool isTimeDependent() const override
std::vector< T > operator()(double const t, SpatialPosition const &pos) const override
Returns the parameter value at the given time and position.
FunctionParameter(std::string const &name, std::vector< std::string > const &vec_expression_str, std::map< std::string, std::unique_ptr< MathLib::PiecewiseLinearInterpolation > > const &curves)
int getNumberOfGlobalComponents() const override
std::vector< double > rotateWithCoordinateSystem(std::vector< double > const &values, SpatialPosition const &pos) const
std::optional< CoordinateSystem > _coordinate_system