35 typename Teuchos::ScalarTraits<Scalar>::magnitudeType omega,
36 const Xpetra::Vector<Scalar, LocalOrdinal, GlobalOrdinal, Node>& Dinv,
37 const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& A,
38 const Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& B,
39 Xpetra::Matrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>& C,
40 bool call_FillComplete_on_result =
true,
41 bool doOptimizeStorage =
true,
42 const std::string& label = std::string(),
43 const Teuchos::RCP<Teuchos::ParameterList>& params = Teuchos::null) {
50 "MueLu::Jacobi: row map of C is not same as row map of A")
52 "MueLu::Jacobi: row map of C is not same as row map of B");
56 bool haveMultiplyDoFillComplete = call_FillComplete_on_result && doOptimizeStorage;
58 if (C.getRowMap()->lib() == Xpetra::UseTpetra) {
59 const Tpetra::CrsMatrix<SC, LO, GO, NO>& tpA = Xpetra::Helpers<SC, LO, GO, NO>::Op2TpetraCrs(A);
60 const Tpetra::CrsMatrix<SC, LO, GO, NO>& tpB = Xpetra::Helpers<SC, LO, GO, NO>::Op2TpetraCrs(B);
61 Tpetra::CrsMatrix<SC, LO, GO, NO>& tpC = Xpetra::Helpers<SC, LO, GO, NO>::Op2NonConstTpetraCrs(C);
62 const RCP<Tpetra::Vector<SC, LO, GO, NO> >& tpD = toTpetra(Dinv);
63 Tpetra::MatrixMatrix::Jacobi(omega, *tpD, tpA, tpB, tpC, haveMultiplyDoFillComplete, label, params);
66 if (call_FillComplete_on_result && !haveMultiplyDoFillComplete) {
67 RCP<Teuchos::ParameterList> fillParams = rcp(
new Teuchos::ParameterList());
68 fillParams->set(
"Optimize Storage", doOptimizeStorage);
69 C.fillComplete(B.getDomainMap(), B.getRangeMap(), fillParams);
73 RCP<Xpetra::Matrix<SC, LO, GO, NO> > rcpA = Teuchos::rcp_const_cast<Xpetra::Matrix<SC, LO, GO, NO> >(Teuchos::rcpFromRef(A));
74 RCP<Xpetra::Matrix<SC, LO, GO, NO> > rcpB = Teuchos::rcp_const_cast<Xpetra::Matrix<SC, LO, GO, NO> >(Teuchos::rcpFromRef(B));
75 if (A.IsView(
"stridedMaps") || B.IsView(
"stridedMaps"))
76 C.CreateView(
"stridedMaps", rcpA,
false, rcpB,
false);
static RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > Jacobi(typename Teuchos::ScalarTraits< Scalar >::magnitudeType 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(typename Teuchos::ScalarTraits< Scalar >::magnitudeType 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)