mortar_schur.hpp
Go to the documentation of this file.
1//==============================================================================
11//==============================================================================
12#ifndef MORTAR_SCHUR_HPP_
13#define MORTAR_SCHUR_HPP_
14
15#include <dune/istl/matrixmatrix.hh>
18
19namespace Opm {
20namespace Elasticity {
21
26 template<class T>
27class MortarBlockEvaluator : public Dune::LinearOperator<Vector, Vector> {
28 public:
29
34 const Matrix& B_) :
35 Ai(Ai_), B(B_), op(Ai)
36 {
37 }
38
42 void apply(const Vector& x, Vector& y) const override
43 {
44 y = 0;
45 applyscaleadd(1.0, x, y);
46 }
47
52 void applyscaleadd(field_type alpha, const Vector& x, Vector& y) const override
53 {
54 Vector temp1(B.N());
55 B.mv(x, temp1);
56 Vector temp(temp1.size());
57 op.pre(temp, temp1);
58 Dune::InverseOperatorResult res;
59 temp = 0;
60 op.pre(temp, temp1);
61 op.apply(temp, temp1);
62 op.post(temp);
63 B.usmtv(alpha, temp, y);
64 }
65
66 Dune::SolverCategory::Category category() const override
67 {
68 return Dune::SolverCategory::sequential;
69 }
70
71 protected:
72 T& Ai;
73 const Matrix& B;
75};
76
77}
78}
79
80#endif
Helper class for abstracting differences between inverse operators and preconditioners in DUNE.
void const int const int const double const double const int const double const int const double double * y
Definition: blas_lapack.hpp:59
void const int const int const double const double const int const double * x
Definition: blas_lapack.hpp:58
Definition: mortar_schur.hpp:27
Dune::SolverCategory::Category category() const override
Definition: mortar_schur.hpp:66
void apply(const Vector &x, Vector &y) const override
Apply the multiplier block.
Definition: mortar_schur.hpp:42
OperatorApplier< T > op
Applier for the preconditioner / inverse solver.
Definition: mortar_schur.hpp:74
void applyscaleadd(field_type alpha, const Vector &x, Vector &y) const override
Apply the multiplier block with an embedded axpy.
Definition: mortar_schur.hpp:52
const Matrix & B
Reference to the mortar coupling matrix.
Definition: mortar_schur.hpp:73
T & Ai
Reference to solver or evaluator for inverse operator.
Definition: mortar_schur.hpp:72
MortarBlockEvaluator(T &Ai_, const Matrix &B_)
Constructor.
Definition: mortar_schur.hpp:33
Helper class with some matrix operations.
Dune::BCRSMatrix< Dune::FieldMatrix< double, 1, 1 > > Matrix
A sparse matrix holding our operator.
Definition: matrixops.hpp:27
Dune::BlockVector< Dune::FieldVector< double, 1 > > Vector
A vector holding our RHS.
Definition: matrixops.hpp:33
Definition: ImplicitAssembly.hpp:43
Class abstracting a preconditioner or an inverse operator.
Definition: applier.hpp:26