Skip to main content
`Ctrl`+`K`

# DMPlexGetConeRecursive

Expand each given point into its cone points and do that recursively until we end up just with vertices (DAG points of depth 0, i.e., without cones).

## Synopsis

    #include "petscdmplex.h"
    PetscErrorCode DMPlexGetConeRecursive(DM dm, IS points, PeOp PetscInt *depth, PeOp IS *expandedPoints[], PeOp PetscSection *sections[])

Not Collective

## Input Parameters

- dm - The `DMPLEX`

- points - The `IS` of points, which must lie in the chart set with `DMPlexSetChart()`

## Output Parameters

- depth - (optional) Size of the output arrays, equal to `DMPLEX` depth, returned by `DMPlexGetDepth()`

- expandedPoints - (optional) An array of index sets with recursively expanded cones

- sections - (optional) An array of sections which describe mappings from points to their cone points

## Notes

Like `DMPlexGetConeTuple()` but recursive.

Array `expandedPoints` has size equal to `depth`. Each `expandedPoints`[d] contains DAG points with maximum depth d, recursively cone-wise expanded from the input points. For example, for d=0 it contains only vertices, for d=1 it can contain vertices and edges, etc.

Array section has size equal to `depth`. Each `PetscSection` `sections`[d] realizes mapping from `expandedPoints`[d+1] (section points) to `expandedPoints`[d] (section dofs) as follows: (1) DAG points in `expandedPoints`[d+1] with `depth` d+1 to their cone points in `expandedPoints`[d]; (2) DAG points in `expandedPoints`[d+1] with `depth` in [0,d] to the same points in `expandedPoints`[d].

## See Also

DMPlex: Unstructured Grids, `DM`, `DMPLEX`, `DMPlexCreate()`, `DMPlexGetCone()`, `DMPlexGetConeTuple()`, `DMPlexRestoreConeRecursive()`, `DMPlexGetConeRecursiveVertices()`, `DMPlexGetDepth()`, `PetscSection`, `IS`

## Level

advanced

## Location

src/dm/impls/plex/plex.c

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