12 #ifndef SCHUR_PRECOND_HPP_
13 #define SCHUR_PRECOND_HPP_
15 #include <dune/istl/preconditioners.hh>
16 #include <dune/istl/matrixmatrix.hh>
22 namespace Elasticity {
36 template<
class PrecondElasticityBlock>
51 PrecondElasticityBlock& Apre_,
bool symmetric_=
false) :
63 virtual void pre(Vector& x, Vector& b)
69 Apre.pre(tempx, tempb);
77 virtual void apply(Vector& v,
const Vector& d)
82 Dune::InverseOperatorResult r;
84 temp2.resize(temp.size(),
false);
85 Lpre.apply(temp2, temp, r);
93 temp2.resize(
N,
false);
95 Apre.apply(temp2, temp);
Helper class with some matrix operations.
Preconditioners for elasticity upscaling.
bool symmetric
Whether or not to use a symmetric preconditioner.
Definition: mortar_schur_precond.hpp:121
int N
Number of displacement DOFs.
Definition: mortar_schur_precond.hpp:112
virtual ~MortarSchurPre()
Destructor.
Definition: mortar_schur_precond.hpp:58
The category the preconditioner is part of.
Definition: mortar_schur_precond.hpp:42
virtual void pre(Vector &x, Vector &b)
Preprocess preconditioner.
Definition: mortar_schur_precond.hpp:63
virtual void post(Vector &x)
Dummy post-process function.
Definition: mortar_schur_precond.hpp:100
static void injectBlock(Vector &x, const Vector &y, int len, int start=0)
Inject a range of indices into a vector.
Definition: mortar_utils.hpp:36
This implements a Schur-decomposition based preconditioner for the mortar-elasticity system [A B] [B'...
Definition: mortar_schur_precond.hpp:37
static void extractBlock(Vector &x, const Vector &y, int len, int start=0)
Extract a range of indices from a vector.
Definition: mortar_utils.hpp:25
MortarSchurPre(const Matrix &P_, const Matrix &B_, PrecondElasticityBlock &Apre_, bool symmetric_=false)
Constructor.
Definition: mortar_schur_precond.hpp:50
PrecondElasticityBlock & Apre
The preconditioner for the elasticity operator.
Definition: mortar_schur_precond.hpp:106
const Matrix & B
The mortar coupling matrix.
Definition: mortar_schur_precond.hpp:109
LUSolver Lpre
Linear solver for the multiplier block.
Definition: mortar_schur_precond.hpp:118
int M
Number of multiplier DOFs.
Definition: mortar_schur_precond.hpp:115
virtual void apply(Vector &v, const Vector &d)
Applies the preconditioner.
Definition: mortar_schur_precond.hpp:77