:orphan:
# SNESSetJacobian
Sets the function to compute Jacobian as well as the location to store the matrix.
## Synopsis
```
#include "petscsnes.h"
PetscErrorCode SNESSetJacobian(SNES snes, Mat Amat, Mat Pmat, PetscErrorCode (*J)(SNES, Vec, Mat, Mat, void *), void *ctx)
```
Logically Collective
## Input Parameters
- ***snes -*** the `SNES` context
- ***Amat -*** the matrix that defines the (approximate) Jacobian
- ***Pmat -*** the matrix to be used in constructing the preconditioner, usually the same as `Amat`.
- ***J -*** Jacobian evaluation routine (if `NULL` then `SNES` retains any previously set value), see `SNESJacobianFunction` for details
- ***ctx -*** [optional] user-defined context for private data for the
Jacobian evaluation routine (may be `NULL`) (if `NULL` then `SNES` retains any previously set value)
## Notes
If the `Amat` matrix and `Pmat` matrix are different you must call `MatAssemblyBegin()`/`MatAssemblyEnd()` on
each matrix.
If you know the operator `Amat` has a null space you can use `MatSetNullSpace()` and `MatSetTransposeNullSpace()` to supply the null
space to `Amat` and the `KSP` solvers will automatically use that null space as needed during the solution process.
If using `SNESComputeJacobianDefaultColor()` to assemble a Jacobian, the `ctx` argument
must be a `MatFDColoring`.
Other defect-correction schemes can be used by computing a different matrix in place of the Jacobian. One common
example is to use the "Picard linearization" which only differentiates through the highest order parts of each term using `SNESSetPicard()`
## See Also
[](ch_snes), `SNES`, `KSPSetOperators()`, `SNESSetFunction()`, `MatMFFDComputeJacobian()`, `SNESComputeJacobianDefaultColor()`, `MatStructure`,
`SNESSetPicard()`, `SNESJacobianFunction`
## Level
beginner
## Location
src/snes/interface/snes.c
## Examples
src/snes/tutorials/ex1.c
src/snes/tutorials/ex12.c
src/snes/tutorials/ex14.c
src/snes/tutorials/ex15.c
src/snes/tutorials/ex18.c
src/snes/tutorials/ex1f.F90
src/snes/tutorials/ex2.c
src/snes/tutorials/ex22.c
src/snes/tutorials/ex28.c
src/snes/tutorials/ex3.c
src/snes/tutorials/ex35.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/snes/interface/snes.c)
[Index of all SNES routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)