mkl_cluster_sparse_solver.f90 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. !===============================================================================
  2. ! Copyright 1999-2022 Intel Corporation.
  3. !
  4. ! This software and the related documents are Intel copyrighted materials, and
  5. ! your use of them is governed by the express license under which they were
  6. ! provided to you (License). Unless the License provides otherwise, you may not
  7. ! use, modify, copy, publish, distribute, disclose or transmit this software or
  8. ! the related documents without Intel's prior written permission.
  9. !
  10. ! This software and the related documents are provided as is, with no express
  11. ! or implied warranties, other than those that are expressly stated in the
  12. ! License.
  13. !===============================================================================
  14. ! Content:
  15. ! Intel(R) oneAPI Math Kernel Library (oneMKL) Fortran 90 interface for
  16. ! Cluster Sparse Solver
  17. !*******************************************************************************
  18. !DEC$ IF .NOT. DEFINED( __MKL_CLUSTER_SPARSE_SOLVER_F90 )
  19. !DEC$ DEFINE __MKL_CLUSTER_SPARSE_SOLVER_F90
  20. MODULE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  21. TYPE MKL_CLUSTER_SPARSE_SOLVER_HANDLE; INTEGER(KIND=8) DUMMY; END TYPE
  22. END MODULE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  23. MODULE MKL_CLUSTER_SPARSE_SOLVER
  24. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  25. !
  26. ! Subroutine prototype for CLUSTER_SPARSE_SOLVER
  27. !
  28. INTERFACE CLUSTER_SPARSE_SOLVER
  29. SUBROUTINE CLUSTER_SPARSE_SOLVER_D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  30. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  31. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  32. INTEGER, INTENT(IN) :: MAXFCT
  33. INTEGER, INTENT(IN) :: MNUM
  34. INTEGER, INTENT(IN) :: MTYPE
  35. INTEGER, INTENT(IN) :: PHASE
  36. INTEGER, INTENT(IN) :: N
  37. INTEGER, INTENT(IN) :: IA(*)
  38. INTEGER, INTENT(IN) :: JA(*)
  39. INTEGER, INTENT(IN) :: PERM(*)
  40. INTEGER, INTENT(IN) :: NRHS
  41. INTEGER, INTENT(INOUT) :: IPARM(*)
  42. INTEGER, INTENT(IN) :: MSGLVL
  43. INTEGER, INTENT(OUT) :: ERROR
  44. REAL(KIND=8), INTENT(IN) :: A(*)
  45. REAL(KIND=8), INTENT(INOUT) :: B(*)
  46. REAL(KIND=8), INTENT(OUT) :: X(*)
  47. INTEGER*4, INTENT(IN) :: COMM
  48. END SUBROUTINE CLUSTER_SPARSE_SOLVER_D
  49. SUBROUTINE CLUSTER_SPARSE_SOLVER_S(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  50. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  51. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  52. INTEGER, INTENT(IN) :: MAXFCT
  53. INTEGER, INTENT(IN) :: MNUM
  54. INTEGER, INTENT(IN) :: MTYPE
  55. INTEGER, INTENT(IN) :: PHASE
  56. INTEGER, INTENT(IN) :: N
  57. INTEGER, INTENT(IN) :: IA(*)
  58. INTEGER, INTENT(IN) :: JA(*)
  59. INTEGER, INTENT(IN) :: PERM(*)
  60. INTEGER, INTENT(IN) :: NRHS
  61. INTEGER, INTENT(INOUT) :: IPARM(*)
  62. INTEGER, INTENT(IN) :: MSGLVL
  63. INTEGER, INTENT(OUT) :: ERROR
  64. REAL(KIND=4), INTENT(IN) :: A(*)
  65. REAL(KIND=4), INTENT(INOUT) :: B(*)
  66. REAL(KIND=4), INTENT(OUT) :: X(*)
  67. INTEGER*4, INTENT(IN) :: COMM
  68. END SUBROUTINE CLUSTER_SPARSE_SOLVER_S
  69. SUBROUTINE CLUSTER_SPARSE_SOLVER_DC(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  70. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  71. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  72. INTEGER, INTENT(IN) :: MAXFCT
  73. INTEGER, INTENT(IN) :: MNUM
  74. INTEGER, INTENT(IN) :: MTYPE
  75. INTEGER, INTENT(IN) :: PHASE
  76. INTEGER, INTENT(IN) :: N
  77. INTEGER, INTENT(IN) :: IA(*)
  78. INTEGER, INTENT(IN) :: JA(*)
  79. INTEGER, INTENT(IN) :: PERM(*)
  80. INTEGER, INTENT(IN) :: NRHS
  81. INTEGER, INTENT(INOUT) :: IPARM(*)
  82. INTEGER, INTENT(IN) :: MSGLVL
  83. INTEGER, INTENT(OUT) :: ERROR
  84. COMPLEX(KIND=8), INTENT(IN) :: A(*)
  85. COMPLEX(KIND=8), INTENT(INOUT) :: B(*)
  86. COMPLEX(KIND=8), INTENT(OUT) :: X(*)
  87. INTEGER*4, INTENT(IN) :: COMM
  88. END SUBROUTINE CLUSTER_SPARSE_SOLVER_DC
  89. SUBROUTINE CLUSTER_SPARSE_SOLVER_SC(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  90. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  91. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  92. INTEGER, INTENT(IN) :: MAXFCT
  93. INTEGER, INTENT(IN) :: MNUM
  94. INTEGER, INTENT(IN) :: MTYPE
  95. INTEGER, INTENT(IN) :: PHASE
  96. INTEGER, INTENT(IN) :: N
  97. INTEGER, INTENT(IN) :: IA(*)
  98. INTEGER, INTENT(IN) :: JA(*)
  99. INTEGER, INTENT(IN) :: PERM(*)
  100. INTEGER, INTENT(IN) :: NRHS
  101. INTEGER, INTENT(INOUT) :: IPARM(*)
  102. INTEGER, INTENT(IN) :: MSGLVL
  103. INTEGER, INTENT(OUT) :: ERROR
  104. COMPLEX(KIND=4), INTENT(IN) :: A(*)
  105. COMPLEX(KIND=4), INTENT(INOUT) :: B(*)
  106. COMPLEX(KIND=4), INTENT(OUT) :: X(*)
  107. INTEGER*4, INTENT(IN) :: COMM
  108. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SC
  109. SUBROUTINE CLUSTER_SPARSE_SOLVER_D_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  110. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  111. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  112. INTEGER, INTENT(IN) :: MAXFCT
  113. INTEGER, INTENT(IN) :: MNUM
  114. INTEGER, INTENT(IN) :: MTYPE
  115. INTEGER, INTENT(IN) :: PHASE
  116. INTEGER, INTENT(IN) :: N
  117. INTEGER, INTENT(IN) :: IA(*)
  118. INTEGER, INTENT(IN) :: JA(*)
  119. INTEGER, INTENT(IN) :: PERM(*)
  120. INTEGER, INTENT(IN) :: NRHS
  121. INTEGER, INTENT(INOUT) :: IPARM(*)
  122. INTEGER, INTENT(IN) :: MSGLVL
  123. INTEGER, INTENT(OUT) :: ERROR
  124. REAL(KIND=8), INTENT(IN) :: A(*)
  125. REAL(KIND=8), INTENT(INOUT) :: B(N,*)
  126. REAL(KIND=8), INTENT(OUT) :: X(N,*)
  127. INTEGER*4, INTENT(IN) :: COMM
  128. END SUBROUTINE CLUSTER_SPARSE_SOLVER_D_2D
  129. SUBROUTINE CLUSTER_SPARSE_SOLVER_S_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  130. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  131. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  132. INTEGER, INTENT(IN) :: MAXFCT
  133. INTEGER, INTENT(IN) :: MNUM
  134. INTEGER, INTENT(IN) :: MTYPE
  135. INTEGER, INTENT(IN) :: PHASE
  136. INTEGER, INTENT(IN) :: N
  137. INTEGER, INTENT(IN) :: IA(*)
  138. INTEGER, INTENT(IN) :: JA(*)
  139. INTEGER, INTENT(IN) :: PERM(*)
  140. INTEGER, INTENT(IN) :: NRHS
  141. INTEGER, INTENT(INOUT) :: IPARM(*)
  142. INTEGER, INTENT(IN) :: MSGLVL
  143. INTEGER, INTENT(OUT) :: ERROR
  144. REAL(KIND=4), INTENT(IN) :: A(*)
  145. REAL(KIND=4), INTENT(INOUT) :: B(N,*)
  146. REAL(KIND=4), INTENT(OUT) :: X(N,*)
  147. INTEGER*4, INTENT(IN) :: COMM
  148. END SUBROUTINE CLUSTER_SPARSE_SOLVER_S_2D
  149. SUBROUTINE CLUSTER_SPARSE_SOLVER_DC_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  150. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  151. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  152. INTEGER, INTENT(IN) :: MAXFCT
  153. INTEGER, INTENT(IN) :: MNUM
  154. INTEGER, INTENT(IN) :: MTYPE
  155. INTEGER, INTENT(IN) :: PHASE
  156. INTEGER, INTENT(IN) :: N
  157. INTEGER, INTENT(IN) :: IA(*)
  158. INTEGER, INTENT(IN) :: JA(*)
  159. INTEGER, INTENT(IN) :: PERM(*)
  160. INTEGER, INTENT(IN) :: NRHS
  161. INTEGER, INTENT(INOUT) :: IPARM(*)
  162. INTEGER, INTENT(IN) :: MSGLVL
  163. INTEGER, INTENT(OUT) :: ERROR
  164. COMPLEX(KIND=8), INTENT(IN) :: A(*)
  165. COMPLEX(KIND=8), INTENT(INOUT) :: B(N,*)
  166. COMPLEX(KIND=8), INTENT(OUT) :: X(N,*)
  167. INTEGER*4, INTENT(IN) :: COMM
  168. END SUBROUTINE CLUSTER_SPARSE_SOLVER_DC_2D
  169. SUBROUTINE CLUSTER_SPARSE_SOLVER_SC_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  170. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  171. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  172. INTEGER, INTENT(IN) :: MAXFCT
  173. INTEGER, INTENT(IN) :: MNUM
  174. INTEGER, INTENT(IN) :: MTYPE
  175. INTEGER, INTENT(IN) :: PHASE
  176. INTEGER, INTENT(IN) :: N
  177. INTEGER, INTENT(IN) :: IA(*)
  178. INTEGER, INTENT(IN) :: JA(*)
  179. INTEGER, INTENT(IN) :: PERM(*)
  180. INTEGER, INTENT(IN) :: NRHS
  181. INTEGER, INTENT(INOUT) :: IPARM(*)
  182. INTEGER, INTENT(IN) :: MSGLVL
  183. INTEGER, INTENT(OUT) :: ERROR
  184. COMPLEX(KIND=4), INTENT(IN) :: A(*)
  185. COMPLEX(KIND=4), INTENT(INOUT) :: B(N,*)
  186. COMPLEX(KIND=4), INTENT(OUT) :: X(N,*)
  187. INTEGER*4, INTENT(IN) :: COMM
  188. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SC_2D
  189. END INTERFACE
  190. !
  191. ! Subroutine prototype for CLUSTER_SPARSE_SOLVER_64
  192. !
  193. INTERFACE CLUSTER_SPARSE_SOLVER_64
  194. SUBROUTINE CLUSTER_SPARSE_SOLVER_D_64(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  195. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  196. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  197. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  198. INTEGER(KIND=8), INTENT(IN) :: MNUM
  199. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  200. INTEGER(KIND=8), INTENT(IN) :: PHASE
  201. INTEGER(KIND=8), INTENT(IN) :: N
  202. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  203. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  204. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  205. INTEGER(KIND=8), INTENT(IN) :: NRHS
  206. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  207. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  208. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  209. REAL(KIND=8), INTENT(IN) :: A(*)
  210. REAL(KIND=8), INTENT(INOUT) :: B(*)
  211. REAL(KIND=8), INTENT(OUT) :: X(*)
  212. INTEGER*4, INTENT(IN) :: COMM
  213. END SUBROUTINE CLUSTER_SPARSE_SOLVER_D_64
  214. SUBROUTINE CLUSTER_SPARSE_SOLVER_S_64(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  215. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  216. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  217. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  218. INTEGER(KIND=8), INTENT(IN) :: MNUM
  219. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  220. INTEGER(KIND=8), INTENT(IN) :: PHASE
  221. INTEGER(KIND=8), INTENT(IN) :: N
  222. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  223. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  224. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  225. INTEGER(KIND=8), INTENT(IN) :: NRHS
  226. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  227. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  228. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  229. REAL(KIND=4), INTENT(IN) :: A(*)
  230. REAL(KIND=4), INTENT(INOUT) :: B(*)
  231. REAL(KIND=4), INTENT(OUT) :: X(*)
  232. INTEGER*4, INTENT(IN) :: COMM
  233. END SUBROUTINE CLUSTER_SPARSE_SOLVER_S_64
  234. SUBROUTINE CLUSTER_SPARSE_SOLVER_DC_64(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  235. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  236. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  237. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  238. INTEGER(KIND=8), INTENT(IN) :: MNUM
  239. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  240. INTEGER(KIND=8), INTENT(IN) :: PHASE
  241. INTEGER(KIND=8), INTENT(IN) :: N
  242. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  243. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  244. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  245. INTEGER(KIND=8), INTENT(IN) :: NRHS
  246. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  247. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  248. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  249. COMPLEX(KIND=8), INTENT(IN) :: A(*)
  250. COMPLEX(KIND=8), INTENT(INOUT) :: B(*)
  251. COMPLEX(KIND=8), INTENT(OUT) :: X(*)
  252. INTEGER*4, INTENT(IN) :: COMM
  253. END SUBROUTINE CLUSTER_SPARSE_SOLVER_DC_64
  254. SUBROUTINE CLUSTER_SPARSE_SOLVER_SC_64(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  255. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  256. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  257. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  258. INTEGER(KIND=8), INTENT(IN) :: MNUM
  259. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  260. INTEGER(KIND=8), INTENT(IN) :: PHASE
  261. INTEGER(KIND=8), INTENT(IN) :: N
  262. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  263. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  264. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  265. INTEGER(KIND=8), INTENT(IN) :: NRHS
  266. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  267. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  268. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  269. COMPLEX(KIND=4), INTENT(IN) :: A(*)
  270. COMPLEX(KIND=4), INTENT(INOUT) :: B(*)
  271. COMPLEX(KIND=4), INTENT(OUT) :: X(*)
  272. INTEGER*4, INTENT(IN) :: COMM
  273. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SC_64
  274. SUBROUTINE CLUSTER_SPARSE_SOLVER_D_64_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  275. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  276. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  277. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  278. INTEGER(KIND=8), INTENT(IN) :: MNUM
  279. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  280. INTEGER(KIND=8), INTENT(IN) :: PHASE
  281. INTEGER(KIND=8), INTENT(IN) :: N
  282. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  283. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  284. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  285. INTEGER(KIND=8), INTENT(IN) :: NRHS
  286. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  287. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  288. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  289. REAL(KIND=8), INTENT(IN) :: A(*)
  290. REAL(KIND=8), INTENT(INOUT) :: B(N,*)
  291. REAL(KIND=8), INTENT(OUT) :: X(N,*)
  292. INTEGER*4, INTENT(IN) :: COMM
  293. END SUBROUTINE CLUSTER_SPARSE_SOLVER_D_64_2D
  294. SUBROUTINE CLUSTER_SPARSE_SOLVER_S_64_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  295. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  296. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  297. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  298. INTEGER(KIND=8), INTENT(IN) :: MNUM
  299. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  300. INTEGER(KIND=8), INTENT(IN) :: PHASE
  301. INTEGER(KIND=8), INTENT(IN) :: N
  302. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  303. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  304. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  305. INTEGER(KIND=8), INTENT(IN) :: NRHS
  306. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  307. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  308. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  309. REAL(KIND=4), INTENT(IN) :: A(*)
  310. REAL(KIND=4), INTENT(INOUT) :: B(N,*)
  311. REAL(KIND=4), INTENT(OUT) :: X(N,*)
  312. INTEGER*4, INTENT(IN) :: COMM
  313. END SUBROUTINE CLUSTER_SPARSE_SOLVER_S_64_2D
  314. SUBROUTINE CLUSTER_SPARSE_SOLVER_DC_64_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  315. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  316. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  317. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  318. INTEGER(KIND=8), INTENT(IN) :: MNUM
  319. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  320. INTEGER(KIND=8), INTENT(IN) :: PHASE
  321. INTEGER(KIND=8), INTENT(IN) :: N
  322. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  323. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  324. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  325. INTEGER(KIND=8), INTENT(IN) :: NRHS
  326. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  327. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  328. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  329. COMPLEX(KIND=8), INTENT(IN) :: A(*)
  330. COMPLEX(KIND=8), INTENT(INOUT) :: B(N,*)
  331. COMPLEX(KIND=8), INTENT(OUT) :: X(N,*)
  332. INTEGER*4, INTENT(IN) :: COMM
  333. END SUBROUTINE CLUSTER_SPARSE_SOLVER_DC_64_2D
  334. SUBROUTINE CLUSTER_SPARSE_SOLVER_SC_64_2D(PT,MAXFCT,MNUM,MTYPE,PHASE,N,A,IA,JA,PERM,NRHS,IPARM,MSGLVL,B,X,COMM,ERROR)
  335. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  336. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  337. INTEGER(KIND=8), INTENT(IN) :: MAXFCT
  338. INTEGER(KIND=8), INTENT(IN) :: MNUM
  339. INTEGER(KIND=8), INTENT(IN) :: MTYPE
  340. INTEGER(KIND=8), INTENT(IN) :: PHASE
  341. INTEGER(KIND=8), INTENT(IN) :: N
  342. INTEGER(KIND=8), INTENT(IN) :: IA(*)
  343. INTEGER(KIND=8), INTENT(IN) :: JA(*)
  344. INTEGER(KIND=8), INTENT(IN) :: PERM(*)
  345. INTEGER(KIND=8), INTENT(IN) :: NRHS
  346. INTEGER(KIND=8), INTENT(INOUT) :: IPARM(*)
  347. INTEGER(KIND=8), INTENT(IN) :: MSGLVL
  348. INTEGER(KIND=8), INTENT(OUT) :: ERROR
  349. COMPLEX(KIND=4), INTENT(IN) :: A(*)
  350. COMPLEX(KIND=4), INTENT(INOUT) :: B(N,*)
  351. COMPLEX(KIND=4), INTENT(OUT) :: X(N,*)
  352. INTEGER*4, INTENT(IN) :: COMM
  353. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SC_64_2D
  354. END INTERFACE
  355. ! operation names for the export routines
  356. INTEGER*4, PARAMETER :: SPARSE_PTLUQT = 0
  357. INTEGER*4, PARAMETER :: SPARSE_DPTLUQT = 1
  358. ! data names for the export routines
  359. INTEGER*4, PARAMETER :: SPARSE_PTLUQT_L = 0
  360. INTEGER*4, PARAMETER :: SPARSE_PTLUQT_U = 1
  361. INTEGER*4, PARAMETER :: SPARSE_PTLUQT_P = 2
  362. INTEGER*4, PARAMETER :: SPARSE_PTLUQT_Q = 3
  363. INTEGER*4, PARAMETER :: SPARSE_DPTLUQT_L = 4
  364. INTEGER*4, PARAMETER :: SPARSE_DPTLUQT_U = 5
  365. INTEGER*4, PARAMETER :: SPARSE_DPTLUQT_P = 6
  366. INTEGER*4, PARAMETER :: SPARSE_DPTLUQT_Q = 7
  367. INTEGER*4, PARAMETER :: SPARSE_DPTLUQT_D = 8
  368. INTERFACE CLUSTER_SPARSE_SOLVER_GET_CSR_SIZE
  369. SUBROUTINE CLUSTER_SPARSE_SOLVER_GET_CSR_SIZE_F(PT,DATANAME,LOCAL_NROWS,LOCAL_NNZ,COMM,ERROR)
  370. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  371. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  372. INTEGER*4, INTENT(IN) :: DATANAME
  373. INTEGER, INTENT(OUT) :: LOCAL_NROWS
  374. INTEGER, INTENT(OUT) :: LOCAL_NNZ
  375. INTEGER*4, INTENT(IN) :: COMM
  376. INTEGER, INTENT(OUT) :: ERROR
  377. END SUBROUTINE CLUSTER_SPARSE_SOLVER_GET_CSR_SIZE_F
  378. END INTERFACE
  379. INTERFACE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS
  380. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_D(PT,DATANAME,ROWPTR,COLINDX,VALS,COMM,ERROR)
  381. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  382. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  383. INTEGER*4, INTENT(IN) :: DATANAME
  384. INTEGER, INTENT(IN) :: ROWPTR(*)
  385. INTEGER, INTENT(IN) :: COLINDX(*)
  386. REAL(KIND=8), INTENT(IN) :: VALS(*)
  387. INTEGER*4, INTENT(IN) :: COMM
  388. INTEGER, INTENT(OUT) :: ERROR
  389. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_D
  390. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_S(PT,DATANAME,ROWPTR,COLINDX,VALS,COMM,ERROR)
  391. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  392. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  393. INTEGER*4, INTENT(IN) :: DATANAME
  394. INTEGER, INTENT(IN) :: ROWPTR(*)
  395. INTEGER, INTENT(IN) :: COLINDX(*)
  396. REAL(KIND=4), INTENT(IN) :: VALS(*)
  397. INTEGER*4, INTENT(IN) :: COMM
  398. INTEGER, INTENT(OUT) :: ERROR
  399. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_S
  400. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_DC(PT,DATANAME,ROWPTR,COLINDX,VALS,COMM,ERROR)
  401. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  402. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  403. INTEGER*4, INTENT(IN) :: DATANAME
  404. INTEGER, INTENT(IN) :: ROWPTR(*)
  405. INTEGER, INTENT(IN) :: COLINDX(*)
  406. COMPLEX(KIND=8), INTENT(IN) :: VALS(*)
  407. INTEGER*4, INTENT(IN) :: COMM
  408. INTEGER, INTENT(OUT) :: ERROR
  409. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_DC
  410. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_SC(PT,DATANAME,ROWPTR,COLINDX,VALS,COMM,ERROR)
  411. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  412. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  413. INTEGER*4, INTENT(IN) :: DATANAME
  414. INTEGER, INTENT(IN) :: ROWPTR(*)
  415. INTEGER, INTENT(IN) :: COLINDX(*)
  416. COMPLEX(KIND=4), INTENT(IN) :: VALS(*)
  417. INTEGER*4, INTENT(IN) :: COMM
  418. INTEGER, INTENT(OUT) :: ERROR
  419. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_CSR_PTRS_SC
  420. END INTERFACE
  421. INTERFACE CLUSTER_SPARSE_SOLVER_SET_PTR
  422. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_D(PT,DATANAME,PTR,COMM,ERROR)
  423. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  424. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  425. INTEGER*4, INTENT(IN) :: DATANAME
  426. REAL(KIND=8), INTENT(IN) :: PTR(*)
  427. INTEGER*4, INTENT(IN) :: COMM
  428. INTEGER, INTENT(OUT) :: ERROR
  429. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_D
  430. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_S(PT,DATANAME,PTR,COMM,ERROR)
  431. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  432. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  433. INTEGER*4, INTENT(IN) :: DATANAME
  434. REAL(KIND=4), INTENT(IN) :: PTR(*)
  435. INTEGER*4, INTENT(IN) :: COMM
  436. INTEGER, INTENT(OUT) :: ERROR
  437. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_S
  438. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_DC(PT,DATANAME,PTR,COMM,ERROR)
  439. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  440. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  441. INTEGER*4, INTENT(IN) :: DATANAME
  442. COMPLEX(KIND=8), INTENT(IN) :: PTR(*)
  443. INTEGER*4, INTENT(IN) :: COMM
  444. INTEGER, INTENT(OUT) :: ERROR
  445. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_DC
  446. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_SC(PT,DATANAME,PTR,COMM,ERROR)
  447. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  448. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  449. INTEGER*4, INTENT(IN) :: DATANAME
  450. COMPLEX(KIND=4), INTENT(IN) :: PTR(*)
  451. INTEGER*4, INTENT(IN) :: COMM
  452. INTEGER, INTENT(OUT) :: ERROR
  453. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_SC
  454. SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_I(PT,DATANAME,PTR,COMM,ERROR)
  455. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  456. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  457. INTEGER*4, INTENT(IN) :: DATANAME
  458. INTEGER, INTENT(IN) :: PTR(*)
  459. INTEGER*4, INTENT(IN) :: COMM
  460. INTEGER, INTENT(OUT) :: ERROR
  461. END SUBROUTINE CLUSTER_SPARSE_SOLVER_SET_PTR_I
  462. END INTERFACE
  463. INTERFACE CLUSTER_SPARSE_SOLVER_EXPORT
  464. SUBROUTINE CLUSTER_SPARSE_SOLVER_EXPORT_F(PT,OPERATION,COMM,ERROR)
  465. USE MKL_CLUSTER_SPARSE_SOLVER_PRIVATE
  466. TYPE(MKL_CLUSTER_SPARSE_SOLVER_HANDLE), INTENT(INOUT) :: PT(*)
  467. INTEGER*4, INTENT(IN) :: OPERATION
  468. INTEGER*4, INTENT(IN) :: COMM
  469. INTEGER, INTENT(OUT) :: ERROR
  470. END SUBROUTINE CLUSTER_SPARSE_SOLVER_EXPORT_F
  471. END INTERFACE
  472. END MODULE MKL_CLUSTER_SPARSE_SOLVER
  473. !DEC$ ENDIF