From: guido Date: Mon, 23 May 2005 22:13:21 +0000 (+0000) Subject: new class QAnisotropic and new module Quadrature X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d01e6073e0aedcd1498672be6f4590f25c65eb6;p=dealii-svn.git new class QAnisotropic and new module Quadrature git-svn-id: https://svn.dealii.org/trunk@10702 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/base/include/base/quadrature.h b/deal.II/base/include/base/quadrature.h index d36acc1f5d..90e67261be 100644 --- a/deal.II/base/include/base/quadrature.h +++ b/deal.II/base/include/base/quadrature.h @@ -20,6 +20,9 @@ #include +/*!@addtogroup Quadrature */ +/*@{*/ + /** * Base class for quadrature formulae in arbitrary dimensions. This class * stores quadrature points and weights on the unit line [0,1], unit @@ -202,6 +205,44 @@ class Quadrature : public Subscriptor }; +/** + * Quadrature formula implementing anisotropic distributions of + * quadrature points on the reference cell. To this end, the tensor + * product of dim onedimensional quadrature formulas is + * generated. + * + * @note Each constructor can only be used in the dimension matching + * the number of arguments. + * + * @author Guido Kanschat, 2005 + */ +template +class QAnisotropic : public Quadrature +{ + public: + /** + * Constructor for a + * onedimensional formula. This + * one just copies the given + * quadrature rule. + */ + QAnisotropic(const Quadrature<1>& qx); + + /** + * Constructor for a twodimensional formula. + */ + QAnisotropic(const Quadrature<1>& qx, + const Quadrature<1>& qy); + + /** + * Constructor for a threedimensional formula. + */ + QAnisotropic(const Quadrature<1>& qx, + const Quadrature<1>& qy, + const Quadrature<1>& qz); + +}; + /** * Quadrature formula constructed by iteration of another quadrature formula in @@ -567,6 +608,8 @@ class QProjector static Quadrature<2> reflect (const Quadrature<2> &q); }; +/*@}*/ + /// @if NoDoc /* -------------- declaration of explicit specializations ------------- */ diff --git a/deal.II/base/source/quadrature.cc b/deal.II/base/source/quadrature.cc index e54823a257..4096cabde0 100644 --- a/deal.II/base/source/quadrature.cc +++ b/deal.II/base/source/quadrature.cc @@ -234,6 +234,67 @@ Quadrature::memory_consumption () const } +//--------------------------------------------------------------------------- +template +QAnisotropic::QAnisotropic(const Quadrature<1>& qx) + : Quadrature(qx.n_quadrature_points) +{ + Assert (dim==1, ExcImpossibleInDim(dim)); + unsigned int k=0; + for (unsigned int k1=0;k1quadrature_points[k](0) = qx.point(k1)(0); + this->weights[k++] = qx.weight(k1); + } + Assert (k==this->n_quadrature_points, ExcInternalError()); +} + + + +template +QAnisotropic::QAnisotropic(const Quadrature<1>& qx, + const Quadrature<1>& qy) + : Quadrature(qx.n_quadrature_points + *qy.n_quadrature_points) +{ + Assert (dim==2, ExcImpossibleInDim(dim)); + unsigned int k=0; + for (unsigned int k2=0;k2quadrature_points[k](0) = qx.point(k1)(0); + this->quadrature_points[k](1) = qy.point(k2)(0); + this->weights[k++] = qx.weight(k1) * qy.weight(k2); + } + Assert (k==this->n_quadrature_points, ExcInternalError()); +} + + + +template +QAnisotropic::QAnisotropic(const Quadrature<1>& qx, + const Quadrature<1>& qy, + const Quadrature<1>& qz) + : Quadrature(qx.n_quadrature_points + *qy.n_quadrature_points + *qz.n_quadrature_points) +{ + Assert (dim==2, ExcImpossibleInDim(dim)); + unsigned int k=0; + for (unsigned int k3=0;k3quadrature_points[k](0) = qx.point(k1)(0); + this->quadrature_points[k](1) = qy.point(k2)(0); + this->quadrature_points[k](2) = qz.point(k3)(0); + this->weights[k++] = qx.weight(k1) * qy.weight(k2) * qz.weight(k3); + } + Assert (k==this->n_quadrature_points, ExcInternalError()); +} + + + //--------------------------------------------------------------------------- @@ -1105,6 +1166,9 @@ QIterated::QIterated (const Quadrature<1> &base_quadrature, template class Quadrature<1>; template class Quadrature<2>; template class Quadrature<3>; +template class QAnisotropic<1>; +template class QAnisotropic<2>; +template class QAnisotropic<3>; template class QIterated<1>; template class QIterated<2>; template class QIterated<3>;