SpECTRE  v2025.03.17
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
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 = implementation defined
 
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 = implementation defined
 

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 x0 as

xk+1=xk+ω(bAx)

where ω 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ωA is smaller than one. For symmetric positive definite (SPD) matrices A with largest eigenvalue λmax and smallest eigenvalue λmin choose

ωSPD,optimal=2λmax+λ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: