:orphan:
# DMLocatePoints
Locate the points in v in the mesh and return a `PetscSF` of the containing cells
## Synopsis
```
#include "petscdm.h"
PetscErrorCode DMLocatePoints(DM dm, Vec v, DMPointLocationType ltype, PetscSF *cellSF)
```
Collective
## Input Parameters
- ***dm -*** The `DM`
- ***ltype -*** The type of point location, e.g. `DM_POINTLOCATION_NONE` or `DM_POINTLOCATION_NEAREST`
## Input/Output Parameters
- ***v -*** The `Vec` of points, on output contains the nearest mesh points to the given points if `DM_POINTLOCATION_NEAREST` is used
- ***cellSF -*** Points to either `NULL`, or a `PetscSF` with guesses for which cells contain each point;
on output, the `PetscSF` containing the ranks and local indices of the containing points
## Notes
To do a search of the local cells of the mesh, v should have `PETSC_COMM_SELF` as its communicator.
To do a search of all the cells in the distributed mesh, `v` should have the same communicator as `dm`.
Points will only be located in owned cells, not overlap cells arising from `DMPlexDistribute()` or other overlapping distributions.
If *cellSF is `NULL` on input, a `PetscSF` will be created.
If *cellSF is not `NULL` on input, it should point to an existing `PetscSF`, whose graph will be used as initial guesses.
An array that maps each point to its containing cell can be obtained with
```none
const PetscSFNode *cells;
PetscInt nFound;
const PetscInt *found;
PetscSFGetGraph(cellSF,NULL,&nFound,&found,&cells);
```
Where cells[i].rank is the rank of the process owning the cell containing point found[i] (or i if found == NULL), and cells[i].index is
the index of the cell in its rank's local numbering. This rank is in the communicator for `v`, so if `v` is on `PETSC_COMM_SELF` then the rank will always be 0.
## See Also
`DM`, `DMSetCoordinates()`, `DMSetCoordinatesLocal()`, `DMGetCoordinates()`, `DMGetCoordinatesLocal()`, `DMPointLocationType`
## Level
developer
## Location
src/dm/interface/dmcoordinates.c
## Implementations
DMLocatePoints_Plex in src/dm/impls/plex/plexgeometry.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/dm/interface/dmcoordinates.c)
[Index of all DM routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)