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 70 of file Linear.cpp.

74{
75 name_ = std::move(name);
76 value_ = property_reference_value;
77}
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 142 of file Linear.cpp.

146{
147 return decltype(value_){};
148}

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 103 of file Linear.cpp.

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

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 79 of file Linear.cpp.

82{
83 auto calculate_linearized_ratio =
84 [&variable_array, pos, t](double const initial_linearized_ratio,
85 auto const& iv)
86 {
87 double const x = iv.valueClamped(variable_array, pos, t);
88
89 return initial_linearized_ratio +
90 std::get<double>(iv.slope) *
91 (x - std::get<double>(iv.reference_condition));
92 };
93
94 double const linearized_ratio_to_reference_value =
95 std::accumulate(independent_variables_.begin(),
97 1.0,
98 calculate_linearized_ratio);
99
100 return std::get<double>(value_) * linearized_ratio_to_reference_value;
101}

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: