dune-fem  2.4.1-rc
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 
6 #include <dune/common/fvector.hh>
7 #include <dune/geometry/type.hh>
8 
9 #include <dune/fem/version.hh>
10 
13 
14 namespace Dune
15 {
16 
17  namespace Fem
18  {
19 
31  template< typename FieldImp, int dim >
33  {
34  public:
36  typedef FieldImp FieldType;
37 
38  private:
40 
41  public:
43  typedef FieldVector< FieldType, dim > CoordinateType;
44 
46  enum { codimension = 0 };
47 
48  private:
49  // vector holding the coordinates for each point
51 
52  // identifier of the integration point list
53  const size_t id_;
54 
55  protected:
71  inline explicit IntegrationPointListImp( size_t id )
72  : points_(),
73  id_( id )
74  {
75  }
76 
77  private:
78  // Copying is forbidden
80 
81  public:
82  // Virtual destructor
84  {
85  }
86 
98  inline const CoordinateType &point ( size_t i ) const
99  {
100  assert( i < nop() );
101  return points_[ i ];
102  }
103 
108  size_t nop () const
109  {
110  return points_.size();
111  }
112 
124  size_t id () const
125  {
126  return id_;
127  }
128 
139  virtual int order() const = 0;
140 
150  virtual GeometryType geometryType () const = 0;
151 
152  protected:
159  void addIntegrationPoint( const CoordinateType &point )
160  {
161  points_.append( point );
162  }
163  };
164 
165 
166 
177  template< typename FieldImp, int dim >
179  : public IntegrationPointListImp< FieldImp, dim >
180  {
181  public:
183  typedef FieldImp FieldType;
184 
185  private:
188 
189  public:
192 
193  private:
194  // vector holding weights of each integration point
195  DynamicArray< FieldType > weights_;
196 
197  protected:
213  inline explicit QuadratureImp( size_t id )
214  : BaseType( id ),
215  weights_()
216  {
217  }
218 
219  private:
220  // Copying is forbidden
221  QuadratureImp ( const QuadratureImp& );
222 
223  public:
224  virtual ~QuadratureImp ()
225  {
226  }
227 
242  const FieldType &weight ( size_t i ) const
243  {
244  return weights_[ i ];
245  }
246 
247  private:
248  // Disallow use of addIntegrationPoint for quadratures
249  inline void addIntegrationPoint ( const CoordinateType &point )
250  {
251  BaseType :: addIntegrationPoint( point );
252  }
253 
254  protected:
261  inline void addQuadraturePoint ( const CoordinateType &point,
262  const FieldType weight )
263  {
264  addIntegrationPoint( point );
265  weights_.append( weight );
266  }
267  };
268 
269 
270 
271  // \brief Allows injection of arbitrary points as quadrature points.
272  // Useful to test some features of the quadrature framework in isolation
273  // and with known input data. Each TestQuadrature object gets its own
274  // unique id.
275  template <class ct, int dim>
276  class TestQuadrature : public QuadratureImp<ct, dim>
277  {
278  public:
279  typedef FieldVector<ct, dim> CoordinateType;
280 
281  // dummy value
282  enum { maxOrder_ = 10 };
283 
284  public:
286  TestQuadrature(const GeometryType& geo, int order);
287 
289  void newQuadraturePoint(const CoordinateType& c, ct weight);
290 
292  virtual GeometryType geometryType() const { return geo_; }
293 
295  virtual int order() const { return order_; }
296 
298  static size_t maxOrder() { return maxOrder_; }
299 
300  private:
301  GeometryType geo_;
302  int order_;
303  };
304 
305  } // namespace Fem
306 
307 } // namespace Dune
308 
309 #include "quadratureimp_inline.hh"
310 
311 #endif // #ifndef DUNE_FEM_QUADRATUREIMP_HH
BaseType::CoordinateType CoordinateType
type of local coordinates
Definition: quadratureimp.hh:191
unsigned int size() const
Definition: array.hh:617
FieldVector< FieldType, dim > CoordinateType
type of local coordinates
Definition: quadratureimp.hh:43
void addQuadraturePoint(const CoordinateType &point, const FieldType weight)
Adds a point-weight pair to the quadrature.
Definition: quadratureimp.hh:261
static size_t maxOrder()
Dummy max order method.
Definition: quadratureimp.hh:298
size_t nop() const
obtain the number of integration points
Definition: quadratureimp.hh:108
const CoordinateType & point(size_t i) const
obtain coordinates of i-th integration point
Definition: quadratureimp.hh:98
const FieldType & weight(size_t i) const
obtain weight of i-th integration point
Definition: quadratureimp.hh:242
virtual ~IntegrationPointListImp()
Definition: quadratureimp.hh:83
void addIntegrationPoint(const CoordinateType &point)
Adds an integration point to the list.
Definition: quadratureimp.hh:159
FieldImp FieldType
field type
Definition: quadratureimp.hh:183
virtual GeometryType geometryType() const =0
obtain GeometryType for this integration point list
void append(const ElementType &element)
Definition: array.hh:551
Definition: coordinate.hh:4
FieldVector< ct, dim > CoordinateType
Definition: quadratureimp.hh:279
QuadratureImp(size_t id)
Constructor.
Definition: quadratureimp.hh:213
virtual GeometryType geometryType() const
Desired geometry.
Definition: quadratureimp.hh:292
virtual int order() const =0
obtain order of the integration point list
size_t id() const
obtain the identifier of the integration point list
Definition: quadratureimp.hh:124
Generic implementation of a Dune quadrature.
Definition: quadratureimp.hh:178
virtual int order() const
Dummy order method.
Definition: quadratureimp.hh:295
FieldImp FieldType
field type
Definition: quadratureimp.hh:36
Definition: quadratureimp.hh:276
IntegrationPointListImp(size_t id)
Constructor.
Definition: quadratureimp.hh:71
Generic implementation of an IntegrationPointList.
Definition: quadratureimp.hh:32
virtual ~QuadratureImp()
Definition: quadratureimp.hh:224