<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Feb 1, 2016 at 3:30 AM, Afanasiev  Michael <span dir="ltr"><<a href="mailto:michael.afanasiev@erdw.ethz.ch" target="_blank">michael.afanasiev@erdw.ethz.ch</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">



<div>
<div><font size="2"><span style="font-size:10pt">
<div>Hi everyone,<br>
<br>
A few of us here at ETH have been working on some finite-element stuff using DMPLEX, which has been wildly useful. Is there anywhere that we can get general rules for the degree of freedom ordering returned by DMPlexVecGetClosure? Something akin to the attached
 PDF (provided by Dave May), but for Hexs, Tris, and Tets?<br></div></span></font></div></div></blockquote><div><br></div><div>I will make those, but I am honestly very pressed right now with a hard deadline. I will just describe the process quickly</div><div>so that maybe you will not be held up until I can get to it.</div><div><br></div><div>The order of dofs is based upon the topological order of the closure. Thus, you can see in the quad example that it always proceeds</div><div><br></div><div>  {cell, faces, edges, vertices}</div><div><br></div><div>So the first question is: what is the order of the boundary around any mesh point? This is specified here:</div><div><br></div><div>  <a href="https://bitbucket.org/petsc/petsc/src/e03cc9b84019b00a431ca4cfdfeb76830ce7201c/src/dm/impls/plex/plexinterpolate.c?at=master&fileviewer=file-view-default#plexinterpolate.c-43">https://bitbucket.org/petsc/petsc/src/e03cc9b84019b00a431ca4cfdfeb76830ce7201c/src/dm/impls/plex/plexinterpolate.c?at=master&fileviewer=file-view-default#plexinterpolate.c-43</a></div><div><br></div><div>which clearly would benefit from being written down somewhere. Once you have the face order, the only other</div><div>element is that faces may be oriented when extracted. You can see this orientation in the order of vertices in</div><div>the code above. I orient the cell so that you get a consistent normal (in 3D its the generalization that the iterated</div><div>boundary operator is null), as you can see from the quad example. Finally, each point only appears the first time</div><div>it is considered in the closure.</div><div><br></div><div>The additional complications with dofs are that</div><div><br></div><div>  - Dofs are ordered according to the orientation of the point they live on. Basically you have a representation of the</div><div>    symmetric group attached to each orientation (strictly its an order I think). This is probably not general enough</div><div>    but it works for now.</div><div><br></div><div>  - I further partition dofs by field, so that all dofs of each field are contiguous.</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"><div><div><font size="2"><span style="font-size:10pt"><div>
Thanks for any help,<br>
Mike.<br>
<br>
</div>
</span></font></div>
<div><font size="2"><span style="font-size:10pt">
<div><br>
--<br>
Michael Afanasiev<br>
Ph.D. Candidate<br>
Computational Seismology<br>
Institut für Geophysik<br>
ETH Zürich<br>
<br>
Sonneggstrasse 5, NO H 39.2<br>
CH 8092 Zürich<br>
<a href="mailto:michael.afanasiev@erdw.ethz.ch" target="_blank">michael.afanasiev@erdw.ethz.ch</a><br>
<br>
</div>
</span></font></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>