dune-fem  2.4.1-rc
quadrature.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_QUADRATURE_HH
2 #define DUNE_FEM_QUADRATURE_HH
3 
4 //#include <vector>
5 #include <cassert>
6 
7 #include <dune/common/fvector.hh>
8 #include <dune/common/exceptions.hh>
9 #include <dune/grid/common/grid.hh>
10 
13 
14 // quadrature storage classes
17 
18 namespace Dune
19 {
20  namespace Fem
21  {
39  template< class Quadrature >
41  {
42  public:
44 
45  private:
47 
48  protected:
49  const QuadratureType &quadrature_;
50  const unsigned int quadPoint_;
51 
52  public:
53  inline QuadraturePointWrapper ( const QuadratureType &quadrature,
54  const unsigned int quadPoint )
55  : quadrature_( quadrature ),
56  quadPoint_( quadPoint )
57  {
58  }
59 
60  private:
61  // forbid assignment
62  ThisType &operator= ( const ThisType & );
63 
64  public:
65  inline const QuadratureType &quadrature () const
66  {
67  return quadrature_;
68  }
69 
70  inline unsigned int point () const
71  {
72  return quadPoint_;
73  }
74  };
75 
76 
77 
90  template< class Quadrature >
91  static inline typename Quadrature::CoordinateType
93  {
94  return x.quadrature().point( x.point() );
95  }
96 
97 
98 
116  template< typename FieldImp, int dim,
117  template< class, int > class IntegrationTraits >
119  {
120  public:
121  typedef FieldImp FieldType;
122 
123  enum { dimension = dim };
124 
125  private:
127 
128  typedef IntegrationTraits< FieldType, dimension > Traits;
129 
132 
133  public:
135  typedef typename Traits :: IntegrationPointListType IntegrationPointListType;
136 
138  typedef typename IntegrationPointListType :: CoordinateType CoordinateType;
139 
141 
143  enum { codimension = 0 };
144 
145  protected:
146  const IntegrationPointListType &ipList_;
147 
148  public:
159  inline IntegrationPointList ( const GeometryType &geometryType,
160  int order )
161  : ipList_( QuadratureProviderType :: getQuadrature( geometryType, order ) )
162  {
163  }
164 
177  inline IntegrationPointList ( const GeometryType &geometryType,
178  const GeometryType &elementGeometry,
179  int order )
180  : ipList_( QuadratureProviderType :: getQuadrature( geometryType, elementGeometry, order ) )
181  {
182  }
183 
193  inline IntegrationPointList ( const IntegrationPointListType &ipList )
194  : ipList_( ipList )
195  {
196  }
197 
203  : ipList_( org.ipList_ )
204  {
205  }
206 
207  const QuadraturePointWrapperType operator[] ( unsigned int i ) const
208  {
209  return QuadraturePointWrapperType( *this, i );
210  }
211 
217  const IntegrationPointListType &ipList () const
218  {
219  return ipList_;
220  }
221 
226  int nop () const
227  {
228  return ipList_.nop();
229  }
230 
242  const CoordinateType &point ( size_t i ) const
243  {
244  return ipList_.point( i );
245  }
246 
258  size_t id () const
259  {
260  return ipList_.id();
261  }
262 
276  int order () const
277  {
278  return ipList_.order();
279  }
280 
293  GeometryType geometryType () const
294  {
295  return ipList_.geometryType();
296  }
297  };
298 
299 
300 
318  template< class FieldImp, int dim,
319  template< class, int > class QuadratureTraits = DefaultQuadratureTraits >
321  : public IntegrationPointList< FieldImp, dim, QuadratureTraits >
322  {
323  public:
324  typedef FieldImp FieldType;
325 
326  static const unsigned int dimension = dim ;
327 
328  private:
331 
332  typedef QuadratureTraits< FieldType, dimension > Traits;
333 
336 
337  public:
338  using BaseType :: ipList;
339 
341  typedef typename Traits :: IntegrationPointListType IntegrationPointListType;
342 
344  typedef typename IntegrationPointListType :: CoordinateType CoordinateType;
345 
347  enum { codimension = 0 };
348 
349  public:
360  inline Quadrature( const GeometryType &geometryType, int order )
361  : BaseType( geometryType, order )
362  {
363  }
364 
380  inline Quadrature ( const GeometryType &geometryType,
381  const GeometryType &elementGeometry,
382  int order )
383  : BaseType( geometryType, elementGeometry, order )
384  {
385  }
386 
396  inline explicit Quadrature( const IntegrationPointListType& ipList )
397  : BaseType( ipList )
398  {
399  }
400 
405  inline Quadrature( const Quadrature &org )
407  : BaseType( org )
408  {
409  }
410 
425  const FieldType &weight( size_t i ) const
426  {
427  return ipList().weight( i );
428  }
429  };
430 
431  } //end namespace Fem
432 
433 } //end namespace Dune
434 
435 #endif
GeometryType geometryType() const
obtain GeometryType for this integration point list
Definition: quadrature.hh:293
QuadraturePointWrapper(const QuadratureType &quadrature, const unsigned int quadPoint)
Definition: quadrature.hh:53
const unsigned int quadPoint_
Definition: quadrature.hh:50
int nop() const
obtain the number of integration points
Definition: quadrature.hh:226
int order() const
obtain order of the integration point list
Definition: quadrature.hh:276
const QuadratureType & quadrature_
Definition: quadrature.hh:49
const FieldType & weight(size_t i) const
obtain weight of i-th integration point
Definition: quadrature.hh:425
actual interface class for integration point lists
Definition: quadrature.hh:118
wrapper for a (Quadrature,int) pair
Definition: quadrature.hh:40
FieldImp FieldType
Definition: quadrature.hh:121
const IntegrationPointListType & ipList() const
obtain a reference the actual implementation
Definition: quadrature.hh:217
Quadrature(const IntegrationPointListType &ipList)
create an integration point list from an implementation
Definition: quadrature.hh:396
const QuadratureType & quadrature() const
Definition: quadrature.hh:65
Traits::IntegrationPointListType IntegrationPointListType
type of integration point list implementation
Definition: quadrature.hh:135
Quadrature(const GeometryType &geometryType, int order)
create a quadrature for a given geometry and order
Definition: quadrature.hh:360
Quadrature QuadratureType
Definition: quadrature.hh:43
IntegrationPointListType::CoordinateType CoordinateType
type of local coordinate vectors
Definition: quadrature.hh:344
Traits::IntegrationPointListType IntegrationPointListType
type of the implementation (this must actually be a quadrature implementation)
Definition: quadrature.hh:341
unsigned int point() const
Definition: quadrature.hh:70
static Quadrature::CoordinateType coordinate(const QuadraturePointWrapper< Quadrature > &x)
extract the real coordinate from a point
Definition: quadrature.hh:92
IntegrationPointList(const IntegrationPointList &org)
copy constructor
Definition: quadrature.hh:202
IntegrationPointList(const IntegrationPointListType &ipList)
create an integration point list from an implementation
Definition: quadrature.hh:193
Definition: defaultquadratures.hh:33
Definition: coordinate.hh:4
QuadraturePointWrapper< ThisType > QuadraturePointWrapperType
Definition: quadrature.hh:140
size_t id() const
obtain the identifier of the integration point list
Definition: quadrature.hh:258
const CoordinateType & point(size_t i) const
obtain coordinates of i-th integration point
Definition: quadrature.hh:242
Quadrature(const GeometryType &geometryType, const GeometryType &elementGeometry, int order)
create a quadrature for a given geometry and order
Definition: quadrature.hh:380
IntegrationPointList(const GeometryType &geometryType, int order)
create a quadrature for a given geometry type and order
Definition: quadrature.hh:159
IntegrationPointList(const GeometryType &geometryType, const GeometryType &elementGeometry, int order)
create a quadrature for a given geometry type and order
Definition: quadrature.hh:177
provide a single instance pool of quadratures
Definition: quadprovider.hh:103
const IntegrationPointListType & ipList_
Definition: quadrature.hh:146
IntegrationPointListType::CoordinateType CoordinateType
type of coordinate
Definition: quadrature.hh:138
FieldImp FieldType
Definition: quadrature.hh:324
actual interface class for quadratures
Definition: quadrature.hh:320