petsc-3.10.5 2019-03-28
Report Typos and Errors

MatShellSetOperation

Allows user to set a matrix operation for a shell matrix.

Synopsis

#include "petscmat.h" 
PetscErrorCode MatShellSetOperation(Mat mat,MatOperation op,void (*f)(void))
Logically Collective on Mat

Input Parameters

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

Usage

     extern PetscErrorCode usermult(Mat,Vec,Vec);
     ierr = MatCreateShell(comm,m,n,M,N,ctx,&A);
     ierr = MatShellSetOperation(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.

Within each user-defined routine, the user should call MatShellGetContext() to obtain the user-defined context that was set by MatCreateShell().

Fortran Notes

For MatCreateVecs() the user code should check if the input left or right matrix is -1 and in that case not generate a matrix. See src/mat/examples/tests/ex120f.F

Use MatSetOperation() to set an operation for any matrix type

Keywords

matrix, shell, set, operation

See Also

MatCreateShell(), MatShellGetContext(), MatShellGetOperation(), MatShellSetContext(), MatSetOperation(), MatShellSetManageScalingShifts()

Level

advanced

Location

src/mat/impls/shell/shell.c

Examples

src/ksp/ksp/examples/tutorials/ex14f.F90.html
src/snes/examples/tutorials/ex12.c.html
src/ts/examples/tutorials/ex50.c.html
src/ts/examples/tutorials/ex22f_mf.F90.html
src/tao/unconstrained/examples/tutorials/eptorsion1.c.html
src/tao/bound/examples/tutorials/plate2.c.html
src/tao/pde_constrained/examples/tutorials/elliptic.c.html
src/tao/pde_constrained/examples/tutorials/parabolic.c.html
src/tao/pde_constrained/examples/tutorials/hyperbolic.c.html

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