16#ifdef DEAL_II_WITH_SYMENGINE
33#ifdef DEAL_II_WITH_SYMENGINE
47 make_index_string(
const TableIndices<rank> &indices)
50 for (
unsigned int i = 0; i < rank; ++i)
51 out += std::to_string(indices[i]);
56 template <
int rank,
int dim>
60 template <
int rank,
int dim>
63 static Tensor<rank, dim, Expression>
64 create(
const std::string &sym)
66 Tensor<rank, dim, Expression> out;
69 const TableIndices<rank> indices(
72 Expression(sym +
"_" + internal::make_index_string(indices));
80 struct Symbol_Tensor<0, dim>
82 static Tensor<0, dim, Expression>
83 create(
const std::string &sym)
90 template <
int rank,
int dim>
91 struct Symbol_SymmetricTensor;
94 template <
int rank,
int dim>
95 struct Symbol_SymmetricTensor
97 static SymmetricTensor<2, dim, Expression>
98 create(
const std::string &sym)
100 SymmetricTensor<rank, dim, Expression> out;
103 const TableIndices<rank> indices(
106 Expression(sym +
"_" + internal::make_index_string(indices));
114 struct Symbol_SymmetricTensor<4, dim>
116 static SymmetricTensor<4, dim, Expression>
117 create(
const std::string &sym)
119 SymmetricTensor<4, dim, Expression> out;
120 for (
unsigned int i = 0;
121 i < SymmetricTensor<2, dim>::n_independent_components;
123 for (
unsigned int j = 0;
124 j < SymmetricTensor<2, dim>::n_independent_components;
127 const TableIndices<4> indices =
128 make_rank_4_tensor_indices<dim>(i, j);
129 out[indices] = Expression(
130 sym +
"_" + internal::make_index_string(indices));
137 template <
int rank,
int dim>
138 struct Symbol_Function_Tensor;
141 template <
int rank,
int dim>
142 struct Symbol_Function_Tensor
144 static Tensor<rank, dim, Expression>
145 create(
const std::string &sym,
148 Tensor<rank, dim, Expression> out;
153 const TableIndices<rank> indices(
156 Expression(sym +
"_" + internal::make_index_string(indices),
165 struct Symbol_Function_Tensor<0, dim>
167 static Tensor<0, dim, Expression>
168 create(
const std::string &sym,
176 template <
int rank,
int dim>
177 struct Symbol_Function_SymmetricTensor;
180 template <
int rank,
int dim>
181 struct Symbol_Function_SymmetricTensor
183 static SymmetricTensor<2, dim, Expression>
184 create(
const std::string &sym,
187 SymmetricTensor<rank, dim, Expression> out;
192 const TableIndices<rank> indices(
195 Expression(sym +
"_" + internal::make_index_string(indices),
204 struct Symbol_Function_SymmetricTensor<4, dim>
206 static SymmetricTensor<4, dim, Expression>
207 create(
const std::string &sym,
210 SymmetricTensor<4, dim, Expression> out;
213 for (
unsigned int i = 0;
214 i < SymmetricTensor<2, dim>::n_independent_components;
216 for (
unsigned int j = 0;
217 j < SymmetricTensor<2, dim>::n_independent_components;
220 const TableIndices<4> indices =
221 make_rank_4_tensor_indices<dim>(i, j);
223 Expression(sym +
"_" + internal::make_index_string(indices),
234 Tensor<1, dim, Expression>
237 return internal::Symbol_Tensor<1, dim>::create(sym);
247 return internal::Symbol_Function_Tensor<1, dim>::create(sym, arguments);
252 template <
int rank,
int dim>
256 return internal::Symbol_Tensor<rank, dim>::create(sym);
260 template <
int rank,
int dim>
264 return internal::Symbol_SymmetricTensor<rank, dim>::create(sym);
269 template <
int rank,
int dim>
274 return internal::Symbol_Function_Tensor<rank, dim>::create(sym,
279 template <
int rank,
int dim>
282 const std::string &sym,
285 return internal::Symbol_Function_SymmetricTensor<rank, dim>::create(
295# include "differentiation/sd/symengine_tensor_operations.inst"
static constexpr TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
static constexpr unsigned int n_independent_components
static constexpr TableIndices< rank_ > unrolled_to_component_indices(const unsigned int i)
static constexpr unsigned int n_independent_components
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
SD::types::symbol_vector extract_symbols(const SD::types::substitution_map &substitution_values)
std::map< SD::Expression, SD::Expression, internal::ExpressionKeyLess > substitution_map
std::vector< SD::Expression > symbol_vector
Tensor< rank, dim, Expression > make_tensor_of_symbols(const std::string &symbol)
Expression make_symbolic_function(const std::string &symbol, const types::symbol_vector &arguments)
SymmetricTensor< rank, dim, Expression > make_symmetric_tensor_of_symbols(const std::string &symbol)
Tensor< 1, dim, Expression > make_vector_of_symbolic_functions(const std::string &symbol, const types::substitution_map &arguments)
SymmetricTensor< rank, dim, Expression > make_symmetric_tensor_of_symbolic_functions(const std::string &symbol, const types::substitution_map &arguments)
Tensor< 1, dim, Expression > make_vector_of_symbols(const std::string &symbol)
Tensor< rank, dim, Expression > make_tensor_of_symbolic_functions(const std::string &symbol, const types::substitution_map &arguments)
Expression make_symbol(const std::string &symbol)