<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Sep 6, 2017 at 2:29 PM, Lawrence Mitchell <span dir="ltr"><<a href="mailto:lawrence.mitchell@imperial.ac.uk" target="_blank">lawrence.mitchell@imperial.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear all,<br>
<br>
for various reasons I'd like, given an existing DMPlex mesh, to be<br>
able to pull submeshes out.  These might take various forms:<br>
<br>
1. The locally visible part of a distributed mesh (so that I can<br>
discretise and solve independent problems on each local part)<br></blockquote><div><br></div><div>This is already a standalone Plex. If you delete the PetscSF, it never knows anyone else is out there :)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2. Some subset of entities of a given codimension (for example, the<br>
boundary of a domain, or the skeleton of the mesh).<br></blockquote><div><br></div><div>There is a "depth" label in a Plex (DMPlexGetDepthLabel) that does this.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So I think conceptually what I want is:<br>
<br>
Create a DMLabel that marks entities of a given codimension.<br>
<br>
Say<br>
<br>
DMPlexCreateSubmesh(dm, label, value, height, comm, &subdm)<br>
<br>
This should walk all entities of the specified height and gather them<br>
if they are labelled with the provided value, then the subdm is<br>
created by treating those entities as the cells of a new mesh and<br>
adding their transitive closure.<br></blockquote><div><br></div><div>Yes, this makes sense. I also tend to include a map from the submesh back to the original.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
There appears to be some submesh functionality in plex right now, but<br>
it doesn't appear to do what I want:<br>
<br>
  DMPlexCreateSubmesh - Extract a hypersurface from the mesh using<br>
vertices defined by a label<br>
  DMPlexFilter - Extract a subset of mesh cells defined by a label as<br>
a separate mesh<br>
<br>
The latter looks close to what I want for 1, except the change of<br>
communicator.<br></blockquote><div><br></div><div>Can you explain this problem? I think this does what you want.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The former seems somewhat odd.  I would have thought the way to<br>
extract a hypersurface would be to mark the faces of the hypersurface<br>
and build a mesh as a I described above.<br></blockquote><div><br></div><div>It just shows you that everyone wants something different. Engineers and scientists tend to</div><div>only know about cells and vertices, so they always want to the interface to use those.</div><div><br></div><div>Earthquake people want to extract faults, but they also want to cells attached to either side</div><div>to make things understandable.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
It looks like it should be possible to reuse some of the existing<br>
submesh routines to do what I want to do, but I'm a little lost.<br>
<br>
What I tried was just adding an option to<br>
DMPlexCreateSubmeshGeneric_<wbr>Interpolated to mark a submesh by<br>
traversing the closure of points marked with a given value.<br></blockquote><div><br></div><div>It should do that automatically. Did you try it as is? Maybe you could give me a small</div><div>Plex and show me why its giving something wrong.</div><div><br></div><div>  Thanks,</div><div><br></div><div>     Matt</div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
But that swiftly ran into problems because the resulting submesh<br>
didn't have depth strata as expected, and looking at the existing code<br>
I'm quite confused.  The subpointMap that a submesh DM has labels the<br>
points of the parents with their depth (in the original mesh?).  But<br>
this seems to be used to determine the depth of the points in the<br>
submesh.  Which seems odd to me.<br>
<br>
I realise this is all rather woolly right now, perhaps in attempting<br>
to clarify any queries I will explain better what I want to do.<br>
<br>
Cheers,<br>
<br>
Lawrence<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><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.caam.rice.edu/~mk51/" target="_blank">http://www.caam.rice.edu/~mk51/</a><br></div></div></div>
</div></div>