<div dir="ltr"><div dir="ltr">On Thu, Sep 24, 2020 at 6:09 PM Jeremy Theler <<a href="mailto:jeremy@seamplex.com">jeremy@seamplex.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Wed, 2020-09-16 at 14:29 +0000, Hapla  Vaclav wrote:<br>
> There is also DMPlexFindVertices() which finds the nearest vertex to<br>
> the given coords in the given radius.<br>
<br>
At first I had understood that this function performed a nearest-<br>
neighbor search but after a closer look it sweeps the local DM and<br>
marks whether the sought points coincide with a mesh node within eps or<br>
not. Neat.<br>
<br>
<br>
> You can then get support or its transitive closure for that vertex.<br>
<br>
Not directly because in general the sought points will not coincide<br>
with a mesh node, but a combination of this function and<br>
DMLocatePoints() seems to do the trick.  <br>
<br>
> I wrote it some time ago mainly for debug purposes. It uses just<br>
> brute force. I'm not sure it deserves to exist :-) Maybe we should<br>
> somehow merge these functionalities.<br>
<br>
It works, although a kd-tree-based search would be far more efficient<br>
than a full sweep over the DM.<br></blockquote><div><br></div><div>We should not need to do that. LocatePoints() does not sweep the mesh.</div><div>It just does grid hashing. kd is a little better with really irregular distributions,</div><div>but hashing should be fine.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Thanks<br>
--<br>
jeremy<br>
<br>
> <br>
> Thanks,<br>
> <br>
> Vaclav<br>
> <br>
> > On 16 Sep 2020, at 01:44, Matthew Knepley <<a href="mailto:knepley@gmail.com" target="_blank">knepley@gmail.com</a>><br>
> > wrote:<br>
> > <br>
> > On Tue, Sep 15, 2020 at 6:18 PM Jeremy Theler <<a href="mailto:jeremy@seamplex.com" target="_blank">jeremy@seamplex.com</a>><br>
> > wrote:<br>
> > > On Mon, 2020-09-14 at 20:28 -0400, Matthew Knepley wrote:<br>
> > > > On Mon, Sep 14, 2020 at 6:15 PM Jeremy Theler <<br>
> > > <a href="mailto:jeremy@seamplex.com" target="_blank">jeremy@seamplex.com</a>><br>
> > > > wrote:<br>
> > > > > Hello all<br>
> > > > > <br>
> > > > > Say I have a fully-interpolated 3D DMPlex and a point with<br>
> > > > > arbitrary<br>
> > > > > coordinates x,y,z. What's the most efficient way to know<br>
> > > which cell<br>
> > > > > this point belongs to in parallel? Cells can be either tets<br>
> > > or<br>
> > > > > hexes.<br>
> > > > <br>
> > > > I should make a tutorial on this, but have not had time so far.<br>
> > > <br>
> > > Thank you very much for this mini-tutorial.<br>
> > > <br>
> > > > <br>
> > > > The intention is that you use<br>
> > > > <br>
> > > >   <br>
> > > > <br>
> > > <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMLocatePoints.html" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/DM/DMLocatePoints.html</a><br>
> > > > <br>
> > > > This will just brute force search unless you also give<br>
> > > > <br>
> > > >   -dm_plex_hash_location<br>
> > > <br>
> > > Well, for a 3D DMplex PETSc (and git blame) tells me that you<br>
> > > "have<br>
> > > only coded this for 2D." :-)<br>
> > > <br>
> > <br>
> > Crap. I need to do 3D. It's not hard, just work.<br>
> >  <br>
> > > > which builds a grid hash to accelerate it. I should probably<br>
> > > expose<br>
> > > > <br>
> > > >   DMPlexLocatePoint_Internal()<br>
> > > > <br>
> > > > which handles the single cell queries. If you just had one<br>
> > > point,<br>
> > > > that might make it simpler,<br>
> > > > although you would still write your own loop.<br>
> > > <br>
> > > I see that DMLocatePoints() loops over all the cells until it<br>
> > > finds the<br>
> > > right one. I was thinking about finding first the nearest vertex<br>
> > > to the<br>
> > > point and then sweeping over all the cells that share this vertex<br>
> > > testing for DMPlexLocatePoint_Internal(). The nearest node ought<br>
> > > to be<br>
> > > found using an octree or similar. Any direction regarding this<br>
> > > idea?<br>
> > > <br>
> > <br>
> > So you can imagine both a topological search and a geometric<br>
> > search. Generally, people want geometric.<br>
> > The geometric hash we use is just to bin elements on a regular<br>
> > grid.<br>
> >  <br>
> > > >  If your intention is to interpolate a field at these<br>
> > > > locations, I created<br>
> > > > <br>
> > > >   <br>
> > > > <br>
> > > <a href="https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/DMInterpolationCreate.html" rel="noreferrer" target="_blank">https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/SNES/DMInterpolationCreate.html</a><br>
> > > > <br>
> > > > which no one but me uses so far, but I think it is convenient.<br>
> > > <br>
> > > Any other example apart from src/snes/tutorials/ex63.c?<br>
> > > <br>
> > <br>
> > That is the only one in PETSc. The PyLith code uses this to<br>
> > interpolate to seismic stations.<br>
> > <br>
> >   Thanks,<br>
> > <br>
> >      Matt<br>
> >  <br>
> > > Thank you.<br>
> > > <br>
> > > > <br>
> > > >   Thanks,<br>
> > > > <br>
> > > >     Matt<br>
> > > >  <br>
> > > > > Regards<br>
> > > > > --<br>
> > > > > jeremy theler<br>
> > > > > <a href="http://www.seamplex.com" rel="noreferrer" target="_blank">www.seamplex.com</a><br>
> > > > > <br>
> > > > > <br>
> > > > <br>
> > > > <br>
> > > > <br>
> > > <br>
> > > <br>
> > <br>
> > <br>
> > -- <br>
> > What most experimenters take for granted before they begin their<br>
> > experiments is infinitely more interesting than any results to<br>
> > which their experiments lead.<br>
> > -- Norbert Wiener<br>
> > <br>
> > <a href="https://www.cse.buffalo.edu/~knepley/" rel="noreferrer" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br>
<br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>-- Norbert Wiener</div><div><br></div><div><a href="http://www.cse.buffalo.edu/~knepley/" target="_blank">https://www.cse.buffalo.edu/~knepley/</a><br></div></div></div></div></div></div></div></div>