# MatCreateSNESMF#

Creates a 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 using matrix and not a different preconditioner matrix

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.

MATMFFD, MatDestroy(), MatMFFDSetFunction(), MatMFFDSetFunctionError(), MatMFFDDSSetUmin() MatMFFDSetHHistory(), MatMFFDResetHHistory(), MatCreateMFFD(), MatMFFDGetH(), MatMFFDRegister(), MatMFFDComputeJacobian(), MatSNESMFSetReuseBase(), MatSNESMFGetReuseBase()`