v0.13.1
Loading...
Searching...
No Matches
Public Member Functions | Private Attributes | List of all members
FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 > Class Template Reference

#include <src/ftensor/src/FTensor/Ddg/Ddg_value.hpp>

Inheritance diagram for FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >:
[legend]
Collaboration diagram for FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >:
[legend]

Public Member Functions

Toperator() (const int N1, const int N2, const int N3, const int N4)
 
T operator() (const int N1, const int N2, const int N3, const int N4) const
 
template<int N1, int N2, int N3, int N4>
auto & operator() (const Number< N1 > &, const Number< N2 > &, const Number< N3 > &, const Number< N4 > &)
 
template<int N1, int N2, int N3, int N4>
auto operator() (const Number< N1 > &, const Number< N2 > &, const Number< N3 > &, const Number< N4 > &) const
 
template<char i, char j, char k, char l, int Dim01, int Dim23>
std::enable_if<(Tensor_Dim01 >=Dim01 &&Tensor_Dim23 >=Dim23), Ddg_Expr< Ddg< T, Tensor_Dim01, Tensor_Dim23 >, T, Dim01, Dim23, i, j, k, l > >::type operator() (const Index< i, Dim01 >, const Index< j, Dim01 >, const Index< k, Dim23 >, const Index< l, Dim23 >)
 
template<char i, char j, char k, char l, int Dim01, int Dim23>
std::enable_if<(Tensor_Dim01 >=Dim01 &&Tensor_Dim23 >=Dim23), Ddg_Expr< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T, Dim01, Dim23, i, j, k, l > >::type operator() (const Index< i, Dim01 >, const Index< j, Dim01 >, const Index< k, Dim23 >, const Index< l, Dim23 >) const
 
template<char i, char j, int N0, int N1, int Dim>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >N1 &&Tensor_Dim23 >=Dim), Tensor2_symmetric_Expr< Ddg_number_01< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0, N1 >, T, Dim, i, j > >::type operator() (const Number< N0 >, const Number< N1 >, const Index< i, Dim >, const Index< j, Dim >) const
 
template<char i, char j, int N0, int N1, int Dim>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >N1 &&Tensor_Dim23 >=Dim), Tensor2_symmetric_Expr< Ddg_number_rhs_01< Ddg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0, N1 >, T, Dim, i, j > >::type operator() (const Number< N0 >, const Number< N1 >, const Index< i, Dim >, const Index< j, Dim >)
 
template<char i, char j, char k, int N0, int Dim1, int Dim23>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim23), Dg_Expr< Ddg_number_0< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0 >, T, Dim23, Dim1, i, j, k > >::type operator() (const Number< N0 >, const Index< k, Dim1 >, const Index< i, Dim23 >, const Index< j, Dim23 >) const
 
template<char i, char j, char k, int N0, int Dim1, int Dim23>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim23), Dg_Expr< Ddg_number_rhs_0< Ddg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0 >, T, Dim23, Dim1, i, j, k > >::type operator() (const Number< N0 >, const Index< k, Dim1 >, const Index< i, Dim23 >, const Index< j, Dim23 >)
 
template<char i, char j, int Dim>
std::enable_if<(Tensor_Dim23 >=Dim), Tensor2_symmetric_Expr< Ddg_numeral_01< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i, j > >::type operator() (const int N0, const int N1, const Index< i, Dim >, const Index< j, Dim >) const
 
template<char i, char j, int Dim>
std::enable_if<(Tensor_Dim01 >=Dim), Tensor2_symmetric_Expr< Ddg_numeral_23< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i, j > >::type operator() (const Index< i, Dim >, const Index< j, Dim >, const int N2, const int N3) const
 
template<char i, char j, int Dim1, int Dim3>
std::enable_if<(Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim3), Tensor2_Expr< Ddg_numeral_02< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim1, Dim3, i, j > >::type operator() (const int N0, const Index< i, Dim1 >, const int N2, const Index< j, Dim3 >) const
 
template<char i, int Dim>
std::enable_if<(Tensor_Dim01 >=Dim), Tensor1_Expr< Ddg_numeral_123< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i > >::type operator() (const Index< i, Dim >, const int N1, const int N2, const int N3)
 
template<char i, int Dim>
std::enable_if<(Tensor_Dim01 >=Dim), Tensor1_Expr< Ddg_numeral_123< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i > >::type operator() (const int N1, const Index< i, Dim >, const int N2, const int N3)
 
