DavidsonSymEigsSolver.h
Go to the documentation of this file.
1 // Copyright (C) 2020 Netherlands eScience Center <f.zapata@esciencecenter.nl>
2 //
3 // This Source Code Form is subject to the terms of the Mozilla
4 // Public License v. 2.0. If a copy of the MPL was not distributed
5 // with this file, You can obtain one at https://mozilla.org/MPL/2.0/.
6 
7 #ifndef SPECTRA_DAVIDSON_SYM_EIGS_SOLVER_H
8 #define SPECTRA_DAVIDSON_SYM_EIGS_SOLVER_H
9 
10 #include <Eigen/Core>
11 
12 #include "JDSymEigsBase.h"
13 #include "Util/SelectionRule.h"
14 
15 namespace Spectra {
16 
30 template <typename OpType>
31 class DavidsonSymEigsSolver : public JDSymEigsBase<DavidsonSymEigsSolver<OpType>, OpType>
32 {
33 private:
35  using Scalar = typename OpType::Scalar;
38 
40 
41 public:
42  DavidsonSymEigsSolver(OpType& op, Index nev, Index nvec_init, Index nvec_max) :
43  JDSymEigsBase<DavidsonSymEigsSolver<OpType>, OpType>(op, nev, nvec_init, nvec_max)
44  {
45  m_diagonal.resize(this->m_matrix_operator.rows());
46  for (Index i = 0; i < op.rows(); i++)
47  {
48  m_diagonal(i) = op(i, i);
49  }
50  }
51 
52  DavidsonSymEigsSolver(OpType& op, Index nev) :
53  DavidsonSymEigsSolver(op, nev, 2 * nev, 10 * nev) {}
54 
61  {
62  std::vector<Eigen::Index> indices_sorted = argsort(selection, m_diagonal);
63 
64  Matrix initial_basis = Matrix::Zero(this->m_matrix_operator.rows(), this->m_initial_search_space_size);
65 
66  for (Index k = 0; k < this->m_initial_search_space_size; k++)
67  {
68  Index row = indices_sorted[k];
69  initial_basis(row, k) = 1.0;
70  }
71  return initial_basis;
72  }
73 
78  {
79  const Matrix& residues = this->m_ritz_pairs.residues();
80  const Vector& eigvals = this->m_ritz_pairs.ritz_values();
81  Matrix correction = Matrix::Zero(this->m_matrix_operator.rows(), this->m_correction_size);
82  for (Index k = 0; k < this->m_correction_size; k++)
83  {
84  Vector tmp = eigvals(k) - m_diagonal.array();
85  correction.col(k) = residues.col(k).array() / tmp.array();
86  }
87  return correction;
88  }
89 };
90 
91 } // namespace Spectra
92 
93 #endif // SPECTRA_DAVIDSON_SYM_EIGS_SOLVER_H
Spectra::DavidsonSymEigsSolver::DavidsonSymEigsSolver
DavidsonSymEigsSolver(OpType &op, Index nev, Index nvec_init, Index nvec_max)
Definition: DavidsonSymEigsSolver.h:42
Spectra::JDSymEigsBase< DavidsonSymEigsSolver< OpType >, OpType >::m_correction_size
Index m_correction_size
Definition: JDSymEigsBase.h:48
Spectra::DavidsonSymEigsSolver::DavidsonSymEigsSolver
DavidsonSymEigsSolver(OpType &op, Index nev)
Definition: DavidsonSymEigsSolver.h:52
pybind_wrapper_test_script.this
this
Definition: pybind_wrapper_test_script.py:38
Spectra::DavidsonSymEigsSolver::calculate_correction_vector
Matrix calculate_correction_vector() const
Definition: DavidsonSymEigsSolver.h:77
Spectra::DavidsonSymEigsSolver::Scalar
typename OpType::Scalar Scalar
Definition: DavidsonSymEigsSolver.h:35
Eigen::PlainObjectBase::resize
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition: PlainObjectBase.h:271
Spectra::JDSymEigsBase< DavidsonSymEigsSolver< OpType >, OpType >::m_ritz_pairs
RitzPairs< Scalar > m_ritz_pairs
Definition: JDSymEigsBase.h:49
Spectra::DavidsonSymEigsSolver::m_diagonal
Vector m_diagonal
Definition: DavidsonSymEigsSolver.h:39
SelectionRule.h
Spectra::JDSymEigsBase< DavidsonSymEigsSolver< OpType >, OpType >::m_initial_search_space_size
Index m_initial_search_space_size
Definition: JDSymEigsBase.h:47
row
m row(1)
Spectra::SortRule
SortRule
Definition: SelectionRule.h:33
JDSymEigsBase.h
Spectra::JDSymEigsBase< DavidsonSymEigsSolver< OpType >, OpType >::m_matrix_operator
const OpType & m_matrix_operator
Definition: JDSymEigsBase.h:42
Spectra::JDSymEigsBase
Definition: JDSymEigsBase.h:34
Spectra
Definition: LOBPCGSolver.h:19
Eigen::Matrix< Scalar, Eigen::Dynamic, Eigen::Dynamic >
Spectra::DavidsonSymEigsSolver::Index
Eigen::Index Index
Definition: DavidsonSymEigsSolver.h:34
i
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Spectra::DavidsonSymEigsSolver
Definition: DavidsonSymEigsSolver.h:31
Scalar
SCALAR Scalar
Definition: bench_gemm.cpp:46
Spectra::DavidsonSymEigsSolver::setup_initial_search_space
Matrix setup_initial_search_space(SortRule selection) const
Definition: DavidsonSymEigsSolver.h:60
Eigen::Index
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74


gtsam
Author(s):
autogenerated on Thu Apr 10 2025 03:01:20