Template Numerical Library: TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor > Class Template Reference

Template Numerical Library version\ main:be7e16d88

Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | List of all members
TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor > Class Template Reference

Base class for iterative solvers. More...

`#include <TNL/Solvers/IterativeSolver.h>`

Collaboration diagram for TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >:
[legend]

## Public Types
using | SolverMonitorType = SolverMonitor
| Type of an object used for monitoring of the convergence.

## Public Member Functions
| IterativeSolver ()=default
| Default constructor.
virtual bool | checkConvergence () const
| Checks whether the convergence occurred already.
virtual bool | checkNextIteration () const
| Checks if the solver is allowed to do the next iteration.
const Real & | getConvergenceResidue () const
| Gets the threshold for convergence based on residue.
const Real & | getDivergenceResidue () const
| Gets the threshold for divergence based on residue.
const Index & | getIterations () const
| Gets the number of iterations performed by the solver so far.
const Index & | getMaxIterations () const
| Gets the maximal number of iterations the solver is allowed to perform.
const Index & | getMinIterations () const
| Gets the minimal number of iterations the solver is supposed to do.
const Real & | getResidue () const
| Gets the residue reached at the current iteration.
virtual bool | nextIteration ()
| Proceeds to the next iteration.
void | resetIterations ()
| Sets the the number of the current iterations to zero.
void | setConvergenceResidue (const Real &convergenceResidue)
| Sets the threshold for convergence based on residue.
void | setDivergenceResidue (const Real &divergenceResidue)
| Sets the threshold for divergence based on residue.
void | setMaxIterations (const Index &maxIterations)
| Sets the maximal number of iterations the solver is allowed to perform.
void | setMinIterations (const Index &minIterations)
| Sets the minimal number of iterations the solver is supposed to do.
void | setRefreshRate (const Index &refreshRate)
| Sets the refresh rate (in milliseconds) for the solver monitor.
void | setResidue (const Real &residue)
| Sets the residue reached at the current iteration.
void | setSolverMonitor (SolverMonitorType &solverMonitor)
| Sets the solver monitor object.
bool | setup (const Config::ParameterContainer &parameters, const std::string &prefix="")
| Method for setup of the iterative solver based on configuration parameters.

## Static Public Member Functions
static void | configSetup (Config::ConfigDescription &config, const std::string &prefix="")
| This method defines configuration entries for setup of the iterative solver.

## Protected Attributes
Real | convergenceResidue = 1e-6
Index | currentIteration = 0
Real | currentResidue = 0
Real | divergenceResidue = std::numeric_limits< Real >::max()
Index | maxIterations = 1000000000
Index | minIterations = 0
Index | refreshRate = 1
std::ofstream | residualHistoryFile
std::string | residualHistoryFileName
SolverMonitor * | solverMonitor = nullptr

## Detailed Description

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>
class TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >

Base class for iterative solvers.

Template Parameters

  Real | is a floating point type used for computations.
  Index | is an indexing type.
  SolverMonitor | is type of an object used for monitoring of the convergence.

## Member Function Documentation

## ◆ checkConvergence()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

virtual bool TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::checkConvergence | ( |  | ) | const
| nodiscardvirtual

Checks whether the convergence occurred already.

If the convergence did not occur yet, a message is printed to the stderr output.

Returns
  true if the convergence already occurred, and false otherwise.

Reimplemented in TNL::Solvers::ODE::ExplicitSolver< Real, Index, SolverMonitor >, and TNL::Solvers::ODE::ExplicitSolver< Vector::RealType, Vector::IndexType, SolverMonitor >.

## ◆ checkNextIteration()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

virtual bool TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::checkNextIteration | ( |  | ) | const
| nodiscardvirtual

Checks if the solver is allowed to do the next iteration.

Returns
  true if the solver is allowed to do the next iteration, and false otherwise. This may happen because the divergence occurred.

Reimplemented in TNL::Solvers::ODE::ExplicitSolver< Real, Index, SolverMonitor >, and TNL::Solvers::ODE::ExplicitSolver< Vector::RealType, Vector::IndexType, SolverMonitor >.

## ◆ configSetup()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::configSetup | ( | Config::ConfigDescription & | config,
|  | const std::string & | prefix = "" )
| static

This method defines configuration entries for setup of the iterative solver.

The following entries are defined:

max-iterations - maximal number of iterations the solver may perform.

min-iterations - minimal number of iterations the solver must perform.

convergence-residue - convergence occurs when the residue drops bellow this limit.

divergence-residue - divergence occurs when the residue exceeds given limit.

refresh-rate - number of milliseconds between solver monitor refreshes.

