chrono::modal::ChSymGenEigenvalueSolverKrylovSchur Class Reference

## Description

Generalized iterative eigenvalue solver implementing Krylov-Schur shift-and-invert method for real symmetric matrices.

Features:

• generalized eigenvalue problem
• symmetric real sparse matrices
• shift-and-invert with real shift

#include <ChSymGenEigenvalueSolver.h>

Inheritance diagram for chrono::modal::ChSymGenEigenvalueSolverKrylovSchur:
Collaboration diagram for chrono::modal::ChSymGenEigenvalueSolverKrylovSchur:

## Public Member Functions

virtual int Solve (const ChSparseMatrix &A, const ChSparseMatrix &B, ChMatrixDynamic< ScalarType > &eigvects, ChVectorDynamic< ScalarType > &eigvals, int num_modes, ScalarType shift) const override
Solve the generalized eigenvalue problem A*eigvects = B*eigvects*diag(eigvals) A and B are expected to be symmetric and real 'eigvects' will be resized to [A.rows() x num_modes] 'eigvals' will be resized to [num_modes] the number of converged eigenvalues is returned.

Public Member Functions inherited from chrono::modal::ChSymGenEigenvalueSolver
virtual int Solve (const ChSparseMatrix &A, const ChSparseMatrix &B, ChMatrixDynamic< ScalarType > &eigvects, ChVectorDynamic< ScalarType > &eigvals, int num_modes, ScalarType shift) const =0
Solve the generalized eigenvalue problem A*eigvects = B*eigvects*diag(eigvals) A and B are expected to be symmetric and real 'eigvects' will be resized to [A.rows() x num_modes] 'eigvals' will be resized to [num_modes] the number of converged eigenvalues is returned.

Public Member Functions inherited from chrono::modal::ChGeneralizedEigenvalueSolver< double >
double GetTimeMatrixAssembly () const
Get cumulative time for matrix assembly.

double GetTimeEigenSetup () const
Get cumulative time for the eigensolver setup.

double GetTimeEigenSolver () const
Get cumulative time for the eigensolver solution.

double GetTimeSolutionPostProcessing () const
Get cumulative time for post-solver solution postprocessing.

Public Types inherited from chrono::modal::ChGeneralizedEigenvalueSolver< double >
using ScalarType = double

Static Public Member Functions inherited from chrono::modal::ChSymGenEigenvalueSolver
static void GetNaturalFrequencies (const ChVectorDynamic< ScalarType > &eigvals, ChVectorDynamic< double > &freq)
Retrieve the natural frequencies from an eigenvalues array.

static double GetNaturalFrequency (ScalarType eigval)
Retrieve the natural frequencies from an eigenvalue.

static ScalarType GetOptimalShift (double freq)
Get the optimal shift corresponding to a given frequency.

Static Public Member Functions inherited from chrono::modal::ChGeneralizedEigenvalueSolver< double >
static void SortRitzPairs (ChVectorDynamic< ScalarType > &eigvals, ChMatrixDynamic< ScalarType > &eigvects, std::function< bool(const ChVectorDynamic< ScalarType > &, int, int)> ordering_fun=[](const ChVectorDynamic< std::complex< double >> &eigv, int a, int b) { return std::abs(eigv(a))< std::abs(eigv(b));})
Sort the eigenvalues and eigenvectors in the order specified by the ordering function in-place.

static double GetMaxResidual (const ChSparseMatrix &A, const ChSparseMatrix &B, const ChMatrixDynamic< ScalarType > &eigvects, const ChVectorDynamic< ScalarType > &eigvals)

static double GetMaxResidual (const ChSparseMatrix &K, const ChSparseMatrix &M, const ChSparseMatrix &Cq, const ChMatrixDynamic< ScalarType > &eigvects, const ChVectorDynamic< ScalarType > &eigvals)

static double GetMaxResidual (const ChSparseMatrix &K, const ChSparseMatrix &R, const ChSparseMatrix &M, const ChSparseMatrix &Cq, const ChMatrixDynamic< ScalarType > &eigvects, const ChVectorDynamic< ScalarType > &eigvals)

static double BuildUndampedSystem (const ChSparseMatrix &M, const ChSparseMatrix &K, const ChSparseMatrix &Cq, ChSparseMatrix &A, ChSparseMatrix &B, bool scaleCq)
Build the quadratic eigenvalue problem matrix for the undamped case. More...

static double BuildDampedSystem (const ChSparseMatrix &M, const ChSparseMatrix &R, const ChSparseMatrix &K, const ChSparseMatrix &Cq, ChSparseMatrix &A, ChSparseMatrix &B, bool scaleCq)
Build the quadratic eigenvalue problem matrix for the damped case. More...

static void InsertUniqueRitzPairs (const ChVectorDynamic< ScalarType > &eigvals_source, const ChMatrixDynamic< ScalarType > &eigvects_source, ChVectorDynamic< ScalarType > &eigvals_total, ChMatrixDynamic< ScalarType > &eigvects_total, std::function< double(ScalarType)> freq_from_eigval_fun, int &found_eigs, int num_eigvals_source, double equal_freq_tolerance=1e-4)
Add unique ritz pairs to a wider set of ritz pairs. More...

Public Attributes inherited from chrono::modal::ChGeneralizedEigenvalueSolver< double >
double tolerance
tolerance for the iterative solver.

int max_iterations
upper limit for the number of iterations. If too low might not converge.

bool verbose
turn to true to see some diagnostic.

bool sort_ritz_pairs
sort the eigenvalues based on the smallest absolute value

Static Protected Member Functions inherited from chrono::modal::ChGeneralizedEigenvalueSolver< double >
static Eigen::PermutationMatrix< Eigen::Dynamic, Eigen::Dynamic > GetPermutationMatrix (int num_elements, std::function< bool(int, int)> ordering_fun)
Returns the permutation matrix to sort the given elements based on the ordering function.

Protected Attributes inherited from chrono::modal::ChGeneralizedEigenvalueSolver< double >
ChTimer m_timer_matrix_assembly
timer for matrix assembly

ChTimer m_timer_eigen_setup
timer for eigensolver setup

ChTimer m_timer_eigen_solver
timer for eigensolver solution

ChTimer m_timer_solution_postprocessing
timer for conversion of eigensolver solution

const int m_min_subspace_size

The documentation for this class was generated from the following files:
• /builds/uwsbel/chrono/src/chrono_modal/ChSymGenEigenvalueSolver.h
• /builds/uwsbel/chrono/src/chrono_modal/ChSymGenEigenvalueSolver.cpp