<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Jul 22, 2015 at 3:53 PM, Adrian Croucher <span dir="ltr"><<a href="mailto:a.croucher@auckland.ac.nz" target="_blank">a.croucher@auckland.ac.nz</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">hi<br>
<br>
I have a distributed DMPlex representing a finite volume mesh, and first I want to check if I understand the way the indexing of ghost cells works, based on my experiments.<br>
<br>
As I understand it, there are two types of ghost cells:<br>
<br>
1) those created by DMPlexDistribute() (which I call with overlap = 1), representing the cells over the edge of the processor partition boundary<br>
2) those created by DMPlexConstructGhostCells(), which I call to add ghost cells on the physical boundary of the mesh (using a DMLabel), for applying boundary conditions<br>
<br>
The type 1 'partition' ghost cells only appear in local vectors, not global, and are added on the end after the interior cells.<br></blockquote><div><br></div><div>The are only in local vectors, but they can be anywhere in the list of cells. They are marked in the ghost label. It might be that they are now at the end.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
The type 2 'boundary' ghost cells appear in both local and global vectors. In a local vector they are added on the end after the partition ghost cells. In a global vector they appear straight after the interior cells.<br></blockquote><div><br></div><div>Yes, they are required to be after all interior/partition cells.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Is this correct? If so, I have a question:<br>
<br>
If I'm computing fluxes between my finite volume cells, I need a local vector to get access to both types of ghost cells.<br></blockquote><div><br></div><div>Yes.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
But if I'm doing another calculation (computing fluid properties in the cells, in this case) that does not need access to the partition ghosts, but needs to be carried out for all interior cells *and* the boundary ghost cells, I figure it would be preferable to do this with a global vector (to save needless parallel communication scattering a global vector into a local one).<br></blockquote><div><br></div><div>I would use whichever one makes more send in the flow of the algorithm.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
However if I use DMPlexGetHeightStratum() to get the start and end cells, the indices it returns apply to a local vector with the partition ghosts included.<br></blockquote><div><br></div><div>Yes.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Is it safe just to subtract off the number of partition ghost cells from the end cell index returned by DMPlexGetHeightStratum(), if I want to loop over all interior and boundary ghosts cells in a global vector?<br></blockquote><div><br></div><div>Nope. If you really do not want partition ghost cells, you would need</div><div><br></div><div>    ierr = DMPlexGetLabel(dm, "ghost", &ghostLabel);CHKERRQ(ierr);</div><div><div>    ierr = DMLabelGetValue(ghostLabel, cell, &ghost);CHKERRQ(ierr);</div></div><div>    if (ghost >= 0) continue;</div><div><br></div><div>I only use this to avoid ghost faces right now.</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-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Cheers, Adrian<span><font color="#888888"><br>
<br>
-- <br>
Dr Adrian Croucher<br>
Department of Engineering Science<br>
University of Auckland<br>
New Zealand<br>
tel 64-9-373-7599 ext 84611<br>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><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></div>