**petsc-3.5.2 2014-09-08**

# PCBDDC

Balancing Domain Decomposition by Constraints. An implementation of the BDDC preconditioner based on

[1] C. R. Dohrmann. "An approximate BDDC preconditioner", Numerical Linear Algebra with Applications Volume 14, Issue 2, pages 149-168, March 2007
[2] A. Klawonn and O. B. Widlund. "Dual-Primal FETI Methods for Linear Elasticity", http://cs.nyu.edu/csweb/Research/TechReports/TR2004-855/TR2004-855.pdf
[3] J. Mandel, B. Sousedik, C. R. Dohrmann. "Multispace and Multilevel BDDC", http://arxiv.org/abs/0712.3977

The matrix to be preconditioned (Pmat) must be of type MATIS.

Currently works with MATIS matrices with local Neumann matrices of type MATSEQAIJ, MATSEQBAIJ or MATSEQSBAIJ, either with real or complex numbers.

It also works with unsymmetric and indefinite problems.

Unlike 'conventional' interface preconditioners, PCBDDC iterates over all degrees of freedom, not just those on the interface. This allows the use of approximate solvers on the subdomains.

Approximate local solvers are automatically adapted for singular linear problems (see [1]) if the user has provided the nullspace using PCBDDCSetNullSpace

Boundary nodes are split in vertices, edges and faces using information from the local to global mapping of dofs and the local connectivity graph of nodes. The latter can be customized by using PCBDDCSetLocalAdjacencyGraph()

Constraints can be customized by attaching a MatNullSpace object to the MATIS matrix via MatSetNearNullSpace().

Change of basis is performed similarly to [2] when requested. When more the one constraint is present on a single connected component (i.e. an edge or a face), a robust method based on local QR factorizations is used.

The PETSc implementation also supports multilevel BDDC [3]. Coarse grids are partitioned using MatPartitioning object.

### Options Database Keys

**-pc_bddc_use_vertices <1> ** -use or not vertices in primal space

**-pc_bddc_use_edges <1> ** -use or not edges in primal space

**-pc_bddc_use_faces <0> ** -use or not faces in primal space

**-pc_bddc_use_change_of_basis <0> ** -use change of basis approach (on edges only)

**-pc_bddc_use_change_on_faces <0> ** -use change of basis approach on faces if change of basis has been requested

**-pc_bddc_switch_static <0> ** -switches from M_2 to M_3 operator (see reference article [1])

**-pc_bddc_levels <0> ** -maximum number of levels for multilevel

**-pc_bddc_coarsening_ratio ** -H/h ratio at the coarser level

**-pc_bddc_check_level <0> ** -set verbosity level of debugging output

Options for Dirichlet, Neumann or coarse solver can be set with

-pc_bddc_dirichlet_
-pc_bddc_neumann_
-pc_bddc_coarse_

e.g -pc_bddc_dirichlet_ksp_type richardson -pc_bddc_dirichlet_pc_type gamg
When using a multilevel approach, solvers' options at the N-th level can be specified as

-pc_bddc_dirichlet_lN_
-pc_bddc_neumann_lN_
-pc_bddc_coarse_lN_

Note that level number ranges from the finest 0 to the coarsest N.

### Developer notes

New deluxe scaling operator will be available soon.

Contributed by Stefano Zampini

### See Also

PCCreate(), PCSetType(), PCType (for list of available types), PC, MATIS

**Level:**intermediate

Location:src/ksp/pc/impls/bddc/bddc.c

Index of all PC routines

Table of Contents for all manual pages

Index of all manual pages