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"
61struct hypre_IJMatrix_struct;
62typedef struct hypre_IJMatrix_struct *HYPRE_IJMatrix;
63struct hypre_IJVector_struct;
64typedef struct hypre_IJVector_struct *HYPRE_IJVector;
65struct hypre_ParCSRMatrix_struct;
66typedef struct hypre_ParCSRMatrix_struct* HYPRE_ParCSRMatrix;
67struct hypre_ParVector_struct;
68typedef struct hypre_ParVector_struct * HYPRE_ParVector;
69struct hypre_Solver_struct;
70typedef struct hypre_Solver_struct *HYPRE_Solver;
71struct hypre_ParVector_struct;
72typedef struct hypre_ParVector_struct hypre_ParVector;
94 Hypre_Is_Preconditioner
99typedef HYPRE_Int (*int_func)(HYPRE_Solver, HYPRE_Int);
100typedef HYPRE_Int (*double_func)(HYPRE_Solver, double);
101typedef HYPRE_Int (*double_int_func)(HYPRE_Solver, double, HYPRE_Int);
102typedef HYPRE_Int (*int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int);
103typedef HYPRE_Int (*int_star_func)(HYPRE_Solver, HYPRE_Int*);
104typedef HYPRE_Int (*int_star_star_func)(HYPRE_Solver, HYPRE_Int**);
105typedef HYPRE_Int (*double_star_func)(HYPRE_Solver,
double*);
106typedef HYPRE_Int (*int_int_double_double_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, double, double);
107typedef HYPRE_Int (*int_int_int_double_int_int_func)(HYPRE_Solver, HYPRE_Int, HYPRE_Int, HYPRE_Int, double, HYPRE_Int, HYPRE_Int);
108typedef HYPRE_Int (*char_star_func)(HYPRE_Solver,
char*);
113 void IFPACK2_CHK_ERRV(
int code);
115 void IFPACK2_CHK_ERR(
int code);
118 class FunctionParameter {
121 FunctionParameter(Hypre_Chooser chooser, int_func funct, HYPRE_Int param1) :
125 int_param1_(param1) {}
127 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1) :
130 int_func_(hypreMapIntFunc_.at(funct_name)),
131 int_param1_(param1) {}
134 FunctionParameter(Hypre_Chooser chooser, double_func funct,
double param1):
138 double_param1_(param1) {}
140 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
double param1):
143 double_func_(hypreMapDoubleFunc_.at(funct_name)),
144 double_param1_(param1) {}
147 FunctionParameter(Hypre_Chooser chooser, double_int_func funct,
double param1, HYPRE_Int param2):
150 double_int_func_(funct),
152 double_param1_(param1) {}
154 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
double param1, HYPRE_Int param2):
157 double_int_func_(hypreMapDoubleIntFunc_.at(funct_name)),
159 double_param1_(param1) {}
162 FunctionParameter(Hypre_Chooser chooser, int_int_func funct, HYPRE_Int param1, HYPRE_Int param2):
165 int_int_func_(funct),
167 int_param2_(param2) {}
169 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2):
172 int_int_func_(hypreMapIntIntFunc_.at(funct_name)),
174 int_param2_(param2) {}
177 FunctionParameter(Hypre_Chooser chooser, int_star_func funct, HYPRE_Int *param1):
180 int_star_func_(funct),
181 int_star_param_(param1) {}
183 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int *param1):
186 int_star_func_(hypreMapIntStarFunc_.at(funct_name)),
187 int_star_param_(param1) {}
190 FunctionParameter(Hypre_Chooser chooser, double_star_func funct,
double* param1):
193 double_star_func_(funct),
194 double_star_param_(param1) {}
196 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
double* param1):
199 double_star_func_(hypreMapDoubleStarFunc_.at(funct_name)),
200 double_star_param_(param1) {}
203 FunctionParameter(Hypre_Chooser chooser, int_int_double_double_func funct, HYPRE_Int param1, HYPRE_Int param2,
double param3,
double param4):
206 int_int_double_double_func_(funct),
209 double_param1_(param3),
210 double_param2_(param4) {}
212 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2,
double param3,
double param4):
215 int_int_double_double_func_(hypreMapIntIntDoubleDoubleFunc_.at(funct_name)),
218 double_param1_(param3),
219 double_param2_(param4) {}
222 FunctionParameter(Hypre_Chooser chooser, int_star_star_func funct, HYPRE_Int ** param1):
225 int_star_star_func_(funct),
226 int_star_star_param_(param1) {}
228 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int** param1):
231 int_star_star_func_(hypreMapIntStarStarFunc_.at(funct_name)),
232 int_star_star_param_(param1) {}
235 FunctionParameter(Hypre_Chooser chooser, int_int_int_double_int_int_func funct, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Int param3,
double param4, HYPRE_Int param5, HYPRE_Int param6):
238 int_int_int_double_int_int_func_(funct),
244 double_param1_(param4) {}
246 FunctionParameter(Hypre_Chooser chooser, std::string funct_name, HYPRE_Int param1, HYPRE_Int param2, HYPRE_Int param3,
double param4, HYPRE_Int param5, HYPRE_Int param6):
249 int_int_int_double_int_int_func_(hypreMapIntIntIntDoubleIntIntFunc_.at(funct_name)),
255 double_param1_(param4) {}
258 FunctionParameter(Hypre_Chooser chooser, char_star_func funct,
char *param1):
261 char_star_func_(funct),
262 char_star_param_(param1) {}
264 FunctionParameter(Hypre_Chooser chooser, std::string funct_name,
char *param1):
267 char_star_func_(hypreMapCharStarFunc_.at(funct_name)),
268 char_star_param_(param1) {}
271 int CallFunction(HYPRE_Solver solver, HYPRE_Solver precond) {
272 if(chooser_ == Hypre_Is_Solver){
274 return int_func_(solver, int_param1_);
275 }
else if(option_ == 1){
276 return double_func_(solver, double_param1_);
277 }
else if(option_ == 2){
278 return double_int_func_(solver, double_param1_, int_param1_);
279 }
else if (option_ == 3){
280 return int_int_func_(solver, int_param1_, int_param2_);
281 }
else if (option_ == 4){
282 return int_star_func_(solver, int_star_param_);
283 }
else if (option_ == 5){
284 return double_star_func_(solver, double_star_param_);
285 }
else if (option_ == 6) {
286 return int_int_double_double_func_(solver, int_param1_, int_param2_, double_param1_, double_param2_);
287 }
else if (option_ == 7) {
288 return int_star_star_func_(solver, int_star_star_param_);
289 }
else if (option_ == 8) {
290 return int_int_int_double_int_int_func_(solver, 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_);
298 return int_func_(precond, int_param1_);
299 }
else if(option_ == 1){
300 return double_func_(precond, double_param1_);
301 }
else if(option_ == 2){
302 return double_int_func_(precond, double_param1_, int_param1_);
303 }
else if(option_ == 3) {
304 return int_int_func_(precond, int_param1_, int_param2_);
305 }
else if(option_ == 4) {
306 return int_star_func_(precond, int_star_param_);
307 }
else if(option_ == 5) {
308 return double_star_func_(precond, double_star_param_);
309 }
else if (option_ == 6) {
310 return int_int_double_double_func_(precond, int_param1_, int_param2_, double_param1_, double_param2_);
311 }
else if (option_ == 7) {
312 return int_star_star_func_(precond, int_star_star_param_);
313 }
else if (option_ == 8) {
314 return int_int_int_double_int_int_func_(precond, int_param1_, int_param2_, int_param3_, double_param1_, int_param4_, int_param5_);
315 }
else if (option_ == 9) {
316 return char_star_func_(solver, char_star_param_);
324 static bool isFuncIntInt(std::string funct_name) {
325 return (hypreMapIntIntFunc_.find(funct_name) != hypreMapIntIntFunc_.end());
328 static bool isFuncIntIntDoubleDouble(std::string funct_name) {
329 return (hypreMapIntIntDoubleDoubleFunc_.find(funct_name) != hypreMapIntIntDoubleDoubleFunc_.end());
332 static bool isFuncIntIntIntDoubleIntInt(std::string funct_name) {
333 return (hypreMapIntIntIntDoubleIntIntFunc_.find(funct_name) != hypreMapIntIntIntDoubleIntIntFunc_.end());
336 static bool isFuncIntStarStar(std::string funct_name) {
337 return (hypreMapIntStarStarFunc_.find(funct_name) != hypreMapIntStarStarFunc_.end());
341 Hypre_Chooser chooser_;
344 double_func double_func_;
345 double_int_func double_int_func_;
346 int_int_func int_int_func_;
347 int_star_func int_star_func_;
348 double_star_func double_star_func_;
349 int_int_double_double_func int_int_double_double_func_;
350 int_int_int_double_int_int_func int_int_int_double_int_int_func_;
351 int_star_star_func int_star_star_func_;
352 char_star_func char_star_func_;
353 HYPRE_Int int_param1_;
354 HYPRE_Int int_param2_;
355 HYPRE_Int int_param3_;
356 HYPRE_Int int_param4_;
357 HYPRE_Int int_param5_;
358 double double_param1_;
359 double double_param2_;
360 HYPRE_Int *int_star_param_;
361 HYPRE_Int **int_star_star_param_;
362 double *double_star_param_;
363 char *char_star_param_;
365 static const std::map<std::string, int_func> hypreMapIntFunc_;
366 static const std::map<std::string, double_func> hypreMapDoubleFunc_;
367 static const std::map<std::string, double_int_func> hypreMapDoubleIntFunc_;
368 static const std::map<std::string, int_int_func> hypreMapIntIntFunc_;
369 static const std::map<std::string, int_star_func> hypreMapIntStarFunc_;
370 static const std::map<std::string, double_star_func> hypreMapDoubleStarFunc_;
371 static const std::map<std::string, int_int_double_double_func> hypreMapIntIntDoubleDoubleFunc_;
372 static const std::map<std::string, int_int_int_double_int_int_func> hypreMapIntIntIntDoubleIntIntFunc_;
373 static const std::map<std::string, int_star_star_func> hypreMapIntStarStarFunc_;
374 static const std::map<std::string, char_star_func> hypreMapCharStarFunc_;
Preconditioners and smoothers for Tpetra sparse matrices.
Definition: Ifpack2_AdditiveSchwarz_decl.hpp:74
@ GMRES
Uses AztecOO's GMRES.
Definition: Ifpack2_CondestType.hpp:53