PETSc version 3.17.4
Fix/Edit manual page

# 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 on Mat

### Input Parameters

| mat | - the matrix
| op | - the name of the operation
| f | - the function that provides the operation

### Usage

         extern PetscErrorCode usermult(Mat,Vec,Vec);

         ierr = MatCreateXXX(comm,...&A);

         ierr = MatSetOperation(A,MATOP_MULT,(void(*)(void))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 an error code of 0 on success and nonzero on failure.

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

### See Also

MatGetOperation(), MatCreateShell(), MatShellSetContext(), MatShellSetOperation()

### Level

developer

### Location

src/mat/interface/matrix.c

### Examples

src/ksp/ksp/tutorials/ex29.c.html
src/ksp/ksp/tutorials/ex34.c.html
src/tao/bound/tutorials/jbearing2.c.html
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages