ABACUS develop
Atomic-orbital Based Ab-initio Computation at UStc
Loading...
Searching...
No Matches
diago_scalapack.h
Go to the documentation of this file.
1//=====================
2// AUTHOR : Peize Lin
3// DATE : 2021-11-02
4// REFACTORING AUTHOR : Daye Zheng
5// DATE : 2022-04-14
6//=====================
7
8#ifndef DIAGO_SCALAPACK_H
9#define DIAGO_SCALAPACK_H
10
11#include <complex>
12#include <utility>
13#include <vector>
14
15#include "source_base/macros.h" // GetRealType
17#include "source_psi/psi.h"
19#include "source_base/matrix.h"
21
22namespace hsolver
23{
24 template<typename T>
26{
27private:
28 using Real = typename GetTypeReal<T>::type;
29 public:
30 void diag(hamilt::Hamilt<T>* phm_in, psi::Psi<T>& psi, Real* eigenvalue_in);
31#ifdef __MPI
32 // diagnolization used in parallel-k case
33 void diag_pool(hamilt::MatrixBlock<T>& h_mat, hamilt::MatrixBlock<T>& s_mat, psi::Psi<T>& psi, Real* eigenvalue_in, MPI_Comm& comm);
34#endif
35
36 private:
37 void pdsygvx_diag(const int *const desc,
38 const int ncol,
39 const int nrow,
40 const double *const h_mat,
41 const double *const s_mat,
42 double *const ekb,
43 psi::Psi<double> &wfc_2d);
44 void pzhegvx_diag(const int *const desc,
45 const int ncol,
46 const int nrow,
47 const std::complex<double> *const h_mat,
48 const std::complex<double> *const s_mat,
49 double *const ekb,
50 psi::Psi<std::complex<double>> &wfc_2d);
51
52 std::pair<int, std::vector<int>> pdsygvx_once(const int *const desc,
53 const int ncol,
54 const int nrow,
55 const double *const h_mat,
56 const double *const s_mat,
57 double *const ekb,
58 psi::Psi<double> &wfc_2d) const;
59 std::pair<int, std::vector<int>> pzhegvx_once(const int *const desc,
60 const int ncol,
61 const int nrow,
62 const std::complex<double> *const h_mat,
63 const std::complex<double> *const s_mat,
64 double *const ekb,
65 psi::Psi<std::complex<double>> &wfc_2d) const;
66
67 int degeneracy_max = 12; // For reorthogonalized memory. 12 followes siesta.
68
69 void post_processing(const int info, const std::vector<int> &vec);
70};
71
72} // namespace hsolver
73
74#endif
Definition hamilt.h:16
Definition diago_scalapack.h:26
void post_processing(const int info, const std::vector< int > &vec)
Definition diago_scalapack.cpp:380
void pdsygvx_diag(const int *const desc, 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_scalapack.cpp:342
void pzhegvx_diag(const int *const desc, 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_scalapack.cpp:361
std::pair< int, std::vector< int > > pzhegvx_once(const int *const desc, 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_scalapack.cpp:206
void diag_pool(hamilt::MatrixBlock< T > &h_mat, hamilt::MatrixBlock< T > &s_mat, psi::Psi< T > &psi, Real *eigenvalue_in, MPI_Comm &comm)
typename GetTypeReal< T >::type Real
Definition diago_scalapack.h:28
std::pair< int, std::vector< int > > pdsygvx_once(const int *const desc, 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_scalapack.cpp:81
int degeneracy_max
Definition diago_scalapack.h:67
void diag(hamilt::Hamilt< T > *phm_in, psi::Psi< T > &psi, Real *eigenvalue_in)
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