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];
58 KOKKOS_INLINE_FUNCTION
void identity(
const unsigned int dim = 3)
62 for (
unsigned int i = 0; i <
dim; ++i)
74 det =
a[0][0] *
a[1][1] -
a[0][1] *
a[1][0];
76 det =
a[0][0] * (
a[1][1] *
a[2][2] -
a[1][2] *
a[2][1]) -
77 a[0][1] * (
a[1][0] *
a[2][2] -
a[1][2] *
a[2][0]) +
78 a[0][2] * (
a[1][0] *
a[2][1] -
a[1][1] *
a[2][0]);
89 inv_mat(0, 0) = inv_det;
93 inv_mat(0, 0) =
a[1][1] * inv_det;
94 inv_mat(0, 1) = -
a[0][1] * inv_det;
95 inv_mat(1, 0) = -
a[1][0] * inv_det;
96 inv_mat(1, 1) =
a[0][0] * inv_det;
100 inv_mat(0, 0) = (
a[1][1] *
a[2][2] -
a[1][2] *
a[2][1]) * inv_det;
101 inv_mat(0, 1) = (
a[0][2] *
a[2][1] -
a[0][1] *
a[2][2]) * inv_det;
102 inv_mat(0, 2) = (
a[0][1] *
a[1][2] -
a[0][2] *
a[1][1]) * inv_det;
103 inv_mat(1, 0) = (
a[1][2] *
a[2][0] -
a[1][0] *
a[2][2]) * inv_det;
104 inv_mat(1, 1) = (
a[0][0] *
a[2][2] -
a[0][2] *
a[2][0]) * inv_det;
105 inv_mat(1, 2) = (
a[0][2] *
a[1][0] -
a[0][0] *
a[1][2]) * inv_det;
106 inv_mat(2, 0) = (
a[1][0] *
a[2][1] -
a[1][1] *
a[2][0]) * inv_det;
107 inv_mat(2, 1) = (
a[0][1] *
a[2][0] -
a[0][0] *
a[2][1]) * inv_det;
108 inv_mat(2, 2) = (
a[0][0] *
a[1][1] -
a[0][1] *
a[1][0]) * inv_det;
117 for (
unsigned int i = 0; i < 3; ++i)
118 for (
unsigned int j = 0; j < 3; ++j)
119 tr_mat(i, j) =
a[j][i];
130 #ifdef MOOSE_KOKKOS_SCOPE 137 KOKKOS_INLINE_FUNCTION
Real3(
const Real & scalar)
149 KOKKOS_INLINE_FUNCTION
Real3(
const Real & x,
const Real & y,
const Real & z)
222 return v[0] * vector.
v[0] +
v[1] * vector.
v[1] +
v[2] * vector.
v[2];
228 cross.
v[0] =
v[1] * vector.
v[2] -
v[2] * vector.
v[1];
229 cross.
v[1] =
v[2] * vector.
v[0] -
v[0] * vector.
v[2];
230 cross.
v[2] =
v[0] * vector.
v[1] -
v[1] * vector.
v[0];
238 for (
unsigned int i = 0; i < 3; ++i)
239 for (
unsigned int j = 0; j < 3; ++j)
240 tensor(i, j) =
v[i] * vector.
v[j];
247 #ifdef MOOSE_KOKKOS_SCOPE 248 KOKKOS_INLINE_FUNCTION Real3
251 return {left * right.
v[0], left * right.
v[1], left * right.
v[2]};
253 KOKKOS_INLINE_FUNCTION Real3
256 return {left.
v[0] * right, left.
v[1] * right, left.
v[2] * right};
258 KOKKOS_INLINE_FUNCTION
Real 261 return left.
v[0] * right.
v[0] + left.
v[1] * right.
v[1] + left.
v[2] * right.
v[2];
263 KOKKOS_INLINE_FUNCTION Real3
266 return {left(0, 0) * right.
v[0] + left(0, 1) * right.
v[1] + left(0, 2) * right.
v[2],
267 left(1, 0) * right.
v[0] + left(1, 1) * right.
v[1] + left(1, 2) * right.
v[2],
268 left(2, 0) * right.
v[0] + left(2, 1) * right.
v[1] + left(2, 2) * right.
v[2]};
270 KOKKOS_INLINE_FUNCTION Real33
275 for (
unsigned int i = 0; i < 3; ++i)
276 for (
unsigned int j = 0; j < 3; ++j)
277 for (
unsigned int k = 0; k < 3; ++k)
278 mul(i, j) += left(i, k) * right(k, j);
282 KOKKOS_INLINE_FUNCTION Real3
285 return {left + right.
v[0], left + right.
v[1], left + right.
v[2]};
287 KOKKOS_INLINE_FUNCTION Real3
290 return {left.
v[0] + right, left.
v[1] + right, left.
v[2] + right};
292 KOKKOS_INLINE_FUNCTION Real3
295 return {left.
v[0] + right.
v[0], left.
v[1] + right.
v[1], left.
v[2] + right.
v[2]};
297 KOKKOS_INLINE_FUNCTION Real3
300 return {left - right.
v[0], left - right.
v[1], left - right.
v[2]};
302 KOKKOS_INLINE_FUNCTION Real3
305 return {left.
v[0] - right, left.
v[1] - right, left.
v[2] - right};
307 KOKKOS_INLINE_FUNCTION Real3
310 return {left.
v[0] - right.
v[0], left.
v[1] - right.
v[1], left.
v[2] - right.
v[2]};
314 template <
typename T1,
typename T2>
320 template <
typename T3,
typename T4>
330 template <
typename T1,
typename T2>
334 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 void identity(const unsigned int dim=3)
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)