/*! \brief Compute a vector \c b where the components are the individual dot-products of the \c i-th columns of \c A and \c mv, i.e.\f$b[i] = A[i]^H mv[i]\f$. */ static void MvDot( const MultiVec<ScalarType>& mv, const MultiVec<ScalarType>& A, std::vector<ScalarType> & b #ifdef HAVE_ANASAZI_EXPERIMENTAL , ConjType conj = Anasazi::CONJ #endif ) { mv.MvDot( A, b #ifdef HAVE_ANASAZI_EXPERIMENTAL , conj #endif ); }
/*! \brief Compute a dense matrix \c B through the matrix-matrix multiply \f$ \alpha A^Tmv \f$. */ static void MvTransMv( ScalarType alpha, const MultiVec<ScalarType>& A, const MultiVec<ScalarType>& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B #ifdef HAVE_ANASAZI_EXPERIMENTAL , ConjType conj = Anasazi::CONJ #endif ) { mv.MvTransMv(alpha, A, B #ifdef HAVE_ANASAZI_EXPERIMENTAL , conj #endif ); }
void EpetraOpMultiVec::SetBlock( const MultiVec<double>& A, const std::vector<int>& index ) { // this should be revisited to e EpetraOpMultiVec temp_vec(Epetra_OP, Epetra_DataAccess::View, *Epetra_MV, index); int numvecs = index.size(); if ( A.GetNumberVecs() != numvecs ) { std::vector<int> index2( numvecs ); for(int i=0; i<numvecs; i++) index2[i] = i; EpetraOpMultiVec *tmp_vec = dynamic_cast<EpetraOpMultiVec *>(&const_cast<MultiVec<double> &>(A)); TEUCHOS_TEST_FOR_EXCEPTION( tmp_vec==NULL, std::invalid_argument, "Anasazi::EpetraOpMultiVec::SetBlocks() cast of MultiVec<double> to EpetraOpMultiVec failed."); EpetraOpMultiVec A_vec(Epetra_OP, Epetra_DataAccess::View, *(tmp_vec->GetEpetraMultiVector()), index2); temp_vec.MvAddMv( 1.0, A_vec, 0.0, A_vec ); } else { temp_vec.MvAddMv( 1.0, A, 0.0, A ); } }
void EpetraMultiVec::SetBlock( const MultiVec<double>& A, const std::vector<int>& index ) { EpetraMultiVec temp_vec(View, *this, index); int numvecs = index.size(); if ( A.GetNumberVecs() != numvecs ) { std::vector<int> index2( numvecs ); for(int i=0; i<numvecs; i++) index2[i] = i; EpetraMultiVec *tmp_vec = dynamic_cast<EpetraMultiVec *>(&const_cast<MultiVec<double> &>(A)); TEST_FOR_EXCEPTION(tmp_vec==NULL, EpetraMultiVecFailure, "Belos::EpetraMultiVec::SetBlock cast from Belos::MultiVec<> to Belos::EpetraMultiVec failed."); EpetraMultiVec A_vec(View, *tmp_vec, index2); temp_vec.MvAddMv( 1.0, A_vec, 0.0, A_vec ); } else { temp_vec.MvAddMv( 1.0, A, 0.0, A ); } }
static void MvNorm( const MultiVec<ScalarType>& mv, std::vector<typename Teuchos::ScalarTraits<ScalarType>::magnitudeType>& normvec, NormType type = TwoNorm ) { mv.MvNorm(normvec,type); }
static void MvDot( const MultiVec<ScalarType>& mv, const MultiVec<ScalarType>& A, std::vector<ScalarType>& b ) { mv.MvDot( A, b ); }
static void MvTransMv( const ScalarType alpha, const MultiVec<ScalarType>& A, const MultiVec<ScalarType>& mv, Teuchos::SerialDenseMatrix<int,ScalarType>& B ) { mv.MvTransMv(alpha, A, B); }
static void MvScale ( MultiVec<ScalarType>& mv, const std::vector<ScalarType>& alpha ) { mv.MvScale(alpha); }
static void MvScale ( MultiVec<ScalarType>& mv, const ScalarType alpha ) { mv.MvScale( alpha ); }
static void MvInit( MultiVec<ScalarType>& mv, ScalarType alpha = Teuchos::ScalarTraits<ScalarType>::zero() ) { mv.MvInit(alpha); }
static int GetNumberVecs( const MultiVec<ScalarType>& mv ) { return mv.GetNumberVecs(); }
static int GetVecLength( const MultiVec<ScalarType>& mv ) { return mv.GetVecLength(); }
static Teuchos::RCP<MultiVec<ScalarType> > CloneViewNonConst (MultiVec<ScalarType>& mv, const std::vector<int>& index) { return Teuchos::rcp( mv.CloneViewNonConst(index) ); }
//! Obtain the vector length of \c mv. static ptrdiff_t GetGlobalLength( const MultiVec<ScalarType>& mv ) { return mv.GetGlobalLength(); }
static void SetBlock( const MultiVec<ScalarType>& A, const std::vector<int>& index, MultiVec<ScalarType>& mv ) { mv.SetBlock(A, index); }
static void MvRandom( MultiVec<ScalarType>& mv ) { mv.MvRandom(); }
static void MvTimesMatAddMv( ScalarType alpha, const MultiVec<ScalarType>& A, const Teuchos::SerialDenseMatrix<int,ScalarType>& B, ScalarType beta, MultiVec<ScalarType>& mv ) { mv.MvTimesMatAddMv(alpha, A, B, beta); }
static void MvPrint( const MultiVec<ScalarType>& mv, std::ostream& os ) { mv.MvPrint(os); }
static void MvAddMv( ScalarType alpha, const MultiVec<ScalarType>& A, ScalarType beta, const MultiVec<ScalarType>& B, MultiVec<ScalarType>& mv ) { mv.MvAddMv(alpha, A, beta, B); }