petsc-3.13.6 2020-09-29
PCHPDDMShellApply
Applies a (2) deflated, (1) additive, or (3) balanced coarse correction. In what follows, E = Z Pmat Z^T and Q = Z^T E^-1 Z.
Synopsis
#include "petscpc.h"
static PetscErrorCode PCHPDDMShellApply(PC pc, Vec x, Vec y)
(1) y = Pmat^-1 x + Q x,
(2) y = Pmat^-1 (I - Amat Q) x + Q x (default),
(3) y = (I - Q Amat^T) Pmat^-1 (I - Amat Q) x + Q x.
Input Parameters
| pc | - preconditioner context
|
| x | - input vector
|
| y | - output vector
|
Application Interface Routine: PCApply()
Notes
The options of Pmat^1 = pc(Pmat) are prefixed by -pc_hpddm_levels_1_pc_. Z is a tall-and-skiny matrix assembled by HPDDM. The number of processes on which (Z Pmat Z^T) is aggregated is set via -pc_hpddm_coarse_p.
The options of (Z Pmat Z^T)^-1 = ksp(Z Pmat Z^T) are prefixed by -pc_hpddm_coarse_ (KSPPREONLY and PCCHOLESKY by default), unless a multilevel correction is turned on, in which case, this function is called recursively at each level except the coarsest one.
(1) and (2) visit the "next" level (in terms of coarsening) once per Section 1.5 Writing Application Codes with PETSc, while (3) visits it twice, so it is asymptotically twice costlier. (2) is not symmetric even if both Amat and Pmat are symmetric.
See Also
PCHPDDM, PCHPDDMCoarseCorrectionType
Level
advanced
Location
src/ksp/pc/impls/hpddm/hpddm.cxx
Index of all PC routines
Table of Contents for all manual pages
Index of all manual pages