Public Types | List of all members
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: