TetLocator
The point locator of a mesh of tetrahedra (field-presentation §FVS-2, matrix FVW-52).
| Inherits | mesh::spatial::IPointLocator |
In the namespace mesh::spatial. Declared in src/libs/libmesh/mesh/spatial/TetLocator.hpp.
Detailed description
A box tree over the tetrahedra, built with BoxTreeBuilder as TriangleBvh builds its own: leaves of 8, six serial levels, the same tree for every thread count. A node is a float box and two indices, 32 bytes.
locate() walks first. From the hint, it crosses the face whose barycentric weight is most negative, through the face neighbors, for at most kWalkSteps steps. This is the visibility walk of Devillers, Pion and Teillaud (Int. J. Found. Comput. Sci. 13(2), 2002). A mesh that is not Delaunay can make the walk cycle, so the step limit is the guard. When the walk stops at a boundary, a degenerate tetrahedron or its limit, the tree query takes over.
Tet4 and Tet10 elements take part, on their corner nodes. A degenerate tetrahedron (no volume) holds no point. A point on a face that two tetrahedra share lies in both: the tree gives the one where the point is deepest, and the lower element index at a tie.
Read-only once built: any number of threads can call locate() at once. refitted() gives a new locator over moved nodes with the same tree topology, for a hover on a deformed part (§FVG-3).