Skip to main content
`Ctrl`+`K`

# MatConvert

Converts a matrix to another matrix, either of the same or different type.

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatConvert(Mat mat, MatType newtype, MatReuse reuse, Mat *M)

Collective

## Input Parameters

- mat - the matrix

- newtype - new matrix type. Use `MATSAME` to create a new matrix of the same type as the original matrix.

- reuse - denotes if the destination matrix is to be created or reused. Use `MAT_INPLACE_MATRIX` for inplace conversion (that is when you want the input `Mat` to be changed to contain the matrix in the new format), otherwise use `MAT_INITIAL_MATRIX` or `MAT_REUSE_MATRIX` (can only be used after the first call was made with `MAT_INITIAL_MATRIX`, causes the matrix space in M to be reused).

## Output Parameter

- M - pointer to place new matrix

## Notes

`MatConvert()` first creates a new matrix and then copies the data from the first matrix. A related routine is `MatCopy()`, which copies the matrix entries of one matrix to another already existing matrix context.

Cannot be used to convert a sequential matrix to parallel or parallel to sequential, the MPI communicator of the generated matrix is always the same as the communicator of the input matrix.

## See Also

Matrices, `Mat`, `MatCopy()`, `MatDuplicate()`, `MAT_INITIAL_MATRIX`, `MAT_REUSE_MATRIX`, `MAT_INPLACE_MATRIX`

## Level

intermediate

## Location

src/mat/interface/matrix.c

## Examples

src/ksp/ksp/tutorials/ex81.c
src/ksp/ksp/tutorials/ex27.c
src/ksp/ksp/tutorials/ex77.c
src/ksp/ksp/tutorials/ex72.c
src/ksp/ksp/tutorials/ex6f.F90
src/ksp/ksp/tutorials/ex34.c
src/ksp/ksp/tutorials/ex19.c
src/ksp/ksp/tutorials/ex71.c
src/ksp/ksp/tutorials/ex29.c
src/ksp/ksp/tutorials/ex79.c

## Implementations

MatConvert_Shell() in src/mat/impls/shell/shellcnv.c
MatConvert_HT() in src/mat/impls/transpose/htransm.c
MatConvert_Transpose() in src/mat/impls/transpose/transm.c

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