PARALUTION  1.0.0
PARALUTION
base_amg.hpp
Go to the documentation of this file.
1 #ifndef PARALUTION_BASE_AMG_HPP_
2 #define PARALUTION_BASE_AMG_HPP_
3 
4 #include "../solver.hpp"
5 #include "base_multigrid.hpp"
6 
7 #include <vector>
8 
9 namespace paralution {
10 
11 template <class OperatorType, class VectorType, typename ValueType>
12 class BaseAMG : public BaseMultiGrid<OperatorType, VectorType, ValueType> {
13 
14 public:
15 
16  BaseAMG();
17  virtual ~BaseAMG();
18 
19  virtual void Build(void);
20  virtual void Clear(void);
21  virtual void ClearLocal(void);
22 
24  virtual void BuildHierarchy(void);
25 
27  virtual void BuildSmoothers(void);
28 
30  virtual void SetCoarsestLevel(const int coarseSize);
31 
33  virtual void SetManualSmoothers(const bool sm_manual);
35  virtual void SetManualSolver(const bool s_manual);
36 
38  virtual void SetDefaultSmootherFormat(const unsigned int op_format);
40  virtual void SetOperatorFormat(const unsigned int op_format);
41 
43  virtual int GetNumLevels();
44 
46  virtual void SetRestrictOperator(OperatorType **op);
48  virtual void SetProlongOperator(OperatorType **op);
50  virtual void SetOperatorHierarchy(OperatorType **op);
51 
52 protected:
53 
55  virtual void Aggregate(const OperatorType &op,
58  OperatorType *coarse) = 0;
59 
60 
63 
65  bool set_sm_;
67 
69  bool set_s_;
70 
72  bool hierarchy_;
73 
75  unsigned int sm_format_;
77  unsigned int op_format_;
78 
79 };
80 
81 
82 }
83 
84 #endif // PARALUTION_BASE_AMG_HPP_
virtual void SetOperatorFormat(const unsigned int op_format)
Sets the operator format.
Definition: base_amg.cpp:101
virtual void BuildHierarchy(void)
Creates AMG hierarchy.
Definition: base_amg.cpp:256
int coarse_size_
maximal coarse grid size
Definition: base_amg.hpp:62
virtual void SetManualSolver(const bool s_manual)
Sets flag to pass coarse grid solver manually.
Definition: base_amg.cpp:77
bool set_s_
manual coarse grid solver or not
Definition: base_amg.hpp:69
unsigned int sm_format_
smoother operator format
Definition: base_amg.hpp:75
virtual void Aggregate(const OperatorType &op, Operator< ValueType > *pro, Operator< ValueType > *res, OperatorType *coarse)=0
Constructs the prolongation, restriction and coarse operator.
virtual void SetDefaultSmootherFormat(const unsigned int op_format)
Sets the smoother operator format.
Definition: base_amg.cpp:89
bool hierarchy_
true if hierarchy is built
Definition: base_amg.hpp:72
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: base_amg.cpp:120
virtual void Clear(void)
Clear (free all local data) the solver.
Definition: base_amg.cpp:377
Definition: base_amg.hpp:12
virtual void SetProlongOperator(OperatorType **op)
disabled function
Definition: base_amg.cpp:472
virtual void SetOperatorHierarchy(OperatorType **op)
disabled function
Definition: base_amg.cpp:480
BaseAMG()
Definition: base_amg.cpp:17
Operator class defines the generic interface for applying an operator (e.g. matrix, stencil) from/to global and local vectors.
Definition: operator.hpp:19
Definition: backend_manager.cpp:43
virtual void BuildSmoothers(void)
Creates AMG smoothers.
Definition: base_amg.cpp:345
virtual void SetManualSmoothers(const bool sm_manual)
Sets flag to pass smoothers manually for each level.
Definition: base_amg.cpp:65
bool set_sm_
manual smoother or not
Definition: base_amg.hpp:65
The base class for all solvers and preconditioners.
Definition: solver.hpp:12
virtual ~BaseAMG()
Definition: base_amg.cpp:42
Definition: base_multigrid.hpp:17
virtual int GetNumLevels()
Returns the number of levels in hierarchy.
Definition: base_amg.cpp:111
unsigned int op_format_
operator format
Definition: base_amg.hpp:77
virtual void ClearLocal(void)
Definition: base_amg.cpp:460
Solver< OperatorType, VectorType, ValueType > ** sm_default_
Definition: base_amg.hpp:66
virtual void SetRestrictOperator(OperatorType **op)
disabled function
Definition: base_amg.cpp:464
virtual void SetCoarsestLevel(const int coarseSize)
Sets coarsest level for hierarchy creation.
Definition: base_amg.cpp:52