Skip to main content
`Ctrl`+`K`

# MatMPIAIJSetPreallocationCSR

Allocates memory for a sparse parallel matrix in `MATAIJ` format (the default parallel PETSc format).

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatMPIAIJSetPreallocationCSR(Mat B, const PetscInt i[], const PetscInt j[], const PetscScalar v[])

Collective

## Input Parameters

- B - the matrix

- i - the indices into `j` for the start of each local row (indices start with zero)

- j - the column indices for each local row (indices start with zero)

- v - optional values in the matrix

## Notes

The `i`, `j`, and `v` arrays ARE copied by this routine into the internal format used by PETSc; thus you CANNOT change the matrix entries by changing the values of `v` after you have called this routine. Use `MatCreateMPIAIJWithSplitArrays()` to avoid needing to copy the arrays.

The `i` and `j` indices are 0 based, and `i` indices are indices corresponding to the local `j` array.

A convenience routine for this functionality is `MatCreateMPIAIJWithArrays()`.

You can update the matrix with new numerical values using `MatUpdateMPIAIJWithArrays()` after this call if the column indices in `j` are sorted.

If you do not use `MatUpdateMPIAIJWithArrays()`, the column indices in `j` do not need to be sorted. If you will use `MatUpdateMPIAIJWithArrays()`, the column indices must be sorted.

The format which is used for the sparse matrix input, is equivalent to a row-major ordering.. i.e for the following matrix, the input data expected is as shown

            1 0 0
            2 0 3     P0
           -------
            4 5 6     P1

         Process0 [P0] rows_owned=[0,1]
            i =  {0,1,3}  [size = nrow+1  = 2+1]
            j =  {0,0,2}  [size = 3]
            v =  {1,2,3}  [size = 3]

         Process1 [P1] rows_owned=[2]
            i =  {0,3}    [size = nrow+1  = 1+1]
            j =  {0,1,2}  [size = 3]
            v =  {4,5,6}  [size = 3]

## See Also

Matrices, `Mat`, `MATMPIAIJ`, `MatCreate()`, `MatCreateSeqAIJ()`, `MatSetValues()`, `MatMPIAIJSetPreallocation()`, `MatCreateAIJ()`, `MatCreateSeqAIJWithArrays()`, `MatCreateMPIAIJWithSplitArrays()`, `MatCreateMPIAIJWithArrays()`, `MatSetPreallocationCOO()`, `MatSetValuesCOO()`

## Level

developer

## Location

src/mat/impls/aij/mpi/mpiaij.c

## Implementations

MatMPIAIJSetPreallocationCSR_MPIAIJ() in src/mat/impls/aij/mpi/mpiaij.c

Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages