Skip to content
Snippets Groups Projects
Commit f0ee54c2 authored by Kilian Weishaupt's avatar Kilian Weishaupt
Browse files

Merge branch 'feature/block-diag-gmres-ilu0-md-solver' into 'master'

Add multidomain gmres solver backend

See merge request !2177
parents d625bac2 4b784fbb
No related branches found
No related tags found
2 merge requests!2177Add multidomain gmres solver backend,!2134WIP Feature/timestepper test
......@@ -1012,7 +1012,6 @@ class BlockDiagILU0BiCGSTABSolver : public LinearSolver
public:
using LinearSolver::LinearSolver;
// Solve saddle-point problem using a Schur complement based preconditioner
template<class Matrix, class Vector>
bool solve(const Matrix& M, Vector& x, const Vector& b)
{
......@@ -1032,7 +1031,46 @@ public:
}
std::string name() const
{ return "block-diagonal ILU0 preconditioned BiCGSTAB solver"; }
{ return "block-diagonal ILU0-preconditioned BiCGSTAB solver"; }
private:
Dune::InverseOperatorResult result_;
};
/*!
* \ingroup Linear
* \brief A simple ilu0 block diagonal preconditioned RestartedGMResSolver
* \note expects a system as a multi-type block-matrix
* | A B |
* | C D |
*/
class BlockDiagILU0RestartedGMResSolver : public LinearSolver
{
public:
using LinearSolver::LinearSolver;
template<int precondBlockLevel = 2, class Matrix, class Vector>
bool solve(const Matrix& M, Vector& x, const Vector& b)
{
BlockDiagILU0Preconditioner<Matrix, Vector, Vector> preconditioner(M);
Dune::MatrixAdapter<Matrix, Vector, Vector> op(M);
static const int restartGMRes = getParamFromGroup<double>(this->paramGroup(), "LinearSolver.GMResRestart");
Dune::RestartedGMResSolver<Vector> solver(op, preconditioner, this->residReduction(), restartGMRes,
this->maxIter(), this->verbosity());
auto bTmp(b);
solver.apply(x, bTmp, result_);
return result_.converged;
}
const Dune::InverseOperatorResult& result() const
{
return result_;
}
std::string name() const
{ return "block-diagonal ILU0-preconditioned restarted GMRes solver"; }
private:
Dune::InverseOperatorResult result_;
......@@ -1237,7 +1275,7 @@ public:
}
std::string name() const
{ return "block-diagonal AMG preconditioned BiCGSTAB solver"; }
{ return "block-diagonal AMG-preconditioned BiCGSTAB solver"; }
private:
template<template<class M, std::size_t i> class Criterion, class Matrix, class Params, std::size_t... Is>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment