OGS
ParameterLib::TimeDependentHeterogeneousParameter Class Referencefinal

Detailed Description

Definition at line 22 of file TimeDependentHeterogeneousParameter.h.

#include <TimeDependentHeterogeneousParameter.h>

Inheritance diagram for ParameterLib::TimeDependentHeterogeneousParameter:
[legend]
Collaboration diagram for ParameterLib::TimeDependentHeterogeneousParameter:
[legend]

Public Types

using PairTimeParameterName = std::pair< double, std::string >
 
using PairTimeParameter = std::pair< double, Parameter< double > const *const >
 

Public Member Functions

 TimeDependentHeterogeneousParameter (std::string name, std::vector< PairTimeParameterName > time_parameter_name_mapping)
 
int getNumberOfGlobalComponents () const override
 
bool isTimeDependent () const override
 
std::vector< double > operator() (double const t, SpatialPosition const &pos) const override
 Returns the parameter value at the given time and position. More...
 
void initialize (std::vector< std::unique_ptr< ParameterBase >> const &parameters) override
 
- Public Member Functions inherited from ParameterLib::Parameter< double >
 ~Parameter () override=default
 
virtual Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > getNodalValuesOnElement (MeshLib::Element const &element, double const t) const
 Returns a matrix of values for all nodes of the given element. More...
 
 ParameterBase (std::string name_, MeshLib::Mesh const *mesh=nullptr)
 
- Public Member Functions inherited from ParameterLib::ParameterBase
 ParameterBase (std::string name_, MeshLib::Mesh const *mesh=nullptr)
 
virtual ~ParameterBase ()=default
 
void setCoordinateSystem (CoordinateSystem const &coordinate_system)
 
MeshLib::Mesh const * mesh () const
 

Private Attributes

std::vector< PairTimeParameterName_time_parameter_name_mapping
 
std::vector< PairTimeParameter_time_parameter_mapping
 

Additional Inherited Members

- Public Attributes inherited from ParameterLib::ParameterBase
std::string const name
 
- Protected Member Functions inherited from ParameterLib::ParameterBase
std::vector< double > rotateWithCoordinateSystem (std::vector< double > const &values, SpatialPosition const &pos) const
 
- Protected Attributes inherited from ParameterLib::ParameterBase
std::optional< CoordinateSystem_coordinate_system
 
MeshLib::Mesh const * _mesh
 

Member Typedef Documentation

◆ PairTimeParameter

Definition at line 26 of file TimeDependentHeterogeneousParameter.h.

◆ PairTimeParameterName

Constructor & Destructor Documentation

◆ TimeDependentHeterogeneousParameter()

ParameterLib::TimeDependentHeterogeneousParameter::TimeDependentHeterogeneousParameter ( std::string  name,
std::vector< PairTimeParameterName time_parameter_name_mapping 
)

Definition at line 19 of file TimeDependentHeterogeneousParameter.cpp.

23  : Parameter<double>(std::move(name), nullptr),
24  _time_parameter_name_mapping(std::move(time_parameter_name_mapping))
25 {
26 }
std::string const name
Definition: Parameter.h:72

Member Function Documentation

◆ getNumberOfGlobalComponents()

int ParameterLib::TimeDependentHeterogeneousParameter::getNumberOfGlobalComponents ( ) const
overridevirtual

Returns the number of components this Parameter has at every position and point in time.

Implements ParameterLib::Parameter< double >.

Definition at line 28 of file TimeDependentHeterogeneousParameter.cpp.

29 {
30  return _time_parameter_mapping[0].second->getNumberOfGlobalComponents();
31 }

References _time_parameter_mapping.

◆ initialize()

void ParameterLib::TimeDependentHeterogeneousParameter::initialize ( std::vector< std::unique_ptr< ParameterBase >> const &  parameters)
overridevirtual

The TimeDependentHeterogeneousParameter depends in each time step on a parameter. Since, at construction time of the TimeDependentHeterogeneousParameter other parameter needs not to be constructed and hence can't be used to setup the object this is done later on in the initialize method.

