#include <cl_FEM_DofMgr_EigenValues.hpp>
Public Member Functions | |
| EigenValues (DofManager *aParent) | |
| ~EigenValues () | |
| EigenValues (const EigenValues &)=delete | |
| EigenValues (EigenValues &&)=delete | |
| EigenValues & | operator= (const EigenValues &)=delete |
| EigenValues & | operator= (EigenValues &&)=delete |
| void | set_num_minvals (const index_t aNumMinVals) |
| void | set_num_maxvals (const index_t aNumMaxVals) |
| void | set_tolerance (const real aTolerance) |
| relative accuracy demanded of each Ritz value. | |
| void | set_subspace_size (const index_t aSubspaceSize) |
| floor for the Krylov subspace. | |
| void | set_max_iterations (const index_t aNumMaxIter) |
| restart budget handed to ( p )dnaupd. | |
| void | set_symmetric (const bool aSymmetric) |
| declare the matrix symmetric, selecting dsaupd / dseupd over dnaupd / dneupd. | |
| bool | is_symmetric () const |
| whether the spectral ratio this object returns may be called kappa_2. | |
| real | compute_conditioning () |
| real | compute_lambda_max () |
| real | compute_smallest_eigenvalues () |
| compute the eigenvalues at one end of the spectrum and return the extremal magnitude found there. | |
| real | compute_largest_eigenvalues () |
| const Vector< real > & | lambda_real () const |
| real and imaginary parts of the values found by the last call above. | |
| const Vector< real > & | lambda_imag () const |
| int_t | number_of_converged_values () const |
| how many of the requested values actually converged | |
| const string & | backend_label () const |
| "ARPACK" or "PARPACK", whichever drove the last call | |
| EigenOutcome | outcome () const |
| how the last compute_conditioning() ended. | |
| void | reset () |
| belfem::fem::dofmgr::EigenValues::EigenValues | ( | DofManager * | aParent | ) |
| belfem::fem::dofmgr::EigenValues::~EigenValues | ( | ) |
|
delete |
|
delete |
|
inline |
"ARPACK" or "PARPACK", whichever drove the last call
| real belfem::fem::dofmgr::EigenValues::compute_conditioning | ( | ) |
| real belfem::fem::dofmgr::EigenValues::compute_lambda_max | ( | ) |
| real belfem::fem::dofmgr::EigenValues::compute_largest_eigenvalues | ( | ) |
| real belfem::fem::dofmgr::EigenValues::compute_smallest_eigenvalues | ( | ) |
compute the eigenvalues at one end of the spectrum and return the extremal magnitude found there.
how many are computed is set by set_num_minvals / set_num_maxvals ; the full set is exposed through lambda_real / lambda_imag
|
inline |
whether the spectral ratio this object returns may be called kappa_2.
That needs symmetry AND a positive definite spectrum – real eigenvalues alone are not enough
real and imaginary parts of the values found by the last call above.
Which ranks hold them depends on the build:
The same split applies to number_of_converged_values().
|
inline |
how many of the requested values actually converged
|
delete |
|
delete |
|
inline |
how the last compute_conditioning() ended.
Identical on every rank – it is broadcast before it is stored
| void belfem::fem::dofmgr::EigenValues::reset | ( | ) |
| void belfem::fem::dofmgr::EigenValues::set_max_iterations | ( | const index_t | aNumMaxIter | ) |
restart budget handed to ( p )dnaupd.
There is no matvec budget: one restart does NOT cost ncv - nev products ( ARPACK boosts nev internally between restarts, so np shrinks; measured 10.1 and 12.2 products per restart at ncv - nev = 19 ), so this bounds the restart count and the achieved product count is REPORTED rather than modeled
| void belfem::fem::dofmgr::EigenValues::set_num_maxvals | ( | const index_t | aNumMaxVals | ) |
| void belfem::fem::dofmgr::EigenValues::set_num_minvals | ( | const index_t | aNumMinVals | ) |
| void belfem::fem::dofmgr::EigenValues::set_subspace_size | ( | const index_t | aSubspaceSize | ) |
floor for the Krylov subspace.
Larger usually means fewer matrix-vector products but a bigger basis ( n x ncv )
| void belfem::fem::dofmgr::EigenValues::set_symmetric | ( | const bool | aSymmetric | ) |
declare the matrix symmetric, selecting dsaupd / dseupd over dnaupd / dneupd.
Lanczos is cheaper and its workspace is smaller, and for a symmetric matrix the spectral ratio IS kappa_2 – which the nonsymmetric driver cannot promise.
This is an ASSERTION BY THE CALLER, not a measurement. A matrix wrongly declared symmetric gives a wrong answer with no diagnostic: dsaupd only ever references one triangle's worth of information through the matvec, so an unsymmetric part is silently ignored rather than detected
| void belfem::fem::dofmgr::EigenValues::set_tolerance | ( | const real | aTolerance | ) |
relative accuracy demanded of each Ritz value.
The small end of the spectrum is only reachable while this stays above eps_mach * kappa – see the note at mEpsilon before lowering it. Non-positive values are rejected: ARPACK reads <= 0 as "use machine precision", which is exactly the unreachable setting on an ill conditioned matrix