42 #ifndef ANASAZI_TRACEMIN_SOLMGR_HPP
43 #define ANASAZI_TRACEMIN_SOLMGR_HPP
65 #include "Teuchos_BLAS.hpp"
66 #include "Teuchos_LAPACK.hpp"
67 #include "Teuchos_TimeMonitor.hpp"
69 # include <Teuchos_FancyOStream.hpp>
79 template<
class ScalarType,
class MV,
class OP>
118 typedef Teuchos::ScalarTraits<ScalarType> SCT;
119 typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
120 typedef Teuchos::ScalarTraits<MagnitudeType> MT;
138 Teuchos::ParameterList &pl );
146 bool exceededMaxIter() {
return (this->iter_ >= maxits_); };
153 { TEUCHOS_TEST_FOR_EXCEPTION(
true, std::logic_error,
"Anasazi::TraceMinSolMgr::performRestart(): TraceMin does not perform restarts!"); };
156 Teuchos::RCP< TraceMinBase<ScalarType,MV,OP> > createSolver(
157 const Teuchos::RCP<
SortManager<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> > &sorter,
160 Teuchos::ParameterList &plist
170 template <
class MagnitudeType,
class MV,
class OP>
175 typedef std::complex<MagnitudeType> ScalarType;
178 Teuchos::ParameterList &pl )
181 MagnitudeType::this_class_is_missing_a_specialization();
187 template<
class ScalarType,
class MV,
class OP>
192 maxits_ = pl.get(
"Maximum Iterations", 100);
193 TEUCHOS_TEST_FOR_EXCEPTION(maxits_ < 1, std::invalid_argument,
"Anasazi::TraceMinSolMgr::constructor(): \"Maximum Iterations\" must be strictly positive.");
197 this->blockSize_ = pl.get(
"Block Size",2*this->problem_->getNEV());
198 TEUCHOS_TEST_FOR_EXCEPTION(this->blockSize_ < this->problem_->getNEV(), std::invalid_argument,
199 "Anasazi::TraceMinSolMgr::constructor(): \"Block Size\" must be greater than or equal to the number of desired eigenpairs.");
201 this->useHarmonic_ = pl.get(
"Use Harmonic Ritz Values",
false);
202 TEUCHOS_TEST_FOR_EXCEPTION(this->useHarmonic_, std::invalid_argument,
203 "Anasazi::TraceMinSolMgr::constructor(): Please disable the harmonic Ritz values. It doesn't make sense to use them with TraceMin, which does not use expanding subspaces. Perhaps you wanted TraceMin-Davidson?");
206 this->numBlocks_ = 1;
207 this->numRestartBlocks_ = 1;
209 TEUCHOS_TEST_FOR_EXCEPTION(static_cast<ptrdiff_t>(this->numBlocks_)*this->blockSize_ + this->maxLocked_ >
MVT::GetGlobalLength(*this->problem_->getInitVec()),
210 std::invalid_argument,
211 "Anasazi::TraceMinSolMgr::constructor(): Potentially impossible orthogonality requests. Reduce basis size or locking size.");
213 TEUCHOS_TEST_FOR_EXCEPTION(this->maxLocked_ + this->blockSize_ < this->problem_->getNEV(), std::invalid_argument,
214 "Anasazi::TraceMinDavidsonSolMgr: Not enough storage space for requested number of eigenpairs.");
220 template <
class ScalarType,
class MV,
class OP>
222 const Teuchos::RCP<
SortManager<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> > &sorter,
225 Teuchos::ParameterList &plist