Reimplemented from ParameterLib::ParameterBase.

Definition at line 78 of file TimeDependentHeterogeneousParameter.cpp.

80 {
81  DBUG("TimeDependentHeterogeneousParameter init {:d} time series entries.",
83  for (auto const& time_parameter_map : _time_parameter_name_mapping)
84  {
85  auto parameter =
86  &findParameter<double>(time_parameter_map.second, parameters, 0);
87  _time_parameter_mapping.emplace_back(time_parameter_map.first,
88  parameter);
89  }
90 
91  // check that all parameters have the same number of components
92  auto const n =
93  _time_parameter_mapping[0].second->getNumberOfGlobalComponents();
94  if (!std::all_of(_time_parameter_mapping.begin(),
96  [n](auto const p)
97  { return n == p.second->getNumberOfGlobalComponents(); }))
98  {
99  OGS_FATAL(
100  "All referenced parameters in time dependent heterogeneous "
101  "parameter '{:s}' have to have the same number of components.",
102  name);
103  }
104 }
#define OGS_FATAL(...)
Definition: Error.h:26
void DBUG(char const *fmt, Args const &... args)
Definition: Logging.h:27

References _time_parameter_mapping, _time_parameter_name_mapping, DBUG(), ParameterLib::ParameterBase::name, and OGS_FATAL.

◆ isTimeDependent()

bool ParameterLib::TimeDependentHeterogeneousParameter::isTimeDependent ( ) const
overridevirtual

Implements ParameterLib::ParameterBase.

Definition at line 33 of file TimeDependentHeterogeneousParameter.cpp.

34 {
35  return true;
36 }

◆ operator()()

std::vector< double > ParameterLib::TimeDependentHeterogeneousParameter::operator() ( double const  t,
SpatialPosition const &  pos 
) const
overridevirtual

Returns the parameter value at the given time and position.

Implements ParameterLib::Parameter< double >.

Definition at line 38 of file TimeDependentHeterogeneousParameter.cpp.

40 {
41  // No local coordinate transformation here, which might happen twice
42  // otherwise.
43  assert(!this->_coordinate_system ||
44  "Coordinate system not expected to be set for curve scaled "
45  "parameters.");
46  if (t < _time_parameter_mapping[0].first)
47  {
48  return _time_parameter_mapping[0].second->operator()(t, pos);
49  }
50  if (_time_parameter_mapping.back().first <= t)
51  {
52  return _time_parameter_mapping.back().second->operator()(t, pos);
53  }
54  std::size_t k(1);
55  for (; k < _time_parameter_mapping.size(); ++k)
56  {
57  if (_time_parameter_mapping[k - 1].first <= t &&
58  t < _time_parameter_mapping[k].first)
59  {
60  break;
61  }
62  }
63  auto const t0 = _time_parameter_mapping[k - 1].first;
64  auto const t1 = _time_parameter_mapping[k].first;
65  auto const alpha = (t - t0) / (t1 - t0);
66 
67  auto r0 = _time_parameter_mapping[k - 1].second->operator()(t, pos);
68  std::transform(r0.begin(), r0.end(), r0.begin(),
69  [alpha](auto const& v) { return (1 - alpha) * v; });
70  auto r1 = _time_parameter_mapping[k].second->operator()(t, pos);
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; });
75  return r0;
76 }
std::optional< CoordinateSystem > _coordinate_system
Definition: Parameter.h:125

References ParameterLib::ParameterBase::_coordinate_system, _time_parameter_mapping, and MaterialPropertyLib::alpha.

Member Data Documentation

◆ _time_parameter_mapping

std::vector<PairTimeParameter> ParameterLib::TimeDependentHeterogeneousParameter::_time_parameter_mapping
private

◆ _time_parameter_name_mapping

std::vector<PairTimeParameterName> ParameterLib::TimeDependentHeterogeneousParameter::_time_parameter_name_mapping
private

Definition at line 50 of file TimeDependentHeterogeneousParameter.h.

Referenced by initialize().


The documentation for this class was generated from the following files: