.. _doc_matrix: ========================================== Summary of Matrix Types Available In PETSc ========================================== .. list-table:: :widths: auto :align: center :header-rows: 1 * - Format - Matrix Types - Constructor - External Packages - Details * - CSR - ``MATAIJ`` - ``MatCreateAIJ()`` - - Compressed sparse row * - - ``MATAIJMKL`` - ``MatCreateMPIAIJMKL()`` - Intel oneAPI MKL - OpenMP support * - - ``MATAIJSELL`` - ``MatCreateMPIAIJSELL()`` - - SIMD acceleration * - - ``MATAIJPERM`` - ``MatCreateMPIAIJPERM()`` - - Vectorized version * - - ``MATAIJCUSPARSE`` - ``MatCreateAIJCUSPARSE()`` - NVIDIA cuSPARSE library - NVIDIA GPU acceleration * - - ``MATAIJKOKKOS`` - ``MatCreateAIJKokkos()`` - Kokkos - GPU acceleration * - Constant row length - ``MATAIJCRL`` - ``MatCreateMPIAIJCRL()`` - - Vectorized version * - Multiple applications of single ``MATAIJ`` - ``MATMAIJ`` - ``MatCreateMAIJ()`` - - Commonly used for identical interpolations on each component of a multi-component vector * - Kronecker product of sparse matrix :math:`A`; :math:`I \otimes S + A \otimes T` - ``MATKAIJ`` - ``MatCreateKAIJ()`` - - * - Sliced Ellpack - ``MATSELL`` - ``MatCreateSELL()`` - - SIMD and GPU acceleration * - Block CSR - ``MATBAIJ`` - ``MatCreateBAIJ()`` - - Block compressed sparse row * - Symmetric Block CSR - ``MATSBAIJ`` - ``MatCreateSBAIJ()`` - - Upper triangular compressed sparse row * - Dense - ``MATDENSE`` - ``MatCreateDense()`` - - Row oriented storage * - - ``MATELEMENTAL`` - ``MatCreateElemental()`` - Elemental by Jack Poulson - Block cyclic storage * - - ``MATSCALAPACK`` - ``MatCreateScaLAPACK()`` - ScaLAPACK - Block cyclic storage * - - ``MATDENSECUDA`` - ``MatCreateDenseCUDA()`` - - NVIDIA GPU Acceleration * - ``MatMult()`` via finite differencing - ``MATMFFD`` - ``MatCreateMFFD()`` - - Provides only matrix-vector products * - User-provided operations - ``MATSHELL`` - ``MatCreateShell()`` - - * - Low-rank updates - ``MATLMVM``, ``MATLMVMDFP``, ``MATLMVMBFGS``, ``MATLMVMSR1``, ... - ``MatCreateLMVM()`` - - limited-memory BFGS style matrices * - - ``MATLRC`` - ``MatCreateLRC()`` - - :math:`A + UCV^T` * - FFT - ``MATFFTW`` - ``MatCreateFFT()`` - FFTW - * - - ``MATSEQCUFFT`` - ``MatCreateSeqCUFFT()`` - NVIDIA's CuFFT - NVIDIA GPUs * - Hierarchical - ``MATHTOOL`` - ``MatCreateHtoolFromKernel()`` - Htool - * - - ``MATH2OPUS`` - ``MatCreateH2OpusFromMat()`` - :math:`\mathcal H^2` matrices - * - Transpose, :math:`A^T`, virtual - ``MATTRANSPOSEVIRTUAL`` - ``MatCreateTranspose()`` - - * - Hermitian Transpose, :math:`A^H`, virtual - ``MATHERMITIANTRANSPOSEVIRTUAL`` - ``MatCreateHermitianTranspose()`` - - * - Normal, :math:`A^TA`, virtual - ``MATNORMAL`` - ``MatCreateNormal()`` - - * - Hermitian Normal, :math:`A^HA`, virtual - ``MATNORMALHERMITIAN`` - ``MatCreateNormalHermitian()`` - - * - Schur complement - ``MATSCHURCOMPLEMENT`` - ``MatCreateSchurComplement()``, ``MatGetSchurComplement()`` - - * - Sub-matrix, virtual - ``MATSUBMATRIX`` - ``MatCreateSubMatrixVirtual()`` - - Provides ``MatMult()`` and similar operations * - - ``MATLOCALREF`` - ``MatCreateLocalRef()`` - - For use in matrix assembly * - Nested matrix - ``MATNEST`` - ``MatCreateNest()`` - - * - Scatter operator - ``MATSCATTER`` - ``MatCreateScatter()`` - - * - Centering operator - ``MATCENTERING`` - ``MatCreateCentering()`` - - :math:`I - \frac{1}{N}e e^T`, :math:`e=[1,\dots,1]^T` * - Block matrix - ``MATBLOCKMAT`` - ``MatCreateBlockMat()`` - -