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_AMSCreate
12  *--------------------------------------------------------------------------*/
13 
HYPRE_AMSCreate(HYPRE_Solver * solver)14 HYPRE_Int HYPRE_AMSCreate(HYPRE_Solver *solver)
15 {
16    *solver = (HYPRE_Solver) hypre_AMSCreate();
17    return hypre_error_flag;
18 }
19 
20 /*--------------------------------------------------------------------------
21  * HYPRE_AMSDestroy
22  *--------------------------------------------------------------------------*/
23 
HYPRE_AMSDestroy(HYPRE_Solver solver)24 HYPRE_Int HYPRE_AMSDestroy(HYPRE_Solver solver)
25 {
26    return hypre_AMSDestroy((void *) solver);
27 }
28 
29 /*--------------------------------------------------------------------------
30  * HYPRE_AMSSetup
31  *--------------------------------------------------------------------------*/
32 
HYPRE_AMSSetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A,HYPRE_ParVector b,HYPRE_ParVector x)33 HYPRE_Int HYPRE_AMSSetup (HYPRE_Solver solver,
34                           HYPRE_ParCSRMatrix A,
35                           HYPRE_ParVector b,
36                           HYPRE_ParVector x)
37 {
38    return hypre_AMSSetup((void *) solver,
39                          (hypre_ParCSRMatrix *) A,
40                          (hypre_ParVector *) b,
41                          (hypre_ParVector *) x);
42 }
43 
44 /*--------------------------------------------------------------------------
45  * HYPRE_AMSSolve
46  *--------------------------------------------------------------------------*/
47 
HYPRE_AMSSolve(HYPRE_Solver solver,HYPRE_ParCSRMatrix A,HYPRE_ParVector b,HYPRE_ParVector x)48 HYPRE_Int HYPRE_AMSSolve (HYPRE_Solver solver,
49                           HYPRE_ParCSRMatrix A,
50                           HYPRE_ParVector b,
51                           HYPRE_ParVector x)
52 {
53    return hypre_AMSSolve((void *) solver,
54                          (hypre_ParCSRMatrix *) A,
55                          (hypre_ParVector *) b,
56                          (hypre_ParVector *) x);
57 }
58 
59 /*--------------------------------------------------------------------------
60  * HYPRE_AMSSetDimension
61  *--------------------------------------------------------------------------*/
62 
HYPRE_AMSSetDimension(HYPRE_Solver solver,HYPRE_Int dim)63 HYPRE_Int HYPRE_AMSSetDimension(HYPRE_Solver solver,
64                                 HYPRE_Int dim)
65 {
66    return hypre_AMSSetDimension((void *) solver, dim);
67 }
68 
69 /*--------------------------------------------------------------------------
70  * HYPRE_AMSSetDiscreteGradient
71  *--------------------------------------------------------------------------*/
72 
HYPRE_AMSSetDiscreteGradient(HYPRE_Solver solver,HYPRE_ParCSRMatrix G)73 HYPRE_Int HYPRE_AMSSetDiscreteGradient(HYPRE_Solver solver,
74                                        HYPRE_ParCSRMatrix G)
75 {
76    return hypre_AMSSetDiscreteGradient((void *) solver,
77                                        (hypre_ParCSRMatrix *) G);
78 }
79 
80 /*--------------------------------------------------------------------------
81  * HYPRE_AMSSetCoordinateVectors
82  *--------------------------------------------------------------------------*/
83 
HYPRE_AMSSetCoordinateVectors(HYPRE_Solver solver,HYPRE_ParVector x,HYPRE_ParVector y,HYPRE_ParVector z)84 HYPRE_Int HYPRE_AMSSetCoordinateVectors(HYPRE_Solver solver,
85                                         HYPRE_ParVector x,
86                                         HYPRE_ParVector y,
87                                         HYPRE_ParVector z)
88 {
89    return hypre_AMSSetCoordinateVectors((void *) solver,
90                                         (hypre_ParVector *) x,
91                                         (hypre_ParVector *) y,
92                                         (hypre_ParVector *) z);
93 }
94 
95 /*--------------------------------------------------------------------------
96  * HYPRE_AMSSetEdgeConstantVectors
97  *--------------------------------------------------------------------------*/
98 
HYPRE_AMSSetEdgeConstantVectors(HYPRE_Solver solver,HYPRE_ParVector Gx,HYPRE_ParVector Gy,HYPRE_ParVector Gz)99 HYPRE_Int HYPRE_AMSSetEdgeConstantVectors(HYPRE_Solver solver,
100                                           HYPRE_ParVector Gx,
101                                           HYPRE_ParVector Gy,
102                                           HYPRE_ParVector Gz)
103 {
104    return hypre_AMSSetEdgeConstantVectors((void *) solver,
105                                           (hypre_ParVector *) Gx,
106                                           (hypre_ParVector *) Gy,
107                                           (hypre_ParVector *) Gz);
108 }
109 
110 /*--------------------------------------------------------------------------
111  * HYPRE_AMSSetInterpolations
112  *--------------------------------------------------------------------------*/
113 
HYPRE_AMSSetInterpolations(HYPRE_Solver solver,HYPRE_ParCSRMatrix Pi,HYPRE_ParCSRMatrix Pix,HYPRE_ParCSRMatrix Piy,HYPRE_ParCSRMatrix Piz)114 HYPRE_Int HYPRE_AMSSetInterpolations(HYPRE_Solver solver,
115                                      HYPRE_ParCSRMatrix Pi,
116                                      HYPRE_ParCSRMatrix Pix,
117                                      HYPRE_ParCSRMatrix Piy,
118                                      HYPRE_ParCSRMatrix Piz)
119 {
120    return hypre_AMSSetInterpolations((void *) solver,
121                                      (hypre_ParCSRMatrix *) Pi,
122                                      (hypre_ParCSRMatrix *) Pix,
123                                      (hypre_ParCSRMatrix *) Piy,
124                                      (hypre_ParCSRMatrix *) Piz);
125 }
126 
127 /*--------------------------------------------------------------------------
128  * HYPRE_AMSSetAlphaPoissonMatrix
129  *--------------------------------------------------------------------------*/
130 
HYPRE_AMSSetAlphaPoissonMatrix(HYPRE_Solver solver,HYPRE_ParCSRMatrix A_alpha)131 HYPRE_Int HYPRE_AMSSetAlphaPoissonMatrix(HYPRE_Solver solver,
132                                          HYPRE_ParCSRMatrix A_alpha)
133 {
134    return hypre_AMSSetAlphaPoissonMatrix((void *) solver,
135                                          (hypre_ParCSRMatrix *) A_alpha);
136 }
137 
138 /*--------------------------------------------------------------------------
139  * HYPRE_AMSSetBetaPoissonMatrix
140  *--------------------------------------------------------------------------*/
141 
HYPRE_AMSSetBetaPoissonMatrix(HYPRE_Solver solver,HYPRE_ParCSRMatrix A_beta)142 HYPRE_Int HYPRE_AMSSetBetaPoissonMatrix(HYPRE_Solver solver,
143                                         HYPRE_ParCSRMatrix A_beta)
144 {
145    return hypre_AMSSetBetaPoissonMatrix((void *) solver,
146                                         (hypre_ParCSRMatrix *) A_beta);
147 }
148 
149 /*--------------------------------------------------------------------------
150  * HYPRE_AMSSetSetInteriorNodes
151  *--------------------------------------------------------------------------*/
152 
HYPRE_AMSSetInteriorNodes(HYPRE_Solver solver,HYPRE_ParVector interior_nodes)153 HYPRE_Int HYPRE_AMSSetInteriorNodes(HYPRE_Solver solver,
154                                     HYPRE_ParVector interior_nodes)
155 {
156    return hypre_AMSSetInteriorNodes((void *) solver,
157                                     (hypre_ParVector *) interior_nodes);
158 }
159 
160 /*--------------------------------------------------------------------------
161  * HYPRE_AMSSetSetProjectionFrequency
162  *--------------------------------------------------------------------------*/
163 
HYPRE_AMSSetProjectionFrequency(HYPRE_Solver solver,HYPRE_Int projection_frequency)164 HYPRE_Int HYPRE_AMSSetProjectionFrequency(HYPRE_Solver solver,
165                                           HYPRE_Int projection_frequency)
166 {
167    return hypre_AMSSetProjectionFrequency((void *) solver,
168                                           projection_frequency);
169 }
170 
171 /*--------------------------------------------------------------------------
172  * HYPRE_AMSSetMaxIter
173  *--------------------------------------------------------------------------*/
174 
HYPRE_AMSSetMaxIter(HYPRE_Solver solver,HYPRE_Int maxit)175 HYPRE_Int HYPRE_AMSSetMaxIter(HYPRE_Solver solver,
176                               HYPRE_Int maxit)
177 {
178    return hypre_AMSSetMaxIter((void *) solver, maxit);
179 }
180 
181 /*--------------------------------------------------------------------------
182  * HYPRE_AMSSetTol
183  *--------------------------------------------------------------------------*/
184 
HYPRE_AMSSetTol(HYPRE_Solver solver,HYPRE_Real tol)185 HYPRE_Int HYPRE_AMSSetTol(HYPRE_Solver solver,
186                           HYPRE_Real tol)
187 {
188    return hypre_AMSSetTol((void *) solver, tol);
189 }
190 
191 /*--------------------------------------------------------------------------
192  * HYPRE_AMSSetCycleType
193  *--------------------------------------------------------------------------*/
194 
HYPRE_AMSSetCycleType(HYPRE_Solver solver,HYPRE_Int cycle_type)195 HYPRE_Int HYPRE_AMSSetCycleType(HYPRE_Solver solver,
196                                 HYPRE_Int cycle_type)
197 {
198    return hypre_AMSSetCycleType((void *) solver, cycle_type);
199 }
200 
201 /*--------------------------------------------------------------------------
202  * HYPRE_AMSSetPrintLevel
203  *--------------------------------------------------------------------------*/
204 
HYPRE_AMSSetPrintLevel(HYPRE_Solver solver,HYPRE_Int print_level)205 HYPRE_Int HYPRE_AMSSetPrintLevel(HYPRE_Solver solver,
206                                  HYPRE_Int print_level)
207 {
208    return hypre_AMSSetPrintLevel((void *) solver, print_level);
209 }
210 
211 /*--------------------------------------------------------------------------
212  * HYPRE_AMSSetSmoothingOptions
213  *--------------------------------------------------------------------------*/
214 
HYPRE_AMSSetSmoothingOptions(HYPRE_Solver solver,HYPRE_Int relax_type,HYPRE_Int relax_times,HYPRE_Real relax_weight,HYPRE_Real omega)215 HYPRE_Int HYPRE_AMSSetSmoothingOptions(HYPRE_Solver solver,
216                                        HYPRE_Int relax_type,
217                                        HYPRE_Int relax_times,
218                                        HYPRE_Real relax_weight,
219                                        HYPRE_Real omega)
220 {
221    return hypre_AMSSetSmoothingOptions((void *) solver,
222                                        relax_type,
223                                        relax_times,
224                                        relax_weight,
225                                        omega);
226 }
227 
228 /*--------------------------------------------------------------------------
229  * HYPRE_AMSSetChebyOptions
230  *--------------------------------------------------------------------------*/
231 
HYPRE_AMSSetChebySmoothingOptions(HYPRE_Solver solver,HYPRE_Int cheby_order,HYPRE_Int cheby_fraction)232 HYPRE_Int HYPRE_AMSSetChebySmoothingOptions(HYPRE_Solver solver,
233                                             HYPRE_Int cheby_order,
234                                             HYPRE_Int cheby_fraction)
235 {
236    return hypre_AMSSetChebySmoothingOptions((void *) solver,
237                                             cheby_order,
238                                             cheby_fraction);
239 }
240 
241 /*--------------------------------------------------------------------------
242  * HYPRE_AMSSetAlphaAMGOptions
243  *--------------------------------------------------------------------------*/
244 
HYPRE_AMSSetAlphaAMGOptions(HYPRE_Solver solver,HYPRE_Int alpha_coarsen_type,HYPRE_Int alpha_agg_levels,HYPRE_Int alpha_relax_type,HYPRE_Real alpha_strength_threshold,HYPRE_Int alpha_interp_type,HYPRE_Int alpha_Pmax)245 HYPRE_Int HYPRE_AMSSetAlphaAMGOptions(HYPRE_Solver solver,
246                                       HYPRE_Int alpha_coarsen_type,
247                                       HYPRE_Int alpha_agg_levels,
248                                       HYPRE_Int alpha_relax_type,
249                                       HYPRE_Real alpha_strength_threshold,
250                                       HYPRE_Int alpha_interp_type,
251                                       HYPRE_Int alpha_Pmax)
252 {
253    return hypre_AMSSetAlphaAMGOptions((void *) solver,
254                                       alpha_coarsen_type,
255                                       alpha_agg_levels,
256                                       alpha_relax_type,
257                                       alpha_strength_threshold,
258                                       alpha_interp_type,
259                                       alpha_Pmax);
260 }
261 
262 /*--------------------------------------------------------------------------
263  * HYPRE_AMSSetAlphaAMGCoarseRelaxType
264  *--------------------------------------------------------------------------*/
265 
HYPRE_AMSSetAlphaAMGCoarseRelaxType(HYPRE_Solver solver,HYPRE_Int alpha_coarse_relax_type)266 HYPRE_Int HYPRE_AMSSetAlphaAMGCoarseRelaxType(HYPRE_Solver solver,
267                                               HYPRE_Int alpha_coarse_relax_type)
268 {
269    return hypre_AMSSetAlphaAMGCoarseRelaxType((void *) solver,
270                                               alpha_coarse_relax_type);
271 }
272 
273 /*--------------------------------------------------------------------------
274  * HYPRE_AMSSetBetaAMGOptions
275  *--------------------------------------------------------------------------*/
276 
HYPRE_AMSSetBetaAMGOptions(HYPRE_Solver solver,HYPRE_Int beta_coarsen_type,HYPRE_Int beta_agg_levels,HYPRE_Int beta_relax_type,HYPRE_Real beta_strength_threshold,HYPRE_Int beta_interp_type,HYPRE_Int beta_Pmax)277 HYPRE_Int HYPRE_AMSSetBetaAMGOptions(HYPRE_Solver solver,
278                                      HYPRE_Int beta_coarsen_type,
279                                      HYPRE_Int beta_agg_levels,
280                                      HYPRE_Int beta_relax_type,
281                                      HYPRE_Real beta_strength_threshold,
282                                      HYPRE_Int beta_interp_type,
283                                      HYPRE_Int beta_Pmax)
284 {
285    return hypre_AMSSetBetaAMGOptions((void *) solver,
286                                      beta_coarsen_type,
287                                      beta_agg_levels,
288                                      beta_relax_type,
289                                      beta_strength_threshold,
290                                      beta_interp_type,
291                                      beta_Pmax);
292 }
293 
294 /*--------------------------------------------------------------------------
295  * HYPRE_AMSSetBetaAMGCoarseRelaxType
296  *--------------------------------------------------------------------------*/
297 
HYPRE_AMSSetBetaAMGCoarseRelaxType(HYPRE_Solver solver,HYPRE_Int beta_coarse_relax_type)298 HYPRE_Int HYPRE_AMSSetBetaAMGCoarseRelaxType(HYPRE_Solver solver,
299                                              HYPRE_Int beta_coarse_relax_type)
300 {
301    return hypre_AMSSetBetaAMGCoarseRelaxType((void *) solver,
302                                              beta_coarse_relax_type);
303 }
304 
305 /*--------------------------------------------------------------------------
306  * HYPRE_AMSGetNumIterations
307  *--------------------------------------------------------------------------*/
308 
HYPRE_AMSGetNumIterations(HYPRE_Solver solver,HYPRE_Int * num_iterations)309 HYPRE_Int HYPRE_AMSGetNumIterations(HYPRE_Solver solver,
310                                     HYPRE_Int *num_iterations)
311 {
312    return hypre_AMSGetNumIterations((void *) solver,
313                                     num_iterations);
314 }
315 
316 /*--------------------------------------------------------------------------
317  * HYPRE_AMSGetFinalRelativeResidualNorm
318  *--------------------------------------------------------------------------*/
319 
HYPRE_AMSGetFinalRelativeResidualNorm(HYPRE_Solver solver,HYPRE_Real * rel_resid_norm)320 HYPRE_Int HYPRE_AMSGetFinalRelativeResidualNorm(HYPRE_Solver solver,
321                                                 HYPRE_Real *rel_resid_norm)
322 {
323    return hypre_AMSGetFinalRelativeResidualNorm((void *) solver,
324                                                 rel_resid_norm);
325 }
326 
327 /*--------------------------------------------------------------------------
328  * HYPRE_AMSProjectOutGradients
329  *--------------------------------------------------------------------------*/
330 
HYPRE_AMSProjectOutGradients(HYPRE_Solver solver,HYPRE_ParVector x)331 HYPRE_Int HYPRE_AMSProjectOutGradients(HYPRE_Solver solver,
332                                        HYPRE_ParVector x)
333 {
334    return hypre_AMSProjectOutGradients((void *) solver,
335                                        (hypre_ParVector *) x);
336 }
337 
338 /*--------------------------------------------------------------------------
339  * HYPRE_AMSConstructDiscreteGradient
340  *--------------------------------------------------------------------------*/
341 
HYPRE_AMSConstructDiscreteGradient(HYPRE_ParCSRMatrix A,HYPRE_ParVector x_coord,HYPRE_BigInt * edge_vertex,HYPRE_Int edge_orientation,HYPRE_ParCSRMatrix * G)342 HYPRE_Int HYPRE_AMSConstructDiscreteGradient(HYPRE_ParCSRMatrix A,
343                                              HYPRE_ParVector x_coord,
344                                              HYPRE_BigInt *edge_vertex,
345                                              HYPRE_Int edge_orientation,
346                                              HYPRE_ParCSRMatrix *G)
347 {
348    return hypre_AMSConstructDiscreteGradient((hypre_ParCSRMatrix *) A,
349                                              (hypre_ParVector *) x_coord,
350                                              edge_vertex,
351                                              edge_orientation,
352                                              (hypre_ParCSRMatrix **) G);
353 }
354 
355 /*--------------------------------------------------------------------------
356  * HYPRE_AMSFEISetup
357  *--------------------------------------------------------------------------*/
358 
HYPRE_AMSFEISetup(HYPRE_Solver solver,HYPRE_ParCSRMatrix A,HYPRE_ParVector b,HYPRE_ParVector x,HYPRE_BigInt * EdgeNodeList_,HYPRE_BigInt * NodeNumbers_,HYPRE_Int numEdges_,HYPRE_Int numLocalNodes_,HYPRE_Int numNodes_,HYPRE_Real * NodalCoord_)359 HYPRE_Int HYPRE_AMSFEISetup(HYPRE_Solver solver,
360                             HYPRE_ParCSRMatrix A,
361                             HYPRE_ParVector b,
362                             HYPRE_ParVector x,
363                             HYPRE_BigInt *EdgeNodeList_,
364                             HYPRE_BigInt *NodeNumbers_,
365                             HYPRE_Int numEdges_,
366                             HYPRE_Int numLocalNodes_,
367                             HYPRE_Int numNodes_,
368                             HYPRE_Real *NodalCoord_)
369 {
370    return hypre_AMSFEISetup((void *) solver,
371                             (hypre_ParCSRMatrix *) A,
372                             (hypre_ParVector *) b,
373                             (hypre_ParVector *) x,
374                             numNodes_,
375                             numLocalNodes_,
376                             NodeNumbers_,
377                             NodalCoord_,
378                             numEdges_,
379                             EdgeNodeList_);
380 }
381 
382 /*--------------------------------------------------------------------------
383  * HYPRE_AMSFEIDestroy
384  *--------------------------------------------------------------------------*/
385 
HYPRE_AMSFEIDestroy(HYPRE_Solver solver)386 HYPRE_Int HYPRE_AMSFEIDestroy(HYPRE_Solver solver)
387 {
388    return hypre_AMSFEIDestroy((void *) solver);
389 }
390