ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
diago_lapack.h
Go to the documentation of this file.
1//=====================
2// REFACTORING AUTHOR : Xiaoyang Zhang
3// DATE : 2024-6-24
4//=====================
5
6// This is fully refactored according to original diago_scalapack
7
8#ifndef DIAGOLAPACK_H
9#define DIAGOLAPACK_H
10
11#include "source_base/macros.h" // GetRealType
13#include "source_base/matrix.h"
15
16#include <complex>
17#include <utility>
18#include <vector>
19
20namespace hsolver
21{
22template <typename T>
24{
25 private:
26 using Real = typename GetTypeReal<T>::type;
27
28 public:
29 void diag(hamilt::Hamilt<T>* phm_in, psi::Psi<T>& psi, Real* eigenvalue_in);
30
31 void dsygvx_diag(const int ncol,
32 const int nrow,
33 const double* const h_mat,
34 const double* const s_mat,
35 double* const ekb,
36 psi::Psi<double>& wfc_2d);
37 void zhegvx_diag(const int ncol,
38 const int nrow,
39 const std::complex<double>* const h_mat,
40 const std::complex<double>* const s_mat,
41 double* const ekb,
42 psi::Psi<std::complex<double>>& wfc_2d);
43
44 int dsygvx_once(const int ncol,
45 const int nrow,
46 const double* const h_mat,
47 const double* const s_mat,
48 double* const ekb,
49 psi::Psi<double>& wfc_2d) const;
50 int zhegvx_once(const int ncol,
51 const int nrow,
52 const std::complex<double>* const h_mat,
53 const std::complex<double>* const s_mat,
54 double* const ekb,
55 psi::Psi<std::complex<double>>& wfc_2d) const;
56
57 int degeneracy_max = 12; // For reorthogonalized memory. 12 followes siesta.
58
59 void post_processing(const int info, const std::vector<int>& vec);
60};
61
62} // namespace hsolver
63
64#endif
Definition hamilt.h:16
Definition diago_lapack.h:24
int dsygvx_once(const int ncol, const int nrow, const double *const h_mat, const double *const s_mat, double *const ekb, psi::Psi< double > &wfc_2d) const
Definition diago_lapack.cpp:59
void dsygvx_diag(const int ncol, const int nrow, const double *const h_mat, const double *const s_mat, double *const ekb, psi::Psi< double > &wfc_2d)
Definition diago_lapack.cpp:254
int degeneracy_max
Definition diago_lapack.h:57
void zhegvx_diag(const int ncol, const int nrow, const std::complex< double > *const h_mat, const std::complex< double > *const s_mat, double *const ekb, psi::Psi< std::complex< double > > &wfc_2d)
Definition diago_lapack.cpp:272
void post_processing(const int info, const std::vector< int > &vec)
Definition diago_lapack.cpp:289
int zhegvx_once(const int ncol, const int nrow, const std::complex< double > *const h_mat, const std::complex< double > *const s_mat, double *const ekb, psi::Psi< std::complex< double > > &wfc_2d) const
Definition diago_lapack.cpp:153
void diag(hamilt::Hamilt< T > *phm_in, psi::Psi< T > &psi, Real *eigenvalue_in)
typename GetTypeReal< T >::type Real
Definition diago_lapack.h:26
Definition psi.h:37
Definition diag_comm_info.h:9
Definition exx_lip.h:23
T type
Definition macros.h:8