Skip to main content
`Ctrl`+`K`

# DMPlexGetTransitiveClosure

Return the points on the transitive closure of the in-edges or out-edges for this point in the DAG

## Synopsis

    #include "petscdmplex.h"
    PetscErrorCode DMPlexGetTransitiveClosure(DM dm, PetscInt p, PetscBool useCone, PetscInt *numPoints, PetscInt *points[])

Not Collective

## Input Parameters

- dm - The `DMPLEX`

- p - The mesh point

- useCone - `PETSC_TRUE` for the closure, otherwise return the star

## Input/Output Parameter

- points - The points and point orientations, interleaved as pairs [p0, o0, p1, o1, …]; if *points is `NULL` on input, internal storage will be returned, use `DMPlexRestoreTransitiveClosure()`, otherwise the provided array is used to hold the values

## Output Parameter

- numPoints - The number of points in the closure, so `points` is of size 2*`numPoints`

## Note

If using internal storage (points is `NULL` on input), each call overwrites the last output.

## Fortran Notes

`points` must be declared with

      PetscInt, pointer :: points(:)

and is always allocated by the function.

Pass `PETSC_NULL_INTEGER` for `numPoints` if it is not needed

## See Also

DMPlex: Unstructured Grids, `DM`, `DMPLEX`, `DMPlexRestoreTransitiveClosure()`, `DMPlexCreate()`, `DMPlexSetCone()`, `DMPlexSetChart()`, `DMPlexGetCone()`

## Level

beginner

## Location

src/dm/impls/plex/plex.c

## Examples

src/dm/impls/plex/tutorials/ex11.c

## Implementations

DMPlexGetTransitiveClosure_Internal() in src/dm/impls/plex/plex.c

Index of all DMPlex routines
Table of Contents for all manual pages
Index of all manual pages