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