> On 12 May 2017, at 04:57, 李季 <[email protected]> wrote:
>
> Hi developers:
> I have such a question that I want to get the vertices of a cell. I know
> I can get the points by
> 1. Getting the faces of a cell such as "DMPlexGetCone(dm, c, &faces";
> 2. Getting the vertices of every face of the cell such as
> "DMPlexGetCone(dm, f, &vertices)".
>
> Then I can obtain the vertices belongs to a cell. Is there any concise
> routine which I can choose to get the
> vertices of a cell directly?
You should use the interface for the transitive closure.
Find bounds of points that are vertices:
DMPlexGetDepthStratum(dm, &vStart, &vEnd);
...
DMPlexGetTransitiveClosure(dm, c, PETSC_TRUE, &nclosure, &closure);
for (PetscInt i = 0; i < nclosure; i++) {
const PetscInt p = closure[2*i];
if (p >= vStart && p < vEnd) {
p is a vertex
}
}
This works regardless of the topological dimension of the "cell" point you are
using (the same code is good to find the vertices in the closure of a facet,
say).
Matt's course notes (http://www.caam.rice.edu/~caam519/CSBook.pdf) have nice
pictures that help understand this language in section 7.1.
Cheers,
Lawrence