Skip to main content
`Ctrl`+`K`

# DMPlexBuildFromCellSectionParallel

Build distributed `DMPLEX` topology from a list of vertices for each cell (common mesh generator output) allowing multiple celltypes

## Synopsis

    #include "petscdmplex.h"
    #include "petscdmplextransform.h"
    PetscErrorCode DMPlexBuildFromCellSectionParallel(DM dm, PetscInt numCells, PetscInt numVertices, PetscInt NVertices, PetscSection cellSection, const PetscInt cells[], PeOp PetscSF *vertexSF, PeOp PetscInt *verticesAdjSaved[])

Collective; No Fortran Support

## Input Parameters

- dm - The `DM`

- numCells - The number of cells owned by this process

- numVertices - The number of vertices to be owned by this process, or `PETSC_DECIDE`

- NVertices - The global number of vertices, or `PETSC_DETERMINE`

- cellSection - The `PetscSection` giving the number of vertices for each cell (layout of cells)

- cells - An array of the global vertex numbers for each cell

## Output Parameters

- vertexSF - (Optional) `PetscSF` describing complete vertex ownership

- verticesAdjSaved - (Optional) vertex adjacency array, must be freed by user

## Notes

A triangle and quadrilateral sharing a face

            2----------3
          / |          |
         /  |          |
        /   |          |
       0  0 |     1    |
        \   |          |
         \  |          |
          \ |          |
            1----------4

would have input

      numCells = 2, numVertices = 5
      cells = [0 1 2  1 4 3 2]

which would result in the `DMPLEX`

            4----------5
          / |          |
         /  |          |
        /   |          |
       2  0 |     1    |
        \   |          |
         \  |          |
          \ |          |
            3----------6

Vertices are implicitly numbered consecutively 0,…,NVertices. Each rank owns a chunk of numVertices consecutive vertices. If numVertices is `PETSC_DECIDE`, PETSc will distribute them as evenly as possible using PetscLayout. If NVertices is `PETSC_DETERMINE` and numVertices is PETSC_DECIDE, NVertices is computed by PETSc as the maximum vertex index in cells + 1. If only NVertices is `PETSC_DETERMINE`, it is computed as the sum of numVertices over all ranks.

The cell distribution is arbitrary non-overlapping, independent of the vertex distribution.

## See Also

DMPlex: Unstructured Grids, `DM`, `DMPLEX`, `DMPlexBuildFromCellListParallel()`, `DMPlexCreateFromCellSectionParallel()`, `DMPlexBuildCoordinatesFromCellListParallel()`, `PetscSF`

## Level

advanced

## Location

src/dm/impls/plex/plexcreate.c

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