chrono::modal Namespace Reference

Description

Namespace with classes for the modal module.

Classes

class  callback_Ax
 Generic A*x callback. More...
 
class  callback_Ax_sparse_complexshiftinvert
 The callback to be used for "A*x" where for shift&invert is: A = (As - sigma Bs)/Bs , with COMPLEX sigma shift, so A*x = (As - sigma Bs)/(Bs*x), just like a linear system with coefficient matrix (As - sigma Bs) and known rhs Bs*x. More...
 
class  callback_Ax_sparse_shiftinvert
 The callback to be used for "A*x" where for shift&invert is: A = (As - sigma Bs)/Bs , so A*x = (As - sigma Bs)/(Bs*x), just like a linear system with coefficient matrix (As - sigma Bs) and known rhs Bs*x. More...
 
class  ChGeneralizedEigenvalueSolver
 Base interface class for generalized eigenvalue solvers A*x = lambda*B*x. More...
 
class  ChKrylovSchurEig
 Compute (complex) eigenvalues and eigenvectors using the Krylov-Schur algorithm. More...
 
class  ChModalAssembly
 Class for assemblies of items, for example ChBody, ChLink, ChMesh, etc. More...
 
class  ChModalDamping
 Base class for damping models of modal reduced assemblies. More...
 
class  ChModalDampingCustom
 Class for damping defined with an user-defined matrix that could be obtained via external tools such as Matlab or FEA. More...
 
class  ChModalDampingFactorAssembly
 Class for setting the damping via N damping factors z_i for all the modes of the subassembly, where assembly n.modes = (boundary coords+internal modes) R^ = V'^-1 * Dd * V^-1 with Dd=diag { 2 z_1 w_1, 2 z_2 w_2, ..., 2 z_i w_i }, and V = eigenvectors of (M^, K^). More...
 
class  ChModalDampingFactorRayleigh
 Class for setting the damping via N damping factors z_i of the internal mode coordinates and alpha-beta Rayleigh damping for the boundary nodes, assuming R^ = [Rbb Rbm ] [Rmb Rmm ] with Rmm=diag { 2 z_1 w_1, 2 z_2 w_2, ..., 2 z_i w_i }, Rbb= alpha*Mbb + beta*Kbb, Rbm = 0, Rmb = 0. More...
 
class  ChModalDampingFactorRmm
 Class for setting the damping via N damping factors z_i of the internal mode coordinates. More...
 
class  ChModalDampingNone
 Class for no damping model. More...
 
class  ChModalDampingRayleigh
 Class for simple Rayleigh damping model R^ = alpha*M^ + beta*K^ where M^ and K^ are the reduced matrices, both for boundary nodes and modal coords. More...
 
class  ChModalDampingReductionR
 Class for damping as reduction of the original damping matrix via the eigenvectors of the undamped assembly, i.e. More...
 
class  ChModalSolver
 Base class for modal solvers. More...
 
class  ChModalSolverDamped
 Modal solver for damped systems of the form (-w^2*M + i*w*R + K)*x = 0 s.t. More...
 
class  ChModalSolverUndamped
 Modal solver for undamped systems (-w^2*M+K)*x = 0 s.t. More...
 
class  ChSymGenEigenvalueSolver
 Base interface class for iterative eigenvalue solvers for generalized problem with real symmetric matrices. More...
 
class  ChSymGenEigenvalueSolverKrylovSchur
 Generalized iterative eigenvalue solver implementing Krylov-Schur shift-and-invert method for real symmetric matrices. More...
 
class  ChSymGenEigenvalueSolverLanczos
 Generalized iterative eigenvalue solver implementing Lanczos shift-and-invert method for real symmetric matrices. More...
 
class  ChUnsymGenEigenvalueSolver
 Base interface class for iterative eigenvalue solvers for generalized problem with real generic matrices. More...
 
class  ChUnsymGenEigenvalueSolverKrylovSchur
 Generalized iterative eigenvalue solver implementing Krylov-Schur shift-and-invert method for real generic matrices. More...
 

Functions

template<typename EigSolverType >
int Solve (EigSolverType &eig_solver, ChSparseMatrix &A, ChSparseMatrix &B, ChMatrixDynamic< typename EigSolverType::ScalarType > &eigvects, ChVectorDynamic< typename EigSolverType::ScalarType > &eigvals, const std::list< std::pair< int, typename EigSolverType::ScalarType >> &eig_requests, bool uniquify=true, int eigvects_clipping_length=0)
 Helper function to solve any kind of generalized eigenvalue problem even with multiple requests. More...
 
void ordschur (ChMatrixDynamic< std::complex< double >> &U, ChMatrixDynamic< std::complex< double >> &T, ChVectorDynamic< bool > &select)
 
int testConverge (ChMatrixDynamic< std::complex< double >> &H, int k, int i, double tol)
 
void truncateKrylov (ChMatrixDynamic< std::complex< double >> &Q, ChMatrixDynamic< std::complex< double >> &H, const int k, const int m)
 
void sortSchur (ChMatrixDynamic< std::complex< double >> &US, ChMatrixDynamic< std::complex< double >> &TS, bool &isC, const ChMatrixDynamic< std::complex< double >> &A, const int k)
 
