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_GMRES interface
11 *
12 *****************************************************************************/
13 #include "krylov.h"
14
15 /*--------------------------------------------------------------------------
16 * HYPRE_GMRESDestroy
17 *--------------------------------------------------------------------------*/
18 /* to do, not trivial */
19 /*
20 HYPRE_Int
21 HYPRE_ParCSRGMRESDestroy( HYPRE_Solver solver )
22 {
23 return( hypre_GMRESDestroy( (void *) solver ) );
24 }
25 */
26
27 /*--------------------------------------------------------------------------
28 * HYPRE_GMRESSetup
29 *--------------------------------------------------------------------------*/
30
31 HYPRE_Int
HYPRE_GMRESSetup(HYPRE_Solver solver,HYPRE_Matrix A,HYPRE_Vector b,HYPRE_Vector x)32 HYPRE_GMRESSetup( HYPRE_Solver solver,
33 HYPRE_Matrix A,
34 HYPRE_Vector b,
35 HYPRE_Vector x )
36 {
37 return( hypre_GMRESSetup( solver,
38 A,
39 b,
40 x ) );
41 }
42
43 /*--------------------------------------------------------------------------
44 * HYPRE_GMRESSolve
45 *--------------------------------------------------------------------------*/
46
47 HYPRE_Int
HYPRE_GMRESSolve(HYPRE_Solver solver,HYPRE_Matrix A,HYPRE_Vector b,HYPRE_Vector x)48 HYPRE_GMRESSolve( HYPRE_Solver solver,
49 HYPRE_Matrix A,
50 HYPRE_Vector b,
51 HYPRE_Vector x )
52 {
53 return( hypre_GMRESSolve( solver,
54 A,
55 b,
56 x ) );
57 }
58
59 /*--------------------------------------------------------------------------
60 * HYPRE_GMRESSetKDim, HYPRE_GMRESGetKDim
61 *--------------------------------------------------------------------------*/
62
63 HYPRE_Int
HYPRE_GMRESSetKDim(HYPRE_Solver solver,HYPRE_Int k_dim)64 HYPRE_GMRESSetKDim( HYPRE_Solver solver,
65 HYPRE_Int k_dim )
66 {
67 return( hypre_GMRESSetKDim( (void *) solver, k_dim ) );
68 }
69
70 HYPRE_Int
HYPRE_GMRESGetKDim(HYPRE_Solver solver,HYPRE_Int * k_dim)71 HYPRE_GMRESGetKDim( HYPRE_Solver solver,
72 HYPRE_Int * k_dim )
73 {
74 return( hypre_GMRESGetKDim( (void *) solver, k_dim ) );
75 }
76
77 /*--------------------------------------------------------------------------
78 * HYPRE_GMRESSetTol, HYPRE_GMRESGetTol
79 *--------------------------------------------------------------------------*/
80
81 HYPRE_Int
HYPRE_GMRESSetTol(HYPRE_Solver solver,HYPRE_Real tol)82 HYPRE_GMRESSetTol( HYPRE_Solver solver,
83 HYPRE_Real tol )
84 {
85 return( hypre_GMRESSetTol( (void *) solver, tol ) );
86 }
87
88 HYPRE_Int
HYPRE_GMRESGetTol(HYPRE_Solver solver,HYPRE_Real * tol)89 HYPRE_GMRESGetTol( HYPRE_Solver solver,
90 HYPRE_Real * tol )
91 {
92 return( hypre_GMRESGetTol( (void *) solver, tol ) );
93 }
94 /*--------------------------------------------------------------------------
95 * HYPRE_GMRESSetAbsoluteTol, HYPRE_GMRESGetAbsoluteTol
96 *--------------------------------------------------------------------------*/
97
98 HYPRE_Int
HYPRE_GMRESSetAbsoluteTol(HYPRE_Solver solver,HYPRE_Real a_tol)99 HYPRE_GMRESSetAbsoluteTol( HYPRE_Solver solver,
100 HYPRE_Real a_tol )
101 {
102 return( hypre_GMRESSetAbsoluteTol( (void *) solver, a_tol ) );
103 }
104
105 HYPRE_Int
HYPRE_GMRESGetAbsoluteTol(HYPRE_Solver solver,HYPRE_Real * a_tol)106 HYPRE_GMRESGetAbsoluteTol( HYPRE_Solver solver,
107 HYPRE_Real * a_tol )
108 {
109 return( hypre_GMRESGetAbsoluteTol( (void *) solver, a_tol ) );
110 }
111
112 /*--------------------------------------------------------------------------
113 * HYPRE_GMRESSetConvergenceFactorTol, HYPRE_GMRESGetConvergenceFactorTol
114 *--------------------------------------------------------------------------*/
115
116 HYPRE_Int
HYPRE_GMRESSetConvergenceFactorTol(HYPRE_Solver solver,HYPRE_Real cf_tol)117 HYPRE_GMRESSetConvergenceFactorTol( HYPRE_Solver solver,
118 HYPRE_Real cf_tol )
119 {
120 return( hypre_GMRESSetConvergenceFactorTol( (void *) solver, cf_tol ) );
121 }
122
123 HYPRE_Int
HYPRE_GMRESGetConvergenceFactorTol(HYPRE_Solver solver,HYPRE_Real * cf_tol)124 HYPRE_GMRESGetConvergenceFactorTol( HYPRE_Solver solver,
125 HYPRE_Real * cf_tol )
126 {
127 return( hypre_GMRESGetConvergenceFactorTol( (void *) solver, cf_tol ) );
128 }
129
130 /*--------------------------------------------------------------------------
131 * HYPRE_GMRESSetMinIter, HYPRE_GMRESGetMinIter
132 *--------------------------------------------------------------------------*/
133
134 HYPRE_Int
HYPRE_GMRESSetMinIter(HYPRE_Solver solver,HYPRE_Int min_iter)135 HYPRE_GMRESSetMinIter( HYPRE_Solver solver,
136 HYPRE_Int min_iter )
137 {
138 return( hypre_GMRESSetMinIter( (void *) solver, min_iter ) );
139 }
140
141 HYPRE_Int
HYPRE_GMRESGetMinIter(HYPRE_Solver solver,HYPRE_Int * min_iter)142 HYPRE_GMRESGetMinIter( HYPRE_Solver solver,
143 HYPRE_Int * min_iter )
144 {
145 return( hypre_GMRESGetMinIter( (void *) solver, min_iter ) );
146 }
147
148 /*--------------------------------------------------------------------------
149 * HYPRE_GMRESSetMaxIter, HYPRE_GMRESGetMaxIter
150 *--------------------------------------------------------------------------*/
151
152 HYPRE_Int
HYPRE_GMRESSetMaxIter(HYPRE_Solver solver,HYPRE_Int max_iter)153 HYPRE_GMRESSetMaxIter( HYPRE_Solver solver,
154 HYPRE_Int max_iter )
155 {
156 return( hypre_GMRESSetMaxIter( (void *) solver, max_iter ) );
157 }
158
159 HYPRE_Int
HYPRE_GMRESGetMaxIter(HYPRE_Solver solver,HYPRE_Int * max_iter)160 HYPRE_GMRESGetMaxIter( HYPRE_Solver solver,
161 HYPRE_Int * max_iter )
162 {
163 return( hypre_GMRESGetMaxIter( (void *) solver, max_iter ) );
164 }
165
166 /*--------------------------------------------------------------------------
167 * HYPRE_GMRESSetStopCrit, HYPRE_GMRESGetStopCrit - OBSOLETE
168 *--------------------------------------------------------------------------*/
169
170 HYPRE_Int
HYPRE_GMRESSetStopCrit(HYPRE_Solver solver,HYPRE_Int stop_crit)171 HYPRE_GMRESSetStopCrit( HYPRE_Solver solver,
172 HYPRE_Int stop_crit )
173 {
174 return( hypre_GMRESSetStopCrit( (void *) solver, stop_crit ) );
175 }
176
177 HYPRE_Int
HYPRE_GMRESGetStopCrit(HYPRE_Solver solver,HYPRE_Int * stop_crit)178 HYPRE_GMRESGetStopCrit( HYPRE_Solver solver,
179 HYPRE_Int * stop_crit )
180 {
181 return( hypre_GMRESGetStopCrit( (void *) solver, stop_crit ) );
182 }
183
184 /*--------------------------------------------------------------------------
185 * HYPRE_GMRESSetRelChange, HYPRE_GMRESGetRelChange
186 *--------------------------------------------------------------------------*/
187
188 HYPRE_Int
HYPRE_GMRESSetRelChange(HYPRE_Solver solver,HYPRE_Int rel_change)189 HYPRE_GMRESSetRelChange( HYPRE_Solver solver,
190 HYPRE_Int rel_change )
191 {
192 return( hypre_GMRESSetRelChange( (void *) solver, rel_change ) );
193 }
194
195 HYPRE_Int
HYPRE_GMRESGetRelChange(HYPRE_Solver solver,HYPRE_Int * rel_change)196 HYPRE_GMRESGetRelChange( HYPRE_Solver solver,
197 HYPRE_Int * rel_change )
198 {
199 return( hypre_GMRESGetRelChange( (void *) solver, rel_change ) );
200 }
201
202 /*--------------------------------------------------------------------------
203 * HYPRE_GMRESSetSkipRealResidualCheck, HYPRE_GMRESGetSkipRealResidualCheck
204 *--------------------------------------------------------------------------*/
205
206 HYPRE_Int
HYPRE_GMRESSetSkipRealResidualCheck(HYPRE_Solver solver,HYPRE_Int skip_real_r_check)207 HYPRE_GMRESSetSkipRealResidualCheck( HYPRE_Solver solver,
208 HYPRE_Int skip_real_r_check )
209 {
210 return( hypre_GMRESSetSkipRealResidualCheck( (void *) solver, skip_real_r_check ) );
211 }
212
213 HYPRE_Int
HYPRE_GMRESGetSkipRealResidualCheck(HYPRE_Solver solver,HYPRE_Int * skip_real_r_check)214 HYPRE_GMRESGetSkipRealResidualCheck( HYPRE_Solver solver,
215 HYPRE_Int *skip_real_r_check )
216 {
217 return( hypre_GMRESGetSkipRealResidualCheck( (void *) solver, skip_real_r_check ) );
218 }
219
220 /*--------------------------------------------------------------------------
221 * HYPRE_GMRESSetPrecond
222 *--------------------------------------------------------------------------*/
223
224 HYPRE_Int
HYPRE_GMRESSetPrecond(HYPRE_Solver solver,HYPRE_PtrToSolverFcn precond,HYPRE_PtrToSolverFcn precond_setup,HYPRE_Solver precond_solver)225 HYPRE_GMRESSetPrecond( HYPRE_Solver solver,
226 HYPRE_PtrToSolverFcn precond,
227 HYPRE_PtrToSolverFcn precond_setup,
228 HYPRE_Solver precond_solver )
229 {
230 return( hypre_GMRESSetPrecond( (void *) solver,
231 (HYPRE_Int (*)(void*, void*, void*, void*))precond,
232 (HYPRE_Int (*)(void*, void*, void*, void*))precond_setup,
233 (void *) precond_solver ) );
234 }
235
236 /*--------------------------------------------------------------------------
237 * HYPRE_GMRESGetPrecond
238 *--------------------------------------------------------------------------*/
239
240 HYPRE_Int
HYPRE_GMRESGetPrecond(HYPRE_Solver solver,HYPRE_Solver * precond_data_ptr)241 HYPRE_GMRESGetPrecond( HYPRE_Solver solver,
242 HYPRE_Solver *precond_data_ptr )
243 {
244 return( hypre_GMRESGetPrecond( (void *) solver,
245 (HYPRE_Solver *) precond_data_ptr ) );
246 }
247
248 /*--------------------------------------------------------------------------
249 * HYPRE_GMRESSetPrintLevel, HYPRE_GMRESGetPrintLevel
250 *--------------------------------------------------------------------------*/
251
252 HYPRE_Int
HYPRE_GMRESSetPrintLevel(HYPRE_Solver solver,HYPRE_Int level)253 HYPRE_GMRESSetPrintLevel( HYPRE_Solver solver,
254 HYPRE_Int level )
255 {
256 return( hypre_GMRESSetPrintLevel( (void *) solver, level ) );
257 }
258
259 HYPRE_Int
HYPRE_GMRESGetPrintLevel(HYPRE_Solver solver,HYPRE_Int * level)260 HYPRE_GMRESGetPrintLevel( HYPRE_Solver solver,
261 HYPRE_Int * level )
262 {
263 return( hypre_GMRESGetPrintLevel( (void *) solver, level ) );
264 }
265
266 /*--------------------------------------------------------------------------
267 * HYPRE_GMRESSetLogging, HYPRE_GMRESGetLogging
268 *--------------------------------------------------------------------------*/
269
270 HYPRE_Int
HYPRE_GMRESSetLogging(HYPRE_Solver solver,HYPRE_Int level)271 HYPRE_GMRESSetLogging( HYPRE_Solver solver,
272 HYPRE_Int level )
273 {
274 return( hypre_GMRESSetLogging( (void *) solver, level ) );
275 }
276
277 HYPRE_Int
HYPRE_GMRESGetLogging(HYPRE_Solver solver,HYPRE_Int * level)278 HYPRE_GMRESGetLogging( HYPRE_Solver solver,
279 HYPRE_Int * level )
280 {
281 return( hypre_GMRESGetLogging( (void *) solver, level ) );
282 }
283
284 /*--------------------------------------------------------------------------
285 * HYPRE_GMRESGetNumIterations
286 *--------------------------------------------------------------------------*/
287
288 HYPRE_Int
HYPRE_GMRESGetNumIterations(HYPRE_Solver solver,HYPRE_Int * num_iterations)289 HYPRE_GMRESGetNumIterations( HYPRE_Solver solver,
290 HYPRE_Int *num_iterations )
291 {
292 return( hypre_GMRESGetNumIterations( (void *) solver, num_iterations ) );
293 }
294
295 /*--------------------------------------------------------------------------
296 * HYPRE_GMRESGetConverged
297 *--------------------------------------------------------------------------*/
298
299 HYPRE_Int
HYPRE_GMRESGetConverged(HYPRE_Solver solver,HYPRE_Int * converged)300 HYPRE_GMRESGetConverged( HYPRE_Solver solver,
301 HYPRE_Int *converged )
302 {
303 return( hypre_GMRESGetConverged( (void *) solver, converged ) );
304 }
305
306 /*--------------------------------------------------------------------------
307 * HYPRE_GMRESGetFinalRelativeResidualNorm
308 *--------------------------------------------------------------------------*/
309
310 HYPRE_Int
HYPRE_GMRESGetFinalRelativeResidualNorm(HYPRE_Solver solver,HYPRE_Real * norm)311 HYPRE_GMRESGetFinalRelativeResidualNorm( HYPRE_Solver solver,
312 HYPRE_Real *norm )
313 {
314 return( hypre_GMRESGetFinalRelativeResidualNorm( (void *) solver, norm ) );
315 }
316
317 /*--------------------------------------------------------------------------
318 * HYPRE_GMRESGetResidual
319 *--------------------------------------------------------------------------*/
320
HYPRE_GMRESGetResidual(HYPRE_Solver solver,void * residual)321 HYPRE_Int HYPRE_GMRESGetResidual( HYPRE_Solver solver, void *residual )
322 {
323 /* returns a pointer to the residual vector */
324 return hypre_GMRESGetResidual( (void *) solver, (void **) residual );
325 }
326
327