DUNE PDELab (2.8)
preconditioners.hh
Go to the documentation of this file.
96 DUNE_THROW(InvalidStateException, "User-supplied solver category does not match that of the given inverse operator");
180 SeqSSOR (const std::shared_ptr<const AssembledLinearOperator<M,X,Y>>& A, const ParameterTree& configuration)
198 : SeqSSOR(A, configuration.get<int>("iterations",1), configuration.get<real_field_type>("relaxation",1.0))
300 SeqSOR (const std::shared_ptr<const AssembledLinearOperator<M,X,Y>>& A, const ParameterTree& configuration)
318 : SeqSOR(A, configuration.get<int>("iterations",1), configuration.get<real_field_type>("relaxation",1.0))
451 SeqJac (const std::shared_ptr<const AssembledLinearOperator<M,X,Y>>& A, const ParameterTree& configuration)
469 : SeqJac(A, configuration.get<int>("iterations",1), configuration.get<real_field_type>("relaxation",1.0))
578 SeqILU (const std::shared_ptr<const AssembledLinearOperator<M,X,Y>>& A, const ParameterTree& configuration)
785 DUNE_REGISTER_PRECONDITIONER("richardson", [](auto tl, const auto& /* mat */, const ParameterTree& config){
835 SeqILDL (const std::shared_ptr<const AssembledLinearOperator<M,X,Y>>& A, const ParameterTree& configuration)
891 for( auto row = decomposition_.begin(), rowend = decomposition_.end(); row != rowend; ++row, ++i )
A linear operator exporting itself in matrix form.
Definition: operators.hh:107
Default exception if a function was called while the object is not in a valid state for that function...
Definition: exceptions.hh:279
Turns an InverseOperator into a Preconditioner.
Definition: preconditioners.hh:73
O::range_type range_type
The range type of the preconditioner.
Definition: preconditioners.hh:78
O::domain_type domain_type
The domain type of the preconditioner.
Definition: preconditioners.hh:76
virtual void post(domain_type &)
Clean up.
Definition: preconditioners.hh:109
range_type::field_type field_type
The field type of the preconditioner.
Definition: preconditioners.hh:80
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:84
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:82
virtual SolverCategory::Category category() const
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:113
virtual void pre(domain_type &, range_type &)
Prepare the preconditioner.
Definition: preconditioners.hh:99
InverseOperator2Preconditioner(InverseOperator &inverse_operator)
Construct the preconditioner from the solver.
Definition: preconditioners.hh:92
O InverseOperator
type of the wrapped inverse operator
Definition: preconditioners.hh:86
virtual void apply(domain_type &v, const range_type &d)
Apply one step of the preconditioner to the system A(v)=d.
Definition: preconditioners.hh:102
Base class for matrix free definition of preconditioners.
Definition: preconditioner.hh:30
X::field_type field_type
The field type of the preconditioner.
Definition: preconditioners.hh:718
virtual SolverCategory::Category category() const
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:776
Y range_type
The range type of the preconditioner.
Definition: preconditioners.hh:716
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: preconditioners.hh:753
Richardson(real_field_type w=1.0)
Constructor.
Definition: preconditioners.hh:729
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:722
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:720
Richardson(const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:744
X domain_type
The domain type of the preconditioner.
Definition: preconditioners.hh:714
virtual void apply(X &v, const Y &d)
Apply the precondioner.
Definition: preconditioners.hh:761
SeqILDL(const matrix_type &A, const ParameterTree &config)
Constructor.
Definition: preconditioners.hh:851
SeqILDL(const matrix_type &A, real_field_type relax=real_field_type(1))
constructor
Definition: preconditioners.hh:863
X domain_type
domain type of the preconditioner
Definition: preconditioners.hh:813
Y range_type
range type of the preconditioner
Definition: preconditioners.hh:815
std::remove_const_t< M > matrix_type
type of matrix the preconditioner is for
Definition: preconditioners.hh:811
void apply(X &v, const Y &d) override
Apply one step of the preconditioner to the system A(v)=d.
Definition: preconditioners.hh:907
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:821
SeqILDL(const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:835
void pre(X &x, Y &b) override
Prepare the preconditioner.
Definition: preconditioners.hh:903
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:819
X::field_type field_type
field type of the preconditioner
Definition: preconditioners.hh:817
SolverCategory::Category category() const override
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:918
SeqILU(const M &A, int n, real_field_type w, const bool resort=false)
Constructor.
Definition: preconditioners.hh:610
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: preconditioners.hh:646
virtual void apply(X &v, const Y &d)
Apply the preconditioner.
Definition: preconditioners.hh:654
ILU::CRS< block_type, typename M::allocator_type > CRS
type of ILU storage
Definition: preconditioners.hh:550
Y range_type
The range type of the preconditioner.
Definition: preconditioners.hh:539
CRS lower_
The ILU(n) decomposition of the matrix. As storage a CRS structure is used.
Definition: preconditioners.hh:690
const bool wNotIdentity_
true if w != 1.0
Definition: preconditioners.hh:697
SeqILU(const M &A, const ParameterTree &config)
Constructor.
Definition: preconditioners.hh:596
std::remove_const< M >::type matrix_type
The matrix type the preconditioner is for.
Definition: preconditioners.hh:533
matrix_type::block_type block_type
block type of matrix
Definition: preconditioners.hh:535
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:547
X::field_type field_type
The field type of the preconditioner.
Definition: preconditioners.hh:542
virtual SolverCategory::Category category() const
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:680
SeqILU(const M &A, real_field_type w, const bool resort=false)
Constructor.
Definition: preconditioners.hh:559
const real_field_type w_
The relaxation factor to use.
Definition: preconditioners.hh:695
SeqILU(const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:578
X domain_type
The domain type of the preconditioner.
Definition: preconditioners.hh:537
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:545
std::unique_ptr< matrix_type > ILU_
The ILU(n) decomposition of the matrix. As storage a BCRSMatrix is used.
Definition: preconditioners.hh:687
SeqJac(const M &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:468
virtual void apply(X &v, const Y &d)
Apply the preconditioner.
Definition: preconditioners.hh:485
M matrix_type
The matrix type the preconditioner is for.
Definition: preconditioners.hh:413
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:421
SeqJac(const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:451
X::field_type field_type
The field type of the preconditioner.
Definition: preconditioners.hh:419
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: preconditioners.hh:477
X domain_type
The domain type of the preconditioner.
Definition: preconditioners.hh:415
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:423
virtual SolverCategory::Category category() const
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:501
SeqJac(const M &A, int n, real_field_type w)
Constructor.
Definition: preconditioners.hh:432
Y range_type
The range type of the preconditioner.
Definition: preconditioners.hh:417
SeqSOR(const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:300
M matrix_type
The matrix type the preconditioner is for.
Definition: preconditioners.hh:262
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:272
void apply(X &v, const Y &d)
Apply the preconditioner in a special direction.
Definition: preconditioners.hh:348
X domain_type
The domain type of the preconditioner.
Definition: preconditioners.hh:264
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: preconditioners.hh:326
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:270
virtual SolverCategory::Category category() const
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:369
virtual void apply(X &v, const Y &d)
Apply the preconditioner.
Definition: preconditioners.hh:334
Y range_type
The range type of the preconditioner.
Definition: preconditioners.hh:266
SeqSOR(const M &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:317
X::field_type field_type
The field type of the preconditioner.
Definition: preconditioners.hh:268
SeqSOR(const M &A, int n, real_field_type w)
Constructor.
Definition: preconditioners.hh:281
SeqSSOR(const std::shared_ptr< const AssembledLinearOperator< M, X, Y > > &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:180
SeqSSOR(const M &A, const ParameterTree &configuration)
Constructor.
Definition: preconditioners.hh:197
virtual SolverCategory::Category category() const
Category of the preconditioner (see SolverCategory::Category)
Definition: preconditioners.hh:231
X::field_type field_type
The field type of the preconditioner.
Definition: preconditioners.hh:148
Simd::Scalar< field_type > scalar_field_type
scalar type underlying the field_type
Definition: preconditioners.hh:150
X domain_type
The domain type of the preconditioner.
Definition: preconditioners.hh:144
M matrix_type
The matrix type the preconditioner is for.
Definition: preconditioners.hh:142
virtual void apply(X &v, const Y &d)
Apply the preconditioner.
Definition: preconditioners.hh:214
virtual void pre(X &x, Y &b)
Prepare the preconditioner.
Definition: preconditioners.hh:206
Y range_type
The range type of the preconditioner.
Definition: preconditioners.hh:146
FieldTraits< scalar_field_type >::real_type real_field_type
real scalar type underlying the field_type
Definition: preconditioners.hh:152
SeqSSOR(const M &A, int n, real_field_type w)
Constructor.
Definition: preconditioners.hh:161
typename Overloads::ScalarType< std::decay_t< V > >::type Scalar
Element type of some SIMD type.
Definition: interface.hh:233
Simple iterative methods like Jacobi, Gauss-Seidel, SOR, SSOR, etc. in a generic way.
Incomplete LDL decomposition.
The incomplete LU factorization kernels.
Some handy generic functions for ISTL matrices.
void bildl_decompose(Matrix &A)
compute ILDL decomposition of a symmetric matrix A
Definition: ildl.hh:86
A hierarchical structure of string parameters.
Include file for users of the SIMD abstraction layer.
static void check(const Matrix &mat)
Check whether the a matrix has diagonal values on blocklevel recursion levels.
Definition: matrixutils.hh:51
Statistics about the application of an inverse operator.
Definition: solver.hh:46
@ sequential
Category for sequential solvers.
Definition: solvercategory.hh:23
static Category category(const OP &op, decltype(op.category()) *=nullptr)
Helperfunction to extract the solver category either from an enum, or from the newly introduced virtu...
Definition: solvercategory.hh:32
![Creative Commons License](https://i.creativecommons.org/l/by-sa/4.0/80x15.png)