template<char i, char j, char k, int Dim1, int Dim23>
std::enable_if<(Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim23), Dg_Expr< Ddg_numeral_0< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim23, Dim1, i, j, k > >::type operator() (const int N0, const Index< k, Dim1 >, const Index< i, Dim23 >, const Index< j, Dim23 >) const
 

Private Attributes

T data [(Tensor_Dim01 *(Tensor_Dim01+1))/2][(Tensor_Dim23 *(Tensor_Dim23+1))/2]
 

Detailed Description

template<class T, int Tensor_Dim01, int Tensor_Dim23>
class FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >
Examples
ElasticityMixedFormulation.hpp, EshelbianOperators.cpp, HookeElement.cpp, HookeElement.hpp, HookeInternalStressElement.hpp, PlasticOps.hpp, PlasticOpsGeneric.hpp, PlasticOpsLargeStrains.hpp, Remodeling.cpp, free_surface.cpp, matrix_function.cpp, and simple_elasticity.cpp.

Definition at line 7 of file Ddg_value.hpp.

Member Function Documentation

◆ operator()() [1/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, int Dim>
std::enable_if<(Tensor_Dim01 >=Dim), Tensor2_symmetric_Expr< Ddg_numeral_23< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i, j > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Index< i, Dim >  ,
const Index< j, Dim >  ,
const int  N2,
const int  N3 
) const
inline

Definition at line 230 of file Ddg_value.hpp.

232 {
233 using TensorExpr
234 = Ddg_numeral_23<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T>;
235 return Tensor2_symmetric_Expr<TensorExpr, T, Dim, i, j>(
236 TensorExpr(*this, N2, N3));
237 }
static Number< 2 > N2
const double T

◆ operator()() [2/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, int Dim>
std::enable_if<(Tensor_Dim01 >=Dim), Tensor1_Expr< Ddg_numeral_123< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Index< i, Dim >  ,
const int  N1,
const int  N2,
const int  N3 
)
inline

Definition at line 262 of file Ddg_value.hpp.

263 {
264 using TensorExpr
265 = Ddg_numeral_123<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T>;
267 TensorExpr(*this, N1, N2, N3));
268 }
static Number< 1 > N1

◆ operator()() [3/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, char k, char l, int Dim01, int Dim23>
std::enable_if<(Tensor_Dim01 >=Dim01 &&Tensor_Dim23 >=Dim23), Ddg_Expr< Ddg< T, Tensor_Dim01, Tensor_Dim23 >, T, Dim01, Dim23, i, j, k, l > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Index< i, Dim01 >  ,
const Index< j, Dim01 >  ,
const Index< k, Dim23 >  ,
const Index< l, Dim23 >   
)
inline

Definition at line 126 of file Ddg_value.hpp.

128 {
129 return Ddg_Expr<Ddg<T, Tensor_Dim01, Tensor_Dim23>, T, Dim01, Dim23, i,
130 j, k, l>(*this);
131 }
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k

◆ operator()() [4/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, char k, char l, int Dim01, int Dim23>
std::enable_if<(Tensor_Dim01 >=Dim01 &&Tensor_Dim23 >=Dim23), Ddg_Expr< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T, Dim01, Dim23, i, j, k, l > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Index< i, Dim01 >  ,
const Index< j, Dim01 >  ,
const Index< k, Dim23 >  ,
const Index< l, Dim23 >   
) const
inline

Definition at line 137 of file Ddg_value.hpp.

139 {
140 return Ddg_Expr<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T, Dim01,
141 Dim23, i, j, k, l>(*this);
142 }

◆ operator()() [5/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, int Dim1, int Dim3>
std::enable_if<(Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim3), Tensor2_Expr< Ddg_numeral_02< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim1, Dim3, i, j > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const int  N0,
const Index< i, Dim1 >  ,
const int  N2,
const Index< j, Dim3 >   
) const
inline

Definition at line 246 of file Ddg_value.hpp.

248 {
249 using TensorExpr
250 = Ddg_numeral_02<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T>;
251 return Tensor2_Expr<TensorExpr, T, Dim1, Dim3, i, j>(
252 TensorExpr(*this, N0, N2));
253 }
static Number< 0 > N0

◆ operator()() [6/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, char k, int Dim1, int Dim23>
std::enable_if<(Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim23), Dg_Expr< Ddg_numeral_0< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim23, Dim1, i, j, k > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const int  N0,
const Index< k, Dim1 >  ,
const Index< i, Dim23 >  ,
const Index< j, Dim23 >   
) const
inline

Definition at line 292 of file Ddg_value.hpp.

