19 #include "libmesh/tensor_tools.h" 30 #ifdef MOOSE_KOKKOS_SCOPE 31 KOKKOS_INLINE_FUNCTION
Real33() { *
this = 0; }
32 KOKKOS_INLINE_FUNCTION
Real33(
const Real & scalar) { *
this = scalar; }
33 KOKKOS_INLINE_FUNCTION
Real33(
const Real33 & tensor) { *
this = tensor; }
34 KOKKOS_INLINE_FUNCTION
Real &
operator()(
unsigned int i,
unsigned int j) {
return a[i][j]; }
35 KOKKOS_INLINE_FUNCTION
Real operator()(
unsigned int i,
unsigned int j)
const {
return a[i][j]; }
38 for (
unsigned int i = 0; i < 3; ++i)
39 for (
unsigned int j = 0; j < 3; ++j)
40 a[i][j] = tensor.
a[i][j];
46 for (
unsigned int i = 0; i < 3; ++i)
47 for (
unsigned int j = 0; j < 3; ++j)
54 for (
unsigned int i = 0; i < 3; ++i)
55 for (
unsigned int j = 0; j < 3; ++j)
56 a[i][j] += tensor.
a[i][j];
67 det =
a[0][0] *
a[1][1] -
a[0][1] *
a[1][0];
69 det =
a[0][0] * (
a[1][1] *
a[2][2] -
a[1][2] *
a[2][1]) -
70 a[0][1] * (
a[1][0] *
a[2][2] -
a[1][2] *
a[2][0]) +
71 a[0][2] * (
a[1][0] *
a[2][1] -
a[1][1] *
a[2][0]);
82 inv_mat(0, 0) = inv_det;
86 inv_mat(0, 0) =
a[1][1] * inv_det;
87 inv_mat(0, 1) = -
a[0][1] * inv_det;
88 inv_mat(1, 0) = -
a[1][0] * inv_det;
89 inv_mat(1, 1) =
a[0][0] * inv_det;
93 inv_mat(0, 0) = (
a[1][1] *
a[2][2] -
a[1][2] *
a[2][1]) * inv_det;
94 inv_mat(0, 1) = (
a[0][2] *
a[2][1] -
a[0][1] *
a[2][2]) * inv_det;
95 inv_mat(0, 2) = (
a[0][1] *
a[1][2] -
a[0][2] *
a[1][1]) * inv_det;
96 inv_mat(1, 0) = (
a[1][2] *
a[2][0] -
a[1][0] *
a[2][2]) * inv_det;
97 inv_mat(1, 1) = (
a[0][0] *
a[2][2] -
a[0][2] *
a[2][0]) * inv_det;
98 inv_mat(1, 2) = (
a[0][2] *
a[1][0] -
a[0][0] *
a[1][2]) * inv_det;
99 inv_mat(2, 0) = (
a[1][0] *
a[2][1] -
a[1][1] *
a[2][0]) * inv_det;
100 inv_mat(2, 1) = (
a[0][1] *
a[2][0] -
a[0][0] *
a[2][1]) * inv_det;
101 inv_mat(2, 2) = (
a[0][0] *
a[1][1] -
a[0][1] *
a[1][0]) * inv_det;
110 for (
unsigned int i = 0; i < 3; ++i)
111 for (
unsigned int j = 0; j < 3; ++j)
112 tr_mat(i, j) =
a[j][i];
123 #ifdef MOOSE_KOKKOS_SCOPE 130 KOKKOS_INLINE_FUNCTION
Real3(
const Real & scalar)
142 KOKKOS_INLINE_FUNCTION
Real3(
const Real & x,
const Real & y,
const Real & z)
215 return v[0] * vector.
v[0] +
v[1] * vector.
v[1] +
v[2] * vector.
v[2];
221 cross.
v[0] =
v[1] * vector.
v[2] -
v[2] * vector.
v[1];
222 cross.
v[1] =
v[2] * vector.
v[0] -
v[0] * vector.
v[2];
223 cross.
v[2] =
v[0] * vector.
v[1] -
v[1] * vector.
v[0];
231 for (
unsigned int i = 0; i < 3; ++i)
232 for (
unsigned int j = 0; j < 3; ++j)
233 tensor(i, j) =
v[i] * vector.
v[j];
240 #ifdef MOOSE_KOKKOS_SCOPE 241 KOKKOS_INLINE_FUNCTION Real3
244 return {left * right.
v[0], left * right.
v[1], left * right.
v[2]};
246 KOKKOS_INLINE_FUNCTION Real3
249 return {left.
v[0] * right, left.
v[1] * right, left.
v[2] * right};
251 KOKKOS_INLINE_FUNCTION
Real 254 return left.
v[0] * right.
v[0] + left.
v[1] * right.
v[1] + left.
v[2] * right.
v[2];
256 KOKKOS_INLINE_FUNCTION Real3
259 return {left(0, 0) * right.
v[0] + left(0, 1) * right.
v[1] + left(0, 2) * right.
v[2],
260 left(1, 0) * right.
v[0] + left(1, 1) * right.
v[1] + left(1, 2) * right.
v[2],
261 left(2, 0) * right.
v[0] + left(2, 1) * right.
v[1] + left(2, 2) * right.
v[2]};
263 KOKKOS_INLINE_FUNCTION Real33
268 for (
unsigned int i = 0; i < 3; ++i)
269 for (
unsigned int j = 0; j < 3; ++j)
270 for (
unsigned int k = 0; k < 3; ++k)
271 mul(i, j) += left(i, k) * right(k, j);
275 KOKKOS_INLINE_FUNCTION Real3
278 return {left + right.
v[0], left + right.
v[1], left + right.
v[2]};
280 KOKKOS_INLINE_FUNCTION Real3
283 return {left.
v[0] + right, left.
v[1] + right, left.
v[2] + right};
285 KOKKOS_INLINE_FUNCTION Real3
288 return {left.
v[0] + right.
v[0], left.
v[1] + right.
v[1], left.
v[2] + right.
v[2]};
290 KOKKOS_INLINE_FUNCTION Real3
293 return {left - right.
v[0], left - right.
v[1], left - right.
v[2]};
295 KOKKOS_INLINE_FUNCTION Real3
298 return {left.
v[0] - right, left.
v[1] - right, left.
v[2] - right};
300 KOKKOS_INLINE_FUNCTION Real3
303 return {left.
v[0] - right.
v[0], left.
v[1] - right.
v[1], left.
v[2] - right.
v[2]};
307 template <
typename T1,
typename T2>
313 template <
typename T3,
typename T4>
323 template <
typename T1,
typename T2>
327 return std::make_pair(left.first, left.second) < std::make_pair(right.first, right.second);
KOKKOS_INLINE_FUNCTION Real3 operator*(const Real left, const Real3 right)
KOKKOS_INLINE_FUNCTION Real3(const Real &x, const Real &y, const Real &z)
KOKKOS_INLINE_FUNCTION Real norm()
KOKKOS_INLINE_FUNCTION Real3 operator+(const Real left, const Real3 right)
KOKKOS_INLINE_FUNCTION Real operator()(unsigned int i, unsigned int j) const
KOKKOS_INLINE_FUNCTION Real3(const Real &scalar)
KOKKOS_INLINE_FUNCTION Real33()
static constexpr std::size_t dim
This is the dimension of all vector and tensor datastructures used in MOOSE.
KOKKOS_INLINE_FUNCTION Real3 cross_product(const Real3 vector)
KOKKOS_INLINE_FUNCTION void operator+=(const Real scalar)
KOKKOS_INLINE_FUNCTION Real dot_product(const Real3 vector)
Real3 & operator=(const libMesh::TypeVector< Real > &vector)
auto & operator=(const std::pair< T3, T4 > pair)
KOKKOS_INLINE_FUNCTION Real33 cartesian_product(const Real3 vector)
KOKKOS_INLINE_FUNCTION Real operator()(unsigned int i) const
KOKKOS_INLINE_FUNCTION Real3 & operator=(const Real3 &vector)
KOKKOS_INLINE_FUNCTION void operator+=(const Real33 tensor)
KOKKOS_INLINE_FUNCTION void operator-=(const Real3 vector)
KOKKOS_INLINE_FUNCTION Real33 transpose()
KOKKOS_INLINE_FUNCTION Real3(const Real3 &vector)
KOKKOS_INLINE_FUNCTION Real33 & operator=(const Real33 &tensor)
KOKKOS_INLINE_FUNCTION Real3 operator-(const Real left, const Real3 right)
Real3(const libMesh::TypeVector< Real > &vector)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
KOKKOS_INLINE_FUNCTION Real determinant(const unsigned int dim=3)
CTSub CT_OPERATOR_BINARY CTMul CTCompareLess CTCompareGreater CTCompareEqual _arg template * sqrt(_arg)) *_arg.template D< dtag >()) CT_SIMPLE_UNARY_FUNCTION(tanh
KOKKOS_INLINE_FUNCTION Real3 & operator=(const Real scalar)
KOKKOS_INLINE_FUNCTION Real33(const Real33 &tensor)
KOKKOS_INLINE_FUNCTION Real & operator()(unsigned int i, unsigned int j)
KOKKOS_INLINE_FUNCTION Real33 & operator=(const Real scalar)
MOOSE now contains C++17 code, so give a reasonable error message stating what the user can do to add...
KOKKOS_INLINE_FUNCTION Real3()
KOKKOS_INLINE_FUNCTION void operator*=(const Real scalar)
KOKKOS_INLINE_FUNCTION void operator-=(const Real scalar)
KOKKOS_INLINE_FUNCTION Real & operator()(unsigned int i)
KOKKOS_INLINE_FUNCTION void operator+=(const Real3 vector)
KOKKOS_INLINE_FUNCTION Real33 inverse(const unsigned int dim=3)
KOKKOS_INLINE_FUNCTION Real33(const Real &scalar)