13 #ifndef OHMMS_TENSOR_OPERATORS_H 14 #define OHMMS_TENSOR_OPERATORS_H 20 template<
class T1,
class T2,
class OP,
unsigned D>
25 for (
unsigned d = 0; d < D * D; ++d)
30 template<
class T1,
class T2,
class OP,
unsigned D>
35 for (
unsigned d = 0; d < D * D; ++d)
46 template<
class T1,
class T2,
class OP>
52 template<
class T1,
class T2,
class OP>
64 template<
class T1,
class T2,
class OP>
76 template<
class T1,
class T2,
class OP>
94 template<
class T1,
class T2,
class OP>
111 template<
class T1,
class T2,
class OP>
135 template<
class T1,
class T2,
class OP,
unsigned D>
140 for (
unsigned d = 0; d < D * (D + 1) / 2; ++d)
145 template<
class T1,
class T2,
class OP,
unsigned D>
150 for (
unsigned d = 0; d < D * (D + 1) / 2; ++d)
161 template<
class T1,
class T2,
class OP>
167 template<
class T1,
class T2,
class OP>
179 template<
class T1,
class T2,
class OP>
190 template<
class T1,
class T2,
class OP>
207 template<
class T1,
class T2,
class OP>
221 template<
class T1,
class T2,
class OP>
241 template<
class T1,
class T2,
class OP,
unsigned D>
246 for (
unsigned d = 0; d < D * (D - 1) / 2; ++d)
251 template<
class T1,
class T2,
class OP,
unsigned D>
256 for (
unsigned d = 0; d < D * (D - 1) / 2; ++d)
267 template<
class T1,
class T2,
class OP>
273 template<
class T1,
class T2,
class OP>
285 template<
class T1,
class T2,
class OP>
291 template<
class T1,
class T2,
class OP>
303 template<
class T1,
class T2,
class OP>
314 template<
class T1,
class T2,
class OP>
331 template<
class T1,
class T2,
class OP,
unsigned D>
338 for (
unsigned d = 0; d < D * D; ++d)
339 ret[d] = op(lhs[d], rhs[d]);
344 template<
class T1,
class T2,
class OP,
unsigned D>
351 for (
unsigned d = 0; d < D * D; ++d)
352 ret[d] = op(lhs[d], rhs);
357 template<
class T1,
class T2,
class OP,
unsigned D>
364 for (
unsigned d = 0; d < D * D; ++d)
365 ret[d] = op(lhs, rhs[d]);
376 template<
class T1,
class T2,
class OP>
386 template<
class T1,
class T2,
class OP>
396 template<
class T1,
class T2,
class OP>
412 template<
class T1,
class T2,
class OP>
418 return Tensor<Type_t, 2>(op(lhs[0], rhs[0]), op(lhs[1], rhs[1]), op(lhs[2], rhs[2]), op(lhs[3], rhs[3]));
422 template<
class T1,
class T2,
class OP>
428 return Tensor<Type_t, 2>(op(lhs[0], rhs), op(lhs[1], rhs), op(lhs[2], rhs), op(lhs[3], rhs));
432 template<
class T1,
class T2,
class OP>
438 return Tensor<Type_t, 2>(op(lhs, rhs[0]), op(lhs, rhs[1]), op(lhs, rhs[2]), op(lhs, rhs[3]));
448 template<
class T1,
class T2,
class OP>
454 return Tensor<Type_t, 3>(op(lhs[0], rhs[0]), op(lhs[1], rhs[1]), op(lhs[2], rhs[2]), op(lhs[3], rhs[3]),
455 op(lhs[4], rhs[4]), op(lhs[5], rhs[5]), op(lhs[6], rhs[6]), op(lhs[7], rhs[7]),
460 template<
class T1,
class T2,
class OP>
466 return Tensor<Type_t, 3>(op(lhs[0], rhs), op(lhs[1], rhs), op(lhs[2], rhs), op(lhs[3], rhs), op(lhs[4], rhs),
467 op(lhs[5], rhs), op(lhs[6], rhs), op(lhs[7], rhs), op(lhs[8], rhs));
471 template<
class T1,
class T2,
class OP>
477 return Tensor<Type_t, 3>(op(lhs, rhs[0]), op(lhs, rhs[1]), op(lhs, rhs[2]), op(lhs, rhs[3]), op(lhs, rhs[4]),
478 op(lhs, rhs[5]), op(lhs, rhs[6]), op(lhs, rhs[7]), op(lhs, rhs[8]));
488 template<
class T1,
class T2,
class OP,
unsigned D>
495 for (
unsigned d = 0; d < D * (D + 1) / 2; ++d)
496 ret[d] = op(lhs[d], rhs[d]);
501 template<
class T1,
class T2,
class OP,
unsigned D>
508 for (
unsigned d = 0; d < D * (D + 1) / 2; ++d)
509 ret[d] = op(lhs[d], rhs);
514 template<
class T1,
class T2,
class OP,
unsigned D>
521 for (
unsigned d = 0; d < D * (D + 1) / 2; ++d)
522 ret[d] = op(lhs, rhs[d]);
533 template<
class T1,
class T2,
class OP>
543 template<
class T1,
class T2,
class OP>
553 template<
class T1,
class T2,
class OP>
569 template<
class T1,
class T2,
class OP>
579 template<
class T1,
class T2,
class OP>
589 template<
class T1,
class T2,
class OP>
605 template<
class T1,
class T2,
class OP>
611 return SymTensor<Type_t, 3>(op(lhs[0], rhs[0]), op(lhs[1], rhs[1]), op(lhs[2], rhs[2]), op(lhs[3], rhs[3]),
612 op(lhs[4], rhs[4]), op(lhs[5], rhs[5]));
616 template<
class T1,
class T2,
class OP>
622 return SymTensor<Type_t, 3>(op(lhs[0], rhs), op(lhs[1], rhs), op(lhs[2], rhs), op(lhs[3], rhs), op(lhs[4], rhs),
627 template<
class T1,
class T2,
class OP>
633 return SymTensor<Type_t, 3>(op(lhs, rhs[0]), op(lhs, rhs[1]), op(lhs, rhs[2]), op(lhs, rhs[3]), op(lhs, rhs[4]),
644 template<
class T1,
class T2,
class OP,
unsigned D>
651 for (
unsigned i = 0; i < D; i++)
652 for (
unsigned j = 0; j < D; j++)
653 ret(i, j) = op(lhs(i, j), rhs(i, j));
664 template<
class T1,
class T2,
class OP,
unsigned D>
671 for (
unsigned i = 0; i < D; i++)
672 for (
unsigned j = 0; j < D; j++)
673 ret(i, j) = op(lhs(i, j), rhs(i, j));
684 template<
class T1,
class T2,
class OP,
unsigned D>
691 for (
unsigned d = 0; d < D * (D - 1) / 2; ++d)
692 ret[d] = op(lhs[d], rhs[d]);
697 template<
class T1,
class T2,
class OP,
unsigned D>
704 for (
unsigned d = 0; d < D * (D - 1) / 2; ++d)
705 ret[d] = op(lhs[d], rhs);
710 template<
class T1,
class T2,
class OP,
unsigned D>
717 for (
unsigned d = 0; d < D * (D - 1) / 2; ++d)
718 ret[d] = op(lhs, rhs[d]);
729 template<
class T1,
class T2,
class OP>
739 template<
class T1,
class T2,
class OP>
749 template<
class T1,
class T2,
class OP>
765 template<
class T1,
class T2,
class OP>
775 template<
class T1,
class T2,
class OP>
785 template<
class T1,
class T2,
class OP>
801 template<
class T1,
class T2,
class OP>
811 template<
class T1,
class T2,
class OP>
821 template<
class T1,
class T2,
class OP>
837 template<
class T,
unsigned D>
859 return a(0, 0) * a(1, 1) - a(0, 1) * a(1, 0);
868 return a(0, 0) * (a(1, 1) * a(2, 2) - a(1, 2) * a(2, 1)) + a(0, 1) * (a(1, 2) * a(2, 0) - a(1, 0) * a(2, 2)) +
869 a(0, 2) * (a(1, 0) * a(2, 1) - a(1, 1) * a(2, 0));
878 template<
class T,
unsigned D>
900 return Tensor<T, 2>(vinv * a(1, 1), -vinv * a(0, 1), -vinv * a(1, 0), vinv * a(0, 0));
919 return Tensor<T, 3>(vinv * (a(1, 1) * a(2, 2) - a(1, 2) * a(2, 1)), vinv * (a(2, 1) * a(0, 2) - a(2, 2) * a(0, 1)),
920 vinv * (a(0, 1) * a(1, 2) - a(0, 2) * a(1, 1)), vinv * (a(1, 2) * a(2, 0) - a(1, 0) * a(2, 2)),
921 vinv * (a(2, 2) * a(0, 0) - a(2, 0) * a(0, 2)), vinv * (a(0, 2) * a(1, 0) - a(0, 0) * a(1, 2)),
922 vinv * (a(1, 0) * a(2, 1) - a(1, 1) * a(2, 0)), vinv * (a(2, 0) * a(0, 1) - a(2, 1) * a(0, 0)),
923 vinv * (a(0, 0) * a(1, 1) - a(0, 1) * a(1, 0)));
955 L(0, 0) =
sqrt(a(0, 0));
956 L00Inv = 1.0 / L(0, 0);
957 L(1, 0) = a(1, 0) * L00Inv;
958 L(2, 0) = a(2, 0) * L00Inv;
959 L(1, 1) =
sqrt(a(1, 1) - L(1, 0) * L(1, 0));
960 L(2, 1) = (a(2, 1) - L(2, 0) * L(1, 0)) / L(1, 1);
961 L(2, 2) =
sqrt(a(2, 2) - (L(2, 0) * L(2, 0) + L(2, 1) * L(2, 1)));
971 template<
class T1,
class T2,
unsigned D>
978 for (
unsigned int i = 0; i < D; ++i)
979 for (
unsigned int j = 0; j < D; ++j)
981 Type_t sum = lhs(i, 0) * rhs(0, j);
982 for (
unsigned int k = 1; k < D; ++k)
983 sum += lhs(i, k) * rhs(k, j);
990 template<
class T1,
class T2>
1000 template<
class T1,
class T2>
1007 lhs(0, 0) * rhs(0, 1) + lhs(0, 1) * rhs(1, 1),
1008 lhs(1, 0) * rhs(0, 0) + lhs(1, 1) * rhs(1, 0),
1009 lhs(1, 0) * rhs(0, 1) + lhs(1, 1) * rhs(1, 1));
1013 template<
class T1,
class T2>
1019 return Tensor<Type_t, 3>(lhs(0, 0) * rhs(0, 0) + lhs(0, 1) * rhs(1, 0) + lhs(0, 2) * rhs(2, 0),
1020 lhs(0, 0) * rhs(0, 1) + lhs(0, 1) * rhs(1, 1) + lhs(0, 2) * rhs(2, 1),
1021 lhs(0, 0) * rhs(0, 2) + lhs(0, 1) * rhs(1, 2) + lhs(0, 2) * rhs(2, 2),
1022 lhs(1, 0) * rhs(0, 0) + lhs(1, 1) * rhs(1, 0) + lhs(1, 2) * rhs(2, 0),
1023 lhs(1, 0) * rhs(0, 1) + lhs(1, 1) * rhs(1, 1) + lhs(1, 2) * rhs(2, 1),
1024 lhs(1, 0) * rhs(0, 2) + lhs(1, 1) * rhs(1, 2) + lhs(1, 2) * rhs(2, 2),
1025 lhs(2, 0) * rhs(0, 0) + lhs(2, 1) * rhs(1, 0) + lhs(2, 2) * rhs(2, 0),
1026 lhs(2, 0) * rhs(0, 1) + lhs(2, 1) * rhs(1, 1) + lhs(2, 2) * rhs(2, 1),
1027 lhs(2, 0) * rhs(0, 2) + lhs(2, 1) * rhs(1, 2) + lhs(2, 2) * rhs(2, 2));
1037 template<
class T1,
class T2,
unsigned D>
1044 for (
unsigned int i = 0; i < D; ++i)
1045 for (
unsigned int j = i; j < D; ++j)
1050 sum += lhs.
HL(i, k) * rhs.
HL(j, k);
1052 sum += lhs.
HL(k, i) * rhs.
HL(j, k);
1054 sum += lhs.
HL(k, i) * rhs.
HL(k, j);
1061 template<
class T1,
class T2>
1071 template<
class T1,
class T2>
1078 lhs(0, 0) * rhs(0, 1) + lhs(0, 1) * rhs(1, 1),
1079 lhs(1, 0) * rhs(0, 0) + lhs(1, 1) * rhs(1, 0),
1080 lhs(1, 0) * rhs(0, 1) + lhs(1, 1) * rhs(1, 1));
1084 template<
class T1,
class T2>
1090 return Tensor<Type_t, 3>(lhs(0, 0) * rhs(0, 0) + lhs(0, 1) * rhs(1, 0) + lhs(0, 2) * rhs(2, 0),
1091 lhs(0, 0) * rhs(0, 1) + lhs(0, 1) * rhs(1, 1) + lhs(0, 2) * rhs(2, 1),
1092 lhs(0, 0) * rhs(0, 2) + lhs(0, 1) * rhs(1, 2) + lhs(0, 2) * rhs(2, 2),
1093 lhs(1, 0) * rhs(0, 0) + lhs(1, 1) * rhs(1, 0) + lhs(1, 2) * rhs(2, 0),
1094 lhs(1, 0) * rhs(0, 1) + lhs(1, 1) * rhs(1, 1) + lhs(1, 2) * rhs(2, 1),
1095 lhs(1, 0) * rhs(0, 2) + lhs(1, 1) * rhs(1, 2) + lhs(1, 2) * rhs(2, 2),
1096 lhs(2, 0) * rhs(0, 0) + lhs(2, 1) * rhs(1, 0) + lhs(2, 2) * rhs(2, 0),
1097 lhs(2, 0) * rhs(0, 1) + lhs(2, 1) * rhs(1, 1) + lhs(2, 2) * rhs(2, 1),
1098 lhs(2, 0) * rhs(0, 2) + lhs(2, 1) * rhs(1, 2) + lhs(2, 2) * rhs(2, 2));
1103 #endif // OHMMS_TENSOR_OPERATORS_H static AntiSymTensor< Type_t, D > apply(const AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static SymTensor< Type_t, 3 > apply(const SymTensor< T1, 3 > &lhs, T2 rhs, OP op)
static void apply(Tensor< T1, 2 > &lhs, const Tensor< T2, 2 > &rhs, OP op)
static void apply(SymTensor< T1, 3 > &lhs, T2 rhs, OP op)
typename Promote< T1, T2 >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(AntiSymTensor< T1, 2 > &lhs, const AntiSymTensor< T2, 2 > &rhs, OP op)
static Tensor< Type_t, 3 > apply(T1 lhs, const Tensor< T2, 3 > &rhs, OP op)
static void apply(Tensor< T1, 1 > &lhs, T2 rhs, OP op)
static Tensor< Type_t, D > apply(T1 lhs, const Tensor< T2, D > &rhs, OP op)
static void apply(Tensor< T1, D > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
helper functions for EinsplineSetBuilder
static Tensor< Type_t, 3 > apply(const SymTensor< T1, 3 > &lhs, const SymTensor< T2, 3 > &rhs)
static void apply(AntiSymTensor< T1, 1 > &lhs, T2 rhs, OP op)
Tensor< T, D >::Type_t det(const Tensor< T, D > &a)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, 2 > apply(T1 lhs, const Tensor< T2, 2 > &rhs, OP op)
static void apply(Tensor< T1, 3 > &lhs, const Tensor< T2, 3 > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, D > apply(const Tensor< T1, D > &lhs, T2 rhs, OP op)
static Tensor< Type_t, 2 > apply(const Tensor< T1, 2 > &lhs, const Tensor< T2, 2 > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static void apply(AntiSymTensor< T1, 3 > &lhs, T2 rhs, OP op)
static SymTensor< Type_t, 2 > apply(const SymTensor< T1, 2 > &lhs, T2 rhs, OP op)
static SymTensor< Type_t, 1 > apply(const SymTensor< T1, 1 > &lhs, T2 rhs, OP op)
static AntiSymTensor< Type_t, 3 > apply(const AntiSymTensor< T1, 3 > &lhs, const AntiSymTensor< T2, 3 > &rhs, OP op)
static AntiSymTensor< Type_t, 2 > apply(const AntiSymTensor< T1, 2 > &lhs, const AntiSymTensor< T2, 2 > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
Tensor< T, 3 > cholesky(const Tensor< T, 3 > &a)
static void apply(SymTensor< T1, 1 > &lhs, const SymTensor< T2, 1 > &rhs, OP op)
static AntiSymTensor< Type_t, 3 > apply(T1 lhs, const AntiSymTensor< T2, 3 > &rhs, OP op)
static void apply(Tensor< T1, 1 > &lhs, const Tensor< T2, 1 > &rhs, OP op)
static Tensor< Type_t, D > apply(const Tensor< T1, D > &lhs, const Tensor< T2, D > &rhs, OP op)
static Tensor< Type_t, 3 > apply(const Tensor< T1, 3 > &lhs, const Tensor< T2, 3 > &rhs)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static SymTensor< Type_t, 2 > apply(T1 lhs, const SymTensor< T2, 2 > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(SymTensor< T1, 1 > &lhs, T2 rhs, OP op)
static AntiSymTensor< Type_t, D > apply(const AntiSymTensor< T1, D > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static AntiSymTensor< Type_t, 2 > apply(T1 lhs, const AntiSymTensor< T2, 2 > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static SymTensor< Type_t, 3 > apply(T1 lhs, const SymTensor< T2, 3 > &rhs, OP op)
static Tensor< Type_t, 1 > apply(T1 lhs, const Tensor< T2, 1 > &rhs, OP op)
static void apply(SymTensor< T1, D > &lhs, const SymTensor< T2, D > &rhs, OP op)
static Tensor< Type_t, D > apply(const SymTensor< T1, D > &lhs, const SymTensor< T2, D > &rhs)
static SymTensor< Type_t, D > apply(T1 lhs, const SymTensor< T2, D > &rhs, OP op)
static Tensor< Type_t, 1 > apply(const SymTensor< T1, 1 > &lhs, const SymTensor< T2, 1 > &rhs)
Tensor<T,D> class for D by D tensor.
static Tensor< Type_t, 2 > apply(const SymTensor< T1, 2 > &lhs, const SymTensor< T2, 2 > &rhs)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static AntiSymTensor< Type_t, D > apply(T1 lhs, const AntiSymTensor< T2, D > &rhs, OP op)
static void apply(Tensor< T1, 2 > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static AntiSymTensor< Type_t, 1 > apply(const AntiSymTensor< T1, 1 > &lhs, T2 rhs, OP op)
static Tensor< Type_t, 1 > apply(const Tensor< T1, 1 > &lhs, const Tensor< T2, 1 > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, D > apply(const Tensor< T1, D > &lhs, const SymTensor< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static SymTensor< Type_t, 2 > apply(const SymTensor< T1, 2 > &lhs, const SymTensor< T2, 2 > &rhs, OP op)
static void apply(AntiSymTensor< T1, D > &lhs, T2 rhs, OP op)
static void apply(SymTensor< T1, 2 > &lhs, T2 rhs, OP op)
static SymTensor< Type_t, 1 > apply(T1 lhs, const SymTensor< T2, 1 > &rhs, OP op)
static void apply(AntiSymTensor< T1, D > &lhs, const AntiSymTensor< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(AntiSymTensor< T1, 1 > &lhs, const AntiSymTensor< T2, 1 > &rhs, OP op)
static SymTensor< Type_t, D > apply(const SymTensor< T1, D > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static SymTensor< Type_t, D > apply(const SymTensor< T1, D > &lhs, const SymTensor< T2, D > &rhs, OP op)
static AntiSymTensor< Type_t, 3 > apply(const AntiSymTensor< T1, 3 > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, 3 > apply(const Tensor< T1, 3 > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static Tensor< Type_t, 2 > apply(const Tensor< T1, 2 > &lhs, T2 rhs, OP op)
static void apply(SymTensor< T1, 3 > &lhs, const SymTensor< T2, 3 > &rhs, OP op)
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
static void apply(SymTensor< T1, 2 > &lhs, const SymTensor< T2, 2 > &rhs, OP op)
static AntiSymTensor< Type_t, 2 > apply(const AntiSymTensor< T1, 2 > &lhs, T2 rhs, OP op)
Tensor< T, D > inverse(const Tensor< T, D > &a)
static AntiSymTensor< Type_t, 1 > apply(const AntiSymTensor< T1, 1 > &lhs, const AntiSymTensor< T2, 1 > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(Tensor< T1, D > &lhs, const Tensor< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
Type_t HL(unsigned int hi, unsigned int lo) const
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, D > apply(const Tensor< T1, D > &lhs, const Tensor< T2, D > &rhs)
static void apply(AntiSymTensor< T1, 3 > &lhs, const AntiSymTensor< T2, 3 > &rhs, OP op)
static Tensor< Type_t, 3 > apply(const Tensor< T1, 3 > &lhs, const Tensor< T2, 3 > &rhs, OP op)
static void apply(AntiSymTensor< T1, 2 > &lhs, T2 rhs, OP op)
static SymTensor< Type_t, 3 > apply(const SymTensor< T1, 3 > &lhs, const SymTensor< T2, 3 > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, D > apply(const SymTensor< T1, D > &lhs, const Tensor< T2, D > &rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static AntiSymTensor< Type_t, 1 > apply(T1 lhs, const AntiSymTensor< T2, 1 > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static Tensor< Type_t, 1 > apply(const Tensor< T1, 1 > &lhs, const Tensor< T2, 1 > &rhs)
static void apply(SymTensor< T1, D > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static SymTensor< Type_t, 1 > apply(const SymTensor< T1, 1 > &lhs, const SymTensor< T2, 1 > &rhs, OP op)
typename BinaryReturn< T1, T2, OpMultiply >::Type_t Type_t
static Tensor< Type_t, 2 > apply(const Tensor< T1, 2 > &lhs, const Tensor< T2, 2 > &rhs)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static void apply(Tensor< T1, 3 > &lhs, T2 rhs, OP op)
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
typename BinaryReturn< T1, T2, OP >::Type_t Type_t
static Tensor< Type_t, 1 > apply(const Tensor< T1, 1 > &lhs, T2 rhs, OP op)