There is also DMPlexFindVertices() which finds the nearest vertex to the given coords in the given radius.
You can then get support or its transitive closure for that vertex. I wrote it some time ago mainly for debug purposes. It uses just brute force. I'm not sure it deserves to exist :-) Maybe we should somehow merge these functionalities. Thanks, Vaclav On 16 Sep 2020, at 01:44, Matthew Knepley <[email protected]<mailto:[email protected]>> wrote: On Tue, Sep 15, 2020 at 6:18 PM Jeremy Theler <[email protected]<mailto:[email protected]>> wrote: On Mon, 2020-09-14 at 20:28 -0400, Matthew Knepley wrote: > On Mon, Sep 14, 2020 at 6:15 PM Jeremy Theler > <[email protected]<mailto:[email protected]>> > wrote: > > Hello all > > > > Say I have a fully-interpolated 3D DMPlex and a point with > > arbitrary > > coordinates x,y,z. What's the most efficient way to know which cell > > this point belongs to in parallel? Cells can be either tets or > > hexes. > > I should make a tutorial on this, but have not had time so far. Thank you very much for this mini-tutorial. > > The intention is that you use > > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMLocatePoints.html > > This will just brute force search unless you also give > > -dm_plex_hash_location Well, for a 3D DMplex PETSc (and git blame) tells me that you "have only coded this for 2D." :-) Crap. I need to do 3D. It's not hard, just work. > which builds a grid hash to accelerate it. I should probably expose > > DMPlexLocatePoint_Internal() > > which handles the single cell queries. If you just had one point, > that might make it simpler, > although you would still write your own loop. I see that DMLocatePoints() loops over all the cells until it finds the right one. I was thinking about finding first the nearest vertex to the point and then sweeping over all the cells that share this vertex testing for DMPlexLocatePoint_Internal(). The nearest node ought to be found using an octree or similar. Any direction regarding this idea? So you can imagine both a topological search and a geometric search. Generally, people want geometric. The geometric hash we use is just to bin elements on a regular grid. > If your intention is to interpolate a field at these > locations, I created > > > https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/DMInterpolationCreate.html > > which no one but me uses so far, but I think it is convenient. Any other example apart from src/snes/tutorials/ex63.c? That is the only one in PETSc. The PyLith code uses this to interpolate to seismic stations. Thanks, Matt Thank you. > > Thanks, > > Matt > > > Regards > > -- > > jeremy theler > > www.seamplex.com<http://www.seamplex.com/> > > > > > > > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/<http://www.cse.buffalo.edu/~knepley/>
