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_BiCGSTAB interface
11  *
12  *****************************************************************************/
13 #include "krylov.h"
14 
15 /*--------------------------------------------------------------------------
16  * HYPRE_BiCGSTABCreate does not exist.  Call the appropriate function which
17  * also specifies the vector type, e.g. HYPRE_ParCSRBiCGSTABCreate
18  *--------------------------------------------------------------------------*/
19 
20 /*--------------------------------------------------------------------------
21  * HYPRE_BiCGSTABDestroy
22  *--------------------------------------------------------------------------*/
23 
24 HYPRE_Int
HYPRE_BiCGSTABDestroy(HYPRE_Solver solver)25 HYPRE_BiCGSTABDestroy( HYPRE_Solver solver )
26 {
27    return( hypre_BiCGSTABDestroy( (void *) solver ) );
28 }
29 
30 /*--------------------------------------------------------------------------
31  * HYPRE_BiCGSTABSetup
32  *--------------------------------------------------------------------------*/
33 
34 HYPRE_Int
HYPRE_BiCGSTABSetup(HYPRE_Solver solver,HYPRE_Matrix A,HYPRE_Vector b,HYPRE_Vector x)35 HYPRE_BiCGSTABSetup( HYPRE_Solver solver,
36                         HYPRE_Matrix A,
37                         HYPRE_Vector b,
38                         HYPRE_Vector x      )
39 {
40    return( hypre_BiCGSTABSetup( (void *) solver,
41                              (void *) A,
42                              (void *) b,
43                              (void *) x ) );
44 }
45 
46 /*--------------------------------------------------------------------------
47  * HYPRE_BiCGSTABSolve
48  *--------------------------------------------------------------------------*/
49 
50 HYPRE_Int
HYPRE_BiCGSTABSolve(HYPRE_Solver solver,HYPRE_Matrix A,HYPRE_Vector b,HYPRE_Vector x)51 HYPRE_BiCGSTABSolve( HYPRE_Solver solver,
52                         HYPRE_Matrix A,
53                         HYPRE_Vector b,
54                         HYPRE_Vector x      )
55 {
56    return( hypre_BiCGSTABSolve( (void *) solver,
57                              (void *) A,
58                              (void *) b,
59                              (void *) x ) );
60 }
61 
62 /*--------------------------------------------------------------------------
63  * HYPRE_BiCGSTABSetTol
64  *--------------------------------------------------------------------------*/
65 
66 HYPRE_Int
HYPRE_BiCGSTABSetTol(HYPRE_Solver solver,HYPRE_Real tol)67 HYPRE_BiCGSTABSetTol( HYPRE_Solver solver,
68                          HYPRE_Real         tol    )
69 {
70    return( hypre_BiCGSTABSetTol( (void *) solver, tol ) );
71 }
72 /*--------------------------------------------------------------------------
73  * HYPRE_BiCGSTABSetAbsoluteTol
74  *--------------------------------------------------------------------------*/
75 
76 HYPRE_Int
HYPRE_BiCGSTABSetAbsoluteTol(HYPRE_Solver solver,HYPRE_Real a_tol)77 HYPRE_BiCGSTABSetAbsoluteTol( HYPRE_Solver solver,
78                          HYPRE_Real         a_tol    )
79 {
80    return( hypre_BiCGSTABSetAbsoluteTol( (void *) solver, a_tol ) );
81 }
82 /*--------------------------------------------------------------------------
83  * HYPRE_BiCGSTABSetConvergenceFactorTol
84  *--------------------------------------------------------------------------*/
85 
86 HYPRE_Int
HYPRE_BiCGSTABSetConvergenceFactorTol(HYPRE_Solver solver,HYPRE_Real cf_tol)87 HYPRE_BiCGSTABSetConvergenceFactorTol( HYPRE_Solver solver,
88                          HYPRE_Real         cf_tol    )
89 {
90    return( hypre_BiCGSTABSetConvergenceFactorTol( (void *) solver, cf_tol ) );
91 }
92 
93 /*--------------------------------------------------------------------------
94  * HYPRE_BiCGSTABSetMinIter
95  *--------------------------------------------------------------------------*/
96 
97 HYPRE_Int
HYPRE_BiCGSTABSetMinIter(HYPRE_Solver solver,HYPRE_Int min_iter)98 HYPRE_BiCGSTABSetMinIter( HYPRE_Solver solver,
99                              HYPRE_Int          min_iter )
100 {
101    return( hypre_BiCGSTABSetMinIter( (void *) solver, min_iter ) );
102 }
103 
104 /*--------------------------------------------------------------------------
105  * HYPRE_BiCGSTABSetMaxIter
106  *--------------------------------------------------------------------------*/
107 
108 HYPRE_Int
HYPRE_BiCGSTABSetMaxIter(HYPRE_Solver solver,HYPRE_Int max_iter)109 HYPRE_BiCGSTABSetMaxIter( HYPRE_Solver solver,
110                              HYPRE_Int          max_iter )
111 {
112    return( hypre_BiCGSTABSetMaxIter( (void *) solver, max_iter ) );
113 }
114 
115 /*--------------------------------------------------------------------------
116  * HYPRE_BiCGSTABSetStopCrit
117  *--------------------------------------------------------------------------*/
118 
119 HYPRE_Int
HYPRE_BiCGSTABSetStopCrit(HYPRE_Solver solver,HYPRE_Int stop_crit)120 HYPRE_BiCGSTABSetStopCrit( HYPRE_Solver solver,
121                               HYPRE_Int          stop_crit )
122 {
123    return( hypre_BiCGSTABSetStopCrit( (void *) solver, stop_crit ) );
124 }
125 
126 /*--------------------------------------------------------------------------
127  * HYPRE_BiCGSTABSetPrecond
128  *--------------------------------------------------------------------------*/
129 
130 HYPRE_Int
HYPRE_BiCGSTABSetPrecond(HYPRE_Solver solver,HYPRE_PtrToSolverFcn precond,HYPRE_PtrToSolverFcn precond_setup,HYPRE_Solver precond_solver)131 HYPRE_BiCGSTABSetPrecond( HYPRE_Solver         solver,
132                                 HYPRE_PtrToSolverFcn precond,
133                                 HYPRE_PtrToSolverFcn precond_setup,
134                                 HYPRE_Solver         precond_solver )
135 {
136    return( hypre_BiCGSTABSetPrecond( (void *) solver,
137                                      (HYPRE_Int (*)(void*, void*, void*, void*))precond,
138 									 (HYPRE_Int (*)(void*, void*, void*, void*))precond_setup,
139                                      (void *) precond_solver ) );
140 }
141 
142 /*--------------------------------------------------------------------------
143  * HYPRE_BiCGSTABGetPrecond
144  *--------------------------------------------------------------------------*/
145 
146 HYPRE_Int
HYPRE_BiCGSTABGetPrecond(HYPRE_Solver solver,HYPRE_Solver * precond_data_ptr)147 HYPRE_BiCGSTABGetPrecond( HYPRE_Solver  solver,
148                              HYPRE_Solver *precond_data_ptr )
149 {
150    return( hypre_BiCGSTABGetPrecond( (void *)     solver,
151                                   (HYPRE_Solver *) precond_data_ptr ) );
152 }
153 
154 /*--------------------------------------------------------------------------
155  * HYPRE_BiCGSTABSetLogging
156  *--------------------------------------------------------------------------*/
157 
158 HYPRE_Int
HYPRE_BiCGSTABSetLogging(HYPRE_Solver solver,HYPRE_Int logging)159 HYPRE_BiCGSTABSetLogging( HYPRE_Solver solver,
160                              HYPRE_Int logging)
161 {
162    return( hypre_BiCGSTABSetLogging( (void *) solver, logging ) );
163 }
164 
165 /*--------------------------------------------------------------------------
166  * HYPRE_BiCGSTABSetPrintLevel
167  *--------------------------------------------------------------------------*/
168 
169 HYPRE_Int
HYPRE_BiCGSTABSetPrintLevel(HYPRE_Solver solver,HYPRE_Int print_level)170 HYPRE_BiCGSTABSetPrintLevel( HYPRE_Solver solver,
171                              HYPRE_Int print_level)
172 {
173    return( hypre_BiCGSTABSetPrintLevel( (void *) solver, print_level ) );
174 }
175 
176 /*--------------------------------------------------------------------------
177  * HYPRE_BiCGSTABGetNumIterations
178  *--------------------------------------------------------------------------*/
179 
180 HYPRE_Int
HYPRE_BiCGSTABGetNumIterations(HYPRE_Solver solver,HYPRE_Int * num_iterations)181 HYPRE_BiCGSTABGetNumIterations( HYPRE_Solver  solver,
182                                    HYPRE_Int                *num_iterations )
183 {
184    return( hypre_BiCGSTABGetNumIterations( (void *) solver, num_iterations ) );
185 }
186 
187 /*--------------------------------------------------------------------------
188  * HYPRE_BiCGSTABGetFinalRelativeResidualNorm
189  *--------------------------------------------------------------------------*/
190 
191 HYPRE_Int
HYPRE_BiCGSTABGetFinalRelativeResidualNorm(HYPRE_Solver solver,HYPRE_Real * norm)192 HYPRE_BiCGSTABGetFinalRelativeResidualNorm( HYPRE_Solver  solver,
193                                                HYPRE_Real         *norm   )
194 {
195    return( hypre_BiCGSTABGetFinalRelativeResidualNorm( (void *) solver, norm ) );
196 }
197 
198 /*--------------------------------------------------------------------------
199  * HYPRE_BiCGSTABGetResidual
200  *--------------------------------------------------------------------------*/
201 
202 HYPRE_Int
HYPRE_BiCGSTABGetResidual(HYPRE_Solver solver,void * residual)203 HYPRE_BiCGSTABGetResidual( HYPRE_Solver  solver,
204                             void             *residual  )
205 {
206    return( hypre_BiCGSTABGetResidual( (void *) solver, (void **) residual ) );
207 }
208