39 RCP<ParameterList> validParamList = rcp(
new ParameterList());
41#define SET_VALID_ENTRY(name) validParamList->setEntry(name, MasterList::getEntry(name))
49 validParamList->set<RCP<const FactoryBase> >(
"A", null,
"Generating factory of the matrix A used during the prolongator smoothing process");
50 validParamList->set<RCP<const FactoryBase> >(
"P", null,
"Prolongator factory");
51 validParamList->set<RCP<const FactoryBase> >(
"R", null,
"Restrictor factory");
53 validParamList->set<
bool>(
"CheckMainDiagonal",
false,
"Check main diagonal for zeros");
54 validParamList->set<
bool>(
"RepairMainDiagonal",
false,
"Repair zeros on main diagonal");
57 ParameterList norecurse;
58 norecurse.disableRecursiveValidation();
59 validParamList->set<ParameterList>(
"matrixmatrix: kernel params", norecurse,
"MatrixMatrix kernel parameters");
61 return validParamList;
88 "MueLu::RAPFactory::Build(): CallDeclareInput has not been called before Build!");
90 RCP<Matrix> A = Get<RCP<Matrix> >(fineLevel,
"A");
91 RCP<Matrix> P = Get<RCP<Matrix> >(coarseLevel,
"P"), AP, R;
96 Set(coarseLevel,
"A", Ac);
100 const Teuchos::ParameterList& pL = GetParameterList();
101 const bool useImplicit = pL.get<
bool>(
"transpose: use implicit");
102 bool isGPU = Node::is_gpu;
104 Teuchos::RCP<Teuchos::ParameterList> APparams;
105 Teuchos::RCP<Teuchos::ParameterList> RAPparams;
106 if (coarseLevel.IsAvailable(
"AP reuse data",
this)) {
107 GetOStream(
static_cast<MsgType>(
Runtime0 |
Test)) <<
"Reusing previous AP data" << std::endl;
108 APparams = coarseLevel.Get<RCP<ParameterList> >(
"AP reuse data",
this);
110 APparams = Teuchos::rcp(
new Teuchos::ParameterList());
112 if (coarseLevel.IsAvailable(
"RAP reuse data",
this)) {
113 GetOStream(
static_cast<MsgType>(
Runtime0 |
Test)) <<
"Reusing previous RAP data" << std::endl;
114 RAPparams = coarseLevel.Get<RCP<ParameterList> >(
"RAP reuse data",
this);
116 RAPparams = Teuchos::rcp(
new Teuchos::ParameterList());
119 R = Get<RCP<Matrix> >(coarseLevel,
"R");
123 std::ostringstream oss;
124 oss <<
"A_" << coarseLevel.GetLevelID();
125 Ac->setObjectLabel(oss.str());
127 Set(coarseLevel,
"A", Ac);
129 if (!pL.get<
bool>(
"rap: triple product")) {
130 TEUCHOS_TEST_FOR_EXCEPTION(!APparams->isParameter(
"graph"), std::runtime_error,
"\"AP reuse data\" does not contain the expected reuse data.");
131 Set(coarseLevel,
"AP reuse data", APparams);
134 TEUCHOS_TEST_FOR_EXCEPTION(!RAPparams->isParameter(
"graph"), std::runtime_error,
"\"RAP reuse data\" does not contain the expected reuse data.");
135 Set(coarseLevel,
"RAP reuse data", RAPparams);
141 MatrixUtils::checkLocalRowMapMatchesColMap(*Ac);
143 if (transferFacts_.begin() != transferFacts_.end()) {
147 for (std::vector<RCP<const FactoryBase> >::const_iterator it = transferFacts_.begin(); it != transferFacts_.end(); ++it) {
148 RCP<const FactoryBase> fac = *it;
149 GetOStream(
Runtime0) <<
"RAPFactory: call transfer factory: " << fac->description() << std::endl;
150 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)