<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Nov 30, 2015 at 7:01 AM, Morten Nobel-Jørgensen <span dir="ltr"><<a href="mailto:mono@mek.dtu.dk" target="_blank">mono@mek.dtu.dk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



<div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px">
<div style="font-family:Calibri,sans-serif">I have a very simple unstructured mesh composed of two triangles (four vertices) with one shared edge using a DMPlex:</div>
<div><font face="Courier"><br>
</font></div>
<div><font face="Courier"> /|\</font></div>
<div><font face="Courier">/ | \</font></div>
<div><font face="Courier">\ | /</font></div>
<div><font face="Courier"> \|/</font></div>
<div style="font-family:Calibri,sans-serif"><br>
</div>
<div style="font-family:Calibri,sans-serif">After distributing this mesh to two processes, each process owns a triangle. However one process owns tree vertices, while the last vertex is owned by the other process.</div>
<div style="font-family:Calibri,sans-serif"><br>
</div>
<div style="font-family:Calibri,sans-serif">The problem occurs after uniformly refining the dm. The mesh now looks like this: </div>
<div style="font-family:Calibri,sans-serif"><br>
</div>
<div style="font-family:Calibri,sans-serif">
<div style="font-family:-webkit-standard"><font face="Courier"> /|\</font></div>
<div style="font-family:-webkit-standard"><font face="Courier">/\|/\</font></div>
<div style="font-family:-webkit-standard"><font face="Courier">\/|\/</font></div>
<div style="font-family:-webkit-standard"><font face="Courier"> \|/</font></div>
<div style="font-family:-webkit-standard"><font face="Courier"><br>
</font></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif">The new center vertex is now not listed as a ghost vertex but instead exists as two individual points.</span></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif"><br>
</span></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif">Is there any way that this new center vertex could be created as a ghost vertex during refinement?</span></div></div></div></blockquote><div><br></div><div>This could be a bug with the l2g mapping. I do not recreate it when refining, only the SF defining the mapping.</div><div>Here is an experiment: do not retrieve the mapping until after the refinement. Do you get what you want? If so,</div><div>I can easily fix this by destroying the map when I refine.</div><div><br></div><div>  Thanks,</div><div><br></div><div>    Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word;color:rgb(0,0,0);font-size:14px"><div style="font-family:Calibri,sans-serif">
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif">Kind regards,</span></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif">Morten</span></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif"><br>
</span></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif">Ps. Here are some code snippets for getting global point index and test of point is a ghost point:</span></div>
<div style="font-family:-webkit-standard"><span style="font-family:Calibri,sans-serif"><br>
</span></div>
<div style="font-family:-webkit-standard">
<pre style="background-color:rgb(255,255,255);font-family:Menlo;font-size:9pt"><span style="color:#000080;font-weight:bold">int </span>localToGlobal(DM dm, PetscInt point){<br>    <span style="color:#000080;font-weight:bold">const </span>PetscInt* array;<br>    ISLocalToGlobalMapping ltogm;<br>    DMGetLocalToGlobalMapping(dm,&ltogm);<br>    ISLocalToGlobalMappingGetIndices(ltogm, &array);<br>    PetscInt res = array[point];<br>    <span style="color:#000080;font-weight:bold">if </span>(res < <span style="color:#0000ff">0</span>){ <span style="color:#808080;font-style:italic">// if ghost<br></span><span style="color:#808080;font-style:italic">        </span>res = -res +<span style="color:#0000ff">1</span>;<br>    }<br>    <span style="color:#000080;font-weight:bold">return </span>res;<br>}<br><br><span style="color:#000080;font-weight:bold">bool </span>isGhost(DM dm, PetscInt point){<br>    <span style="color:#000080;font-weight:bold">const </span>PetscInt* array;<br>    ISLocalToGlobalMapping ltogm;<br>    DMGetLocalToGlobalMapping(dm,&ltogm);<br>    ISLocalToGlobalMappingGetIndices(ltogm, &array);<br>    <span style="color:#000080;font-weight:bold">return </span>array[point]<<span style="color:#0000ff">0</span>;<br>}</pre>
</div>
</div>
<div style="font-family:Calibri,sans-serif">
<div></div>
</div>
</div>

</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">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>