10 #ifndef IFPACK2_HYPRE_FUNCTIONPARAMETERS_HPP
11 #define IFPACK2_HYPRE_FUNCTIONPARAMETERS_HPP
13 #include "Ifpack2_ConfigDefs.hpp"
14 #if defined(HAVE_IFPACK2_HYPRE) && defined(HAVE_IFPACK2_MPI)
17 #include "HYPRE_utilities.h"
18 #include "HYPRE_IJ_mv.h"
19 #include "HYPRE_parcsr_ls.h"
21 #include "_hypre_parcsr_mv.h"
22 #include "_hypre_IJ_mv.h"
23 #include "HYPRE_parcsr_mv.h"
27 struct hypre_IJMatrix_struct;
28 typedef struct hypre_IJMatrix_struct *HYPRE_IJMatrix;
29 struct hypre_IJVector_struct;
30 typedef struct hypre_IJVector_struct *HYPRE_IJVector;
31 struct hypre_ParCSRMatrix_struct;
32 typedef struct hypre_ParCSRMatrix_struct *HYPRE_ParCSRMatrix;
33 struct hypre_ParVector_struct;
34 typedef struct hypre_ParVector_struct *HYPRE_ParVector;
35 struct hypre_Solver_struct;
36 typedef struct hypre_Solver_struct *HYPRE_Solver;
37 struct hypre_ParVector_struct;
38 typedef struct hypre_ParVector_struct hypre_ParVector;
60 Hypre_Is_Preconditioner
65 typedef HYPRE_Int (*int_func)(HYPRE_Solver, HYPRE_Int);
66 typedef HYPRE_Int (*double_func)(HYPRE_Solver, HYPRE_Real);
67 typedef HYPRE_Int (*double_int_func)(HYPRE_Solver, HYPRE_Real, HYPRE_Int);
68 typedef HYPRE_Int (*int_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Real);
69 typedef HYPRE_Int (*int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int);
70 typedef HYPRE_Int (*int_star_func)(HYPRE_Solver, HYPRE_Int *);
71 typedef HYPRE_Int (*int_star_star_func)(HYPRE_Solver, HYPRE_Int **);
72 typedef HYPRE_Int (*double_star_func)(HYPRE_Solver, HYPRE_Real *);
73 typedef HYPRE_Int (*int_int_double_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Real, HYPRE_Real);
74 typedef HYPRE_Int (*int_int_int_double_int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Int, HYPRE_Real, HYPRE_Int, HYPRE_Int);
75 typedef HYPRE_Int (*char_star_func)(HYPRE_Solver,
char *);
79 void IFPACK2_CHK_ERRV(
int code);
81 void IFPACK2_CHK_ERR(
int code);
84 class FunctionParameter {
87 FunctionParameter(Hypre_Chooser chooser, int_func funct, HYPRE_Int param1)
91 , int_param1_(param1) {}
93 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1)
96 , int_func_(hypreMapIntFunc_.at(funct_name))
97 , int_param1_(param1) {}
100 FunctionParameter(Hypre_Chooser chooser, double_func funct, HYPRE_Real param1)
103 , double_func_(funct)
104 , double_param1_(param1) {}
106 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Real param1)
109 , double_func_(hypreMapDoubleFunc_.at(funct_name))
110 , double_param1_(param1) {}
113 FunctionParameter(Hypre_Chooser chooser, double_int_func funct, HYPRE_Real param1, HYPRE_Int param2)
116 , double_int_func_(funct)
117 , int_param1_(param2)
118 , double_param1_(param1) {}
121 FunctionParameter(Hypre_Chooser chooser, int_double_func funct, HYPRE_Int param1, HYPRE_Real param2)
124 , int_double_func_(funct)
125 , int_param1_(param1)
126 , double_param1_(param2) {}
128 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Real param1, HYPRE_Int param2)
131 , double_int_func_(hypreMapDoubleIntFunc_.at(funct_name))
132 , int_param1_(param2)
133 , double_param1_(param1) {}
136 FunctionParameter(Hypre_Chooser chooser, int_int_func funct, HYPRE_Int param1, HYPRE_Int param2)
139 , int_int_func_(funct)
140 , int_param1_(param1)
141 , int_param2_(param2) {}
143 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2)
146 , int_int_func_(hypreMapIntIntFunc_.at(funct_name))
147 , int_param1_(param1)
148 , int_param2_(param2) {}
151 FunctionParameter(Hypre_Chooser chooser, int_star_func funct, HYPRE_Int *param1)
154 , int_star_func_(funct)
155 , int_star_param_(param1) {}
157 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int *param1)
160 , int_star_func_(hypreMapIntStarFunc_.at(funct_name))
161 , int_star_param_(param1) {}
164 FunctionParameter(Hypre_Chooser chooser, double_star_func funct,
double *param1)
167 , double_star_func_(funct)
168 , double_star_param_(param1) {}
170 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
double *param1)
173 , double_star_func_(hypreMapDoubleStarFunc_.at(funct_name))
174 , double_star_param_(param1) {}
177 FunctionParameter(Hypre_Chooser chooser, int_int_double_double_func funct, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Real param3, HYPRE_Real param4)
180 , int_int_double_double_func_(funct)
181 , int_param1_(param1)
182 , int_param2_(param2)
183 , double_param1_(param3)
184 , double_param2_(param4) {}
186 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Real param3, HYPRE_Real param4)
189 , int_int_double_double_func_(hypreMapIntIntDoubleDoubleFunc_.at(funct_name))
190 , int_param1_(param1)
191 , int_param2_(param2)
192 , double_param1_(param3)
193 , double_param2_(param4) {}
196 FunctionParameter(Hypre_Chooser chooser, int_star_star_func funct, HYPRE_Int **param1)
199 , int_star_star_func_(funct)
200 , int_star_star_param_(param1) {}
202 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int **param1)
205 , int_star_star_func_(hypreMapIntStarStarFunc_.at(funct_name))
206 , int_star_star_param_(param1) {}
209 FunctionParameter(Hypre_Chooser chooser, int_int_int_double_int_int_func funct, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Int param3, HYPRE_Real param4, HYPRE_Int param5, HYPRE_Int param6)
212 , int_int_int_double_int_int_func_(funct)
213 , int_param1_(param1)
214 , int_param2_(param2)
215 , int_param3_(param3)
216 , int_param4_(param5)
217 , int_param5_(param6)
218 , double_param1_(param4) {}
220 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Int param3, HYPRE_Real param4, HYPRE_Int param5, HYPRE_Int param6)
223 , int_int_int_double_int_int_func_(hypreMapIntIntIntDoubleIntIntFunc_.at(funct_name))
224 , int_param1_(param1)
225 , int_param2_(param2)
226 , int_param3_(param3)
227 , int_param4_(param5)
228 , int_param5_(param6)
229 , double_param1_(param4) {}
232 FunctionParameter(Hypre_Chooser chooser, char_star_func funct,
char *param1)
235 , char_star_func_(funct)
236 , char_star_param_(param1) {}
238 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
char *param1)
241 , char_star_func_(hypreMapCharStarFunc_.at(funct_name))
242 , char_star_param_(param1) {}
245 int CallFunction(HYPRE_Solver solver, HYPRE_Solver precond) {
246 if (chooser_ == Hypre_Is_Solver) {
248 return int_func_(solver, int_param1_);
249 }
else if (option_ == 1) {
250 return double_func_(solver, double_param1_);
251 }
else if (option_ == 2) {
252 return double_int_func_(solver, double_param1_, int_param1_);
253 }
else if (option_ == 3) {
254 return int_int_func_(solver, int_param1_, int_param2_);
255 }
else if (option_ == 4) {
256 return int_star_func_(solver, int_star_param_);
257 }
else if (option_ == 5) {
258 return double_star_func_(solver, double_star_param_);
259 }
else if (option_ == 6) {
260 return int_int_double_double_func_(solver, int_param1_, int_param2_, double_param1_, double_param2_);
261 }
else if (option_ == 7) {
262 return int_star_star_func_(solver, int_star_star_param_);
263 }
else if (option_ == 8) {
264 return int_int_int_double_int_int_func_(solver, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
265 }
else if (option_ == 9) {
266 return char_star_func_(solver, char_star_param_);
267 }
else if (option_ == 10) {
268 return int_double_func_(solver, int_param1_, double_param1_);
274 return int_func_(precond, int_param1_);
275 }
else if (option_ == 1) {
276 return double_func_(precond, double_param1_);
277 }
else if (option_ == 2) {
278 return double_int_func_(precond, double_param1_, int_param1_);
279 }
else if (option_ == 3) {
280 return int_int_func_(precond, int_param1_, int_param2_);
281 }
else if (option_ == 4) {
282 return int_star_func_(precond, int_star_param_);
283 }
else if (option_ == 5) {
284 return double_star_func_(precond, double_star_param_);
285 }
else if (option_ == 6) {
286 return int_int_double_double_func_(precond, int_param1_, int_param2_, double_param1_, double_param2_);
287 }
else if (option_ == 7) {
288 return int_star_star_func_(precond, int_star_star_param_);
289 }
else if (option_ == 8) {
290 return int_int_int_double_int_int_func_(precond, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
291 }
else if (option_ == 9) {
292 return char_star_func_(solver, char_star_param_);
293 }
else if (option_ == 10) {
294 return int_double_func_(precond, int_param1_, double_param1_);
302 static bool isFuncIntInt(std::string funct_name) {
303 return (hypreMapIntIntFunc_.find(funct_name) != hypreMapIntIntFunc_.end());
306 static bool isFuncIntIntDoubleDouble(std::string funct_name) {
307 return (hypreMapIntIntDoubleDoubleFunc_.find(funct_name) != hypreMapIntIntDoubleDoubleFunc_.end());
310 static bool isFuncIntIntIntDoubleIntInt(std::string funct_name) {
311 return (hypreMapIntIntIntDoubleIntIntFunc_.find(funct_name) != hypreMapIntIntIntDoubleIntIntFunc_.end());
314 static bool isFuncIntStarStar(std::string funct_name) {
315 return (hypreMapIntStarStarFunc_.find(funct_name) != hypreMapIntStarStarFunc_.end());
319 Hypre_Chooser chooser_;
322 double_func double_func_;
323 double_int_func double_int_func_;
324 int_double_func int_double_func_;
325 int_int_func int_int_func_;
326 int_star_func int_star_func_;
327 double_star_func double_star_func_;
328 int_int_double_double_func int_int_double_double_func_;
329 int_int_int_double_int_int_func int_int_int_double_int_int_func_;
330 int_star_star_func int_star_star_func_;
331 char_star_func char_star_func_;
332 HYPRE_Int int_param1_;
333 HYPRE_Int int_param2_;
334 HYPRE_Int int_param3_;
335 HYPRE_Int int_param4_;
336 HYPRE_Int int_param5_;
337 HYPRE_Real double_param1_;
338 HYPRE_Real double_param2_;
339 HYPRE_Int *int_star_param_;
340 HYPRE_Int **int_star_star_param_;
341 HYPRE_Real *double_star_param_;
342 char *char_star_param_;
344 static const std::map<std::string, int_func> hypreMapIntFunc_;
345 static const std::map<std::string, double_func> hypreMapDoubleFunc_;
346 static const std::map<std::string, double_int_func> hypreMapDoubleIntFunc_;
347 static const std::map<std::string, int_double_func> hypreMapIntDoubleFunc_;
348 static const std::map<std::string, int_int_func> hypreMapIntIntFunc_;
349 static const std::map<std::string, int_star_func> hypreMapIntStarFunc_;
350 static const std::map<std::string, double_star_func> hypreMapDoubleStarFunc_;
351 static const std::map<std::string, int_int_double_double_func> hypreMapIntIntDoubleDoubleFunc_;
352 static const std::map<std::string, int_int_int_double_int_int_func> hypreMapIntIntIntDoubleIntIntFunc_;
353 static const std::map<std::string, int_star_star_func> hypreMapIntStarStarFunc_;
354 static const std::map<std::string, char_star_func> hypreMapCharStarFunc_;
359 #endif // HAVE_IFPACK2_HYPRE && HAVE_IFPACK2_MPI
Uses AztecOO's GMRES.
Definition: Ifpack2_CondestType.hpp:20