NOX  Development
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Member Functions | List of all members
NOX::StatusTest::NormWRMS Class Reference

Convergence test based on the weighted root mean square norm fo the solution update between iterations. More...

#include <NOX_StatusTest_NormWRMS.H>

Inheritance diagram for NOX::StatusTest::NormWRMS:
Inheritance graph
[legend]
Collaboration diagram for NOX::StatusTest::NormWRMS:
Collaboration graph
[legend]

Public Member Functions

 NormWRMS (double rtol, double atol, double BDFMultiplier=1.0, double tolerance=1.0, double alpha=1.0, double beta=0.5, bool disable_implicit_weighting=true)
 Constructor where ATOL is a scalar.
 
 NormWRMS (double rtol, const Teuchos::RCP< const NOX::Abstract::Vector > &atol, double BDFMultiplier=1.0, double tolerance=1.0, double alpha=1.0, double beta=0.5, bool disable_implicit_weighting=true)
 Constructor where ATOL is a vector.
 
virtual ~NormWRMS ()
 Destructor.
 
virtual StatusType checkStatus (const NOX::Solver::Generic &problem, NOX::StatusTest::CheckType checkType)
 Test the stopping criterion More...
 
virtual StatusType getStatus () const
 Return the result of the most recent checkStatus call.
 
virtual std::ostream & print (std::ostream &stream, int indent=0) const
 Output formatted description of stopping test to output stream.
 
virtual double getNormWRMS () const
 Returns the value of WRMS norm.
 
virtual double getTolerance () const
 Returns the requested tolerance set in the constructor.
 
virtual double getRTOL () const
 Returns the realative tolerance set in the constructor.
 
virtual double getATOL () const
 Returns the absolute tolerance set in the constructor. If ATOL is a vector, this will return a value of -1.0.
 
virtual double getBDFMultiplier () const
 Returns the value of the BDFMultiplier set in the constructor.
 
virtual double getAlpha () const
 Returns the value of 'alpha' set in the constructor.
 
virtual double getBeta () const
 Returns the value of 'beta' set in the constructor.
 
virtual bool getDisableImplicitWeighting () const
 Returns true if implicit weighting is disabled during norm computation.
 
- Public Member Functions inherited from NOX::StatusTest::Generic
 Generic ()
 Constructor.
 
virtual ~Generic ()
 Destructor.
 

Detailed Description

Convergence test based on the weighted root mean square norm fo the solution update between iterations.

` If the number of iterations is zero, then the status is set to NOX::StatusTest::Unconverged and returned. (Also, #value is set to 1.0e+12.)

Otherwise, returns NOX::StatusTest::Converged if the three criteria listed below are satisfied. Note that use of Criteria #2 and #3 depend on the options set in the solver.

  1. Weigthed root mean square norm is less than a specified tolerance:

    \[ ||\delta x^k||_{wrms} < \mbox{tolerance} \]

    where

    \[ ||\delta x^k||_{wrms} \equiv C \sqrt{ \frac{1}{N} \sum_{i=1}^N \left( \frac {(x^k_i-x^{k-1}_i)}{RTOL |x^{k-1}_i| + ATOL_i} \right) ^2 } \]

    Here:

    • $ x_i^k$ denotes component $ i$ of nonlinear iterate $ k$.
    • $ N$ denotes the number of unknowns
    • $ RTOL$ denotes the relative error tolerance, specified via rtol in the constructor
    • $ ATOL$ denotes the absolution error tolerance, specified via atol in the constructor. This can be a vector or a scalar.
    • $ C$ denotes a weight, specified via the parameter BDFMultiplier in the constructor.

  2. If a line search based solver is used, the line search step size, $ \lambda $, must be greater than a specified step size value, $ \alpha $:

    \[ \lambda > \alpha \]

    The motivation for this test is to avoid detecting stagnation when in fact the true problem is that the step size is just small.

    The value of $\alpha$ is set in the constructor via the argument alpha. Setting $\alpha$ to zero effectively eliminates this part of the test.

  3. The achieved linear solver tolerance, $ \eta^k $ for nonlinear iteration $ k $, must be less than a specified tolerance value, $ \beta $; i.e.,

    \[ \eta^k < \beta \]

    The motivation for this test is to avoid detecting stagnation when in fact the true problem is that the linear solve tolerance was not accurate enough.

    The value of $\beta$ is set in the constructor via the argument beta. Setting $\beta$ to 1.0 effectively eliminates this part of the test.

    Note
    This criteria will only be used if the "Achieved Tolerance" parameter (the value of $ \eta^k $) is set by the linear solver in the "Newton"/"Linear Solver"/"Output" sublist. The checkStatus() method will search for this parameter.

References:

  1. K. E. Brennam, S. L. Cambell, L. R. Petzold, Numerical Solution of Initial-Value Problems in Differential-Algebraic Equations, Classics in Applied Mathematics 14, SIAM 1996.

  2. G. D. Byrne and A. C. Hindmarch, PVODE, an ODE Solver for Parallel Computers, Technical Report UCRL-JC-132361, Rev. 1, Center for Applied Scientific Computing (CASC), Lawrence Livermore National Lab, May 1999.

Member Function Documentation

StatusType NormWRMS::checkStatus ( const NOX::Solver::Generic problem,
NOX::StatusTest::CheckType  checkType 
)
virtual

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