294 {
295 using TensorExpr
296 = Ddg_numeral_0<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T>;
297 return Dg_Expr<TensorExpr, T, Dim23, Dim1, i, j, k>(
298 TensorExpr(*this, N0));
299 }

◆ operator()() [7/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, int Dim>
std::enable_if<(Tensor_Dim23 >=Dim), Tensor2_symmetric_Expr< Ddg_numeral_01< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i, j > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const int  N0,
const int  N1,
const Index< i, Dim >  ,
const Index< j, Dim >   
) const
inline

Definition at line 215 of file Ddg_value.hpp.

217 {
218 using TensorExpr
219 = Ddg_numeral_01<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T>;
220 return Tensor2_symmetric_Expr<TensorExpr, T, Dim, i, j>(
221 TensorExpr(*this, N0, N1));
222 }

◆ operator()() [8/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, int Dim>
std::enable_if<(Tensor_Dim01 >=Dim), Tensor1_Expr< Ddg_numeral_123< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T >, T, Dim, i > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const int  N1,
const Index< i, Dim >  ,
const int  N2,
const int  N3 
)
inline

Definition at line 275 of file Ddg_value.hpp.

276 {
277 using TensorExpr
278 = Ddg_numeral_123<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T>;
280 TensorExpr(*this, N1, N2, N3));
281 }

◆ operator()() [9/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
T & FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const int  N1,
const int  N2,
const int  N3,
const int  N4 
)
inline

Definition at line 17 of file Ddg_value.hpp.

18 {
19#ifdef FTENSOR_DEBUG
20 if(N1 >= Tensor_Dim01 || N1 < 0 || N2 >= Tensor_Dim01 || N2 < 0
21 || N3 >= Tensor_Dim23 || N3 < 0 || N4 >= Tensor_Dim23 || N4 < 0)
22 {
23 std::stringstream s;
24 s << "Bad index in Dg<T," << Tensor_Dim01 << "," << Tensor_Dim23
25 << ">.operator(" << N1 << "," << N2 << "," << N3 << "," << N4
26 << ")" << std::endl;
27 throw std::out_of_range(s.str());
28 }
29#endif
30 return N1 > N2
31 ? (N3 > N4 ? data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
32 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2]
33 : data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
34 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2])
35 : (N3 > N4 ? data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
36 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2]
37 : data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
38 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2]);
39 }
T data[(Tensor_Dim01 *(Tensor_Dim01+1))/2][(Tensor_Dim23 *(Tensor_Dim23+1))/2]
Definition: Ddg_value.hpp:10

◆ operator()() [10/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
T FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const int  N1,
const int  N2,
const int  N3,
const int  N4 
) const
inline

Definition at line 41 of file Ddg_value.hpp.

42 {
43#ifdef FTENSOR_DEBUG
44 if(N1 >= Tensor_Dim01 || N1 < 0 || N2 >= Tensor_Dim01 || N2 < 0
45 || N3 >= Tensor_Dim23 || N3 < 0 || N4 >= Tensor_Dim23 || N4 < 0)
46 {
47 std::stringstream s;
48 s << "Bad index in Dg<T," << Tensor_Dim01 << "," << Tensor_Dim23
49 << ">.operator(" << N1 << "," << N2 << "," << N3 << "," << N4
50 << ") const" << std::endl;
51 throw std::out_of_range(s.str());
52 }
53#endif
54 return N1 > N2
55 ? (N3 > N4 ? data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
56 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2]
57 : data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
58 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2])
59 : (N3 > N4 ? data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
60 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2]
61 : data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
62 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2]);
63 }

◆ operator()() [11/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, char k, int N0, int Dim1, int Dim23>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim23), Dg_Expr< Ddg_number_rhs_0< Ddg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0 >, T, Dim23, Dim1, i, j, k > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Number< N0 ,
const Index< k, Dim1 >  ,
const Index< i, Dim23 >  ,
const Index< j, Dim23 >   
)
inline

Definition at line 197 of file Ddg_value.hpp.

199 {
200 using TensorExpr
201 = Ddg_number_rhs_0<Ddg<T, Tensor_Dim01, Tensor_Dim23>, T, N0>;
202 return Dg_Expr<TensorExpr, T, Dim23, Dim1, i, j, k>(*this);
203 }

◆ operator()() [12/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, char k, int N0, int Dim1, int Dim23>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >=Dim1 &&Tensor_Dim23 >=Dim23), Dg_Expr< Ddg_number_0< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0 >, T, Dim23, Dim1, i, j, k > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Number< N0 ,
const Index< k, Dim1 >  ,
const Index< i, Dim23 >  ,
const Index< j, Dim23 >   
) const
inline

