13#ifndef SYMMETRICOPERATORS_HH
14#define SYMMETRICOPERATORS_HH
16#include "dune/istl/preconditioners.hh"
24 template <
class X,
class Xstar>
37 template <
class X,
class Xstar>
48 template <
class X,
class Xstar>
67 template <
class X,
class Xstar>
98 virtual Dune::SolverCategory::Category
category()
const override
100 return Dune::SolverCategory::sequential;
108 template <
class X,
class Matrix>
157 template <
class X,
class Xstar>
172 : A(A_), dualPairing(dualPairing_) {}
174 virtual void apply(
X const& x, Xstar& y)
const
181 A.applyscaleadd(alpha,x,y);
189 return dualPairing(x,y);
193 Dune::LinearOperator<X,Xstar>
const& A;
207 template <
class X,
class Xstar>
218 virtual void pre(
X& , Xstar& ) {}
242 virtual Dune::SolverCategory::Category
category()
const override
244 return Dune::SolverCategory::sequential;
269 return x.two_norm2();
287 template <
class X,
class Xstar>
302 : B(B_), dualPairing(dualPairing_) {}
304 virtual void pre(
X& x, Xstar& y)
332 return dualPairing(x,y);
343 Dune::Preconditioner<X,Xstar>& B;
Default implementation of dual pairing (relies on scalar product operator * being defined)
virtual field_type operator()(X const &x, Xstar const &y) const
Abstract base class for dual pairing of and its dual space .
virtual field_type operator()(X const &x, Xstar const &y) const =0
The trivial (identity) preconditioner.
virtual bool requiresInitializedInput() const
Returns true if the target vector x has to be initialized to zero before calling apply or applyDp.
virtual void apply(X &v, const X &d)
virtual field_type applyDp(X &x, X const &y)
Computes and returns .
Interface for symmetric linear operators.
virtual field_type dp(X const &x, Xstar const &y) const =0
returns the dual pairing with respect to which the operator is symmetric
virtual field_type applyDp(X const &x, Xstar &y) const
operator application Computes and returns the dual pairing .
virtual Dune::SolverCategory::Category category() const override
returns the category of the operator
Wrapper class to present (hopefully) symmetric linear operators in the SymmetricLinearOperator interf...
SymmetricLinearOperatorWrapper(Dune::LinearOperator< X, Xstar > const &A_, DualPairing< X, Xstar > const &dualPairing_)
Constructor.
virtual field_type dp(X const &x, Xstar const &y) const
returns the dual pairing with respect to which the operator is symmetric
virtual void applyscaleadd(field_type alpha, X const &x, Xstar &y) const
virtual void apply(X const &x, Xstar &y) const
A symmetric operator represented by a matrix.
virtual void apply(X const &x, X &y) const
virtual void applyscaleadd(field_type alpha, X const &x, X &y) const
virtual field_type applyDp(X const &x, X &y) const
operator application Computes and returns the dual pairing .
virtual field_type dp(X const &x, X const &y) const
returns the dual pairing with respect to which the operator is symmetric
SymmetricMatrixOperator(Matrix const &A_)
Interface for symmetric preconditioners.
virtual bool requiresInitializedInput() const =0
Returns true if the target vector x has to be initialized to zero before calling apply or applyDp.
virtual void post(X &x)
Preconditioner cleanup.
virtual field_type applyDp(X &x, Xstar const &y)=0
Computes and returns .
virtual Dune::SolverCategory::Category category() const override
returns the category of the operator
virtual void pre(X &, Xstar &)
Preconditioner preparation.
Wrapper class presenting a symmetric preconditioner interface for any preconditioner.
SymmetricPreconditionerWrapper(Dune::Preconditioner< X, Xstar > &B_, DualPairing< X, Xstar > const &dualPairing_)
Constructor.
virtual void pre(X &x, Xstar &y)
Preconditioner preparation.
virtual bool requiresInitializedInput() const
Returns true if the target vector x has to be initialized to zero before calling apply or applyDp.
virtual field_type applyDp(X &x, Xstar const &y)
Computes and returns .
virtual void apply(X &x, Xstar const &y)
Computes .
virtual void post(X &x)
Preconditioner cleanup.
Zero dual pairing implementation (mainly useful whenever a dual pairing is needed for formal language...
virtual field_type operator()(X const &, Xstar const &) const