16#ifndef dealii_transformations_h
17#define dealii_transformations_h
29 namespace Transformations
57 template <
typename Number>
90 template <
typename Number>
99 template <
typename Number>
123 namespace Contravariant
143 template <
int dim,
typename Number>
162 template <
int dim,
typename Number>
182 template <
int dim,
typename Number>
201 template <
int dim,
typename Number>
221 template <
int dim,
typename Number>
246 template <
int dim,
typename Number>
265 template <
int dim,
typename Number>
284 template <
int dim,
typename Number>
303 template <
int dim,
typename Number>
322 template <
int dim,
typename Number>
368 template <
int dim,
typename Number>
387 template <
int dim,
typename Number>
407 template <
int dim,
typename Number>
426 template <
int dim,
typename Number>
446 template <
int dim,
typename Number>
471 template <
int dim,
typename Number>
490 template <
int dim,
typename Number>
509 template <
int dim,
typename Number>
528 template <
int dim,
typename Number>
547 template <
int dim,
typename Number>
582 template <
int dim,
typename Number>
602 template <
int dim,
typename Number>
623 template <
int dim,
typename Number>
644 template <
int dim,
typename Number>
666 template <
int dim,
typename Number>
693 template <
int dim,
typename Number>
713 template <
int dim,
typename Number>
733 template <
int dim,
typename Number>
754 template <
int dim,
typename Number>
775 template <
int dim,
typename Number>
810 template <
int dim,
typename Number>
832 template <
int dim,
typename Number>
848 template <
int dim,
typename Number>
864 template <
int dim,
typename Number>
879 template <
int dim,
typename Number>
895 template <
int dim,
typename Number>
911template <
typename Number>
922template <
typename Number>
926 const Number & angle)
929 ExcMessage(
"The supplied axial vector is not a unit vector."));
932 const Number t = 1. - c;
933 const Number rotation[3][3] = {{t * axis[0] * axis[0] + c,
934 t * axis[0] * axis[1] - s * axis[2],
935 t * axis[0] * axis[2] + s * axis[1]},
936 {t * axis[0] * axis[1] + s * axis[2],
937 t * axis[1] * axis[1] + c,
938 t * axis[1] * axis[2] - s * axis[0]},
939 {t * axis[0] * axis[2] - s * axis[1],
940 t * axis[1] * axis[2] + s * axis[0],
941 t * axis[2] * axis[2] + c}};
947template <
typename Number>
951 const Number & angle)
958template <
int dim,
typename Number>
969template <
int dim,
typename Number>
980template <
int dim,
typename Number>
991template <
int dim,
typename Number>
1002template <
int dim,
typename Number>
1013template <
int dim,
typename Number>
1024template <
int dim,
typename Number>
1035template <
int dim,
typename Number>
1046template <
int dim,
typename Number>
1057template <
int dim,
typename Number>
1068template <
int dim,
typename Number>
1080template <
int dim,
typename Number>
1092template <
int dim,
typename Number>
1104template <
int dim,
typename Number>
1116template <
int dim,
typename Number>
1128template <
int dim,
typename Number>
1138template <
int dim,
typename Number>
1148template <
int dim,
typename Number>
1159template <
int dim,
typename Number>
1169template <
int dim,
typename Number>
1180template <
int dim,
typename Number>
1185 return Number(1.0 /
determinant(F)) * Contravariant::push_forward(V, F);
1190template <
int dim,
typename Number>
1195 return Number(1.0 /
determinant(F)) * Contravariant::push_forward(T, F);
1200template <
int dim,
typename Number>
1206 return Number(1.0 /
determinant(F)) * Contravariant::push_forward(T, F);
1211template <
int dim,
typename Number>
1216 return Number(1.0 /
determinant(F)) * Contravariant::push_forward(H, F);
1221template <
int dim,
typename Number>
1227 return Number(1.0 /
determinant(F)) * Contravariant::push_forward(H, F);
1232template <
int dim,
typename Number>
1237 return Number(
determinant(F)) * Contravariant::pull_back(v, F);
1242template <
int dim,
typename Number>
1247 return Number(
determinant(F)) * Contravariant::pull_back(t, F);
1252template <
int dim,
typename Number>
1258 return Number(
determinant(F)) * Contravariant::pull_back(t, F);
1263template <
int dim,
typename Number>
1268 return Number(
determinant(F)) * Contravariant::pull_back(h, F);
1273template <
int dim,
typename Number>
1279 return Number(
determinant(F)) * Contravariant::pull_back(h, F);
1284template <
int dim,
typename Number>
1293template <
int dim,
typename Number>
1298 return contract<1, 0>(B, V);
1303template <
int dim,
typename Number>
1308 return contract<1, 0>(B, contract<1, 1>(T, B));
1313template <
int dim,
typename Number>
1320 for (
unsigned int i = 0; i < dim; ++i)
1321 for (
unsigned int J = 0; J < dim; ++J)
1323 for (
unsigned int I_ = 0; I_ < dim; ++I_)
1324 tmp_1[i][J] += B[i][I_] * T[I_][J];
1327 for (
unsigned int i = 0; i < dim; ++i)
1328 for (
unsigned int j = i; j < dim; ++j)
1329 for (
unsigned int J = 0; J < dim; ++J)
1330 out[i][j] += B[j][J] * tmp_1[i][J];
1337template <
int dim,
typename Number>
1361 return contract<1, 1>(
1362 B, contract<1, 1>(B, contract<2, 1>(contract<2, 1>(H, B), B)));
1367template <
int dim,
typename Number>
1391 for (
unsigned int I_ = 0; I_ < dim; ++I_)
1392 for (
unsigned int j = 0; j < dim; ++j)
1393 for (
unsigned int K = 0; K < dim; ++K)
1394 for (
unsigned int L = 0; L < dim; ++L)
1395 for (
unsigned int J = 0; J < dim; ++J)
1396 tmp[I_][j][K][L] += B[j][J] * H[I_][J][K][L];
1399 tmp = contract<1, 0>(B, contract<3, 1>(tmp, B));
1403 for (
unsigned int i = 0; i < dim; ++i)
1404 for (
unsigned int j = i; j < dim; ++j)
1405 for (
unsigned int k = 0; k < dim; ++k)
1406 for (
unsigned int l = k;
l < dim; ++
l)
1407 for (
unsigned int K = 0; K < dim; ++K)
1408 out[i][j][k][l] += B[k][K] * tmp[i][j][K][l];
numbers::NumberTraits< Number >::real_type norm() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define Assert(cond, exc)
static ::ExceptionBase & ExcMessage(std::string arg1)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
::VectorizedArray< Number, width > cos(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > sin(const ::VectorizedArray< Number, width > &)
::VectorizedArray< Number, width > abs(const ::VectorizedArray< Number, width > &)
constexpr Number determinant(const SymmetricTensor< 2, dim, Number > &)
constexpr SymmetricTensor< 2, dim, Number > invert(const SymmetricTensor< 2, dim, Number > &)
constexpr Tensor< 2, dim, Number > cofactor(const Tensor< 2, dim, Number > &t)