dune-fem 2.8.0
Loading...
Searching...
No Matches
quadratureimp.hh
Go to the documentation of this file.
1#ifndef DUNE_FEM_QUADRATUREIMP_HH
2#define DUNE_FEM_QUADRATUREIMP_HH
3
4#include <cassert>
5#include <vector>
6
7#include <dune/common/fvector.hh>
8
9#include <dune/geometry/type.hh>
10
11#include <dune/fem/version.hh>
13
14namespace Dune
15{
16
17 namespace Fem
18 {
19
31 template< typename FieldImp, int dim >
33 {
34 public:
36 typedef FieldImp FieldType;
37
38 protected:
40
41 // this is used for interpolation quadratures to obtain element
42 // interpolation points for face quadratures
43 typedef FieldVector< FieldType, dim+1 > ElementCoordinateType;
44 public:
46 typedef FieldVector< FieldType, dim > CoordinateType;
47
49 enum { codimension = 0 };
50
52 static const int dimension = dim ;
53
54 protected:
55 // vector holding the coordinates for each point
56 mutable std::vector< CoordinateType > points_;
57
58 // identifier of the integration point list
59 const size_t id_;
60
76 explicit IntegrationPointListImp( size_t id )
77 : points_(), id_( id )
78 {}
79
80 public:
82
83 virtual ~IntegrationPointListImp () = default;
84
96 const CoordinateType &point ( size_t i ) const
97 {
98 assert( i < nop() );
99 return points_[ i ];
100 }
101
106 size_t nop () const
107 {
108 return points_.size();
109 }
110
122 size_t id () const
123 {
124 return id_;
125 }
126
137 virtual int order() const = 0;
138
148 virtual GeometryType geometryType () const = 0;
149
152 virtual std::vector< ElementCoordinateType > interpolationPoints(const int reqDim) const
153 {
154 return std::vector< ElementCoordinateType >();
155 }
156
160 virtual bool isFaceInterpolationQuadrature(const size_t numShapeFunctions ) const { return false; }
161
162 protected:
170 {
171 points_.push_back( point );
172 }
173
175 void setIntegrationPoints( std::vector< CoordinateType >&& points )
176 {
177 points_.swap( points );
178 }
179 };
180
181
182
193 template< typename FieldImp, int dim >
195 : public IntegrationPointListImp< FieldImp, dim >
196 {
197 public:
199 typedef FieldImp FieldType;
200
201 private:
204
205 public:
207 typedef typename BaseType :: CoordinateType CoordinateType;
208
209 protected:
210 // vector holding weights of each integration point
211 mutable std::vector< FieldType > weights_;
212
228 explicit QuadratureImp( size_t id )
229 : BaseType( id ), weights_()
230 {}
231
232 public:
233 QuadratureImp ( const QuadratureImp& ) = delete;
234
235 virtual ~QuadratureImp () = default;
236
251 const FieldType &weight ( size_t i ) const
252 {
253 return weights_[ i ];
254 }
255
256 private:
257 // Disallow use of addIntegrationPoint for quadratures
258 void addIntegrationPoint ( const CoordinateType &point )
259 {
260 BaseType :: addIntegrationPoint( point );
261 }
262
263 protected:
271 {
272 addIntegrationPoint( point );
273 weights_.push_back( weight );
274 }
275 };
276
277
278
279 // \brief Allows injection of arbitrary points as quadrature points.
280 // Useful to test some features of the quadrature framework in isolation
281 // and with known input data. Each TestQuadrature object gets its own
282 // unique id.
283 template <class ct, int dim>
284 class TestQuadrature : public QuadratureImp<ct, dim>
285 {
286 public:
287 typedef FieldVector<ct, dim> CoordinateType;
288
289 // dummy value
290 enum { maxOrder_ = 10 };
291
293 TestQuadrature(const GeometryType& geo, int order);
294
296 void newQuadraturePoint(const CoordinateType& c, ct weight);
297
299 virtual GeometryType geometryType() const { return geo_; }
300
302 virtual int order() const { return order_; }
303
305 static size_t maxOrder() { return maxOrder_; }
306
307 private:
308 GeometryType geo_;
309 int order_;
310 };
311
312 } // namespace Fem
313
314} // namespace Dune
315
317
318#endif // #ifndef DUNE_FEM_QUADRATUREIMP_HH
Definition: bindguard.hh:11
Generic implementation of an IntegrationPointList.
Definition: quadratureimp.hh:33
virtual std::vector< ElementCoordinateType > interpolationPoints(const int reqDim) const
returns list of element interpolation points for a given face quadrature
Definition: quadratureimp.hh:152
FieldImp FieldType
field type
Definition: quadratureimp.hh:36
void addIntegrationPoint(const CoordinateType &point)
Adds an integration point to the list.
Definition: quadratureimp.hh:169
virtual bool isFaceInterpolationQuadrature(const size_t numShapeFunctions) const
return true if quadrature is also a set of interpolation points for a given number of shape functions
Definition: quadratureimp.hh:160
std::vector< CoordinateType > points_
Definition: quadratureimp.hh:56
@ codimension
Definition: quadratureimp.hh:49
size_t id() const
obtain the identifier of the integration point list
Definition: quadratureimp.hh:122
const CoordinateType & point(size_t i) const
obtain coordinates of i-th integration point
Definition: quadratureimp.hh:96
IntegrationPointListImp(size_t id)
Constructor.
Definition: quadratureimp.hh:76
IntegrationPointListImp(const IntegrationPointListImp &)=delete
static const int dimension
dimension of quadrature
Definition: quadratureimp.hh:52
virtual ~IntegrationPointListImp()=default
void setIntegrationPoints(std::vector< CoordinateType > &&points)
Overwrites integration point list
Definition: quadratureimp.hh:175
size_t nop() const
obtain the number of integration points
Definition: quadratureimp.hh:106
FieldVector< FieldType, dim > CoordinateType
type of local coordinates
Definition: quadratureimp.hh:46
IntegrationPointListImp< FieldType, dim > ThisType
Definition: quadratureimp.hh:39
const size_t id_
Definition: quadratureimp.hh:59
virtual GeometryType geometryType() const =0
obtain GeometryType for this integration point list
virtual int order() const =0
obtain order of the integration point list
FieldVector< FieldType, dim+1 > ElementCoordinateType
Definition: quadratureimp.hh:43
Generic implementation of a Dune quadrature.
Definition: quadratureimp.hh:196
QuadratureImp(size_t id)
Constructor.
Definition: quadratureimp.hh:228
virtual ~QuadratureImp()=default
void addQuadraturePoint(const CoordinateType &point, const FieldType weight)
Adds a point-weight pair to the quadrature.
Definition: quadratureimp.hh:270
QuadratureImp(const QuadratureImp &)=delete
BaseType::CoordinateType CoordinateType
type of local coordinates
Definition: quadratureimp.hh:207
FieldImp FieldType
field type
Definition: quadratureimp.hh:199
std::vector< FieldType > weights_
Definition: quadratureimp.hh:211
const FieldType & weight(size_t i) const
obtain weight of i-th integration point
Definition: quadratureimp.hh:251
Definition: quadratureimp.hh:285
FieldVector< ct, dim > CoordinateType
Definition: quadratureimp.hh:287
@ maxOrder_
Definition: quadratureimp.hh:290
virtual int order() const
Dummy order method.
Definition: quadratureimp.hh:302
static size_t maxOrder()
Dummy max order method.
Definition: quadratureimp.hh:305
void newQuadraturePoint(const CoordinateType &c, ct weight)
Adds new quadrature point/weight pair.
Definition: quadratureimp_inline.hh:21
virtual GeometryType geometryType() const
Desired geometry.
Definition: quadratureimp.hh:299