# Is there any way to do “double preconditioning”

Question:

Suppose that you have two different (factored) preconditioners for a symmetric positive definite matrix $A$: $$A \approx B^TB$$ and $$A \approx C^TC,$$ where the inverses of the factors $B, B^T, C, C^T$ are easy to apply.

When is it possible to use information from both $B$ and $C$ to build a better preconditioner than either $B$ or $C$ alone?

-

$$P_a^{-1} x = (B^T B)^{-1} x + (C^T C)^{-1} x,$$

multiplicative

$$P_m^{-1} x = (B^T B)^{-1} x + (C^T C)^{-1} \Big(x - A (B^T B)^{-1} x \Big),$$

or symmetric multiplicative. Methods of this class are available in PETSc using PCCOMPOSITE in PETSc. For example,

petsc/src/ksp/ksp/examples/tutorials\$ ./ex2 -m 100 -n 100 -ksp_monitor \ -pc_type composite -pc_composite_type multiplicative \ -pc_composite_pcs ilu,gamg 0 KSP Residual norm 7.088415699389e+01 1 KSP Residual norm 1.271768323411e+01 2 KSP Residual norm 1.529853612054e+00 3 KSP Residual norm 1.214841683459e-01 4 KSP Residual norm 8.341606406485e-03 5 KSP Residual norm 6.471990946051e-04 6 KSP Residual norm 8.082672366030e-05 7 KSP Residual norm 6.111138513482e-06 Norm of error 6.93786e-06 iterations 7 

The users manual has a section on "Combining Preconditioners".

-
Excellent, thank you! Are you aware of any theory or papers that discuss the conditions under which these combinations would be effective or innefective, or is it just pretty much trial and error? –  Nick Alger Feb 23 '14 at 17:30
As with all preconditioning, the analysis is in terms of the spectrum of a preconditioned operator, often expressed via a generalized eigenvalue problem. Intuitively, if each preconditioner target different processes or different parts of the spectrum, the intent of combination is to correct both parts. Most successful approaches of this class are based on subspace correction, which includes multigrid, domain decomposition, and field splitting (literature for each). PETSc has more specialized preconditioners to expose parallelism or to reuse intermediate results in these cases. –  Jed Brown Feb 23 '14 at 19:42

In addition to Jed's excellent answer, a method I've found recently is to switch between the preconditioners every other step in flexible GMRES (FGMRES), as is done, for example, in

Tezduyar, T. E., et al. "A new mixed preconditioning method for finite element computations." Computer Methods in Applied Mechanics and Engineering 99.1 (1992): 27-42. http://repository.ias.ac.in/24680/1/320.pdf

-
{"extraction_info": {"found_math": true, "script_math_tex": 0, "script_math_asciimath": 0, "math_annotations": 0, "math_alttext": 0, "mathml": 0, "mathjax_tag": 0, "mathjax_inline_tex": 1, "mathjax_display_tex": 1, "mathjax_asciimath": 1, "img_math": 0, "codecogs_latex": 0, "wp_latex": 0, "mimetex.cgi": 0, "/images/math/codecogs": 0, "mathtex.cgi": 0, "katex": 0, "math-container": 0, "wp-katex-eq": 0, "align": 0, "equation": 0, "x-ck12": 0, "texerror": 0, "math_score": 0.5893301963806152, "perplexity": 2170.261241264593}, "config": {"markdown_headings": true, "markdown_code": true, "boilerplate_config": {"ratio_threshold": 0.18, "absolute_threshold": 10, "end_threshold": 15, "enable": true}, "remove_buttons": true, "remove_image_figures": true, "remove_link_clusters": true, "table_config": {"min_rows": 2, "min_cols": 3, "format": "plain"}, "remove_chinese": true, "remove_edit_buttons": true, "extract_latex": true}, "warc_path": "s3://commoncrawl/crawl-data/CC-MAIN-2015-40/segments/1443736678409.42/warc/CC-MAIN-20151001215758-00235-ip-10-137-6-227.ec2.internal.warc.gz"}