MatShellSetOperation#
Allows user to set a matrix operation for a MATSHELL
shell matrix.
Synopsis#
#include "petscmat.h"
PetscErrorCode MatShellSetOperation(Mat mat, MatOperation op, void (*g)(void))
Logically Collective
Input Parameters#
mat - the
MATSHELL
shell matrixop - the name of the operation
g - the function that provides the operation.
Example 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_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.,
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. MatMatXXX()
, MatTransposeMatXXX()
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#
Matrices, Mat
, MATSHELL
, MatCreateShell()
, MatShellGetContext()
, MatShellGetOperation()
, MatShellSetContext()
, MatSetOperation()
, MatShellSetManageScalingShifts()
, MatShellSetMatProductOperation()
Level#
advanced
Location#
Examples#
src/ts/tutorials/ex22f_mf.F90
src/ts/tutorials/ex20opt_ic.c
src/tao/pde_constrained/tutorials/parabolic.c
src/tao/bound/tutorials/plate2.c
src/tao/unconstrained/tutorials/eptorsion1.c
src/ts/tutorials/ex50.c
src/tao/pde_constrained/tutorials/elliptic.c
src/tao/pde_constrained/tutorials/hyperbolic.c
src/ksp/ksp/tutorials/ex14f.F90
src/tao/unconstrained/tutorials/eptorsion3.c
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