petsc-master 2020-08-09
Report Typos and Errors


Computes the Jacobian using finite differences and coloring to exploit matrix sparsity.


#include "petscsnes.h"  
#include "petscdm.h"    
PetscErrorCode  SNESComputeJacobianDefaultColor(SNES snes,Vec x1,Mat J,Mat B,void *ctx)
Collective on SNES

Input Parameters

snes - nonlinear solver object
x1 - location at which to evaluate Jacobian
ctx - MatFDColoring context or NULL

Output Parameters

J - Jacobian matrix (not altered in this routine)
B - newly computed Jacobian matrix to use with preconditioner (generally the same as J)

Options Database Key

-snes_fd_color_use_mat - use a matrix coloring from the explicit matrix nonzero pattern instead of from the DM providing the matrix
-snes_fd_color - Activates SNESComputeJacobianDefaultColor() in SNESSetFromOptions()
-mat_fd_coloring_err <err> - Sets <err> (square root of relative error in the function)
-mat_fd_coloring_umin <umin> - Sets umin, the minimum allowable u-value magnitude
-mat_fd_type - Either wp or ds (see MATMFFD_WP or MATMFFD_DS)
-snes_mf_operator - Use matrix free Section 1.5 Writing Application Codes with PETSc of Jacobian
-snes_mf - Use matrix free Jacobian with not explicit Jacobian represenation


If the coloring is not provided through the context, this will first try to get the coloring from the DM. If the DM type has no coloring routine, then it will try to get the coloring from the matrix. This requires that the matrix have nonzero entries precomputed.

SNES supports three approaches for computing (approximate) Jacobians: user provided via SNESSetJacobian(), matrix free via SNESSetUseMatrixFree, and computing explictly with finite differences and coloring using MatFDColoring. It is also possible to use automatic differentiation and the MatFDColoring object.

See Also

SNESSetJacobian(), SNESTestJacobian(), SNESComputeJacobianDefault(), SNESSetUseMatrixFree(),
MatFDColoringCreate(), MatFDColoringSetFunction()







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