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 int GetNumberVecs( const MultiVec<ScalarType>& mv ) { return mv.GetNumberVecs(); }