Skip to main content
`Ctrl`+`K`

# MatCreateSNESMF

Creates a finite differencing based matrix-free matrix context for use with a `SNES` solver. This matrix can be used as the Jacobian argument for the routine `SNESSetJacobian()`. See `MatCreateMFFD()` for details on how the finite difference computation is done.

## Synopsis

    #include "petscsnes.h"
    #include "petscdm.h"
    PetscErrorCode MatCreateSNESMF(SNES snes, Mat *J)

Collective

## Input Parameters

- snes - the `SNES` context

## Output Parameter

- J - the matrix-free matrix which is of type `MATMFFD`

## Notes

You can call `SNESSetJacobian()` with `MatMFFDComputeJacobian()` if you are not using a different matrix to construct the preconditioner.

If you wish to provide a different function to do differencing on to compute the matrix-free operator than that provided to `SNESSetFunction()` then call `MatMFFDSetFunction()` with your function after this call.

The difference between this routine and `MatCreateMFFD()` is that this matrix automatically gets the current base vector from the `SNES` object and not from an explicit call to `MatMFFDSetBase()`.

If `MatMFFDSetBase()` is ever called on `jac` then this routine will NO longer get the x from the `SNES` object and `MatMFFDSetBase()` must from that point on be used to change the base vector `x`.

Using a different function for the differencing will not work if you are using non-linear left preconditioning.

This uses finite-differencing to apply the operator. To create a matrix-free `Mat` whose matrix-vector operator you provide with your own function use `MatCreateShell()`.

## Developer Note

This function should really be called `MatCreateSNESMFFD()` in correspondence to `MatCreateMFFD()` to clearly indicate that this is for using finite differences to apply the operator matrix-free.

## See Also

SNES: Nonlinear Solvers, `SNES`, `MATMFFD`, `MatDestroy()`, `MatMFFDSetFunction()`, `MatMFFDSetFunctionError()`, `MatMFFDDSSetUmin()`, `MatMFFDSetHHistory()`, `MatMFFDResetHHistory()`, `MatCreateMFFD()`, `MatCreateShell()`, `MatMFFDGetH()`, `MatMFFDRegister()`, `MatMFFDComputeJacobian()`, `MatSNESMFSetReuseBase()`, `MatSNESMFGetReuseBase()`

## Level

advanced

## Location

src/snes/mf/snesmfj.c

## Examples

src/ts/tutorials/ex15.c

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