v0.16.0
Loading...
Searching...
No Matches
Public Member Functions | Private Types | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 > Class Template Reference

#include "src/ftensor/src/FTensor/Tensor2/Tensor2_pointer.hpp"

Collaboration diagram for FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >:
[legend]

Public Member Functions

 Tensor2 (T *d)
 
 Tensor2 ()=delete
 
T & operator() (const int N1, const int N2)
 
operator() (const int N1, const int N2) const
 
T * ptr (const int N1, const int N2) const
 
template<char i, char j, int Dim0, int Dim1>
Tensor2_Expr< Self, T, Dim0, Dim1, i, joperator() (const Index< i, Dim0 >, const Index< j, Dim1 >)
 
template<char i, char j, int Dim0, int Dim1>
Tensor2_Expr< const Self, T, Dim0, Dim1, i, joperator() (const Index< i, Dim0 >, const Index< j, Dim1 >) const
 
template<char i, int Dim, int N>
Tensor1_Expr< Tensor2_number_rhs_1< Self, T, N >, T, Dim, ioperator() (const Index< i, Dim >, const Number< N >)
 
template<char i, int Dim, int N>
Tensor1_Expr< Tensor2_number_rhs_0< Self, T, N >, T, Dim, ioperator() (const Number< N >, const Index< i, Dim >)
 
template<char i, int Dim, int N>
Tensor1_Expr< const Tensor2_number_1< const Self, T, N >, T, Dim, ioperator() (const Index< i, Dim >, const Number< N >) const
 
template<char i, int Dim, int N>
Tensor1_Expr< const Tensor2_number_0< const Self, T, N >, T, Dim, ioperator() (const Number< N >, const Index< i, Dim >) const
 
const Tensor2operator++ () const
 
template<char i, int Dim>
operator() (const Index< i, Dim >, const Index< i, Dim >)
 
template<char i, int Dim>
operator() (const Index< i, Dim >, const Index< i, Dim >) const
 

Private Types

using Self = Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >
 

Private Member Functions

template<int N>
internal_contract (Number< N >) const
 
internal_contract (Number< 1 >) const
 

Static Private Member Functions

static constexpr int getFlatIndex (const int N1, const int N2)
 

Private Attributes

T *restrict data
 

Detailed Description

template<class T, int Tensor_Dim0, int Tensor_Dim1, int G>
class FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >

Definition at line 239 of file Tensor2_pointer.hpp.

Member Typedef Documentation

◆ Self

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
using FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::Self = Tensor2<CursorPtr<T *, G>, Tensor_Dim0, Tensor_Dim1>
private

Definition at line 241 of file Tensor2_pointer.hpp.

Constructor & Destructor Documentation

◆ Tensor2() [1/2]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::Tensor2 ( T *  d)
inlineexplicit

Definition at line 250 of file Tensor2_pointer.hpp.

250: data(d) {}
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

◆ Tensor2() [2/2]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::Tensor2 ( )
delete

Member Function Documentation

◆ getFlatIndex()

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
static constexpr int FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::getFlatIndex ( const int  N1,
const int  N2 
)
inlinestaticconstexprprivate

Definition at line 245 of file Tensor2_pointer.hpp.

245 {
246 return Tensor_Dim1 * N1 + N2;
247 }

◆ internal_contract() [1/2]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
T FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::internal_contract ( Number< 1 >  ) const
inlineprivate

Definition at line 354 of file Tensor2_pointer.hpp.

354{ return (*this)(0, 0); }

◆ internal_contract() [2/2]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<int N>
T FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::internal_contract ( Number< N ) const
inlineprivate

Definition at line 350 of file Tensor2_pointer.hpp.

350 {
351 return (*this)(N - 1, N - 1) + internal_contract(Number<N - 1>());
352 }
const int N
Definition speed_test.cpp:3

◆ operator()() [1/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, int Dim>
T FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Index< i, Dim >  ,
const Index< i, Dim >   
)
inline

Definition at line 340 of file Tensor2_pointer.hpp.

340 {
341 return internal_contract(Number<Dim>());
342 }

◆ operator()() [2/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, int Dim>
T FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Index< i, Dim >  ,
const Index< i, Dim >   
) const
inline

Definition at line 345 of file Tensor2_pointer.hpp.

345 {
346 return internal_contract(Number<Dim>());
347 }

◆ operator()() [3/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, int Dim, int N>
Tensor1_Expr< Tensor2_number_rhs_1< Self, T, N >, T, Dim, i > FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Index< i, Dim >  ,
const Number< N  
)
inline

Definition at line 308 of file Tensor2_pointer.hpp.

308 {
309 using TensorExpr = Tensor2_number_rhs_1<Self, T, N>;
311 }

◆ operator()() [4/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, int Dim, int N>
Tensor1_Expr< const Tensor2_number_1< const Self, T, N >, T, Dim, i > FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Index< i, Dim >  ,
const Number< N  
) const
inline