void expandKrylov (ChMatrixDynamic< std::complex< double >> &Q, ChMatrixDynamic< std::complex< double >> &H, callback_Ax *Ax_function, int sk, int ek)
 
void KrylovSchur (ChMatrixDynamic< std::complex< double >> &Q, ChMatrixDynamic< std::complex< double >> &H, bool &isC, bool &flag, int &nc, int &ni, callback_Ax *Ax_function, const ChVectorDynamic< std::complex< double >> &v1, const int n, const int k, const int m, const int maxIt, const double tol)
 
void swap (ChModalAssembly &first, ChModalAssembly &second)
 
void util_sparse_assembly_2x2symm (ChSparseMatrix &HCQ, const ChSparseMatrix &H, const ChSparseMatrix &Cq, bool resize_and_reserve=true)
 
void util_convert_to_colmajor (Eigen::SparseMatrix< double, Eigen::ColMajor, int > &H_col, const ChSparseMatrix &H)
 
void BuildDampedEigenProblemMatrices (ChAssembly &assembly, ChSystemDescriptor &temp_descriptor, ChSparseMatrix &A, ChSparseMatrix &B, int n_vars)
 Partially build the damped eigenvalue problem matrices A and B from a given ChAssembly. More...
 
void BuildUndampedEigenProblemMatrices (ChAssembly &assembly, ChSystemDescriptor &temp_descriptor, ChSparseMatrix &A, ChSparseMatrix &B, int n_vars)
 Partially build the undamped eigenvalue problem matrices A and B from a given ChAssembly. More...
 
void CountNonZerosForEachRow (const ChSparseMatrix &Q, Eigen::VectorXi &nonZerosPerRow, int offset)
 
void CountNonZerosForEachRowTransposed (const ChSparseMatrix &Q_transp, Eigen::VectorXi &nonZerosPerRow, int offset)
 

Function Documentation

◆ BuildDampedEigenProblemMatrices()

void chrono::modal::BuildDampedEigenProblemMatrices ( ChAssembly assembly,
ChSystemDescriptor temp_descriptor,
ChSparseMatrix A,
ChSparseMatrix B,
int  n_vars 
)

Partially build the damped eigenvalue problem matrices A and B from a given ChAssembly.

WARNING: Cq and Cq' signs are not flipped here: the user is expected to flip it during scaling (if any) The final shape of the matrices is:

A = [ 0 I 0 ] [ -K -R -Cq' ] [ -Cq 0 0 ]

B = [ I 0 0 ] [ 0 M 0 ] [ 0 0 0 ]

◆ BuildUndampedEigenProblemMatrices()

void ChApiModal chrono::modal::BuildUndampedEigenProblemMatrices ( ChAssembly assembly,
ChSystemDescriptor temp_descriptor,
ChSparseMatrix A,
ChSparseMatrix B,
int  n_vars 
)

Partially build the undamped eigenvalue problem matrices A and B from a given ChAssembly.

Utility function to build the A and B matrices for the undamped eigenvalue problem.

WARNING: Cq and Cq' signs are not flipped here: the user is expected to flip it during scaling (if any). The finale shape should be: A = [ -K -Cq' ] [ -Cq 0 ]

B = [ M 0 ] [ 0 0 ]

◆ Solve()

template<typename EigSolverType >
int chrono::modal::Solve ( EigSolverType &  eig_solver,
ChSparseMatrix A,
ChSparseMatrix B,
ChMatrixDynamic< typename EigSolverType::ScalarType > &  eigvects,
ChVectorDynamic< typename EigSolverType::ScalarType > &  eigvals,
const std::list< std::pair< int, typename EigSolverType::ScalarType >> &  eig_requests,
bool  uniquify = true,
int  eigvects_clipping_length = 0 
)

Helper function to solve any kind of generalized eigenvalue problem even with multiple requests.

The eigenvectors are also filtered to avoid duplicates with the same frequency. This means that only one of the complex eigenvectors that come in conjugate pairs is stored. The eigrequest argument is a list of pairs, where the first element is the number of modes to be found, and the second element is the shift to apply for that specific search.

◆ swap()

void chrono::modal::swap ( ChModalAssembly first,
ChModalAssembly second 
)

Implemented as a friend (as opposed to a member function) so classes with a ChModalAssembly member can use ADL when implementing their own swap.

◆ util_convert_to_colmajor()

void chrono::modal::util_convert_to_colmajor ( Eigen::SparseMatrix< double, Eigen::ColMajor, int > &  H_col,
const ChSparseMatrix H 
)
Parameters
H_colresulting sparse matrix (column major)
Hinput sparse matrix (row major)

◆ util_sparse_assembly_2x2symm()

void chrono::modal::util_sparse_assembly_2x2symm ( ChSparseMatrix HCQ,
const ChSparseMatrix H,
const ChSparseMatrix Cq,
bool  resize_and_reserve = true 
)
Parameters
HCQresulting square sparse matrix
Hsquare sparse H matrix, [n_v, n_v]
Cqrectangular sparse Cq [n_c, n_v]