36 RCP<const Matrix> A = rcpFromRef(Aref);
39 Teuchos::FancyOStream& mmfancy = this->GetOStream(
Statistics2);
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);
57 SC stepLength = 2*stepLength_;
58 G = Xpetra::MatrixMatrix<Scalar, LocalOrdinal, GlobalOrdinal, Node>::Multiply(*A,
true, *AP,
false,
true,
true);
62 SC stepLength = stepLength_;
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());