dune-fem  2.4.1-rc
basisfunctionset/proxy.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_SPACE_BASISFUNCTIONSET_PROXY_HH
2 #define DUNE_FEM_SPACE_BASISFUNCTIONSET_PROXY_HH
3 
4 // C++ includes
5 #include <cassert>
6 #include <cstddef>
7 
8 // dune-common includes
9 #include <dune/common/nullptr.hh>
10 
11 // dune-geometry includes
12 #include <dune/geometry/type.hh>
13 
21 namespace Dune
22 {
23 
24  namespace Fem
25  {
26 
27  // BasisFunctionSetProxy
28  // ---------------------
29 
30  /*
31  * \brief A proxy object converting a pointer to a basis function set to a object
32  *
33  * \tparam BasisFunctionSet An implementation of Dune::Fem::BasisFunctionSet
34  *
35  * \note This class has an implicit constructor from a pointer to a basis function set.
36  */
37 
38  template< class BasisFunctionSet >
40  {
42 
43  public:
45  const ImplementationType &impl () const
46  {
47  assert( basisFunctionSet_ );
48  return *basisFunctionSet_;
49  }
50 
52 
54 
59 
61 
63  : basisFunctionSet_( nullptr )
64  {}
65 
66  BasisFunctionSetProxy ( const BasisFunctionSet *basisFunctionSet )
67  : basisFunctionSet_( basisFunctionSet )
68  {}
69 
71  int order () const { return impl().order(); }
72 
74  std::size_t size () const { return impl().size(); }
75 
77  Dune::GeometryType type () const { return impl().type(); }
78 
80  const ReferenceElementType &referenceElement () const
81  {
82  return impl().referenceElement();
83  }
84 
86  template< class QuadratureType, class Vector, class DofVector >
87  void axpy ( const QuadratureType &quad, const Vector &values, DofVector &dofs ) const
88  {
89  impl().axpy( quad, values, dofs );
90  }
91 
93  template< class QuadratureType, class VectorA, class VectorB, class DofVector >
94  void axpy ( const QuadratureType &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector &dofs ) const
95  {
96  impl().axpy( quad, valuesA, valuesB, dofs );
97  }
98 
100  template< class Point, class DofVector >
101  void axpy ( const Point &x, const RangeType &valueFactor, DofVector &dofs ) const
102  {
103  impl().axpy( x, valueFactor, dofs );
104  }
105 
107  template< class Point, class DofVector >
108  void axpy ( const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs ) const
109  {
110  axpy( x, jacobianFactor, dofs );
111  }
112 
114  template< class Point, class DofVector >
115  void axpy ( const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor,
116  DofVector &dofs ) const
117  {
118  impl().axpy( x, valueFactor, jacobianFactor, dofs );
119  }
120 
122  template< class Point, class DofVector, class RangeArray >
123  void evaluateAll ( const Point &x, const DofVector &dofs, RangeArray& ranges ) const
124  {
125  impl().evaluateAll( x, dofs, ranges );
126  }
127 
129  template< class Point, class DofVector >
130  void evaluateAll ( const Point &x, const DofVector &dofs, RangeType &value ) const
131  {
132  impl().evaluateAll( x, dofs, value );
133  }
134 
136  template< class Point, class RangeArray >
137  void evaluateAll ( const Point &x, RangeArray &values ) const
138  {
139  impl().evaluateAll( x, values );
140  }
141 
143  template< class Point, class DofVector, class JacobianArray >
144  void jacobianAll ( const Point &x, const DofVector &dofs, JacobianArray &jacobians ) const
145  {
146  impl().jacobianAll( x, dofs, jacobians );
147  }
148 
150  template< class Point, class DofVector >
151  void jacobianAll ( const Point &x, const DofVector &dofs, JacobianRangeType &jacobian ) const
152  {
153  impl().jacobianAll( x, dofs, jacobian );
154  }
155 
157  template< class Point, class JacobianRangeArray >
158  void jacobianAll ( const Point &x, JacobianRangeArray &jacobians ) const
159  {
160  impl().jacobianAll( x, jacobians );
161  }
162 
164  template< class Point, class DofVector >
165  void hessianAll ( const Point &x, const DofVector &dofs, HessianRangeType &hessian ) const
166  {
167  impl().hessianAll( x, dofs, hessian );
168  }
169 
171  template< class Point, class HessianRangeArray >
172  void hessianAll ( const Point &x, HessianRangeArray &hessians ) const
173  {
174  impl().hessianAll( x, hessians );
175  }
176 
178  const EntityType &entity () const { return impl().entity(); }
179 
180  private:
181  const BasisFunctionSet *basisFunctionSet_;
182  };
183 
184  } // namespace Fem
185 
186 } // namespace Dune
187 
188 #endif // #ifndef DUNE_FEM_SPACE_BASISFUNCTIONSET_PROXY_HH
void evaluateAll(const Point &x, const DofVector &dofs, RangeArray &ranges) const
Definition: basisfunctionset/proxy.hh:123
FunctionSpaceType::RangeType RangeType
range type
Definition: basisfunctionset/basisfunctionset.hh:45
void axpy(const Point &x, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
Definition: basisfunctionset/proxy.hh:108
BasisFunctionSetProxy()
Definition: basisfunctionset/proxy.hh:62
void jacobianAll(const Point &x, const DofVector &dofs, JacobianArray &jacobians) const
Definition: basisfunctionset/proxy.hh:144
A vector valued function space.
Definition: functionspace.hh:16
BasisFunctionSet::FunctionSpaceType FunctionSpaceType
Definition: basisfunctionset/proxy.hh:53
void hessianAll(const Point &x, const DofVector &dofs, HessianRangeType &hessian) const
Definition: basisfunctionset/proxy.hh:165
BasisFunctionSet::ReferenceElementType ReferenceElementType
Definition: basisfunctionset/proxy.hh:60
void jacobianAll(const QuadratureType &quad, const DofVector &dofs, JacobianArray &jacobians) const
evaluate the jacobian of all basis functions and store the result in the jacobians array ...
void axpy(const Quadrature &quad, const Vector &values, DofVector &dofs) const
evaluate all basis function and multiply with given values and add to dofs
Dune::ReferenceElement< typename DomainType::value_type, DomainType::dimension > ReferenceElementType
type of reference element
Definition: basisfunctionset/basisfunctionset.hh:53
int order() const
return order of basis function set
Definition: basisfunctionset/proxy.hh:71
void axpy(const QuadratureType &quad, const Vector &values, DofVector &dofs) const
Definition: basisfunctionset/proxy.hh:87
BasisFunctionSetProxy(const BasisFunctionSet *basisFunctionSet)
Definition: basisfunctionset/proxy.hh:66
BasisFunctionSet::RangeType RangeType
Definition: basisfunctionset/proxy.hh:56
FunctionSpaceType::DomainType DomainType
range type
Definition: basisfunctionset/basisfunctionset.hh:43
FunctionSpaceType::JacobianRangeType JacobianRangeType
jacobian range type
Definition: basisfunctionset/basisfunctionset.hh:47
void evaluateAll(const Point &x, const DofVector &dofs, RangeType &value) const
Definition: basisfunctionset/proxy.hh:130
std::size_t size() const
return size of basis function set
Definition: basisfunctionset/proxy.hh:74
void axpy(const Point &x, const RangeType &valueFactor, const JacobianRangeType &jacobianFactor, DofVector &dofs) const
Definition: basisfunctionset/proxy.hh:115
int order() const
return order of basis function set
Definition: coordinate.hh:4
void evaluateAll(const Quadrature &quad, const DofVector &dofs, RangeArray &ranges) const
evaluate all basis functions and store the result in the ranges array
void evaluateAll(const Point &x, RangeArray &values) const
Definition: basisfunctionset/proxy.hh:137
void axpy(const Point &x, const RangeType &valueFactor, DofVector &dofs) const
Definition: basisfunctionset/proxy.hh:101
void axpy(const QuadratureType &quad, const VectorA &valuesA, const VectorB &valuesB, DofVector &dofs) const
Definition: basisfunctionset/proxy.hh:94
Dune::GeometryType type() const
Definition: basisfunctionset/proxy.hh:77
void hessianAll(const Point &x, HessianRangeArray &hessians) const
Definition: basisfunctionset/proxy.hh:172
const ReferenceElementType & referenceElement() const
return reference element
Definition: basisfunctionset/proxy.hh:80
const EntityType & entity() const
return entity
Definition: basisfunctionset/proxy.hh:178
BasisFunctionSet::HessianRangeType HessianRangeType
Definition: basisfunctionset/proxy.hh:58
BasisFunctionSet ImplementationType
Definition: basisfunctionset/proxy.hh:44
void jacobianAll(const Point &x, const DofVector &dofs, JacobianRangeType &jacobian) const
Definition: basisfunctionset/proxy.hh:151
Definition: basisfunctionset/proxy.hh:39
const ReferenceElementType & referenceElement() const
return reference element
void hessianAll(const Point &x, const DofVector &dofs, HessianRangeType &hessian) const
BasisFunctionSet::EntityType EntityType
Definition: basisfunctionset/proxy.hh:51
BasisFunctionSet::DomainType DomainType
Definition: basisfunctionset/proxy.hh:55
Entity EntityType
entity type
Definition: basisfunctionset/basisfunctionset.hh:35
const EntityType & entity() const
return entity
void jacobianAll(const Point &x, JacobianRangeArray &jacobians) const
Definition: basisfunctionset/proxy.hh:158
BasisFunctionSet::JacobianRangeType JacobianRangeType
Definition: basisfunctionset/proxy.hh:57
Definition: basisfunctionset/basisfunctionset.hh:31
const ImplementationType & impl() const
Definition: basisfunctionset/proxy.hh:45
FunctionSpaceType::HessianRangeType HessianRangeType
hessian range type
Definition: basisfunctionset/basisfunctionset.hh:49
std::size_t size() const
return size of basis function set