# 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

## Usage#

extern PetscErrorCode usermult(Mat,Vec,Vec);

PetscCall(MatCreateXXX(comm,...&A);

PetscCall(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_, where 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.

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

developer

## Location#

src/mat/interface/matrix.c

Edit on GitLab