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