From: Wolfgang Bangerth Date: Mon, 4 May 1998 16:45:21 +0000 (+0000) Subject: Add support class for the projection of quadrature formula onto faces and subfaces. X-Git-Tag: v8.0.0~23010 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e72fec2dcc5388b49d3173473fc71b2ec6deed91;p=dealii.git Add support class for the projection of quadrature formula onto faces and subfaces. git-svn-id: https://svn.dealii.org/trunk@244 0785d39b-7218-0410-832d-ea1e28bc413d --- diff --git a/deal.II/base/source/quadrature.cc b/deal.II/base/source/quadrature.cc index 3fae03bd06..c84fba356a 100644 --- a/deal.II/base/source/quadrature.cc +++ b/deal.II/base/source/quadrature.cc @@ -39,6 +39,115 @@ double Quadrature::weight (const unsigned int i) const { +template +const vector & Quadrature::get_weights () const { + return weights; +}; + + + + +template <> +void QProjector<2>::project_to_face (const Quadrature<1> &quadrature, + const unsigned int face_no, + vector > &q_points) { + const unsigned int dim=2; + Assert (face_no<2*dim, ExcInvalidIndex (face_no, 2*dim)); + + for (unsigned int p=0; p(quadrature.quad_point(p)(0),0); + break; + case 1: + q_points[p] = Point(1,quadrature.quad_point(p)(0)); + break; + case 2: + q_points[p] = Point(quadrature.quad_point(p)(0),1); + break; + case 3: + q_points[p] = Point(0,quadrature.quad_point(p)(0)); + break; + default: + Assert (false, ExcInternalError()); + }; +}; + + + +template <> +void QProjector<2>::project_to_subface (const Quadrature<1> &quadrature, + const unsigned int face_no, + const unsigned int subface_no, + vector > &q_points) { + const unsigned int dim=2; + Assert (face_no<2*dim, ExcInvalidIndex (face_no, 2*dim)); + Assert (subface_no<(1<<(dim-1)), ExcInvalidIndex (face_no, 1<<(dim-1))); + + for (unsigned int p=0; p(quadrature.quad_point(p)(0)/2,0); + break; + case 1: + q_points[p] + = Point(quadrature.quad_point(p)(0)/2+0.5,0); + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 1: + switch (subface_no) + { + case 0: + q_points[p] = Point(1,quadrature.quad_point(p)(0)/2); + break; + case 1: + q_points[p] = Point(1,quadrature.quad_point(p)(0)/2+0.5); + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 2: + switch (subface_no) + { + case 0: + q_points[p] = Point(quadrature.quad_point(p)(0)/2,1); + break; + case 1: + q_points[p] = Point(quadrature.quad_point(p)(0)/2+0.5,1); + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 3: + switch (subface_no) + { + case 0: + q_points[p] = Point(0,quadrature.quad_point(p)(0)/2); + break; + case 1: + q_points[p] = Point(0,quadrature.quad_point(p)(0)/2+0.5); + break; + default: + Assert (false, ExcInternalError()); + }; + break; + default: + Assert (false, ExcInternalError()); + }; +}; + + // explicite instantiations