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_Schwarz Fortran interface
11  *
12  *****************************************************************************/
13 
14 #include "_hypre_parcsr_ls.h"
15 #include "fortran.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 /*--------------------------------------------------------------------------
22  * HYPRE_SchwarzCreate
23  *--------------------------------------------------------------------------*/
24 
25 void
hypre_F90_IFACE(hypre_schwarzcreate,HYPRE_SCHWARZCREATE)26 hypre_F90_IFACE(hypre_schwarzcreate, HYPRE_SCHWARZCREATE)
27    (hypre_F90_Obj *solver,
28     hypre_F90_Int *ierr)
29 {
30    *ierr = (hypre_F90_Int)
31       ( HYPRE_SchwarzCreate(
32            hypre_F90_PassObjRef (HYPRE_Solver, solver)));
33 }
34 
35 /*--------------------------------------------------------------------------
36  * HYPRE_SchwarzDestroy
37  *--------------------------------------------------------------------------*/
38 
39 void
hypre_F90_IFACE(hypre_schwarzdestroy,HYPRE_SCHWARZDESTROY)40 hypre_F90_IFACE(hypre_schwarzdestroy, HYPRE_SCHWARZDESTROY)
41    (hypre_F90_Obj *solver,
42     hypre_F90_Int *ierr)
43 {
44    *ierr = (hypre_F90_Int)
45       ( HYPRE_SchwarzDestroy(
46            hypre_F90_PassObj (HYPRE_Solver, solver) ));
47 }
48 
49 /*--------------------------------------------------------------------------
50  * HYPRE_SchwarzSetup
51  *--------------------------------------------------------------------------*/
52 
53 void
hypre_F90_IFACE(hypre_schwarzsetup,HYPRE_SCHWARZSETUP)54 hypre_F90_IFACE(hypre_schwarzsetup, HYPRE_SCHWARZSETUP)
55    (hypre_F90_Obj *solver,
56     hypre_F90_Obj *A,
57     hypre_F90_Obj *b,
58     hypre_F90_Obj *x,
59     hypre_F90_Int *ierr)
60 {
61    *ierr = (hypre_F90_Int)
62       ( HYPRE_SchwarzSetup(
63            hypre_F90_PassObj (HYPRE_Solver, solver),
64            hypre_F90_PassObj (HYPRE_ParCSRMatrix, A),
65            hypre_F90_PassObj (HYPRE_ParVector, b),
66            hypre_F90_PassObj (HYPRE_ParVector, x) ));
67 }
68 
69 /*--------------------------------------------------------------------------
70  * HYPRE_SchwarzSolve
71  *--------------------------------------------------------------------------*/
72 
73 void
hypre_F90_IFACE(hypre_schwarzsolve,HYPRE_SCHWARZSOLVE)74 hypre_F90_IFACE(hypre_schwarzsolve, HYPRE_SCHWARZSOLVE)
75    (hypre_F90_Obj *solver,
76     hypre_F90_Obj *A,
77     hypre_F90_Obj *b,
78     hypre_F90_Obj *x,
79     hypre_F90_Int *ierr)
80 {
81    *ierr = (hypre_F90_Int)
82       ( HYPRE_SchwarzSolve(
83            hypre_F90_PassObj (HYPRE_Solver, solver),
84            hypre_F90_PassObj (HYPRE_ParCSRMatrix, A),
85            hypre_F90_PassObj (HYPRE_ParVector, b),
86            hypre_F90_PassObj (HYPRE_ParVector, x) ));
87 }
88 
89 /*--------------------------------------------------------------------------
90  * HYPRE_SchwarzSetVariant
91  *--------------------------------------------------------------------------*/
92 void
hypre_F90_IFACE(hypre_schwarzsetvariant,HYPRE_SCHWARZSETVARIANT)93 hypre_F90_IFACE(hypre_schwarzsetvariant, HYPRE_SCHWARZSETVARIANT)
94    (hypre_F90_Obj *solver,
95     hypre_F90_Int *variant,
96     hypre_F90_Int *ierr)
97 {
98    *ierr = (hypre_F90_Int)
99       ( HYPRE_SchwarzSetVariant(
100            hypre_F90_PassObj (HYPRE_Solver, solver),
101            hypre_F90_PassInt (variant) ));
102 }
103 
104 /*--------------------------------------------------------------------------
105  * HYPRE_SchwarzSetOverlap
106  *--------------------------------------------------------------------------*/
107 
108 void
hypre_F90_IFACE(hypre_schwarzsetoverlap,HYPRE_SCHWARZSETOVERLAP)109 hypre_F90_IFACE(hypre_schwarzsetoverlap, HYPRE_SCHWARZSETOVERLAP)
110    (hypre_F90_Obj *solver,
111     hypre_F90_Int *overlap,
112     hypre_F90_Int *ierr)
113 {
114    *ierr = (hypre_F90_Int)
115       ( HYPRE_SchwarzSetOverlap(
116            hypre_F90_PassObj (HYPRE_Solver, solver),
117            hypre_F90_PassInt (overlap)));
118 }
119 
120 /*--------------------------------------------------------------------------
121  * HYPRE_SchwarzSetDomainType
122  *--------------------------------------------------------------------------*/
123 
124 void
hypre_F90_IFACE(hypre_schwarzsetdomaintype,HYPRE_SCHWARZSETDOMAINTYPE)125 hypre_F90_IFACE(hypre_schwarzsetdomaintype, HYPRE_SCHWARZSETDOMAINTYPE)
126    (hypre_F90_Obj *solver,
127     hypre_F90_Int *domain_type,
128     hypre_F90_Int *ierr)
129 {
130    *ierr = (hypre_F90_Int)
131       ( HYPRE_SchwarzSetDomainType(
132            hypre_F90_PassObj (HYPRE_Solver, solver),
133            hypre_F90_PassInt (domain_type) ));
134 }
135 
136 /*--------------------------------------------------------------------------
137  * HYPRE_SchwarzSetDomainStructure
138  *--------------------------------------------------------------------------*/
139 
140 void
hypre_F90_IFACE(hypre_schwarzsetdomainstructure,HYPRE_SCHWARZSETDOMAINSTRUCTURE)141 hypre_F90_IFACE(hypre_schwarzsetdomainstructure, HYPRE_SCHWARZSETDOMAINSTRUCTURE)
142    (hypre_F90_Obj *solver,
143     hypre_F90_Obj *domain_structure,
144     hypre_F90_Int *ierr)
145 {
146    *ierr = (hypre_F90_Int)
147       ( HYPRE_SchwarzSetDomainStructure(
148            hypre_F90_PassObj (HYPRE_Solver, solver),
149            hypre_F90_PassObj (HYPRE_CSRMatrix, domain_structure)));
150 }
151 
152 /*--------------------------------------------------------------------------
153  * HYPRE_SchwarzSetNumFunctions
154  *--------------------------------------------------------------------------*/
155 
156 void
hypre_F90_IFACE(hypre_schwarzsetnumfunctions,HYPRE_SCHWARZSETNUMFUNCTIONS)157 hypre_F90_IFACE(hypre_schwarzsetnumfunctions, HYPRE_SCHWARZSETNUMFUNCTIONS)
158    (hypre_F90_Obj *solver,
159     hypre_F90_Int *num_functions,
160     hypre_F90_Int *ierr)
161 {
162    *ierr = (hypre_F90_Int)
163       (HYPRE_SchwarzSetNumFunctions(
164           hypre_F90_PassObj (HYPRE_Solver, solver),
165           hypre_F90_PassInt (num_functions) ));
166 }
167 
168 /*--------------------------------------------------------------------------
169  * HYPRE_SchwarzSetRelaxWeight
170  *--------------------------------------------------------------------------*/
171 
172 void
hypre_F90_IFACE(hypre_schwarzsetrelaxweight,HYPRE_SCHWARZSETRELAXWEIGHT)173 hypre_F90_IFACE(hypre_schwarzsetrelaxweight, HYPRE_SCHWARZSETRELAXWEIGHT)
174    (hypre_F90_Obj *solver,
175     hypre_F90_Real *relax_weight,
176     hypre_F90_Int *ierr)
177 {
178    *ierr = (hypre_F90_Int)
179       (HYPRE_SchwarzSetRelaxWeight(
180           hypre_F90_PassObj (HYPRE_Solver, solver),
181           hypre_F90_PassReal (relax_weight)));
182 }
183 
184 /*--------------------------------------------------------------------------
185  * HYPRE_SchwarzSetDofFunc
186  *--------------------------------------------------------------------------*/
187 
188 void
hypre_F90_IFACE(hypre_schwarzsetdoffunc,HYPRE_SCHWARZSETDOFFUNC)189 hypre_F90_IFACE(hypre_schwarzsetdoffunc, HYPRE_SCHWARZSETDOFFUNC)
190    (hypre_F90_Obj *solver,
191     hypre_F90_IntArray *dof_func,
192     hypre_F90_Int *ierr)
193 {
194    *ierr = (hypre_F90_Int)
195       (HYPRE_SchwarzSetDofFunc(
196           hypre_F90_PassObj (HYPRE_Solver, solver),
197           hypre_F90_PassIntArray (dof_func)  ));
198 }
199 #ifdef __cplusplus
200 }
201 #endif
202