SpECTRE  v2024.04.12
LinearSolver::Richardson::Richardson< FieldsTag, OptionsGroup, SourceTag, ArraySectionIdTag > 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, ArraySectionIdTag >
 
template<typename ApplyOperatorActions , typename Label = OptionsGroup>
using solve = tmpl::list< async_solvers::PrepareSolve< FieldsTag, OptionsGroup, SourceTag, Label, ArraySectionIdTag >, detail::UpdateFields< FieldsTag, OptionsGroup, SourceTag >, ApplyOperatorActions, async_solvers::CompleteStep< FieldsTag, OptionsGroup, SourceTag, Label, ArraySectionIdTag > >
 

Detailed Description

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

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.

Array sections
This linear solver requires no synchronization between elements, so it runs on all elements in the array parallel component. Partitioning of the elements in sections is only relevant for observing residual norms. Pass the section ID tag for the ArraySectionIdTag template parameter if residual norms should be computed over a section. Pass void (default) to compute residual norms over all elements in the array.

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