28 #ifndef PARALUTION_EIGENVALUE_AMPE_SIRA_HPP_
29 #define PARALUTION_EIGENVALUE_AMPE_SIRA_HPP_
32 #include "../solver.hpp"
33 #include "../preconditioners/preconditioner_ai.hpp"
34 #include "../../base/local_matrix.hpp"
35 #include "../iter_ctrl.hpp"
39 template <
class OperatorTypeH,
class VectorTypeH,
typename ValueTypeH,
40 class OperatorTypeL = LocalMatrix<double>,
class VectorTypeL = LocalVector<double>,
typename ValueTypeL =
double>
41 class SIRA :
public Solver <OperatorTypeH, VectorTypeH, ValueTypeH> {
48 virtual void Print(
void)
const;
49 virtual void Build(
void);
51 virtual void Clear(
void);
59 virtual void Init(ValueTypeH abs_tol,
int MaxOuterIter,
int MaxInnerIter);
83 virtual void Solve(
const VectorTypeH & vec_start, VectorTypeH *vec_ans);
86 virtual void Solve(VectorTypeH *
x);
100 virtual void Verbose(
const int verb=1);
104 virtual void Inner();
107 virtual void MvOrthogonalize(OperatorTypeH *mat, VectorTypeH *vec,
const int dim);
116 virtual void Givens(ValueTypeH &c, ValueTypeH &s, ValueTypeH &a, ValueTypeH &
b);
121 virtual void Init(
const ValueTypeH abs_tol,
const ValueTypeH rel_tol,
122 const ValueTypeH div_tol,
const int max_iter);
129 virtual void Build_(
void);
187 #endif // PARALUTION_EIGENVALUE_AMPE_SIRA_HPP_
Factorized Approximate Inverse preconditioner.
Definition: preconditioner_ai.hpp:45
FSAI< LocalMatrix< ValueTypeL >, LocalVector< ValueTypeL >, ValueTypeL > * p_fsai_l_
Definition: ampe_sira.hpp:135
virtual void MvOrthogonalize(OperatorTypeH *mat, VectorTypeH *vec, const int dim)
Orthogonalize vector to a orthogonal matrix.
Definition: ampe_sira.cpp:917
virtual ~SIRA()
Definition: ampe_sira.cpp:160
VectorTypeH Au_
Definition: ampe_sira.hpp:174
OperatorTypeH EigVecs_
Definition: ampe_sira.hpp:170
virtual void SetInnerStoppingCriterion(const int n)
Set the stopping criteria of inner linear solver where 0: constant tolerance 1: H.N. stopping criteria.
int PrecondFlag_
Definition: ampe_sira.hpp:158
virtual void Print(void) const
Print information about the solver.
Definition: ampe_sira.cpp:171
virtual void MoveToAcceleratorLocalData_(void)
Move all local data to the accelerator.
Definition: ampe_sira.cpp:528
int SubDim_
Definition: ampe_sira.hpp:151
ValueTypeH theta_k_
Definition: ampe_sira.hpp:162
Preconditioner< LocalMatrix< ValueTypeH >, LocalVector< ValueTypeH >, ValueTypeH > * p_inner_h_
Preconditioner for inner linear solver.
Definition: ampe_sira.hpp:132
OperatorTypeH * op_h_
Definition: ampe_sira.hpp:165
VectorTypeH u_k_
Definition: ampe_sira.hpp:179
FSAI< LocalMatrix< ValueTypeH >, LocalVector< ValueTypeH >, ValueTypeH > * p_fsai_h_
Definition: ampe_sira.hpp:134
ValueTypeH target_
Definition: ampe_sira.hpp:161
virtual void Build_(void)
Iteration control for iterative solvers, monitor the residual (L2 norm) behavior. ...
Definition: iter_ctrl.hpp:11
virtual void Givens(ValueTypeH &c, ValueTypeH &s, ValueTypeH &a, ValueTypeH &b)
Givens rotation.
Definition: ampe_sira.cpp:1258
virtual void Locking()
Orthogonalize subspace to eigenspace.
Definition: ampe_sira.cpp:805
Preconditioner< LocalMatrix< ValueTypeL >, LocalVector< ValueTypeL >, ValueTypeL > * p_inner_l_
Definition: ampe_sira.hpp:133
int double_count_
Definition: ampe_sira.hpp:157
virtual int GetIterationCount(void)
Return the iteration count.
Definition: ampe_sira.cpp:1291
SIRA()
Definition: ampe_sira.cpp:49
int nnz_
Definition: ampe_sira.hpp:149
CG_HN< OperatorTypeL, VectorTypeL, ValueTypeL > * inner_cg_hn_l_
Definition: ampe_sira.hpp:140
virtual void Eigpair(ValueTypeH &theta_k_)
Solve the eigenpair of small dense matrix.
Definition: ampe_sira.cpp:1032
VectorTypeH s_out_
Definition: ampe_sira.hpp:173
OperatorTypeL * op_l_
Definition: ampe_sira.hpp:166
IterationControl iter_ctrl_
Iteration control (monitor)
Definition: ampe_sira.hpp:143
CG< OperatorTypeH, VectorTypeH, ValueTypeH > * inner_cg_h_
Inner linear solver.
Definition: ampe_sira.hpp:138
virtual void SetNumberOfEigenvalues(const int num)
Definition: ampe_sira.cpp:391
virtual void Clear(void)
Clear (free all local data) the solver.
void RecordResidualHistory(void)
Write the history to file.
Definition: ampe_sira.cpp:1279
CG_HN< OperatorTypeH, VectorTypeH, ValueTypeH > * inner_cg_hn_h_
Definition: ampe_sira.hpp:139
Base preconditioner class.
Definition: preconditioner.hpp:10
OperatorTypeH V_
Definition: ampe_sira.hpp:167
virtual void Init(ValueTypeH abs_tol, int MaxOuterIter, int MaxInnerIter)
Initialize the solver with abs_tol tolerance and number of maximum outer iteration. The maximum number of inner iteration would be default : MaxInnerIter = 0 dim*MaxInnerIter: 0 < MaxInnerIter <= 1 MaxInnerIter : 1 < MaxInnerIter.
Definition: ampe_sira.cpp:465
virtual void MoveToHostLocalData_(void)
Move all local data to the host.
Definition: ampe_sira.cpp:493
int solved_num_
Definition: ampe_sira.hpp:155
VectorTypeL t_out_single_
Definition: ampe_sira.hpp:178
int DoubleFlag_
Definition: ampe_sira.hpp:152
int target_num_
Definition: ampe_sira.hpp:154
Definition: backend_manager.cpp:43
int StoppingCriterionFlag_
Definition: ampe_sira.hpp:153
virtual void SetInnerPreconditioner(Preconditioner< LocalMatrix< ValueTypeH >, LocalVector< ValueTypeH >, ValueTypeH > &p)
Set the inner solver's preocnditioner.
Definition: ampe_sira.cpp:447
virtual void PrintEnd_(void) const
Print ending msg of the solver.
Definition: ampe_sira.cpp:191
VectorTypeH t_out_
Definition: ampe_sira.hpp:177
int dim_
Definition: ampe_sira.hpp:148
virtual void Build(void)
Build the solver (data allocation, structure computation, numerical computation)
Definition: ampe_sira.cpp:200
ValueTypeH r_out_norm_
Definition: ampe_sira.hpp:163
virtual void Restart()
Perform Subspace restrating.
Definition: ampe_sira.cpp:756
const IndexType const IndexType const IndexType const ValueType const ValueType const ValueType * x
Definition: cuda_kernels_coo.hpp:91
OperatorTypeH AV_
Definition: ampe_sira.hpp:168
virtual double GetCurrentResidual(void)
Return the current residual.
Definition: ampe_sira.cpp:1303
virtual int GetSolverStatus(void)
Return the current status.
Definition: ampe_sira.cpp:1315
Definition: ampe_sira.hpp:41
OperatorTypeH VtAV_
Definition: ampe_sira.hpp:169
VectorTypeL r_out_single_
Definition: ampe_sira.hpp:176
VectorTypeL u_k_single_
Definition: ampe_sira.hpp:180
int single_count_
Definition: ampe_sira.hpp:156
The base class for all solvers and preconditioners.
Definition: solver.hpp:12
virtual void PrintStart_(void) const
Print starting msg of the solver.
Definition: ampe_sira.cpp:180
int MaxInnerIter_
Definition: ampe_sira.hpp:159
VectorTypeH tmpUpdateVector_
Definition: ampe_sira.hpp:172
int MaxSubDim_
Definition: ampe_sira.hpp:150
VectorTypeH r_out_
Definition: ampe_sira.hpp:175
virtual void Solve(const VectorTypeH &vec_start, VectorTypeH *vec_ans)
Solve the eigenvalue with initial vector vec_start.
Definition: ampe_sira.cpp:577
virtual void Verbose(const int verb=1)
Provide verbose output of the solver: verb == 0 no output verb == 1 print info about the solver (star...
Definition: ampe_sira.cpp:1327
virtual void Inner()
Solve the inner linear solver.