<div dir="ltr"><div dir="ltr">On Tue, Sep 29, 2020 at 11:34 AM Pierre Seize <<a href="mailto:Pierre.Seize@onera.fr">Pierre.Seize@onera.fr</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">Hello!<br>
<br>
I have a parallel DMPlex, and I would like to loop on every "real" cell. <br>
It seems that the indexing is as such:<br>
<br>
[cStart (always 0 I think), XXX [ -> actual cell<br>
<br>
[XXX, cStartGhost [ -> parallel cells, as I have overlap = 1<br>
<br>
[cStartGhost, cEndGhost= cEnd[ -> my finite volume boundaries cells.<br>
<br>
I can get cStart and cEnd with DMPlexGetHeightStratum, and cStartGhost <br>
and cEndGhost with DMPlexGetGhostCellStratum.<br>
<br>
What I want is the bound XXX. Right now, I do loop from cStart to cEnd, <br>
and when I find a cell that gives me DMGetLabelValue(dm, "ghost", c, <br>
&value) with a positive value I break my loop and take the current cell <br>
number as the wanted bound. I am not unsatisfied with this but I wonder <br>
if there is a more straightforward way to get what I want.<br></blockquote><div><br></div><div>The documentation needs to be improved I see. Okay, first</div><div><br></div><div>  [cStart, cEnd) is the range for all cells, meaning codimension 0 mesh points</div><div><br></div><div>  [cStartGhost, cEndGhost) is the range for FV ghost cells. These are _not_ parallel ghosts. They are phantom cells</div><div>  outside boundary faces, used to enforce boundary conditions.</div><div><br></div><div>Thus,</div><div><br></div><div>  [cStart, cStartGhost) are the cells in the local Plex</div><div><br></div><div>However, if you have nonzero overlap, then cells can be shared. Cells that are not owned by this process are listed</div><div>in the pointSF,</div><div><br></div><div>  DMGetPointSF(dm, &sf)</div><div><br></div><div>and you can check for them using</div><div><br></div><div>  PetscSFGetGraph(sf, &nroots, &nleaves, &leaves, &remoteLeaves);</div><div>  PetscFindInt(cell, nleaves, leaves, &idx);</div><div>  if (idx >= 0) {</div><div>    <cell is not owned></div><div>  }</div><div><br></div><div>You could, of course, put the leaves in a DMLabel if you think it is easier than the SF check.</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">
Thank you.<br>
<br>
<br>
Pierre<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>