Loading [MathJax]/jax/output/HTML-CSS/config.js
OGS
MaterialPropertyLib::Function::Implementation< D > Class Template Reference

Detailed Description

template<int D>
class MaterialPropertyLib::Function::Implementation< D >

Definition at line 50 of file Function.h.

Collaboration diagram for MaterialPropertyLib::Function::Implementation< D >:
[legend]

Public Types

using Expression = exprtk::expression<double>
 

Public Member Functions

 Implementation (std::vector< std::string > const &variables, std::vector< std::string > const &value_string_expressions, std::vector< std::pair< std::string, std::vector< std::string > > > const &dvalue_string_expressions)
 

Public Attributes

std::vector< Expressionvalue_expressions
 
std::vector< std::pair< Variable, std::vector< Expression > > > dvalue_expressions
 
VariableArray variable_array
 
bool spatial_position_is_required = false
 

Private Member Functions

exprtk::symbol_table< double > createSymbolTable (std::vector< std::string > const &variables)
 

Member Typedef Documentation

◆ Expression

template<int D>
using MaterialPropertyLib::Function::Implementation< D >::Expression = exprtk::expression<double>

Definition at line 53 of file Function.cpp.

Constructor & Destructor Documentation

◆ Implementation()

template<int D>
MaterialPropertyLib::Function::Implementation< D >::Implementation ( std::vector< std::string > const & variables,
std::vector< std::string > const & value_string_expressions,
std::vector< std::pair< std::string, std::vector< std::string > > > const & dvalue_string_expressions )

Definition at line 151 of file Function.cpp.

156{
157 auto symbol_table = createSymbolTable(variables);
158
159 // value expressions.
161 compileExpressions(symbol_table, value_string_expressions);
162
163 // dValue expressions.
164 for (auto const& [variable_name, string_expressions] :
165 dvalue_string_expressions)
166 {
167 dvalue_expressions.emplace_back(
168 convertStringToVariable(variable_name),
169 compileExpressions(symbol_table, string_expressions));
170 }
171}
std::vector< Expression > value_expressions
Definition Function.cpp:71
exprtk::symbol_table< double > createSymbolTable(std::vector< std::string > const &variables)
Definition Function.cpp:86
std::vector< std::pair< Variable, std::vector< Expression > > > dvalue_expressions
Definition Function.cpp:76
static std::vector< exprtk::expression< T > > compileExpressions(exprtk::symbol_table< T > &symbol_table, std::vector< std::string > const &string_expressions)
Definition Function.cpp:29
Variable convertStringToVariable(std::string const &string)

References MaterialPropertyLib::compileExpressions(), and MaterialPropertyLib::convertStringToVariable().

Member Function Documentation

◆ createSymbolTable()

template<int D>
exprtk::symbol_table< double > MaterialPropertyLib::Function::Implementation< D >::createSymbolTable ( std::vector< std::string > const & variables)
private

Create symbol table for given variables and populates the variable_array as needed.

Definition at line 86 of file Function.cpp.

88{
89 exprtk::symbol_table<double> symbol_table;
90 symbol_table.add_constants();
91
92 symbol_table.create_variable("t");
93
94 for (auto const& v : variables)
95 {
96 if (v == "t")
97 {
98 symbol_table.create_variable("t");
99 }
100 else if (v == "x")
101 {
102 symbol_table.create_variable("x");
104 }
105 else if (v == "y")
106 {
107 symbol_table.create_variable("y");
109 }
110 else if (v == "z")
111 {
112 symbol_table.create_variable("z");
114 }
115 else
116 {
117 auto add_scalar = [&v, &symbol_table](double& value)
118 { symbol_table.add_variable(v, value); };
119
120 auto add_vector =
121 [&v, &symbol_table](double* ptr, std::size_t const size)
122 { symbol_table.add_vector(v, ptr, size); };
123
124 auto add_any_variable = BaseLib::Overloaded{
125 [&add_scalar](VariableArray::Scalar* address)
126 { add_scalar(*address); },
127 [&add_vector](VariableArray::KelvinVector* address)
128 {
129 auto constexpr size =
131 auto& result = address->template emplace<
132 Eigen::Matrix<double, size, 1>>();
133 add_vector(result.data(), size);
134 },
135 [&add_vector](VariableArray::DeformationGradient* address)
136 {
137 auto constexpr size = MathLib::VectorizedTensor::size(D);
138 auto& result = address->template emplace<
139 Eigen::Matrix<double, size, 1>>();
140 add_vector(result.data(), size);
141 }};
142
143 Variable const variable = convertStringToVariable(v);
144 variable_array.visitVariable(add_any_variable, variable);
145 }
146 }
147 return symbol_table;
148}
virtual PropertyDataType value() const
Definition Property.cpp:76
std::variant< std::monostate, Eigen::Vector< double, 5 >, Eigen::Vector< double, 9 > > DeformationGradient
std::variant< std::monostate, Eigen::Vector< double, 4 >, Eigen::Vector< double, 6 > > KelvinVector
auto visitVariable(Visitor &&visitor, Variable const variable)
constexpr int kelvin_vector_dimensions(int const displacement_dim)
Kelvin vector dimensions for given displacement dimension.
constexpr int size(int const displacement_dim)
Vectorized tensor size for given displacement dimension.

References MaterialPropertyLib::convertStringToVariable(), MathLib::KelvinVector::kelvin_vector_dimensions(), and MathLib::VectorizedTensor::size().

Member Data Documentation

◆ dvalue_expressions

template<int D>
std::vector<std::pair<Variable, std::vector<Expression> > > MaterialPropertyLib::Function::Implementation< D >::dvalue_expressions

Derivative expressions with respect to the variable. Multiple expressions are representing vector-valued functions.

Definition at line 76 of file Function.cpp.

◆ spatial_position_is_required

template<int D>
bool MaterialPropertyLib::Function::Implementation< D >::spatial_position_is_required = false

Definition at line 82 of file Function.cpp.

◆ value_expressions

template<int D>
std::vector<Expression> MaterialPropertyLib::Function::Implementation< D >::value_expressions

Value expressions. Multiple expressions are representing vector-valued functions.

Definition at line 71 of file Function.cpp.

◆ variable_array

template<int D>
VariableArray MaterialPropertyLib::Function::Implementation< D >::variable_array
mutable

Stores values for evaluation of vectorial quantities. Needed for constant pointers for exprtk.

Definition at line 80 of file Function.cpp.


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