v0.13.2
Loading...
Searching...
No Matches
Tensor4_or_Tensor4.hpp
Go to the documentation of this file.
1/* Adds a Tensor4 to a Tensor4, yielding a Ddg. */
2
3#pragma once
4
5namespace FTensor
6{
7 /* Base Template */
8template <class A, class B, class T, class U, int Dim0_0, int Dim1_0,
9 int Dim2_0, int Dim3_0, int Dim0_1, int Dim1_1, int Dim2_1,
10 int Dim3_1, char i0, char j0, char k0, char l0, char i1, char j1,
11 char k1, char l1>
13
14/* A(i,j,k,l)+B(j,i,l,k)->Ddg */
15
16template <class A, class B, class T, class U, int Dim01, int Dim23, char i,
17 char j, char k, char l>
18class Tensor4_or_Tensor4<A, B, T, U, Dim01, Dim01, Dim23, Dim23, Dim01, Dim01,
19 Dim23, Dim23, i, j, k, l, j, i, l, k> {
22
23public:
24 typename promote<T, U>::V operator()(const int N1, const int N2, const int N3,
25 const int N4) const {
26 return iterA(N1, N2, N3, N4) + iterB(N2, N1, N4, N3);
27 }
28
32 : iterA(a), iterB(b) {}
33 };
34
35 template <class A, class B, class T, class U, int Dim0_0, int Dim1_0,
36 int Dim2_0, int Dim3_0, int Dim0_1, int Dim1_1, int Dim2_1,
37 int Dim3_1, char i0, char j0, char k0, char l0, char i1, char j1,
38 char k1, char l1>
39 auto operator||(const Tensor4_Expr<A, T, Dim0_0, Dim1_0, Dim2_0, Dim3_0, i0,
40 j0, k0, l0> &a,
41 const Tensor4_Expr<B, U, Dim0_1, Dim1_1, Dim2_1, Dim3_1, i1,
42 j1, k1, l1> &b) {
43 using TensorExpr =
44 Tensor4_or_Tensor4<A, B, T, U, Dim0_0, Dim1_0, Dim2_0, Dim3_0, Dim0_1,
45 Dim1_1, Dim2_1, Dim3_1, i0, j0, k0, l0, i1, j1, k1,
46 l1>;
47 static_assert(
48 !std::is_empty<TensorExpr>::value,
49 "Indexes or Dimensions are not compatible with the || operator");
50
51 return Ddg_Expr<TensorExpr, typename promote<T, U>::V, Dim0_0, Dim2_1, i0,
52 j0, k0, l0>(TensorExpr(a, b));
53 }
54}
static Number< 2 > N2
static Number< 1 > N1
constexpr double a
Tensor4_or_Tensor4(const Tensor4_Expr< A, T, Dim01, Dim01, Dim23, Dim23, i, j, k, l > &a, const Tensor4_Expr< B, U, Dim01, Dim01, Dim23, Dim23, j, i, l, k > &b)
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
const double T
Tensors class implemented by Walter Landry.
Definition: FTensor.hpp:51
Ddg_Expr< Ddg_or_Ddg< A, B, T, U, Dim, i, j, k, l >, typename promote< T, U >::V, Dim, Dim, i, k, j, l > operator||(const Ddg_Expr< A, T, Dim, Dim, i, j, k, l > &a, const Ddg_Expr< B, U, Dim, Dim, i, l, k, j > &b)
Definition: Ddg_or_Ddg.hpp:33
constexpr AssemblyType A