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 #include "_hypre_parcsr_ls.h"
9 
10 /*--------------------------------------------------------------------------
11  * HYPRE_ADSCreate
12  *--------------------------------------------------------------------------*/
13 
HYPRE_ADSCreate(HYPRE_Solver * solver)14 HYPRE_Int HYPRE_ADSCreate(HYPRE_Solver *solver)
15 {
16    *solver = (HYPRE_Solver) hypre_ADSCreate();
17    return hypre_error_flag;
18 }
19 
20 /*--------------------------------------------------------------------------
21  * HYPRE_ADSDestroy
22  *--------------------------------------------------------------------------*/
23 
HYPRE_ADSDestroy(HYPRE_Solver solver)24 HYPRE_Int HYPRE_ADSDestroy(HYPRE_Solver solver)
25 {
26    return hypre_ADSDestroy((void *) solver);
27 }
28 
29 /*--------------------------------------------------------------------------
30  * HYPRE_ADSSetup
31  *--------------------------------------------------------------------------*/
32 
HYPRE_ADSSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A,HYPRE_ParVector b,HYPRE_ParVector x)33 HYPRE_Int HYPRE_ADSSetup (HYPRE_Solver solver,
34                           HYPRE_ParCSRMatrix A,
35                           HYPRE_ParVector b,
36                           HYPRE_ParVector x)
37 {
38    return hypre_ADSSetup((void *) solver,
39                          (hypre_ParCSRMatrix *) A,
40                          (hypre_ParVector *) b,
41                          (hypre_ParVector *) x);
42 }
43 
44 /*--------------------------------------------------------------------------
45  * HYPRE_ADSSolve
46  *--------------------------------------------------------------------------*/
47 
HYPRE_ADSSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A,HYPRE_ParVector b,HYPRE_ParVector x)48 HYPRE_Int HYPRE_ADSSolve (HYPRE_Solver solver,
49                           HYPRE_ParCSRMatrix A,
50                           HYPRE_ParVector b,
51                           HYPRE_ParVector x)
52 {
53    return hypre_ADSSolve((void *) solver,
54                          (hypre_ParCSRMatrix *) A,
55                          (hypre_ParVector *) b,
56                          (hypre_ParVector *) x);
57 }
58 
59 
60 /*--------------------------------------------------------------------------
61  * HYPRE_ADSSetDiscreteCurl
62  *--------------------------------------------------------------------------*/
63 
HYPRE_ADSSetDiscreteCurl(HYPRE_Solver solver,HYPRE_ParCSRMatrix C)64 HYPRE_Int HYPRE_ADSSetDiscreteCurl(HYPRE_Solver solver,
65                                    HYPRE_ParCSRMatrix C)
66 {
67    return hypre_ADSSetDiscreteCurl((void *) solver,
68                                    (hypre_ParCSRMatrix *) C);
69 }
70 
71 /*--------------------------------------------------------------------------
72  * HYPRE_ADSSetDiscreteGradient
73  *--------------------------------------------------------------------------*/
74 
HYPRE_ADSSetDiscreteGradient(HYPRE_Solver solver,HYPRE_ParCSRMatrix G)75 HYPRE_Int HYPRE_ADSSetDiscreteGradient(HYPRE_Solver solver,
76                                        HYPRE_ParCSRMatrix G)
77 {
78    return hypre_ADSSetDiscreteGradient((void *) solver,
79                                        (hypre_ParCSRMatrix *) G);
80 }
81 
82 /*--------------------------------------------------------------------------
83  * HYPRE_ADSSetCoordinateVectors
84  *--------------------------------------------------------------------------*/
85 
HYPRE_ADSSetCoordinateVectors(HYPRE_Solver solver,HYPRE_ParVector x,HYPRE_ParVector y,HYPRE_ParVector z)86 HYPRE_Int HYPRE_ADSSetCoordinateVectors(HYPRE_Solver solver,
87                                         HYPRE_ParVector x,
88                                         HYPRE_ParVector y,
89                                         HYPRE_ParVector z)
90 {
91    return hypre_ADSSetCoordinateVectors((void *) solver,
92                                         (hypre_ParVector *) x,
93                                         (hypre_ParVector *) y,
94                                         (hypre_ParVector *) z);
95 }
96 
97 /*--------------------------------------------------------------------------
98  * HYPRE_ADSSetInterpolations
99  *--------------------------------------------------------------------------*/
100 
HYPRE_ADSSetInterpolations(HYPRE_Solver solver,HYPRE_ParCSRMatrix RT_Pi,HYPRE_ParCSRMatrix RT_Pix,HYPRE_ParCSRMatrix RT_Piy,HYPRE_ParCSRMatrix RT_Piz,HYPRE_ParCSRMatrix ND_Pi,HYPRE_ParCSRMatrix ND_Pix,HYPRE_ParCSRMatrix ND_Piy,HYPRE_ParCSRMatrix ND_Piz)101 HYPRE_Int HYPRE_ADSSetInterpolations(HYPRE_Solver solver,
102                                      HYPRE_ParCSRMatrix RT_Pi,
103                                      HYPRE_ParCSRMatrix RT_Pix,
104                                      HYPRE_ParCSRMatrix RT_Piy,
105                                      HYPRE_ParCSRMatrix RT_Piz,
106                                      HYPRE_ParCSRMatrix ND_Pi,
107                                      HYPRE_ParCSRMatrix ND_Pix,
108                                      HYPRE_ParCSRMatrix ND_Piy,
109                                      HYPRE_ParCSRMatrix ND_Piz)
110 {
111    return hypre_ADSSetInterpolations((void *) solver,
112                                      (hypre_ParCSRMatrix *) RT_Pi,
113                                      (hypre_ParCSRMatrix *) RT_Pix,
114                                      (hypre_ParCSRMatrix *) RT_Piy,
115                                      (hypre_ParCSRMatrix *) RT_Piz,
116                                      (hypre_ParCSRMatrix *) ND_Pi,
117                                      (hypre_ParCSRMatrix *) ND_Pix,
118                                      (hypre_ParCSRMatrix *) ND_Piy,
119                                      (hypre_ParCSRMatrix *) ND_Piz);
120 
121 }
122 
123 /*--------------------------------------------------------------------------
124  * HYPRE_ADSSetMaxIter
125  *--------------------------------------------------------------------------*/
126 
HYPRE_ADSSetMaxIter(HYPRE_Solver solver,HYPRE_Int maxit)127 HYPRE_Int HYPRE_ADSSetMaxIter(HYPRE_Solver solver,
128                               HYPRE_Int maxit)
129 {
130    return hypre_ADSSetMaxIter((void *) solver, maxit);
131 }
132 
133 /*--------------------------------------------------------------------------
134  * HYPRE_ADSSetTol
135  *--------------------------------------------------------------------------*/
136 
HYPRE_ADSSetTol(HYPRE_Solver solver,HYPRE_Real tol)137 HYPRE_Int HYPRE_ADSSetTol(HYPRE_Solver solver,
138                           HYPRE_Real tol)
139 {
140    return hypre_ADSSetTol((void *) solver, tol);
141 }
142 
143 /*--------------------------------------------------------------------------
144  * HYPRE_ADSSetCycleType
145  *--------------------------------------------------------------------------*/
146 
HYPRE_ADSSetCycleType(HYPRE_Solver solver,HYPRE_Int cycle_type)147 HYPRE_Int HYPRE_ADSSetCycleType(HYPRE_Solver solver,
148                                 HYPRE_Int cycle_type)
149 {
150    return hypre_ADSSetCycleType((void *) solver, cycle_type);
151 }
152 
153 /*--------------------------------------------------------------------------
154  * HYPRE_ADSSetPrintLevel
155  *--------------------------------------------------------------------------*/
156 
HYPRE_ADSSetPrintLevel(HYPRE_Solver solver,HYPRE_Int print_level)157 HYPRE_Int HYPRE_ADSSetPrintLevel(HYPRE_Solver solver,
158                                  HYPRE_Int print_level)
159 {
160    return hypre_ADSSetPrintLevel((void *) solver, print_level);
161 }
162 
163 /*--------------------------------------------------------------------------
164  * HYPRE_ADSSetSmoothingOptions
165  *--------------------------------------------------------------------------*/
166 
HYPRE_ADSSetSmoothingOptions(HYPRE_Solver solver,HYPRE_Int relax_type,HYPRE_Int relax_times,HYPRE_Real relax_weight,HYPRE_Real omega)167 HYPRE_Int HYPRE_ADSSetSmoothingOptions(HYPRE_Solver solver,
168                                        HYPRE_Int relax_type,
169                                        HYPRE_Int relax_times,
170                                        HYPRE_Real relax_weight,
171                                        HYPRE_Real omega)
172 {
173    return hypre_ADSSetSmoothingOptions((void *) solver,
174                                        relax_type,
175                                        relax_times,
176                                        relax_weight,
177                                        omega);
178 }
179 
180 /*--------------------------------------------------------------------------
181  * HYPRE_ADSSetChebyOptions
182  *--------------------------------------------------------------------------*/
183 
HYPRE_ADSSetChebySmoothingOptions(HYPRE_Solver solver,HYPRE_Int cheby_order,HYPRE_Int cheby_fraction)184 HYPRE_Int HYPRE_ADSSetChebySmoothingOptions(HYPRE_Solver solver,
185                                             HYPRE_Int cheby_order,
186                                             HYPRE_Int cheby_fraction)
187 {
188    return hypre_ADSSetChebySmoothingOptions((void *) solver,
189                                             cheby_order,
190                                             cheby_fraction);
191 }
192 
193 /*--------------------------------------------------------------------------
194  * HYPRE_ADSSetAMSOptions
195  *--------------------------------------------------------------------------*/
196 
HYPRE_ADSSetAMSOptions(HYPRE_Solver solver,HYPRE_Int cycle_type,HYPRE_Int coarsen_type,HYPRE_Int agg_levels,HYPRE_Int relax_type,HYPRE_Real strength_threshold,HYPRE_Int interp_type,HYPRE_Int Pmax)197 HYPRE_Int HYPRE_ADSSetAMSOptions(HYPRE_Solver solver,
198                                  HYPRE_Int cycle_type,
199                                  HYPRE_Int coarsen_type,
200                                  HYPRE_Int agg_levels,
201                                  HYPRE_Int relax_type,
202                                  HYPRE_Real strength_threshold,
203                                  HYPRE_Int interp_type,
204                                  HYPRE_Int Pmax)
205 {
206    return hypre_ADSSetAMSOptions((void *) solver,
207                                  cycle_type,
208                                  coarsen_type,
209                                  agg_levels,
210                                  relax_type,
211                                  strength_threshold,
212                                  interp_type,
213                                  Pmax);
214 }
215 
216 /*--------------------------------------------------------------------------
217  * HYPRE_ADSSetAlphaAMGOptions
218  *--------------------------------------------------------------------------*/
219 
HYPRE_ADSSetAMGOptions(HYPRE_Solver solver,HYPRE_Int coarsen_type,HYPRE_Int agg_levels,HYPRE_Int relax_type,HYPRE_Real strength_threshold,HYPRE_Int interp_type,HYPRE_Int Pmax)220 HYPRE_Int HYPRE_ADSSetAMGOptions(HYPRE_Solver solver,
221                                  HYPRE_Int coarsen_type,
222                                  HYPRE_Int agg_levels,
223                                  HYPRE_Int relax_type,
224                                  HYPRE_Real strength_threshold,
225                                  HYPRE_Int interp_type,
226                                  HYPRE_Int Pmax)
227 {
228    return hypre_ADSSetAMGOptions((void *) solver,
229                                  coarsen_type,
230                                  agg_levels,
231                                  relax_type,
232                                  strength_threshold,
233                                  interp_type,
234                                  Pmax);
235 }
236 
237 /*--------------------------------------------------------------------------
238  * HYPRE_ADSGetNumIterations
239  *--------------------------------------------------------------------------*/
240 
HYPRE_ADSGetNumIterations(HYPRE_Solver solver,HYPRE_Int * num_iterations)241 HYPRE_Int HYPRE_ADSGetNumIterations(HYPRE_Solver solver,
242                                     HYPRE_Int *num_iterations)
243 {
244    return hypre_ADSGetNumIterations((void *) solver,
245                                     num_iterations);
246 }
247 
248 /*--------------------------------------------------------------------------
249  * HYPRE_ADSGetFinalRelativeResidualNorm
250  *--------------------------------------------------------------------------*/
251 
HYPRE_ADSGetFinalRelativeResidualNorm(HYPRE_Solver solver,HYPRE_Real * rel_resid_norm)252 HYPRE_Int HYPRE_ADSGetFinalRelativeResidualNorm(HYPRE_Solver solver,
253                                                 HYPRE_Real *rel_resid_norm)
254 {
255    return hypre_ADSGetFinalRelativeResidualNorm((void *) solver,
256                                                 rel_resid_norm);
257 }
258