<div dir="ltr"><div dir="ltr">On Thu, Feb 16, 2023 at 10:54 AM Lawrence Mitchell <<a href="mailto:wence@gmx.li">wence@gmx.li</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">Hi Blaise,<br>
<br>
On Thu, 16 Feb 2023 at 15:17, Blaise Bourdin <<a href="mailto:bourdin@mcmaster.ca" target="_blank">bourdin@mcmaster.ca</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> I am trying to implement a non-local finite elements reconstruction operator in parallel.<br>
><br>
> Given a dmplex distributed with an overlap, is there a way to figure out which cells are in the overlap and which are not?<br>
<br>
Yes. Get the pointSF of the DM, and the cell chart<br>
<br>
DMPlexGetPointSF(dm, &sf);<br>
DMPlexGetHeightStratum(dm, 0, &cstart, &cend);<br>
<br>
Now get the graph (specifically ilocal of the sf):<br>
<br>
PetscSFGetGraph(sf, NULL, &nleaves, &ilocal,  NULL);<br>
<br>
Now any value of ilocal that lies in [cstart, cend) is a cell which is<br>
not owned by this process (i.e. in the overlap). Note that ilocal can<br>
be NULL which just means it is the identity map [0, ..., nleaves), so<br>
you just intersect [cstart, cend) with [0, nleaves) in that case to<br>
find the overlap cells.<br>
<br>
But that is very unlikely to be true, so:<br></blockquote><div><br></div><div>Note that you can use</div><div><br></div><div>  PetscFindInt(nleaves, ilocal, cell, &loc);</div><div><br></div><div>as well. I do this a lot in the library.</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">
for (PetscInt i = 0; i < nleaves; i++) {<br>
    if (cstart <= ilocal[i] && ilocal[i] < cend) {<br>
       // i is an overlap cell<br>
    }<br>
}<br>
> Alternatively, suppose that I distribute the same DM with and without an overlap. Is there any warranty that the distributions are compatible (i.e. coincide when the overlap is ignored)? If this is the case, can I assume that the non-overlap cells are numbered first in the overlapped dm?<br>
<br>
If you do:<br>
<br>
DMPlexDistribute(dm, 0, &migrationSF, &paralleldm);<br>
DMPlexDistributeOverlap(paralleldm, 1, &migrationSF2, &overlapdm);<br>
<br>
Then paralleldm and overlapdm will be compatible, and I think it is<br>
still the case that the overlap cells are numbered last (and<br>
contiguously).<br>
<br>
If you just do DMPlexDistribute(dm, 1, &migrationSF, &overlapdm) then<br>
you obviously don't have the non-overlapped one to compare, but it is<br>
in this case still true that the overlap cells are numbered last.<br>
<br>
Thanks,<br>
<br>
Lawrence<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>