Balancing Domain Decomposition by Constraints (PCBDDC)
--pc-type bddc
1. Mathematical Idea
We have a global linear system:
where the domain has been partitioned into subdomains (often one per MPI process). BDDC enforces continuity across subdomains by introducing a coarse space of “primal” unknowns on the subdomain interfaces. The method consists of:
-
Local solves on each subdomain (with partially constrained boundary conditions).
-
A global coarse solve that couples the subdomains via interface constraints.
Hence, it is a two-level (or multi-level) domain decomposition method: a local level to handle subdomains and a coarse level to ensure global coupling.
1.1. Unknowns Classification
Each subdomain has:
-
Interior degrees of freedom (DOFs): no direct interaction with other subdomains.
-
Interface DOFs: these must match up with neighboring subdomains. BDDC splits interface DOFs into:
-
Primal (coarse) DOFs, e.g. corner/vertex values, edge averages, face averages, etc.
-
Dual DOFs, i.e., the remaining interface unknowns.
-
1.2. Preconditioner Form
The BDDC preconditioner M_BDDC can be written schematically as:
where:
-
\(R_0\) is the restriction/extension operator to local subdomains.
-
\(D_0^{-1}\) is block-diagonal, consisting of local subdomain solves.
-
\(B\) is an operator mapping coarse interface DOFs to the global interface unknowns.
-
\(\tilde{S}_C\) is the coarse Schur complement that enforces global interface constraints.
In effect:
-
The term \(R_0^T\,D_0^{-1}\,R_0\) provides local corrections within each subdomain.
-
The term \(B^T\,\tilde{S}_C^{-1}\,B\) supplies a coarse correction that enforces interface constraints and balances the subdomains globally.
2. Using PCBDDC in PETSc
In Feel++/PETSc, once you have:
--pc-type bddc
you can add options like:
# Use corner, edge, face constraints: --pc-bddc-use-vertices=true --pc-bddc-use-edges=true --pc-bddc-use-faces=true # If necessary, specify boundary conditions or custom constraints: --pc-bddc-neumann-boundary=... --pc-bddc-dirichlet-boundary=... --pc-bddc-user-primal-vertices=... --pc-bddc-numbering=...
Depending on your problem (e.g. elasticity, flow, etc.), you might enable or disable edges/faces in the primal space. The chosen constraints control the coarse space dimension and thus preconditioner performance.
3. Benefits
-
Scalable: Good parallel scaling for large 3D problems.
-
Robust: Typically more robust than simpler methods (e.g., block-Jacobi or ASM) for elliptic and nearly-elliptic PDEs.
-
Flexible: You can change which constraints (corners, edges, faces) are included in the coarse space.
4. References
-
C.R. Dohrmann, "An approximate BDDC preconditioner," Numerical Linear Algebra with Applications 14 (2007), 149–168.
-
J. Mandel and C.R. Dohrmann, "Convergence of a balancing domain decomposition by constraints and energy minimization," Numerical Linear Algebra with Applications 10 (2003), 639–659.
-
PETSc documentation on PCBDDC: petsc.org/main/docs/manualpages/PC/PCBDDC/