PARALUTION  1.0.0
PARALUTION
preconditioner_multielimination.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_PRECONDITIONER_MULTIELIMINATION_HPP_
2 #define PARALUTION_PRECONDITIONER_MULTIELIMINATION_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 
15 template <class OperatorType, class VectorType, typename ValueType>
16 class MultiElimination : public Preconditioner<OperatorType, VectorType, ValueType> {
17 
18 public:
19 
21  virtual ~MultiElimination();
22 
24  inline int get_size_diag_block(void) const { return this->size_; }
25 
27  inline int get_level(void) const { return this->level_; }
28 
29  virtual void Print(void) const;
30  virtual void Clear(void);
31 
35  virtual void Set(Solver<OperatorType, VectorType, ValueType> &AA_Solver,
36  const int level, const double drop_off = double(0.0));
37 
40  virtual void SetPrecondMatrixFormat(const unsigned int mat_format);
41 
42  virtual void Build(void);
43 
44  virtual void Solve(const VectorType &rhs,
45  VectorType *x);
46 
47 protected:
48 
52  OperatorType A_;
54  OperatorType D_;
55  OperatorType E_,F_,C_;
57  OperatorType AA_;
58 
61 
65  unsigned int precond_mat_format_;
66 
67  VectorType x_;
68  VectorType x_1_;
69  VectorType x_2_;
70 
71  VectorType rhs_;
72  VectorType rhs_1_;
73  VectorType rhs_2_;
74 
77 
79  int level_;
80  double drop_off_;
81 
82  VectorType inv_vec_D_;
83  VectorType vec_D_;
85  int size_;
86 
87  virtual void MoveToHostLocalData_(void);
88  virtual void MoveToAcceleratorLocalData_(void);
89 
90 };
91 
92 
93 }
94 
95 #endif // PARALUTION_PRECONDITIONER_MULTIELIMINATION_HPP_
OperatorType A_
A_ is decomposed into , where ; ;.
Definition: preconditioner_multielimination.hpp:52
virtual void Set(Solver< OperatorType, VectorType, ValueType > &AA_Solver, const int level, const double drop_off=double(0.0))
Initialize (recursively) ME-ILU with level (defines the depth of recursion); AA_Solvers - defines the...
Definition: preconditioner_multielimination.cpp:130
int AA_nnz_
Definition: preconditioner_multielimination.hpp:60
OperatorType C_
Definition: preconditioner_multielimination.hpp:55
VectorType x_1_
Definition: preconditioner_multielimination.hpp:68
VectorType vec_D_
Definition: preconditioner_multielimination.hpp:83
VectorType x_
Definition: preconditioner_multielimination.hpp:67
int AA_nrow_
The sizes of the AA_ matrix.
Definition: preconditioner_multielimination.hpp:60
int level_
Definition: preconditioner_multielimination.hpp:79
double drop_off_
Definition: preconditioner_multielimination.hpp:80
OperatorType D_
Diagonal part.
Definition: preconditioner_multielimination.hpp:54
LocalVector< int > permutation_
Definition: preconditioner_multielimination.hpp:84
VectorType x_2_
Definition: preconditioner_multielimination.hpp:69
unsigned int precond_mat_format_
Precond matrix format.
Definition: preconditioner_multielimination.hpp:65
int get_size_diag_block(void) const
Returns the size of the first (diagonal) block of the preconditioner.
Definition: preconditioner_multielimination.hpp:24
bool op_mat_format_
Keep the precond matrix in CSR or not.
Definition: preconditioner_multielimination.hpp:63
Base preconditioner class.
Definition: preconditioner.hpp:10
OperatorType F_
Definition: preconditioner_multielimination.hpp:55
MultiElimination< OperatorType, VectorType, ValueType > * AA_me_
Definition: preconditioner_multielimination.hpp:75
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner_multielimination.cpp:108
VectorType rhs_1_
Definition: preconditioner_multielimination.hpp:72
bool diag_solver_init_
Definition: preconditioner_multielimination.hpp:78
virtual ~MultiElimination()
Definition: preconditioner_multielimination.cpp:40
MultiElimination()
Definition: preconditioner_multielimination.cpp:18
int size_
Definition: preconditioner_multielimination.hpp:85
int get_level(void) const
Return the depth of the current level.
Definition: preconditioner_multielimination.hpp:27
Definition: backend_manager.cpp:43
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner_multielimination.cpp:311
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner_multielimination.cpp:364
VectorType inv_vec_D_
Definition: preconditioner_multielimination.hpp:82
The base class for all solvers and preconditioners.
Definition: solver.hpp:12
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner_multielimination.cpp:157
VectorType rhs_
Definition: preconditioner_multielimination.hpp:71
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner_multielimination.cpp:397
OperatorType AA_
;
Definition: preconditioner_multielimination.hpp:57
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_multielimination.cpp:146
Solver< OperatorType, VectorType, ValueType > * AA_solver_
Definition: preconditioner_multielimination.hpp:76
OperatorType E_
Definition: preconditioner_multielimination.hpp:55
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner_multielimination.cpp:50
MultiElimination (I)LU factorization (see 12.5.1 Multi-Elimination ILU from "Iterative Methods for Sp...
Definition: preconditioner_multielimination.hpp:16
VectorType rhs_2_
Definition: preconditioner_multielimination.hpp:73