35 const Xpetra::Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
36 const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
37 const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
38 Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
39 bool call_FillComplete_on_result =
true,
40 bool doOptimizeStorage =
true,
41 const std::string& label = std::string(),
42 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
49 "MueLu::Jacobi: row map of C is not same as row map of A")
51 "MueLu::Jacobi: row map of C is not same as row map of B");
55 bool haveMultiplyDoFillComplete = call_FillComplete_on_result && doOptimizeStorage;
57 if (C.getRowMap()->lib() == Xpetra::UseTpetra) {
58 const Tpetra::CrsMatrix<SC, LO, GO, NO>& tpA = Xpetra::Helpers<SC, LO, GO, NO>::Op2TpetraCrs(A);
59 const Tpetra::CrsMatrix<SC, LO, GO, NO>& tpB = Xpetra::Helpers<SC, LO, GO, NO>::Op2TpetraCrs(B);
60 Tpetra::CrsMatrix<SC, LO, GO, NO>& tpC = Xpetra::Helpers<SC, LO, GO, NO>::Op2NonConstTpetraCrs(C);
61 const RCP<Tpetra::Vector<SC, LO, GO, NO> >& tpD = toTpetra(Dinv);
62 Tpetra::MatrixMatrix::Jacobi(omega, *tpD, tpA, tpB, tpC, haveMultiplyDoFillComplete, label, params);
65 if (call_FillComplete_on_result && !haveMultiplyDoFillComplete) {
66 RCP<Teuchos::ParameterList> fillParams = rcp(
new Teuchos::ParameterList());
67 fillParams->set(
"Optimize Storage", doOptimizeStorage);
68 C.fillComplete(B.getDomainMap(), B.getRangeMap(), fillParams);
72 RCP<Xpetra::Matrix<SC, LO, GO, NO> > rcpA = Teuchos::rcp_const_cast<Xpetra::Matrix<SC, LO, GO, NO> >(Teuchos::rcpFromRef(A));
73 RCP<Xpetra::Matrix<SC, LO, GO, NO> > rcpB = Teuchos::rcp_const_cast<Xpetra::Matrix<SC, LO, GO, NO> >(Teuchos::rcpFromRef(B));
74 C.CreateView(
"stridedMaps", rcpA,
false, rcpB,
false);
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Jacobi(Scalar omega, const Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Dinv, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > C_in, Teuchos::FancyOStream &fos, const std::string &label, RCP< ParameterList > ¶ms)
void Jacobi(Scalar omega, const Xpetra::Vector< Scalar, LocalOrdinal, GlobalOrdinal, Node > &Dinv, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &A, const Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &B, Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > &C, bool call_FillComplete_on_result=true, bool doOptimizeStorage=true, const std::string &label=std::string(), const Teuchos::RCP< Teuchos::ParameterList > ¶ms=Teuchos::null)