dune-localfunctions  2.3.1-rc1
power.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 
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
Meta-coefficients turning a scalar coefficients into vector-valued coefficients.
Definition: meta/power/coefficients.hh:20
Meta-interpolation turning a scalar interpolation into vector-valued interpolation.
Definition: meta/power/interpolation.hh:25
PowerFiniteElement(const Backend &backend_)
Construct a finite element.
Definition: power.hh:52
const Traits::Interpolation & interpolation() const
Extract interpolation of this finite element.
Definition: power.hh:89
const FiniteElement make(const shared_ptr< const BackendFiniteElement > &backendSPtr) const
create a finite element
Definition: power.hh:124
PowerFiniteElement< BackendFiniteElement, dimR > FiniteElement
Type of the finite element.
Definition: power.hh:109
const FiniteElement make(const BackendFiniteElement &backend) const
create a finite element
Definition: power.hh:116
PowerCoefficients Coefficients
type of the Coefficients
Definition: power.hh:35
GeometryType type() const
Extract geometry type of this finite element.
Definition: power.hh:92
types of component objects
Definition: power.hh:31
const Traits::Coefficients & coefficients() const
Extract coefficients of this finite element.
Definition: power.hh:82
Factory for meta-finite elements turning scalar finite elements into vector-valued ones...
Definition: power.hh:105
const Traits::Basis & basis() const
Extract basis of this finite element.
Definition: power.hh:76
PowerInterpolation< typename Backend::Traits::Interpolation, typename Basis::Traits > Interpolation
type of the Interpolation
Definition: power.hh:38
Meta-finite element turning a scalar finite element into vector-valued one.
Definition: power.hh:28
PowerBasis< typename Backend::Traits::Basis, dimR > Basis
type of the Basis
Definition: power.hh:33
PowerFiniteElement(const shared_ptr< const Backend > &backendSPtr)
Construct a finite element.
Definition: power.hh:64