Allows user to set a matrix operation for any matrix type
mat - the matrix
op - the name of the operation
f - the function that provides the operation
See the file include/petscmat.h for a complete list of matrix
operations, which all have the form MATOP_
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
In particular each function MUST return an error code of 0 on success and nonzero on failure.
This routine is distinct from
MatShellSetOperation() in that it can be called on any matrix type.