dune-localfunctions  2.4.1
pk2d.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=4 sw=2 sts=2:
3 #ifndef DUNE_PK2DLOCALFINITEELEMENT_HH
4 #define DUNE_PK2DLOCALFINITEELEMENT_HH
5 
6 #include <cstddef>
7 
8 #include <dune/geometry/type.hh>
9 
12 #include "pk2d/pk2dlocalbasis.hh"
15 
16 namespace Dune
17 {
18 
21  template<class D, class R, unsigned int k>
23  {
24  public:
30 
34  {
35  gt.makeTriangle();
36  }
37 
40  Pk2DLocalFiniteElement (int variant) : coefficients(variant)
41  {
42  gt.makeTriangle();
43  }
44 
51  Pk2DLocalFiniteElement (const unsigned int vertexmap[3]) : coefficients(vertexmap)
52  {
53  gt.makeTriangle();
54  }
55 
58  const typename Traits::LocalBasisType& localBasis () const
59  {
60  return basis;
61  }
62 
66  {
67  return coefficients;
68  }
69 
73  {
74  return interpolation;
75  }
76 
78  unsigned int size () const
79  {
80  return basis.size();
81  }
82 
85  GeometryType type () const
86  {
87  return gt;
88  }
89 
91  {
92  return new Pk2DLocalFiniteElement(*this);
93  }
94 
95  private:
97  Pk2DLocalCoefficients<k> coefficients;
99  GeometryType gt;
100  };
101 
103 
110  template<class Geometry, class RF, std::size_t k>
112  typedef typename Geometry::ctype DF;
115 
116  public:
120  struct Traits {
123  LocalInterpolation,
124  typename Basis::Traits
127  };
128 
129  private:
130  static const GeometryType gt;
131  static const LocalBasis localBasis;
132  static const LocalInterpolation localInterpolation;
133 
134  typename Traits::Basis basis_;
135  typename Traits::Interpolation interpolation_;
136  typename Traits::Coefficients coefficients_;
137 
138  public:
140 
153  template<class VertexOrder>
154  Pk2DFiniteElement(const Geometry &geometry,
155  const VertexOrder& vertexOrder) :
156  basis_(localBasis, geometry), interpolation_(localInterpolation),
157  coefficients_(vertexOrder.begin(0, 0))
158  { }
159 
160  const typename Traits::Basis& basis() const { return basis_; }
161  const typename Traits::Interpolation& interpolation() const
162  { return interpolation_; }
163  const typename Traits::Coefficients& coefficients() const
164  { return coefficients_; }
165  const GeometryType &type() const { return gt; }
166  };
167 
168  template<class Geometry, class RF, std::size_t k>
169  const GeometryType
170  Pk2DFiniteElement<Geometry, RF, k>::gt(GeometryType::simplex, 2);
171 
172  template<class Geometry, class RF, std::size_t k>
175 
176  template<class Geometry, class RF, std::size_t k>
180 
182 
192  template<class Geometry, class RF, std::size_t k>
195 
197 
211  template<class VertexOrder>
212  const FiniteElement make(const Geometry& geometry,
213  const VertexOrder& vertexOrder)
214  { return FiniteElement(geometry, vertexOrder); }
215  };
216 }
217 
218 #endif
ScalarLocalToGlobalBasisAdaptor< LocalBasis, Geometry > Basis
Definition: pk2d.hh:121
traits helper struct
Definition: localfiniteelementtraits.hh:10
const Traits::Interpolation & interpolation() const
Definition: pk2d.hh:161
const FiniteElement make(const Geometry &geometry, const VertexOrder &vertexOrder)
construct Pk2DFiniteElementFactory
Definition: pk2d.hh:212
Definition: pk2d.hh:22
Lagrange shape functions of arbitrary order on the reference triangle.
Definition: pk2dlocalbasis.hh:25
Pk2DLocalFiniteElement(int variant)
Definition: pk2d.hh:40
Definition: pk2d.hh:120
LocalToGlobalInterpolationAdaptor< LocalInterpolation, typename Basis::Traits > Interpolation
Definition: pk2d.hh:125
Convert a local interpolation into a global interpolation.
Definition: localtoglobaladaptors.hh:149
Layout map for P0 elements.
Definition: pk2dlocalcoefficients.hh:22
Factory for Pk2DFiniteElement objects.
Definition: pk2d.hh:193
const Traits::LocalCoefficientsType & localCoefficients() const
Definition: pk2d.hh:65
unsigned int size() const
Number of shape functions in this finite element.
Definition: pk2d.hh:78
Definition: brezzidouglasmarini1cube2dlocalbasis.hh:14
LI LocalInterpolationType
Definition: localfiniteelementtraits.hh:22
Pk2DLocalCoefficients< k > Coefficients
Definition: pk2d.hh:126
Pk2DFiniteElement(const Geometry &geometry, const VertexOrder &vertexOrder)
construct a Pk2DFiniteElement
Definition: pk2d.hh:154
Pk2DLocalFiniteElement(const unsigned int vertexmap[3])
Definition: pk2d.hh:51
LocalFiniteElementTraits< Pk2DLocalBasis< D, R, k >, Pk2DLocalCoefficients< k >, Pk2DLocalInterpolation< Pk2DLocalBasis< D, R, k > > > Traits
Definition: pk2d.hh:29
LC LocalCoefficientsType
Definition: localfiniteelementtraits.hh:18
const GeometryType & type() const
Definition: pk2d.hh:165
Langrange finite element of arbitrary order on triangles.
Definition: pk2d.hh:111
GeometryType type() const
Definition: pk2d.hh:85
LB LocalBasisType
Definition: localfiniteelementtraits.hh:14
Definition: pk2dlocalinterpolation.hh:11
Pk2DLocalFiniteElement * clone() const
Definition: pk2d.hh:90
const Traits::Coefficients & coefficients() const
Definition: pk2d.hh:163
const Traits::LocalInterpolationType & localInterpolation() const
Definition: pk2d.hh:72
Convert a simple scalar local basis into a global basis.
Definition: localtoglobaladaptors.hh:65
Pk2DLocalFiniteElement()
Definition: pk2d.hh:33
const Traits::Basis & basis() const
Definition: pk2d.hh:160
Pk2DFiniteElement< Geometry, RF, k > FiniteElement
Definition: pk2d.hh:194
const Traits::LocalBasisType & localBasis() const
Definition: pk2d.hh:58