dune-fem 2.12-git
Loading...
Searching...
No Matches
Dune::Fem::EisenstatWalkerStrategy Class Reference

Adaptive tolerance selection for linear solver. More...

#include <dune/fem/solver/newtoninverseoperator.hh>

Public Member Functions

 EisenstatWalkerStrategy (const double newtonTolerance, const double etaMax=0.99, const double gamma=0.1)
 
double nextLinearTolerance (const double currentResidual) const
 
void setTolerance (const double newtonTolerance)
 
void setEtaMax (const double etaMax)
 
void setGamma (const double gamma)
 
double etaMax () const
 
double gamma () const
 

Protected Attributes

double etaMax_ = 0.99
 
double gamma_ = 0.1
 
double previousEta_ = -1.0
 
double previousResidual_ = -1.0
 
double newtonTolerance_
 

Detailed Description

Adaptive tolerance selection for linear solver.

Note
Prevents over-solving linear systems far away from solution. Source: "Globally Convergent Inexact Newton Methods", Stanley C. Eisenstat and Homer F. Walker, https://doi.org/10.1137/0804022.
etaMax and gamma are configurable via the constructor, via setEtaMax()/setGamma() setters, or via the parameter system: fem.solver.nonlinear.eisenstatwalker.etamax (default: 0.99) fem.solver.nonlinear.eisenstatwalker.gamma (default: 0.1) For degenerate problems consider etaMax~0.1-0.3, gamma~0.5-0.9.

Constructor & Destructor Documentation

◆ EisenstatWalkerStrategy()

Dune::Fem::EisenstatWalkerStrategy::EisenstatWalkerStrategy ( const double  newtonTolerance,
const double  etaMax = 0.99,
const double  gamma = 0.1 
)
inline

constructor

Parameters
[in]newtonToleranceabsolute tolerance of the Newton method
[in]etaMaxmaximum forcing term (default: 0.99)
[in]gammasafeguard parameter (default: 0.1)

Member Function Documentation

◆ etaMax()

double Dune::Fem::EisenstatWalkerStrategy::etaMax ( ) const
inline

◆ gamma()

double Dune::Fem::EisenstatWalkerStrategy::gamma ( ) const
inline

◆ nextLinearTolerance()

double Dune::Fem::EisenstatWalkerStrategy::nextLinearTolerance ( const double  currentResidual) const
inline

◆ setEtaMax()

void Dune::Fem::EisenstatWalkerStrategy::setEtaMax ( const double  etaMax)
inline

Set the maximum allowed forcing term. Reduce from 0.99 towards e.g. 0.1 to make EW less aggressive.

◆ setGamma()

void Dune::Fem::EisenstatWalkerStrategy::setGamma ( const double  gamma)
inline

Set the safeguard / superlinear-convergence decay parameter. Increase from 0.1 towards e.g. 0.9 for more conservative behaviour.

◆ setTolerance()

void Dune::Fem::EisenstatWalkerStrategy::setTolerance ( const double  newtonTolerance)
inline

Set the Newton (nonlinear) tolerance used in the lower bound of eta.

Member Data Documentation

◆ etaMax_

double Dune::Fem::EisenstatWalkerStrategy::etaMax_ = 0.99
protected

◆ gamma_

double Dune::Fem::EisenstatWalkerStrategy::gamma_ = 0.1
protected

◆ newtonTolerance_

double Dune::Fem::EisenstatWalkerStrategy::newtonTolerance_
mutableprotected

◆ previousEta_

double Dune::Fem::EisenstatWalkerStrategy::previousEta_ = -1.0
mutableprotected

◆ previousResidual_

double Dune::Fem::EisenstatWalkerStrategy::previousResidual_ = -1.0
mutableprotected

The documentation for this class was generated from the following file: