• Sometimes information needs to be exchanged between disconnected pieces of mesh.
• Examples include:
• Mechanical Contact
• Gap Heat Conduction
• Constraints
• Mesh Tying
• The Geometric Search system allows an application to track evolving geometric relationships.
• Currently, this entails two main capabilities: NearestNodeLocator and PenetrationLocator.
• Both of the capabilities work in parallel and with both Parallel- and Serial-Mesh.

# NearestNodeLocator

• NearestNodeLocator provides the nearest node on a "Master" boundary for each node on a "Slave" boundary (and the other way around).
• The distance between the two nodes is also provided.
• It works by generating a "Neighborhood" of nodes on the Master side that are close to the Slave node.
• The size of the Neighborhood can be controlled in the input file by setting the patch_size parameter in the Mesh section.

• To use a NearestNodeLocator
• #include "NearestNodeLocator.h"
• call getNearestNodeLocator(master_id, slave_id) to create the object.
• The functions distance() and nearestNode() both take a node ID and return either the distance to the nearest node or a Node pointer for the nearest node respectively.

# PenetrationLocator

• A PenetrationLocator provides the perpendicular distance from a Slave node to a Master side and the "contact point" on the Master side.
• The distance returned is negative if penetration hasn't yet occurred and positive if it has.
• To get a NearestNodeLocator #include "PenetrationLocator.h" and call getPenetrationLocator(master_id, slave_id) to create the object.
• The algorithm in PenetrationLocator utilizes a NearestNodeLocator so patch_size is still important.