v0.8.13
Public Member Functions | Private Attributes | List of all members
FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 > Class Template Reference

#include <src/ftensor/src/FTensor/Tensor3_antisymmetric/Tensor3_antisymmetric_value.hpp>

Public Member Functions

template<class... U>
 Tensor3_antisymmetric (U... d)
 
 Tensor3_antisymmetric ()
 
T & unsafe (const int N1, const int N2, const int N3)
 
operator() (const int N1, const int N2, const int N3) const
 
template<char i, char j, char k, int Dim0, int Dim12>
std::enable_if<(Tensor_Dim0 >=Dim0 &&Tensor_Dim12 >=Dim12), Tensor3_antisymmetric_Expr< Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >, T, Dim0, Dim12, i, j, k > >::type operator() (const Index< i, Dim0 >, const Index< j, Dim12 >, const Index< k, Dim12 >)
 
template<char i, char j, char k, int Dim0, int Dim12>
std::enable_if<(Tensor_Dim0 >=Dim0 &&Tensor_Dim12 >=Dim12), Tensor3_antisymmetric_Expr< const Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >, T, Dim0, Dim12, i, j, k > >::type operator() (const Index< i, Dim0 >, const Index< j, Dim12 >, const Index< k, Dim12 >) const
 

Private Attributes

data [Tensor_Dim0][(Tensor_Dim12 *(Tensor_Dim12 - 1))/2]
 

Detailed Description

template<class T, int Tensor_Dim0, int Tensor_Dim12>
class FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >

Definition at line 8 of file Tensor3_antisymmetric_value.hpp.

Constructor & Destructor Documentation

◆ Tensor3_antisymmetric() [1/2]

template<class T, int Tensor_Dim0, int Tensor_Dim12>
template<class... U>
FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::Tensor3_antisymmetric ( U...  d)

Definition at line 13 of file Tensor3_antisymmetric_value.hpp.

13  : data{d...}
14  {
15  static_assert(sizeof...(d) == sizeof(data) / sizeof(T),
16  "Incorrect number of Arguments. Constructor should "
17  "initialize the entire Tensor");
18  }
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)
Definition: dTensor0.hpp:27
T data[Tensor_Dim0][(Tensor_Dim12 *(Tensor_Dim12 - 1))/2]

◆ Tensor3_antisymmetric() [2/2]

template<class T, int Tensor_Dim0, int Tensor_Dim12>
FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::Tensor3_antisymmetric ( )

Definition at line 20 of file Tensor3_antisymmetric_value.hpp.

20 {}

Member Function Documentation

◆ operator()() [1/3]

template<class T, int Tensor_Dim0, int Tensor_Dim12>
T FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::operator() ( const int  N1,
const int  N2,
const int  N3 
) const

Definition at line 48 of file Tensor3_antisymmetric_value.hpp.

49  {
50 #ifdef FTENSOR_DEBUG
51  if(N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim12 || N2 < 0
52  || N3 >= Tensor_Dim12 || N3 < 0)
53  {
54  std::stringstream s;
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());
59  }
60 #endif
61  return N2 < N3
62  ? data[N1][N3 - 1 + (N2 * (2 * (Tensor_Dim12 - 1) - N2 - 1)) / 2]
63  : (N2 > N3
64  ? -data[N1][N2 - 1
65  + (N3 * (2 * (Tensor_Dim12 - 1) - N3 - 1)) / 2]
66  : 0.0);
67  }
T data[Tensor_Dim0][(Tensor_Dim12 *(Tensor_Dim12 - 1))/2]

◆ operator()() [2/3]

template<class T, int Tensor_Dim0, int Tensor_Dim12>
template<char i, char j, char k, int Dim0, int Dim12>
std::enable_if< (Tensor_Dim0 >= Dim0 && Tensor_Dim12 >= Dim12), Tensor3_antisymmetric_Expr< Tensor3_antisymmetric<T, Tensor_Dim0, Tensor_Dim12>, T, Dim0, Dim12, i, j, k> >::type FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::operator() ( const Index< i, Dim0 >  ,
const Index< j, Dim12 >  ,
const Index< k, Dim12 >   
)

Definition at line 78 of file Tensor3_antisymmetric_value.hpp.

80  {
81  return Tensor3_antisymmetric_Expr<
82  Tensor3_antisymmetric<T, Tensor_Dim0, Tensor_Dim12>, T, Dim0, Dim12, i,
83  j, k>(*this);
84  }

◆ operator()() [3/3]

template<class T, int Tensor_Dim0, int Tensor_Dim12>
template<char i, char j, char k, int Dim0, int Dim12>
std::enable_if< (Tensor_Dim0 >= Dim0 && Tensor_Dim12 >= Dim12), Tensor3_antisymmetric_Expr< const Tensor3_antisymmetric<T, Tensor_Dim0, Tensor_Dim12>, T, Dim0, Dim12, i, j, k> >::type FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::operator() ( const Index< i, Dim0 >  ,
const Index< j, Dim12 >  ,
const Index< k, Dim12 >   
) const

Definition at line 92 of file Tensor3_antisymmetric_value.hpp.

94  {
95  return Tensor3_antisymmetric_Expr<
96  const Tensor3_antisymmetric<T, Tensor_Dim0, Tensor_Dim12>, T, Dim0,
97  Dim12, i, j, k>(*this);
98  }

◆ unsafe()

template<class T, int Tensor_Dim0, int Tensor_Dim12>
T& FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::unsafe ( const int  N1,
const int  N2,
const int  N3 
)

Definition at line 32 of file Tensor3_antisymmetric_value.hpp.

33  {
34 #ifdef FTENSOR_DEBUG
35  if(N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim12 || N2 < 0
36  || N3 >= Tensor_Dim12 || N3 < 0 || N2 >= N3)
37  {
38  std::stringstream s;
39  s << "Bad index in Tensor3_antisymmetric<T," << Tensor_Dim0 << ","
40  << Tensor_Dim12 << ">.operator(" << N1 << "," << N2 << "," << N3
41  << ")" << std::endl;
42  throw std::out_of_range(s.str());
43  }
44 #endif
45  return data[N1][N3 - 1 + (N2 * (2 * (Tensor_Dim12 - 1) - N2 - 1)) / 2];
46  }
T data[Tensor_Dim0][(Tensor_Dim12 *(Tensor_Dim12 - 1))/2]

Member Data Documentation

◆ data

template<class T, int Tensor_Dim0, int Tensor_Dim12>
T FTensor::Tensor3_antisymmetric< T, Tensor_Dim0, Tensor_Dim12 >::data[Tensor_Dim0][(Tensor_Dim12 *(Tensor_Dim12 - 1))/2]
private

Definition at line 10 of file Tensor3_antisymmetric_value.hpp.


The documentation for this class was generated from the following file: