13#ifndef dealii_transformations_h
14#define dealii_transformations_h
26 namespace Transformations
54 template <
typename Number>
87 template <
typename Number>
111 namespace Contravariant
131 template <
int dim,
typename Number>
150 template <
int dim,
typename Number>
170 template <
int dim,
typename Number>
189 template <
int dim,
typename Number>
209 template <
int dim,
typename Number>
234 template <
int dim,
typename Number>
253 template <
int dim,
typename Number>
272 template <
int dim,
typename Number>
291 template <
int dim,
typename Number>
310 template <
int dim,
typename Number>
356 template <
int dim,
typename Number>
375 template <
int dim,
typename Number>
395 template <
int dim,
typename Number>
414 template <
int dim,
typename Number>
434 template <
int dim,
typename Number>
459 template <
int dim,
typename Number>
478 template <
int dim,
typename Number>
497 template <
int dim,
typename Number>
516 template <
int dim,
typename Number>
535 template <
int dim,
typename Number>
570 template <
int dim,
typename Number>
590 template <
int dim,
typename Number>
611 template <
int dim,
typename Number>
632 template <
int dim,
typename Number>
654 template <
int dim,
typename Number>
681 template <
int dim,
typename Number>
701 template <
int dim,
typename Number>
721 template <
int dim,
typename Number>
742 template <
int dim,
typename Number>
763 template <
int dim,
typename Number>
798 template <
int dim,
typename Number>
820 template <
int dim,
typename Number>
836 template <
int dim,
typename Number>
852 template <
int dim,
typename Number>
867 template <
int dim,
typename Number>
883 template <
int dim,
typename Number>
899template <
typename Number>
907 const Number rotation[2][2] = {{cos(angle), -sin(angle)},
908 {
sin(angle),
cos(angle)}};
914template <
typename Number>
926 ExcMessage(
"The supplied axial vector is not a unit vector."));
930 const Number rotation[3][3] = {{t * axis[0] * axis[0] + c,
931 t * axis[0] * axis[1] - s * axis[2],
932 t * axis[0] * axis[2] + s * axis[1]},
933 {t * axis[0] * axis[1] + s * axis[2],
934 t * axis[1] * axis[1] + c,
935 t * axis[1] * axis[2] - s * axis[0]},
936 {t * axis[0] * axis[2] - s * axis[1],
937 t * axis[1] * axis[2] + s * axis[0],
938 t * axis[2] * axis[2] + c}};
944template <
int dim,
typename Number>
955template <
int dim,
typename Number>
966template <
int dim,
typename Number>
977template <
int dim,
typename Number>
988template <
int dim,
typename Number>
999template <
int dim,
typename Number>
1010template <
int dim,
typename Number>
1021template <
int dim,
typename Number>
1032template <
int dim,
typename Number>
1043template <
int dim,
typename Number>
1054template <
int dim,
typename Number>
1066template <
int dim,
typename Number>
1078template <
int dim,
typename Number>
1090template <
int dim,
typename Number>
1102template <
int dim,
typename Number>
1114template <
int dim,
typename Number>
1124template <
int dim,
typename Number>
1134template <
int dim,
typename Number>
1145template <
int dim,
typename Number>
1155template <
int dim,
typename Number>
1166template <
int dim,
typename Number>
1176template <
int dim,
typename Number>
1186template <
int dim,
typename Number>
1197template <
int dim,
typename Number>
1207template <
int dim,
typename Number>
1218template <
int dim,
typename Number>
1228template <
int dim,
typename Number>
1238template <
int dim,
typename Number>
1249template <
int dim,
typename Number>
1259template <
int dim,
typename Number>
1270template <
int dim,
typename Number>
1275 return cofactor(F) *
N;
1279template <
int dim,
typename Number>
1284 return contract<1, 0>(B, V);
1289template <
int dim,
typename Number>
1294 return contract<1, 0>(B, contract<1, 1>(T, B));
1299template <
int dim,
typename Number>
1306 for (
unsigned int i = 0; i < dim; ++i)
1307 for (
unsigned int J = 0;
J < dim; ++
J)
1309 for (
unsigned int I_ = 0; I_ < dim; ++I_)
1310 tmp_1[i][J] += B[i][I_] * T[I_][J];
1313 for (
unsigned int i = 0; i < dim; ++i)
1314 for (
unsigned int j = i; j < dim; ++j)
1315 for (
unsigned int J = 0;
J < dim; ++
J)
1316 out[i][j] += B[j][J] * tmp_1[i][J];
1323template <
int dim,
typename Number>
1347 return contract<1, 1>(
1348 B, contract<1, 1>(B, contract<2, 1>(contract<2, 1>(H, B), B)));
1353template <
int dim,
typename Number>
1377 for (
unsigned int I_ = 0; I_ < dim; ++I_)
1378 for (
unsigned int j = 0; j < dim; ++j)
1379 for (
unsigned int K = 0;
K < dim; ++
K)
1380 for (
unsigned int L = 0;
L < dim; ++
L)
1381 for (
unsigned int J = 0;
J < dim; ++
J)
1382 tmp[I_][j][K][L] += B[j][J] * H[I_][J][K][L];
1385 tmp = contract<1, 0>(B, contract<3, 1>(tmp, B));
1389 for (
unsigned int i = 0; i < dim; ++i)
1390 for (
unsigned int j = i; j < dim; ++j)
1391 for (
unsigned int k = 0; k < dim; ++k)
1392 for (
unsigned int l = k;
l < dim; ++
l)
1393 for (
unsigned int K = 0;
K < dim; ++
K)
1394 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)
CGAL::Exact_predicates_exact_constructions_kernel_with_sqrt K
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
* * * RotationFunction< dim, Number >::RotationFunction Number(dim)
::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 > &)