1 /******************************************************************************
2 * Copyright 1998-2019 Lawrence Livermore National Security, LLC and other
3 * HYPRE Project Developers. See the top-level COPYRIGHT file for details.
4 *
5 * SPDX-License-Identifier: (Apache-2.0 OR MIT)
6 ******************************************************************************/
7
8 /******************************************************************************
9 *
10 * HYPRE_FlexGMRES interface
11 *
12 *****************************************************************************/
13 #include "krylov.h"
14
15 /*--------------------------------------------------------------------------
16 * HYPRE_FlexGMRESDestroy
17 *--------------------------------------------------------------------------*/
18 /* to do, not trivial */
19 /*
20 HYPRE_Int
21 HYPRE_ParCSRFlexGMRESDestroy( HYPRE_Solver solver )
22 {
23 return( hypre_FlexGMRESDestroy( (void *) solver ) );
24 }
25 */
26
27 /*--------------------------------------------------------------------------
28 * HYPRE_FlexGMRESSetup
29 *--------------------------------------------------------------------------*/
30
31 HYPRE_Int
HYPRE_FlexGMRESSetup(HYPRE_Solver solver,HYPRE_Matrix A,HYPRE_Vector b,HYPRE_Vector x)32 HYPRE_FlexGMRESSetup( HYPRE_Solver solver,
33 HYPRE_Matrix A,
34 HYPRE_Vector b,
35 HYPRE_Vector x )
36 {
37 return( hypre_FlexGMRESSetup( solver,
38 A,
39 b,
40 x ) );
41 }
42
43 /*--------------------------------------------------------------------------
44 * HYPRE_FlexGMRESSolve
45 *--------------------------------------------------------------------------*/
46
47 HYPRE_Int
HYPRE_FlexGMRESSolve(HYPRE_Solver solver,HYPRE_Matrix A,HYPRE_Vector b,HYPRE_Vector x)48 HYPRE_FlexGMRESSolve( HYPRE_Solver solver,
49 HYPRE_Matrix A,
50 HYPRE_Vector b,
51 HYPRE_Vector x )
52 {
53 return( hypre_FlexGMRESSolve( solver,
54 A,
55 b,
56 x ) );
57 }
58
59 /*--------------------------------------------------------------------------
60 * HYPRE_FlexGMRESSetKDim, HYPRE_FlexGMRESGetKDim
61 *--------------------------------------------------------------------------*/
62
63 HYPRE_Int
HYPRE_FlexGMRESSetKDim(HYPRE_Solver solver,HYPRE_Int k_dim)64 HYPRE_FlexGMRESSetKDim( HYPRE_Solver solver,
65 HYPRE_Int k_dim )
66 {
67 return( hypre_FlexGMRESSetKDim( (void *) solver, k_dim ) );
68 }
69
70 HYPRE_Int
HYPRE_FlexGMRESGetKDim(HYPRE_Solver solver,HYPRE_Int * k_dim)71 HYPRE_FlexGMRESGetKDim( HYPRE_Solver solver,
72 HYPRE_Int * k_dim )
73 {
74 return( hypre_FlexGMRESGetKDim( (void *) solver, k_dim ) );
75 }
76
77 /*--------------------------------------------------------------------------
78 * HYPRE_FlexGMRESSetTol, HYPRE_FlexGMRESGetTol
79 *--------------------------------------------------------------------------*/
80
81 HYPRE_Int
HYPRE_FlexGMRESSetTol(HYPRE_Solver solver,HYPRE_Real tol)82 HYPRE_FlexGMRESSetTol( HYPRE_Solver solver,
83 HYPRE_Real tol )
84 {
85 return( hypre_FlexGMRESSetTol( (void *) solver, tol ) );
86 }
87
88 HYPRE_Int
HYPRE_FlexGMRESGetTol(HYPRE_Solver solver,HYPRE_Real * tol)89 HYPRE_FlexGMRESGetTol( HYPRE_Solver solver,
90 HYPRE_Real * tol )
91 {
92 return( hypre_FlexGMRESGetTol( (void *) solver, tol ) );
93 }
94 /*--------------------------------------------------------------------------
95 * HYPRE_FlexGMRESSetAbsoluteTol, HYPRE_FlexGMRESGetAbsoluteTol
96 *--------------------------------------------------------------------------*/
97
98 HYPRE_Int
HYPRE_FlexGMRESSetAbsoluteTol(HYPRE_Solver solver,HYPRE_Real a_tol)99 HYPRE_FlexGMRESSetAbsoluteTol( HYPRE_Solver solver,
100 HYPRE_Real a_tol )
101 {
102 return( hypre_FlexGMRESSetAbsoluteTol( (void *) solver, a_tol ) );
103 }
104
105 HYPRE_Int
HYPRE_FlexGMRESGetAbsoluteTol(HYPRE_Solver solver,HYPRE_Real * a_tol)106 HYPRE_FlexGMRESGetAbsoluteTol( HYPRE_Solver solver,
107 HYPRE_Real * a_tol )
108 {
109 return( hypre_FlexGMRESGetAbsoluteTol( (void *) solver, a_tol ) );
110 }
111
112 /*--------------------------------------------------------------------------
113 * HYPRE_FlexGMRESSetConvergenceFactorTol, HYPRE_FlexGMRESGetConvergenceFactorTol
114 *--------------------------------------------------------------------------*/
115
116 HYPRE_Int
HYPRE_FlexGMRESSetConvergenceFactorTol(HYPRE_Solver solver,HYPRE_Real cf_tol)117 HYPRE_FlexGMRESSetConvergenceFactorTol( HYPRE_Solver solver,
118 HYPRE_Real cf_tol )
119 {
120 return( hypre_FlexGMRESSetConvergenceFactorTol( (void *) solver, cf_tol ) );
121 }
122
123 HYPRE_Int
HYPRE_FlexGMRESGetConvergenceFactorTol(HYPRE_Solver solver,HYPRE_Real * cf_tol)124 HYPRE_FlexGMRESGetConvergenceFactorTol( HYPRE_Solver solver,
125 HYPRE_Real * cf_tol )
126 {
127 return( hypre_FlexGMRESGetConvergenceFactorTol( (void *) solver, cf_tol ) );
128 }
129
130 /*--------------------------------------------------------------------------
131 * HYPRE_FlexGMRESSetMinIter, HYPRE_FlexGMRESGetMinIter
132 *--------------------------------------------------------------------------*/
133
134 HYPRE_Int
HYPRE_FlexGMRESSetMinIter(HYPRE_Solver solver,HYPRE_Int min_iter)135 HYPRE_FlexGMRESSetMinIter( HYPRE_Solver solver,
136 HYPRE_Int min_iter )
137 {
138 return( hypre_FlexGMRESSetMinIter( (void *) solver, min_iter ) );
139 }
140
141 HYPRE_Int
HYPRE_FlexGMRESGetMinIter(HYPRE_Solver solver,HYPRE_Int * min_iter)142 HYPRE_FlexGMRESGetMinIter( HYPRE_Solver solver,
143 HYPRE_Int * min_iter )
144 {
145 return( hypre_FlexGMRESGetMinIter( (void *) solver, min_iter ) );
146 }
147
148 /*--------------------------------------------------------------------------
149 * HYPRE_FlexGMRESSetMaxIter, HYPRE_FlexGMRESGetMaxIter
150 *--------------------------------------------------------------------------*/
151
152 HYPRE_Int
HYPRE_FlexGMRESSetMaxIter(HYPRE_Solver solver,HYPRE_Int max_iter)153 HYPRE_FlexGMRESSetMaxIter( HYPRE_Solver solver,
154 HYPRE_Int max_iter )
155 {
156 return( hypre_FlexGMRESSetMaxIter( (void *) solver, max_iter ) );
157 }
158
159 HYPRE_Int
HYPRE_FlexGMRESGetMaxIter(HYPRE_Solver solver,HYPRE_Int * max_iter)160 HYPRE_FlexGMRESGetMaxIter( HYPRE_Solver solver,
161 HYPRE_Int * max_iter )
162 {
163 return( hypre_FlexGMRESGetMaxIter( (void *) solver, max_iter ) );
164 }
165
166
167
168 /*--------------------------------------------------------------------------
169 * HYPRE_FlexGMRESSetPrecond
170 *--------------------------------------------------------------------------*/
171
172 HYPRE_Int
HYPRE_FlexGMRESSetPrecond(HYPRE_Solver solver,HYPRE_PtrToSolverFcn precond,HYPRE_PtrToSolverFcn precond_setup,HYPRE_Solver precond_solver)173 HYPRE_FlexGMRESSetPrecond( HYPRE_Solver solver,
174 HYPRE_PtrToSolverFcn precond,
175 HYPRE_PtrToSolverFcn precond_setup,
176 HYPRE_Solver precond_solver )
177 {
178 return( hypre_FlexGMRESSetPrecond( (void *) solver,
179 (HYPRE_Int (*)(void*, void*, void*, void*))precond,
180 (HYPRE_Int (*)(void*, void*, void*, void*))precond_setup,
181 (void *) precond_solver ) );
182 }
183
184 /*--------------------------------------------------------------------------
185 * HYPRE_FlexGMRESGetPrecond
186 *--------------------------------------------------------------------------*/
187
188 HYPRE_Int
HYPRE_FlexGMRESGetPrecond(HYPRE_Solver solver,HYPRE_Solver * precond_data_ptr)189 HYPRE_FlexGMRESGetPrecond( HYPRE_Solver solver,
190 HYPRE_Solver *precond_data_ptr )
191 {
192 return( hypre_FlexGMRESGetPrecond( (void *) solver,
193 (HYPRE_Solver *) precond_data_ptr ) );
194 }
195
196 /*--------------------------------------------------------------------------
197 * HYPRE_FlexGMRESSetPrintLevel, HYPRE_FlexGMRESGetPrintLevel
198 *--------------------------------------------------------------------------*/
199
200 HYPRE_Int
HYPRE_FlexGMRESSetPrintLevel(HYPRE_Solver solver,HYPRE_Int level)201 HYPRE_FlexGMRESSetPrintLevel( HYPRE_Solver solver,
202 HYPRE_Int level )
203 {
204 return( hypre_FlexGMRESSetPrintLevel( (void *) solver, level ) );
205 }
206
207 HYPRE_Int
HYPRE_FlexGMRESGetPrintLevel(HYPRE_Solver solver,HYPRE_Int * level)208 HYPRE_FlexGMRESGetPrintLevel( HYPRE_Solver solver,
209 HYPRE_Int * level )
210 {
211 return( hypre_FlexGMRESGetPrintLevel( (void *) solver, level ) );
212 }
213
214 /*--------------------------------------------------------------------------
215 * HYPRE_FlexGMRESSetLogging, HYPRE_FlexGMRESGetLogging
216 *--------------------------------------------------------------------------*/
217
218 HYPRE_Int
HYPRE_FlexGMRESSetLogging(HYPRE_Solver solver,HYPRE_Int level)219 HYPRE_FlexGMRESSetLogging( HYPRE_Solver solver,
220 HYPRE_Int level )
221 {
222 return( hypre_FlexGMRESSetLogging( (void *) solver, level ) );
223 }
224
225 HYPRE_Int
HYPRE_FlexGMRESGetLogging(HYPRE_Solver solver,HYPRE_Int * level)226 HYPRE_FlexGMRESGetLogging( HYPRE_Solver solver,
227 HYPRE_Int * level )
228 {
229 return( hypre_FlexGMRESGetLogging( (void *) solver, level ) );
230 }
231
232 /*--------------------------------------------------------------------------
233 * HYPRE_FlexGMRESGetNumIterations
234 *--------------------------------------------------------------------------*/
235
236 HYPRE_Int
HYPRE_FlexGMRESGetNumIterations(HYPRE_Solver solver,HYPRE_Int * num_iterations)237 HYPRE_FlexGMRESGetNumIterations( HYPRE_Solver solver,
238 HYPRE_Int *num_iterations )
239 {
240 return( hypre_FlexGMRESGetNumIterations( (void *) solver, num_iterations ) );
241 }
242
243 /*--------------------------------------------------------------------------
244 * HYPRE_FlexGMRESGetConverged
245 *--------------------------------------------------------------------------*/
246
247 HYPRE_Int
HYPRE_FlexGMRESGetConverged(HYPRE_Solver solver,HYPRE_Int * converged)248 HYPRE_FlexGMRESGetConverged( HYPRE_Solver solver,
249 HYPRE_Int *converged )
250 {
251 return( hypre_FlexGMRESGetConverged( (void *) solver, converged ) );
252 }
253
254 /*--------------------------------------------------------------------------
255 * HYPRE_FlexGMRESGetFinalRelativeResidualNorm
256 *--------------------------------------------------------------------------*/
257
258 HYPRE_Int
HYPRE_FlexGMRESGetFinalRelativeResidualNorm(HYPRE_Solver solver,HYPRE_Real * norm)259 HYPRE_FlexGMRESGetFinalRelativeResidualNorm( HYPRE_Solver solver,
260 HYPRE_Real *norm )
261 {
262 return( hypre_FlexGMRESGetFinalRelativeResidualNorm( (void *) solver, norm ) );
263 }
264
265 /*--------------------------------------------------------------------------
266 * HYPRE_FlexGMRESGetResidual
267 *--------------------------------------------------------------------------*/
268
HYPRE_FlexGMRESGetResidual(HYPRE_Solver solver,void * residual)269 HYPRE_Int HYPRE_FlexGMRESGetResidual( HYPRE_Solver solver, void *residual )
270 {
271 /* returns a pointer to the residual vector */
272 return hypre_FlexGMRESGetResidual( (void *) solver, (void **) residual );
273 }
274
275 /*--------------------------------------------------------------------------
276 * HYPRE_FlexGMRESSetModifyPC
277 *--------------------------------------------------------------------------*/
278
279
HYPRE_FlexGMRESSetModifyPC(HYPRE_Solver solver,HYPRE_Int (* modify_pc)(HYPRE_Solver,HYPRE_Int,HYPRE_Real))280 HYPRE_Int HYPRE_FlexGMRESSetModifyPC( HYPRE_Solver solver,
281 HYPRE_Int (*modify_pc)(HYPRE_Solver, HYPRE_Int, HYPRE_Real) )
282
283 {
284 return hypre_FlexGMRESSetModifyPC( (void *) solver, (HYPRE_Int(*)(void*, HYPRE_Int, HYPRE_Real))modify_pc);
285
286 }
287
288
289
290
291