# 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
 `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.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex63.c.html">src/snes/tutorials/ex63.c.html</A><BR>
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/snes/tutorials/ex77.c.html">src/snes/tutorials/ex77.c.html</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](/docs/manualpages/index.md)  
[Index of all manual pages](/docs/manualpages/singleindex.md)  
