Skip to main content
`Ctrl`+`K`

# DMBoundaryType

Describes the choice for the filling of ghost cells on physical domain boundaries.

## Synopsis

    typedef enum {
      DM_BOUNDARY_NONE,
      DM_BOUNDARY_GHOSTED,
      DM_BOUNDARY_MIRROR,
      DM_BOUNDARY_PERIODIC,
      DM_BOUNDARY_TWIST
    } DMBoundaryType;

## Values

- `DM_BOUNDARY_NONE` - no ghost nodes

- `DM_BOUNDARY_GHOSTED` - ghost vertices/cells exist but aren’t filled; you can put values into them and then apply a stencil that uses those ghost locations

- `DM_BOUNDARY_MIRROR` - the ghost value is the same as the value 1 grid point in; that is, the 0th grid point in the real mesh acts like a mirror to define the ghost point value; not yet implemented for 3d

- `DM_BOUNDARY_PERIODIC` - ghost vertices/cells filled by the opposite edge of the domain

- `DM_BOUNDARY_TWIST` - like periodic, only glued backwards like a Mobius strip

## Notes

This is information for the boundary of the PHYSICAL domain. It has nothing to do with boundaries between processes. That width is always determined by the stencil width; see `DMDASetStencilWidth()`.

If the physical grid points have values 0 1 2 3 with `DM_BOUNDARY_MIRROR` then the local vector with ghost points has the values 1 0 1 2 3 2.

See https://scicomp.stackexchange.com/questions/5355/writing-the-poisson-equation-finite-difference-matrix-with-neumann-boundary-cond

## Developer Note

Should `DM_BOUNDARY_MIRROR` have the same meaning with `DMDA_Q0`, that is a staggered grid? In that case should the ghost point have the same value as the 0th grid point where the physical boundary serves as the mirror?

## See Also

DM Basics, `DM`, `DMDA`, `DMDASetBoundaryType()`, `DMDACreate1d()`, `DMDACreate2d()`, `DMDACreate3d()`, `DMDACreate()`

## Level

beginner

## Location

include/petscdmtypes.h

## Examples

src/ksp/ksp/tutorials/ex67.c
src/snes/tutorials/ex48.c
src/dm/tutorials/ex19.c
src/ksp/ksp/tutorials/ex71.c
src/dm/tutorials/ex2.c
src/ksp/ksp/tutorials/ex28.c
src/dm/impls/stag/tutorials/ex1.c
src/ksp/ksp/tutorials/ex66.c

## Examples

src/dm/tutorials/ex6.c
src/dm/impls/stag/tutorials/ex3.c
src/dm/tutorials/ex19.c

## Examples

src/ksp/ksp/tutorials/ex66.c

## Examples

src/dm/dt/dualspace/impls/lagrange/tutorials/ex2.c
src/dm/impls/stag/tutorials/ex2.c
src/dm/impls/stag/tutorials/ex3.c
src/dm/impls/stag/tutorials/ex6.c
src/dm/field/tutorials/ex1.c
src/dm/tutorials/ex14.c
src/dm/impls/stag/tutorials/ex8.c
src/dm/impls/plex/tutorials/ex13.c
src/dm/impls/stag/tutorials/ex1.c
src/dm/impls/stag/tutorials/ex4.c

## Examples

src/ksp/ksp/tutorials/ex59.c
src/dm/tutorials/ex12.c
src/dm/dt/dualspace/impls/lagrange/tutorials/ex2.c
src/dm/tutorials/ex1.c
src/dm/tutorials/ex3.c
src/dm/tutorials/ex13f90.F90
src/dm/impls/plex/tutorials/ex13.c
src/dm/impls/stag/tutorials/ex1.c
src/dm/tutorials/ex13f90aux.F90
src/dm/tutorials/ex5.c

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