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