dune-localfunctions  2.2.1
pk1d.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_PK1DLOCALFINITEELEMENT_HH
4 #define DUNE_PK1DLOCALFINITEELEMENT_HH
5 
6 #include <cstddef>
7 
8 #include <dune/geometry/type.hh>
9 
12 #include "pk1d/pk1dlocalbasis.hh"
15 
16 namespace Dune
17 {
18 
21  template<class D, class R, unsigned int k>
23  {
24  public:
30 
34  {
35  gt.makeLine();
36  }
37 
40  Pk1DLocalFiniteElement (int variant) : coefficients(variant)
41  {
42  gt.makeLine();
43  }
44 
49  Pk1DLocalFiniteElement (const unsigned int vertexmap[3]) : coefficients(vertexmap)
50  {
51  gt.makeLine();
52  }
53 
56  const typename Traits::LocalBasisType& localBasis () const
57  {
58  return basis;
59  }
60 
64  {
65  return coefficients;
66  }
67 
71  {
72  return interpolation;
73  }
74 
77  GeometryType type () const
78  {
79  return gt;
80  }
81 
83  {
84  return new Pk1DLocalFiniteElement(*this);
85  }
86 
87  private:
89  Pk1DLocalCoefficients<k> coefficients;
91  GeometryType gt;
92  };
93 
95 
102  template<class Geometry, class RF, std::size_t k>
104  typedef typename Geometry::ctype DF;
107 
108  public:
112  struct Traits {
116  typename Basis::Traits
119  };
120 
121  private:
122  static const GeometryType gt;
123  static const LocalBasis localBasis;
124  static const LocalInterpolation localInterpolation;
125 
126  typename Traits::Basis basis_;
127  typename Traits::Interpolation interpolation_;
128  typename Traits::Coefficients coefficients_;
129 
130  public:
132 
145  template<class VertexOrder>
146  Pk1DFiniteElement(const Geometry &geometry,
147  const VertexOrder& vertexOrder) :
148  basis_(localBasis, geometry), interpolation_(localInterpolation),
149  coefficients_(vertexOrder.begin(0, 0))
150  { }
151 
152  const typename Traits::Basis& basis() const { return basis_; }
153  const typename Traits::Interpolation& interpolation() const
154  { return interpolation_; }
155  const typename Traits::Coefficients& coefficients() const
156  { return coefficients_; }
157  const GeometryType &type() const { return gt; }
158  };
159 
160  template<class Geometry, class RF, std::size_t k>
161  const GeometryType
162  Pk1DFiniteElement<Geometry, RF, k>::gt(GeometryType::simplex, 2);
163 
164  template<class Geometry, class RF, std::size_t k>
165  const typename Pk1DFiniteElement<Geometry, RF, k>::LocalBasis
166  Pk1DFiniteElement<Geometry, RF, k>::localBasis = LocalBasis();
167 
168  template<class Geometry, class RF, std::size_t k>
169  const typename Pk1DFiniteElement<Geometry, RF, k>::LocalInterpolation
170  Pk1DFiniteElement<Geometry, RF, k>::localInterpolation =
171  LocalInterpolation();
172 
174 
184  template<class Geometry, class RF, std::size_t k>
187 
189 
203  template<class VertexOrder>
204  const FiniteElement make(const Geometry& geometry,
205  const VertexOrder& vertexOrder)
206  { return FiniteElement(geometry, vertexOrder); }
207  };
208 }
209 
210 #endif