36 RCP<const Matrix> A = rcpFromRef(Aref);
41 RCP<CrsMatrix> Ptmp_ = CrsMatrixFactory::Build(C.
GetPattern());
42 Ptmp_->fillComplete(P0.getDomainMap(), P0.getRangeMap());
43 RCP<Matrix> Ptmp = rcp(
new CrsMatrixWrap(Ptmp_));
46 P = rcp_const_cast<Matrix>(rcpFromRef(P0));
48 const auto rowMap = A->getRowMap();
49 auto invDiag = Xpetra::VectorFactory<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Build(rowMap,
true);
50 A->getLocalDiagCopy(*invDiag);
51 invDiag->reciprocal(*invDiag);
53 for (
size_t k = 0; k <
nIts_; k++) {
54 AP = Xpetra::MatrixMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Multiply(*A,
false, *P,
false, mmfancy,
true,
true);
58 G = Xpetra::MatrixMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Multiply(*A,
true, *AP,
false,
true,
true);
63 AP->leftScale(*invDiag);
68 Xpetra::MatrixMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::TwoMatrixAdd(*Ptmp,
false, -stepLength, *P,
false, Teuchos::ScalarTraits<Scalar>::one(), newP, mmfancy);
69 newP->fillComplete(P->getDomainMap(), P->getRangeMap());