> On 12 May 2017, at 04:57, 李季 <leeje...@126.com> 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

Reply via email to