OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
Ifpack2Preconditioner.hpp
Go to the documentation of this file.
2 
3 template <class Level>
5  : prec_mp(Teuchos::null)
6 {
7  this->init_m(prec);
8 }
9 
10 
11 template <class Level>
12 void Ifpack2Preconditioner<Level>::create(const Teuchos::RCP<amr::matrix_t>& A,
13  Level* level_p)
14 {
15  Ifpack2::Factory factory;
16 
17  prec_mp = factory.create(prectype_m, A.getConst());
18  prec_mp->setParameters(*params_mp);
19  prec_mp->initialize();
20  prec_mp->compute();
21 }
22 
23 
24 template <class Level>
25 Teuchos::RCP<amr::operator_t> Ifpack2Preconditioner<Level>::get() {
26  return prec_mp;
27 }
28 
29 
30 template <class Level>
32  map["ILUT"] = Preconditioner::ILUT;
33  map["CHEBYSHEV"] = Preconditioner::CHEBYSHEV;
34  map["RILUK"] = Preconditioner::RILUK;
35  map["JACOBI"] = Preconditioner::JACOBI;
36  map["BLOCK_JACOBI"] = Preconditioner::BLOCK_JACOBI;
37  map["GS"] = Preconditioner::GS;
38  map["BLOCK_GS"] = Preconditioner::BLOCK_GS;
39 }
40 
41 
42 template <class Level>
44 {
45  params_mp = Teuchos::parameterList();
46 
47  switch ( prec ) {
49  // inclomplete LU
50  prectype_m = "ILUT";
51 
52  params_mp->set("fact: ilut level-of-fill", 5.0);
53  params_mp->set("fact: drop tolerance", 0.0);
54 
55  break;
57  prectype_m = "CHEBYSHEV";
58  params_mp->set("chebyshev: degree", 1);
59  break;
61  prectype_m = "RILUK";
62  params_mp->set("fact: iluk level-of-fill", 0);
63  params_mp->set("fact: relax value", 0.0);
64  params_mp->set("fact: absolute threshold", 0.0);
65  params_mp->set("fact: relative threshold", 1.0);
66  break;
68  prectype_m = "RELAXATION";
69  params_mp->set("relaxation: type", "Jacobi");
70  params_mp->set("relaxation: sweeps", 12);
71  params_mp->set("relaxation: zero starting solution", false);
72  params_mp->set("relaxation: damping factor", 6.0 / 7.0);
73  params_mp->set("relaxation: use l1", true);
74  params_mp->set("relaxation: l1 eta", 1.5);
75  params_mp->set("relaxation: backward mode", false);
76  params_mp->set("relaxation: fix tiny diagonal entries", true);
77  params_mp->set("relaxation: min diagonal value", 1.0e-5);
78  params_mp->set("relaxation: check diagonal entries", true);
79  break;
81  prectype_m = "BLOCK_RELAXATION";
82  params_mp->set("relaxation: type", "Jacobi");
83  params_mp->set("relaxation: sweeps", 12);
84  params_mp->set("relaxation: zero starting solution", false);
85  params_mp->set("relaxation: damping factor", 6.0 / 7.0);
86  params_mp->set("relaxation: backward mode", false);
87 
88  params_mp->set("partitioner: type", "linear");
89  params_mp->set("partitioner: overlap", 0);
90  params_mp->set("partitioner: local parts", 1);
91 
92  break;
93  case Preconditioner::GS:
94  prectype_m = "RELAXATION";
95  params_mp->set("relaxation: type", "Gauss-Seidel");
96  params_mp->set("relaxation: sweeps", 12);
97  params_mp->set("relaxation: zero starting solution", false);
98  params_mp->set("relaxation: damping factor", 1.0);
99  params_mp->set("relaxation: use l1", true);
100  params_mp->set("relaxation: l1 eta", 1.5);
101  params_mp->set("relaxation: backward mode", false);
102  params_mp->set("relaxation: fix tiny diagonal entries", true);
103  params_mp->set("relaxation: min diagonal value", 1.0e-5);
104  params_mp->set("relaxation: check diagonal entries", true);
105  break;
107  prectype_m = "BLOCK_RELAXATION";
108  params_mp->set("relaxation: type", "Gauss-Seidel");
109  params_mp->set("relaxation: sweeps", 12);
110  params_mp->set("relaxation: zero starting solution", false);
111  params_mp->set("relaxation: damping factor", 6.0 / 7.0);
112  params_mp->set("relaxation: backward mode", false);
113 
114  params_mp->set("partitioner: type", "linear");
115  params_mp->set("partitioner: overlap", 0);
116  params_mp->set("partitioner: local parts", 1);
117  break;
119  prectype_m = "";
120  break;
121  default:
122  throw OpalException("Ifpack2Preconditioner::init_m()",
123  "This type of Ifpack2 preconditioner not supported.");
124  }
125 }
constexpr double e
The value of .
Definition: Physics.h:40
void init_m(Preconditioner prec)
The base class for all OPAL exceptions.
Definition: OpalException.h:28
Jacobi block relaxation.
Ifpack2Preconditioner(Preconditioner prec)
incomplete LU
Jacobi point relaxation.
Gauss-Seidel block relaxation.
Gauss-Seidel point relaxation.
Teuchos::RCP< amr::operator_t > get()
static void fillMap(map_t &map)
std::map< std::string, Preconditioner > map_t
void create(const Teuchos::RCP< amr::matrix_t > &A, Level *level_p=nullptr)