From ff517d5de27bda667f7104a2013c32b613e9f3c4 Mon Sep 17 00:00:00 2001 From: guido Date: Fri, 10 Jun 2005 13:52:28 +0000 Subject: [PATCH] new function for multidimensional tensor products of quadrature rules git-svn-id: https://svn.dealii.org/trunk@10852 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/base/include/base/quadrature.h | 17 +++++++++- deal.II/base/source/quadrature.cc | 44 ++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/deal.II/base/include/base/quadrature.h b/deal.II/base/include/base/quadrature.h index 96989be0dc..5bd8cb18ab 100644 --- a/deal.II/base/include/base/quadrature.h +++ b/deal.II/base/include/base/quadrature.h @@ -75,7 +75,7 @@ * * @ref Instantiations: few * - * @author Wolfgang Bangerth, 1998, 1999, 2000 + * @author Wolfgang Bangerth, Guido Kanschat, 1998, 1999, 2000, 2005 */ template class Quadrature : public Subscriptor @@ -114,6 +114,21 @@ class Quadrature : public Subscriptor Quadrature (const SubQuadrature &, const Quadrature<1> &); + /** + * Build this quadrature formula + * as the dim-fold + * tensor product of a formula in + * one dimension. + * + * Assuming that the points in + * the on-dimensional rule are in + * ascending order, the points of + * the resulting rule are ordered + * lexicographically with + * x running fastest. + */ + Quadrature (const Quadrature<1> &); + /** * Construct a quadrature formula * from given vectors of diff --git a/deal.II/base/source/quadrature.cc b/deal.II/base/source/quadrature.cc index 2dc8bab16f..a9e12b248c 100644 --- a/deal.II/base/source/quadrature.cc +++ b/deal.II/base/source/quadrature.cc @@ -21,6 +21,17 @@ #include +// Integer to the power of dim +template +inline unsigned int dimpow (unsigned int n) +{ + unsigned int result = n; + for (unsigned int i=1;i Quadrature<0>::Quadrature (const unsigned int) : n_quadrature_points(0) @@ -141,6 +152,39 @@ Quadrature::Quadrature (const SubQuadrature &q1, +template +Quadrature::Quadrature (const Quadrature<1> &q) + : + Subscriptor(), + n_quadrature_points (dimpow(q.n_quadrature_points)), + quadrature_points (n_quadrature_points), + weights (n_quadrature_points, 0.) +{ + const unsigned int n0 = q.n_quadrature_points; + const unsigned int n1 = (dim>1) ? n0 : 1; + const unsigned int n2 = (dim>2) ? n0 : 1; + + unsigned int k=0; + for (unsigned int i2=0;i21) + quadrature_points[k](1) = q.point(i1)(0); + if (dim>2) + quadrature_points[k](2) = q.point(i2)(0); + weights[k] = q.weight(i0); + if (dim>1) + weights[k] *= q.weight(i1); + if (dim>2) + weights[k] *= q.weight(i2); + ++k; + } +} + + + template Quadrature::~Quadrature () {} -- 2.39.5