v0.16.0
Loading...
Searching...
No Matches
FTensor.hpp
Go to the documentation of this file.
1/** \file FTensor.hpp
2* \brief Tensors class implemented by Walter Landry.
3* \ingroup ftensor
4
5*
6* The main repository is available under link
7<https://bitbucket.org/wlandry/ftensor>.
8* For more details look at reference \cite landry2003implementing.
9* See link <http://www.wlandry.net/Presentations/FTensor.pdf>.
10*
11* Note this implementation is modified for proposes of MoFEM.
12*
13*/
14
15/* Include file for the Fast Tensor classes (FTensor). Everything is
16 in namespace FTensor. */
17
18#pragma once
19
20#include <cmath>
21#include <complex>
22#include <type_traits>
23#include <array>
24
25#ifdef FTENSOR_DEBUG
26#include <iostream>
27#include <sstream>
28#include <stdexcept>
29#endif
30#include "FTensor/Layout.hpp"
31
32#ifdef WITH_ADOL_C
33#include <adolc/adolc.h>
34#include <adolc/adtl.h>
35#endif
36
37/**
38 * \brief Tensors class implemented by Walter Landry.
39 * \ingroup ftensor
40
41
42 * The main repository is available under link
43 <https://bitbucket.org/wlandry/ftensor>.
44 * For more details look at reference \cite landry2003implementing.
45 * See link <http://www.wlandry.net/Presentations/FTensor.pdf>.
46 *
47 * Note this implementation is modified for proposes of MoFEM.
48
49 */
50namespace FTensor
51{
52 template <class T> class Tensor0;
53
54 template <class T, const int I> class PackPtr
55 {};
56
57 template <class T, const int G> class CursorPtr
58 {};
59
60 template <class T, int Dim> class Tensor1;
61 template <class A, class T, int Dim, char i> class Tensor1_Expr;
62
63 template <class T, int Dim1, int Dim2>
64 class Tensor2;
65 template <class A, class T, int Dim1, int Dim2, char i, char j>
66 class Tensor2_Expr;
67 template <class A, class T, int N> class Tensor2_number_rhs_0;
68 template <class A, class T, int N> class Tensor2_number_rhs_1;
69
70 template <class T, int Dim> class Tensor2_symmetric;
71 template <class A, class T, int Dim, char i, char j>
73
74 template <class T, int Dim> class Tensor2_antisymmetric;
75 template <class A, class T, int Dim, char i, char j>
77
78 template <class T, int Dim0, int Dim1, int Dim2> class Tensor3;
79 template <class A, class T, int Dim0, int Dim1, int Dim2, char i, char j,
80 char k>
81 class Tensor3_Expr;
82 template <class A, class T, int N> class Tensor3_number_rhs_0;
83 template <class A, class T, int N> class Tensor3_number_rhs_2;
84 template <class A, class T, int N> class Tensor3_number_rhs_2;
85 template <class A, class T, int N1, int N2> class Tensor3_number_rhs_01;
86 template <class A, class T, int N1, int N2> class Tensor3_number_rhs_02;
87 template <class A, class T, int N1, int N2> class Tensor3_number_rhs_12;
88
89 template <class T, int Dim01, int Dim2> class Dg;
90 template <class A, class T, int Dim01, int Dim2, char i, char j, char k>
91 class Dg_Expr;
92 template <class A, class T, int N> class Dg_number_rhs_0;
93 template <class A, class T, int N> class Dg_number_rhs_2;
94 template <class A, class T, int N1, int N2> class Dg_number_rhs_01;
95 template <class A, class T, int N1, int N2> class Dg_number_rhs_12;
96
97 template <class T, int Dim0, int Dim12> class Christof;
98 template <class A, class T, int Dim0, int Dim12, char i, char j, char k>
100
101 template <class T, int Dim0, int Dim12> class Tensor3_antisymmetric;
102 template <class A, class T, int Dim0, int Dim12, char i, char j, char k>
104
105 template <class T, int Dim0, int Dim1, int Dim2, int Dim3> class Tensor4;
106 template <class A, class T, int Dim0, int Dim1, int Dim2, int Dim3, char i,
107 char j, char k, char l>
108 class Tensor4_Expr;
109
110 template <class T, int Dim> class Riemann;
111 template <class A, class T, int Dim, char i, char j, char k, char l>
112 class Riemann_Expr;
113
114 template <class T, int Dim01, int Dim23> class Ddg;
115 template <class A, class T, int Dim01, int Dim23, char i, char j, char k,
116 char l>
117 class Ddg_Expr;
118 template <class A, class T, int N0, int N1> class Ddg_number_rhs_01;
119 template <class A, class T, int N0> class Ddg_number_rhs_0;
120}
121
122#include "FTensor/Index.hpp"
123#include "FTensor/Number.hpp"
124#include "FTensor/promote.hpp"
125
127#include "FTensor/cross.hpp"
129
130#include "FTensor/Christof.hpp"
131#include "FTensor/Ddg.hpp"
132#include "FTensor/Dg.hpp"
133#include "FTensor/Riemann.hpp"
134#include "FTensor/Tensor0.hpp"
135#include "FTensor/Tensor1.hpp"
136#include "FTensor/Tensor2.hpp"
139#include "FTensor/Tensor3.hpp"
142#include "FTensor/Tensor4.hpp"
144
145/***************************************************************************/ /**
146* \defgroup ftensor Tensor template library
147* \brief Efficient Template Tensor library
148******************************************************************************/
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'l', 3 > l
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
Tensors class implemented by Walter Landry.
Definition FTensor.hpp:51
constexpr AssemblyType A