SpECTRE
v2025.01.30
|
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 > > |
A simple Richardson scheme for solving a system of linear equations \(Ax=b\).
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.
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.