residual-history-file - path to the file where the residual history will be saved.

Parameters

  config | contains description of configuration parameters.
  prefix | is a prefix of particular configuration entries.

## ◆ getConvergenceResidue()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

const Real & TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::getConvergenceResidue | ( |  | ) | const
| nodiscard

Gets the threshold for convergence based on residue.

See setConvergenceResidue.

Returns
  the convergence threshold.

## ◆ getDivergenceResidue()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

const Real & TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::getDivergenceResidue | ( |  | ) | const
| nodiscard

Gets the threshold for divergence based on residue.

See setDivergenceResidue.

Returns
  the residue limit of the divergence.

## ◆ getIterations()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

const Index & TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::getIterations | ( |  | ) | const
| nodiscard

Gets the number of iterations performed by the solver so far.

Returns
  number of iterations performed so far.

## ◆ getMaxIterations()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

const Index & TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::getMaxIterations | ( |  | ) | const
| nodiscard

Gets the maximal number of iterations the solver is allowed to perform.

See setMaxIterations.

Returns
  maximal number of allowed iterations.

## ◆ getMinIterations()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

const Index & TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::getMinIterations | ( |  | ) | const
| nodiscard

Gets the minimal number of iterations the solver is supposed to do.

Returns
  minimal number of iterations the solver is supposed to do.

## ◆ getResidue()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

const Real & TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::getResidue | ( |  | ) | const
| nodiscard

Gets the residue reached at the current iteration.

Note that the exact meaning of the value may be specific to the actual algorithm, but in general, the residue is used to check for the convergence and divergence.

Returns
  residue reached at the current iteration.

## ◆ nextIteration()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

virtual bool TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::nextIteration | ( |  | ) |
| virtual

Proceeds to the next iteration.

Returns
  true if the solver is allowed to do the next iteration, and false otherwise. This may happen because the divergence occurred.

Reimplemented in TNL::Solvers::ODE::ExplicitSolver< Real, Index, SolverMonitor >, and TNL::Solvers::ODE::ExplicitSolver< Vector::RealType, Vector::IndexType, SolverMonitor >.

## ◆ setConvergenceResidue()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setConvergenceResidue | ( | const Real & | convergenceResidue | ) |

Sets the threshold for convergence based on residue.

The convergence occurs when the residue drops bellow this threshold.

Parameters

  convergenceResidue | the threshold for convergence.

## ◆ setDivergenceResidue()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setDivergenceResidue | ( | const Real & | divergenceResidue | ) |

Sets the threshold for divergence based on residue.

The divergence occurs when the residue exceeds the threshold.

Parameters

  divergenceResidue | the threshold for divergence.

## ◆ setMaxIterations()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setMaxIterations | ( | const Index & | maxIterations | ) |

Sets the maximal number of iterations the solver is allowed to perform.

If the number of iterations performed by the solver exceeds given limit, the divergence occurs.

Parameters

  maxIterations | maximal number of allowed iterations.

## ◆ setMinIterations()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setMinIterations | ( | const Index & | minIterations | ) |

Sets the minimal number of iterations the solver is supposed to do.

Parameters

  minIterations | minimal number of iterations the solver is supposed to do.

## ◆ setRefreshRate()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setRefreshRate | ( | const Index & | refreshRate | ) |

Sets the refresh rate (in milliseconds) for the solver monitor.

Parameters

  refreshRate | of the solver monitor in milliseconds.

## ◆ setResidue()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setResidue | ( | const Real & | residue | ) |

Sets the residue reached at the current iteration.

This method is intended to be used from subclasses to report the current residue. The exact meaning of the value may be specific to the actual algorithm, but in general, the residue is used to check for the convergence and divergence.

Parameters

  residue | reached at the current iteration.

## ◆ setSolverMonitor()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

void TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setSolverMonitor | ( | SolverMonitorType & | solverMonitor | ) |

Sets the solver monitor object.

The solver monitor is an object for monitoring the status of the iterative solver. Usually it prints the number of iterations, current residue or elapsed time.

Parameters

  solverMonitor | is an object for monitoring the iterative solver.

## ◆ setup()

template<typename Real, typename Index, typename SolverMonitor = IterativeSolverMonitor< double >>

bool TNL::Solvers::IterativeSolver< Real, Index, SolverMonitor >::setup | ( | const Config::ParameterContainer & | parameters,
|  | const std::string & | prefix = "" )

Method for setup of the iterative solver based on configuration parameters.

Parameters

  parameters | contains values of the define configuration entries.
  prefix | is a prefix of particular configuration entries.

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

- src/TNL/Solvers/IterativeSolver.h