:orphan:
# 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
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/mat/impls/preallocator/matpreallocator.c)
[Index of all Mat routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)