:orphan:
# SNESComputeJacobian
Computes the Jacobian matrix that has been set with `SNESSetJacobian()`. 
## Synopsis
```
#include "petscsnes.h"  
PetscErrorCode SNESComputeJacobian(SNES snes, Vec X, Mat A, Mat B)
```
Collective


## Input Parameters

- ***snes -*** the `SNES` context
- ***x -*** input vector



## Output Parameters

- ***A -*** Jacobian matrix
- ***B -*** optional matrix for building the preconditioner



## Options Database Keys

- ***-snes_lag_preconditioner <lag> -*** how often to rebuild preconditioner
- ***-snes_lag_jacobian <lag> -*** how often to rebuild Jacobian
- ***-snes_test_jacobian <optional threshold> -*** compare the user provided Jacobian with one compute via finite differences to check for errors.  If a threshold is given, display only those entries whose difference is greater than the threshold.
- ***-snes_test_jacobian_view -*** display the user provided Jacobian, the finite difference Jacobian and the difference between them to help users detect the location of errors in the user provided Jacobian
- ***-snes_compare_explicit -*** Compare the computed Jacobian to the finite difference Jacobian and output the differences
- ***-snes_compare_explicit_draw  -*** Compare the computed Jacobian to the finite difference Jacobian and draw the result
- ***-snes_compare_explicit_contour  -*** Compare the computed Jacobian to the finite difference Jacobian and draw a contour plot with the result
- ***-snes_compare_operator  -*** Make the comparison options above use the operator instead of the preconditioning matrix
- ***-snes_compare_coloring -*** Compute the finite difference Jacobian using coloring and display norms of difference
- ***-snes_compare_coloring_display -*** Compute the finite difference Jacobian using coloring and display verbose differences
- ***-snes_compare_coloring_threshold -*** Display only those matrix entries that differ by more than a given threshold
- ***-snes_compare_coloring_threshold_atol -*** Absolute tolerance for difference in matrix entries to be displayed by `-snes_compare_coloring_threshold`
- ***-snes_compare_coloring_threshold_rtol -*** Relative tolerance for difference in matrix entries to be displayed by `-snes_compare_coloring_threshold`
- ***-snes_compare_coloring_draw -*** Compute the finite difference Jacobian using coloring and draw differences
- ***-snes_compare_coloring_draw_contour -*** Compute the finite difference Jacobian using coloring and show contours of matrices and differences





## Note
Most users should not need to explicitly call this routine, as it
is used internally within the nonlinear solvers.


## Developer Note
This has duplicative ways of checking the accuracy of the user provided Jacobian (see the options above). This is for historical reasons, the routine `SNESTestJacobian()` use to used
for with the `SNESType` of test that has been removed.


## See Also
 [](ch_snes), `SNESSetJacobian()`, `KSPSetOperators()`, `MatStructure`, `SNESSetLagPreconditioner()`, `SNESSetLagJacobian()`

## Level
developer

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/interface/snes.c.html#SNESComputeJacobian">src/snes/interface/snes.c</A>

## Examples
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex12.c.html">src/snes/tutorials/ex12.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex56.c.html">src/snes/tutorials/ex56.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex63.c.html">src/snes/tutorials/ex63.c</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex77.c.html">src/snes/tutorials/ex77.c</A><BR>


---
[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)  
