From b0b0581fb1721b414748cf72800aa2af8cabc338 Mon Sep 17 00:00:00 2001 From: wolf Date: Mon, 22 Feb 1999 14:53:27 +0000 Subject: [PATCH] Make base library 3d-aware also to the public (just forgot to check this in last week). git-svn-id: https://svn.dealii.org/trunk@876 0785d39b-7218-0410-832d-ea1e28bc413d --- deal.II/base/source/quadrature.cc | 205 ++++++++++++++++++++++++++ deal.II/base/source/quadrature_lib.cc | 22 ++- 2 files changed, 219 insertions(+), 8 deletions(-) diff --git a/deal.II/base/source/quadrature.cc b/deal.II/base/source/quadrature.cc index e0445aec47..45a74f223b 100644 --- a/deal.II/base/source/quadrature.cc +++ b/deal.II/base/source/quadrature.cc @@ -123,6 +123,54 @@ void QProjector<2>::project_to_face (const Quadrature<1> &quadrature, +template <> +void QProjector<3>::project_to_face (const Quadrature<2> &quadrature, + const unsigned int face_no, + vector > &q_points) { + const unsigned int dim=3; + Assert (face_no<2*dim, ExcInvalidIndex (face_no, 2*dim)); + + for (unsigned int p=0; p(quadrature.quad_point(p)(0), + 0, + quadrature.quad_point(p)(1)); + break; + case 1: + q_points[p] = Point(quadrature.quad_point(p)(0), + 1, + quadrature.quad_point(p)(1)); + break; + case 2: + q_points[p] = Point(quadrature.quad_point(p)(0), + quadrature.quad_point(p)(1), + 0); + break; + case 3: + q_points[p] = Point(1, + quadrature.quad_point(p)(0), + quadrature.quad_point(p)(1)); + break; + case 4: + q_points[p] = Point(quadrature.quad_point(p)(0), + quadrature.quad_point(p)(1), + 1); + break; + case 5: + q_points[p] = Point(0, + quadrature.quad_point(p)(0), + quadrature.quad_point(p)(1)); + break; + + default: + Assert (false, ExcInternalError()); + }; +}; + + + template <> void QProjector<2>::project_to_subface (const Quadrature<1> &quadrature, const unsigned int face_no, @@ -196,7 +244,164 @@ void QProjector<2>::project_to_subface (const Quadrature<1> &quadrature, +template <> +void QProjector<3>::project_to_subface (const Quadrature<2> &quadrature, + const unsigned int face_no, + const unsigned int subface_no, + vector > &q_points) { + const unsigned int dim=3; + Assert (face_no<2*dim, ExcInvalidIndex (face_no, 2*dim)); + Assert (subface_no<(1<<(dim-1)), ExcInvalidIndex (face_no, 1<<(dim-1))); + + + // for all faces and subfaces: first project + // onto the first subface of each face, then + // move it to the right place + for (unsigned int p=0; p(quadrature.quad_point(p)(0)/2, + 0, + quadrature.quad_point(p)(1)/2); + switch (subface_no) + { + case 0: + break; + case 1: + q_points[p][0] += 1./2.; + break; + case 2: + q_points[p][0] += 1./2.; + q_points[p][2] += 1./2.; + break; + case 3: + q_points[p][2] += 1./2.; + break; + default: + Assert (false, ExcInternalError()); + }; + + break; + case 1: + q_points[p] = Point(quadrature.quad_point(p)(0)/2, + 1, + quadrature.quad_point(p)(1)/2); + switch (subface_no) + { + case 0: + break; + case 1: + q_points[p][0] += 1./2.; + break; + case 2: + q_points[p][0] += 1./2.; + q_points[p][2] += 1./2.; + break; + case 3: + q_points[p][2] += 1./2.; + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 2: + q_points[p] = Point(quadrature.quad_point(p)(0)/2, + quadrature.quad_point(p)(1)/2, + 0); + switch (subface_no) + { + case 0: + break; + case 1: + q_points[p][0] += 1./2.; + break; + case 2: + q_points[p][0] += 1./2.; + q_points[p][1] += 1./2.; + break; + case 3: + q_points[p][1] += 1./2.; + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 3: + q_points[p] = Point(1, + quadrature.quad_point(p)(0)/2, + quadrature.quad_point(p)(1)/2); + switch (subface_no) + { + case 0: + break; + case 1: + q_points[p][1] += 1./2.; + break; + case 2: + q_points[p][1] += 1./2.; + q_points[p][2] += 1./2.; + break; + case 3: + q_points[p][2] += 1./2.; + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 4: + q_points[p] = Point(quadrature.quad_point(p)(0)/2, + quadrature.quad_point(p)(1)/2, + 1); + switch (subface_no) + { + case 0: + break; + case 1: + q_points[p][0] += 1./2.; + break; + case 2: + q_points[p][0] += 1./2.; + q_points[p][1] += 1./2.; + break; + case 3: + q_points[p][1] += 1./2.; + break; + default: + Assert (false, ExcInternalError()); + }; + break; + case 5: + q_points[p] = Point(0, + quadrature.quad_point(p)(0)/2, + quadrature.quad_point(p)(1)/2); + switch (subface_no) + { + case 0: + break; + case 1: + q_points[p][1] += 1./2.; + break; + case 2: + q_points[p][1] += 1./2.; + q_points[p][2] += 1./2.; + break; + case 3: + q_points[p][2] += 1./2.; + break; + default: + Assert (false, ExcInternalError()); + }; + break; + default: + Assert (false, ExcInternalError()); + }; +}; + + + // explicit instantiations; note: we need them all for all dimensions template class Quadrature<1>; template class Quadrature<2>; +template class Quadrature<3>; diff --git a/deal.II/base/source/quadrature_lib.cc b/deal.II/base/source/quadrature_lib.cc index e71ed2b2c9..4fd3c792ef 100644 --- a/deal.II/base/source/quadrature_lib.cc +++ b/deal.II/base/source/quadrature_lib.cc @@ -336,10 +336,7 @@ QIteratedTrapez<1>::QIteratedTrapez (const unsigned n) : // two space dimensions, so we leave in these Assert'ions until // that is done template -QGauss2::QGauss2 () : - Quadrature (QGauss2(), QGauss2<1>()){ - Assert (dim<3, ExcInternalError()); -}; +QGauss2::QGauss2 () : Quadrature (QGauss2(), QGauss2<1>()) {}; template QGauss3::QGauss3 () : @@ -398,10 +395,7 @@ QTrapez::QTrapez () : template QIteratedTrapez::QIteratedTrapez (const unsigned n) : - Quadrature (QIteratedTrapez(n), QIteratedTrapez<1>(n)) -{ - Assert (dim<3, ExcInternalError()); -}; + Quadrature (QIteratedTrapez(n), QIteratedTrapez<1>(n)) {}; @@ -418,3 +412,15 @@ template class QSimpson<2>; template class QTrapez<2>; template class QIteratedTrapez<2>; +template class QGauss2<3>; +template class QGauss3<3>; +template class QGauss4<3>; +template class QGauss5<3>; +template class QGauss6<3>; +template class QGauss7<3>; +template class QGauss8<3>; +template class QMidpoint<3>; +template class QSimpson<3>; +template class QTrapez<3>; +template class QIteratedTrapez<3>; + -- 2.39.5