Skip to main content
`Ctrl`+`K`

# MatRegister

Adds a new matrix type implementation that is usable as a `Mat` in PETSc

## Synopsis

    #include "petscmat.h"
    PetscErrorCode MatRegister(const char sname[], PetscErrorCode (*function)(Mat))

Not Collective, No Fortran Support

## Input Parameters

- sname - name of a new user-defined matrix type

- function - routine to create method context

## Note

`MatRegister()` may be called multiple times to add several user-defined solvers.

A simpler alternative to using `MatRegister()` for an application specific matrix format is to use `MatCreateShell()`, which generates a `Mat` of `MatType` `MATSHELL`. One can then use `MatShellSetContext()` and `MatShellSetOperation()` to provide the data structures and routines customized for their matrix format.

## Example Usage

       MatRegister("my_mat", MyMatCreate);

Then, your solver can be chosen with the procedural interface via `MatSetType(Mat, "my_mat")` or at runtime via the option `-mat_type my_mat`

## See Also

Matrices, `Mat`, `MatType`, `MatSetType()`, `MatRegisterAll()`

## Level

advanced

## Location

src/mat/interface/matreg.c

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