LinearSolver::Richardson::Richardson< FieldsTag, OptionsGroup, SourceTag > Struct Template Reference

A simple Richardson scheme for solving a system of linear equations $$Ax=b$$. More...

#include <Richardson.hpp>

## Public Types

using fields_tag = FieldsTag

using options_group = OptionsGroup

using source_tag = SourceTag

using operand_tag = fields_tag

using component_list = tmpl::list<>

using observed_reduction_data_tags = observers::make_reduction_data_tags< tmpl::list< async_solvers::reduction_data > >

using initialize_element = async_solvers::InitializeElement< FieldsTag, OptionsGroup, SourceTag >

using register_element = async_solvers::RegisterElement< FieldsTag, OptionsGroup, SourceTag >

template<typename ApplyOperatorActions , typename Label = OptionsGroup>
using solve = tmpl::list< async_solvers::PrepareSolve< FieldsTag, OptionsGroup, SourceTag, Label >, detail::UpdateFields< FieldsTag, OptionsGroup, SourceTag >, ApplyOperatorActions, async_solvers::CompleteStep< FieldsTag, OptionsGroup, SourceTag, Label > >

## Detailed Description

### template<typename FieldsTag, typename OptionsGroup, typename SourceTag = db::add_tag_prefix<::Tags::FixedSource, FieldsTag>> struct LinearSolver::Richardson::Richardson< FieldsTag, OptionsGroup, SourceTag >

A simple Richardson scheme for solving a system of linear equations $$Ax=b$$.

Warning
This linear solver is useful only for basic preconditioning of another linear solver or for testing purposes. See LinearSolver::cg::ConjugateGradient or LinearSolver::gmres::Gmres for more useful general-purpose linear solvers.

In each step the solution is updated from its initial state $$x_0$$ as

$x_{k+1} = x_k + \omega \left(b - Ax\right)$

where $$\omega$$ is a relaxation parameter that weights the residual.

The scheme converges if the spectral radius (i.e. the largest absolute eigenvalue) of the iteration operator $$G=1-\omega A$$ is smaller than one. For symmetric positive definite (SPD) matrices $$A$$ with largest eigenvalue $$\lambda_\mathrm{max}$$ and smallest eigenvalue $$\lambda_\mathrm{min}$$ choose

$\omega_\mathrm{SPD,optimal} = \frac{2}{\lambda_\mathrm{max} + \lambda_\mathrm{min}}$

for optimal convergence.

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