47 #ifndef ANASAZI_MATORTHOMANAGER_HPP 48 #define ANASAZI_MATORTHOMANAGER_HPP 75 template <
class ScalarType,
class MV,
class OP>
124 const MV& X,
const MV& Y,
313 mutable int _OpCounter;
317 template <
class ScalarType,
class MV,
class OP>
319 : _Op(Op), _hasOp(Op!=
Teuchos::null), _OpCounter(0) {}
321 template <
class ScalarType,
class MV,
class OP>
325 _hasOp = (_Op != Teuchos::null);
328 template <
class ScalarType,
class MV,
class OP>
334 template <
class ScalarType,
class MV,
class OP>
340 template <
class ScalarType,
class MV,
class OP>
346 template <
class ScalarType,
class MV,
class OP>
359 if ( MVT::GetNumberVecs(X) < MVT::GetNumberVecs(Y) ) {
360 R = MVT::Clone(X,MVT::GetNumberVecs(X));
361 OPT::Apply(*_Op,X,*R);
362 _OpCounter += MVT::GetNumberVecs(X);
364 Q = Teuchos::rcpFromRef(Y);
367 P = Teuchos::rcpFromRef(X);
368 R = MVT::Clone(Y,MVT::GetNumberVecs(Y));
369 OPT::Apply(*_Op,Y,*R);
370 _OpCounter += MVT::GetNumberVecs(Y);
375 P = Teuchos::rcpFromRef(X);
376 Q = Teuchos::rcpFromRef(Y);
379 MVT::MvTransMv(SCT::one(),*P,*Q,Z);
382 template <
class ScalarType,
class MV,
class OP>
393 if ( MY == Teuchos::null ) {
398 MVT::MvTransMv(SCT::one(),X,*MY,Z);
402 MVT::MvTransMv(SCT::one(),X,Y,Z);
405 for (
int j=0; j<Z.
numCols(); j++) {
406 for (
int i=0; i<Z.
numRows(); i++) {
408 "Anasazi::MatOrthoManager::innerProdMat(): detected NaN/inf.");
414 template <
class ScalarType,
class MV,
class OP>
418 this->normMat(X,normvec);
421 template <
class ScalarType,
class MV,
class OP>
432 int nvecs = MVT::GetNumberVecs(X);
438 if (normvec.size() <
static_cast<size_t>(nvecs))
439 normvec.resize (nvecs);
444 MVT::MvNorm(X, normvec);
451 if(MX == Teuchos::null) {
453 OPT::Apply(*_Op,X,*tempVec);
460 const int numColsMX = MVT::GetNumberVecs(*MX);
462 "MatOrthoManager::norm(X, MX, normvec): " 463 "MX has fewer columns than X: " 464 "MX has " << numColsMX <<
" columns, " 465 "and X has " << nvecs <<
" columns.");
468 std::vector<ScalarType> dotvec(nvecs);
469 MVT::MvDot(X,*MX,dotvec);
470 for (
int i=0; i<nvecs; i++) {
471 normvec[i] = MT::squareroot( SCT::magnitude(dotvec[i]) );
476 template <
class ScalarType,
class MV,
class OP>
483 this->projectMat(X,Q,C);
486 template <
class ScalarType,
class MV,
class OP>
490 return this->normalizeMat(X,B);
493 template <
class ScalarType,
class MV,
class OP>
501 return this->projectAndNormalizeMat(X,Q,C,B);
504 template <
class ScalarType,
class MV,
class OP>
508 return this->orthonormErrorMat(X,Teuchos::null);
511 template <
class ScalarType,
class MV,
class OP>
515 return this->orthogErrorMat(X1,X2);
void project(MV &X, Teuchos::Array< Teuchos::RCP< const MV > > Q, Teuchos::Array< Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > > C=Teuchos::tuple(Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > >(Teuchos::null))) const
Implements the interface OrthoManager::project().
virtual void setOp(Teuchos::RCP< const OP > Op)
Set operator used for inner product.
Declaration of basic traits for the multivector type.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
void norm(const MV &X, std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec) const
Implements the interface OrthoManager::norm().
Virtual base class which defines basic traits for the operator type.
Teuchos::ScalarTraits< ScalarType >::magnitudeType orthogError(const MV &X1, const MV &X2) const
Implements the interface OrthoManager::orthogError().
virtual void projectMat(MV &X, Teuchos::Array< Teuchos::RCP< const MV > > Q, Teuchos::Array< Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > > C=Teuchos::tuple(Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > >(Teuchos::null)), Teuchos::RCP< MV > MX=Teuchos::null, Teuchos::Array< Teuchos::RCP< const MV > > MQ=Teuchos::tuple(Teuchos::RCP< const MV >(Teuchos::null))) const =0
Provides matrix-based projection method.
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package...
int normalize(MV &X, Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > B=Teuchos::null) const
Implements the interface OrthoManager::normalize().
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)
OrdinalType numRows() const
virtual Teuchos::ScalarTraits< ScalarType >::magnitudeType orthonormErrorMat(const MV &X, Teuchos::RCP< const MV > MX=Teuchos::null) const =0
This method computes the error in orthonormality of a multivector.
MatOrthoManager(Teuchos::RCP< const OP > Op=Teuchos::null)
Default constructor.
Templated virtual class for providing orthogonalization/orthonormalization methods.
void normMat(const MV &X, std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec, Teuchos::RCP< const MV > MX=Teuchos::null) const
Provides the norm induced by the matrix-based inner product.
Traits class which defines basic operations on multivectors.
Virtual base class which defines basic traits for the operator type.
virtual ~MatOrthoManager()
Destructor.
Anasazi header file which uses auto-configuration information to include necessary C++ headers...
void innerProdMat(const MV &X, const MV &Y, Teuchos::SerialDenseMatrix< int, ScalarType > &Z, Teuchos::RCP< const MV > MX=Teuchos::null, Teuchos::RCP< const MV > MY=Teuchos::null) const
Provides a matrix-based inner product.
virtual Teuchos::RCP< const OP > getOp() const
Get operator used for inner product.
void resetOpCounter()
Reset the operator counter to zero.
int projectAndNormalize(MV &X, Teuchos::Array< Teuchos::RCP< const MV > > Q, Teuchos::Array< Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > > C=Teuchos::tuple(Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > >(Teuchos::null)), Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > B=Teuchos::null) const
Implements the interface OrthoManager::projectAndNormalize().
Teuchos::ScalarTraits< ScalarType >::magnitudeType orthonormError(const MV &X) const
Implements the interface OrthoManager::orthonormError().
virtual int normalizeMat(MV &X, Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > B=Teuchos::null, Teuchos::RCP< MV > MX=Teuchos::null) const =0
Provides matrix-based orthonormalization method.
int getOpCounter() const
Retrieve operator counter.
Types and exceptions used within Anasazi solvers and interfaces.
Anasazi's templated virtual class for providing routines for orthogonalization and orthonormalization...
OrdinalType numCols() const
virtual Teuchos::ScalarTraits< ScalarType >::magnitudeType orthogErrorMat(const MV &X, const MV &Y, Teuchos::RCP< const MV > MX=Teuchos::null, Teuchos::RCP< const MV > MY=Teuchos::null) const =0
This method computes the error in orthogonality of two multivectors.
void innerProd(const MV &X, const MV &Y, Teuchos::SerialDenseMatrix< int, ScalarType > &Z) const
Implements the interface OrthoManager::innerProd().
virtual int projectAndNormalizeMat(MV &X, Teuchos::Array< Teuchos::RCP< const MV > > Q, Teuchos::Array< Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > > C=Teuchos::tuple(Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > >(Teuchos::null)), Teuchos::RCP< Teuchos::SerialDenseMatrix< int, ScalarType > > B=Teuchos::null, Teuchos::RCP< MV > MX=Teuchos::null, Teuchos::Array< Teuchos::RCP< const MV > > MQ=Teuchos::tuple(Teuchos::RCP< const MV >(Teuchos::null))) const =0
Provides matrix-based projection/orthonormalization method.