16#ifndef ANASAZI_TRACEMIN_DAVIDSON_SOLMGR_HPP 
   17#define ANASAZI_TRACEMIN_DAVIDSON_SOLMGR_HPP 
   77template<
class ScalarType, 
class MV, 
class OP>
 
   83    typedef Teuchos::ScalarTraits<ScalarType> SCT;
 
   84    typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
 
   85    typedef Teuchos::ScalarTraits<MagnitudeType> MT;
 
  117                          Teuchos::ParameterList &pl );
 
  126      return (solver->getCurSubspaceDim() == solver->getMaxSubspaceDim());
 
  133    Teuchos::RCP< TraceMinBase<ScalarType,MV,OP> > createSolver(
 
  134            const Teuchos::RCP<
SortManager<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> > &sorter,
 
  137            Teuchos::ParameterList &plist)
 
 
  149template <
class MagnitudeType, 
class MV, 
class OP>
 
  154    typedef std::complex<MagnitudeType> ScalarType;
 
  157            Teuchos::ParameterList &pl )
 
  160        MagnitudeType::this_class_is_missing_a_specialization();
 
  166template<
class ScalarType, 
class MV, 
class OP>
 
  171  maxRestarts_ = pl.get(
"Maximum Restarts", 50);
 
  172  TEUCHOS_TEST_FOR_EXCEPTION(maxRestarts_ <= 0, std::invalid_argument,
 
  173         "Anasazi::TraceMinDavidsonSolMgr::constructor(): \"Maximum Restarts\" must be strictly positive.");
 
  175  this->useHarmonic_ = pl.get(
"Use Harmonic Ritz Values", 
false);
 
  177  TEUCHOS_TEST_FOR_EXCEPTION(this->useHarmonic_ && problem->getM() != Teuchos::null, std::invalid_argument, 
"Anasazi::TraceMinDavidsonSolMgr::constructor(): Harmonic Ritz values do not currently work with generalized eigenvalue problems.  Please disable \"Use Harmonic Ritz Values\".");
 
  180  this->blockSize_ = pl.get(
"Block Size", 1);
 
  181  TEUCHOS_TEST_FOR_EXCEPTION(this->blockSize_ <= 0, std::invalid_argument,
 
  182         "Anasazi::TraceMinDavidsonSolMgr::constructor(): \"Block Size\" must be strictly positive.");
 
  184  this->numRestartBlocks_ = (int)std::ceil(this->problem_->getNEV() / this->blockSize_);
 
  185  this->numRestartBlocks_ = pl.get(
"Num Restart Blocks", this->numRestartBlocks_);
 
  186  TEUCHOS_TEST_FOR_EXCEPTION(this->numRestartBlocks_ <= 0, std::invalid_argument,
 
  187         "Anasazi::TraceMinDavidsonSolMgr::constructor(): \"Num Restart Blocks\" must be strictly positive.");
 
  189  this->numBlocks_ = pl.get(
"Num Blocks", 3*this->numRestartBlocks_);
 
  190  TEUCHOS_TEST_FOR_EXCEPTION(this->numBlocks_ <= 1, std::invalid_argument,
 
  191         "Anasazi::TraceMinDavidsonSolMgr::constructor(): \"Num Blocks\" must be greater than 1.  If you only wish to use one block, please use TraceMinSolMgr instead of TraceMinDavidsonSolMgr.");
 
  193  TEUCHOS_TEST_FOR_EXCEPTION(this->numRestartBlocks_ >= this->numBlocks_, std::invalid_argument,
 
  194         "Anasazi::TraceMinDavidsonSolMgr::constructor(): \"Num Blocks\" must be strictly greater than \"Num Restart Blocks\".");
 
  196  std::stringstream ss;
 
  197  ss << 
"Anasazi::TraceMinDavidsonSolMgr::constructor(): Potentially impossible orthogonality requests. Reduce basis size (" << 
static_cast<ptrdiff_t
>(this->numBlocks_)*this->blockSize_ << 
") or locking size (" << this->maxLocked_ << 
") because " << 
static_cast<ptrdiff_t
>(this->numBlocks_) << 
"*" << this->blockSize_ << 
" + " << this->maxLocked_ << 
" > " << MVT::GetGlobalLength(*this->problem_->getInitVec()) << 
".";
 
  198  TEUCHOS_TEST_FOR_EXCEPTION(
static_cast<ptrdiff_t
>(this->numBlocks_)*this->blockSize_ + this->maxLocked_ > MVT::GetGlobalLength(*this->problem_->getInitVec()),
 
  199         std::invalid_argument, ss.str());
 
  201  TEUCHOS_TEST_FOR_EXCEPTION(this->maxLocked_ + this->blockSize_ < this->problem_->getNEV(), std::invalid_argument,
 
  202         "Anasazi::TraceMinDavidsonSolMgr: Not enough storage space for requested number of eigenpairs.");
 
 
  208template <
class ScalarType, 
class MV, 
class OP>
 
  211#ifdef ANASAZI_TEUCHOS_TIME_MONITOR 
  212  Teuchos::TimeMonitor restimer(*this->_timerRestarting);
 
  215  if ( numRestarts >= maxRestarts_ ) {
 
  220  this->printer_->stream(
IterationDetails) << 
" Performing restart number " << numRestarts << 
" of " << maxRestarts_ << std::endl << std::endl;
 
  222  TraceMinBaseState<ScalarType,MV> oldstate = solver->getState();
 
  223  TraceMinBaseState<ScalarType,MV> newstate;
 
  224  int newdim = this->numRestartBlocks_*this->blockSize_;
 
  225  std::vector<int> indToCopy(newdim);
 
  226  for(
int i=0; i<newdim; i++) indToCopy[i] = i;
 
  230  if(this->useHarmonic_)
 
  232    newstate.V = MVT::CloneView(*solver->getRitzVectors(),indToCopy);
 
  233    newstate.curDim = newdim;
 
  238    this->copyPartOfState (oldstate, newstate, indToCopy);
 
  242  newstate.NEV = oldstate.NEV;
 
  243  solver->initialize(newstate);
 
Anasazi header file which uses auto-configuration information to include necessary C++ headers.
 
The Anasazi::TraceMinBaseSolMgr provides an abstract base class for the TraceMin series of solver man...
 
Implementation of the TraceMin-Davidson method.
 
This class defines the interface required by an eigensolver and status test class to compute solution...
 
The Anasazi::TraceMinBaseSolMgr provides an abstract base class for the TraceMin series of solver man...
 
This is an abstract base class for the trace minimization eigensolvers.
 
The Anasazi::TraceMinDavidsonSolMgr provides a flexible solver manager over the TraceMinDavidson eige...
 
TraceMinDavidsonSolMgr(const Teuchos::RCP< Eigenproblem< ScalarType, MV, OP > > &problem, Teuchos::ParameterList &pl)
Basic constructor for TraceMinDavidsonSolMgr.
 
This class implements a TraceMin-Davidson iteration for solving symmetric generalized eigenvalue prob...
 
Anasazi's templated virtual class for providing routines for orthogonalization and orthonormalization...
 
Traits class which defines basic operations on multivectors.
 
Virtual base class which defines basic traits for the operator type.
 
Anasazi's templated pure virtual class for managing the sorting of approximate eigenvalues computed b...
 
Common interface of stopping criteria for Anasazi's solvers.
 
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package.