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, (PetscVoidFunction)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 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/ksp/ksp/tutorials/ex34.c
src/tao/bound/tutorials/jbearing2.c


Edit on GitLab

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