PCBDDC#
Balancing Domain Decomposition by Constraints preconditioners, [Doh07], [KW06], [MSousedikD08] Requires MATIS
matrices (Pmat) with local matrices (inside the MATIS
) of type MATSEQAIJ
, MATSEQBAIJ
or MATSEQSBAIJ
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 (see [Doh07],) if the user has attached a nullspace object to the subdomain matrices, and informed
PCBDDC
of using approximate solvers (via the command line).
Boundary nodes are split in vertices, edges and faces classes 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()
Additional information on dofs can be provided by using PCBDDCSetDofsSplitting()
, PCBDDCSetDirichletBoundaries()
, PCBDDCSetNeumannBoundaries()
, and
PCBDDCSetPrimalVerticesIS()
and their local counterparts.
Constraints can be customized by attaching a MatNullSpace
object to the MATIS
matrix via MatSetNearNullSpace()
. Non-singular modes are retained via SVD.
Change of basis is performed similarly to [KW06] when requested. When more than 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.
User defined change of basis can be passed to PCBDDC
with PCBDDCSetChangeOfBasisMat()
The PETSc implementation also supports multilevel PCBDDC
[MSousedikD08]. Coarse grids are partitioned using a MatPartitioning
object.
Adaptive selection of primal constraints is supported for SPD systems with high-contrast in the coefficients if MUMPS or MKL_PARDISO are present.
Options Database Keys#
-pc_bddc_use_vertices
- use or not vertices in primal space-pc_bddc_use_edges
- use or not edges in primal space-pc_bddc_use_faces
- use or not faces in primal space-pc_bddc_symmetric
- symmetric computation of primal basis functions. Specify false for unsymmetric problems-pc_bddc_use_change_of_basis
- use change of basis approach (on edges only)-pc_bddc_use_change_on_faces
- use change of basis approach on faces if change of basis has been requested-pc_bddc_switch_static
- switches from M_2 (default) to M_3 operator (see reference article [1])-pc_bddc_levels <0> - maximum number of levels for multilevel
-pc_bddc_coarsening_ratio <8> - number of subdomains which will be aggregated together at the coarser level (e.g. H/h ratio at the coarser level, significative only in the multilevel case)
-pc_bddc_coarse_redistribute <0> - size of a subset of processors where the coarse problem will be remapped (the value is ignored if not at the coarsest level)
-pc_bddc_use_deluxe_scaling
- use deluxe scaling-pc_bddc_schur_layers <-1> - select the economic version of deluxe scaling by specifying the number of layers (-1 corresponds to the original deluxe scaling)
-pc_bddc_adaptive_threshold <0.0> - when a value different than zero is specified, adaptive selection of constraints is performed on edges and faces (requires deluxe scaling and MUMPS or MKL_PARDISO installed)
-pc_bddc_check_level <0> - set verbosity level of debugging output
Options for Dirichlet, Neumann or coarse solver can be set using the appropriate options prefix
-pc_bddc_dirichlet_
-pc_bddc_neumann_
-pc_bddc_coarse_
e.g. -pc_bddc_dirichlet_ksp_type richardson -pc_bddc_dirichlet_pc_type gamg. PCBDDC
uses by default KSPPREONLY
and PCLU
.
When using a multilevel approach, solvers’ options at the N-th level (N > 1) can be specified using the options prefix
-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).
In order to specify options for the PCBDDC
operators at the coarser levels (and not for the solvers), prepend -pc_bddc_coarse_ or -pc_bddc_coarse_l
to the option, e.g.
-pc_bddc_coarse_pc_bddc_adaptive_threshold 5 -pc_bddc_coarse_l1_pc_bddc_redistribute 3
will use a threshold of 5 for constraints’ selection at the first coarse level and will redistribute the coarse problem of the first coarse level on 3 processors
References#
Clark R Dohrmann. An approximate BDDC preconditioner. Numerical Linear Algebra with Applications, 14(2):149–168, 2007.
See Also#
KSP: Linear System Solvers, PCCreate()
, PCSetType()
, PCType
, PC
, MATIS
, KSPFETIDP
, PCLU
, PCGAMG
, PC
, PCBDDCSetLocalAdjacencyGraph()
, PCBDDCSetDofsSplitting()
,
PCBDDCSetDirichletBoundaries()
, PCBDDCSetNeumannBoundaries()
, PCBDDCSetPrimalVerticesIS()
, MatNullSpace
, MatSetNearNullSpace()
,
PCBDDCSetChangeOfBasisMat()
, PCBDDCCreateFETIDPOperators()
, PCNN
Level#
intermediate
Location#
Examples#
src/ksp/ksp/tutorials/ex59.c
src/ksp/ksp/tutorials/ex70.c
src/ksp/ksp/tutorials/ex42.c
src/ksp/ksp/tutorials/ex72.c
src/ksp/ksp/tutorials/ex43.c
src/snes/tutorials/ex12.c
src/ksp/ksp/tutorials/ex71.c
Index of all PC routines
Table of Contents for all manual pages
Index of all manual pages