Skip to main content
`Ctrl`+`K`

# MatSetOperation

Allows user to set a matrix operation for any matrix type

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatSetOperation(Mat mat, MatOperation op, void (*f)(void))

Logically Collective

## Input Parameters

- mat - the matrix

- op - the name of the operation

- f - the function that provides the operation

## Example Usage

      extern PetscErrorCode usermult(Mat, Vec, Vec);

      PetscCall(MatCreateXXX(comm, ..., &A));
      PetscCall(MatSetOperation(A, MATOP_MULT, (PetscVoidFn *)usermult));

## Notes

See the file `include/petscmat.h` for a complete list of matrix operations, which all have the form MATOP_<OPERATION>, where <OPERATION> is the name (in all capital letters) of the user interface routine (e.g., `MatMult()` -> `MATOP_MULT`).

All user-provided functions (except for `MATOP_DESTROY`) should have the same calling sequence as the usual matrix interface routines, since they are intended to be accessed via the usual matrix interface routines, e.g.,

      MatMult(Mat, Vec, Vec) -> usermult(Mat, Vec, Vec)

In particular each function MUST return `PETSC_SUCCESS` on success and nonzero on failure.

This routine is distinct from `MatShellSetOperation()` in that it can be called on any matrix type.

## See Also

Matrices, `Mat`, `MatGetOperation()`, `MatCreateShell()`, `MatShellSetContext()`, `MatShellSetOperation()`

## Level

developer

## Location

src/mat/interface/matrix.c

## Examples

src/ksp/ksp/tutorials/ex29.c
src/tao/bound/tutorials/jbearing2.c
src/ksp/ksp/tutorials/ex34.c

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