33 #ifndef ANASAZI_THYRA_DEBUG_ADAPTER_HPP 34 #define ANASAZI_THYRA_DEBUG_ADAPTER_HPP 42 #include <Thyra_DetachedMultiVectorView.hpp> 43 #include <Thyra_MultiVectorBase.hpp> 44 #include <Thyra_MultiVectorStdOps.hpp> 46 #include "Teuchos_Assert.hpp" 47 #include "Teuchos_SerialDenseMatrix.hpp" 48 #include "Teuchos_RCP.hpp" 49 #include "Teuchos_TimeMonitor.hpp" 68 template<
class ScalarType>
73 typedef Teuchos::ScalarTraits<ScalarType> SCT;
74 typedef typename Teuchos::ScalarTraits<ScalarType>::magnitudeType MagnitudeType;
75 typedef Teuchos::ScalarTraits<MagnitudeType> MT;
85 ThyraMultiVec(
const Teuchos::RCP<Thyra::MultiVectorBase< ScalarType > > & mv ) :
86 _timerCreate(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::create")),
87 _timerClone(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::clone")),
88 _timerDestroy(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::destroy")),
89 _timerMvTimesMatAddMv(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvtimesmataddmv")),
90 _timerMvTransMv(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvtransmv")),
91 _timerMvAddMv(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvaddmv")),
92 _timerMvDot(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvdot")),
93 _timerMvNorm(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvnorm")),
94 _timerMvScale(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvscale")),
95 _timerSetBlock(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::setblock")),
96 _timerMvInit(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvinit")),
97 _timerMvRandom(Teuchos::TimeMonitor::getNewTimer(
"ThyraMultiVec::mvrandom"))
99 Teuchos::TimeMonitor timer(*_timerCreate);
109 ThyraMultiVec(
const Teuchos::RCP<Thyra::MultiVectorBase< ScalarType > > & mv, std::vector<Teuchos::RCP<Teuchos::Time> >& timers )
112 Teuchos::TimeMonitor timer(*_timerCreate);
124 Teuchos::TimeMonitor timer(*_timerCreate);
142 Teuchos::TimeMonitor timer(*_timerClone);
143 std::vector<Teuchos::RCP<Teuchos::Time> > myTimers =
getTimers();
153 Teuchos::TimeMonitor timer(*_timerClone);
154 std::vector<Teuchos::RCP<Teuchos::Time> > myTimers =
getTimers();
167 Teuchos::TimeMonitor timer(*_timerClone);
168 std::vector<Teuchos::RCP<Teuchos::Time> > myTimers =
getTimers();
181 Teuchos::TimeMonitor timer(*_timerClone);
182 std::vector<Teuchos::RCP<Teuchos::Time> > myTimers =
getTimers();
195 Teuchos::TimeMonitor timer(*_timerClone);
196 std::vector<Teuchos::RCP<Teuchos::Time> > myTimers =
getTimers();
197 Teuchos::RCP<Thyra::MultiVectorBase<ScalarType> > nonconst_ptr_to_const_view = Teuchos::rcp_const_cast<Thyra::MultiVectorBase<ScalarType> >(
MVT::CloneView(*Thyra_MV,index) );
220 const Teuchos::SerialDenseMatrix<int,ScalarType>& B,
223 Teuchos::TimeMonitor timer(*_timerMvTimesMatAddMv);
233 Teuchos::TimeMonitor timer(*_timerMvAddMv);
242 #ifdef HAVE_ANASAZI_EXPERIMENTAL
247 Teuchos::TimeMonitor timer(*_timerMvTransMv);
255 #ifdef HAVE_ANASAZI_EXPERIMENTAL
260 Teuchos::TimeMonitor timer(*_timerMvDot);
267 void MvScale ( ScalarType alpha ) { Teuchos::TimeMonitor timer(*_timerMvScale);
MVT::MvScale( *Thyra_MV, alpha ); }
271 void MvScale (
const std::vector<ScalarType>& alpha ) { Teuchos::TimeMonitor timer(*_timerMvScale);
MVT::MvScale( *Thyra_MV, alpha ); }
280 void MvNorm ( std::vector<
typename Teuchos::ScalarTraits<ScalarType>::magnitudeType> &normvec )
const { Teuchos::TimeMonitor timer(*_timerMvNorm);
MVT::MvNorm( *Thyra_MV, normvec ); }
292 Teuchos::TimeMonitor timer(*_timerSetBlock);
303 void MvInit ( ScalarType alpha ) { Teuchos::TimeMonitor timer(*_timerMvInit);
MVT::MvInit( *Thyra_MV, alpha ); }
309 Teuchos::RCP< Thyra::MultiVectorBase<ScalarType> >
getRCP() {
return Thyra_MV; }
313 Teuchos::RCP< const Thyra::MultiVectorBase<ScalarType> >
getRCP()
const {
return Thyra_MV; }
317 std::vector<Teuchos::RCP<Teuchos::Time> >
getTimers()
const {
318 std::vector<Teuchos::RCP<Teuchos::Time> > timers;
319 timers.push_back( _timerCreate );
320 timers.push_back( _timerClone );
321 timers.push_back( _timerDestroy );
322 timers.push_back( _timerMvTimesMatAddMv );
323 timers.push_back( _timerMvTransMv );
324 timers.push_back( _timerMvAddMv );
325 timers.push_back( _timerMvDot );
326 timers.push_back( _timerMvNorm );
327 timers.push_back( _timerMvScale );
328 timers.push_back( _timerSetBlock );
329 timers.push_back( _timerMvInit );
330 timers.push_back( _timerMvRandom );
337 void copyTimers(
const std::vector<Teuchos::RCP<Teuchos::Time> >& timers ) {
338 _timerCreate = timers[0];
339 _timerClone = timers[1];
340 _timerDestroy = timers[2];
341 _timerMvTimesMatAddMv = timers[3];
342 _timerMvTransMv = timers[4];
343 _timerMvAddMv = timers[5];
344 _timerMvDot = timers[6];
345 _timerMvNorm = timers[7];
346 _timerMvScale = timers[8];
347 _timerSetBlock = timers[9];
348 _timerMvInit = timers[10];
349 _timerMvRandom = timers[11];
363 Teuchos::RCP<Thyra::MultiVectorBase<ScalarType> > Thyra_MV;
364 Teuchos::RCP<Teuchos::Time> _timerCreate, _timerClone, _timerDestroy;
365 Teuchos::RCP<Teuchos::Time> _timerMvTimesMatAddMv, _timerMvTransMv, _timerMvAddMv, _timerMvDot;
366 Teuchos::RCP<Teuchos::Time> _timerMvNorm, _timerMvScale, _timerSetBlock, _timerMvInit, _timerMvRandom;
382 template<
class ScalarType>
392 ThyraOp(
const Teuchos::RCP<
const Thyra::LinearOpBase<ScalarType> > &Op ) { Thyra_Op = Op; }
408 OPT::Apply( *Thyra_Op, *(vec_X->
getRCP()), *(vec_Y->
getRCP()) );
414 Teuchos::RCP<const Thyra::LinearOpBase<ScalarType> > Thyra_Op;
static void MvNorm(const TMVB &mv, std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec)
Compute the 2-norm of each individual vector of mv. Upon return, normvec[i] holds the value of ...
int GetNumberVecs() const
Obtain the vector length of *this.
const MultiVec< ScalarType > * CloneView(const std::vector< int > &index) const
Creates a new ThyraMultiVec that shares the selected contents of *this.
MultiVec< ScalarType > * CloneViewNonConst(const std::vector< int > &index)
Creates a new ThyraMultiVec that shares the selected contents of *this.
static void MvDot(const TMVB &mv, const TMVB &A, std::vector< ScalarType > &b)
Compute a vector b where the components are the individual dot-products of the i-th columns of A and ...
ThyraOp(const Teuchos::RCP< const Thyra::LinearOpBase< ScalarType > > &Op)
Basic constructor. Accepts reference-counted pointer to an Thyra_Operator.
void Apply(const MultiVec< ScalarType > &X, MultiVec< ScalarType > &Y) const
This method takes the Anasazi::MultiVec X and applies the operator to it resulting in the Anasazi::Mu...
Teuchos::RCP< Thyra::MultiVectorBase< ScalarType > > getRCP()
Return the reference-counted pointer held by this object.
ptrdiff_t GetGlobalLength() const
Obtain the number of vectors in *this.
Virtual base class which defines basic traits for the operator type.
Template specialization of Anasazi::OperatorTraits class using the Thyra::LinearOpBase virtual base c...
void MvDot(const MultiVec< ScalarType > &A, std::vector< ScalarType > &b) const
Compute a vector b where the components are the individual dot-products, i.e. where A[i] is the i-th...
void copyTimers(const std::vector< Teuchos::RCP< Teuchos::Time > > &timers)
Copy a std::vector<> of timers into this object.
static void MvTimesMatAddMv(const ScalarType alpha, const TMVB &A, const Teuchos::SerialDenseMatrix< int, ScalarType > &B, const ScalarType beta, TMVB &mv)
Update mv with .
void MvInit(ScalarType alpha)
Replace each element of the vectors in *this with alpha.
Template specialization of Anasazi::MultiVecTraits class using the Thyra::MultiVectorBase class...
Interface for multivectors used by Anasazi' linear solvers.
void MvNorm(std::vector< typename Teuchos::ScalarTraits< ScalarType >::magnitudeType > &normvec) const
Compute the 2-norm of each individual vector of *this. Upon return, normvec[i] holds the 2-norm of th...
Namespace Anasazi contains the classes, structs, enums and utilities used by the Anasazi package...
void MvScale(const std::vector< ScalarType > &alpha)
Scale each element of the i-th vector in *this with alpha[i].
static void MvPrint(const TMVB &mv, std::ostream &os)
Print the mv multi-vector to the os output stream.
ConjType
Enumerated types used to specify conjugation arguments.
void MvRandom()
Fill the vectors in *this with random numbers.
void MvTransMv(ScalarType alpha, const MultiVec< ScalarType > &A, Teuchos::SerialDenseMatrix< int, ScalarType > &B) const
Compute a dense matrix B through the matrix-matrix multiply .
static void MvTransMv(const ScalarType alpha, const TMVB &A, const TMVB &mv, Teuchos::SerialDenseMatrix< int, ScalarType > &B)
Compute a dense matrix B through the matrix-matrix multiply .
MultiVec< ScalarType > * CloneCopy(const std::vector< int > &index) const
Creates a new ThyraMultiVec and copies the selected contents of *this into the new vector (deep copy)...
Basic adapter class for Anasazi::MultiVec that uses Thyra::MultiVectorBase<ScalarType>.
Traits class which defines basic operations on multivectors.
ThyraMultiVec(const Teuchos::RCP< Thyra::MultiVectorBase< ScalarType > > &mv, std::vector< Teuchos::RCP< Teuchos::Time > > &timers)
Basic ThyraMultiVec constructor (wraps Thyra::MultiVectorBase<> object).
Specializations of the Anasazi multi-vector and operator traits classes using Thyra base classes Line...
void MvPrint(std::ostream &os) const
Print *this ThyraMultiVec.
static void MvAddMv(const ScalarType alpha, const TMVB &A, const ScalarType beta, const TMVB &B, TMVB &mv)
Replace mv with .
Anasazi header file which uses auto-configuration information to include necessary C++ headers...
static void MvRandom(TMVB &mv)
Replace the vectors in mv with random vectors.
void MvAddMv(ScalarType alpha, const MultiVec< ScalarType > &A, ScalarType beta, const MultiVec< ScalarType > &B)
Replace *this with .
Basic adapter class for Anasazi::Operator that uses Thyra_Operator.
std::vector< Teuchos::RCP< Teuchos::Time > > getTimers() const
Return a std::vector<> of timers held by this object.
void MvScale(ScalarType alpha)
Scale each element of the vectors in *this with alpha.
static int GetNumberVecs(const TMVB &mv)
Obtain the number of vectors in mv.
Templated virtual class for creating operators that can interface with the Anasazi::OperatorTraits cl...
MultiVec< ScalarType > * CloneCopy() const
Creates a new ThyraMultiVec and copies contents of *this into the new vector (deep copy)...
static void SetBlock(const TMVB &A, const std::vector< int > &index, TMVB &mv)
Copy the vectors in A to a set of vectors in mv indicated by the indices given in index...
static Teuchos::RCP< TMVB > CloneViewNonConst(TMVB &mv, const std::vector< int > &index)
Creates a new MultiVectorBase that shares the selected contents of mv (shallow copy).
static void MvInit(TMVB &mv, ScalarType alpha=Teuchos::ScalarTraits< ScalarType >::zero())
Replace each element of the vectors in mv with alpha.
Types and exceptions used within Anasazi solvers and interfaces.
ThyraMultiVec(const ThyraMultiVec< ScalarType > &mv)
Copy constructor.
static Teuchos::RCP< TMVB > CloneCopy(const TMVB &mv)
Creates a new MultiVectorBase and copies contents of mv into the new vector (deep copy)...
virtual ~ThyraMultiVec()
Destructor.
MultiVec< ScalarType > * Clone(const int numvecs) const
Creates a new empty ThyraMultiVec containing numvecs columns.
void SetBlock(const MultiVec< ScalarType > &A, const std::vector< int > &index)
Copy the vectors in A to a set of vectors in *this.
void MvTimesMatAddMv(ScalarType alpha, const MultiVec< ScalarType > &A, const Teuchos::SerialDenseMatrix< int, ScalarType > &B, ScalarType beta)
Update *this with .
static ptrdiff_t GetGlobalLength(const TMVB &mv)
Obtain the vector length of mv.
Interface for multivectors used by Anasazi's linear solvers.
Teuchos::RCP< const Thyra::MultiVectorBase< ScalarType > > getRCP() const
Return the const reference-counted pointer held by this object.
static Teuchos::RCP< const TMVB > CloneView(const TMVB &mv, const std::vector< int > &index)
Creates a new const MultiVectorBase that shares the selected contents of mv (shallow copy)...
ThyraMultiVec(const Teuchos::RCP< Thyra::MultiVectorBase< ScalarType > > &mv)
Basic ThyraMultiVec constructor (wraps Thyra::MultiVectorBase<> object).
Anasazi's templated virtual class for constructing an operator that can interface with the OperatorTr...
static void MvScale(TMVB &mv, const ScalarType alpha)
Scale each element of the vectors in *this with alpha.
static Teuchos::RCP< TMVB > Clone(const TMVB &mv, const int numvecs)
Creates a new empty MultiVectorBase containing numvecs columns.