|
ConicBundle
|
A Lanczos method allowing spectral transformation by Chebycheff polynomials and premature termination. More...
#include <lanczpol.hxx>
Public Member Functions | |
| Lanczpol () | |
| intialize all to default values | |
| ~Lanczpol () | |
| destructor, nothing particular | |
| int | compute (const Lanczosmatrix *bigmat, Matrix &eigval, Matrix &eigvec, Integer nreig, Integer in_blocksz=0, Integer maxcol=0) |
| the main routine: compute the nreig maximum eigenvalues of the matrix specified by bigmat More... | |
Set and Get Parameters | |
There should be no need to set any parameters, default values should be available and reasonable. | |
| void | set_mineig (Real ie) |
| set a guess on the value of the smallest | |
| void | set_maxmult (Integer mop) |
| set an upper bound on the number of matrix vector multiplications | |
| void | set_maxiter (Integer mi) |
| set an upper bpound on the number of restarts | |
| void | set_relprec (Real relprec) |
| set relative precision requirement for termination | |
| void | set_nchebit (Integer cheb) |
| set the degree of the Chebycheff polynomial for the spectral transformation | |
| void | set_nblockmult (Integer nb) |
| set maximum number of block multiplications within one restart | |
| void | enable_stop_above (Real ub) |
| allow the algorithm to stop as soon as the maximum Ritz value exceeds the value ub | |
| void | disable_stop_above () |
| do not allow premature termination as in enable_stop_above() | |
| void | set_retlanvecs (Integer nl) |
| set an upper bound on the number of vectors returned in get_lanczosvecs() | |
| int | get_lanczosvecs (Matrix &val, Matrix &vecs) const |
| returns the Lanczos vectors of the last call with their Ritz values | |
| Real | get_relprec (void) |
| returns current relative precision requirement | |
| int | get_err () const |
| returns the error code of the last call | |
| Integer | get_iter () const |
| returns the number of restarts of the last call | |
| Integer | get_nmult () const |
| returns the number of matrix-vector multiplications of the last call | |
Input/Output | |
| void | set_out (std::ostream *o=0, int pril=1) |
| set output stream and level of detail of log output (for debugging) | |
| std::ostream & | save (std::ostream &out) const |
| save all data in out so that the current state can be recovered completely by restore() | |
| std::istream & | restore (std::istream &in) |
| restore the data from in where it was stored by save() | |
Set and Get Parameters | |
There should be no need to set any parameters, default values should be available and reasonable. | |
Input/Output | |
Private Member Functions | |
| void | error (const char *s) |
| output of error messages | |
| int | guess_extremes (Integer nproposed) |
| compute a guess for minimum and maximum eigenvalue | |
| int | dhua (Integer nreig, Integer nproposed, Integer maxmult) |
| main routine performing the Lancozs iterations | |
| int | bklanc (Integer neigfound, Integer blocksz, Integer s, const Matrix &d, Matrix &C, Matrix &X, Matrix &e, Matrix &u, Matrix &v) |
| block lanzos multiplication without Chebycheff spectral transformation | |
| int | bkqrlanc (Integer neigfound, Integer blocksz, Integer s, const Matrix &d, Matrix &C, Matrix &X, Matrix &e, Matrix &u, Matrix &v) |
| block lanzos multiplication, with complete QR orthogonalization, without Chebycheff spectral transformation | |
| int | bklanccheb (Integer neigfound, Integer blocksz, Integer s, Matrix &C, Matrix &X, Matrix &e, Matrix &v) |
| block lanzos multiplication with Chebycheff spectral transformation | |
| int | bkqrlanccheb (Integer neigfound, Integer blocksz, Integer s, Matrix &C, Matrix &X, Matrix &e, Matrix &v) |
| block lanzos multiplication with complete QR orthogonalization and Chebycheff spectral transformation | |
| int | err (Integer neigfound, Integer blocksz, const Matrix &X, Matrix &e) |
| compute norms of deviations of the Ritz vectors from being eigenvectors | |
| int | cnvtst (Integer neigfound, Integer blocksz, Real &errc, Real eps, const Matrix &d, const Matrix &e, Integer &nconv) |
| check convergence of maximum Ritz value/vector | |
| int | eigen (Integer neigfound, Integer blocksz, Integer sbsz, Matrix &C, Matrix &d, Matrix &u, Matrix &v, Real &af) |
| compute eigenvalues of current (block) tridiagonalization | |
| int | sectn (Matrix &X, Integer neigfound, Integer blocksz, Matrix &C, Matrix &d, Matrix &u, Matrix &v, Real &af) |
| compute matrix for eigenvalue computation into C | |
| int | rotate_extremes (Integer neigfound, Integer sbs, Matrix &d, const Matrix &C, Matrix &X, Matrix &v) |
| rotate the eigenvectors of the largest and smallest eigenvalues of the tridiagonal matrix. | |
| int | rotate (Integer neigfound, Integer sbs, Integer l, const Matrix &C, Matrix &X, Matrix &v) |
| rotate the lanzos vectors to Ritz vectors | |
| int | random (Matrix &X, Integer j) |
| assign a random vector to column j of X | |
| Integer | orthog (Integer offset, Integer blocksz, Matrix &X, Matrix &B) |
| orthonormalize columns X(:,offset:offset+l_blocksz-1) to all previous columns | |
| int | blockcheby (Integer col_offset, const Matrix &X, Matrix &v) |
| apply spectral transformation by using a Chebycheff polynomial on the block multiplications | |
| Real | scalarcheby (Real xval) |
| compute the same polynomial as in blockcheby but for the scalar value xval | |
| int | tred2 (Integer n, const Matrix &C, Matrix &u, Matrix &v, Matrix &Z) |
| tridiagonalize a symmetric blockdiagonal matrix | |
| int | tql2 (Integer n, Matrix &u, Matrix &v, Matrix &Z) |
| compute the eigenvalues of a tridiagonal matrix | |
Private Attributes | |
| int | ierr |
| error return code | |
| Integer | maxop |
| upper bound on matrix vector multiplications | |
| Integer | maxiter |
| upper bound on number of restarts | |
| Integer | maxguessiter |
| upper bound on number of restarts to guess spectral interval | |
| Integer | guessmult |
| number of matrix vector multiplications to guess interval | |
| Integer | choicencheb |
| user's choice for number of block Chebychev iterations (<0 -> automatic determination) | |
| Integer | nchebit |
| number of block Chebychev iterations within one iteration | |
| Integer | choicenbmult |
| user's choice for number of block multiplications (<0 -> automatic determination, min 6) | |
| Integer | nblockmult |
| number of blockmultiplications in one restart | |
| Integer | nlanczvecs |
| number of columns of storage matrix X carrying "meaningful" Ritz vectors | |
| Integer | retlanvecs |
| user's choice for number of returend Ritz vectors (<0 -> nlanczvecs) | |
| Integer | neigfound |
| number of eigenvalues known, these are in the first neigfound columns of X | |
| Integer | blocksz |
| working block of lanczos vectors X(:,neigfound:neigfound+blocksz-1) | |
| Integer | iter |
| iteration counter for Lanczos restarts (interval guess+computation) | |
| Integer | nmult |
| number of single vector multiplications with matrix | |
| Real | errc |
| error accumulation | |
| Real | eps |
| relative precision | |
| Real | mcheps |
| machine precision (computed in constructor) | |
| Real | maxval |
| current approximation of largest eigenvalue | |
| Real | minval |
| current approximation of smallest eigenvalue | |
| Real | polval |
| the Chebychef polynomial will have this value at maxval | |
| Matrix | X |
| provides storage for the Lanczos vectors during computation | |
| Matrix | C |
| X^tAX, intermediate eigenvalue computations, orthogonalizations, etc. | |
| Matrix | d |
| diagonals (Ritz values) | |
| Matrix | e |
| error bounds | |
| Matrix | Xqr |
| for complete orthogonalization with Householder QR | |
| Matrix | u |
| temporary matrix | |
| Matrix | v |
| temporary matrix | |
| Matrix | w |
| temporary matrix | |
| Matrix | minvec |
| temporary matrix for guessing minimal eigenvalue | |
| const Lanczosmatrix * | bigmatrix |
| pointer giving the (virtual) input matrix | |
| int | stop_above |
| 1 if algorithm is to stop after upper bound is exceeded | |
| Real | upper_bound |
| stop if current maximum Ritz value exceeds this value | |
| Integer | ncalls |
| counts number of calls to Lanczpol | |
| Integer | mymaxj |
| maximum amount of storage (columns) provided in X and C | |
| CH_Tools::GB_rand | randgen |
| local random number generator | |
| CH_Tools::Clock | myclock |
| for time measurements | |
| CH_Tools::Microseconds | time_mult |
| for each restart, the time spent in lanczosmult | |
| CH_Tools::Microseconds | time_mult_sum |
| sum over time_mult for all restarts | |
| CH_Tools::Microseconds | time_iter |
| time spent in last lanczos iteration | |
| CH_Tools::Microseconds | time_sum |
| time spent in this call to compute() | |
| int | print_level |
| level of iteration information that should be displayed | |
| std::ostream * | myout |
| everything is output to *myout, default: myout=&cout (may be 0 for no output) | |
Additional Inherited Members | |
Protected Member Functions inherited from CH_Matrix_Classes::Memarrayuser | |
| Memarrayuser () | |
| if memarray is NULL, then a new Memarray is generated. In any case the number of users of the Memarray is incremented | |
| virtual | ~Memarrayuser () |
| the number of users is decremented and the Memarray memory manager is destructed, if the number is zero. | |
Static Protected Attributes inherited from CH_Matrix_Classes::Memarrayuser | |
| static Memarray * | memarray |
| pointer to common memory manager for all Memarrayusers, instantiated in memarray.cxx | |
A Lanczos method allowing spectral transformation by Chebycheff polynomials and premature termination.
The code is a translation and adaptation of a FORTRAN code most likely written by Hua.
|
virtual |
the main routine: compute the nreig maximum eigenvalues of the matrix specified by bigmat
| bigmat | the symmetric matrix |
| eigval | on output: converged eigenvalues |
| eigvec | on output: eigenvectors to eigval, on input (optional): starting vectors |
| nreig | number of maximal eigenvalues to be computed |
| in_blocksz | size of a block, if block Lanczos is used |
| maxcol | maximum number of columns that may be used |
Implements CH_Matrix_Classes::Lanczos.
Referenced by get_nmult().
1.8.13