1#ifndef UZAWA_SOLVER_HPP_
2#define UZAWA_SOLVER_HPP_
15#include <dune/istl/solvers.hh>
18 namespace Elasticity {
23 template<
class X,
class Y>
27 typedef std::shared_ptr<Dune::InverseOperator<X,Y> > OperatorPtr;
33 OperatorPtr& outersolver_,
45 Dune::InverseOperatorResult& res)
override
54 void apply(X& x, Y& b, Dune::InverseOperatorResult& res)
override
56 Vector lambda, lambda2, u, u2;
58 Dune::InverseOperatorResult res2;
64 lambda2.resize(lambda.size());
68 B.usmv(-1.0, lambda2, u);
75 Dune::SolverCategory::Category category()
const override
77 return Dune::SolverCategory::sequential;
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
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
Template implementing an Uzawa scheme (block Gaussian-elimination) for a (symmetric indefinite) saddl...
Definition uzawa_solver.hpp:25
OperatorPtr outersolver
The outer solver.
Definition uzawa_solver.hpp:82
const Matrix & B
The coupling matrix.
Definition uzawa_solver.hpp:83
void apply(X &x, Y &b, double, Dune::InverseOperatorResult &res) override
Apply the scheme to a vector.
Definition uzawa_solver.hpp:44
void apply(X &x, Y &b, Dune::InverseOperatorResult &res) override
Apply the scheme to a vector.
Definition uzawa_solver.hpp:54
UzawaSolver(OperatorPtr &innersolver_, OperatorPtr &outersolver_, const Matrix &B_)
Default constructor.
Definition uzawa_solver.hpp:32
OperatorPtr innersolver
The inner solver.
Definition uzawa_solver.hpp:81
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
Inverting small matrices.
Definition ImplicitAssembly.hpp:43