//============================================================================== int Ifpack_ReorderFilter:: Multiply(bool TransA, const Epetra_MultiVector& X, Epetra_MultiVector& Y) const { // need two additional vectors Epetra_MultiVector Xtilde(X.Map(),X.NumVectors()); Epetra_MultiVector Ytilde(Y.Map(),Y.NumVectors()); // bring X back to original ordering Reordering_->Pinv(X,Xtilde); // apply original matrix IFPACK_CHK_ERR(Matrix()->Multiply(TransA,Xtilde,Ytilde)); // now reorder result Reordering_->P(Ytilde,Y); return(0); }
//============================================================================== int Ifpack2_ReorderFilter:: Multiply(bool TransA, const Tpetra_MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>& X, Tpetra_MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node>& Y) const { // need two additional vectors Tpetra_MultiVector Xtilde(X.Map(),X.NumVectors()); Tpetra_MultiVector Ytilde(Y.Map(),Y.NumVectors()); // bring X back to original ordering Reordering_->Pinv(X,Xtilde); // apply original matrix IFPACK2_CHK_ERR(Matrix()->Multiply(TransA,Xtilde,Ytilde)); // now reorder result Reordering_->P(Ytilde,Y); return(0); }