Bridge++  Version 1.4.4
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
eigensolver_IRLanczos.h
Go to the documentation of this file.
1 
14 #ifndef EIGENSOLVER_IRLANCZOS_INCLUDED
15 #define EIGENSOLVER_IRLANCZOS_INCLUDED
16 
17 #include "eigensolver.h"
18 #include "Fopr/fopr.h"
19 #include "Tools/sorter.h"
20 #include "bridge_complex.h"
21 
22 #include "IO/bridgeIO.h"
23 using Bridge::vout;
24 
25 
27 
41 {
42  public:
43  static const std::string class_name;
44 
45  private:
46 
47  int m_Nk;
48  int m_Np;
50  double m_Enorm_eigen;
51  double m_Vthreshold;
52 
55 
56  public:
58  : Eigensolver(), m_fopr(fopr), m_sorter(0) {}
59 
61  : Eigensolver(), m_fopr(fopr.get()), m_sorter(0) {}
62 
64 
65  void set_parameters(const Parameters& params);
66  void set_parameters(int Nk, int Np, int Niter_eigen, double Enorm_eigen,
67  double Vthreshold);
68  void set_parameters(const std::string& sort_type,
69  int Nk, int Np, int Niter_eigen, double Enorm_eigen,
70  double Vthreshold);
71 
72  void solve(std::vector<double>& TDa, std::vector<Field>& vk,
73  int& Nsbt, int& Nconv, const Field& b);
74 
75  private:
76 
77  void step(int Nm, int k,
78  std::vector<double>& TDa,
79  std::vector<double>& TDb,
80  std::vector<Field>& vk, Field& f);
81 
82  void qrtrf(std::vector<double>& TDa, std::vector<double>& TDb,
83  int Nk, int Nm, std::vector<double>& Qt,
84  double Dsh, int kmin, int kmax);
85 
86  void tqri(std::vector<double>& TDa, std::vector<double>& TDb,
87  int Nk, int Nm, std::vector<double>& Qt);
88 
89  void setUnit_Qt(int Nm, std::vector<double>& Qt);
90 
91  void schmidt_orthogonalization(Field& w, std::vector<Field>& vk, int k);
92 };
93 #endif
void qrtrf(std::vector< double > &TDa, std::vector< double > &TDb, int Nk, int Nm, std::vector< double > &Qt, double Dsh, int kmin, int kmax)
Eigenvalue solver with Implicitly Restarted Lanczos algorithm.
BridgeIO vout
Definition: bridgeIO.cpp:495
Definition: sorter.h:38
Container of Field-type object.
Definition: field.h:39
void solve(std::vector< double > &TDa, std::vector< Field > &vk, int &Nsbt, int &Nconv, const Field &b)
void tqri(std::vector< double > &TDa, std::vector< double > &TDb, int Nk, int Nm, std::vector< double > &Qt)
Class for parameters.
Definition: parameters.h:46
void setUnit_Qt(int Nm, std::vector< double > &Qt)
static const std::string class_name
void set_parameters(const Parameters &params)
Eigensolver_IRLanczos(unique_ptr< Fopr > &fopr)
void step(int Nm, int k, std::vector< double > &TDa, std::vector< double > &TDb, std::vector< Field > &vk, Field &f)
void schmidt_orthogonalization(Field &w, std::vector< Field > &vk, int k)
Eigensolver class for abstract base class of eigen solvers.
Definition: eigensolver.h:29
Base class of fermion operator family.
Definition: fopr.h:47