44 #ifndef IFPACK2_HYPRE_FUNCTIONPARAMETERS_HPP
45 #define IFPACK2_HYPRE_FUNCTIONPARAMETERS_HPP
47 #include "Ifpack2_ConfigDefs.hpp"
48 #if defined(HAVE_IFPACK2_HYPRE) && defined(HAVE_IFPACK2_MPI)
51 #include "HYPRE_utilities.h"
52 #include "HYPRE_IJ_mv.h"
53 #include "HYPRE_parcsr_ls.h"
55 #include "_hypre_parcsr_mv.h"
56 #include "_hypre_IJ_mv.h"
57 #include "HYPRE_parcsr_mv.h"
61 struct hypre_IJMatrix_struct;
62 typedef struct hypre_IJMatrix_struct *HYPRE_IJMatrix;
63 struct hypre_IJVector_struct;
64 typedef struct hypre_IJVector_struct *HYPRE_IJVector;
65 struct hypre_ParCSRMatrix_struct;
66 typedef struct hypre_ParCSRMatrix_struct* HYPRE_ParCSRMatrix;
67 struct hypre_ParVector_struct;
68 typedef struct hypre_ParVector_struct * HYPRE_ParVector;
69 struct hypre_Solver_struct;
70 typedef struct hypre_Solver_struct *HYPRE_Solver;
71 struct hypre_ParVector_struct;
72 typedef struct hypre_ParVector_struct hypre_ParVector;
94 Hypre_Is_Preconditioner
99 typedef HYPRE_Int (*int_func)(HYPRE_Solver, HYPRE_Int);
100 typedef HYPRE_Int (*double_func)(HYPRE_Solver, HYPRE_Real);
101 typedef HYPRE_Int (*double_int_func)(HYPRE_Solver, HYPRE_Real, HYPRE_Int);
102 typedef HYPRE_Int (*int_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Real);
103 typedef HYPRE_Int (*int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int);
104 typedef HYPRE_Int (*int_star_func)(HYPRE_Solver, HYPRE_Int*);
105 typedef HYPRE_Int (*int_star_star_func)(HYPRE_Solver, HYPRE_Int**);
106 typedef HYPRE_Int (*double_star_func)(HYPRE_Solver, HYPRE_Real*);
107 typedef HYPRE_Int (*int_int_double_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Real, HYPRE_Real);
108 typedef HYPRE_Int (*int_int_int_double_int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Int, HYPRE_Real, HYPRE_Int, HYPRE_Int);
109 typedef HYPRE_Int (*char_star_func)(HYPRE_Solver,
char*);
114 void IFPACK2_CHK_ERRV(
int code);
116 void IFPACK2_CHK_ERR(
int code);
119 class FunctionParameter {
122 FunctionParameter(Hypre_Chooser chooser, int_func funct, HYPRE_Int param1) :
126 int_param1_(param1) {}
128 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1) :
131 int_func_(hypreMapIntFunc_.at(funct_name)),
132 int_param1_(param1) {}
135 FunctionParameter(Hypre_Chooser chooser, double_func funct, HYPRE_Real param1):
139 double_param1_(param1) {}
141 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Real param1):
144 double_func_(hypreMapDoubleFunc_.at(funct_name)),
145 double_param1_(param1) {}
148 FunctionParameter(Hypre_Chooser chooser, double_int_func funct, HYPRE_Real param1, HYPRE_Int param2):
151 double_int_func_(funct),
153 double_param1_(param1) {}
156 FunctionParameter(Hypre_Chooser chooser, int_double_func funct, HYPRE_Int param1, HYPRE_Real param2):
159 int_double_func_(funct),
161 double_param1_(param2) {}
163 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Real param1, HYPRE_Int param2):
166 double_int_func_(hypreMapDoubleIntFunc_.at(funct_name)),
168 double_param1_(param1) {}
171 FunctionParameter(Hypre_Chooser chooser, int_int_func funct, HYPRE_Int param1, HYPRE_Int param2):
174 int_int_func_(funct),
176 int_param2_(param2) {}
178 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2):
181 int_int_func_(hypreMapIntIntFunc_.at(funct_name)),
183 int_param2_(param2) {}
186 FunctionParameter(Hypre_Chooser chooser, int_star_func funct, HYPRE_Int *param1):
189 int_star_func_(funct),
190 int_star_param_(param1) {}
192 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int *param1):
195 int_star_func_(hypreMapIntStarFunc_.at(funct_name)),
196 int_star_param_(param1) {}
199 FunctionParameter(Hypre_Chooser chooser, double_star_func funct,
double* param1):
202 double_star_func_(funct),
203 double_star_param_(param1) {}
205 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
double* param1):
208 double_star_func_(hypreMapDoubleStarFunc_.at(funct_name)),
209 double_star_param_(param1) {}
212 FunctionParameter(Hypre_Chooser chooser, int_int_double_double_func funct, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Real param3, HYPRE_Real param4):
215 int_int_double_double_func_(funct),
218 double_param1_(param3),
219 double_param2_(param4) {}
221 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Real param3, HYPRE_Real param4):
224 int_int_double_double_func_(hypreMapIntIntDoubleDoubleFunc_.at(funct_name)),
227 double_param1_(param3),
228 double_param2_(param4) {}
231 FunctionParameter(Hypre_Chooser chooser, int_star_star_func funct, HYPRE_Int ** param1):
234 int_star_star_func_(funct),
235 int_star_star_param_(param1) {}
237 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int** param1):
240 int_star_star_func_(hypreMapIntStarStarFunc_.at(funct_name)),
241 int_star_star_param_(param1) {}
244 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):
247 int_int_int_double_int_int_func_(funct),
253 double_param1_(param4) {}
255 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):
258 int_int_int_double_int_int_func_(hypreMapIntIntIntDoubleIntIntFunc_.at(funct_name)),
264 double_param1_(param4) {}
267 FunctionParameter(Hypre_Chooser chooser, char_star_func funct,
char *param1):
270 char_star_func_(funct),
271 char_star_param_(param1) {}
273 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
char *param1):
276 char_star_func_(hypreMapCharStarFunc_.at(funct_name)),
277 char_star_param_(param1) {}
280 int CallFunction(HYPRE_Solver solver, HYPRE_Solver precond) {
281 if(chooser_ == Hypre_Is_Solver){
283 return int_func_(solver, int_param1_);
284 }
else if(option_ == 1){
285 return double_func_(solver, double_param1_);
286 }
else if(option_ == 2){
287 return double_int_func_(solver, double_param1_, int_param1_);
288 }
else if (option_ == 3){
289 return int_int_func_(solver, int_param1_, int_param2_);
290 }
else if (option_ == 4){
291 return int_star_func_(solver, int_star_param_);
292 }
else if (option_ == 5){
293 return double_star_func_(solver, double_star_param_);
294 }
else if (option_ == 6) {
295 return int_int_double_double_func_(solver, int_param1_, int_param2_, double_param1_, double_param2_);
296 }
else if (option_ == 7) {
297 return int_star_star_func_(solver, int_star_star_param_);
298 }
else if (option_ == 8) {
299 return int_int_int_double_int_int_func_(solver, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
300 }
else if (option_ == 9) {
301 return char_star_func_(solver, char_star_param_);
302 }
else if (option_ == 10) {
303 return int_double_func_(solver, int_param1_, double_param1_);
309 return int_func_(precond, int_param1_);
310 }
else if(option_ == 1){
311 return double_func_(precond, double_param1_);
312 }
else if(option_ == 2){
313 return double_int_func_(precond, double_param1_, int_param1_);
314 }
else if(option_ == 3) {
315 return int_int_func_(precond, int_param1_, int_param2_);
316 }
else if(option_ == 4) {
317 return int_star_func_(precond, int_star_param_);
318 }
else if(option_ == 5) {
319 return double_star_func_(precond, double_star_param_);
320 }
else if (option_ == 6) {
321 return int_int_double_double_func_(precond, int_param1_, int_param2_, double_param1_, double_param2_);
322 }
else if (option_ == 7) {
323 return int_star_star_func_(precond, int_star_star_param_);
324 }
else if (option_ == 8) {
325 return int_int_int_double_int_int_func_(precond, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
326 }
else if (option_ == 9) {
327 return char_star_func_(solver, char_star_param_);
328 }
else if (option_ == 10) {
329 return int_double_func_(precond, int_param1_, double_param1_);
337 static bool isFuncIntInt(std::string funct_name) {
338 return (hypreMapIntIntFunc_.find(funct_name) != hypreMapIntIntFunc_.end());
341 static bool isFuncIntIntDoubleDouble(std::string funct_name) {
342 return (hypreMapIntIntDoubleDoubleFunc_.find(funct_name) != hypreMapIntIntDoubleDoubleFunc_.end());
345 static bool isFuncIntIntIntDoubleIntInt(std::string funct_name) {
346 return (hypreMapIntIntIntDoubleIntIntFunc_.find(funct_name) != hypreMapIntIntIntDoubleIntIntFunc_.end());
349 static bool isFuncIntStarStar(std::string funct_name) {
350 return (hypreMapIntStarStarFunc_.find(funct_name) != hypreMapIntStarStarFunc_.end());
354 Hypre_Chooser chooser_;
357 double_func double_func_;
358 double_int_func double_int_func_;
359 int_double_func int_double_func_;
360 int_int_func int_int_func_;
361 int_star_func int_star_func_;
362 double_star_func double_star_func_;
363 int_int_double_double_func int_int_double_double_func_;
364 int_int_int_double_int_int_func int_int_int_double_int_int_func_;
365 int_star_star_func int_star_star_func_;
366 char_star_func char_star_func_;
367 HYPRE_Int int_param1_;
368 HYPRE_Int int_param2_;
369 HYPRE_Int int_param3_;
370 HYPRE_Int int_param4_;
371 HYPRE_Int int_param5_;
372 HYPRE_Real double_param1_;
373 HYPRE_Real double_param2_;
374 HYPRE_Int *int_star_param_;
375 HYPRE_Int **int_star_star_param_;
376 HYPRE_Real *double_star_param_;
377 char *char_star_param_;
379 static const std::map<std::string, int_func> hypreMapIntFunc_;
380 static const std::map<std::string, double_func> hypreMapDoubleFunc_;
381 static const std::map<std::string, double_int_func> hypreMapDoubleIntFunc_;
382 static const std::map<std::string, int_double_func> hypreMapIntDoubleFunc_;
383 static const std::map<std::string, int_int_func> hypreMapIntIntFunc_;
384 static const std::map<std::string, int_star_func> hypreMapIntStarFunc_;
385 static const std::map<std::string, double_star_func> hypreMapDoubleStarFunc_;
386 static const std::map<std::string, int_int_double_double_func> hypreMapIntIntDoubleDoubleFunc_;
387 static const std::map<std::string, int_int_int_double_int_int_func> hypreMapIntIntIntDoubleIntIntFunc_;
388 static const std::map<std::string, int_star_star_func> hypreMapIntStarStarFunc_;
389 static const std::map<std::string, char_star_func> hypreMapCharStarFunc_;
395 #endif // HAVE_IFPACK2_HYPRE && HAVE_IFPACK2_MPI
Uses AztecOO's GMRES.
Definition: Ifpack2_CondestType.hpp:53