void DiagonalFilter<MatrixType>::apply(const Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &X, Tpetra::MultiVector<Scalar,LocalOrdinal,GlobalOrdinal,Node> &Y, Teuchos::ETransp mode, Scalar alpha, Scalar beta) const { Scalar one = Teuchos::ScalarTraits<Scalar>::one(); A_->apply(X,Y,mode,alpha,beta); Y.elementWiseMultiply(one,*val_,X,one); }
void Diagonal<MatrixType>:: apply (const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X, Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y, Teuchos::ETransp /*mode*/, scalar_type alpha, scalar_type beta) const { TEUCHOS_TEST_FOR_EXCEPTION( ! isComputed (), std::runtime_error, "Ifpack2::Diagonal::apply: You " "must first call compute() before you may call apply(). Once you have " "called compute(), you need not call it again unless the values in the " "matrix have changed, or unless you have called setMatrix()."); Y.elementWiseMultiply (alpha, *inverseDiag_, X, beta); ++numApply_; }
void Diagonal<MatrixType>:: apply (const Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& X, Tpetra::MultiVector<scalar_type,local_ordinal_type,global_ordinal_type,node_type>& Y, Teuchos::ETransp /*mode*/, scalar_type alpha, scalar_type beta) const { TEUCHOS_TEST_FOR_EXCEPTION( ! isComputed (), std::runtime_error, "Ifpack2::Diagonal::apply: You " "must first call compute() before you may call apply(). Once you have " "called compute(), you need not call it again unless the values in the " "matrix have changed, or unless you have called setMatrix()."); // FIXME (mfh 12 Sep 2014) This assumes that row Map == range Map == // domain Map. If the preconditioner has a matrix, we should ask // the matrix whether we need to do an Import before and/or an // Export after. Y.elementWiseMultiply (alpha, *inverseDiag_, X, beta); ++numApply_; }