AMDiS  0.3
The Adaptive Multi-Dimensional Simulation Toolbox
PreconditionerInterface.hpp
1 #pragma once
2 
3 #include <amdis/Output.hpp>
4 
5 namespace AMDiS
6 {
8  template <class Mat, class Vec>
10  {
11  using M = typename Mat::BaseMatrix;
12  using X = typename Vec::BaseVector;
13  using Y = typename Vec::BaseVector;
14 
15  public:
17  virtual ~PreconditionerInterface() = default;
18 
20  virtual void init(M const& A) = 0;
21 
23  virtual void exit() = 0;
24 
26  virtual void solve(X const& x, Y& y) const = 0;
27 
29  virtual void adjoint_solve(X const& x, Y& y) const
30  {
31  error_exit("Must be implemented by derived class.");
32  }
33  };
34 
35 } // end namespace AMDiS
void error_exit(std::string const &str, Args &&... args)
print a message and exit
Definition: Output.hpp:142
Contains all classes needed for solving linear and non linear equation systems.
Definition: AdaptBase.hpp:6
virtual ~PreconditionerInterface()=default
Virtual destructor.
virtual void adjoint_solve(X const &x, Y &y) const
Apply the transposed preconditioner to a vector x and store the result in y.
Definition: PreconditionerInterface.hpp:29
virtual void exit()=0
Is called at the end of a solution procedure.
Interface for Preconditioner y = M*x.
Definition: PreconditionerInterface.hpp:9
virtual void init(M const &A)=0
Is called a the beginning of a solution procedure.
virtual void solve(X const &x, Y &y) const =0
Apply the preconditioner to a vector x and store the result in y.