/src/parcsr_ls/F90_HYPRE_ams.c

https://github.com/hypre-space/hypre · C · 389 lines · 272 code · 46 blank · 71 comment · 0 complexity · 7d814e626303e3d4a51b07d3d52c77f6 MD5 · raw file

  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. * HYPRE_AMS Fortran interface
  10. *
  11. *****************************************************************************/
  12. #include "_hypre_parcsr_ls.h"
  13. #include "fortran.h"
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /*--------------------------------------------------------------------------
  18. * HYPRE_AMSCreate
  19. *--------------------------------------------------------------------------*/
  20. void
  21. hypre_F90_IFACE(hypre_amscreate, HYPRE_AMSCREATE)
  22. ( hypre_F90_Obj *solver,
  23. hypre_F90_Int *ierr)
  24. {
  25. *ierr = (hypre_F90_Int)
  26. ( HYPRE_AMSCreate(
  27. hypre_F90_PassObjRef (HYPRE_Solver, solver) ) );
  28. }
  29. /*--------------------------------------------------------------------------
  30. * HYPRE_AMSDestroy
  31. *--------------------------------------------------------------------------*/
  32. void
  33. hypre_F90_IFACE(hypre_amsdestroy, HYPRE_AMSDESTROY)
  34. ( hypre_F90_Obj *solver,
  35. hypre_F90_Int *ierr)
  36. {
  37. *ierr = (hypre_F90_Int)
  38. ( HYPRE_AMSDestroy(
  39. hypre_F90_PassObj (HYPRE_Solver, solver) ) );
  40. }
  41. /*--------------------------------------------------------------------------
  42. * HYPRE_AMSSetup
  43. *--------------------------------------------------------------------------*/
  44. void
  45. hypre_F90_IFACE(hypre_amssetup, HYPRE_AMSSETUP)
  46. ( hypre_F90_Obj *solver,
  47. hypre_F90_Obj *A,
  48. hypre_F90_Obj *b,
  49. hypre_F90_Obj *x,
  50. hypre_F90_Int *ierr)
  51. {
  52. *ierr = (hypre_F90_Int)
  53. ( HYPRE_AMSSetup(
  54. hypre_F90_PassObj (HYPRE_Solver, solver),
  55. hypre_F90_PassObj (HYPRE_ParCSRMatrix, A),
  56. hypre_F90_PassObj (HYPRE_ParVector, b),
  57. hypre_F90_PassObj (HYPRE_ParVector, x) ) );
  58. }
  59. /*--------------------------------------------------------------------------
  60. * HYPRE_AMSSolve
  61. *--------------------------------------------------------------------------*/
  62. void
  63. hypre_F90_IFACE(hypre_amssolve, HYPRE_AMSSOLVE)
  64. ( hypre_F90_Obj *solver,
  65. hypre_F90_Obj *A,
  66. hypre_F90_Obj *b,
  67. hypre_F90_Obj *x,
  68. hypre_F90_Int *ierr)
  69. {
  70. *ierr = (hypre_F90_Int)
  71. ( HYPRE_AMSSolve(
  72. hypre_F90_PassObj (HYPRE_Solver, solver),
  73. hypre_F90_PassObj (HYPRE_ParCSRMatrix, A),
  74. hypre_F90_PassObj (HYPRE_ParVector, b),
  75. hypre_F90_PassObj (HYPRE_ParVector, x) ) );
  76. }
  77. /*--------------------------------------------------------------------------
  78. * HYPRE_AMSSetDimension
  79. *--------------------------------------------------------------------------*/
  80. void
  81. hypre_F90_IFACE(hypre_amssetdimension, HYPRE_AMSSETDIMENSION)
  82. ( hypre_F90_Obj *solver,
  83. hypre_F90_Int *dim,
  84. hypre_F90_Int *ierr)
  85. {
  86. *ierr = (hypre_F90_Int)
  87. ( HYPRE_AMSSetDimension(
  88. hypre_F90_PassObj (HYPRE_Solver, solver),
  89. hypre_F90_PassInt (dim) ) );
  90. }
  91. /*--------------------------------------------------------------------------
  92. * HYPRE_AMSSetDiscreteGradient
  93. *--------------------------------------------------------------------------*/
  94. void
  95. hypre_F90_IFACE(hypre_amssetdiscretegradient, HYPRE_AMSSETDISCRETEGRADIENT)
  96. ( hypre_F90_Obj *solver,
  97. hypre_F90_Obj *G,
  98. hypre_F90_Int *ierr)
  99. {
  100. *ierr = (hypre_F90_Int)
  101. ( HYPRE_AMSSetDiscreteGradient(
  102. hypre_F90_PassObj (HYPRE_Solver, solver),
  103. hypre_F90_PassObj (HYPRE_ParCSRMatrix, G) ) );
  104. }
  105. /*--------------------------------------------------------------------------
  106. * HYPRE_AMSSetCoordinateVectors
  107. *--------------------------------------------------------------------------*/
  108. void
  109. hypre_F90_IFACE(hypre_amssetcoordinatevectors, HYPRE_AMSSETCOORDINATEVECTORS)
  110. ( hypre_F90_Obj *solver,
  111. hypre_F90_Obj *x,
  112. hypre_F90_Obj *y,
  113. hypre_F90_Obj *z,
  114. hypre_F90_Int *ierr)
  115. {
  116. *ierr = (hypre_F90_Int)
  117. ( HYPRE_AMSSetCoordinateVectors(
  118. hypre_F90_PassObj (HYPRE_Solver, solver),
  119. hypre_F90_PassObj (HYPRE_ParVector, x),
  120. hypre_F90_PassObj (HYPRE_ParVector, y),
  121. hypre_F90_PassObj (HYPRE_ParVector, z) ) );
  122. }
  123. /*--------------------------------------------------------------------------
  124. * HYPRE_AMSSetEdgeConstantVectors
  125. *--------------------------------------------------------------------------*/
  126. void
  127. hypre_F90_IFACE(hypre_amssetedgeconstantvectors, HYPRE_AMSSETEDGECONSTANTVECTORS)
  128. ( hypre_F90_Obj *solver,
  129. hypre_F90_Obj *Gx,
  130. hypre_F90_Obj *Gy,
  131. hypre_F90_Obj *Gz,
  132. hypre_F90_Int *ierr)
  133. {
  134. *ierr = (hypre_F90_Int)
  135. ( HYPRE_AMSSetEdgeConstantVectors(
  136. hypre_F90_PassObj (HYPRE_Solver, solver),
  137. hypre_F90_PassObj (HYPRE_ParVector, Gx),
  138. hypre_F90_PassObj (HYPRE_ParVector, Gy),
  139. hypre_F90_PassObj (HYPRE_ParVector, Gz) ) );
  140. }
  141. /*--------------------------------------------------------------------------
  142. * HYPRE_AMSSetAlphaPoissonMatrix
  143. *--------------------------------------------------------------------------*/
  144. void
  145. hypre_F90_IFACE(hypre_amssetalphapoissonmatrix, HYPRE_AMSSETALPHAPOISSONMATRIX)
  146. ( hypre_F90_Obj *solver,
  147. hypre_F90_Obj *A_alpha,
  148. hypre_F90_Int *ierr)
  149. {
  150. *ierr = (hypre_F90_Int)
  151. ( HYPRE_AMSSetAlphaPoissonMatrix(
  152. hypre_F90_PassObj (HYPRE_Solver, solver),
  153. hypre_F90_PassObj (HYPRE_ParCSRMatrix, A_alpha) ) );
  154. }
  155. /*--------------------------------------------------------------------------
  156. * HYPRE_AMSSetBetaPoissonMatrix
  157. *--------------------------------------------------------------------------*/
  158. void
  159. hypre_F90_IFACE(hypre_amssetbetapoissonmatrix, HYPRE_AMSSETBETAPOISSONMATRIX)
  160. ( hypre_F90_Obj *solver,
  161. hypre_F90_Obj *A_beta,
  162. hypre_F90_Int *ierr)
  163. {
  164. *ierr = (hypre_F90_Int)
  165. ( HYPRE_AMSSetBetaPoissonMatrix(
  166. hypre_F90_PassObj (HYPRE_Solver, solver),
  167. hypre_F90_PassObj (HYPRE_ParCSRMatrix, A_beta) ) );
  168. }
  169. /*--------------------------------------------------------------------------
  170. * HYPRE_AMSSetMaxIter
  171. *--------------------------------------------------------------------------*/
  172. void
  173. hypre_F90_IFACE(hypre_amssetmaxiter, HYPRE_AMSSETMAXITER)
  174. ( hypre_F90_Obj *solver,
  175. hypre_F90_Int *maxiter,
  176. hypre_F90_Int *ierr)
  177. {
  178. *ierr = (hypre_F90_Int)
  179. ( HYPRE_AMSSetMaxIter(
  180. hypre_F90_PassObj (HYPRE_Solver, solver),
  181. hypre_F90_PassInt (maxiter) ) );
  182. }
  183. /*--------------------------------------------------------------------------
  184. * HYPRE_AMSSetTol
  185. *--------------------------------------------------------------------------*/
  186. void
  187. hypre_F90_IFACE(hypre_amssettol, HYPRE_AMSSETTOL)
  188. ( hypre_F90_Obj *solver,
  189. hypre_F90_Real *tol,
  190. hypre_F90_Int *ierr)
  191. {
  192. *ierr = (hypre_F90_Int)
  193. ( HYPRE_AMSSetTol(
  194. hypre_F90_PassObj (HYPRE_Solver, solver),
  195. hypre_F90_PassReal (tol) ) );
  196. }
  197. /*--------------------------------------------------------------------------
  198. * HYPRE_AMSSetCycleType
  199. *--------------------------------------------------------------------------*/
  200. void
  201. hypre_F90_IFACE(hypre_amssetcycletype, HYPRE_AMSSETCYCLETYPE)
  202. ( hypre_F90_Obj *solver,
  203. hypre_F90_Int *cycle_type,
  204. hypre_F90_Int *ierr)
  205. {
  206. *ierr = (hypre_F90_Int)
  207. ( HYPRE_AMSSetCycleType(
  208. hypre_F90_PassObj (HYPRE_Solver, solver),
  209. hypre_F90_PassInt (cycle_type) ) );
  210. }
  211. /*--------------------------------------------------------------------------
  212. * HYPRE_AMSSetPrintLevel
  213. *--------------------------------------------------------------------------*/
  214. void
  215. hypre_F90_IFACE(hypre_amssetprintlevel, HYPRE_AMSSETPRINTLEVEL)
  216. ( hypre_F90_Obj *solver,
  217. hypre_F90_Int *print_level,
  218. hypre_F90_Int *ierr)
  219. {
  220. *ierr = (hypre_F90_Int)
  221. ( HYPRE_AMSSetPrintLevel(
  222. hypre_F90_PassObj (HYPRE_Solver, solver),
  223. hypre_F90_PassInt (print_level) ) );
  224. }
  225. /*--------------------------------------------------------------------------
  226. * HYPRE_AMSSetSmoothingOptions
  227. *--------------------------------------------------------------------------*/
  228. void
  229. hypre_F90_IFACE(hypre_amssetsmoothingoptions, HYPRE_AMSSETSMOOTHINGOPTIONS)
  230. ( hypre_F90_Obj *solver,
  231. hypre_F90_Int *relax_type,
  232. hypre_F90_Int *relax_times,
  233. hypre_F90_Real *relax_weight,
  234. hypre_F90_Real *omega,
  235. hypre_F90_Int *ierr)
  236. {
  237. *ierr = (hypre_F90_Int)
  238. ( HYPRE_AMSSetSmoothingOptions(
  239. hypre_F90_PassObj (HYPRE_Solver, solver),
  240. hypre_F90_PassInt (relax_type),
  241. hypre_F90_PassInt (relax_times),
  242. hypre_F90_PassReal (relax_weight),
  243. hypre_F90_PassReal (omega) ) );
  244. }
  245. /*--------------------------------------------------------------------------
  246. * HYPRE_AMSSetAlphaAMGOptions
  247. *--------------------------------------------------------------------------*/
  248. void
  249. hypre_F90_IFACE(hypre_amssetalphaamgoptions, HYPRE_AMSSETALPHAAMGOPTIONS)
  250. ( hypre_F90_Obj *solver,
  251. hypre_F90_Int *alpha_coarsen_type,
  252. hypre_F90_Int *alpha_agg_levels,
  253. hypre_F90_Int *alpha_relax_type,
  254. hypre_F90_Real *alpha_strength_threshold,
  255. hypre_F90_Int *alpha_interp_type,
  256. hypre_F90_Int *alpha_Pmax,
  257. hypre_F90_Int *ierr)
  258. {
  259. *ierr = (hypre_F90_Int)
  260. ( HYPRE_AMSSetAlphaAMGOptions(
  261. hypre_F90_PassObj (HYPRE_Solver, solver),
  262. hypre_F90_PassInt (alpha_coarsen_type),
  263. hypre_F90_PassInt (alpha_agg_levels),
  264. hypre_F90_PassInt (alpha_relax_type),
  265. hypre_F90_PassReal (alpha_strength_threshold),
  266. hypre_F90_PassInt (alpha_interp_type),
  267. hypre_F90_PassInt (alpha_Pmax) ) );
  268. }
  269. /*--------------------------------------------------------------------------
  270. * HYPRE_AMSSetBetaAMGOptions
  271. *--------------------------------------------------------------------------*/
  272. void
  273. hypre_F90_IFACE(hypre_amssetbetaamgoptions, HYPRE_AMSSETBETAAMGOPTIONS)
  274. ( hypre_F90_Obj *solver,
  275. hypre_F90_Int *beta_coarsen_type,
  276. hypre_F90_Int *beta_agg_levels,
  277. hypre_F90_Int *beta_relax_type,
  278. hypre_F90_Real *beta_strength_threshold,
  279. hypre_F90_Int *beta_interp_type,
  280. hypre_F90_Int *beta_Pmax,
  281. hypre_F90_Int *ierr)
  282. {
  283. *ierr = (hypre_F90_Int)
  284. ( HYPRE_AMSSetBetaAMGOptions(
  285. hypre_F90_PassObj (HYPRE_Solver, solver),
  286. hypre_F90_PassInt (beta_coarsen_type),
  287. hypre_F90_PassInt (beta_agg_levels),
  288. hypre_F90_PassInt (beta_relax_type),
  289. hypre_F90_PassReal (beta_strength_threshold),
  290. hypre_F90_PassInt (beta_interp_type),
  291. hypre_F90_PassInt (beta_Pmax) ) );
  292. }
  293. /*--------------------------------------------------------------------------
  294. * HYPRE_AMSGetNumIterations
  295. *--------------------------------------------------------------------------*/
  296. void
  297. hypre_F90_IFACE(hypre_amsgetnumiterations, HYPRE_AMSGETNUMITERATIONS)
  298. ( hypre_F90_Obj *solver,
  299. hypre_F90_Int *num_iterations,
  300. hypre_F90_Int *ierr)
  301. {
  302. *ierr = (hypre_F90_Int)
  303. ( HYPRE_AMSGetNumIterations(
  304. hypre_F90_PassObj (HYPRE_Solver, solver),
  305. hypre_F90_PassIntRef (num_iterations) ) );
  306. }
  307. /*--------------------------------------------------------------------------
  308. * HYPRE_AMSGetFinalRelativeResidualNorm
  309. *--------------------------------------------------------------------------*/
  310. void
  311. hypre_F90_IFACE(hypre_amsgetfinalrelativeresidualnorm, HYPRE_AMSGETFINALRELATIVERESIDUALNORM)
  312. ( hypre_F90_Obj *solver,
  313. hypre_F90_Real *rel_resid_norm,
  314. hypre_F90_Int *ierr)
  315. {
  316. *ierr = (hypre_F90_Int)
  317. ( HYPRE_AMSGetFinalRelativeResidualNorm(
  318. hypre_F90_PassObj (HYPRE_Solver, solver),
  319. hypre_F90_PassRealRef (rel_resid_norm) ) );
  320. }
  321. /*--------------------------------------------------------------------------
  322. * HYPRE_AMSConstructDiscreteGradient
  323. *--------------------------------------------------------------------------*/
  324. void
  325. hypre_F90_IFACE(hypre_amsconstructdiscretegradient, HYPRE_AMSCONSTRUCTDISCRETEGRADIENT)
  326. ( hypre_F90_Obj *A,
  327. hypre_F90_Obj *x_coord,
  328. hypre_F90_BigIntArray *edge_vertex,
  329. hypre_F90_Int *edge_orientation,
  330. hypre_F90_Obj *G,
  331. hypre_F90_Int *ierr)
  332. {
  333. *ierr = (hypre_F90_Int)
  334. ( HYPRE_AMSConstructDiscreteGradient(
  335. hypre_F90_PassObj (HYPRE_ParCSRMatrix, A),
  336. hypre_F90_PassObj (HYPRE_ParVector, x_coord),
  337. hypre_F90_PassBigIntArray (edge_vertex),
  338. hypre_F90_PassInt (edge_orientation),
  339. hypre_F90_PassObjRef (HYPRE_ParCSRMatrix, G) ) );
  340. }
  341. #ifdef __cplusplus
  342. }
  343. #endif