PARALUTION  1.0.0
PARALUTION
preconditioner_multicolored.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_PRECONDITIONER_MULTICOLORED_HPP_
2 #define PARALUTION_PRECONDITIONER_MULTICOLORED_HPP_
3 
4 #include "../solver.hpp"
5 #include "preconditioner.hpp"
6 #include "../../base/local_vector.hpp"
7 
8 #include <vector>
9 
10 namespace paralution {
11 
12 template <class OperatorType, class VectorType, typename ValueType>
13 class MultiColored : public Preconditioner<OperatorType, VectorType, ValueType> {
14 
15 public:
16 
17  MultiColored();
18  virtual ~MultiColored();
19 
20  virtual void Clear(void);
21 
22  virtual void Build(void);
23 
26  virtual void SetPrecondMatrixFormat(const unsigned int mat_format);
27 
29  virtual void SetDecomposition(const bool decomp);
30 
31  virtual void Solve(const VectorType &rhs,
32  VectorType *x);
33 
34 protected:
35 
36  OperatorType *analyzer_op_;
37  OperatorType *preconditioner_;
38 
39  OperatorType ***preconditioner_block_;
40 
41  VectorType **x_block_;
42  VectorType **diag_block_;
43  VectorType x_;
44  VectorType diag_;
45 
47 
50 
54  unsigned int precond_mat_format_;
55 
57  bool decomp_;
58 
61  virtual void ExtractRHSinX_(const VectorType &rhs,
62  VectorType *x);
63 
65  virtual void SolveL_(void) = 0;
67  virtual void SolveD_(void) = 0;
69  virtual void SolveR_(void) = 0;
70 
72  virtual void Solve_(const VectorType &rhs,
73  VectorType *x) = 0;
74 
76  virtual void InsertSolution_(VectorType *x);
77 
78 
80  virtual void Build_Analyser_(void);
82  virtual void Analyse_(void);
84  virtual void Permute_(void);
86  virtual void Factorize_(void);
89  virtual void Decompose_(void);
91  virtual void PostAnalyse_(void);
92 
93  virtual void MoveToHostLocalData_(void);
94  virtual void MoveToAcceleratorLocalData_(void) ;
95 
96 };
97 
98 
99 }
100 
101 #endif // PARALUTION_PRECONDITIONER_MULTICOLORED_HPP_
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner_multicolored.cpp:454
virtual void SolveR_(void)=0
Solve the upper-trianguler (right) matrix.
VectorType ** diag_block_
Definition: preconditioner_multicolored.hpp:42
virtual void Solve_(const VectorType &rhs, VectorType *x)=0
Solve directly without block decomposition.
VectorType x_
Definition: preconditioner_multicolored.hpp:43
virtual void SolveD_(void)=0
Solve the diagonal part (only for SGS)
virtual void InsertSolution_(VectorType *x)
Insert the solution with backward permutation (from x_block_[])
Definition: preconditioner_multicolored.cpp:393
virtual void PostAnalyse_(void)
Post-analyzing if the preconditioner is not decomposed.
Definition: preconditioner_multicolored.cpp:327
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner_multicolored.cpp:420
virtual void Permute_(void)
Permute the preconditioning matrix.
Definition: preconditioner_multicolored.cpp:169
virtual void Build_Analyser_(void)
Build the analyzing matrix.
Definition: preconditioner_multicolored.cpp:129
virtual void SetDecomposition(const bool decomp)
Set if the preconditioner should be decomposed or not.
Definition: preconditioner_multicolored.cpp:118
bool decomp_
Decompose the preconditioner into blocks or not.
Definition: preconditioner_multicolored.hpp:57
MultiColored()
Definition: preconditioner_multicolored.cpp:18
unsigned int precond_mat_format_
Precond matrix format.
Definition: preconditioner_multicolored.hpp:54
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner_multicolored.cpp:331
virtual ~MultiColored()
Definition: preconditioner_multicolored.cpp:37
bool op_mat_format_
Keep the precond matrix in CSR or not.
Definition: preconditioner_multicolored.hpp:52
Base preconditioner class.
Definition: preconditioner.hpp:10
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner_multicolored.cpp:48
virtual void Analyse_(void)
Analyse the matrix (i.e. multi-coloring decomposition)
Definition: preconditioner_multicolored.cpp:146
virtual void ExtractRHSinX_(const VectorType &rhs, VectorType *x)
Extract the rhs into x under the permutation (see Analyse_()) and decompose x into block (x_block_[])...
Definition: preconditioner_multicolored.cpp:367
Solver< OperatorType, VectorType, ValueType > ** diag_solver_
Definition: preconditioner_multicolored.hpp:46
virtual void SolveL_(void)=0
Solve the lower-triangular (left) matrix.
VectorType ** x_block_
Definition: preconditioner_multicolored.hpp:41
OperatorType * analyzer_op_
Definition: preconditioner_multicolored.hpp:36
OperatorType * preconditioner_
Definition: preconditioner_multicolored.hpp:37
OperatorType *** preconditioner_block_
Definition: preconditioner_multicolored.hpp:39
Definition: backend_manager.cpp:43
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
The base class for all solvers and preconditioners.
Definition: solver.hpp:12
int * block_sizes_
Definition: preconditioner_multicolored.hpp:49
int num_blocks_
Definition: preconditioner_multicolored.hpp:48
virtual void SetPrecondMatrixFormat(const unsigned int mat_format)
Set a specific matrix type of the decomposed block matrices; if not set, CSR matrix format will be us...
Definition: preconditioner_multicolored.cpp:107
VectorType diag_
Definition: preconditioner_multicolored.hpp:44
virtual void Decompose_(void)
Decompose the structure into blocks (preconditioner_block_[] for the preconditioning matrix; and x_bl...
Definition: preconditioner_multicolored.cpp:186
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner_multicolored.cpp:283
virtual void Factorize_(void)
Factorize (i.e. build the preconditioner)
Definition: preconditioner_multicolored.cpp:182
Definition: preconditioner_multicolored.hpp:13