Definition at line 184 of file Ddg_value.hpp.

186 {
187 using TensorExpr
188 = Ddg_number_0<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T, N0>;
189 return Dg_Expr<TensorExpr, T, Dim23, Dim1, i, j, k>(TensorExpr(*this));
190 }

◆ operator()() [13/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, int N0, int N1, int Dim>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >N1 &&Tensor_Dim23 >=Dim), Tensor2_symmetric_Expr< Ddg_number_rhs_01< Ddg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0, N1 >, T, Dim, i, j > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Number< N0 ,
const Number< N1 ,
const Index< i, Dim >  ,
const Index< j, Dim >   
)
inline

Definition at line 168 of file Ddg_value.hpp.

170 {
171 using TensorExpr
172 = Ddg_number_rhs_01<Ddg<T, Tensor_Dim01, Tensor_Dim23>, T, N0, N1>;
173 return Tensor2_symmetric_Expr<TensorExpr, T, Dim, i, j>(*this);
174 }

◆ operator()() [14/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<char i, char j, int N0, int N1, int Dim>
std::enable_if<(Tensor_Dim01 >N0 &&Tensor_Dim01 >N1 &&Tensor_Dim23 >=Dim), Tensor2_symmetric_Expr< Ddg_number_01< constDdg< T, Tensor_Dim01, Tensor_Dim23 >, T, N0, N1 >, T, Dim, i, j > >::type FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Number< N0 ,
const Number< N1 ,
const Index< i, Dim >  ,
const Index< j, Dim >   
) const
inline

Definition at line 153 of file Ddg_value.hpp.

155 {
156 using TensorExpr
157 = Ddg_number_01<const Ddg<T, Tensor_Dim01, Tensor_Dim23>, T, N0, N1>;
158 return Tensor2_symmetric_Expr<TensorExpr, T, Dim, i, j>(
159 TensorExpr(*this));
160 }

◆ operator()() [15/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<int N1, int N2, int N3, int N4>
auto & FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Number< N1 > &  ,
const Number< N2 > &  ,
const Number< N3 > &  ,
const Number< N4 > &   
)
inline

Definition at line 66 of file Ddg_value.hpp.

67 {
68
69 static_assert(N1 < Tensor_Dim01, "Bad index N1");
70 static_assert(N2 < Tensor_Dim01, "Bad index N2");
71 static_assert(N3 < Tensor_Dim23, "Bad index N3");
72 static_assert(N4 < Tensor_Dim23, "Bad index N4");
73
74 if constexpr (N1 > N2) {
75 if constexpr (N3 > N4)
76 return data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
77 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2];
78 else
79 return data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
80 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2];
81 } else {
82 if constexpr (N3 > N4)
83 return data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
84 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2];
85 else
86 return data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
87 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2];
88 }
89 }

◆ operator()() [16/16]

template<class T , int Tensor_Dim01, int Tensor_Dim23>
template<int N1, int N2, int N3, int N4>
auto FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::operator() ( const Number< N1 > &  ,
const Number< N2 > &  ,
const Number< N3 > &  ,
const Number< N4 > &   
) const
inline

Definition at line 92 of file Ddg_value.hpp.

93 {
94
95 static_assert(N1 < Tensor_Dim01, "Bad index N1");
96 static_assert(N2 < Tensor_Dim01, "Bad index N2");
97 static_assert(N3 < Tensor_Dim23, "Bad index N3");
98 static_assert(N4 < Tensor_Dim23, "Bad index N4");
99
100 if constexpr (N1 > N2) {
101 if constexpr (N3 > N4)
102 return data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
103 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2];
104 else
105 return data[N1 + (N2 * (2 * Tensor_Dim01 - N2 - 1)) / 2]
106 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2];
107 } else {
108 if constexpr (N3 > N4)
109 return data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
110 [N3 + (N4 * (2 * Tensor_Dim23 - N4 - 1)) / 2];
111 else
112 return data[N2 + (N1 * (2 * Tensor_Dim01 - N1 - 1)) / 2]
113 [N4 + (N3 * (2 * Tensor_Dim23 - N3 - 1)) / 2];
114 }
115 }

Member Data Documentation

◆ data

template<class T , int Tensor_Dim01, int Tensor_Dim23>
T FTensor::Ddg< T, Tensor_Dim01, Tensor_Dim23 >::data[(Tensor_Dim01 *(Tensor_Dim01+1))/2][(Tensor_Dim23 *(Tensor_Dim23+1))/2]
private

Definition at line 9 of file Ddg_value.hpp.


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