21 #include "Ifpack_PointRelaxation.h"
22 #include "Ifpack_BlockRelaxation.h"
23 #include "Ifpack_DenseContainer.h"
24 #include "Ifpack_AdditiveSchwarz.h"
25 #include "Ifpack_ILU.h"
26 #include "Ifpack_ILUT.h"
27 #include "Ifpack_IC.h"
28 #include "Ifpack_ICT.h"
29 #include "Ifpack_Graph_Epetra_CrsGraph.h"
33 namespace Preconditioners
35 template<
typename Scalar>
46 template<
typename Scalar>
55 this->overlap = overlap;
58 template<
typename Scalar>
67 template<
typename Scalar>
70 if (owner)
delete prec;
73 template<
typename Scalar>
76 ilist.set(name, value);
79 template<
typename Scalar>
82 ilist.set(name, value);
85 template<
typename Scalar>
88 ilist.set(name, value);
91 template<
typename Scalar>
95 assert(mt !=
nullptr);
97 if (strcmp(cls,
"point-relax") == 0)
99 create_point_relax(mat, type);
103 else if (strcmp(cls,
"block-relax") == 0)
105 create_block_relax(mat, type);
108 else if (strcmp(cls,
"add-schwartz") == 0)
110 create_add_schwartz(mat, type, overlap);
116 template<
typename Scalar>
119 prec =
new Ifpack_PointRelaxation(a->mat);
120 ilist.set(
"relaxation: type", name);
123 template<
typename Scalar>
126 Teuchos::RCP<const Epetra_CrsGraph> rgraph = Teuchos::rcp(&(a->mat->Graph()));
127 Ifpack_Graph *graph =
new Ifpack_Graph_Epetra_CrsGraph(rgraph);
129 Ifpack_Partitioner *partitioner =
new Ifpack_GreedyPartitioner(graph);
131 Teuchos::ParameterList list;
133 list.set(
"partitioner: local parts", 1000);
134 partitioner->SetParameters(list);
135 partitioner->Compute();
137 prec =
new Ifpack_BlockRelaxation<Ifpack_DenseContainer>(a->mat);
138 ilist.set(
"relaxation: type", name);
143 template<
typename Scalar>
146 if (strcasecmp(name,
"ilu") == 0)
148 prec =
new Ifpack_AdditiveSchwarz<Ifpack_ILU>(a->mat, overlap);
150 else if (strcasecmp(name,
"ilut") == 0)
152 prec =
new Ifpack_AdditiveSchwarz<Ifpack_ILUT>(a->mat, overlap);
154 else if (strcasecmp(name,
"ic") == 0)
156 prec =
new Ifpack_AdditiveSchwarz<Ifpack_IC>(a->mat, overlap);
158 else if (strcasecmp(name,
"ict") == 0)
160 prec =
new Ifpack_AdditiveSchwarz<Ifpack_ICT>(a->mat, overlap);
166 template<
typename Scalar>
169 assert(prec !=
nullptr);
170 return prec->Initialize();
173 template<
typename Scalar>
176 assert(prec !=
nullptr);
180 template<
typename Scalar>
183 prec->SetParameters(ilist);
186 template<
typename Scalar>
189 assert(prec !=
nullptr);
190 return prec->ApplyInverse(r, z);
193 template<
typename Scalar>
196 return mat->mat->Comm();
199 template<
typename Scalar>
202 return mat->mat->OperatorDomainMap();
205 template<
typename Scalar>
208 return mat->mat->OperatorRangeMap();
General (abstract) matrix representation in Hermes.
General namespace for the Hermes library.
Preconditioners built on IFPACK.
IFPACK (Trilinos package) preconditioners interface.
IfpackPrecond(const char *cls, const char *type="Jacobi")