Definition at line 322 of file Tensor2_pointer.hpp.

322 {
323 using TensorExpr = Tensor2_number_1<const Self, T, N>;
324 return Tensor1_Expr<TensorExpr, T, Dim, i>(TensorExpr(*this));
325 }

◆ operator()() [5/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, char j, int Dim0, int Dim1>
Tensor2_Expr< Self, T, Dim0, Dim1, i, j > FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Index< i, Dim0 >  ,
const Index< j, Dim1 >   
)
inline

Definition at line 295 of file Tensor2_pointer.hpp.

296 {
297 return Tensor2_Expr<Self, T, Dim0, Dim1, i, j>(*this);
298 }

◆ operator()() [6/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, char j, int Dim0, int Dim1>
Tensor2_Expr< const Self, T, Dim0, Dim1, i, j > FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Index< i, Dim0 >  ,
const Index< j, Dim1 >   
) const
inline

Definition at line 302 of file Tensor2_pointer.hpp.

302 {
303 return Tensor2_Expr<const Self, T, Dim0, Dim1, i, j>(*this);
304 }

◆ operator()() [7/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
T & FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const int  N1,
const int  N2 
)
inline

Definition at line 254 of file Tensor2_pointer.hpp.

254 {
255#ifdef FTENSOR_DEBUG
256 if (N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim1 || N2 < 0) {
257 std::stringstream s;
258 s << "Bad index in Tensor2<CursorPtr<T*," << G << ">," << Tensor_Dim0
259 << "," << Tensor_Dim1 << ">.operator(" << N1 << "," << N2 << ")"
260 << std::endl;
261 throw std::out_of_range(s.str());
262 }
263#endif
264 return *(data + getFlatIndex(N1, N2));
265 }
static constexpr int getFlatIndex(const int N1, const int N2)
constexpr IntegrationType G
Definition level_set.cpp:33

◆ operator()() [8/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
T FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const int  N1,
const int  N2 
) const
inline

Definition at line 267 of file Tensor2_pointer.hpp.

267 {
268#ifdef FTENSOR_DEBUG
269 if (N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim1 || N2 < 0) {
270 std::stringstream s;
271 s << "Bad index in Tensor2<CursorPtr<T*," << G << ">," << Tensor_Dim0
272 << "," << Tensor_Dim1 << ">.operator(" << N1 << "," << N2 << ") const"
273 << std::endl;
274 throw std::out_of_range(s.str());
275 }
276#endif
277 return *(data + getFlatIndex(N1, N2));
278 }

◆ operator()() [9/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, int Dim, int N>
Tensor1_Expr< Tensor2_number_rhs_0< Self, T, N >, T, Dim, i > FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Number< N ,
const Index< i, Dim >   
)
inline

Definition at line 315 of file Tensor2_pointer.hpp.

315 {
316 using TensorExpr = Tensor2_number_rhs_0<Self, T, N>;
318 }

◆ operator()() [10/10]

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
template<char i, int Dim, int N>
Tensor1_Expr< const Tensor2_number_0< const Self, T, N >, T, Dim, i > FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator() ( const Number< N ,
const Index< i, Dim >   
) const
inline

Definition at line 329 of file Tensor2_pointer.hpp.

329 {
330 using TensorExpr = Tensor2_number_0<const Self, T, N>;
331 return Tensor1_Expr<TensorExpr, T, Dim, i>(TensorExpr(*this));
332 }

◆ operator++()

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
const Tensor2 & FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::operator++ ( ) const
inline

Definition at line 334 of file Tensor2_pointer.hpp.

334 {
335 data += G;
336 return *this;
337 }

◆ ptr()

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
T * FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::ptr ( const int  N1,
const int  N2 
) const
inline

Definition at line 280 of file Tensor2_pointer.hpp.

280 {
281#ifdef FTENSOR_DEBUG
282 if (N1 >= Tensor_Dim0 || N1 < 0 || N2 >= Tensor_Dim1 || N2 < 0) {
283 std::stringstream s;
284 s << "Bad index in Tensor2<CursorPtr<T*," << G << ">," << Tensor_Dim0
285 << "," << Tensor_Dim1 << ">.ptr(" << N1 << "," << N2 << ")"
286 << std::endl;
287 throw std::out_of_range(s.str());
288 }
289#endif
290 const int flat_index = getFlatIndex(N1, N2);
291 return data + flat_index;
292 }

Member Data Documentation

◆ data

template<class T , int Tensor_Dim0, int Tensor_Dim1, int G>
T* restrict FTensor::Tensor2< CursorPtr< T *, G >, Tensor_Dim0, Tensor_Dim1 >::data
mutableprivate

Definition at line 243 of file Tensor2_pointer.hpp.


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