5#ifndef DUNE_ISTL_OPERATORS_HH
6#define DUNE_ISTL_OPERATORS_HH
8#include <dune-istl-config.hh>
16#include <dune/common/exceptions.hh>
17#include <dune/common/shared_ptr.hh>
68 template<
class X,
class Y>
82 virtual void apply (
const X& x, Y& y)
const = 0;
92#if DUNE_ISTL_SUPPORT_OLD_CATEGORY_INTERFACE
94 DUNE_THROW(Dune::Exception,
"It is necessary to implement the category method in a derived classes, in the future this method will pure virtual.");
110 template<
class M,
class X,
class Y>
134 template<
class M,
class X,
class Y>
151 void apply (
const X& x, Y& y)
const override
159 _A_->usmv(alpha,x,y);
175 const std::shared_ptr<const M> _A_;
Definition allocator.hh:11
A linear operator.
Definition operators.hh:69
virtual ~LinearOperator()
every abstract base class has a virtual destructor
Definition operators.hh:88
Y range_type
The type of the range of the operator.
Definition operators.hh:74
virtual void applyscaleadd(field_type alpha, const X &x, Y &y) const =0
apply operator to x, scale and add:
X::field_type field_type
The field type of the operator.
Definition operators.hh:76
X domain_type
The type of the domain of the operator.
Definition operators.hh:72
virtual SolverCategory::Category category() const =0
Category of the linear operator (see SolverCategory::Category)
virtual void apply(const X &x, Y &y) const =0
apply operator to x: The input vector is consistent and the output must also be consistent on the in...
A linear operator exporting itself in matrix form.
Definition operators.hh:111
virtual const M & getmat() const =0
get matrix via *
X domain_type
Definition operators.hh:115
M matrix_type
export types, usually they come from the derived class
Definition operators.hh:114
X::field_type field_type
Definition operators.hh:117
Y range_type
Definition operators.hh:116
Adapter to turn a matrix into a linear operator.
Definition operators.hh:136
MatrixAdapter(std::shared_ptr< const M > A)
constructor: store an std::shared_ptr to a matrix
Definition operators.hh:148
MatrixAdapter(const M &A)
constructor: just store a reference to a matrix
Definition operators.hh:145
void applyscaleadd(field_type alpha, const X &x, Y &y) const override
apply operator to x, scale and add:
Definition operators.hh:157
X domain_type
Definition operators.hh:140
const M & getmat() const override
get matrix via *
Definition operators.hh:163
X::field_type field_type
Definition operators.hh:142
SolverCategory::Category category() const override
Category of the solver (see SolverCategory::Category)
Definition operators.hh:169
void apply(const X &x, Y &y) const override
apply operator to x:
Definition operators.hh:151
M matrix_type
export types
Definition operators.hh:139
Y range_type
Definition operators.hh:141
Category
Definition solvercategory.hh:23
@ sequential
Category for sequential solvers.
Definition solvercategory.hh:25