Nearest point on boundary to exterior point

There is functionality for these features in dolfinx

MWE:

import dolfinx
import dolfinx.geometry
from mpi4py import MPI
import numpy as np

mesh = dolfinx.UnitCubeMesh(MPI.COMM_WORLD, 10, 10, 10)


def closest_point_in_mesh(mesh, point):
    points = np.reshape(point, (1,3))
    tdim = mesh.topology.dim
    bounding_box = dolfinx.geometry.BoundingBoxTree(mesh, tdim)
    entity, distance = dolfinx.geometry.compute_closest_entity(bounding_box, points[0], mesh)
    mesh_geom = mesh.geometry.x
    geom_dofs = dolfinx.cpp.mesh.entities_to_geometry(mesh, tdim, [entity], False)
    mesh_nodes = mesh_geom[geom_dofs][0]
    displacement =  dolfinx.geometry.compute_distance_gjk(points, mesh_nodes)
    return points[0] - displacement


point = [1.25, 0.3, 0]
print(closest_point_in_mesh(mesh, point))

point = [1.25, 1.3, 0.1]
print(closest_point_in_mesh(mesh, point))

point = [-1.2, 0.273, -0.3]
print(closest_point_in_mesh(mesh, point))

point = [0.31, 0.57, -0.2]
print(closest_point_in_mesh(mesh, point))

returning

[1.  0.3 0. ]
[1.  1.  0.1]
[0.    0.273 0.   ]
[3.10000000e-01 5.70000000e-01 2.77555756e-17]
3 Likes