version 0.4.1
Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT > Struct Template Reference

This class implements a wrapper to the Spectra generalized eigen solver for square real symmetric matrices, i.e. to solve \( Ax = \lambda Bx\), where A is symmetric and B is positive definite. It calculates the full spectrum of eigenvalues. More...

#include <ikarus/solver/eigenvaluesolver/generalizedeigensolver.hh>

Public Types

using ScalarType = typename MT::Scalar
 
using MatrixType = MT
 
using ProductType = std::conditional_t< isDense, Spectra::DenseSymMatProd< ScalarType >, Spectra::SparseSymMatProd< ScalarType > >
 
using CholeskyType = std::conditional_t< isDense, Spectra::DenseCholesky< ScalarType >, Spectra::SparseCholesky< ScalarType > >
 
using SolverType = Spectra::SymGEigsSolver< ProductType, CholeskyType, Spectra::GEigsMode::Cholesky >
 

Public Member Functions

template<typename MATA , typename MATB >
requires (Concepts::DenseOrSparseEigenMatrix<std::remove_cvref_t<MATA>>)
 GeneralizedSymEigenSolver (MATA &&A, MATB &&B)
 Construct a new GeneralizedSymEigenSolver object. More...
 
template<Concepts::FlatAssembler AssemblerA, Concepts::FlatAssembler AssemblerB>
 GeneralizedSymEigenSolver (std::shared_ptr< AssemblerA > assemblerA, const std::shared_ptr< AssemblerB > &assemblerB)
 Construct a new GeneralSymEigenSolver object. More...
 
bool compute (Eigen::Index maxit=1000, ScalarType tolerance=1e-10)
 Starts the computation of the eigenvalue solver. More...
 
auto & eigenvalues () const
 Returns the eigenvalues of the generalized eigenvalue problem. More...
 
auto & eigenvectors () const
 Returns the eigenvectors of the generalized eigenvalue problem. More...
 
Eigen::Index nev () const
 Returns the number of eigenvalues of the problem. More...
 

Static Public Attributes

static constexpr bool isDense = Concepts::EigenMatrix<MT>
 

Detailed Description

template<Concepts::DenseOrSparseEigenMatrix MT>
struct Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >

Under the hood it uses the Spectra::SymGEigsSolver with Cholesky decomposition for B. As this class can only compute up to \( n-1 \) smallest or greatest eigenvalues, we use two different solvers for the n/2 smallest and n/2 greatest eigenvalues. The matrices are shared throughout the solvers so no extra copy is being made.

Template Parameters
MTthe used Matrix Type, can be a sparse or dense Eigen::Matrix

Member Typedef Documentation

◆ CholeskyType

template<Concepts::DenseOrSparseEigenMatrix MT>
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::CholeskyType = std::conditional_t<isDense, Spectra::DenseCholesky<ScalarType>, Spectra::SparseCholesky<ScalarType> >

◆ MatrixType

template<Concepts::DenseOrSparseEigenMatrix MT>
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::MatrixType = MT

◆ ProductType

template<Concepts::DenseOrSparseEigenMatrix MT>
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::ProductType = std::conditional_t<isDense, Spectra::DenseSymMatProd<ScalarType>, Spectra::SparseSymMatProd<ScalarType> >

◆ ScalarType

template<Concepts::DenseOrSparseEigenMatrix MT>
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::ScalarType = typename MT::Scalar

◆ SolverType

template<Concepts::DenseOrSparseEigenMatrix MT>
using Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::SolverType = Spectra::SymGEigsSolver<ProductType, CholeskyType, Spectra::GEigsMode::Cholesky>

Constructor & Destructor Documentation

◆ GeneralizedSymEigenSolver() [1/2]

template<Concepts::DenseOrSparseEigenMatrix MT>
template<typename MATA , typename MATB >
requires (Concepts::DenseOrSparseEigenMatrix<std::remove_cvref_t<MATA>>)
Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::GeneralizedSymEigenSolver ( MATA &&  A,
MATB &&  B 
)
inline
Template Parameters
MATAthe deduced type of the matrix A
MATBthe deduced type of the matrix B
Parameters
Athe matrix A
Bthe matrix B

◆ GeneralizedSymEigenSolver() [2/2]

template<Concepts::DenseOrSparseEigenMatrix MT>
template<Concepts::FlatAssembler AssemblerA, Concepts::FlatAssembler AssemblerB>
Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::GeneralizedSymEigenSolver ( std::shared_ptr< AssemblerA >  assemblerA,
const std::shared_ptr< AssemblerB > &  assemblerB 
)
inline
Template Parameters
AssemblerAthe type of the assembler for matrix A.
AssemblerBthe type of the assembler for matrix B.
Parameters
assemblerAassembler for matrix A.
assemblerBassembler for matrix B.

Member Function Documentation

◆ compute()

template<Concepts::DenseOrSparseEigenMatrix MT>
bool Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::compute ( Eigen::Index  maxit = 1000,
ScalarType  tolerance = 1e-10 
)
inline
Parameters
tolerancegiven tolerance for iterative eigenvalue solving (default: 1e-10)
maxitgiven maximum iterations for eigenvalue solving (default: 1000)
Returns
true solving was successful
false solving was not successful

◆ eigenvalues()

template<Concepts::DenseOrSparseEigenMatrix MT>
auto & Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::eigenvalues ( ) const
inline
Returns
Eigen::VectorXd vector of eigenvalues

◆ eigenvectors()

template<Concepts::DenseOrSparseEigenMatrix MT>
auto & Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::eigenvectors ( ) const
inline
Returns
auto matrix with the eigevectors as columns

◆ nev()

template<Concepts::DenseOrSparseEigenMatrix MT>
Eigen::Index Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::nev ( ) const
inline

Member Data Documentation

◆ isDense

template<Concepts::DenseOrSparseEigenMatrix MT>
constexpr bool Ikarus::GeneralizedSymEigenSolver< EigenValueSolverType::Spectra, MT >::isDense = Concepts::EigenMatrix<MT>
staticconstexpr

The documentation for this struct was generated from the following file: