PCBDDC#
Balancing Domain Decomposition by Constraints preconditioner
Options Database Keys#
-pc_bddc_use_vertices (true|false) - include vertices in the primal space
-pc_bddc_use_edges (true|false) - include edge constraints in the primal space
-pc_bddc_use_faces (true|false) - include face constraints in the primal space
-pc_bddc_vertex_size size - classify connected components of at most this size as primal vertices
-pc_bddc_corner_selection (true|false) - select corners using subdomain faces and coordinates
-pc_bddc_use_local_mat_graph (true|false) - use the local matrix adjacency graph for interface analysis
-pc_bddc_local_mat_graph_square count - number of times to square the local matrix graph before interface analysis
-pc_bddc_graph_maxcount count - classify components shared by more than this many neighboring subdomains as primal vertices
-pc_bddc_detect_disconnected (true|false) - detect disconnected local subdomains
-pc_bddc_detect_disconnected_filter (true|false) - filter small local matrix entries when detecting disconnected subdomains
-pc_bddc_monolithic (true|false) - discard information about splitting degrees of freedom into fields
-pc_bddc_use_nnsp (true|false) - use the matrix near nullspace to construct constraints
-pc_bddc_use_nnsp_true (true|false) - use the supplied near-nullspace vectors directly, without orthonormalization
-pc_bddc_constraint_near_null_space_tol tol - discard near-nullspace vectors whose restriction to a connected component has norm at most tol
-pc_bddc_constraint_singular_tol tol - relative tolerance for retaining independent constraint modes
-pc_bddc_symmetric (true|false) - compute primal basis functions assuming symmetry; use false for nonsymmetric problems
-pc_bddc_use_change_of_basis (true|false) - construct a change of basis on edges
-pc_bddc_use_change_on_faces (true|false) - construct the requested change of basis on faces
-pc_bddc_interface_ext_type (dirichlet|lump) - select how interface corrections are extended to subdomain interiors
-pc_bddc_dirichlet_approximate (true|false) - enable nullspace corrections for approximate Dirichlet solvers
-pc_bddc_dirichlet_approximate_scale (true|false) - scale the approximate Dirichlet solver when applying nullspace corrections
-pc_bddc_neumann_approximate (true|false) - enable nullspace corrections for approximate Neumann solvers
-pc_bddc_neumann_approximate_scale (true|false) - scale the approximate Neumann solver when applying nullspace corrections
-pc_bddc_switch_static (true|false) - switch from the default \(M_2\) operator to \(M_3\) in [Doh07]
-pc_bddc_levels levels - maximum number of additional levels (default 0)
-pc_bddc_coarsening_ratio ratio - target number of process subdomains or local elements per aggregate (default 8)
-pc_bddc_coarse_eqs_per_proc neq - target number of equations per process at the coarsest level; a negative value uses one process
-pc_bddc_coarse_eqs_limit neq - stop adding coarse levels when the coarse problem has at most this many equations
-pc_bddc_coarse_adj nprocs - number of processes used to hold the coarse adjacency graph for partitioning
-pc_bddc_use_coarse_estimates (true|false) - use estimated eigenvalues to configure an iterative coarse solver
-pc_bddc_use_deluxe_scaling (true|false) - use deluxe scaling
-pc_bddc_deluxe_zerorows (true|false) - zero rows and columns of deluxe operators associated with primal degrees of freedom
-pc_bddc_deluxe_singlemat (true|false) - combine the deluxe scaling operations into one matrix per interface component
-pc_bddc_schur_rebuild (true|false) - rebuild the interface graph without adjacency information for computing Schur complement principal minors
-pc_bddc_schur_layers layers - number of layers used for economic deluxe scaling; -1 uses all degrees of freedom
-pc_bddc_schur_use_useradj (true|false) - use the graph supplied with
PCBDDCSetLocalAdjacencyGraph()to select Schur complement layers-pc_bddc_schur_exact (true|false) - use the full Schur complement, including components of size one, for adaptive constraint selection
-pc_bddc_adaptive_threshold thresholds - one or two comma-separated thresholds for adaptive constraint selection; one value sets both thresholds
-pc_bddc_adaptive_nmin count - minimum number of adaptive constraints per connected component
-pc_bddc_adaptive_nmax count - maximum number of adaptive constraints per connected component
-pc_bddc_adaptive_userdefined (true|false) - retain constraints from
MatSetNearNullSpace()in addition to adaptive constraints-pc_bddc_benign_trick (true|false) - use the benign subspace approach for saddle-point problems with discontinuous spaces
-pc_bddc_nonetflux (true|false) - compute quadrature weights for no-net-flux constraints automatically
-pc_bddc_nedelec_field_primal (true|false) - make Nedelec degrees of freedom shared by more than two subdomains primal
-pc_bddc_nedelec_order order - override the Nedelec order for testing; 0 selects variable order
-pc_bddc_nedelec_print (true|false) - print Nedelec setup diagnostics
-pc_bddc_load filename - load BDDC customization from a binary file for debugging
-pc_bddc_load_version version - version of the customization file to load
-pc_bddc_save filename - save BDDC customization to a binary file after setup for debugging
-pc_bddc_save_version version - version of the customization file to write
-pc_bddc_check_level level - verbosity level of debugging output
Notes#
PCBDDC requires MATIS matrices and supports nonsymmetric and indefinite problems.
The implementation and its customization are described in [Zam16]; see also Balancing Domain Decomposition by Constraints.
See [Doh07], [KW06], and [MSousedikD08] for the underlying methods.
PCBDDC acts on all degrees of freedom, including subdomain interiors. This allows approximate subdomain solvers.
Approximate local solvers are automatically adapted as described in [Doh07] when a nullspace object
is attached to the subdomain matrices and approximate solvers are selected through the options database.
Interface nodes are classified as vertices, edges, or faces using the local-to-global mapping of degrees of freedom
and the local connectivity graph. The graph can be customized with PCBDDCSetLocalAdjacencyGraph().
Additional information about degrees of freedom can be supplied with PCBDDCSetDofsSplitting(), PCBDDCSetDirichletBoundaries(),
PCBDDCSetNeumannBoundaries(), PCBDDCSetPrimalVerticesIS(), and their local counterparts.
Support for \(H(\mathrm{div})\) and \(H(\mathrm{curl})\) problems is provided through PCBDDCSetDivergenceMat() and PCBDDCSetDiscreteGradient().
Constraints can be customized by attaching a MatNullSpace object to the MATIS matrix with MatSetNearNullSpace().
Linearly independent modes are retained using a singular value decomposition.
When requested, a change of basis is performed as in [KW06]. Local QR factorizations are used when more than
one constraint is present on a connected component, such as an edge or a face. A user-defined change of basis can be supplied
with PCBDDCSetChangeOfBasisMat().
Multilevel PCBDDC is supported as described in [MSousedikD08]. Process subdomains are partitioned using a MatPartitioning object.
When a local MATIS matrix stores multiple elements, their local coarse contributions are first aggregated using a PetscPartitioner object.
In this case, the coarsening ratio is the target number of local elements per aggregate.
Adaptive selection of primal constraints is supported for symmetric positive definite systems with high contrast in the coefficients when MUMPS or MKL_PARDISO is available. See [OWZD17] for adaptive deluxe methods for Raviart-Thomas fields. The benign subspace approach for saddle-point problems with discontinuous spaces is described in [ZT17].
Options for the Dirichlet, Neumann, coarse solver, and aggregation objects use the following prefixes, preceded by any user prefix#
-pc_bddc_dirichlet_
-pc_bddc_neumann_
-pc_bddc_coarse_
-pc_bddc_aggregator_n_
For example, -pc_bddc_dirichlet_ksp_type richardson -pc_bddc_dirichlet_pc_type gamg selects an approximate Dirichlet solver.
By default, local solvers use KSPPREONLY with a direct factorization.
At level n, the aggregator prefix is pc_bddc_aggregator_n_. Numeric-prefix fallback allows
-pc_bddc_aggregator_mat_partitioning_type type and -pc_bddc_aggregator_petscpartitioner_type type to configure all levels.
For BDDC level N > 0, the solver prefixes are#
-pc_bddc_dirichlet_lN_
-pc_bddc_neumann_lN_
-pc_bddc_coarse_lN_
Level 0 is the finest level. A coarse-level PCBDDC inherits the corresponding coarse-solver prefix. For example,
-pc_bddc_coarse_pc_bddc_adaptive_threshold 5
sets the adaptive constraint threshold to 5 for the first coarse-level PCBDDC.
References#
Clark R Dohrmann. An approximate BDDC preconditioner. Numerical Linear Algebra with Applications, 14(2):149–168, 2007.
Axel Klawonn and Olof B Widlund. Dual-primal FETI methods for linear elasticity. Communications on Pure and Applied Mathematics: A Journal Issued by the Courant Institute of Mathematical Sciences, 59(11):1523–1572, 2006.
Jan Mandel, Bedřich Sousedík, and Clark R Dohrmann. Multispace and multilevel BDDC. Computing, 83(2-3):55–85, 2008.
D.-S. Oh, Olof B. Widlund, Stefano Zampini, and Clark Dohrmann. BDDC algorithms with deluxe scaling and adaptive selection of primal constraints for Raviart-Thomas vector fields. Mathematics of Computation, 87(310):659–692, 2017.
Stefano Zampini. PCBDDC: a class of robust dual-primal methods in PETSc. SIAM Journal on Scientific Computing, 38(5):S282–S306, 2016. doi:10.1137/15M1025785.
Stefano Zampini and Xuemin Tu. Multilevel BDDC deluxe algorithms with adaptive coarse spaces for flow in porous media. SIAM Journal of Scientific Computing, 39(4):A1389–A1415, 2017.
See Also#
KSP: Linear System Solvers, PCCreate(), PCSetType(), PCType, PC, MATIS, KSPFETIDP, PCLU, PCGAMG, PCBDDCSetLocalAdjacencyGraph(), PCBDDCSetDofsSplitting(),
PCBDDCSetDirichletBoundaries(), PCBDDCSetNeumannBoundaries(), PCBDDCSetPrimalVerticesIS(), MatNullSpace, MatSetNearNullSpace(),
PCBDDCSetChangeOfBasisMat(), PCBDDCSetDivergenceMat(), PCBDDCSetDiscreteGradient()
Level#
intermediate
Location#
Examples#
src/ksp/ksp/tutorials/ex59.c
src/ksp/ksp/tutorials/ex71.c
src/ksp/ksp/tutorials/ex42.c
src/ksp/ksp/tutorials/ex43.c
src/ksp/ksp/tutorials/ex70.c
src/ksp/ksp/tutorials/ex72.c
src/ksp/pc/impls/bddc/tests/ex1.c
src/ksp/pc/impls/bddc/tests/ex2.c
src/snes/tutorials/ex12.c
Index of all PC routines
Table of Contents for all manual pages
Index of all manual pages