:orphan:
# MatSetSizes
Sets the local and global sizes, and checks to determine compatibility
## Synopsis
```
#include "petscmat.h"
PetscErrorCode MatSetSizes(Mat A, PetscInt m, PetscInt n, PetscInt M, PetscInt N)
```
Collective
## Input Parameters
- ***A -*** the matrix
- ***m -*** number of local rows (or `PETSC_DECIDE`)
- ***n -*** number of local columns (or `PETSC_DECIDE`)
- ***M -*** number of global rows (or `PETSC_DETERMINE`)
- ***N -*** number of global columns (or `PETSC_DETERMINE`)
## Notes
`m` (`n`) and `M` (`N`) cannot be both `PETSC_DECIDE`
If one processor calls this with `M` (`N`) of `PETSC_DECIDE` then all processors must, otherwise the program will hang.
If `PETSC_DECIDE` is not used for the arguments 'm' and 'n', then the
user must ensure that they are chosen to be compatible with the
vectors. To do this, one first considers the matrix-vector product
'y = A x'. The `m` that is used in the above routine must match the
local size used in the vector creation routine `VecCreateMPI()` for 'y'.
Likewise, the `n` used must match that used as the local size in
`VecCreateMPI()` for 'x'.
You cannot change the sizes once they have been set.
The sizes must be set before `MatSetUp()` or MatXXXSetPreallocation() is called.
## See Also
[](ch_matrices), `Mat`, `MatGetSize()`, `PetscSplitOwnership()`
## Level
beginner
## Location
src/mat/utils/gcreate.c
## Examples
src/ksp/ksp/tutorials/bench_kspsolve.c
src/ksp/ksp/tutorials/ex1.c
src/ksp/ksp/tutorials/ex100.c
src/ksp/ksp/tutorials/ex100f.F90
src/ksp/ksp/tutorials/ex11.c
src/ksp/ksp/tutorials/ex11f.F90
src/ksp/ksp/tutorials/ex12.c
src/ksp/ksp/tutorials/ex15.c
src/ksp/ksp/tutorials/ex15f.F90
src/ksp/ksp/tutorials/ex16.c
src/ksp/ksp/tutorials/ex18.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/mat/utils/gcreate.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)