From 2e64b0f6a08b31439f1b5608acaca06088a3c6df Mon Sep 17 00:00:00 2001 From: David Wells Date: Fri, 14 Feb 2025 21:04:32 -0500 Subject: [PATCH] QProjector<2>: make a function a lot shorter. --- source/base/qprojector.cc | 170 ++++++++++++++------------------------ 1 file changed, 60 insertions(+), 110 deletions(-) diff --git a/source/base/qprojector.cc b/source/base/qprojector.cc index 59c6192df7..5a8b0ee746 100644 --- a/source/base/qprojector.cc +++ b/source/base/qprojector.cc @@ -534,125 +534,75 @@ QProjector<2>::project_to_subface(const ReferenceCell &reference_cell, Assert(q_points.size() == quadrature.size(), ExcDimensionMismatch(q_points.size(), quadrature.size())); + q_points.resize(0); if (reference_cell == ReferenceCells::Triangle) { // use linear polynomial to map the reference quadrature points correctly // on faces, i.e., BarycentricPolynomials<1>(1) for (unsigned int p = 0; p < quadrature.size(); ++p) - switch (face_no) - { - case 0: - switch (subface_no) - { - case 0: - q_points[p] = Point(quadrature.point(p)[0] / 2, 0); - break; - case 1: - q_points[p] = - Point(0.5 + quadrature.point(p)[0] / 2, 0); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - case 1: - switch (subface_no) - { - case 0: - q_points[p] = Point(1 - quadrature.point(p)[0] / 2, - quadrature.point(p)[0] / 2); - break; - case 1: - q_points[p] = Point(0.5 - quadrature.point(p)[0] / 2, - 0.5 + quadrature.point(p)[0] / 2); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - case 2: - switch (subface_no) - { - case 0: - q_points[p] = Point(0, 1 - quadrature.point(p)[0] / 2); - break; - case 1: - q_points[p] = - Point(0, 0.5 - quadrature.point(p)[0] / 2); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } + { + if (face_no == 0) + { + if (subface_no == 0) + q_points.emplace_back(quadrature.point(p)[0] / 2, 0); + else + q_points.emplace_back(0.5 + quadrature.point(p)[0] / 2, 0); + } + else if (face_no == 1) + { + if (subface_no == 0) + q_points.emplace_back(1 - quadrature.point(p)[0] / 2, + quadrature.point(p)[0] / 2); + else + q_points.emplace_back(0.5 - quadrature.point(p)[0] / 2, + 0.5 + quadrature.point(p)[0] / 2); + } + else if (face_no == 2) + { + if (subface_no == 0) + q_points.emplace_back(0, 1 - quadrature.point(p)[0] / 2); + else + q_points.emplace_back(0, 0.5 - quadrature.point(p)[0] / 2); + } + else + DEAL_II_ASSERT_UNREACHABLE(); + } } else if (reference_cell == ReferenceCells::Quadrilateral) { for (unsigned int p = 0; p < quadrature.size(); ++p) - switch (face_no) - { - case 0: - switch (subface_no) - { - case 0: - q_points[p] = Point(0, quadrature.point(p)[0] / 2); - break; - case 1: - q_points[p] = - Point(0, quadrature.point(p)[0] / 2 + 0.5); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - case 1: - switch (subface_no) - { - case 0: - q_points[p] = Point(1, quadrature.point(p)[0] / 2); - break; - case 1: - q_points[p] = - Point(1, quadrature.point(p)[0] / 2 + 0.5); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - case 2: - switch (subface_no) - { - case 0: - q_points[p] = Point(quadrature.point(p)[0] / 2, 0); - break; - case 1: - q_points[p] = - Point(quadrature.point(p)[0] / 2 + 0.5, 0); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - case 3: - switch (subface_no) - { - case 0: - q_points[p] = Point(quadrature.point(p)[0] / 2, 1); - break; - case 1: - q_points[p] = - Point(quadrature.point(p)[0] / 2 + 0.5, 1); - break; - default: - DEAL_II_ASSERT_UNREACHABLE(); - } - break; - - default: - DEAL_II_ASSERT_UNREACHABLE(); - } + { + if (face_no == 0) + { + if (subface_no == 0) + q_points.emplace_back(0, quadrature.point(p)[0] / 2); + else + q_points.emplace_back(0, quadrature.point(p)[0] / 2 + 0.5); + } + else if (face_no == 1) + { + if (subface_no == 0) + q_points.emplace_back(1, quadrature.point(p)[0] / 2); + else + q_points.emplace_back(1, quadrature.point(p)[0] / 2 + 0.5); + } + else if (face_no == 2) + { + if (subface_no == 0) + q_points.emplace_back(quadrature.point(p)[0] / 2, 0); + else + q_points.emplace_back(quadrature.point(p)[0] / 2 + 0.5, 0); + } + else if (face_no == 3) + { + if (subface_no == 0) + q_points.emplace_back(quadrature.point(p)[0] / 2, 1); + else + q_points.emplace_back(quadrature.point(p)[0] / 2 + 0.5, 1); + } + else + DEAL_II_ASSERT_UNREACHABLE(); + } } else { -- 2.39.5