29 #ifndef __OrthogonalPolynomialSet_H
30 #define __OrthogonalPolynomialSet_H 1
41 template<uint16_type Dim,
43 template<u
int16_type>
class PolySetType = Scalar,
45 template<u
int16_type,u
int16_type,u
int16_type>
class Convex = Simplex>
50 template<uint16_type Dim,
52 template<u
int16_type>
class PolySetType,
56 public PolynomialSet<Dubiner<Dim, Order, Normalized<false>, T, StorageUBlas>, PolySetType >
61 static const uint16_type nDim = Dim;
62 static const uint16_type nOrder = Order;
63 static const bool isTransformationEquivalent =
true;
66 typedef self_type component_basis_type;
68 typedef typename super::polyset_type polyset_type;
69 static const bool is_tensor2 = polyset_type::is_tensor2;
70 static const bool is_vectorial = polyset_type::is_vectorial;
71 static const bool is_scalar = polyset_type::is_scalar;
72 static const bool is_continuous =
false;
73 static const bool is_modal =
true;
74 static const uint16_type nComponents = polyset_type::nComponents;
75 static const uint16_type nComponents1 = polyset_type::nComponents1;
76 static const uint16_type nComponents2 = polyset_type::nComponents2;
77 typedef typename super::component_type component_type;
84 typedef typename super::polynomial_type polynomial_type;
87 static const uint16_type nDofPerVertex = convex_type::nbPtsPerVertex;
89 static const uint16_type nDofPerEdge = convex_type::nbPtsPerEdge;
91 static const uint16_type nDofPerFace = convex_type::nbPtsPerFace;
94 static const uint16_type nDofPerVolume = convex_type::nbPtsPerVolume;
96 static const uint16_type nLocalDof = convex_type::numPoints;
98 static const uint16_type nDof = nLocalDof;
99 static const uint16_type nNodes = nDof;
100 static const uint16_type nDofGrad = super::nDim*nDof;
101 static const uint16_type nDofHess = super::nDim*super::nDim*nDof;
105 super( basis_type() )
108 ublas::matrix<value_type> m( ublas::identity_matrix<value_type>( nComponents*convex_type::polyDims( nOrder ) ) );
109 this->setCoefficient( polyset_type::toType( m ),
true );
112 OrthogonalPolynomialSet<Dim, Order, Scalar,T, Simplex > toScalar()
const
114 return OrthogonalPolynomialSet<Dim, Order, Scalar,T, Simplex >();
117 std::string familyName()
const
122 template<uint16_type Dim,
124 template<u
int16_type>
class PolySetType,
126 const uint16_type OrthogonalPolynomialSet<Dim, Order,PolySetType,T, Simplex>::nLocalDof;
128 template<uint16_type Dim,
130 template<u
int16_type>
class PolySetType,
132 class OrthogonalPolynomialSet<Dim, Order, PolySetType, T, Hypercube>
134 public PolynomialSet<Legendre<Dim, Order, Normalized<false>, T>, PolySetType >
136 typedef PolynomialSet<Legendre<Dim, Order, Normalized<false>, T>, PolySetType > super;
139 static const uint16_type nDim = Dim;
140 static const uint16_type nOrder = Order;
141 static const bool isTransformationEquivalent =
true;
143 typedef OrthogonalPolynomialSet<Dim, Order, PolySetType, T, Hypercube> self_type;
144 typedef self_type component_basis_type;
146 typedef typename super::polyset_type polyset_type;
147 static const bool is_tensor2 = polyset_type::is_tensor2;
148 static const bool is_vectorial = polyset_type::is_vectorial;
149 static const bool is_scalar = polyset_type::is_scalar;
150 static const bool is_continuous =
false;
151 static const bool is_modal =
true;
152 static const uint16_type nComponents = polyset_type::nComponents;
153 static const uint16_type nComponents1 = polyset_type::nComponents1;
154 static const uint16_type nComponents2 = polyset_type::nComponents2;
155 typedef typename super::component_type component_type;
157 typedef T value_type;
158 typedef Legendre<Dim, Order, Normalized<false>, T> basis_type;
159 typedef Hypercube<Dim, Order, Dim> convex_type;
160 typedef Reference<convex_type, nDim, nOrder, nDim, value_type> reference_convex_type;
162 typedef typename super::polynomial_type polynomial_type;
165 static const uint16_type nDofPerVertex = convex_type::nbPtsPerVertex;
167 static const uint16_type nDofPerEdge = convex_type::nbPtsPerEdge;
169 static const uint16_type nDofPerFace = convex_type::nbPtsPerFace;
172 static const uint16_type nDofPerVolume = convex_type::nbPtsPerVolume;
174 static const uint16_type nLocalDof = convex_type::numPoints;
176 static const uint16_type nDof = nLocalDof;
177 static const uint16_type nNodes = nDof;
178 static const uint16_type nDofGrad = super::nDim*nDof;
179 static const uint16_type nDofHess = super::nDim*super::nDim*nDof;
181 OrthogonalPolynomialSet()
183 super( basis_type() )
186 ublas::matrix<value_type> m( ublas::identity_matrix<value_type>( nComponents*convex_type::polyDims( nOrder ) ) );
187 this->setCoefficient( polyset_type::toType( m ),
true );
190 OrthogonalPolynomialSet<Dim, Order, Scalar,T, Hypercube > toScalar()
const
192 return OrthogonalPolynomialSet<Dim, Order, Scalar,T, Hypercube >();
195 std::string familyName()
const
201 template<uint16_type Dim,
203 template<u
int16_type>
class PolySetType,
205 const uint16_type OrthogonalPolynomialSet<Dim, Order,PolySetType,T, Hypercube>::nLocalDof;