dune-localfunctions  2.2.1
power.hh
Go to the documentation of this file.
1 // -*- tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 // vi: set et ts=8 sw=2 sts=2:
3 
4 #ifndef DUNE_LOCALFUNCTIONS_META_POWER_HH
5 #define DUNE_LOCALFUNCTIONS_META_POWER_HH
6 
7 #include <cstddef>
8 
9 #include <dune/common/shared_ptr.hh>
10 
11 #include <dune/geometry/type.hh>
12 
16 
17 namespace Dune {
18 
21 
27  template<class Backend, std::size_t dimR>
29  public:
31  struct Traits {
37  typedef PowerInterpolation<typename Backend::Traits::Interpolation,
38  typename Basis::Traits> Interpolation;
39  };
40  private:
41  shared_ptr<const Backend> backend;
42  typename Traits::Basis basis_;
43  typename Traits::Coefficients coefficients_;
44  typename Traits::Interpolation interpolation_;
45 
46  public:
48 
52  PowerFiniteElement(const Backend &backend_) :
53  backend(new Backend(backend_)),
54  basis_(backend->basis()),
55  coefficients_(backend->coefficients(), dimR),
56  interpolation_(backend->interpolation())
57  { }
58 
60 
64  PowerFiniteElement(const shared_ptr<const Backend> &backendSPtr) :
65  backend(backendSPtr),
66  basis_(backend->basis()),
67  coefficients_(backend->coefficients(), dimR),
68  interpolation_(backend->interpolation())
69  { }
70 
72 
76  const typename Traits::Basis& basis() const { return basis_; }
78 
82  const typename Traits::Coefficients& coefficients() const
83  { return coefficients_; }
85 
89  const typename Traits::Interpolation& interpolation() const
90  { return interpolation_; }
92  GeometryType type() const { return backend->type(); }
93  };
94 
97 
104  template<class BackendFiniteElement, std::size_t dimR>
106  {
107  public:
110 
112 
116  const FiniteElement make(const BackendFiniteElement &backend) const
117  { return FiniteElement(backend); }
119 
123  const FiniteElement
124  make(const shared_ptr<const BackendFiniteElement> &backendSPtr) const
125  { return FiniteElement(backendSPtr); }
126 
127  };
128 
129 } // namespace Dune
130 
131 #endif // DUNE_LOCALFUNCTIONS_META_POWER_HH