mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: use binary search for polyBoundaryMesh::whichPatch() (issue #801)
This commit is contained in:
@ -747,36 +747,41 @@ Foam::label Foam::polyBoundaryMesh::whichPatch(const label faceIndex) const
|
|||||||
else if (faceIndex >= mesh().nFaces())
|
else if (faceIndex >= mesh().nFaces())
|
||||||
{
|
{
|
||||||
FatalErrorInFunction
|
FatalErrorInFunction
|
||||||
<< "given label " << faceIndex
|
<< "Face " << faceIndex
|
||||||
<< " greater than the number of geometric faces " << mesh().nFaces()
|
<< " out of bounds. Number of geometric faces " << mesh().nFaces()
|
||||||
<< abort(FatalError);
|
<< abort(FatalError);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
forAll(*this, patchi)
|
// Patches are ordered, use binary search
|
||||||
{
|
|
||||||
const polyPatch& bp = operator[](patchi);
|
|
||||||
|
|
||||||
if
|
const polyPatchList& patches = *this;
|
||||||
|
|
||||||
|
const label patchi =
|
||||||
|
findLower
|
||||||
(
|
(
|
||||||
faceIndex >= bp.start()
|
patches,
|
||||||
&& faceIndex < bp.start() + bp.size()
|
faceIndex,
|
||||||
)
|
0,
|
||||||
{
|
// Must include the start in the comparison
|
||||||
return patchi;
|
[](const polyPatch& p, label val) { return (p.start() <= val); }
|
||||||
}
|
);
|
||||||
|
|
||||||
|
if (patchi < 0 || !patches[patchi].range().found(faceIndex))
|
||||||
|
{
|
||||||
|
// If not in any of above, it is trouble!
|
||||||
|
FatalErrorInFunction
|
||||||
|
<< "Face " << faceIndex << " not found in any of the patches "
|
||||||
|
<< flatOutput(names()) << nl
|
||||||
|
<< "The patches appear to be inconsistent with the mesh :"
|
||||||
|
<< " internalFaces:" << mesh().nInternalFaces()
|
||||||
|
<< " total number of faces:" << mesh().nFaces()
|
||||||
|
<< abort(FatalError);
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If not in any of above, it is trouble!
|
return patchi;
|
||||||
FatalErrorInFunction
|
|
||||||
<< "Cannot find face " << faceIndex << " in any of the patches "
|
|
||||||
<< names() << nl
|
|
||||||
<< "It seems your patches are not consistent with the mesh :"
|
|
||||||
<< " internalFaces:" << mesh().nInternalFaces()
|
|
||||||
<< " total number of faces:" << mesh().nFaces()
|
|
||||||
<< abort(FatalError);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user