7 template <
class T,
int Tensor_Dim0,
int Tensor_Dim12>
10 T data[Tensor_Dim0][(Tensor_Dim12 * (Tensor_Dim12 - 1)) / 2];
15 static_assert(
sizeof...(d) ==
sizeof(
data) /
sizeof(
T),
16 "Incorrect number of Arguments. Constructor should "
17 "initialize the entire Tensor");
35 if(
N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim12 ||
N2 < 0
36 || N3 >= Tensor_Dim12 || N3 < 0 || N2 >= N3)
39 s <<
"Bad index in Tensor3_antisymmetric<T," << Tensor_Dim0 <<
","
40 << Tensor_Dim12 <<
">.operator(" <<
N1 <<
"," <<
N2 <<
"," << N3
42 throw std::out_of_range(s.str());
45 return data[
N1][N3 - 1 + (
N2 * (2 * (Tensor_Dim12 - 1) -
N2 - 1)) / 2];
51 if(
N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim12 ||
N2 < 0
52 || N3 >= Tensor_Dim12 || N3 < 0)
55 s <<
"Bad index in Tensor3_antisymmetric<T," << Tensor_Dim0 <<
","
56 << Tensor_Dim12 <<
">.operator(" <<
N1 <<
"," <<
N2 <<
"," << N3
57 <<
") const" << std::endl;
58 throw std::out_of_range(s.str());
62 ?
data[
N1][N3 - 1 + (
N2 * (2 * (Tensor_Dim12 - 1) -
N2 - 1)) / 2]
65 + (N3 * (2 * (Tensor_Dim12 - 1) - N3 - 1)) / 2]
72 template <
char i,
char j,
char k,
int Dim0,
int Dim12>
74 (Tensor_Dim0 >= Dim0 && Tensor_Dim12 >= Dim12),
86 template <
char i,
char j,
char k,
int Dim0,
int Dim12>
88 (Tensor_Dim0 >= Dim0 && Tensor_Dim12 >= Dim12),
91 Dim12,
i,
j,
k>>::type
97 Dim12,
i,
j,
k>(*this);
T data[Tensor_Dim0][(Tensor_Dim12 *(Tensor_Dim12 - 1))/2]
Tensor3_antisymmetric(U... d)
T operator()(const int N1, const int N2, const int N3) const
T & unsafe(const int N1, const int N2, const int N3)
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
Tensors class implemented by Walter Landry.
const Tensor1_Expr< const dTensor0< T, Dim, i >, typename promote< T, double >::V, Dim, i > d(const Tensor0< T * > &a, const Index< i, Dim > index, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)