• Sometimes information needs to be exchanged between disconnected pieces of mesh.
  • Examples include:
    • Mechanical Contact
    • Gap Heat Conduction
    • Radiation
    • 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 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.


  • 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.