petsc-3.14.6 2021-03-30
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 (*g)(void))
Logically Collective on Mat

Input Parameters

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

Usage

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

Use MatSetOperation() to set an operation for any matrix type. For matrix product operations (i.e. MatMat, MatTransposeMat etc) use MatShellSetMatProductOperation()

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/tests/ex120f.F

See Also

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

Level

advanced

Location

src/mat/impls/shell/shell.c

Examples

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

Implementations

MatShellSetOperation_Shell(Mat mat,MatOperation op,void (*f) in src/mat/impls/shell/shell.c

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