Skip to main content
`Ctrl`+`K`

# DMBlockingType

Describes how to choose variable block sizes

## Synopsis

    typedef enum {
      DM_BLOCKING_TOPOLOGICAL_POINT,
      DM_BLOCKING_FIELD_NODE
    } DMBlockingType;

## Values

- `DM_BLOCKING_TOPOLOGICAL_POINT` - select all fields at a topological point (cell center, at a face, etc)

- `DM_BLOCKING_FIELD_NODE` - using a separate block for each field at a topological point

## Note

When using `PCVPBJACOBI`, one can choose to block by topological point (all fields at a cell center, at a face, etc.) or by field nodes (using number of components per field to identify “nodes”). Field nodes lead to smaller blocks, but may converge more slowly. For example, a cubic Lagrange hexahedron will have one node at vertices, two at edges, four at faces, and eight at cell centers. If using point blocking, the `PCVPBJACOBI` preconditioner will work with block sizes up to 8 Lagrange nodes. For 5-component CFD, this produces matrices up to 40x40, which increases memory footprint and may harm performance. With field node blocking, the maximum block size will correspond to one Lagrange node, or 5x5 blocks for the CFD example.

## See Also

DM Basics, `PCVPBJACOBI`, `MatSetVariableBlockSizes()`, `DMSetBlockingType()`

## Level

intermediate

## Location

include/petscdmtypes.h

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