OGS
MaterialPropertyLib::Linear Class Referencefinal

Detailed Description

The linear property class. This property calculates the linear relationship. The current implementation accepts only the double datatype defined in PropertyDataType.

Definition at line 32 of file Linear.h.

#include <Linear.h>

Inheritance diagram for MaterialPropertyLib::Linear:
[legend]
Collaboration diagram for MaterialPropertyLib::Linear:
[legend]

Public Member Functions

 Linear (std::string name, PropertyDataType const &property_reference_value, std::vector< IndependentVariable > const &vs)
PropertyDataType value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &, double const, double const) const override
PropertyDataType dValue (VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &, double const, double const) const override
PropertyDataType d2Value (VariableArray const &variable_array, Variable const pv1, Variable const pv2, ParameterLib::SpatialPosition const &, double const, double const) const override
Public Member Functions inherited from MaterialPropertyLib::Property
virtual ~Property ()
virtual PropertyDataType initialValue (ParameterLib::SpatialPosition const &pos, double const t) const
virtual PropertyDataType value () const
virtual PropertyDataType value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
virtual PropertyDataType dValue (VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
virtual void setProperties (std::vector< std::unique_ptr< Phase > > const &phases)
 Default implementation:
void setScale (std::variant< Medium *, Phase *, Component * > scale)
template<typename T>
initialValue (ParameterLib::SpatialPosition const &pos, double const t) const
template<typename T>
value () const
template<typename T>
value (VariableArray const &variable_array, VariableArray const &variable_array_prev, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
value (VariableArray const &variable_array, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
dValue (VariableArray const &variable_array, VariableArray const &variable_array_prev, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
dValue (VariableArray const &variable_array, Variable const variable, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const
template<typename T>
d2Value (VariableArray const &variable_array, Variable const &variable1, Variable const &variable2, ParameterLib::SpatialPosition const &pos, double const t, double const dt) const

Private Attributes

std::vector< IndependentVariable > const independent_variables_

Additional Inherited Members

Protected Attributes inherited from MaterialPropertyLib::Property
std::string name_
PropertyDataType value_
 The single value of a property.
PropertyDataType dvalue_
std::variant< Medium *, Phase *, Component * > scale_

Constructor & Destructor Documentation

◆ Linear()

MaterialPropertyLib::Linear::Linear ( std::string name,
PropertyDataType const & property_reference_value,
std::vector< IndependentVariable > const & vs )

This constructor accepts single values of double data type defined in the PropertyDataType definition and sets the protected attribute value_ of the base class Property to that value.

Definition at line 62 of file Linear.cpp.

66{
67 name_ = std::move(name);
68 value_ = property_reference_value;
69}
std::vector< IndependentVariable > const independent_variables_
Definition Linear.h:66
PropertyDataType value_
The single value of a property.

References independent_variables_, MaterialPropertyLib::name, MaterialPropertyLib::Property::name_, and MaterialPropertyLib::Property::value_.

Member Function Documentation

◆ d2Value()

PropertyDataType MaterialPropertyLib::Linear::d2Value ( VariableArray const & variable_array,
Variable const pv1,
Variable const pv2,
ParameterLib::SpatialPosition const & ,
double const ,
double const  ) const
overridevirtual

This method will compute the second derivative of a property with respect to the given primary variables pv1 and pv2.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 134 of file Linear.cpp.

138{
139 return decltype(value_){};
140}

References d2Value(), and MaterialPropertyLib::Property::value_.

Referenced by d2Value().

◆ dValue()

PropertyDataType MaterialPropertyLib::Linear::dValue ( VariableArray const & variable_array,
Variable const variable,
ParameterLib::SpatialPosition const & pos,
double const t,
double const  ) const
overridevirtual

This method will compute the derivative of a property with respect to the given primary variable.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 95 of file Linear.cpp.

99{
100 auto const independent_variable = std::find_if(
103 [&variable](auto const& iv) -> bool
104 {
105 if (auto const* var_ptr = std::get_if<Variable>(&iv.type))
106 {
107 return *var_ptr == variable;
108 }
109 return false;
110 });
111
112 auto const zero = decltype(value_){};
113 if (independent_variable == independent_variables_.end())
114 {
115 return zero;
116 }
117
118 auto const& iv = *independent_variable;
119
120 double const x = iv.valueUnclamped(variable_array, pos, t);
121
122 if (iv.min && x < *iv.min)
123 {
124 return zero;
125 }
126 if (iv.max && x > *iv.max)
127 {
128 return zero;
129 }
130
131 return std::get<double>(value_) * std::get<double>(iv.slope);
132}

References independent_variables_.

◆ value()

PropertyDataType MaterialPropertyLib::Linear::value ( VariableArray const & variable_array,
ParameterLib::SpatialPosition const & pos,
double const t,
double const  ) const
overridevirtual

This method computes the value of a property depending linearly on the value of the given primary variable.

Reimplemented from MaterialPropertyLib::Property.

Definition at line 71 of file Linear.cpp.

74{
75 auto calculate_linearized_ratio =
76 [&variable_array, pos, t](double const initial_linearized_ratio,
77 auto const& iv)
78 {
79 double const x = iv.valueClamped(variable_array, pos, t);
80
81 return initial_linearized_ratio +
82 std::get<double>(iv.slope) *
83 (x - std::get<double>(iv.reference_condition));
84 };
85
86 double const linearized_ratio_to_reference_value =
87 std::accumulate(independent_variables_.begin(),
89 1.0,
90 calculate_linearized_ratio);
91
92 return std::get<double>(value_) * linearized_ratio_to_reference_value;
93}

References independent_variables_, and MaterialPropertyLib::Property::value_.

Member Data Documentation

◆ independent_variables_

std::vector<IndependentVariable> const MaterialPropertyLib::Linear::independent_variables_
private

Definition at line 66 of file Linear.h.

Referenced by Linear(), dValue(), and value().


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