From d69f514f7e8c418ad5017f191440cf9497cd70f1 Mon Sep 17 00:00:00 2001 From: Dmitri Naumov <dmitri.naumov@ufz.de> Date: Mon, 14 Aug 2017 12:14:26 +0200 Subject: [PATCH] [MeL] Use squared radius in findElementsInR args. This saves repeated squaring. --- MeshLib/findElementsWithinRadius.cpp | 9 +++++---- MeshLib/findElementsWithinRadius.h | 2 +- Tests/MeshLib/TestFindElementsWithinRadius.cpp | 8 ++++---- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/MeshLib/findElementsWithinRadius.cpp b/MeshLib/findElementsWithinRadius.cpp index 9c63a9d55e0..0f6d1d34530 100644 --- a/MeshLib/findElementsWithinRadius.cpp +++ b/MeshLib/findElementsWithinRadius.cpp @@ -22,20 +22,21 @@ namespace MeshLib { std::vector<std::size_t> findElementsWithinRadius(Element const& start_element, - double const radius) + double const radius_squared) { // Special case for 0 radius. All other radii will include at least one // neighbor of the start element. - if (radius == 0.) + if (radius_squared == 0.) return {start_element.getID()}; // Returns true if the test node is inside the radius of any of the // element's nodes. - auto node_inside_radius = [&start_element, radius](Node const* test_node) { + auto node_inside_radius = [&start_element, + radius_squared](Node const* test_node) { for (unsigned n = 0; n < start_element.getNumberOfNodes(); ++n) { if (MathLib::sqrDist(*test_node, *start_element.getNode(n)) <= - radius * radius) + radius_squared) return true; } return false; diff --git a/MeshLib/findElementsWithinRadius.h b/MeshLib/findElementsWithinRadius.h index 5e46f423f2e..603dc31273c 100644 --- a/MeshLib/findElementsWithinRadius.h +++ b/MeshLib/findElementsWithinRadius.h @@ -31,6 +31,6 @@ namespace MeshLib /// /// \note For radius 0 only the given element's id is returned. std::vector<std::size_t> findElementsWithinRadius(Element const& e, - double const radius); + double const radius_squared); } // namespace MeshLib diff --git a/Tests/MeshLib/TestFindElementsWithinRadius.cpp b/Tests/MeshLib/TestFindElementsWithinRadius.cpp index 2d3d66b7ee6..4df943b624b 100644 --- a/Tests/MeshLib/TestFindElementsWithinRadius.cpp +++ b/Tests/MeshLib/TestFindElementsWithinRadius.cpp @@ -177,11 +177,11 @@ TEST_F(MeshLibFindElementWithinRadius, RandomPositiveRadius2d) double const radius) -> bool { auto const& element = *mesh.getElement(element_id); - auto result = findElementsWithinRadius(element, radius); + auto result = findElementsWithinRadius(element, radius * radius); std::sort(std::begin(result), std::end(result)); - auto const expected_elements = - bruteForceFindElementIdsWithinRadius(mesh, element, radius); + auto const expected_elements = bruteForceFindElementIdsWithinRadius( + mesh, element, radius * radius); return result.size() == expected_elements.size() && std::includes(std::begin(result), std::end(result), @@ -208,7 +208,7 @@ TEST_F(MeshLibFindElementWithinRadius, RandomPositiveRadius3d) double const radius) -> bool { auto const& element = *mesh.getElement(element_id); - auto result = findElementsWithinRadius(element, radius); + auto result = findElementsWithinRadius(element, radius * radius); std::sort(std::begin(result), std::end(result)); auto const expected_elements = -- GitLab