dune-fem  2.4.1-rc
lumpingquadrature.hh
Go to the documentation of this file.
1 #ifndef __DUNE_FEM_LUMPING_QUADRATURE_HH__
2 #define __DUNE_FEM_LUMPING_QUADRATURE_HH__
3 
5 
6 namespace Dune {
7 
8 namespace Fem {
9 
24 template<class FieldImp, class Topology>
26  : public QuadratureImp<FieldImp, Topology::dimension>
27 {
28  public:
29  typedef FieldImp FieldType;
30  typedef Topology TopologyType;
31  enum { dimension = TopologyType::dimension };
32 
33  private:
36 
37  public:
39 
40  protected:
41  static const unsigned int topologyId = TopologyType::id;
42  typedef Dune::GenericGeometry::ReferenceDomain<TopologyType> ReferenceDomain;
43 
44  public:
51  LumpingQuadrature(const GeometryType& geometry, int ignored, int id)
52  : BaseType(id)
53  {
54  // make sure that we only use orders that are available
55  assert(ignored == 1);
56 
57  for (unsigned i = 0; i < ReferenceDomain::numCorners; ++i) {
58  CoordinateType pt;
59  ReferenceDomain::corner(i, pt);
60  this->addQuadraturePoint(pt, ReferenceDomain::template volume<FieldType>() / ReferenceDomain::numCorners);
61  }
62  }
63 
66  virtual GeometryType geometryType() const { return GeometryType(topologyId, dimension); }
69  virtual int order () const { return 1; }
70 
72  static size_t maxOrder () { return 1; }
73 };
74 
75 template<class FieldType, int dimension>
77 {
79 
84  typedef SimplexQuadratureType PointQuadratureType;
85  typedef SimplexQuadratureType LineQuadratureType;
86 };
87 
88 template<class GridPartImp, int codim>
90 {
91  // Type of a single coordinate.
92  typedef typename GridPartImp::ctype ctype;
93 
94  // Dimension of the quadrature.
95  enum { dimension = GridPartImp::dimension };
96 
97  // Co-dimension.
98  enum { codimension = codim };
99 
101 
102  // type of local coordinate (with respect to the codim-0 entity). Mind the difference in the dimension!
103  typedef typename
106 };
107 
108 template<class GridPartImp, int codim>
110 
111 template<typename GridPart>
112 class CachingLumpingQuadrature<GridPart, 0>
113  : public CachingPointList<GridPart, 0, LumpingQuadratureTraits<GridPart, 0> >
114 {
115  public:
117  typedef GridPart GridPartType;
118 
120  enum { codimension = 0 };
121 
122  private:
124 
127  BaseType;
128 
129  public:
131  enum { dimension = BaseType::dimension };
132 
134  typedef typename BaseType::RealType RealType;
137 
138  // for compatibility
139  typedef typename GridPartType::template Codim<0>::EntityType EntityType;
140 
141  protected:
142  using BaseType::quadImp;
143 
144  public:
157  CachingLumpingQuadrature(const EntityType &entity, int ignored = 1)
158  : BaseType(entity.type(), 1)
159  {}
160 
165  CachingLumpingQuadrature(const ThisType &org) : BaseType(org) {}
166 
167  const RealType &weight (size_t i) const
168  {
169  // All weights should have the same value.
170  return quadImp().weight(0);
171  }
172 };
173 
174 template<typename GridPart>
175 class CachingLumpingQuadrature<GridPart, 1>
176  : public CachingPointList<GridPart, 1, LumpingQuadratureTraits<GridPart, 1> >
177 {
178  public:
180  typedef GridPart GridPartType;
181 
183  enum { codimension = 1 };
184 
185  private:
187 
190  BaseType;
191 
192  public:
194  enum { dimension = BaseType::dimension };
195 
197  typedef typename BaseType::RealType RealType;
198 
201 
203  typedef typename BaseType::IntersectionIteratorType IntersectionIteratorType;
204  typedef typename IntersectionIteratorType::Intersection IntersectionType;
205 
206  protected:
207  using BaseType::quadImp;
208 
209  public:
218  CachingLumpingQuadrature(const GridPartType& gridPart,
219  const IntersectionType& intersection,
220  int ignored,
221  typename BaseType::Side side)
222  : BaseType(gridPart, intersection, 1, side)
223  {}
224 
229  CachingLumpingQuadrature(const ThisType &org) : BaseType(org) {}
230 
231  const RealType &weight (size_t i) const
232  {
233  // All weights should have the same value.
234  return quadImp().weight(0);
235  }
236 };
237 
238 } // Fem
239 
240 } // Dune
241 
242 
243 #endif // __DUNE_FEM_LUMPING_QUADRATURE_HH__
Topology TopologyType
Definition: lumpingquadrature.hh:30
BaseType::CoordinateType CoordinateType
type of local coordinates
Definition: quadratureimp.hh:191
Definition: lumpingquadrature.hh:25
QuadratureImp< FieldType, dimension > IntegrationPointListType
Definition: lumpingquadrature.hh:78
virtual int order() const
obtain order of the integration point list
Definition: lumpingquadrature.hh:69
LumpingQuadrature< FieldType, typename GenericGeometry::SimplexTopology< dimension >::type > SimplexQuadratureType
Definition: lumpingquadrature.hh:80
integration point list supporting base function caching
Definition: cachingpointlist.hh:74
void addQuadraturePoint(const CoordinateType &point, const FieldType weight)
Adds a point-weight pair to the quadrature.
Definition: quadratureimp.hh:261
LumpingQuadrature< FieldType, typename GenericGeometry::PrismTopology< dimension >::type > PrismQuadratureType
Definition: lumpingquadrature.hh:82
BaseType::RealType RealType
Just another name for double...
Definition: lumpingquadrature.hh:134
Dune::GenericGeometry::ReferenceDomain< TopologyType > ReferenceDomain
Definition: lumpingquadrature.hh:42
LumpingQuadrature< FieldType, typename GenericGeometry::CubeTopology< dimension >::type > CubeQuadratureType
Definition: lumpingquadrature.hh:81
BaseType::RealType RealType
Just another name for double...
Definition: lumpingquadrature.hh:197
Definition: lumpingquadrature.hh:89
GridPartType::template Codim< 0 >::EntityType EntityType
Definition: lumpingquadrature.hh:139
IntegrationPointListType::CoordinateType CoordinateType
type of local coordinate vectors
Definition: quadrature.hh:344
const RealType & weight(size_t i) const
Definition: lumpingquadrature.hh:231
CachingLumpingQuadrature(const ThisType &org)
copy constructor
Definition: lumpingquadrature.hh:165
IntersectionIteratorType::Intersection IntersectionType
Definition: lumpingquadrature.hh:204
Definition: lumpingquadrature.hh:109
BaseType::CoordinateType CoordinateType
The type of the coordinates in the codim-0 reference element.
Definition: lumpingquadrature.hh:200
BaseType::CoordinateType CoordinateType
The type of the coordinates in the codim-0 reference element.
Definition: lumpingquadrature.hh:136
LumpingQuadrature< FieldType, typename GenericGeometry::PyramidTopology< dimension >::type > PyramidQuadratureType
Definition: lumpingquadrature.hh:83
Definition: coordinate.hh:4
Quadrature< ctype, dimension-codim, DefaultLumpingQuadratureTraits > IntegrationPointListType
Definition: lumpingquadrature.hh:100
GridPart GridPartType
type of grid partition
Definition: lumpingquadrature.hh:180
CachingLumpingQuadrature(const ThisType &org)
copy constructor
Definition: lumpingquadrature.hh:229
Definition: lumpingquadrature.hh:31
static size_t maxOrder()
maximal order of available quadratures
Definition: lumpingquadrature.hh:72
CachingLumpingQuadrature(const EntityType &entity, int ignored=1)
constructor
Definition: lumpingquadrature.hh:157
CachingLumpingQuadrature(const GridPartType &gridPart, const IntersectionType &intersection, int ignored, typename BaseType::Side side)
constructor
Definition: lumpingquadrature.hh:218
Definition: lumpingquadrature.hh:76
LumpingQuadrature(const GeometryType &geometry, int ignored, int id)
constructor filling the list of points and weights.
Definition: lumpingquadrature.hh:51
const RealType & weight(size_t i) const
Definition: lumpingquadrature.hh:167
Generic implementation of a Dune quadrature.
Definition: quadratureimp.hh:178
Quadrature< ctype, dimension, DefaultQuadratureTraits >::CoordinateType CoordinateType
Definition: lumpingquadrature.hh:105
virtual GeometryType geometryType() const
Definition: lumpingquadrature.hh:66
SimplexQuadratureType PointQuadratureType
Definition: lumpingquadrature.hh:84
BaseType::CoordinateType CoordinateType
Definition: lumpingquadrature.hh:38
BaseType::IntersectionIteratorType IntersectionIteratorType
Type of the intersection iterator.
Definition: lumpingquadrature.hh:203
static const unsigned int topologyId
Definition: lumpingquadrature.hh:41
SimplexQuadratureType LineQuadratureType
Definition: lumpingquadrature.hh:85
FieldImp FieldType
Definition: lumpingquadrature.hh:29
GridPartImp::ctype ctype
Definition: lumpingquadrature.hh:92
GridPart GridPartType
type of grid partition
Definition: lumpingquadrature.hh:117
actual interface class for quadratures
Definition: quadrature.hh:320