xref: /petsc/doc/overview/matrix_table.md (revision b11d9968bc79904c690b122f9399be46447eb113)
1*7f296bb3SBarry Smith(doc_matrix)=
2*7f296bb3SBarry Smith
3*7f296bb3SBarry Smith# Summary of Matrix Types Available In PETSc
4*7f296bb3SBarry Smith
5*7f296bb3SBarry Smith```{eval-rst}
6*7f296bb3SBarry Smith.. list-table::
7*7f296bb3SBarry Smith   :widths: auto
8*7f296bb3SBarry Smith   :align: center
9*7f296bb3SBarry Smith   :header-rows: 1
10*7f296bb3SBarry Smith
11*7f296bb3SBarry Smith   * - Format
12*7f296bb3SBarry Smith     - Matrix Types
13*7f296bb3SBarry Smith     - Constructor
14*7f296bb3SBarry Smith     - External Packages
15*7f296bb3SBarry Smith     - Details
16*7f296bb3SBarry Smith   * - CSR
17*7f296bb3SBarry Smith     - ``MATAIJ``
18*7f296bb3SBarry Smith     - ``MatCreateAIJ()``
19*7f296bb3SBarry Smith     -
20*7f296bb3SBarry Smith     - Compressed sparse row
21*7f296bb3SBarry Smith   * -
22*7f296bb3SBarry Smith     - ``MATAIJMKL``
23*7f296bb3SBarry Smith     - ``MatCreateMPIAIJMKL()``
24*7f296bb3SBarry Smith     - Intel oneAPI MKL
25*7f296bb3SBarry Smith     - OpenMP support
26*7f296bb3SBarry Smith   * -
27*7f296bb3SBarry Smith     - ``MATAIJSELL``
28*7f296bb3SBarry Smith     - ``MatCreateMPIAIJSELL()``
29*7f296bb3SBarry Smith     -
30*7f296bb3SBarry Smith     - SIMD acceleration
31*7f296bb3SBarry Smith   * -
32*7f296bb3SBarry Smith     - ``MATAIJPERM``
33*7f296bb3SBarry Smith     - ``MatCreateMPIAIJPERM()``
34*7f296bb3SBarry Smith     -
35*7f296bb3SBarry Smith     - Vectorized version
36*7f296bb3SBarry Smith   * -
37*7f296bb3SBarry Smith     - ``MATAIJCUSPARSE``
38*7f296bb3SBarry Smith     - ``MatCreateAIJCUSPARSE()``
39*7f296bb3SBarry Smith     - NVIDIA cuSPARSE library
40*7f296bb3SBarry Smith     - NVIDIA GPU acceleration
41*7f296bb3SBarry Smith   * -
42*7f296bb3SBarry Smith     - ``MATAIJKOKKOS``
43*7f296bb3SBarry Smith     - ``MatCreateAIJKokkos()``
44*7f296bb3SBarry Smith     - Kokkos
45*7f296bb3SBarry Smith     - GPU acceleration
46*7f296bb3SBarry Smith   * - Constant row length
47*7f296bb3SBarry Smith     - ``MATAIJCRL``
48*7f296bb3SBarry Smith     - ``MatCreateMPIAIJCRL()``
49*7f296bb3SBarry Smith     -
50*7f296bb3SBarry Smith     - Vectorized version
51*7f296bb3SBarry Smith   * - Multiple applications of single ``MATAIJ``
52*7f296bb3SBarry Smith     - ``MATMAIJ``
53*7f296bb3SBarry Smith     - ``MatCreateMAIJ()``
54*7f296bb3SBarry Smith     -
55*7f296bb3SBarry Smith     - Commonly used for identical interpolations on each component of a multi-component vector
56*7f296bb3SBarry Smith   * - Kronecker product of sparse matrix :math:`A`; :math:`I \otimes S + A \otimes T`
57*7f296bb3SBarry Smith     - ``MATKAIJ``
58*7f296bb3SBarry Smith     - ``MatCreateKAIJ()``
59*7f296bb3SBarry Smith     -
60*7f296bb3SBarry Smith     -
61*7f296bb3SBarry Smith   * - Sliced Ellpack
62*7f296bb3SBarry Smith     - ``MATSELL``
63*7f296bb3SBarry Smith     - ``MatCreateSELL()``
64*7f296bb3SBarry Smith     -
65*7f296bb3SBarry Smith     - SIMD and GPU acceleration
66*7f296bb3SBarry Smith   * - Block CSR
67*7f296bb3SBarry Smith     - ``MATBAIJ``
68*7f296bb3SBarry Smith     - ``MatCreateBAIJ()``
69*7f296bb3SBarry Smith     -
70*7f296bb3SBarry Smith     - Block compressed sparse row
71*7f296bb3SBarry Smith   * - Symmetric Block CSR
72*7f296bb3SBarry Smith     - ``MATSBAIJ``
73*7f296bb3SBarry Smith     - ``MatCreateSBAIJ()``
74*7f296bb3SBarry Smith     -
75*7f296bb3SBarry Smith     - Upper triangular compressed sparse row
76*7f296bb3SBarry Smith   * - Dense
77*7f296bb3SBarry Smith     - ``MATDENSE``
78*7f296bb3SBarry Smith     - ``MatCreateDense()``
79*7f296bb3SBarry Smith     -
80*7f296bb3SBarry Smith     - Row oriented storage
81*7f296bb3SBarry Smith   * -
82*7f296bb3SBarry Smith     - ``MATELEMENTAL``
83*7f296bb3SBarry Smith     - ``MatCreateElemental()``
84*7f296bb3SBarry Smith     - Elemental by Jack Poulson
85*7f296bb3SBarry Smith     - Block cyclic storage
86*7f296bb3SBarry Smith   * -
87*7f296bb3SBarry Smith     - ``MATSCALAPACK``
88*7f296bb3SBarry Smith     - ``MatCreateScaLAPACK()``
89*7f296bb3SBarry Smith     - ScaLAPACK
90*7f296bb3SBarry Smith     - Block cyclic storage
91*7f296bb3SBarry Smith   * -
92*7f296bb3SBarry Smith     - ``MATDENSECUDA``
93*7f296bb3SBarry Smith     - ``MatCreateDenseCUDA()``
94*7f296bb3SBarry Smith     -
95*7f296bb3SBarry Smith     - NVIDIA GPU Acceleration
96*7f296bb3SBarry Smith   * - ``MatMult()`` via finite differencing of a function
97*7f296bb3SBarry Smith     - ``MATMFFD``, see :any:`sec_nlmatrixfree`
98*7f296bb3SBarry Smith     - ``MatCreateMFFD()``, see also ``MatCreateSNESMF()``
99*7f296bb3SBarry Smith     -
100*7f296bb3SBarry Smith     - Provides only matrix-vector products
101*7f296bb3SBarry Smith   * - User-provided operations
102*7f296bb3SBarry Smith     - ``MATSHELL``, see also :any:`sec_matrixfree`
103*7f296bb3SBarry Smith     - ``MatCreateShell()``
104*7f296bb3SBarry Smith     -
105*7f296bb3SBarry Smith     -
106*7f296bb3SBarry Smith   * - Low-rank updates
107*7f296bb3SBarry Smith     - ``MATLMVM``, ``MATLMVMDFP``, ``MATLMVMBFGS``, ``MATLMVMSR1``, ...
108*7f296bb3SBarry Smith     - ``MatCreateLMVM()``
109*7f296bb3SBarry Smith     -
110*7f296bb3SBarry Smith     -  limited-memory BFGS style matrices
111*7f296bb3SBarry Smith   * -
112*7f296bb3SBarry Smith     - ``MATLRC``
113*7f296bb3SBarry Smith     - ``MatCreateLRC()``
114*7f296bb3SBarry Smith     -
115*7f296bb3SBarry Smith     - :math:`A + UCV^T`
116*7f296bb3SBarry Smith   * - FFT
117*7f296bb3SBarry Smith     - ``MATFFTW``
118*7f296bb3SBarry Smith     - ``MatCreateFFT()``
119*7f296bb3SBarry Smith     - FFTW
120*7f296bb3SBarry Smith     -
121*7f296bb3SBarry Smith   * -
122*7f296bb3SBarry Smith     - ``MATSEQCUFFT``
123*7f296bb3SBarry Smith     - ``MatCreateSeqCUFFT()``
124*7f296bb3SBarry Smith     - NVIDIA's CuFFT
125*7f296bb3SBarry Smith     - NVIDIA GPUs
126*7f296bb3SBarry Smith   * - Hierarchical
127*7f296bb3SBarry Smith     - ``MATHTOOL``
128*7f296bb3SBarry Smith     - ``MatCreateHtoolFromKernel()``
129*7f296bb3SBarry Smith     - Htool
130*7f296bb3SBarry Smith     -
131*7f296bb3SBarry Smith   * -
132*7f296bb3SBarry Smith     - ``MATH2OPUS``
133*7f296bb3SBarry Smith     - ``MatCreateH2OpusFromMat()``
134*7f296bb3SBarry Smith     - :math:`\mathcal H^2` matrices
135*7f296bb3SBarry Smith     -
136*7f296bb3SBarry Smith   * - Transpose, :math:`A^T`, virtual
137*7f296bb3SBarry Smith     - ``MATTRANSPOSEVIRTUAL``
138*7f296bb3SBarry Smith     - ``MatCreateTranspose()``
139*7f296bb3SBarry Smith     -
140*7f296bb3SBarry Smith     -
141*7f296bb3SBarry Smith   * - Hermitian Transpose, :math:`A^H`, virtual
142*7f296bb3SBarry Smith     - ``MATHERMITIANTRANSPOSEVIRTUAL``
143*7f296bb3SBarry Smith     - ``MatCreateHermitianTranspose()``
144*7f296bb3SBarry Smith     -
145*7f296bb3SBarry Smith     -
146*7f296bb3SBarry Smith   * - Normal, :math:`A^TA`, virtual
147*7f296bb3SBarry Smith     - ``MATNORMAL``
148*7f296bb3SBarry Smith     - ``MatCreateNormal()``
149*7f296bb3SBarry Smith     -
150*7f296bb3SBarry Smith     -
151*7f296bb3SBarry Smith   * - Hermitian Normal, :math:`A^HA`, virtual
152*7f296bb3SBarry Smith     - ``MATNORMALHERMITIAN``
153*7f296bb3SBarry Smith     - ``MatCreateNormalHermitian()``
154*7f296bb3SBarry Smith     -
155*7f296bb3SBarry Smith     -
156*7f296bb3SBarry Smith   * - Schur complement
157*7f296bb3SBarry Smith     - ``MATSCHURCOMPLEMENT``
158*7f296bb3SBarry Smith     - ``MatCreateSchurComplement()``, ``MatGetSchurComplement()``
159*7f296bb3SBarry Smith     -
160*7f296bb3SBarry Smith     -
161*7f296bb3SBarry Smith   * - Sub-matrix, virtual
162*7f296bb3SBarry Smith     - ``MATSUBMATRIX``
163*7f296bb3SBarry Smith     - ``MatCreateSubMatrixVirtual()``
164*7f296bb3SBarry Smith     -
165*7f296bb3SBarry Smith     - Provides ``MatMult()`` and similar operations
166*7f296bb3SBarry Smith   * -
167*7f296bb3SBarry Smith     - ``MATLOCALREF``
168*7f296bb3SBarry Smith     - ``MatCreateLocalRef()``
169*7f296bb3SBarry Smith     -
170*7f296bb3SBarry Smith     - For use in matrix assembly
171*7f296bb3SBarry Smith   * - Nested matrix
172*7f296bb3SBarry Smith     - ``MATNEST``
173*7f296bb3SBarry Smith     - ``MatCreateNest()``
174*7f296bb3SBarry Smith     -
175*7f296bb3SBarry Smith     -
176*7f296bb3SBarry Smith   * - Scatter operator
177*7f296bb3SBarry Smith     - ``MATSCATTER``
178*7f296bb3SBarry Smith     - ``MatCreateScatter()``
179*7f296bb3SBarry Smith     -
180*7f296bb3SBarry Smith     -
181*7f296bb3SBarry Smith   * - Centering operator
182*7f296bb3SBarry Smith     - ``MATCENTERING``
183*7f296bb3SBarry Smith     - ``MatCreateCentering()``
184*7f296bb3SBarry Smith     -
185*7f296bb3SBarry Smith     - :math:`I - \frac{1}{N}e e^T`, :math:`e=[1,\dots,1]^T`
186*7f296bb3SBarry Smith   * - Block matrix
187*7f296bb3SBarry Smith     - ``MATBLOCKMAT``
188*7f296bb3SBarry Smith     - ``MatCreateBlockMat()``
189*7f296bb3SBarry Smith     -
190*7f296bb3SBarry Smith     -
191*7f296bb3SBarry Smith
192*7f296bb3SBarry Smith```
193