11 T data[(Tensor_Dim * (Tensor_Dim - 1)) / 2];
16 static_assert(
sizeof...(d) ==
sizeof(
data) /
sizeof(
T),
17 "Incorrect number of Arguments. Constructor should "
18 "initialize the entire Tensor");
35 if(
N1 >= Tensor_Dim || N1 < 0 || N2 >= Tensor_Dim || N2 < 0 || N1 >=
N2)
38 s <<
"Bad index in Tensor2_antisymmetric<T," << Tensor_Dim
39 <<
">.operator(" <<
N1 <<
"," <<
N2 <<
")" << std::endl;
40 throw std::out_of_range(s.str());
43 return data[(
N2 - 1) + (
N1 * (2 * (Tensor_Dim - 1) -
N1 - 1)) / 2];
49 if(
N1 >= Tensor_Dim || N1 < 0 || N2 >= Tensor_Dim ||
N2 < 0)
52 s <<
"Bad index in Tensor2_antisymmetric<T," << Tensor_Dim
53 <<
">.operator(" <<
N1 <<
"," <<
N2 <<
") const" << std::endl;
54 throw std::out_of_range(s.str());
61 + (
N1 * (2 * (Tensor_Dim - 1) -
N1 - 1)) / 2]
63 + (
N2 * (2 * (Tensor_Dim - 1) -
N2 - 1)) / 2]);
74 template <
char i,
char j,
int Dim0,
int Dim1>
75 typename std::enable_if<(Tensor_Dim >= Dim0 && Tensor_Dim >= Dim1),
77 T, Dim0, Dim1,
i,
j>>::type
84 template <
char i,
char j,
int Dim0,
int Dim1>
86 (Tensor_Dim >= Dim0 && Tensor_Dim >= Dim1),
98 template <
char i,
char j,
int Dim>
106 T, Dim,
i,
j>(*this);
109 template <
char i,
char j,
int Dim>
127 template <
char i,
int N,
int Dim>
129 (Tensor_Dim >= Dim && Tensor_Dim >
N),
140 template <
char i,
int N,
int Dim>
142 (Tensor_Dim >= Dim && Tensor_Dim >
N),
153 template <
char i,
int N,
int Dim>
155 (Tensor_Dim >
N && Tensor_Dim >= Dim),
166 template <
char i,
int N,
int Dim>
168 (Tensor_Dim >
N && Tensor_Dim >= Dim),
181 template <
char i,
int Dim>
194 template <
char i,
int Dim>
216 template <
char i,
int Dim>
223 template <
char i,
int Dim>
237 template <
class T,
int Tensor_Dim>
243 for(
int j =
i + 1;
j + 1 < Tensor_Dim; ++
j)
245 os <<
t(
i,
j) <<
',';
249 os <<
t(
i, Tensor_Dim - 1);
256template <
class T,
int Tensor_Dim>
258operator<<(std::ostream &os,
262 for(
int i = 0;
i + 2 < Tensor_Dim; ++
i)
277 template <
class T,
int Tensor_Dim>
284 for(
int j =
i + 1;
j + 1 < Tensor_Dim; ++
j)
286 is >>
t.unsafe(
i,
j) >>
c;
290 is >>
t.unsafe(
i, Tensor_Dim - 1);
297template <
class T,
int Tensor_Dim>
303 for(
int i = 0;
i + 2 < Tensor_Dim; ++
i)
T & unsafe(const int N1, const int N2)
T data[(Tensor_Dim *(Tensor_Dim - 1))/2]
Tensor2_antisymmetric(U... d)
T operator()(const int N1, const int N2) const
FTensor::Index< 'i', SPACE_DIM > i
const double c
speed of light (cm/ns)
FTensor::Index< 'j', 3 > j
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)
std::istream & Tensor2_antisymmetric_istream_row(std::istream &is, FTensor::Tensor2_antisymmetric< T, Tensor_Dim > &t, const int &i)
std::ostream & Tensor2_antisymmetric_ostream_row(std::ostream &os, const FTensor::Tensor2_antisymmetric< T, Tensor_Dim > &t, const int &i)
constexpr double t
plate stiffness