#include <AnasaziLOBPCG.hpp>
Public Member Functions | |
Constructor/Destructor | |
LOBPCG (const Teuchos::RCP< Eigenproblem< ScalarType, MV, OP > > &problem, const Teuchos::RCP< SortManager< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > > &sorter, const Teuchos::RCP< OutputManager< ScalarType > > &printer, const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > &tester, const Teuchos::RCP< MatOrthoManager< ScalarType, MV, OP > > &ortho, Teuchos::ParameterList ¶ms) | |
LOBPCG constructor with eigenproblem, solver utilities, and parameter list of solver options. | |
virtual | ~LOBPCG () |
LOBPCG destructor | |
Solver methods | |
void | iterate () |
This method performs LOBPCG iterations until the status test indicates the need to stop or an error occurs (in which case, an exception is thrown). | |
void | initialize (LOBPCGState< ScalarType, MV > newstate) |
Initialize the solver to an iterate, optionally providing the Ritz values, residual, and search direction. | |
void | initialize () |
Initialize the solver with the initial vectors from the eigenproblem or random data. | |
bool | isInitialized () const |
Indicates whether the solver has been initialized or not. | |
LOBPCGState< ScalarType, MV > | getState () const |
Get the current state of the eigensolver. | |
Status methods | |
int | getNumIters () const |
Get the current iteration count. | |
void | resetNumIters () |
Reset the iteration count. | |
Teuchos::RCP< const MV > | getRitzVectors () |
Get the Ritz vectors from the previous iteration. | |
std::vector< Value< ScalarType > > | getRitzValues () |
Get the Ritz values from the previous iteration. | |
std::vector< int > | getRitzIndex () |
Get the index used for extracting Ritz vectors from getRitzVectors(). | |
std::vector< typename Teuchos::ScalarTraits < ScalarType >::magnitudeType > | getResNorms () |
Get the current residual norms. | |
std::vector< typename Teuchos::ScalarTraits < ScalarType >::magnitudeType > | getRes2Norms () |
Get the current residual 2-norms. | |
std::vector< typename Teuchos::ScalarTraits < ScalarType >::magnitudeType > | getRitzRes2Norms () |
Get the 2-norms of the residuals. | |
int | getCurSubspaceDim () const |
Get the dimension of the search subspace used to generate the current eigenvectors and eigenvalues. | |
int | getMaxSubspaceDim () const |
Get the maximum dimension allocated for the search subspace. For LOBPCG, this always returns 3*getBlockSize(), the dimension of the subspace colspan([X H P]). | |
Accessor routines from Eigensolver | |
void | setStatusTest (Teuchos::RCP< StatusTest< ScalarType, MV, OP > > test) |
Set a new StatusTest for the solver. | |
Teuchos::RCP< StatusTest < ScalarType, MV, OP > > | getStatusTest () const |
Get the current StatusTest used by the solver. | |
const Eigenproblem< ScalarType, MV, OP > & | getProblem () const |
Get a constant reference to the eigenvalue problem. | |
void | setBlockSize (int blockSize) |
Set the blocksize to be used by the iterative solver in solving this eigenproblem. | |
int | getBlockSize () const |
Get the blocksize to be used by the iterative solver in solving this eigenproblem. | |
void | setAuxVecs (const Teuchos::Array< Teuchos::RCP< const MV > > &auxvecs) |
Set the auxiliary vectors for the solver. | |
Teuchos::Array< Teuchos::RCP < const MV > > | getAuxVecs () const |
Get the current auxiliary vectors. | |
LOBPCG-specific accessor routines | |
void | setFullOrtho (bool fullOrtho) |
Instruct the LOBPCG iteration to use full orthogonality. | |
bool | getFullOrtho () const |
Determine if the LOBPCG iteration is using full orthogonality. | |
bool | hasP () |
Indicates whether the search direction given by getState() is valid. | |
Output methods | |
void | currentStatus (std::ostream &os) |
This method requests that the solver print out its current status to screen. |
This implementation is a modification of the one found in A. Knyazev, "Toward the optimal preconditioned eigensolver: Locally optimal block preconditioner conjugate gradient method", SIAM J. Sci. Comput., vol 23, n 2, pp. 517-541.
The modification consists of the orthogonalization steps recommended in U. Hetmaniuk and R. Lehoucq, "Basis Selection in LOBPCG", Journal of Computational Physics.
These modifcation are referred to as full orthogonalization, and consist of also conducting the local optimization using an orthonormal basis.
Definition at line 209 of file AnasaziLOBPCG.hpp.
Anasazi::LOBPCG< ScalarType, MV, OP >::LOBPCG | ( | const Teuchos::RCP< Eigenproblem< ScalarType, MV, OP > > & | problem, | |
const Teuchos::RCP< SortManager< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > > & | sorter, | |||
const Teuchos::RCP< OutputManager< ScalarType > > & | printer, | |||
const Teuchos::RCP< StatusTest< ScalarType, MV, OP > > & | tester, | |||
const Teuchos::RCP< MatOrthoManager< ScalarType, MV, OP > > & | ortho, | |||
Teuchos::ParameterList & | params | |||
) | [inline] |
LOBPCG constructor with eigenproblem, solver utilities, and parameter list of solver options.
This constructor takes pointers required by the eigensolver, in addition to a parameter list of options for the eigensolver. These options include the following:
int
specifying the block size used by the algorithm. This can also be specified using the setBlockSize() method.bool
specifying whether the solver should employ a full orthogonalization technique. This can also be specified using the setFullOrtho() method. Definition at line 611 of file AnasaziLOBPCG.hpp.
virtual Anasazi::LOBPCG< ScalarType, MV, OP >::~LOBPCG | ( | ) | [inline, virtual] |
void Anasazi::LOBPCG< ScalarType, MV, OP >::currentStatus | ( | std::ostream & | os | ) | [inline, virtual] |
This method requests that the solver print out its current status to screen.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2054 of file AnasaziLOBPCG.hpp.
Teuchos::Array< Teuchos::RCP< const MV > > Anasazi::LOBPCG< ScalarType, MV, OP >::getAuxVecs | ( | ) | const [inline, virtual] |
Get the current auxiliary vectors.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2122 of file AnasaziLOBPCG.hpp.
int Anasazi::LOBPCG< ScalarType, MV, OP >::getBlockSize | ( | ) | const [inline, virtual] |
Get the blocksize to be used by the iterative solver in solving this eigenproblem.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2129 of file AnasaziLOBPCG.hpp.
int Anasazi::LOBPCG< ScalarType, MV, OP >::getCurSubspaceDim | ( | ) | const [inline, virtual] |
Get the dimension of the search subspace used to generate the current eigenvectors and eigenvalues.
LOBPCG employs a sequential subspace iteration, maintaining a fixed-rank basis, as opposed to an expanding subspace mechanism employed by Krylov-subspace solvers like BlockKrylovSchur and BlockDavidson.
false
, the return is 0. Otherwise, the return will be 2*getBlockSize() or 3*getBlockSize(). Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2151 of file AnasaziLOBPCG.hpp.
bool Anasazi::LOBPCG< ScalarType, MV, OP >::getFullOrtho | ( | ) | const [inline] |
Determine if the LOBPCG iteration is using full orthogonality.
Definition at line 2114 of file AnasaziLOBPCG.hpp.
int Anasazi::LOBPCG< ScalarType, MV, OP >::getMaxSubspaceDim | ( | ) | const [inline, virtual] |
Get the maximum dimension allocated for the search subspace. For LOBPCG, this always returns 3*getBlockSize(), the dimension of the subspace colspan([X H P]).
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2144 of file AnasaziLOBPCG.hpp.
int Anasazi::LOBPCG< ScalarType, MV, OP >::getNumIters | ( | ) | const [inline, virtual] |
Get the current iteration count.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2223 of file AnasaziLOBPCG.hpp.
const Eigenproblem< ScalarType, MV, OP > & Anasazi::LOBPCG< ScalarType, MV, OP >::getProblem | ( | ) | const [inline, virtual] |
Get a constant reference to the eigenvalue problem.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2136 of file AnasaziLOBPCG.hpp.
std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > Anasazi::LOBPCG< ScalarType, MV, OP >::getRes2Norms | ( | ) | [inline, virtual] |
Get the current residual 2-norms.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 1909 of file AnasaziLOBPCG.hpp.
std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > Anasazi::LOBPCG< ScalarType, MV, OP >::getResNorms | ( | ) | [inline, virtual] |
Get the current residual norms.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 1895 of file AnasaziLOBPCG.hpp.
std::vector< int > Anasazi::LOBPCG< ScalarType, MV, OP >::getRitzIndex | ( | ) | [inline, virtual] |
Get the index used for extracting Ritz vectors from getRitzVectors().
Because BlockDavidson is a Hermitian solver, all Ritz values are real and all Ritz vectors can be represented in a single column of a multivector. Therefore, getRitzIndex() is not needed when using the output from getRitzVectors().
int
vector of size getCurSubspaceDim() composed of zeros. Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2170 of file AnasaziLOBPCG.hpp.
std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > Anasazi::LOBPCG< ScalarType, MV, OP >::getRitzRes2Norms | ( | ) | [inline, virtual] |
Get the 2-norms of the residuals.
The Ritz residuals are not defined for the LOBPCG iteration. Hence, this method returns the 2-norms of the direct residuals, and is equivalent to calling getRes2Norms().
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2161 of file AnasaziLOBPCG.hpp.
std::vector< Value< ScalarType > > Anasazi::LOBPCG< ScalarType, MV, OP >::getRitzValues | ( | ) | [inline, virtual] |
Get the Ritz values from the previous iteration.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2179 of file AnasaziLOBPCG.hpp.
Teuchos::RCP< const MV > Anasazi::LOBPCG< ScalarType, MV, OP >::getRitzVectors | ( | ) | [inline, virtual] |
Get the Ritz vectors from the previous iteration.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2207 of file AnasaziLOBPCG.hpp.
LOBPCGState< ScalarType, MV > Anasazi::LOBPCG< ScalarType, MV, OP >::getState | ( | ) | const [inline] |
Get the current state of the eigensolver.
The data is only valid if isInitialized() == true
. The data for the search directions P is only meaningful if hasP() == true
. Finally, the data for the preconditioned residual (H) is only meaningful in the situation where the solver throws an LOBPCGRitzFailure exception during iterate().
Definition at line 2231 of file AnasaziLOBPCG.hpp.
Teuchos::RCP< StatusTest< ScalarType, MV, OP > > Anasazi::LOBPCG< ScalarType, MV, OP >::getStatusTest | ( | ) | const [inline, virtual] |
Get the current StatusTest used by the solver.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2200 of file AnasaziLOBPCG.hpp.
bool Anasazi::LOBPCG< ScalarType, MV, OP >::hasP | ( | ) | [inline] |
Indicates whether the search direction given by getState() is valid.
Definition at line 2107 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::initialize | ( | ) | [inline, virtual] |
Initialize the solver with the initial vectors from the eigenproblem or random data.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 1262 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::initialize | ( | LOBPCGState< ScalarType, MV > | newstate | ) | [inline] |
Initialize the solver to an iterate, optionally providing the Ritz values, residual, and search direction.
initialize() gives the user the opportunity to manually set these, although this must be done with caution, abiding by the rules given below. All notions of orthogonality and orthonormality are derived from the inner product specified by the orthogonalization manager.
Definition at line 955 of file AnasaziLOBPCG.hpp.
bool Anasazi::LOBPCG< ScalarType, MV, OP >::isInitialized | ( | ) | const [inline, virtual] |
Indicates whether the solver has been initialized or not.
true:
true
,true
,Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2099 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::iterate | ( | ) | [inline, virtual] |
This method performs LOBPCG iterations until the status test indicates the need to stop or an error occurs (in which case, an exception is thrown).
iterate() will first determine whether the solver is initialized; if not, it will call initialize() using default arguments. After initialization, the solver performs LOBPCG iterations until the status test evaluates as Passed, at which point the method returns to the caller.
The LOBPCG iteration proceeds as follows:
The status test is queried at the beginning of the iteration.
Possible exceptions thrown include std::logic_error, std::invalid_argument or one of the LOBPCG-specific exceptions.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 1302 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::resetNumIters | ( | ) | [inline, virtual] |
Reset the iteration count.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2215 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::setAuxVecs | ( | const Teuchos::Array< Teuchos::RCP< const MV > > & | auxvecs | ) | [inline, virtual] |
Set the auxiliary vectors for the solver.
Because the current iterate X and search direction P cannot be assumed orthogonal to the new auxiliary vectors, a call to setAuxVecs() with a non-empty argument will reset the solver to the uninitialized state.
In order to preserve the current state, the user will need to extract it from the solver using getState(), orthogonalize it against the new auxiliary vectors, and manually reinitialize the solver using initialize().
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 910 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::setBlockSize | ( | int | blockSize | ) | [inline, virtual] |
Set the blocksize to be used by the iterative solver in solving this eigenproblem.
If the block size is reduced, then the new iterate (and residual and search direction) are chosen as the subset of the current iterate preferred by the sort manager. Otherwise, the solver state is set to uninitialized.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 686 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::setFullOrtho | ( | bool | fullOrtho | ) | [inline] |
Instruct the LOBPCG iteration to use full orthogonality.
If the getFullOrtho() == false
and isInitialized() == true
and hasP() == true
, then P will be invalidated by setting full orthogonalization to true
.
Definition at line 1272 of file AnasaziLOBPCG.hpp.
void Anasazi::LOBPCG< ScalarType, MV, OP >::setStatusTest | ( | Teuchos::RCP< StatusTest< ScalarType, MV, OP > > | test | ) | [inline, virtual] |
Set a new StatusTest for the solver.
Implements Anasazi::Eigensolver< ScalarType, MV, OP >.
Definition at line 2191 of file AnasaziLOBPCG.hpp.