33 #ifndef ANASAZI_TRACEMIN_DAVIDSON_HPP 34 #define ANASAZI_TRACEMIN_DAVIDSON_HPP 66 template <
class ScalarType,
class MV,
class OP>
113 template <
class ScalarType,
class MV,
class OP>
122 TraceMinBase<ScalarType,MV,OP>(problem,sorter,printer,tester,ortho,params)
132 template <
class ScalarType,
class MV,
class OP>
137 "Anasazi::TraceMinDavidson::addToBasis(): Delta does not have blockSize_ columns");
141 std::vector<int> curind(this->curDim_), newind(this->blockSize_);
148 for(
int i=0; i<this->curDim_; i++)
150 lclV = MVT::CloneViewNonConst(*this->V_,curind);
154 for (
int i=0; i<this->blockSize_; ++i)
155 newind[i] = this->curDim_ + i;
156 lclV = MVT::CloneViewNonConst(*this->V_,newind);
159 MVT::SetBlock(*Delta,newind,*this->V_);
160 this->curDim_ += this->blockSize_;
167 lclMV = MVT::CloneViewNonConst(*this->MV_,curind);
171 lclMV = MVT::CloneViewNonConst(*this->MV_,newind);
173 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR 176 this->count_ApplyM_+= this->blockSize_;
177 OPT::Apply(*this->MOp_,*lclV,*lclMV);
181 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR 186 rank = this->orthman_->projectAndNormalizeMat(*lclV,projVecs,
188 Teuchos::null,lclMV,MprojVecs);
195 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR 200 rank = this->orthman_->projectAndNormalizeMat(*lclV,projVecs);
206 "Anasazi::TraceMinDavidson::addToBasis(): Couldn't generate basis of full rank.");
209 if(this->Op_ != Teuchos::null)
211 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR 214 this->count_ApplyOp_+= this->blockSize_;
216 lclKV = MVT::CloneViewNonConst(*this->KV_,newind);
217 OPT::Apply(*this->Op_,*lclV,*lclKV);
228 template <
class ScalarType,
class MV,
class OP>
233 "Anasazi::TraceMinDavidson::addToBasis(): Delta does not have blockSize_ columns");
237 std::vector<int> curind(this->curDim_), newind(this->blockSize_);
243 for(
int i=0; i<this->curDim_; i++)
245 projVecs = MVT::CloneViewNonConst(*this->V_,curind);
247 if(this->Op_ != Teuchos::null)
249 lclKV = MVT::CloneViewNonConst(*this->KV_,curind);
254 for (
int i=0; i<this->blockSize_; ++i)
255 newind[i] = this->curDim_ + i;
256 lclV = MVT::CloneViewNonConst(*this->V_,newind);
259 MVT::SetBlock(*Delta,newind,*this->V_);
260 this->curDim_ += this->blockSize_;
263 if(this->auxVecs_.size() > 0)
264 this->orthman_->projectMat(*lclV,this->auxVecs_);
267 if(this->Op_ != Teuchos::null)
269 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR 272 this->count_ApplyOp_+= this->blockSize_;
274 lclKV = MVT::CloneViewNonConst(*this->KV_,newind);
275 OPT::Apply(*this->Op_,*lclV,*lclKV);
281 int nauxVecs = MVT::GetNumberVecs(*projVecs);
284 this->orthman_->innerProdMat(*KprojVecs,*lclKV,*gamma);
287 MVT::MvTimesMatAddMv(-this->ONE,*KprojVecs,*gamma,this->ONE,*lclKV);
290 MVT::MvTimesMatAddMv(-this->ONE,*projVecs,*gamma,this->ONE,*lclV);
294 rank = this->orthman_->normalizeMat(*lclKV,gamma2);
300 RCP<MV> tempMV = MVT::CloneCopy(*lclV);
301 MVT::MvTimesMatAddMv(this->ONE,*tempMV,*gamma2,this->ZERO,*lclV);
304 "Anasazi::TraceMinDavidson::addToBasis(): Couldn't generate basis of full rank.");
309 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR 312 this->count_ApplyM_+= this->blockSize_;
314 lclMV = MVT::CloneViewNonConst(*this->MV_,newind);
315 OPT::Apply(*this->MOp_,*lclV,*lclMV);
Abstract base class for trace minimization eigensolvers.
Templated virtual class for providing orthogonalization/orthonormalization methods with matrix-based ...
This class defines the interface required by an eigensolver and status test class to compute solution...
Declaration of basic traits for the multivector type.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Virtual base class which defines basic traits for the operator type.
Pure virtual base class which describes the basic interface to the iterative eigensolver.
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package...
Anasazi's templated virtual class for providing routines for orthogonalization and orthonormalization...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Output managers remove the need for the eigensolver to know any information about the required output...
TraceMinDavidson(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)
TraceMinBase constructor with eigenproblem, solver utilities, and parameter list of solver options...
Traits class which defines basic operations on multivectors.
Virtual base class which defines basic traits for the operator type.
Anasazi header file which uses auto-configuration information to include necessary C++ headers...
void push_back(const value_type &x)
This class implements a TraceMin-Davidson iteration for solving symmetric generalized eigenvalue prob...
This is an abstract base class for the trace minimization eigensolvers.
Anasazi's templated pure virtual class for managing the sorting of approximate eigenvalues computed b...
Common interface of stopping criteria for Anasazi's solvers.
int setMatrix(const RCP< SerialDenseMatrix< OrdinalType, ScalarType > > &A)