# PCHPDDM#

Interface with the HPDDM library. This PC may be used to build multilevel spectral domain decomposition methods based on the GenEO framework [2011, 2019]. It may be viewed as an alternative to spectral AMGe or PCBDDC with adaptive selection of constraints. A chronological bibliography of relevant publications linked with PC available in HPDDM through PCHPDDM may be found below. The interface is explained in details in [2021].

The matrix to be preconditioned (Pmat) may be unassembled (MATIS), assembled (MATMPIAIJ, MATMPIBAIJ, or MATMPISBAIJ), hierarchical (MATHTOOL), or MATNORMAL. For multilevel preconditioning, when using an assembled or hierarchical Pmat, one must provide an auxiliary local Mat (unassembled local operator for GenEO) using PCHPDDMSetAuxiliaryMat(). Calling this routine is not needed when using a MATIS Pmat, assembly done internally using MatConvert().

## Options Database Keys#

-pc_hpddm_define_subdomains <true, default=false>

on the finest level, calls PCASMSetLocalSubdomains() with the IS supplied in PCHPDDMSetAuxiliaryMat() (not relevant with an unassembled Pmat)

-pc_hpddm_has_neumann <true, default=false>

on the finest level, informs the PC that the local Neumann matrix is supplied in PCHPDDMSetAuxiliaryMat()

-pc_hpddm_coarse_correction <type, default=deflated>

determines the PCHPDDMCoarseCorrectionType when calling PCApply

Options for subdomain solvers, subdomain eigensolvers (for computing deflation vectors), and the coarse solver can be set with

      -pc_hpddm_levels_%d_pc_
-pc_hpddm_levels_%d_ksp_
-pc_hpddm_levels_%d_eps_
-pc_hpddm_levels_%d_p
-pc_hpddm_levels_%d_mat_type_
-pc_hpddm_coarse_
-pc_hpddm_coarse_p
-pc_hpddm_coarse_mat_type_


e.g., -pc_hpddm_levels_1_sub_pc_type lu -pc_hpddm_levels_1_eps_nev 10 -pc_hpddm_levels_2_p 4 -pc_hpddm_levels_2_sub_pc_type lu -pc_hpddm_levels_2_eps_nev 10 -pc_hpddm_coarse_p 2 -pc_hpddm_coarse_mat_type baij will use 10 deflation vectors per subdomain on the fine “level 1”, aggregate the fine subdomains into 4 “level 2” subdomains, then use 10 deflation vectors per subdomain on “level 2”, and assemble the coarse matrix (of dimension 4 x 10 = 40) on two processes as a MATMPIBAIJ (default is MATMPISBAIJ).

In order to activate a “level N+1” coarse correction, it is mandatory to call -pc_hpddm_levels_N_eps_nev or -pc_hpddm_levels_N_eps_threshold . The default -pc_hpddm_coarse_p value is 1, meaning that the coarse operator is aggregated on a single process.

This preconditioner requires that you build PETSc with SLEPc (–download-slepc=1). By default, the underlying concurrent eigenproblems are solved using SLEPc shift-and-invert spectral transformation. This is usually what gives the best performance for GenEO, cf. [2011, 2013]. As stated above, SLEPc options are available through -pc_hpddm_levels_%d_, e.g., -pc_hpddm_levels_1_eps_type arpack -pc_hpddm_levels_1_eps_threshold 0.1 -pc_hpddm_levels_1_st_type sinvert.

## References#

2011

A robust two-level domain decomposition preconditioner for systems of PDEs. Spillane, Dolean, Hauret, Nataf, Pechstein, and Scheichl. Comptes Rendus Mathematique.

2013

Scalable domain decomposition preconditioners for heterogeneous elliptic problems. Jolivet, Hecht, Nataf, and Prud’homme. SC13.

2015

An introduction to domain decomposition methods: algorithms, theory, and parallel implementation. Dolean, Jolivet, and Nataf. SIAM.

2019

A multilevel Schwarz preconditioner based on a hierarchy of robust coarse spaces. Al Daas, Grigori, Jolivet, and Tournier. SIAM Journal on Scientific Computing.

2021

KSPHPDDM and PCHPDDM: extending PETSc with advanced Krylov methods and robust multilevel overlapping Schwarz preconditioners. Jolivet, Roman, and Zampini. Computer & Mathematics with Applications.

2022a

A robust algebraic domain decomposition preconditioner for sparse normal equations. Al Daas, Jolivet, and Scott. SIAM Journal on Scientific Computing.

2022b

A robust algebraic multilevel domain decomposition preconditioner for sparse symmetric positive definite matrices. Al Daas and Jolivet.

PCCreate(), PCSetType(), PCType, PC, PCHPDDMSetAuxiliaryMat(), MATIS, PCBDDC, PCDEFLATION, PCTELESCOPE

intermediate

## Location#

src/ksp/pc/impls/hpddm/hpddm.cxx

Edit on GitLab