xref: /petsc/doc/overview/linear_solve_table.md (revision b11d9968bc79904c690b122f9399be46447eb113) !
1(doc_linsolve)=
2
3# Summary of Sparse Linear Solvers Available In PETSc
4
5## Preconditioners
6
7```{eval-rst}
8.. list-table::
9   :widths: auto
10   :align: center
11   :header-rows: 1
12
13   * -
14     - Algorithm
15     - Associated Type
16     - Matrix Types
17     - External Packages
18     - Parallel
19     - Complex
20   * - Generic
21     - Jacobi
22     - ``PCJACOBI``
23     - ``MATAIJ``, ``MATBAIJ``, ``MATSBAIJ``, ``MATDENSE``
24     - ---
25     - X
26     - X
27   * -
28     - Point Block Jacobi
29     - ``PCPBJACOBI``
30     - ``MATAIJ``, ``MATBAIJ``, ``MATSBAIJ``, ``MATKAIJ``, ``MATMPISELL``, ``MATIS``
31     - ---
32     - X
33     - X
34   * -
35     - Variable Point Block Jacobi
36     - ``PCPBJACOBI``
37     - ``MATAIJ``, ``MATBAIJ``, ``MATSBAIJ``
38     - ---
39     - X
40     - X
41   * -
42     - Block Jacobi
43     - ``PCBJACOBI``
44     - ``MATAIJ``, ``MATBAIJ``, ``MATSBAIJ``
45     - ---
46     - X
47     - X
48   * -
49     - SOR
50     - ``PCSOR``
51     - ``MATAIJ``, ``MATSEQDENSE``, ``MATSEQSBAIJ``
52     - ---
53     - X
54     - X
55   * -
56     - Point Block SOR
57     -
58     - ``MATSEQBAIJ`` (only for ``bs`` = 2,3,4,5)
59     - ---
60     - X
61     - X
62   * -
63     - Kaczmarz
64     - ``PCKACZMARZ``
65     - ``MATAIJ``
66     - ---
67     - X
68     - X
69   * -
70     - Additive Schwarz
71     - ``PCASM``
72     - ``MATAIJ``, ``MATBAIJ``, ``MATSBAIJ``
73     - ---
74     - X
75     - X
76   * -
77     - Vanka/overlapping patches
78     - ``PCPATCH``
79     - ``MATAIJ``
80     - ---
81     - X
82     - X
83   * -
84     - Deflation
85     - ``PCDEFLATION``
86     - All
87     - ---
88     - X
89     - X
90   * - Incomplete
91     - ILU
92     - ``PCILU``
93     - ``MATSEQAIJ``, ``MATSEQBAIJ``
94     - ---
95     -
96     - X
97   * -
98     - ILU with drop tolerance
99     - ``PCILU``
100     - ``MATSEQAIJ``
101     - `SuperLU Sequential ILU solver
102       <../../manualpages/Mat/MATSOLVERSUPERLU.html>`__
103     -
104     - X
105   * -
106     -
107     - ``PCILU``
108     - ``MATAIJ``
109     - Euclid/hypre (``PCHYPRE``)
110     - X
111     -
112   * -
113     - ICholesky
114     - ``PCICC``
115     - ``MATSEQAIJ``, ``MATSEQBAIJ``, ``MATSEQSBAIJ``
116     - ---
117     -
118     - X
119   * -
120     - Algebraic recursive multilevel
121     - ``PCPARMS``
122     - ``MATSEQAIJ``
123     - `pARMS <https://www-users.cse.umn.edu/~saad/software/pARMS/>`__
124     -
125     - X
126   * - Matrix Free
127     - Infrastructure
128     - ``PCSHELL``
129     - All
130     - ---
131     - X
132     - X
133   * - Multigrid
134     - Infrastructure
135     - ``PCMG``
136     - All
137     - ---
138     - X
139     - X
140   * -
141     - Geometric
142     -
143     - All
144     - ---
145     - X
146     - X
147   * -
148     - Smoothed Aggregation
149     - ``PCGAMG``
150     - ``MATAIJ``
151     - ---
152     - X
153     - X
154   * -
155     - Smoothed Aggregation (ML)
156     - ``PCML``
157     - ``MATAIJ``
158     - `ML/Trilinos <https://trilinos.github.io/ml.html>`__
159     - X
160     - X
161   * -
162     - Structured Geometric
163     - ``PCPFMG``, ``PCSYSPFMG``, ``PCSMG``
164     - ``MATHYPRESTRUCT``
165     - `hypre <https://hypre.readthedocs.io/en/latest/solvers-smg-pfmg.html>`__
166     - X
167     -
168   * -
169     - Classical Algebraic
170     - ``PCHYPRE``, ``PCAMGX``
171     - ``MATAIJ``
172     - `BoomerAMG/hypre
173       <https://hypre.readthedocs.io/en/latest/solvers-boomeramg.html>`__, `AmgX <https://developer.nvidia.com/amgx>`__
174     - X
175     -
176   * -
177     - Multi-group MG
178     - ``PCHMG``
179     - ``MATAIJ``
180     - ---
181     - X
182     - X
183   * -
184     - Domain Decomposition
185     - ``PCHPDDM``
186     - ``MATAIJ``, ``MATBAIJ``, ``MATSBAIJ``, ``MATIS``
187     - `HPDDM <https://github.com/hpddm/hpddm>`__
188     - X
189     - X
190   * - Hierarchical matrices
191     - :math:`\mathcal H^2`
192     - ``PCH2OPUS``
193     - ``MATHTOOL``, ``MATH2OPUS``
194     - `H2OPUS <https://github.com/ecrc/h2opus>`__
195     - X
196     -
197   * - Physics-based Splitting
198     - Relaxation & Schur Complement
199     - ``PCFIELDSPLIT``
200     - ``MATAIJ``, ``MATBAIJ``, ``MATNEST``
201     - ---
202     - X
203     - X
204   * -
205     - Galerkin composition
206     - ``PCGALERKIN``
207     - Any
208     - ---
209     - X
210     - X
211   * -
212     - Additive/multiplicative
213     - ``PCCOMPOSITE``
214     - Any
215     - ---
216     - X
217     - X
218   * -
219     - Least Squares Commutator
220     - ``PCLSC``
221     - ``MATSCHURCOMPLEMENT``
222     - ---
223     - X
224     - X
225   * - Parallel transformation
226     - Redistribution
227     - ``PCREDISTRIBUTE``
228     - ``MATAIJ``
229     - ---
230     - X
231     - X
232   * -
233     - Telescoping communicator
234     - ``PCTELESCOPE``
235     - ``MATAIJ``
236     - ---
237     - X
238     - X
239   * -
240     - Distribute for MPI
241     - ``PCMPI``
242     - ``MATAIJ``
243     - ---
244     - X
245     - X
246   * - Approximate Inverse
247     - AIV
248     - ``PCHYPRE``, ``PCSPAI``
249     - ``MATAIJ``
250     - `Parasails/hypre <https://hypre.readthedocs.io/en/latest/solvers-parasails.html>`__, `SPAI <https://epubs.siam.org/doi/abs/10.1137/S1064827595294691?journalCode=sjoce3>`__
251     - X
252     -
253   * - Substructuring
254     - Balancing Neumann-Neumann
255     - ``PCNN``
256     - ``MATIS``
257     - ---
258     - X
259     - X
260   * -
261     - Balancing Domain Decomposition
262     - ``PCBDDC``
263     - ``MATIS``
264     - ---
265     - X
266     - X
267   * -
268     - 2-level Schwarz wire basket
269     - ``PCEXOTIC``
270     - ``MATAIJ``
271     - ---
272     - X
273     - X
274```
275
276______________________________________________________________________
277
278## Direct Solvers
279
280```{eval-rst}
281.. list-table::
282   :widths: auto
283   :align: center
284   :header-rows: 1
285
286   * -
287     - Algorithm
288     - Associated Type
289     - Matrix Types
290     - External Packages
291     - Parallel
292     - Complex
293   * - Direct LU
294     - LU
295     - ``PCLU``
296     - ``MATSEQAIJ``, ``MATSEQBAIJ``
297     - ---
298     -
299     - X
300   * -
301     -
302     -
303     - ``MATSEQAIJ``
304     - `MATLAB <https://www.mathworks.com/products/matlab.html>`__
305     -
306     - X
307   * -
308     -
309     -
310     - ``MATAIJ``
311     - `PaStiX <http://pastix.gforge.inria.fr/files/README-txt.html>`__
312     - X
313     - X
314   * -
315     -
316     -
317     - ``MATAIJ``
318     - `SuperLU <https://portal.nersc.gov/project/sparse/superlu/>`__
319     - X
320     - X
321   * -
322     -
323     -
324     - ``MATAIJ``, ``MATBAIJ``, ``MATSEQSELL``, ``MATDENSE``, ``MATNEST``
325     - `MUMPS <https://mumps-solver.org/>`__
326     - X
327     - X
328   * -
329     -
330     -
331     - ``MATSEQAIJ``
332     - `ESSL <https://www.ibm.com/support/knowledgecenter/en/SSFHY8/essl_welcome.html>`__
333     -
334     -
335   * -
336     -
337     -
338     - ``MATSEQAIJ``
339     - `UMFPACK (SuiteSparse) <https://people.engr.tamu.edu/davis/suitesparse.html>`__
340     -
341     - X
342   * -
343     -
344     -
345     - ``MATSEQAIJ``
346     - `KLU (SuiteSparse) <https://people.engr.tamu.edu/davis/suitesparse.html>`__
347     -
348     - X
349   * -
350     -
351     -
352     - ``MATSEQAIJ``
353     - `LUSOL <https://web.stanford.edu/group/SOL/software/lusol/>`__
354     -
355     -
356   * -
357     -
358     -
359     - ``MATSEQAIJ``, ``MATSEQBAIJ``
360     - `MKL PARDISO
361       <https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top.html>`__
362     -
363     - X
364   * -
365     -
366     -
367     - ``MATMPIAIJ``, ``MATMPIBAIJ``
368     - `MKL Cluster PARDISO
369       <https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top.html>`__
370     - X
371     - X
372   * -
373     -
374     -
375     - ``MATDENSE``
376     - `Elemental <https://github.com/elemental/Elemental>`__
377     - X
378     - X
379   * - Direct Cholesky
380     - Cholesky
381     - ``PCCHOLESKY``
382     - ``MATSEQAIJ``, ``MATSEQSBAIJ``
383     - ---
384     -
385     - X
386   * -
387     -
388     -
389     - ``MATSBAIJ``
390     - `PaStiX <http://pastix.gforge.inria.fr/files/README-txt.html>`__
391     - X
392     - X
393   * -
394     -
395     -
396     - ``MATAIJ``, ``MATSBAIJ``, ``MATDENSE``, ``MATNEST``
397     - `MUMPS <https://mumps-solver.org/>`__
398     - X
399     - X
400   * -
401     -
402     -
403     - ``MATSEQAIJ``, ``MATSEQSBAIJ``
404     - `CHOLMOD (SuiteSparse) <https://people.engr.tamu.edu/davis/suitesparse.html>`__
405     -
406     - X
407   * -
408     -
409     -
410     - ``MATDENSE``
411     - `Elemental <https://github.com/elemental/Elemental>`__
412     - X
413     - X
414   * -
415     -
416     -
417     - ``MATSEQSBAIJ``
418     - `MKL PARDISO
419       <https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top.html>`__
420     -
421     -
422   * -
423     -
424     -
425     - ``MATMPIAIJ``, ``MATMPIBAIJ``
426     - `MKL CPardiso
427       <https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-c/top.html>`__
428     - X
429     -
430   * - Direct SVD
431     - Singular value decomposition
432     - ``PCSVD``
433     - Any
434     - ---
435     - X
436     - X
437   * - Direct QR
438     - QR
439     - ``PCQR``
440     - ``MATSEQAIJ``
441     -  `SuiteSparse QR <https://people.engr.tamu.edu/davis/suitesparse.html>`__
442     -
443     -
444   * -
445     - XXt and XYt
446     -
447     - ``MATAIJ``
448     - ---
449     - X
450     -
451```
452
453______________________________________________________________________
454
455## Krylov Methods
456
457```{eval-rst}
458.. list-table::
459   :widths: auto
460   :align: center
461   :header-rows: 1
462
463   * - Algorithm
464     - Associated Type
465     - External Packages
466     - Parallel
467     - Complex
468   * - Richardson
469     - ``KSPRICHARDSON``
470     - ---
471     - X
472     - X
473   * - Chebyshev
474     - ``KSPCHEBYSHEV``
475     - ---
476     - X
477     - X
478   * - GMRES
479     - ``KSPGMRES``
480     - ---
481     - X
482     - X
483   * - Flexible GMRES
484     - ``KSPFGMRES``
485     - ---
486     - X
487     - X
488   * - LGMRES
489     - ``KSPLGMRES``
490     - ---
491     - X
492     - X
493   * - Deflated GMRES
494     - ``KSPDGMRES``
495     - ---
496     - X
497     -
498   * - Two-stage with least squares residual minimization
499     - ``KSPTSIRM``
500     - ---
501     - X
502     - X
503   * - Conjugate Gradient
504     - ``KSPCG``
505     - ---
506     - X
507     - X
508   * - Conjugate Gradient Squared
509     - ``KSPCGS``
510     - ---
511     - X
512     - X
513   * - Conjugate Gradient for Least Squares
514     - ``KSPCGLS``
515     - ---
516     - X
517     - X
518   * - Conjugate Gradient on Normal Equations
519     - ``KSPCGNE``
520     - ---
521     - X
522     - X
523   * - Nash Conjugate Gradient with trust region constraint
524     - ``KSPNASH``
525     - ---
526     - X
527     - X
528   * - Conjugate Gradient with trust region constraint
529     - ``KSPSTCG``
530     - ---
531     - X
532     - X
533   * - Gould et al Conjugate Gradient with trust region constraint
534     - ``KSPGLTR``
535     - ---
536     - X
537     - X
538   * - Steinhaug Conjugate Gradient with trust region constraint
539     - ``KSPQCG``
540     - ---
541     - X
542     - X
543   * - Left Conjugate Direction
544     - ``KSPLCD``
545     - ---
546     - X
547     - X
548   * - Bi-Conjugate Gradient
549     - ``KSPBICG``
550     - ---
551     - X
552     - X
553   * - Stabilized Bi-Conjugate Gradient
554     - ``KSPBCGS``
555     - ---
556     - X
557     - X
558   * - Improved Stabilized Bi-Conjugate Gradient
559     - ``KSPIBCGS``
560     - ---
561     - X
562     - X
563   * - Transpose-free QMR
564     - ``KSPTFQMR``
565     - ---
566     - X
567     - X
568   * - Transpose-free variant of QMR developed by Tony Chan
569     - ``KSPTCQMR``
570     - ---
571     - X
572     - X
573   * - QMR BiCGStab
574     - ``KSPQMRCGS``
575     - ---
576     - X
577     - X
578   * - Flexible Conjugate Gradients
579     - ``KSPFCG``
580     - ---
581     - X
582     - X
583   * - Flexible stabilized Bi-Conjugate Gradients
584     - ``KSPFBCGS``
585     - ---
586     - X
587     - X
588   * - Flexible stabilized Bi-Conjugate Gradients with fewer reductions
589     - ``KSPFBCGSR``
590     - ---
591     - X
592     - X
593   * - Stabilized Bi-Conjugate Gradients with length :math:`\ell` recurrence
594     - ``KSPBCGSL``
595     - ---
596     - X
597     - X
598   * - Conjugate Residual
599     - ``KSPCR``
600     - ---
601     - X
602     - X
603   * - Generalized Conjugate Residual
604     - ``KSPGCR``
605     - ---
606     - X
607     - X
608   * - Generalized Conjugate Residual (with inner normalization and deflated restarts)
609     - ``KSPHPDDM``
610     - `HPDDM <https://github.com/hpddm/hpddm>`__
611     - X
612     - X
613   * - Minimum Residual
614     - ``KSPMINRES``
615     - ---
616     - X
617     - X
618   * - LSQR
619     - ``KSPLSQR``
620     - ---
621     - X
622     - X
623   * - SYMMLQ
624     - ``KSPSYMMLQ``
625     - ---
626     - X
627     - X
628   * - FETI-DP (reduction to dual-primal sub-problem)
629     - ``KSPFETIDP``
630     - ---
631     - X
632     - X
633   * - Gropp's overlapped reduction pipelined Conjugate Gradient
634     - ``KSPGROPPCG``
635     - ---
636     - X
637     - X
638   * - Pipelined Conjugate Gradient
639     - ``KSPPIPECG``
640     - ---
641     - X
642     - X
643   * - Pipelined Conjugate Gradient with residual replacement
644     - ``KSPPIPECGRR``
645     - ---
646     - X
647     - X
648   * - Pipelined depth :math:`\ell` Conjugate Gradient
649     - ``KSPPIPELCG``
650     - ---
651     - X
652     - X
653   * - Pipelined predict-and-recompute Conjugate Gradient
654     - ``KSPPIPEPRCG``
655     - ---
656     - X
657     - X
658   * - Pipelined Conjugate Gradient over iteration pairs
659     - ``KSPPIPECG2``
660     - ---
661     - X
662     - X
663   * - Pipelined flexible Conjugate Gradient
664     - ``KSPPIPEFCG``
665     - ---
666     - X
667     - X
668   * - Pipelined stabilized Bi-Conjugate Gradients
669     - ``KSPPIPEBCGS``
670     - ---
671     - X
672     - X
673   * - Pipelined Conjugate Residual
674     - ``KSPPIPECR``
675     - ---
676     - X
677     - X
678   * - Pipelined flexible GMRES
679     - ``KSPPIPEFGMRES``
680     - ---
681     - X
682     - X
683   * - Pipelined Generalized Conjugate Residual
684     - ``KSPPIPEGCR``
685     - ---
686     - X
687     - X
688   * - Pipelined GMRES
689     - ``KSPPGMRES``
690     - ---
691     - X
692     - X
693```
694