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"
20#if defined(HAVE_IFPACK2_HYPRE_UNDERSCORE_KRYLOV_H)
21#include "_hypre_krylov.h"
25#include "_hypre_parcsr_mv.h"
26#include "_hypre_IJ_mv.h"
27#include "HYPRE_parcsr_mv.h"
31struct hypre_IJMatrix_struct;
32typedef struct hypre_IJMatrix_struct *HYPRE_IJMatrix;
33struct hypre_IJVector_struct;
34typedef struct hypre_IJVector_struct *HYPRE_IJVector;
35struct hypre_ParCSRMatrix_struct;
36typedef struct hypre_ParCSRMatrix_struct *HYPRE_ParCSRMatrix;
37struct hypre_ParVector_struct;
38typedef struct hypre_ParVector_struct *HYPRE_ParVector;
39struct hypre_Solver_struct;
40typedef struct hypre_Solver_struct *HYPRE_Solver;
41struct hypre_ParVector_struct;
42typedef struct hypre_ParVector_struct hypre_ParVector;
64 Hypre_Is_Preconditioner
69typedef HYPRE_Int (*int_func)(HYPRE_Solver, HYPRE_Int);
70typedef HYPRE_Int (*double_func)(HYPRE_Solver, HYPRE_Real);
71typedef HYPRE_Int (*double_int_func)(HYPRE_Solver, HYPRE_Real, HYPRE_Int);
72typedef HYPRE_Int (*int_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Real);
73typedef HYPRE_Int (*int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int);
74typedef HYPRE_Int (*int_star_func)(HYPRE_Solver, HYPRE_Int *);
75typedef HYPRE_Int (*int_star_star_func)(HYPRE_Solver, HYPRE_Int **);
76typedef HYPRE_Int (*double_star_func)(HYPRE_Solver, HYPRE_Real *);
77typedef HYPRE_Int (*int_int_double_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Real, HYPRE_Real);
78typedef HYPRE_Int (*int_int_int_double_int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Int, HYPRE_Real, HYPRE_Int, HYPRE_Int);
79typedef HYPRE_Int (*char_star_func)(HYPRE_Solver,
char *);
83void IFPACK2_CHK_ERRV(
int code);
85void IFPACK2_CHK_ERR(
int code);
88class FunctionParameter {
91 FunctionParameter(Hypre_Chooser chooser, int_func funct, HYPRE_Int param1)
95 , int_param1_(param1) {}
97 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1)
100 , int_func_(hypreMapIntFunc_.at(funct_name))
101 , int_param1_(param1) {}
104 FunctionParameter(Hypre_Chooser chooser, double_func funct, HYPRE_Real param1)
107 , double_func_(funct)
108 , double_param1_(param1) {}
110 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Real param1)
113 , double_func_(hypreMapDoubleFunc_.at(funct_name))
114 , double_param1_(param1) {}
117 FunctionParameter(Hypre_Chooser chooser, double_int_func funct, HYPRE_Real param1, HYPRE_Int param2)
120 , double_int_func_(funct)
121 , int_param1_(param2)
122 , double_param1_(param1) {}
125 FunctionParameter(Hypre_Chooser chooser, int_double_func funct, HYPRE_Int param1, HYPRE_Real param2)
128 , int_double_func_(funct)
129 , int_param1_(param1)
130 , double_param1_(param2) {}
132 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Real param1, HYPRE_Int param2)
135 , double_int_func_(hypreMapDoubleIntFunc_.at(funct_name))
136 , int_param1_(param2)
137 , double_param1_(param1) {}
140 FunctionParameter(Hypre_Chooser chooser, int_int_func funct, HYPRE_Int param1, HYPRE_Int param2)
143 , int_int_func_(funct)
144 , int_param1_(param1)
145 , int_param2_(param2) {}
147 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2)
150 , int_int_func_(hypreMapIntIntFunc_.at(funct_name))
151 , int_param1_(param1)
152 , int_param2_(param2) {}
155 FunctionParameter(Hypre_Chooser chooser, int_star_func funct, HYPRE_Int *param1)
158 , int_star_func_(funct)
159 , int_star_param_(param1) {}
161 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int *param1)
164 , int_star_func_(hypreMapIntStarFunc_.at(funct_name))
165 , int_star_param_(param1) {}
168 FunctionParameter(Hypre_Chooser chooser, double_star_func funct,
double *param1)
171 , double_star_func_(funct)
172 , double_star_param_(param1) {}
174 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
double *param1)
177 , double_star_func_(hypreMapDoubleStarFunc_.at(funct_name))
178 , double_star_param_(param1) {}
181 FunctionParameter(Hypre_Chooser chooser, int_int_double_double_func funct, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Real param3, HYPRE_Real param4)
184 , int_int_double_double_func_(funct)
185 , int_param1_(param1)
186 , int_param2_(param2)
187 , double_param1_(param3)
188 , double_param2_(param4) {}
190 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Real param3, HYPRE_Real param4)
193 , int_int_double_double_func_(hypreMapIntIntDoubleDoubleFunc_.at(funct_name))
194 , int_param1_(param1)
195 , int_param2_(param2)
196 , double_param1_(param3)
197 , double_param2_(param4) {}
200 FunctionParameter(Hypre_Chooser chooser, int_star_star_func funct, HYPRE_Int **param1)
203 , int_star_star_func_(funct)
204 , int_star_star_param_(param1) {}
206 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int **param1)
209 , int_star_star_func_(hypreMapIntStarStarFunc_.at(funct_name))
210 , int_star_star_param_(param1) {}
213 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)
216 , int_int_int_double_int_int_func_(funct)
217 , int_param1_(param1)
218 , int_param2_(param2)
219 , int_param3_(param3)
220 , int_param4_(param5)
221 , int_param5_(param6)
222 , double_param1_(param4) {}
224 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)
227 , int_int_int_double_int_int_func_(hypreMapIntIntIntDoubleIntIntFunc_.at(funct_name))
228 , int_param1_(param1)
229 , int_param2_(param2)
230 , int_param3_(param3)
231 , int_param4_(param5)
232 , int_param5_(param6)
233 , double_param1_(param4) {}
236 FunctionParameter(Hypre_Chooser chooser, char_star_func funct,
char *param1)
239 , char_star_func_(funct)
240 , char_star_param_(param1) {}
242 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
char *param1)
245 , char_star_func_(hypreMapCharStarFunc_.at(funct_name))
246 , char_star_param_(param1) {}
249 int CallFunction(HYPRE_Solver solver, HYPRE_Solver precond) {
250 if (chooser_ == Hypre_Is_Solver) {
252 return int_func_(solver, int_param1_);
253 }
else if (option_ == 1) {
254 return double_func_(solver, double_param1_);
255 }
else if (option_ == 2) {
256 return double_int_func_(solver, double_param1_, int_param1_);
257 }
else if (option_ == 3) {
258 return int_int_func_(solver, int_param1_, int_param2_);
259 }
else if (option_ == 4) {
260 return int_star_func_(solver, int_star_param_);
261 }
else if (option_ == 5) {
262 return double_star_func_(solver, double_star_param_);
263 }
else if (option_ == 6) {
264 return int_int_double_double_func_(solver, int_param1_, int_param2_, double_param1_, double_param2_);
265 }
else if (option_ == 7) {
266 return int_star_star_func_(solver, int_star_star_param_);
267 }
else if (option_ == 8) {
268 return int_int_int_double_int_int_func_(solver, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
269 }
else if (option_ == 9) {
270 return char_star_func_(solver, char_star_param_);
271 }
else if (option_ == 10) {
272 return int_double_func_(solver, int_param1_, double_param1_);
278 return int_func_(precond, int_param1_);
279 }
else if (option_ == 1) {
280 return double_func_(precond, double_param1_);
281 }
else if (option_ == 2) {
282 return double_int_func_(precond, double_param1_, int_param1_);
283 }
else if (option_ == 3) {
284 return int_int_func_(precond, int_param1_, int_param2_);
285 }
else if (option_ == 4) {
286 return int_star_func_(precond, int_star_param_);
287 }
else if (option_ == 5) {
288 return double_star_func_(precond, double_star_param_);
289 }
else if (option_ == 6) {
290 return int_int_double_double_func_(precond, int_param1_, int_param2_, double_param1_, double_param2_);
291 }
else if (option_ == 7) {
292 return int_star_star_func_(precond, int_star_star_param_);
293 }
else if (option_ == 8) {
294 return int_int_int_double_int_int_func_(precond, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
295 }
else if (option_ == 9) {
296 return char_star_func_(solver, char_star_param_);
297 }
else if (option_ == 10) {
298 return int_double_func_(precond, int_param1_, double_param1_);
306 static bool isFuncIntInt(std::string funct_name) {
307 return (hypreMapIntIntFunc_.find(funct_name) != hypreMapIntIntFunc_.end());
310 static bool isFuncIntIntDoubleDouble(std::string funct_name) {
311 return (hypreMapIntIntDoubleDoubleFunc_.find(funct_name) != hypreMapIntIntDoubleDoubleFunc_.end());
314 static bool isFuncIntIntIntDoubleIntInt(std::string funct_name) {
315 return (hypreMapIntIntIntDoubleIntIntFunc_.find(funct_name) != hypreMapIntIntIntDoubleIntIntFunc_.end());
318 static bool isFuncIntStarStar(std::string funct_name) {
319 return (hypreMapIntStarStarFunc_.find(funct_name) != hypreMapIntStarStarFunc_.end());
323 Hypre_Chooser chooser_;
326 double_func double_func_;
327 double_int_func double_int_func_;
328 int_double_func int_double_func_;
329 int_int_func int_int_func_;
330 int_star_func int_star_func_;
331 double_star_func double_star_func_;
332 int_int_double_double_func int_int_double_double_func_;
333 int_int_int_double_int_int_func int_int_int_double_int_int_func_;
334 int_star_star_func int_star_star_func_;
335 char_star_func char_star_func_;
336 HYPRE_Int int_param1_;
337 HYPRE_Int int_param2_;
338 HYPRE_Int int_param3_;
339 HYPRE_Int int_param4_;
340 HYPRE_Int int_param5_;
341 HYPRE_Real double_param1_;
342 HYPRE_Real double_param2_;
343 HYPRE_Int *int_star_param_;
344 HYPRE_Int **int_star_star_param_;
345 HYPRE_Real *double_star_param_;
346 char *char_star_param_;
348 static const std::map<std::string, int_func> hypreMapIntFunc_;
349 static const std::map<std::string, double_func> hypreMapDoubleFunc_;
350 static const std::map<std::string, double_int_func> hypreMapDoubleIntFunc_;
351 static const std::map<std::string, int_double_func> hypreMapIntDoubleFunc_;
352 static const std::map<std::string, int_int_func> hypreMapIntIntFunc_;
353 static const std::map<std::string, int_star_func> hypreMapIntStarFunc_;
354 static const std::map<std::string, double_star_func> hypreMapDoubleStarFunc_;
355 static const std::map<std::string, int_int_double_double_func> hypreMapIntIntDoubleDoubleFunc_;
356 static const std::map<std::string, int_int_int_double_int_int_func> hypreMapIntIntIntDoubleIntIntFunc_;
357 static const std::map<std::string, int_star_star_func> hypreMapIntStarStarFunc_;
358 static const std::map<std::string, char_star_func> hypreMapCharStarFunc_;
Preconditioners and smoothers for Tpetra sparse matrices.
Definition Ifpack2_AdditiveSchwarz_decl.hpp:40
@ GMRES
Uses AztecOO's GMRES.
Definition Ifpack2_CondestType.hpp:20