35 Ifpack2::Factory factory;
52 map[
"ILUT"] = Preconditioner::ILUT;
53 map[
"CHEBYSHEV"] = Preconditioner::CHEBYSHEV;
54 map[
"RILUK"] = Preconditioner::RILUK;
55 map[
"JACOBI"] = Preconditioner::JACOBI;
56 map[
"BLOCK_JACOBI"] = Preconditioner::BLOCK_JACOBI;
57 map[
"GS"] = Preconditioner::GS;
58 map[
"BLOCK_GS"] = Preconditioner::BLOCK_GS;
68 case Preconditioner::ILUT:
72 params_mp->set(
"fact: ilut level-of-fill", 5.0);
73 params_mp->set(
"fact: drop tolerance", 0.0);
76 case Preconditioner::CHEBYSHEV:
80 case Preconditioner::RILUK:
82 params_mp->set(
"fact: iluk level-of-fill", 0);
84 params_mp->set(
"fact: absolute threshold", 0.0);
85 params_mp->set(
"fact: relative threshold", 1.0);
87 case Preconditioner::JACOBI:
89 params_mp->set(
"relaxation: type",
"Jacobi");
91 params_mp->set(
"relaxation: zero starting solution",
false);
92 params_mp->set(
"relaxation: damping factor", 6.0 / 7.0);
93 params_mp->set(
"relaxation: use l1",
true);
94 params_mp->set(
"relaxation: l1 eta", 1.5);
95 params_mp->set(
"relaxation: backward mode",
false);
96 params_mp->set(
"relaxation: fix tiny diagonal entries",
true);
97 params_mp->set(
"relaxation: min diagonal value", 1.0e-5);
98 params_mp->set(
"relaxation: check diagonal entries",
true);
100 case Preconditioner::BLOCK_JACOBI:
102 params_mp->set(
"relaxation: type",
"Jacobi");
103 params_mp->set(
"relaxation: sweeps", 12);
104 params_mp->set(
"relaxation: zero starting solution",
false);
105 params_mp->set(
"relaxation: damping factor", 6.0 / 7.0);
106 params_mp->set(
"relaxation: backward mode",
false);
108 params_mp->set(
"partitioner: type",
"linear");
109 params_mp->set(
"partitioner: overlap", 0);
110 params_mp->set(
"partitioner: local parts", 1);
113 case Preconditioner::GS:
115 params_mp->set(
"relaxation: type",
"Gauss-Seidel");
116 params_mp->set(
"relaxation: sweeps", 12);
117 params_mp->set(
"relaxation: zero starting solution",
false);
118 params_mp->set(
"relaxation: damping factor", 1.0);
119 params_mp->set(
"relaxation: use l1",
true);
120 params_mp->set(
"relaxation: l1 eta", 1.5);
121 params_mp->set(
"relaxation: backward mode",
false);
122 params_mp->set(
"relaxation: fix tiny diagonal entries",
true);
123 params_mp->set(
"relaxation: min diagonal value", 1.0e-5);
124 params_mp->set(
"relaxation: check diagonal entries",
true);
126 case Preconditioner::BLOCK_GS:
128 params_mp->set(
"relaxation: type",
"Gauss-Seidel");
129 params_mp->set(
"relaxation: sweeps", 12);
130 params_mp->set(
"relaxation: zero starting solution",
false);
131 params_mp->set(
"relaxation: damping factor", 6.0 / 7.0);
132 params_mp->set(
"relaxation: backward mode",
false);
134 params_mp->set(
"partitioner: type",
"linear");
135 params_mp->set(
"partitioner: overlap", 0);
136 params_mp->set(
"partitioner: local parts", 1);
138 case Preconditioner::NONE:
143 "This type of Ifpack2 preconditioner not supported.");
Ifpack2Preconditioner(Preconditioner prec)
void create(const Teuchos::RCP< amr::matrix_t > &A, Level *level_p=nullptr)
std::map< std::string, Preconditioner > map_t
std::string prectype_m
preconditioner type
Teuchos::RCP< Teuchos::ParameterList > params_mp
parameter list of preconditioner
amr::Preconditioner Preconditioner
Teuchos::RCP< precond_t > prec_mp
static void fillMap(map_t &map)
Teuchos::RCP< amr::operator_t> get()
void init_m(Preconditioner prec)
The base class for all OPAL exceptions.