46 #ifndef ANASAZI_TRACEMIN_DAVIDSON_HPP
47 #define ANASAZI_TRACEMIN_DAVIDSON_HPP
63 namespace Experimental {
79 template <
class ScalarType,
class MV,
class OP>
126 template <
class ScalarType,
class MV,
class OP>
135 TraceMinBase<ScalarType,MV,OP>(problem,sorter,printer,tester,ortho,params)
145 template <
class ScalarType,
class MV,
class OP>
150 "Anasazi::TraceMinDavidson::addToBasis(): Delta does not have blockSize_ columns");
154 std::vector<int> curind(this->curDim_), newind(this->blockSize_);
161 for(
int i=0; i<this->curDim_; i++)
163 lclV = MVT::CloneViewNonConst(*this->V_,curind);
167 for (
int i=0; i<this->blockSize_; ++i)
168 newind[i] = this->curDim_ + i;
169 lclV = MVT::CloneViewNonConst(*this->V_,newind);
172 MVT::SetBlock(*Delta,newind,*this->V_);
173 this->curDim_ += this->blockSize_;
180 lclMV = MVT::CloneViewNonConst(*this->MV_,curind);
184 lclMV = MVT::CloneViewNonConst(*this->MV_,newind);
186 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR
189 this->count_ApplyM_+= this->blockSize_;
190 OPT::Apply(*this->MOp_,*lclV,*lclMV);
194 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR
199 rank = this->orthman_->projectAndNormalizeMat(*lclV,projVecs,
201 Teuchos::null,lclMV,MprojVecs);
208 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR
213 rank = this->orthman_->projectAndNormalizeMat(*lclV,projVecs);
219 "Anasazi::TraceMinDavidson::addToBasis(): Couldn't generate basis of full rank.");
222 if(this->Op_ != Teuchos::null)
224 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR
227 this->count_ApplyOp_+= this->blockSize_;
229 lclKV = MVT::CloneViewNonConst(*this->KV_,newind);
230 OPT::Apply(*this->Op_,*lclV,*lclKV);
241 template <
class ScalarType,
class MV,
class OP>
246 "Anasazi::TraceMinDavidson::addToBasis(): Delta does not have blockSize_ columns");
250 std::vector<int> curind(this->curDim_), newind(this->blockSize_);
256 for(
int i=0; i<this->curDim_; i++)
258 projVecs = MVT::CloneViewNonConst(*this->V_,curind);
260 if(this->Op_ != Teuchos::null)
262 lclKV = MVT::CloneViewNonConst(*this->KV_,curind);
267 for (
int i=0; i<this->blockSize_; ++i)
268 newind[i] = this->curDim_ + i;
269 lclV = MVT::CloneViewNonConst(*this->V_,newind);
272 MVT::SetBlock(*Delta,newind,*this->V_);
273 this->curDim_ += this->blockSize_;
276 if(this->auxVecs_.size() > 0)
277 this->orthman_->projectMat(*lclV,this->auxVecs_);
280 if(this->Op_ != Teuchos::null)
282 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR
285 this->count_ApplyOp_+= this->blockSize_;
287 lclKV = MVT::CloneViewNonConst(*this->KV_,newind);
288 OPT::Apply(*this->Op_,*lclV,*lclKV);
294 int nauxVecs = MVT::GetNumberVecs(*projVecs);
297 this->orthman_->innerProdMat(*KprojVecs,*lclKV,*gamma);
300 MVT::MvTimesMatAddMv(-this->ONE,*KprojVecs,*gamma,this->ONE,*lclKV);
303 MVT::MvTimesMatAddMv(-this->ONE,*projVecs,*gamma,this->ONE,*lclV);
307 rank = this->orthman_->normalizeMat(*lclKV,gamma2);
313 RCP<MV> tempMV = MVT::CloneCopy(*lclV);
314 MVT::MvTimesMatAddMv(this->ONE,*tempMV,*gamma2,this->ZERO,*lclV);
317 "Anasazi::TraceMinDavidson::addToBasis(): Couldn't generate basis of full rank.");
322 #ifdef ANASAZI_TEUCHOS_TIME_MONITOR
325 this->count_ApplyM_+= this->blockSize_;
327 lclMV = MVT::CloneViewNonConst(*this->MV_,newind);
328 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.
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)