1 #ifndef PARALUTION_PRECONDITIONER_MULTICOLORED_HPP_
2 #define PARALUTION_PRECONDITIONER_MULTICOLORED_HPP_
4 #include "../solver.hpp"
6 #include "../../base/local_vector.hpp"
12 template <
class OperatorType,
class VectorType,
typename ValueType>
20 virtual void Clear(
void);
22 virtual void Build(
void);
31 virtual void Solve(
const VectorType &rhs,
72 virtual void Solve_(
const VectorType &rhs,
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