3 #include <MueLu_CreateTpetraPreconditioner.hpp>
7 const std::string& reuse)
8 : prec_mp(Teuchos::null),
9 coords_mp(Teuchos::null),
10 rebalance_m(rebalance)
16 template <
class Level>
21 coords_mp = Teuchos::null;
25 const scalar_t* domain = level_p->geom.ProbLo();
26 const scalar_t* dx = level_p->cellSize();
28 coords_mp = Teuchos::rcp(
32 for (amrex::MFIter mfi(level_p->grids, level_p->dmap,
true);
36 const lo_t* lo = tbx.loVect();
37 const lo_t* hi = tbx.hiVect();
39 for (
lo_t i = lo[0]; i <= hi[0]; ++i) {
40 for (
lo_t j = lo[1]; j <= hi[1]; ++j) {
41 #if AMREX_SPACEDIM == 3
42 for (
lo_t k = lo[2]; k <= hi[2]; ++k) {
45 go_t gidx = level_p->serialize(iv);
47 coords_mp->replaceGlobalValue(gidx, 0, domain[0] + (0.5 + i) * dx[0]);
48 coords_mp->replaceGlobalValue(gidx, 1, domain[1] + (0.5 + j) * dx[1]);
49 #if AMREX_SPACEDIM == 3
50 coords_mp->replaceGlobalValue(gidx, 2, domain[2] + (0.5 + k) * dx[2]);
58 prec_mp = MueLu::CreateTpetraPreconditioner(A, params_m, coords_mp);
60 coords_mp = Teuchos::null;
64 template <
class Level>
70 template <
class Level>
76 template <
class Level>
80 std::map<std::string, std::string> map;
89 if ( muelu == map.end() )
90 throw OpalException(
"MueLuPreconditioner::convertToMueLuReuseOption()",
91 "No MueLu reuse option '" + reuse +
"'.");
97 template <
class Level>
99 params_m.set(
"problem: type",
"Poisson-3D");
100 params_m.set(
"verbosity",
"none");
101 params_m.set(
"number of equations", 1);
102 params_m.set(
"max levels", 8);
103 params_m.set(
"cycle type",
"V");
105 params_m.set(
"coarse: max size", 200);
106 params_m.set(
"multigrid algorithm",
"sa");
107 params_m.set(
"sa: damping factor", 1.33);
108 params_m.set(
"sa: use filtered matrix",
true);
109 params_m.set(
"filtered matrix: reuse eigenvalue",
false);
111 params_m.set(
"repartition: enable", rebalance_m);
112 params_m.set(
"repartition: rebalance P and R", rebalance_m);
113 params_m.set(
"repartition: partitioner",
"zoltan2");
114 params_m.set(
"repartition: min rows per proc", 800);
115 params_m.set(
"repartition: start level", 2);
117 Teuchos::ParameterList reparms;
118 reparms.set(
"algorithm",
"multijagged");
121 params_m.set(
"repartition: params", reparms);
124 params_m.set(
"smoother: type",
"CHEBYSHEV");
125 params_m.set(
"smoother: pre or post",
"both");
126 Teuchos::ParameterList smparms;
127 smparms.set(
"chebyshev: degree", 3);
128 smparms.set(
"chebyshev: assume matrix does not change",
false);
129 smparms.set(
"chebyshev: zero starting solution",
true);
130 params_m.set(
"smoother: params", smparms);
132 params_m.set(
"smoother: type",
"CHEBYSHEV");
133 params_m.set(
"smoother: pre or post",
"both");
135 params_m.set(
"coarse: type",
"KLU2");
137 params_m.set(
"aggregation: type",
"uncoupled");
138 params_m.set(
"aggregation: min agg size", 3);
139 params_m.set(
"aggregation: max agg size", 27);
141 params_m.set(
"transpose: use implicit",
false);
143 params_m.set(
"reuse: type", reuse);
amr::local_ordinal_t lo_t
MueLuPreconditioner(const bool &rebalance, const std::string &reuse)
static void fillMap(map_t &map)
void init_m(const std::string &reuse)
The base class for all OPAL exceptions.
std::string toUpper(const std::string &str)
amr::global_ordinal_t go_t
std::map< std::string, Preconditioner > map_t
smoothed aggregation multigrid
void create(const Teuchos::RCP< amr::matrix_t > &A, Level *level_p=nullptr)
static std::string convertToMueLuReuseOption(const std::string &reuse)
amr::AmrIntVect_t AmrIntVect_t
Tpetra::MultiVector< scalar_t, local_ordinal_t, global_ordinal_t, node_t > multivector_t
Teuchos::RCP< amr::operator_t > get()