23 bool is_gamma_only =
false)
override {
28 int diagonalization_type = 1;
32 const int matrix_elements = basis_size * basis_size;
46 if (hamiltonian_matrix != eigenvector_matrix) {
48 hamiltonian_matrix, hamiltonian_matrix + matrix_elements, eigenvector_matrix);
50 auto* h_real =
reinterpret_cast<double*
>(eigenvector_matrix);
51 auto* s_real =
reinterpret_cast<double*
>(overlap_matrix);
52 for (
int i = 0; i < matrix_elements; ++i) {
53 h_real[i] = eigenvector_matrix[i].real();
54 s_real[i] = overlap_matrix[i].real();
72 lwork =
static_cast<int>(work_query);
73 std::vector<double> work(lwork);
88 for (
int i = matrix_elements - 1; i >= 0; --i) {
89 eigenvector_matrix[i] =
Complex(h_real[i], 0.0);
98 if (hamiltonian_matrix != eigenvector_matrix) {
100 hamiltonian_matrix, hamiltonian_matrix + matrix_elements, eigenvector_matrix);
106 std::vector<Real> rwork(std::max(1, 3 * basis_size - 2));
108 auto* cast_eigenvectors =
reinterpret_cast<std::complex<double>*
>(eigenvector_matrix);
109 auto* cast_overlap =
reinterpret_cast<std::complex<double>*
>(overlap_matrix);
110 auto* cast_work_query =
reinterpret_cast<std::complex<double>*
>(&work_query);
126 lwork =
static_cast<int>(work_query.real());
127 std::vector<Complex> work(lwork);
128 auto* cast_work =
reinterpret_cast<std::complex<double>*
>(work.data());
148 std::string
name()
const override {
149 return "Serial (LAPACK)";
int solve(int basis_size, Complex *hamiltonian_matrix, Complex *overlap_matrix, Real *eigenvalues, Complex *eigenvector_matrix, bool is_gamma_only=false) override
std::string name() const override
void zhegv_(const int *itype, const char *jobz, const char *uplo, const int *n, std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb, double *w, std::complex< double > *work, const int *lwork, double *rwork, int *info)
void dsygv_(const int *itype, const char *jobz, const char *uplo, const int *n, double *a, const int *lda, double *b, const int *ldb, double *w, double *work, const int *lwork, int *info)
std::complex< double > Complex