Skip to main content
`Ctrl`+`K`

# MatGetOwnershipRanges

For matrices that own values by row, excludes `MATELEMENTAL` and `MATSCALAPACK`, returns the range of matrix rows owned by each process.

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatGetOwnershipRanges(Mat mat, const PetscInt *ranges[])

Not Collective, unless matrix has not been allocated

## Input Parameter

- mat - the matrix

## Output Parameter

- ranges - start of each processors portion plus one more than the total length at the end, of length `size` + 1 where `size` is the number of MPI processes used by `mat`

## Notes

If the `Mat` was obtained from a `DM` with `DMCreateMatrix()`, then the range values are determined by the specific `DM`.

If the `Mat` was created directly the range values are determined by the local size passed to `MatSetSizes()` or `MatCreateAIJ()`. If `PETSC_DECIDE` was passed as the local size, then the vector uses default values for the range using `PetscSplitOwnership()`.

For certain `DM`, such as `DMDA`, it is better to use `DM` specific routines, such as `DMDAGetGhostCorners()`, to determine the local values in the matrix.

For all matrices it returns the ranges of matrix rows associated with rows of a vector that would contain the result of a matrix vector product with this matrix. See Matrix Layouts for details on matrix layouts.

## See Also

Matrices, `Mat`, `MatGetOwnershipRange()`, `MatGetOwnershipRangeColumn()`, `MatGetOwnershipRangesColumn()`, `PetscLayout`, `PetscSplitOwnership()`, `PetscSplitOwnershipBlock()`, `MatSetSizes()`, `MatCreateAIJ()`, `DMDAGetGhostCorners()`, `DM`

## Level

beginner

## Location

src/mat/interface/matrix.c

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