Fork me on GitHub
 All Classes Files Functions Variables Groups Pages
Public Types | Public Methods | Public Members | List of all members
cusp::monitor< ValueType > Class Template Reference

Detailed description

template<typename ValueType>
class cusp::monitor< ValueType >

Implements standard convergence criteria and reporting for iterative solvers.

Template Parameters
ValueTypescalar type used in the solver (e.g. float or cusp::complex<double>).
Overview
The monitor terminates iteration when the residual norm satisfies the condition ||b - A x|| <= absolute_tolerance + relative_tolerance * ||b|| or when the iteration limit is reached. Classes to monitor iterative solver progress, check for convergence, etc. Follows the implementation of Iteration in the ITL:
See Also
http://www.osl.iu.edu/research/itl/doc/Iteration.html
Example
The following code snippet demonstrates how to configure the monitor and use it with an iterative solver.
#include <cusp/monitor.h>
#include <cusp/krylov/cg.h>
int main(void)
{
// create an empty sparse matrix structure (CSR format)
// initialize matrix
// allocate storage for solution (x) and right hand side (b)
// set stopping criteria:
// iteration_limit = 100
// relative_tolerance = 1e-6
// solve the linear system A x = b
cusp::krylov::cg(A, x, b, monitor);
// report solver results
if (monitor.converged())
{
std::cout << "Solver converged to " << monitor.relative_tolerance() << " relative tolerance";
std::cout << " after " << monitor.iteration_count() << " iterations" << std::endl;
}
else
{
std::cout << "Solver reached iteration limit " << monitor.iteration_limit() << " before converging";
std::cout << " to " << monitor.relative_tolerance() << " relative tolerance " << std::endl;
}
return 0;
}
Examples:
ainv.cu, bicgstab.cu, cg.cu, cg_m.cu, cg_raw.cu, cr.cu, custom_amg.cu, diagonal.cu, gmres.cu, monitor.cu, smoothed_aggregation.cu, stencil.cu, and verbose_monitor.cu.

Definition at line 101 of file monitor.h.

#include <monitor.h>

Inheritance diagram for cusp::monitor< ValueType >:
cusp::convergence_monitor< ValueType > cusp::default_monitor< ValueType > cusp::verbose_monitor< ValueType >

Public Types

typedef cusp::norm_type
< ValueType >::type 
Real
 

Public Methods

template<typename VectorType >
 monitor (const VectorType &b, const size_t iteration_limit=500, const Real relative_tolerance=1e-5, const Real absolute_tolerance=0, const bool verbose=false)
 Constructs a monitor for a given right-hand-side b. More...
 
void operator++ (void)
 Increments the iteration count.
 
bool converged (void) const
 Indicates whether the last tested residual satisfies the convergence tolerance. More...
 
Real residual_norm (void) const
 Euclidean norm of last residual. More...
 
size_t iteration_count (void) const
 Returns the number of iterations that the monitor has executed. More...
 
size_t iteration_limit (void) const
 Returns the maximum number of iterations. More...
 
Real relative_tolerance (void) const
 Returns the relative tolerance. More...
 
Real absolute_tolerance (void) const
 Returns the absolute tolerance. More...
 
Real tolerance (void) const
 Return the tolerance equal to absolute_tolerance() + relative_tolerance() * ||b||. More...
 
template<typename Vector >
bool finished (const Vector &r)
 Applies convergence criteria to determine whether iteration is finished. More...
 
void set_verbose (bool verbose_=true)
 Sets the verbosity level of the monitor. More...
 
bool is_verbose (void)
 Gets the verbosity level of the monitor. More...
 
template<typename Vector >
void reset (const Vector &b)
 Resets the monitor using same convergence criteria. More...
 
void print (void)
 Prints the number of iterations and convergence history information.
 
Real immediate_rate (void)
 Returns the immedidate convergence rate. More...
 
Real geometric_rate (void)
 Returns the geometric convergence rate. More...
 
Real average_rate (void)
 Returns the average convergence rate. More...
 

Public Members

cusp::array1d< Real,
cusp::host_memory > 
residuals