Skip to main content
`Ctrl`+`K`

# MatPreallocatorPreallocate

Preallocates the A matrix, using information from a `MATPREALLOCATOR` mat, optionally filling A with zeros

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatPreallocatorPreallocate(Mat mat, PetscBool fill, Mat A)

## Input Parameters

- mat - the `MATPREALLOCATOR` preallocator matrix

- fill - fill the matrix with zeros

- A - the matrix to be preallocated

## Notes

This `MatType` implementation provides a helper utility to define the correct preallocation data for a given nonzero structure. Use this object like a regular matrix, e.g. loop over the nonzero structure of the matrix and call `MatSetValues()` or `MatSetValuesBlocked()` to indicate the nonzero locations. The matrix entries provided to `MatSetValues()` will be ignored, it only uses the row / col indices provided to determine the information required to be passed to `MatXAIJSetPreallocation()`. Once you have looped over the nonzero structure, you must call `MatAssemblyBegin()`, `MatAssemblyEnd()` on mat.

After you have assembled the preallocator matrix (mat), call `MatPreallocatorPreallocate()` to define the preallocation information on the matrix (A). Setting the parameter fill = PETSC_TRUE will insert zeros into the matrix A. Internally `MatPreallocatorPreallocate()` will call `MatSetOption`(A, `MAT_NEW_NONZERO_ALLOCATION_ERR`, `PETSC_TRUE`);

This function may only be called once for a given `MATPREALLOCATOR` object. If multiple `Mat`s need to be preallocated, consider using `MatDuplicate()` after this function.

## See Also

`MATPREALLOCATOR`, `MatXAIJSetPreallocation()`

## Level

advanced

## Location

src/mat/impls/preallocator/matpreallocator.c

## Implementations

MatPreallocatorPreallocate_Preallocator() in src/mat/impls/preallocator/matpreallocator.c

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