From 8e5c569cf1589783a689996f3f50e60113159b44 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Wed, 29 Sep 2021 15:57:10 +0200
Subject: [PATCH] ENH: explicitly check for invalid edge
 (PrimitivePatch::findEdge)

---
 .../primitiveMesh/PrimitivePatch/PrimitivePatch.H  | 14 ++++++++++++--
 .../PrimitivePatch/PrimitivePatchMeshEdges.C       |  6 +++---
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H
index ef0b045a134..5bd1dfe87c0 100644
--- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H
+++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatch.H
@@ -397,14 +397,15 @@ public:
             //  If the point is not found, return -1
             label whichPoint(const label gp) const;
 
-            //- Return local edge in terms of the mesh points in patch.
+            //- From patch edge to global edge using meshPoints.
             edge meshEdge(const label edgei) const;
 
-            //- Return local edge in terms of the mesh points in patch.
+            //- From patch edge to global edge using meshPoints.
             edge meshEdge(const edge& e) const;
 
             //- Search for edge (local point labels) and return its
             //- index in the edge list or -1 if not found.
+            //  Ignores invalid or out-of-range edges
             label findEdge(const edge& e) const;
 
             //- Return labels of patch edges in the global edge list using
@@ -466,6 +467,15 @@ public:
             bool hasFaceNormals() const { return bool(faceNormalsPtr_); }
             bool hasPointNormals() const { return bool(pointNormalsPtr_); }
 
+            bool hasBoundaryPoints() const { return bool(boundaryPointsPtr_); }
+            bool hasFaceFaces() const { return bool(faceFacesPtr_); }
+            bool hasEdgeFaces() const { return bool(edgeFacesPtr_); }
+            bool hasFaceEdges() const { return bool(faceEdgesPtr_); }
+            bool hasPointEdges() const { return bool(pointEdgesPtr_); }
+            bool hasPointFaces() const { return bool(pointFacesPtr_); }
+
+            bool hasMeshPointMap() const { return bool(meshPointMapPtr_); }
+
 
         // Other patch operations
 
diff --git a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C
index 43442748f81..95ead63f5cf 100644
--- a/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C
+++ b/src/OpenFOAM/meshes/primitiveMesh/PrimitivePatch/PrimitivePatchMeshEdges.C
@@ -184,12 +184,12 @@ Foam::PrimitivePatch<FaceList, PointField>::findEdge
     const edge& e
 ) const
 {
-    if (e.start() >= 0 && e.start() < nPoints())
+    if (e.valid() && e.first() < nPoints() && e.second() < nPoints())
     {
         // Get pointEdges from the starting point and search all the candidates
         const edgeList& myEdges = this->edges();
 
-        for (const label patchEdgei : pointEdges()[e.start()])
+        for (const label patchEdgei : pointEdges()[e.first()])
         {
             if (e == myEdges[patchEdgei])
             {
@@ -198,7 +198,7 @@ Foam::PrimitivePatch<FaceList, PointField>::findEdge
         }
     }
 
-    return -1;  // Not found
+    return -1;  // Not found, or invalid edge
 }
 
 
-- 
GitLab