void Apply ( const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans=NOTRANS ) const { TEUCHOS_TEST_FOR_EXCEPTION(trans!=NOTRANS, XpetraOpFailure, "Belos::XpetraOp::Apply, transpose mode != NOTRANS not supported."); //FIXME InitialGuessIsZero currently does nothing in MueLu::Hierarchy.Iterate(). y.putScalar(0.0); Op_->apply(x,y); }
void Apply(const Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& x, Xpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& y, ETrans trans = NOTRANS ) const { TEUCHOS_TEST_FOR_EXCEPTION(trans != NOTRANS, MueLuOpFailure, "Belos::MueLuOp::Apply, transpose mode != NOTRANS not supported by MueLu preconditionners."); //FIXME InitialGuessIsZero currently does nothing in MueLu::Hierarchy.Iterate(), but it matters for AMGX y.putScalar(0.0); #ifdef HAVE_MUELU_AMGX if (!AMGX_.is_null()) { Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tX = Xpetra::toTpetra(x); Tpetra::MultiVector<Scalar, LocalOrdinal, GlobalOrdinal, Node> tY = Xpetra::toTpetra(y); AMGX_->apply(tX, tY); } #endif if (!Hierarchy_.is_null()) Hierarchy_->Iterate(x, y, 1, true); }