You might consider trying some of the non-Newton based nonlinear solvers now available in the development version of PETSc http://www.mcs.anl.gov/petsc/developers/index.html Here is a list of them see their manual pages for more details
Title: PETSc: Summary of Nonlinear Solvers Available from PETSc
PETSc
Summary of Nonlinear Solvers Available from PETSc
Summary of Nonlinear Solvers Available from PETSc
See the paper Composing Scalable Nonlinear Algebraic Solvers or the PETSc users manual for details on the algorithms
Requests and contributions welcome
| Algorithm | Name of solver | |||||
|---|---|---|---|---|---|---|
|
* Does not support a line search |
||||||
| Newton's method | newtonls | Use -snes_mf for matrix-free linear solvers | ||||
| Newton's method with trust region* | newtontr | |||||
| Single linearization* | ksponly | Essentially one step of Newtwon without a line search | ||||
| Quasi-Newton method (BFGS) | qn | |||||
| Nonlinear CG | ncg | Requires nearly symmetric Jacobian for good convergence | ||||
| Nonlinear GMRES | ngmres | |||||
| Anderson mixing | anderson | |||||
| Nonlinear Richardson | nrichardson | |||||
| Nonlinear Gauss-Siedel* | ngs | |||||
| Full Approximation Scheme (nonlinear multigrid) | fas | |||||
| Nonlinear additive Schwarz method* | nasm | |||||
| Nonlinear additive Schwarz preconditioned inexact Newton (ASPIN) methods | aspin | |||||
| Composite; combine several nonlinear solvers | composite | |||||
| Preconditioned nonlinear solver/td> | SNESGetPC() | Can be combined to accelerate many of the solvers | ||||
On May 31, 2014, at 10:02 AM, Jonas Mairhofer <[email protected]> wrote: > Hi all, > > I am using PETSc to solve a system of nonlinear equations arising from > Density Functional Theory. Depending on the actual problem setup the > residulas of the matrix-free linear solver (GMRES) > stagnate and the nonlinear system converges only slowly. > Besides preconditioning my second idea to improve the performance of the > linear solver was to use a higher order approximation of the Jacobi-vector > product. Therefore, I am trying to write a user defined subroutine that > calculates the approximation of the matrix-free Jacobi-Vector product, i.e. I > would like to have a routine which can replace the default 1st order > approximation > > J(x)*v = (F(x+eps*v) - F(x) ) / eps > > for instance by a 2nd order approximation such as > > J(x)*v = (F(x+eps*v) - F(x-eps*v) ) / 2eps > > So assuming that I have a subroutine which claculates the approximation of > J(x)*v, how do I get PETSc to use this result in the SNES solver? > > Thank you very much, > Jonas
