petsc-3.13.6 2020-09-29
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);
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/tests/ex120f.F
Use MatSetOperation() to set an operation for any matrix type
See Also
MatCreateShell(), MatShellGetContext(), MatShellGetOperation(), MatShellSetContext(), MatSetOperation(), MatShellSetManageScalingShifts()
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