MATSNESMF_WP

Implements an alternative approach for computing the differencing parameter h used with the finite difference based matrix-free Jacobian. This code implements the strategy of M. Pernice and H. Walker: h = error_rel * sqrt(1 + ||U||) / ||a||

Notes

1) || U || does not change between linear iterations so can be reused 2) In GMRES || a || == 1 and so does not need to ever be computed if you never have a restart. Unfortunately a RESTART computes a matrix vector product with ||a|| != 0 which breaks this

Reference: M. Pernice and H. F. Walker, "NITSOL: A Newton Iterative Solver for Nonlinear Systems", SIAM J. Sci. Stat. Comput.", 1998, vol 19, pp. 302--318.

Options Database Keys

-snes_mf_compute_norma - compute the norm of a everytime see MatSNESMFWPSetComputeNormA()
-snes_mf_compute_normu - Compute the norm of u everytime see MatSNESMFWPSetComputeNormU()

Notes: Requires no global collectives when used with GMRES

Formula used

F'(u)*a = [F(u+h*a) - F(u)]/h where h = error_rel*u'a/||a||^2 if |u'a| > umin*||a||_{1} = error_rel*umin*sign(u'a)*||a||_{1}/||a||^2 otherwise where error_rel = square root of relative error in function evaluation umin = minimum iterate parameter

See Also

MATMFFD, MatCreateMF(), MatCreateSNESMF(), MATSNESMF_DEFAULT

Level:intermediate
Location:
src/snes/mf/wp.c
Index of all SNESMF routines
Table of Contents for all manual pages
Index of all manual pages