PARALUTION  1.0.0
PARALUTION
preconditioner.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_PRECONDITIONER_HPP_
2 #define PARALUTION_PRECONDITIONER_HPP_
3 
4 #include "../solver.hpp"
5 
6 namespace paralution {
7 
9 template <class OperatorType, class VectorType, typename ValueType>
10 class Preconditioner : public Solver<OperatorType, VectorType, ValueType> {
11 
12 public:
13 
15  virtual ~Preconditioner();
16 
17  virtual void SolveZeroSol(const VectorType &rhs,
18  VectorType *x);
19 
20 protected:
21 
22  virtual void PrintStart_(void) const;
23  virtual void PrintEnd_(void) const;
24 
25 
26 };
27 
29 template <class OperatorType, class VectorType, typename ValueType>
30 class Jacobi : public Preconditioner<OperatorType, VectorType, ValueType> {
31 
32 public:
33 
34  Jacobi();
35  virtual ~Jacobi();
36 
37  virtual void Print(void) const;
38  virtual void Solve(const VectorType &rhs,
39  VectorType *x);
40  virtual void Build(void);
41  virtual void Clear(void);
42 
43  virtual void ResetOperator(const OperatorType &op);
44 
45 protected:
46 
47  virtual void MoveToHostLocalData_(void);
48  virtual void MoveToAcceleratorLocalData_(void) ;
49 
50 
51 private:
52 
53  VectorType inv_diag_entries_;
54 
55 };
56 
58 template <class OperatorType, class VectorType, typename ValueType>
59 class GS : public Preconditioner<OperatorType, VectorType, ValueType> {
60 
61 public:
62 
63  GS();
64  virtual ~GS();
65 
66  virtual void Print(void) const;
67  virtual void Solve(const VectorType &rhs,
68  VectorType *x);
69  virtual void Build(void);
70  virtual void Clear(void);
71 
72  virtual void ResetOperator(const OperatorType &op);
73 
74 protected:
75 
76  virtual void MoveToHostLocalData_(void);
77  virtual void MoveToAcceleratorLocalData_(void);
78 
79 
80 private:
81 
82  OperatorType GS_;
83 
84 };
85 
87 template <class OperatorType, class VectorType, typename ValueType>
88 class SGS : public Preconditioner<OperatorType, VectorType, ValueType> {
89 
90 public:
91 
92  SGS();
93  virtual ~SGS();
94 
95  virtual void Print(void) const;
96  virtual void Solve(const VectorType &rhs,
97  VectorType *x);
98  virtual void Build(void);
99  virtual void Clear(void);
100 
101  virtual void ResetOperator(const OperatorType &op);
102 
103 protected:
104 
105  virtual void MoveToHostLocalData_(void);
106  virtual void MoveToAcceleratorLocalData_(void);
107 
108 
109 private:
110 
111  OperatorType SGS_;
112 
113  VectorType diag_entries_;
114  VectorType v_;
115 
116 };
117 
119 template <class OperatorType, class VectorType, typename ValueType>
120 class ILU : public Preconditioner<OperatorType, VectorType, ValueType> {
121 
122 public:
123 
124  ILU();
125  virtual ~ILU();
126 
127  virtual void Print(void) const;
128  virtual void Solve(const VectorType &rhs,
129  VectorType *x);
130 
136  virtual void Set(const int p, const bool level=true);
137  virtual void Build(void);
138  virtual void Clear(void);
139 
140 
141 protected:
142 
143  virtual void MoveToHostLocalData_(void);
144  virtual void MoveToAcceleratorLocalData_(void);
145 
146 
147 private:
148 
149  OperatorType ILU_;
150  int p_;
151  bool level_;
152 
153 };
154 
157 template <class OperatorType, class VectorType, typename ValueType>
158 class ILUT : public Preconditioner<OperatorType, VectorType, ValueType> {
159 
160 public:
161 
162  ILUT();
163  virtual ~ILUT();
164 
165  virtual void Print(void) const;
166  virtual void Solve(const VectorType &rhs,
167  VectorType *x);
168 
170  virtual void Set(const double t);
171 
173  virtual void Set(const double t, const int maxrow);
174 
175  virtual void Build(void);
176  virtual void Clear(void);
177 
178 
179 protected:
180 
181  virtual void MoveToHostLocalData_(void);
182  virtual void MoveToAcceleratorLocalData_(void);
183 
184 
185 private:
186 
187  OperatorType ILUT_;
188  double t_;
189  int max_row_;
190 
191 };
192 
194 template <class OperatorType, class VectorType, typename ValueType>
195 class IC : public Preconditioner<OperatorType, VectorType, ValueType> {
196 
197 public:
198 
199  IC();
200  virtual ~IC();
201 
202  virtual void Print(void) const;
203  virtual void Solve(const VectorType &rhs,
204  VectorType *x);
205  virtual void Build(void);
206  virtual void Clear(void);
207 
208 
209 protected:
210 
211  virtual void MoveToHostLocalData_(void);
212  virtual void MoveToAcceleratorLocalData_(void);
213 
214 
215 private:
216 
217  OperatorType IC_;
218  VectorType inv_diag_entries_;
219 
220 };
221 
222 
223 }
224 
225 #endif // PARALUTION_PRECONDITIONER_HPP_
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner.cpp:79
OperatorType ILU_
Definition: preconditioner.hpp:149
virtual ~SGS()
Definition: preconditioner.cpp:317
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner.cpp:199
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner.cpp:485
virtual ~GS()
Definition: preconditioner.cpp:189
OperatorType SGS_
Definition: preconditioner.hpp:111
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner.cpp:839
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner.cpp:762
VectorType inv_diag_entries_
Definition: preconditioner.hpp:53
Incomplete Cholesky with no fill-ins IC0.
Definition: preconditioner.hpp:195
virtual ~Jacobi()
Definition: preconditioner.cpp:62
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner.cpp:708
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner.cpp:391
Definition: preconditioner.hpp:30
Jacobi()
Definition: preconditioner.cpp:54
virtual ~IC()
Definition: preconditioner.cpp:752
VectorType diag_entries_
Definition: preconditioner.hpp:113
virtual void SolveZeroSol(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs; but set first the init x = 0.
Definition: preconditioner.cpp:42
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner.cpp:774
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner.cpp:698
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner.cpp:206
Preconditioner()
Definition: preconditioner.cpp:16
virtual void ResetOperator(const OperatorType &op)
Reset the operator; see ReBuildNumeric.
Definition: preconditioner.cpp:232
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner.cpp:816
double t_
Definition: preconditioner.hpp:188
OperatorType IC_
Definition: preconditioner.hpp:217
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner.cpp:512
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner.cpp:167
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner.cpp:619
ILUT(t,m) preconditioner based on threshold and maximum number of elements per row.
Definition: preconditioner.hpp:158
int p_
Definition: preconditioner.hpp:150
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner.cpp:119
virtual ~ILUT()
Definition: preconditioner.cpp:609
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner.cpp:562
virtual void ResetOperator(const OperatorType &op)
Reset the operator; see ReBuildNumeric.
Definition: preconditioner.cpp:104
GS()
Definition: preconditioner.cpp:181
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner.cpp:660
virtual void PrintStart_(void) const
Print starting msg of the solver.
Definition: preconditioner.cpp:32
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner.cpp:551
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner.cpp:574
virtual ~Preconditioner()
Definition: preconditioner.cpp:24
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner.cpp:719
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner.cpp:334
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner.cpp:408
bool level_
Definition: preconditioner.hpp:151
Base preconditioner class.
Definition: preconditioner.hpp:10
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner.cpp:443
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner.cpp:803
virtual void PrintEnd_(void) const
Print ending msg of the solver.
Definition: preconditioner.cpp:37
SGS()
Definition: preconditioner.cpp:309
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner.cpp:130
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner.cpp:539
Gauss-Seidel (GS) preconditioner.
Definition: preconditioner.hpp:59
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner.cpp:827
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner.cpp:327
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner.cpp:686
VectorType v_
Definition: preconditioner.hpp:114
IC()
Definition: preconditioner.cpp:744
Definition: backend_manager.cpp:43
ILU()
Definition: preconditioner.cpp:464
virtual ~ILU()
Definition: preconditioner.cpp:475
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
OperatorType ILUT_
Definition: preconditioner.hpp:187
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner.cpp:280
OperatorType GS_
Definition: preconditioner.hpp:82
The base class for all solvers and preconditioners.
Definition: solver.hpp:12
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner.cpp:157
Symmetric Gauss-Seidel (SGS) preconditioner.
Definition: preconditioner.hpp:88
virtual void Set(const int p, const bool level=true)
Initialize ILU(p) factorization based on power (see power(q)-pattern method, D. Lukarski "Parallel Sp...
Definition: preconditioner.cpp:496
ILUT()
Definition: preconditioner.cpp:597
virtual void Set(const double t)
ILUT with threshold.
Definition: preconditioner.cpp:630
ILU preconditioner based on levels.
Definition: preconditioner.hpp:120
virtual void ResetOperator(const OperatorType &op)
Reset the operator; see ReBuildNumeric.
Definition: preconditioner.cpp:366
VectorType inv_diag_entries_
Definition: preconditioner.hpp:218
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner.cpp:262
int max_row_
Definition: preconditioner.hpp:189
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner.cpp:292
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner.cpp:428
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner.cpp:248
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner.cpp:72