PARALUTION  1.0.0
PARALUTION
preconditioner_ai.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_PRECONDITIONER_AI_HPP_
2 #define PARALUTION_PRECONDITIONER_AI_HPP_
3 
4 #include "../solver.hpp"
5 #include "preconditioner.hpp"
6 
7 namespace paralution {
8 
13 template <class OperatorType, class VectorType, typename ValueType>
14 class AIChebyshev : public Preconditioner<OperatorType, VectorType, ValueType> {
15 
16 public:
17 
18  AIChebyshev();
19  virtual ~AIChebyshev();
20 
21  virtual void Print(void) const;
22  virtual void Solve(const VectorType &rhs,
23  VectorType *x);
24  virtual void Set(const int p, const ValueType lambda_min, const ValueType lambda_max);
25  virtual void Build(void);
26  virtual void Clear(void);
27 
28 
29 protected:
30 
31  virtual void MoveToHostLocalData_(void);
32  virtual void MoveToAcceleratorLocalData_(void);
33 
34 
35 private:
36 
37  OperatorType AIChebyshev_;
38  int p_;
40 
41 };
42 
44 template <class OperatorType, class VectorType, typename ValueType>
45 class FSAI : public Preconditioner<OperatorType, VectorType, ValueType> {
46 
47 public:
48 
49  FSAI();
50  virtual ~FSAI();
51 
52  virtual void Print(void) const;
53  virtual void Solve(const VectorType &rhs, VectorType *x);
55  virtual void Set(const int power);
57  virtual void Set(const OperatorType &pattern);
58  virtual void Build(void);
59  virtual void Clear(void);
60 
61  virtual void SetPrecondMatrixFormat(const unsigned int mat_format);
62 
63 protected:
64 
65  virtual void MoveToHostLocalData_(void);
66  virtual void MoveToAcceleratorLocalData_(void);
67 
68 private:
69 
70  OperatorType FSAI_L_;
71  OperatorType FSAI_LT_;
72  VectorType t_;
73 
75 
77  const OperatorType *matrix_pattern_;
78 
82  unsigned int precond_mat_format_;
83 
84 };
85 
87 template <class OperatorType, class VectorType, typename ValueType>
88 class SPAI : public Preconditioner<OperatorType, VectorType, ValueType> {
89 
90 public:
91 
92  SPAI();
93  virtual ~SPAI();
94 
95  virtual void Print(void) const;
96  virtual void Solve(const VectorType &rhs, VectorType *x);
97  virtual void Build(void);
98  virtual void Clear(void);
99 
100  virtual void SetPrecondMatrixFormat(const unsigned int mat_format);
101 
102 
103 protected:
104 
105  virtual void MoveToHostLocalData_(void);
106  virtual void MoveToAcceleratorLocalData_(void);
107 
108 
109 private:
110 
111  OperatorType SPAI_;
112 
116  unsigned int precond_mat_format_;
117 
118 };
119 
120 
122 template <class OperatorType, class VectorType, typename ValueType>
123 class TNS : public Preconditioner<OperatorType, VectorType, ValueType> {
124 
125 public:
126 
127  TNS();
128  virtual ~TNS();
129 
130  virtual void Print(void) const;
131  virtual void Set(const bool imp);
132  virtual void Solve(const VectorType &rhs, VectorType *x);
133  virtual void Build(void);
134  virtual void Clear(void);
135 
136  virtual void SetPrecondMatrixFormat(const unsigned int mat_format);
137 
138 
139 protected:
140 
141  virtual void MoveToHostLocalData_(void);
142  virtual void MoveToAcceleratorLocalData_(void);
143 
144 
145 private:
146 
147  OperatorType L_;
148  OperatorType LT_;
149  OperatorType TNS_;
150  VectorType Dinv_;
151 
152  VectorType tmp1_;
153  VectorType tmp2_;
154 
158  unsigned int precond_mat_format_;
160  bool impl_;
161 
162 };
163 
164 
165 }
166 
167 #endif // PARALUTION_PRECONDITIONER_AI_HPP_
bool impl_
implicit (true) or explicit (false) computation
Definition: preconditioner_ai.hpp:160
Factorized Approximate Inverse preconditioner.
Definition: preconditioner_ai.hpp:45
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner_ai.cpp:488
virtual void Set(const int power)
Initialize the FSAI with powered system matrix sparsity pattern.
Definition: preconditioner_ai.cpp:251
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner_ai.cpp:419
bool op_mat_format_
Keep the precond matrix in CSR or not.
Definition: preconditioner_ai.hpp:80
virtual void SetPrecondMatrixFormat(const unsigned int mat_format)
Definition: preconditioner_ai.cpp:337
VectorType tmp2_
Definition: preconditioner_ai.hpp:153
virtual void Set(const bool imp)
Definition: preconditioner_ai.cpp:568
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner_ai.cpp:708
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner_ai.cpp:156
Approximate Inverse - Chebyshev preconditioner see IEEE TRANSACTIONS ON POWER SYSTEMS, VOL. 18, NO. 4, NOVEMBER 2003; A New Preconditioned Conjugate Gradient Power Flow - Hasan Dag, Adam Semlyen.
Definition: preconditioner_ai.hpp:14
VectorType Dinv_
Definition: preconditioner_ai.hpp:150
ValueType lambda_min_
Definition: preconditioner_ai.hpp:39
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner_ai.cpp:39
TNS()
Definition: preconditioner_ai.cpp:528
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner_ai.cpp:577
OperatorType TNS_
Definition: preconditioner_ai.hpp:149
virtual void Set(const int p, const ValueType lambda_min, const ValueType lambda_max)
Definition: preconditioner_ai.cpp:50
VectorType tmp1_
Definition: preconditioner_ai.hpp:152
virtual ~FSAI()
Definition: preconditioner_ai.cpp:227
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner_ai.cpp:167
OperatorType L_
Definition: preconditioner_ai.hpp:147
SParse Approximate Inverse preconditioner.
Definition: preconditioner_ai.hpp:88
virtual ~SPAI()
Definition: preconditioner_ai.cpp:408
Truncated Neumann Series (TNS) Preconditioner.
Definition: preconditioner_ai.hpp:123
OperatorType FSAI_LT_
Definition: preconditioner_ai.hpp:71
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner_ai.cpp:739
VectorType t_
Definition: preconditioner_ai.hpp:72
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner_ai.cpp:189
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner_ai.cpp:178
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner_ai.cpp:377
bool op_mat_format_
Keep the precond matrix in CSR or not.
Definition: preconditioner_ai.hpp:156
void power(const int mic_dev, const int size, const double val, ValueType *vec)
Definition: mic_vector_kernel.cpp:241
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner_ai.cpp:363
OperatorType AIChebyshev_
Definition: preconditioner_ai.hpp:37
Base preconditioner class.
Definition: preconditioner.hpp:10
int p_
Definition: preconditioner_ai.hpp:38
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: preconditioner_ai.cpp:349
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner_ai.cpp:238
OperatorType FSAI_L_
Definition: preconditioner_ai.hpp:70
SPAI()
Definition: preconditioner_ai.cpp:397
bool op_mat_format_
Keep the precond matrix in CSR or not.
Definition: preconditioner_ai.hpp:114
virtual ~AIChebyshev()
Definition: preconditioner_ai.cpp:29
virtual void Solve(const VectorType &rhs, VectorType *x)
Solve Operator x = rhs.
Definition: preconditioner_ai.cpp:509
virtual void SetPrecondMatrixFormat(const unsigned int mat_format)
Definition: preconditioner_ai.cpp:477
Definition: backend_manager.cpp:43
int matrix_power_
Definition: preconditioner_ai.hpp:74
unsigned int precond_mat_format_
Precond matrix format.
Definition: preconditioner_ai.hpp:116
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
unsigned int precond_mat_format_
Precond matrix format.
Definition: preconditioner_ai.hpp:82
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner_ai.cpp:310
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner_ai.cpp:278
OperatorType LT_
Definition: preconditioner_ai.hpp:148
virtual void Print(void) const
Print information about the solver.
Definition: preconditioner_ai.cpp:552
OperatorType SPAI_
Definition: preconditioner_ai.hpp:111
virtual ~TNS()
Definition: preconditioner_ai.cpp:541
AIChebyshev()
Definition: preconditioner_ai.cpp:17
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner_ai.cpp:430
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: preconditioner_ai.cpp:69
unsigned int precond_mat_format_
Precond matrix format.
Definition: preconditioner_ai.hpp:158
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner_ai.cpp:498
ValueType lambda_max_
Definition: preconditioner_ai.hpp:39
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner_ai.cpp:458
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: preconditioner_ai.cpp:723
virtual void SetPrecondMatrixFormat(const unsigned int mat_format)
Definition: preconditioner_ai.cpp:697
bool external_pattern_
Definition: preconditioner_ai.hpp:76
FSAI()
Definition: preconditioner_ai.cpp:211
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: preconditioner_ai.cpp:671
const OperatorType * matrix_pattern_
Definition: preconditioner_ai.hpp:77