46 const Teuchos::RCP<mv_t>& b)
49 Teuchos::RCP<xmv_t> xx = MueLu::TpetraMultiVector_To_XpetraMultiVector(x);
50 Teuchos::RCP<xmv_t> xb = MueLu::TpetraMultiVector_To_XpetraMultiVector(b);
54 hierarchy_mp->Iterate(*xb, *xx, nSweeps_m,
true, 0);
57 x->assign(*util_t::MV2NonConstTpetraMV2(*xx));
67 A_mp = MueLu::TpetraCrs_To_XpetraMatrix<scalar_t, lo_t, go_t, node_t>(A);
68 A_mp->SetFixedBlockSize(1);
70 Teuchos::RCP<mv_t> coords_p = Teuchos::rcp(
74 const scalar_t* domain = level_p->geom.ProbLo();
75 const scalar_t* dx = level_p->cellSize();
76 for (amrex::MFIter mfi(level_p->grids, level_p->dmap,
true);
80 const lo_t* lo = tbx.loVect();
81 const lo_t* hi = tbx.hiVect();
83 for (
lo_t i = lo[0]; i <= hi[0]; ++i) {
84 for (
lo_t j = lo[1]; j <= hi[1]; ++j) {
85#if AMREX_SPACEDIM == 3
86 for (
lo_t k = lo[2]; k <= hi[2]; ++k) {
89 go_t gidx = level_p->serialize(iv);
91 coords_p->replaceGlobalValue(gidx, 0, domain[0] + (0.5 + i) * dx[0]);
92 coords_p->replaceGlobalValue(gidx, 1, domain[1] + (0.5 + j) * dx[1]);
93#if AMREX_SPACEDIM == 3
94 coords_p->replaceGlobalValue(gidx, 2, domain[2] + (0.5 + k) * dx[2]);
101 Teuchos::RCP<xmv_t> coordinates = MueLu::TpetraMultiVector_To_XpetraMultiVector(coords_p);
103 Teuchos::RCP<mv_t> nullspace = Teuchos::rcp(
new mv_t(A->getRowMap(), 1));
104 Teuchos::RCP<xmv_t> xnullspace = MueLu::TpetraMultiVector_To_XpetraMultiVector(nullspace);
105 xnullspace->putScalar(1.0);
106 hierarchy_mp->GetLevel(0)->Set(
"Nullspace", xnullspace);
107 hierarchy_mp->GetLevel(0)->Set(
"Coordinates", coordinates);
108 hierarchy_mp->setDefaultVerbLevel(Teuchos::VERB_HIGH);
109 hierarchy_mp->IsPreconditioner(
false);
110 hierarchy_mp->GetLevel(0)->Set(
"A", A_mp);
112 Teuchos::RCP<level_t> finest_p = hierarchy_mp->GetLevel(0);
113 finest_p->Set(
"A", A_mp);
115 factory_mp->SetupHierarchy(*hierarchy_mp);
117 this->isInitialized_m =
true;