40 RCP<ParameterList> validParamList = rcp(
new ParameterList());
42#define SET_VALID_ENTRY(name) validParamList->setEntry(name, MasterList::getEntry(name))
50 validParamList->set<RCP<const FactoryBase> >(
"A", null,
"Generating factory of the matrix A used during the prolongator smoothing process");
51 validParamList->set<RCP<const FactoryBase> >(
"P", null,
"Prolongator factory");
52 validParamList->set<RCP<const FactoryBase> >(
"R", null,
"Restrictor factory");
54 validParamList->set<
bool>(
"CheckMainDiagonal",
false,
"Check main diagonal for zeros");
55 validParamList->set<
bool>(
"RepairMainDiagonal",
false,
"Repair zeros on main diagonal");
58 ParameterList norecurse;
59 norecurse.disableRecursiveValidation();
60 validParamList->set<ParameterList>(
"matrixmatrix: kernel params", norecurse,
"MatrixMatrix kernel parameters");
62 return validParamList;
89 "MueLu::RAPFactory::Build(): CallDeclareInput has not been called before Build!");
91 RCP<Matrix> A = Get<RCP<Matrix> >(fineLevel,
"A");
92 RCP<Matrix> P = Get<RCP<Matrix> >(coarseLevel,
"P"), AP, R;
97 Set(coarseLevel,
"A", Ac);
101 const Teuchos::ParameterList& pL = GetParameterList();
102 const bool useImplicit = pL.get<
bool>(
"transpose: use implicit");
103 bool isGPU = Node::is_gpu;
105 Teuchos::RCP<Teuchos::ParameterList> APparams;
106 Teuchos::RCP<Teuchos::ParameterList> RAPparams;
107 if (coarseLevel.IsAvailable(
"AP reuse data",
this)) {
108 GetOStream(
static_cast<MsgType>(
Runtime0 |
Test)) <<
"Reusing previous AP data" << std::endl;
109 APparams = coarseLevel.Get<RCP<ParameterList> >(
"AP reuse data",
this);
111 APparams = Teuchos::rcp(
new Teuchos::ParameterList());
113 if (coarseLevel.IsAvailable(
"RAP reuse data",
this)) {
114 GetOStream(
static_cast<MsgType>(
Runtime0 |
Test)) <<
"Reusing previous RAP data" << std::endl;
115 RAPparams = coarseLevel.Get<RCP<ParameterList> >(
"RAP reuse data",
this);
117 RAPparams = Teuchos::rcp(
new Teuchos::ParameterList());
120 R = Get<RCP<Matrix> >(coarseLevel,
"R");
124 std::ostringstream oss;
125 oss <<
"A_" << coarseLevel.GetLevelID();
126 Ac->setObjectLabel(oss.str());
128 Set(coarseLevel,
"A", Ac);
130 if (!pL.get<
bool>(
"rap: triple product")) {
131 TEUCHOS_TEST_FOR_EXCEPTION(!APparams->isParameter(
"graph"), std::runtime_error,
"\"AP reuse data\" does not contain the expected reuse data.");
132 Set(coarseLevel,
"AP reuse data", APparams);
135 TEUCHOS_TEST_FOR_EXCEPTION(!RAPparams->isParameter(
"graph"), std::runtime_error,
"\"RAP reuse data\" does not contain the expected reuse data.");
136 Set(coarseLevel,
"RAP reuse data", RAPparams);
142 MatrixUtils::checkLocalRowMapMatchesColMap(*Ac);
144 if (transferFacts_.begin() != transferFacts_.end()) {
148 for (std::vector<RCP<const FactoryBase> >::const_iterator it = transferFacts_.begin(); it != transferFacts_.end(); ++it) {
149 RCP<const FactoryBase> fac = *it;
150 GetOStream(
Runtime0) <<
"RAPFactory: call transfer factory: " << fac->description() << std::endl;
151 fac->CallBuild(coarseLevel);
static void TripleMatrixProduct(const Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &R, const Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &A, const Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &P, Teuchos::RCP< Xpetra::Matrix< Scalar, LocalOrdinal, GlobalOrdinal, Node > > &Ac, const Teuchos::ParameterList &pL, const MueLu::BaseClass &verbObj, Teuchos::RCP< Teuchos::ParameterList > &APparams, Teuchos::RCP< Teuchos::ParameterList > &RAPparams, Level *coarseLevel=nullptr)