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

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

Reply via email to