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 #ifdef __MPI
31 // diagnolization used in parallel-k case
32 void diag_pool(hamilt::MatrixBlock<T>& h_mat, hamilt::MatrixBlock<T>& s_mat, psi::Psi<T>& psi, Real* eigenvalue_in, MPI_Comm& comm);
33#endif
34
35 void dsygvx_diag(const int ncol,
36 const int nrow,
37 const double* const h_mat,
38 const double* const s_mat,
39 double* const ekb,
40 psi::Psi<double>& wfc_2d);
41 void zhegvx_diag(const int ncol,
42 const int nrow,
43 const std::complex<double>* const h_mat,
44 const std::complex<double>* const s_mat,
45 double* const ekb,
46 psi::Psi<std::complex<double>>& wfc_2d);
47
48 std::pair<int, std::vector<int>> dsygvx_once(const int ncol,
49 const int nrow,
50 const double* const h_mat,
51 const double* const s_mat,
52 double* const ekb,
53 psi::Psi<double>& wfc_2d) const;
54 std::pair<int, std::vector<int>> zhegvx_once(const int ncol,
55 const int nrow,
56 const std::complex<double>* const h_mat,
57 const std::complex<double>* const s_mat,
58 double* const ekb,
59 psi::Psi<std::complex<double>>& wfc_2d) const;
60
61 int degeneracy_max = 12; // For reorthogonalized memory. 12 followes siesta.
62
63 void post_processing(const int info, const std::vector<int>& vec);
64};
65
66} // namespace hsolver
67
68#endif
Definition hamilt.h:16
Definition diago_lapack.h:24
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:312
std::pair< int, std::vector< 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:194
int degeneracy_max
Definition diago_lapack.h:61
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:330
void post_processing(const int info, const std::vector< int > &vec)
Definition diago_lapack.cpp:348
void diag(hamilt::Hamilt< T > *phm_in, psi::Psi< T > &psi, Real *eigenvalue_in)
void diag_pool(hamilt::MatrixBlock< T > &h_mat, hamilt::MatrixBlock< T > &s_mat, psi::Psi< T > &psi, Real *eigenvalue_in, MPI_Comm &comm)
std::pair< int, std::vector< 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:85
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
Definition matrixblock.h:9