29#ifndef OOMPH_EIGEN_SOLVER_HEADER
30#define OOMPH_EIGEN_SOLVER_HEADER
34#include <oomph-lib-config.h>
51 class DoubleMatrixBase;
82 Vector<std::complex<double>>& eigenvalue,
167 Vector<std::complex<double>>& eigenvalue,
238 Vector<std::complex<double>>& eigenvalue,
245 Vector<std::complex<double>>& eigenvalue,
Class for the ARPACK eigensolver.
ARPACK(const ARPACK &)
Empty copy constructor.
void get_eigenvalues_right_of_shift()
Set the desired eigenvalues to be right of the shift.
int Spectrum
Integer to set whether the real, imaginary or magnitude is required to be small or large.
LinearSolver *const & linear_solver_pt() const
Return a pointer to the linear solver object (const version)
int NArnoldi
Number of Arnoldi vectors to compute.
void track_eigenvalue_imaginary_part()
Set the imaginary part fo the quantity of interest.
void get_eigenvalues_left_of_shift()
Use the eigensolver to find the eigenvalues of a given matrix.
LinearSolver * Linear_solver_pt
Pointer to a linear solver.
virtual ~ARPACK()
Destructor, delete the linear solver.
LinearSolver *& linear_solver_pt()
Return a pointer to the linear solver object.
const int & narnoldi() const
Access function for the number of Arnoldi vectors (const version)
void track_eigenvalue_magnitude()
Set the magnitude to be the quantity of interest.
void enable_compute_eigenvectors()
Set to enable the computation of the eigenvectors (default)
int & narnoldi()
Access function for the number of Arnoldi vectors.
bool Small
Boolean to set which part of the spectrum left (default) or right of the shifted value.
void track_eigenvalue_real_part()
Set the real part to be the quantity of interest (default)
void solve_eigenproblem(Problem *const &problem_pt, const int &n_eval, Vector< std::complex< double > > &eigenvalue, Vector< DoubleVector > &eigenvector)
Solve the eigen problem.
LinearSolver * Default_linear_solver_pt
Pointer to a default linear solver.
void disable_compute_eigenvectors()
Set to disable the computation of the eigenvectors.
bool Compute_eigenvectors
Boolean to indicate whether or not to compute the eigenvectors.
Abstract base class for matrices of complex doubles – adds abstract interfaces for solving,...
Base class for any linear algebra object that is distributable. Just contains storage for the LinearA...
Base class for all EigenProblem solves. This simply defines standard interfaces so that different sol...
virtual ~EigenSolver()
Empty destructor.
EigenSolver(const EigenSolver &)
Empty copy constructor.
EigenSolver()
Empty constructor.
virtual void solve_eigenproblem(Problem *const &problem_pt, const int &n_eval, Vector< std::complex< double > > &eigenvalue, Vector< DoubleVector > &eigenvector)=0
Actual eigensolver. This takes a pointer to a problem and returns a vector of complex numbers represe...
const double & get_shift() const
Return the value of the shift (const version)
void set_shift(const double &shift_value)
Set the value of the shift.
double Sigma_real
Double value that represents the real part of the shift in shifted eigensolvers.
Class for the LAPACK eigensolver.
void find_eigenvalues(const ComplexMatrixBase &A, const ComplexMatrixBase &M, Vector< std::complex< double > > &eigenvalue, Vector< Vector< std::complex< double > > > &eigenvector)
Find the eigenvalues of a generalised eigenvalue problem specified by .
virtual ~LAPACK_QZ()
Empty desctructor.
void get_eigenvalues_right_of_shift()
Set the desired eigenvalues to be right of the shift Dummy at the moment.
LAPACK_QZ()
Empty constructor.
LAPACK_QZ(const LAPACK_QZ &)
Empty copy constructor.
void solve_eigenproblem(Problem *const &problem_pt, const int &n_eval, Vector< std::complex< double > > &eigenvalue, Vector< DoubleVector > &eigenvector)
Solve the eigen problem.
Base class for all linear solvers. This merely defines standard interfaces for linear solvers,...
////////////////////////////////////////////////////////////////// //////////////////////////////////...
A slight extension to the standard template vector class so that we can include "graceful" array rang...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...