> 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