From 487d2b2757b81b6dce9ac13426df528014982216 Mon Sep 17 00:00:00 2001 From: Karsten Rink <karsten.rink@ufz.de> Date: Wed, 24 Sep 2014 17:26:15 +0200 Subject: [PATCH] added method to test if element is located on boundary --- MeshLib/Elements/Element.cpp | 5 +++++ MeshLib/Elements/Element.h | 2 ++ Tests/MeshLib/TestQuadMesh.cpp | 3 +++ 3 files changed, 10 insertions(+) diff --git a/MeshLib/Elements/Element.cpp b/MeshLib/Elements/Element.cpp index 8356657fd48..b24473e05a7 100644 --- a/MeshLib/Elements/Element.cpp +++ b/MeshLib/Elements/Element.cpp @@ -163,6 +163,11 @@ bool Element::hasNeighbor(Element* elem) const return false; } +bool Element::isBoundaryElement() const +{ + return std::any_of(_neighbors, _neighbors + this->getNNeighbors(), + [](MeshLib::Element* e){ return e == nullptr; }); +} } diff --git a/MeshLib/Elements/Element.h b/MeshLib/Elements/Element.h index 7e10f07e404..6e2dd800376 100644 --- a/MeshLib/Elements/Element.h +++ b/MeshLib/Elements/Element.h @@ -148,6 +148,8 @@ public: */ bool hasZeroVolume() const { return this->getContent() < std::numeric_limits<double>::epsilon(); } + /// Returns true if the element is located at a boundary (i.e. has at least one face without neighbour) + virtual bool isBoundaryElement() const; /// Returns true if these two indeces form an edge and false otherwise virtual bool isEdge(unsigned i, unsigned j) const = 0; diff --git a/Tests/MeshLib/TestQuadMesh.cpp b/Tests/MeshLib/TestQuadMesh.cpp index 1d7ed02eac0..20cfc94c82f 100644 --- a/Tests/MeshLib/TestQuadMesh.cpp +++ b/Tests/MeshLib/TestQuadMesh.cpp @@ -209,6 +209,7 @@ TEST_F(MeshLibQuadMesh, ElementNeighbors) // Test the test EXPECT_EQ(1u, ij_neighbors.first.size()); EXPECT_EQ(1u, ij_neighbors.second.size()); + ASSERT_TRUE(e->isBoundaryElement()); testNeighbors(e, i, j, ij_neighbors); }); @@ -222,6 +223,7 @@ TEST_F(MeshLibQuadMesh, ElementNeighbors) std::pair<Indices, Indices> const ij_neighbors = getNeighborIndices(i, j); // Test the test EXPECT_EQ(3u, ij_neighbors.first.size() + ij_neighbors.second.size()); + ASSERT_TRUE(e->isBoundaryElement()); testNeighbors(e, i, j, ij_neighbors); }); @@ -236,6 +238,7 @@ TEST_F(MeshLibQuadMesh, ElementNeighbors) // Test the test EXPECT_EQ(2u, ij_neighbors.first.size()); EXPECT_EQ(2u, ij_neighbors.second.size()); + ASSERT_FALSE(e->isBoundaryElement()); testNeighbors(e, i, j, ij_neighbors); }); -- GitLab