dune-localfunctions  2.2.1
pk2d.hh
Go to the documentation of this file.
1 // -*- tab-width: 4; indent-tabs-mode: nil -*-
2 // vi: set ts=4 sw=2 et 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 
79  GeometryType type () const
80  {
81  return gt;
82  }
83 
85  {
86  return new Pk2DLocalFiniteElement(*this);
87  }
88 
89  private:
91  Pk2DLocalCoefficients<k> coefficients;
93  GeometryType gt;
94  };
95 
97 
104  template<class Geometry, class RF, std::size_t k>
106  typedef typename Geometry::ctype DF;
109 
110  public:
114  struct Traits {
118  typename Basis::Traits
121  };
122 
123  private:
124  static const GeometryType gt;
125  static const LocalBasis localBasis;
126  static const LocalInterpolation localInterpolation;
127 
128  typename Traits::Basis basis_;
129  typename Traits::Interpolation interpolation_;
130  typename Traits::Coefficients coefficients_;
131 
132  public:
134 
147  template<class VertexOrder>
148  Pk2DFiniteElement(const Geometry &geometry,
149  const VertexOrder& vertexOrder) :
150  basis_(localBasis, geometry), interpolation_(localInterpolation),
151  coefficients_(vertexOrder.begin(0, 0))
152  { }
153 
154  const typename Traits::Basis& basis() const { return basis_; }
155  const typename Traits::Interpolation& interpolation() const
156  { return interpolation_; }
157  const typename Traits::Coefficients& coefficients() const
158  { return coefficients_; }
159  const GeometryType &type() const { return gt; }
160  };
161 
162  template<class Geometry, class RF, std::size_t k>
163  const GeometryType
164  Pk2DFiniteElement<Geometry, RF, k>::gt(GeometryType::simplex, 2);
165 
166  template<class Geometry, class RF, std::size_t k>
167  const typename Pk2DFiniteElement<Geometry, RF, k>::LocalBasis
168  Pk2DFiniteElement<Geometry, RF, k>::localBasis = LocalBasis();
169 
170  template<class Geometry, class RF, std::size_t k>
171  const typename Pk2DFiniteElement<Geometry, RF, k>::LocalInterpolation
172  Pk2DFiniteElement<Geometry, RF, k>::localInterpolation =
173  LocalInterpolation();
174 
176 
186  template<class Geometry, class RF, std::size_t k>
189 
191 
205  template<class VertexOrder>
206  const FiniteElement make(const Geometry& geometry,
207  const VertexOrder& vertexOrder)
208  { return FiniteElement(geometry, vertexOrder); }
209  };
210 }
211 
212 #endif