dune-fem  2.8-git
pardgsimplexquadrature.hh
Go to the documentation of this file.
1 #ifndef DUNE_FEM_PARDGSIMPLEXQUADRATURE_HPP
2 #define DUNE_FEM_PARDGSIMPLEXQUADRATURE_HPP
3 
4 #include <cassert>
5 #include <vector>
6 
7 #include <dune/common/fvector.hh>
8 
9 namespace Dune {
10 namespace Fem {
11 namespace ParDGSimplexQuadrature
12 {
13 
14 
15 template<int dim>
17 {
18 public:
19  enum { numCorners = dim+1 };
20  typedef Dune::FieldVector< double, dim > CoordinateType;
21  typedef Dune::FieldVector< double, dim+1 > Point;
22 
23  Quadrature(int nop, int degree, const double x[][dim+1])
24  : nop(nop), degree(degree), x_w( nop )
25  {
26  for(int i=0; i<nop; i++)
27  {
28  for(int l=0; l<=dim; l++) x_w[i][l] = x[i][l];
29  }
30  }
31 
32  explicit Quadrature( const int order )
33  {
34  const Quadrature& quad = quadrature( order );
35  nop = quad.number_of_points();
36  degree = quad.max_order();
37 
38  assert( order <= degree );
39 
40  x_w.resize( nop );
41  for(int i=0; i<nop; i++)
42  {
43  for(int l=0; l<=dim; l++) x_w[i][l] = quad.x_w[i][l];
44  }
45  }
46 
47  CoordinateType point( const int i ) const
48  {
49  assert(i >= 0 && i < numPoints());
50  CoordinateType result;
51  for (size_t j = 0; j < dim; ++j)
52  {
53  result[j] = x(i)[j];
54  }
55  return result;
56  }
57 
59  double weight(const int i) const
60  {
61  assert(i >= 0 && i < numPoints());
62  // scale with volume of reference element!
63  return w(i);
64  }
65 
66  int order() const { return degree; }
67 
68  int numPoints() const { return number_of_points(); }
69  int max_order() const { return degree; }
70 
71  int number_of_points() const{ return nop; }
72 
73  const Point& x(int i) const {
74  assert(i>=0 && i<nop);
75  return x_w[i];
76  }
77 
78  double w(int i) const
79  {
80  assert(i>=0 && i<nop);
81  return x_w[i][dim];
82  }
83 
84  void check() const;
85 
86  static const Quadrature& quadrature(int minimum_degree);
87 
88 protected:
89 
90  int nop;
91  int degree;
92  std::vector< Point > x_w;
93 };
94 
95 
96 // dimensions of interest
101 
102 
103 
104 // 0d quadrature rule
105 //
106 // there is only one with one point and infinite degree
107 extern const Quadrature0d quad0d;
108 
109 
110 
111 // 1d quadrature rules for the interval (0,1)
112 //
113 // naming convention of quad1d_x: x denotes the order of the formula
114 // i.e. the maximum degree of polynimials
115 // that is integrated exact by the formula.
116 //
117 // exception quad1d_0: this is a dummy that has no points
122 
123 
124 
125 // 2d quadrature rules for the reference triangle [(0,0), (1,0), (0,1)]
126 //
127 // naming convention of quad2d_x: x denotes the order of the formula
128 // i.e. the maximum degree of polynimials
129 // that is integrated exact by the formula.
130 //
131 // exception quad2d_0: this is a dummy that has no points
135 
136 
137 
138 
139 // 3d quadrature rules for the reference
140 // tetrahedron [(0,0,0), (1,0,0), (0,1,0), (0,0,1)]
141 //
142 // naming convention of quad3d_x: x denotes the order of the formula
143 // i.e. the maximum degree of polynimials
144 // that is integrated exact by the formula.
145 //
146 // exception quad3d_0: this is a dummy that has no points
150 
151 
152 } // ParDGSimplexQuadrature
153 } // Fem
154 } // Dune
155 
156 #endif
Definition: bindguard.hh:11
const Quadrature3d quad3d_6
Definition: pardgsimplexquadrature.hh:148
const Quadrature1d quad1d_39
Definition: pardgsimplexquadrature.hh:121
const Quadrature1d quad1d_27
Definition: pardgsimplexquadrature.hh:120
const Quadrature1d quad1d_19
Definition: pardgsimplexquadrature.hh:119
Quadrature< 1 > Quadrature1d
Definition: pardgsimplexquadrature.hh:98
const Quadrature1d quad1d_25
Definition: pardgsimplexquadrature.hh:120
const Quadrature2d quad2d_9
Definition: pardgsimplexquadrature.hh:133
const Quadrature1d quad1d_3
Definition: pardgsimplexquadrature.hh:118
const Quadrature1d quad1d_35
Definition: pardgsimplexquadrature.hh:120
const Quadrature2d quad2d_2
Definition: pardgsimplexquadrature.hh:132
const Quadrature2d quad2d_10
Definition: pardgsimplexquadrature.hh:133
const Quadrature3d quad3d_7b
Definition: pardgsimplexquadrature.hh:148
const Quadrature2d quad2d_3
Definition: pardgsimplexquadrature.hh:132
const Quadrature3d quad3d_5b
Definition: pardgsimplexquadrature.hh:148
const Quadrature1d quad1d_31
Definition: pardgsimplexquadrature.hh:120
const Quadrature3d quad3d_4
Definition: pardgsimplexquadrature.hh:147
const Quadrature3d quad3d_2
Definition: pardgsimplexquadrature.hh:147
const Quadrature2d quad2d_11
Definition: pardgsimplexquadrature.hh:133
Quadrature< 3 > Quadrature3d
Definition: pardgsimplexquadrature.hh:100
const Quadrature1d quad1d_29
Definition: pardgsimplexquadrature.hh:120
const Quadrature3d quad3d_7
Definition: pardgsimplexquadrature.hh:148
Quadrature< 2 > Quadrature2d
Definition: pardgsimplexquadrature.hh:99
const Quadrature1d quad1d_1
Definition: pardgsimplexquadrature.hh:118
const Quadrature2d quad2d_13
Definition: pardgsimplexquadrature.hh:134
const Quadrature1d quad1d_23
Definition: pardgsimplexquadrature.hh:120
const Quadrature1d quad1d_17
Definition: pardgsimplexquadrature.hh:119
const Quadrature3d quad3d_3
Definition: pardgsimplexquadrature.hh:147
const Quadrature1d quad1d_7
Definition: pardgsimplexquadrature.hh:118
const Quadrature1d quad1d_13
Definition: pardgsimplexquadrature.hh:119
const Quadrature3d quad3d_9
Definition: pardgsimplexquadrature.hh:148
const Quadrature2d quad2d_7
Definition: pardgsimplexquadrature.hh:133
const Quadrature1d quad1d_5
Definition: pardgsimplexquadrature.hh:118
const Quadrature3d quad3d_5
Definition: pardgsimplexquadrature.hh:148
Quadrature< 0 > Quadrature0d
Definition: pardgsimplexquadrature.hh:97
const Quadrature2d quad2d_4
Definition: pardgsimplexquadrature.hh:132
const Quadrature2d quad2d_8
Definition: pardgsimplexquadrature.hh:133
const Quadrature2d quad2d_1
Definition: pardgsimplexquadrature.hh:132
const Quadrature1d quad1d_33
Definition: pardgsimplexquadrature.hh:120
const Quadrature1d quad1d_37
Definition: pardgsimplexquadrature.hh:121
const Quadrature2d quad2d_5
Definition: pardgsimplexquadrature.hh:133
const Quadrature1d quad1d_11
Definition: pardgsimplexquadrature.hh:119
const Quadrature1d quad1d_9
Definition: pardgsimplexquadrature.hh:119
const Quadrature2d quad2d_6
Definition: pardgsimplexquadrature.hh:133
const Quadrature1d quad1d_21
Definition: pardgsimplexquadrature.hh:119
const Quadrature3d quad3d_8
Definition: pardgsimplexquadrature.hh:148
const Quadrature3d quad3d_1
Definition: pardgsimplexquadrature.hh:147
const Quadrature1d quad1d_15
Definition: pardgsimplexquadrature.hh:119
const Quadrature3d quad3d_11
Definition: pardgsimplexquadrature.hh:149
Definition: pardgsimplexquadrature.hh:17
std::vector< Point > x_w
Definition: pardgsimplexquadrature.hh:92
void check() const
Definition: pardgsimplexquadrature1d.cc:63
int order() const
Definition: pardgsimplexquadrature.hh:66
Quadrature(const int order)
Definition: pardgsimplexquadrature.hh:32
CoordinateType point(const int i) const
Definition: pardgsimplexquadrature.hh:47
@ numCorners
Definition: pardgsimplexquadrature.hh:19
int degree
Definition: pardgsimplexquadrature.hh:91
int nop
Definition: pardgsimplexquadrature.hh:90
Dune::FieldVector< double, dim > CoordinateType
Definition: pardgsimplexquadrature.hh:20
Quadrature(int nop, int degree, const double x[][dim+1])
Definition: pardgsimplexquadrature.hh:23
double w(int i) const
Definition: pardgsimplexquadrature.hh:78
int number_of_points() const
Definition: pardgsimplexquadrature.hh:71
static const Quadrature & quadrature(int minimum_degree)
Definition: pardgsimplexquadrature0d.cc:13
const Point & x(int i) const
Definition: pardgsimplexquadrature.hh:73
double weight(const int i) const
Access to the ith quadrature weight.
Definition: pardgsimplexquadrature.hh:59
Dune::FieldVector< double, dim+1 > Point
Definition: pardgsimplexquadrature.hh:21
int max_order() const
Definition: pardgsimplexquadrature.hh:69
int numPoints() const
Definition: pardgsimplexquadrature.hh:68