Quadrature< dim > Class Template Reference
[Quadrature formulas]

Inheritance diagram for Quadrature< dim >:
Inheritance graph
[legend]

List of all members.

Public Types

typedef Quadrature< dim-1 > SubQuadrature

Public Member Functions

 Quadrature (const unsigned int n_quadrature_points=0)
 Quadrature (const SubQuadrature &, const Quadrature< 1 > &)
 Quadrature (const Quadrature< dim!=1?1:0 > &quadrature_1d)
 Quadrature (const Quadrature< dim > &q)
 Quadrature (const std::vector< Point< dim > > &points, const std::vector< double > &weights)
 Quadrature (const std::vector< Point< dim > > &points)
 Quadrature (const Point< dim > &point)
Quadratureoperator= (const Quadrature< dim > &)
virtual ~Quadrature ()
unsigned int size () const
const Point< dim > & point (const unsigned int i) const
const std::vector< Point< dim > > & get_points () const
double weight (const unsigned int i) const
const std::vector< double > & get_weights () const
unsigned int memory_consumption () const

Public Attributes

unsigned int n_quadrature_points

Protected Attributes

std::vector< Point< dim > > quadrature_points
std::vector< doubleweights

Detailed Description

template<int dim>
class Quadrature< dim >

Base class for quadrature formulæ in arbitrary dimensions. This class stores quadrature points and weights on the unit line [0,1], unit square [0,1]x[0,1], etc.

There are a number of derived classes, denoting concrete integration formulæ. Their names names prefixed by Q. Refer to the list of derived classes for more details.

The schemes for higher dimensions are tensor products of the one-dimansional formulæ. Therefore, a three-dimensional 5-point Gauss formula has 125 quadrature points.

Mathematical background

For each quadrature formula we denote by m, the maximal degree of polynomials integrated exactly. This number is given in the documentation of each formula. The order of the integration error is m+1, that is, the error is the size of the cell two the m+1 by the Bramble-Hilbert Lemma. The number m is to be found in the documentation of each concrete formula. For the optimal formulæ QGauss we have $m = 2N-1$, where N is the constructor parameter to QGauss. The tensor product formulæ are exact on tensor product polynomials of degree m in each space direction, but they are still only of m+1st order.

Implementation details

Most integration formulæ in more than one space dimension are tensor products of quadrature formulæ in one space dimension, or more generally the tensor product of a formula in (dim-1) dimensions and one in one dimension. There is a special constructor to generate a quadrature formula from two others. For example, the QGauss<dim> formulæ include Ndim quadrature points in dim dimensions, where N is the constructor parameter of QGauss.

For some programs it is necessary to have a quadrature object for faces. These programs fail to link if compiled for only one space dimension, since there quadrature rules for faces just don't make no sense. In order to allow these programs to be linked anyway, for class Quadrature<0> all functions are provided in the quadrature.cc file, but they will throw exceptions if actually called. The only function which is allowed to be called is the constructor taking one integer, which in this case ignores its parameter, and of course the destructor. Besides this, it is necessary to provide a class Point<0> to make the compiler happy. This class also does nothing.

Note:
Instantiations for this template are provided for dimensions 1, 2, and 3 (see the section on Template instantiations in the manual).
Author:
Wolfgang Bangerth, Guido Kanschat, 1998, 1999, 2000, 2005

Member Typedef Documentation

template<int dim>
typedef Quadrature<dim-1> Quadrature< dim >::SubQuadrature

Define a typedef for a quadrature that acts on an object of one dimension less. For cells, this would then be a face quadrature.


Constructor & Destructor Documentation

template<int dim>
Quadrature< dim >::Quadrature ( const unsigned int  n_quadrature_points = 0  )  [explicit]

Constructor.

This constructor is marked as explicit to avoid involuntary accidents like in hp::QCollection<dim> q_collection(3) where hp::QCollection<dim> q_collection(QGauss<dim>(3)) was meant.

template<int dim>
Quadrature< dim >::Quadrature ( const SubQuadrature< dim > &  ,
const Quadrature< 1 > &   
)

Build this quadrature formula as the tensor product of a formula in a dimension one less than the present and a formula in one dimension.

SubQuadrature<dim>::type expands to Quadrature<dim-1>.

template<int dim>
Quadrature< dim >::Quadrature ( const Quadrature< dim!=1?1:0 > &  quadrature_1d  )  [explicit]

Build this quadrature formula as the dim-fold tensor product of a formula in one dimension.

Assuming that the points in the one-dimensional rule are in ascending order, the points of the resulting rule are ordered lexicographically with x running fastest.

In order to avoid a conflict with the copy constructor in 1d, we let the argument be a 0d quadrature formula for dim==1, and a 1d quadrature formula for all other space dimensions.

template<int dim>
Quadrature< dim >::Quadrature ( const Quadrature< dim > &  q  ) 

Copy constructor.

template<int dim>
Quadrature< dim >::Quadrature ( const std::vector< Point< dim > > &  points,
const std::vector< double > &  weights 
)

Construct a quadrature formula from given vectors of quadrature points (which should really be in the unit cell) and the corresponding weights. You will want to have the weights sum up to one, but this is not checked.

template<int dim>
Quadrature< dim >::Quadrature ( const std::vector< Point< dim > > &  points  ) 

Construct a dummy quadrature formula from a list of points, with weights set to infinity. The resulting object is therefore not meant to actually perform integrations, but rather to be used with FEValues objects in order to find the position of some points (the quadrature points in this object) on the transformed cell in real space.

template<int dim>
Quadrature< dim >::Quadrature ( const Point< dim > &  point  ) 

Constructor for a one-point quadrature. Sets the weight of this point to one.

template<int dim>
virtual Quadrature< dim >::~Quadrature (  )  [virtual]

Virtual destructor.


Member Function Documentation

template<int dim>
Quadrature& Quadrature< dim >::operator= ( const Quadrature< dim > &   ) 

Assignment operator. Copies contents of weights and quadrature_points as well as size.

Reimplemented from Subscriptor.

template<int dim>
unsigned int Quadrature< dim >::size (  )  const

Number of quadrature points.

template<int dim>
const Point<dim>& Quadrature< dim >::point ( const unsigned int  i  )  const

Return the ith quadrature point.

template<int dim>
const std::vector<Point<dim> >& Quadrature< dim >::get_points (  )  const

Return a reference to the whole array of quadrature points.

template<int dim>
double Quadrature< dim >::weight ( const unsigned int  i  )  const

Return the weight of the ith quadrature point.

template<int dim>
const std::vector<double>& Quadrature< dim >::get_weights (  )  const

Return a reference to the whole array of weights.

template<int dim>
unsigned int Quadrature< dim >::memory_consumption (  )  const

Determine an estimate for the memory consumption (in bytes) of this object.


Member Data Documentation

template<int dim>
unsigned int Quadrature< dim >::n_quadrature_points
Deprecated:
Use size() instead.

Number of quadrature points.

Warning:
After introduction of the assignment operator, this number is not constant anymore and erroneous assignment can compromise integrity of the Quadrature object. Since direct data access should be considered a design flaw anyway, it is strongly suggested to use size() instead.
template<int dim>
std::vector<Point<dim> > Quadrature< dim >::quadrature_points [protected]

List of quadrature points. To be filled by the constructors of derived classes.

template<int dim>
std::vector<double> Quadrature< dim >::weights [protected]

List of weights of the quadrature points. To be filled by the constructors of derived classes.


The documentation for this class was generated from the following file:

deal.II documentation generated on Mon Nov 23 22:58:03 2009 by doxygen 1.6.1