mkl_dss.f90 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  1. !===============================================================================
  2. ! Copyright 2004-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) DSS Fortran-90 header file
  16. !
  17. ! Contains main datatypes, routines and constants definition.
  18. ! For CDECL use only.
  19. !
  20. !*******************************************************************************
  21. !DEC$ IF .NOT. DEFINED( __MKL_DSS_F90 )
  22. !DEC$ DEFINE __MKL_DSS_F90
  23. MODULE MKL_DSS_PRIVATE
  24. TYPE MKL_DSS_HANDLE; INTEGER(KIND=8) DUMMY; END TYPE
  25. END MODULE MKL_DSS_PRIVATE
  26. MODULE MKL_DSS
  27. USE MKL_DSS_PRIVATE
  28. INTEGER, PARAMETER :: MKL_DSS_DEFAULTS = 0
  29. !
  30. ! Out-of-core level option definitions
  31. !
  32. INTEGER, PARAMETER :: MKL_DSS_OOC_VARIABLE = 1024
  33. INTEGER, PARAMETER :: MKL_DSS_OOC_STRONG = 2048
  34. !
  35. ! Refinement steps on / off
  36. !
  37. INTEGER, PARAMETER :: MKL_DSS_REFINEMENT_OFF = 4096
  38. INTEGER, PARAMETER :: MKL_DSS_REFINEMENT_ON = 8192
  39. !
  40. ! Solver step's substitution
  41. !
  42. INTEGER, PARAMETER :: MKL_DSS_FORWARD_SOLVE = 16384
  43. INTEGER, PARAMETER :: MKL_DSS_DIAGONAL_SOLVE = 32768
  44. INTEGER, PARAMETER :: MKL_DSS_BACKWARD_SOLVE = 49152
  45. INTEGER, PARAMETER :: MKL_DSS_TRANSPOSE_SOLVE = 262144
  46. INTEGER, PARAMETER :: MKL_DSS_CONJUGATE_SOLVE = 524288
  47. !
  48. ! Single precision
  49. !
  50. INTEGER, PARAMETER :: MKL_DSS_SINGLE_PRECISION = 65536
  51. !
  52. ! Zero-based indexing
  53. !
  54. INTEGER, PARAMETER :: MKL_DSS_ZERO_BASED_INDEXING = 131072
  55. !
  56. ! Message level option definitions
  57. !
  58. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_SUCCESS = -2147483647
  59. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_DEBUG = -2147483646
  60. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_INFO = -2147483645
  61. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_WARNING = -2147483644
  62. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_ERROR = -2147483643
  63. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_FATAL = -2147483642
  64. !
  65. ! Termination level option definitions
  66. !
  67. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_SUCCESS = 1073741832
  68. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_DEBUG = 1073741840
  69. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_INFO = 1073741848
  70. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_WARNING = 1073741856
  71. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_ERROR = 1073741864
  72. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_FATAL = 1073741872
  73. !
  74. ! Structure option definitions
  75. !
  76. INTEGER, PARAMETER :: MKL_DSS_SYMMETRIC = 536870976
  77. INTEGER, PARAMETER :: MKL_DSS_SYMMETRIC_STRUCTURE = 536871040
  78. INTEGER, PARAMETER :: MKL_DSS_NON_SYMMETRIC = 536871104
  79. INTEGER, PARAMETER :: MKL_DSS_SYMMETRIC_COMPLEX = 536871168
  80. INTEGER, PARAMETER :: MKL_DSS_SYMMETRIC_STRUCTURE_COMPLEX = 536871232
  81. INTEGER, PARAMETER :: MKL_DSS_NON_SYMMETRIC_COMPLEX = 536871296
  82. !
  83. ! Reordering option definitions
  84. !
  85. INTEGER, PARAMETER :: MKL_DSS_AUTO_ORDER = 268435520
  86. INTEGER, PARAMETER :: MKL_DSS_MY_ORDER = 268435584
  87. INTEGER, PARAMETER :: MKL_DSS_OPTION1_ORDER = 268435648
  88. INTEGER, PARAMETER :: MKL_DSS_GET_ORDER = 268435712
  89. INTEGER, PARAMETER :: MKL_DSS_METIS_ORDER = 268435776
  90. INTEGER, PARAMETER :: MKL_DSS_METIS_OPENMP_ORDER = 268435840
  91. !
  92. ! Factorization option definitions
  93. !
  94. INTEGER, PARAMETER :: MKL_DSS_POSITIVE_DEFINITE = 134217792
  95. INTEGER, PARAMETER :: MKL_DSS_INDEFINITE = 134217856
  96. INTEGER, PARAMETER :: MKL_DSS_HERMITIAN_POSITIVE_DEFINITE = 134217920
  97. INTEGER, PARAMETER :: MKL_DSS_HERMITIAN_INDEFINITE = 134217984
  98. !
  99. ! Return status values
  100. !
  101. INTEGER, PARAMETER :: MKL_DSS_SUCCESS = 0
  102. INTEGER, PARAMETER :: MKL_DSS_ZERO_PIVOT = -1
  103. INTEGER, PARAMETER :: MKL_DSS_OUT_OF_MEMORY = -2
  104. INTEGER, PARAMETER :: MKL_DSS_FAILURE = -3
  105. INTEGER, PARAMETER :: MKL_DSS_ROW_ERR = -4
  106. INTEGER, PARAMETER :: MKL_DSS_COL_ERR = -5
  107. INTEGER, PARAMETER :: MKL_DSS_TOO_FEW_VALUES = -6
  108. INTEGER, PARAMETER :: MKL_DSS_TOO_MANY_VALUES = -7
  109. INTEGER, PARAMETER :: MKL_DSS_NOT_SQUARE = -8
  110. INTEGER, PARAMETER :: MKL_DSS_STATE_ERR = -9
  111. INTEGER, PARAMETER :: MKL_DSS_INVALID_OPTION = -10
  112. INTEGER, PARAMETER :: MKL_DSS_OPTION_CONFLICT = -11
  113. INTEGER, PARAMETER :: MKL_DSS_MSG_LVL_ERR = -12
  114. INTEGER, PARAMETER :: MKL_DSS_TERM_LVL_ERR = -13
  115. INTEGER, PARAMETER :: MKL_DSS_STRUCTURE_ERR = -14
  116. INTEGER, PARAMETER :: MKL_DSS_REORDER_ERR = -15
  117. INTEGER, PARAMETER :: MKL_DSS_VALUES_ERR = -16
  118. INTEGER, PARAMETER :: MKL_DSS_STATISTICS_INVALID_MATRIX = -17
  119. INTEGER, PARAMETER :: MKL_DSS_STATISTICS_INVALID_STATE = -18
  120. INTEGER, PARAMETER :: MKL_DSS_STATISTICS_INVALID_STRING = -19
  121. !
  122. ! Function prototypes for DSS routines
  123. !
  124. INTERFACE
  125. FUNCTION DSS_CREATE( HANDLE, OPT )
  126. USE MKL_DSS_PRIVATE
  127. TYPE(MKL_DSS_HANDLE), INTENT(OUT) :: HANDLE
  128. INTEGER, INTENT(IN) :: OPT
  129. INTEGER :: DSS_CREATE
  130. END FUNCTION DSS_CREATE
  131. END INTERFACE
  132. INTERFACE
  133. FUNCTION DSS_DEFINE_STRUCTURE( HANDLE, OPT, ROWINDEX, NROWS, RCOLS, COLUMNS, NNONZEROS )
  134. USE MKL_DSS_PRIVATE
  135. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  136. INTEGER, INTENT(IN) :: OPT
  137. INTEGER, INTENT(IN) :: NROWS
  138. INTEGER, INTENT(IN) :: RCOLS
  139. INTEGER, INTENT(IN) :: NNONZEROS
  140. INTEGER, INTENT(IN) :: ROWINDEX( * ) ! * = MIN(NROWS, NCOLS)+1
  141. INTEGER, INTENT(IN) :: COLUMNS( * ) ! * = NNONZEROS
  142. INTEGER :: DSS_DEFINE_STRUCTURE
  143. END FUNCTION DSS_DEFINE_STRUCTURE
  144. END INTERFACE
  145. INTERFACE
  146. FUNCTION DSS_REORDER( HANDLE, OPT, PERM )
  147. USE MKL_DSS_PRIVATE
  148. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  149. INTEGER, INTENT(IN) :: OPT
  150. INTEGER, INTENT(IN) :: PERM( * )
  151. INTEGER :: DSS_REORDER
  152. END FUNCTION DSS_REORDER
  153. END INTERFACE
  154. INTERFACE DSS_FACTOR
  155. FUNCTION DSS_FACTOR_REAL_D( HANDLE, OPT, RVALUES )
  156. USE MKL_DSS_PRIVATE
  157. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  158. INTEGER, INTENT(IN) :: OPT
  159. REAL(KIND=8), INTENT(IN) :: RVALUES( * )
  160. INTEGER :: DSS_FACTOR_REAL_D
  161. END FUNCTION DSS_FACTOR_REAL_D
  162. FUNCTION DSS_FACTOR_REAL_S( HANDLE, OPT, RVALUES )
  163. USE MKL_DSS_PRIVATE
  164. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  165. INTEGER, INTENT(IN) :: OPT
  166. REAL(KIND=4), INTENT(IN) :: RVALUES( * )
  167. INTEGER :: DSS_FACTOR_REAL_S
  168. END FUNCTION DSS_FACTOR_REAL_S
  169. FUNCTION DSS_FACTOR_COMPLEX_D( HANDLE, OPT, RVALUES )
  170. USE MKL_DSS_PRIVATE
  171. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  172. INTEGER, INTENT(IN) :: OPT
  173. COMPLEX(KIND=8), INTENT(IN) :: RVALUES( * )
  174. INTEGER :: DSS_FACTOR_COMPLEX_D
  175. END FUNCTION DSS_FACTOR_COMPLEX_D
  176. FUNCTION DSS_FACTOR_COMPLEX_S( HANDLE, OPT, RVALUES )
  177. USE MKL_DSS_PRIVATE
  178. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  179. INTEGER, INTENT(IN) :: OPT
  180. COMPLEX(KIND=4), INTENT(IN) :: RVALUES( * )
  181. INTEGER :: DSS_FACTOR_COMPLEX_S
  182. END FUNCTION DSS_FACTOR_COMPLEX_S
  183. END INTERFACE
  184. INTERFACE DSS_FACTOR_REAL
  185. FUNCTION DSS_FACTOR_REAL_D_( HANDLE, OPT, RVALUES )
  186. USE MKL_DSS_PRIVATE
  187. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  188. INTEGER, INTENT(IN) :: OPT
  189. REAL(KIND=8), INTENT(IN) :: RVALUES( * )
  190. INTEGER :: DSS_FACTOR_REAL_D_
  191. END FUNCTION DSS_FACTOR_REAL_D_
  192. FUNCTION DSS_FACTOR_REAL_S_( HANDLE, OPT, RVALUES )
  193. USE MKL_DSS_PRIVATE
  194. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  195. INTEGER, INTENT(IN) :: OPT
  196. REAL(KIND=4), INTENT(IN) :: RVALUES( * )
  197. INTEGER :: DSS_FACTOR_REAL_S_
  198. END FUNCTION DSS_FACTOR_REAL_S_
  199. END INTERFACE
  200. INTERFACE DSS_FACTOR_COMPLEX
  201. FUNCTION DSS_FACTOR_COMPLEX_D_( HANDLE, OPT, RVALUES )
  202. USE MKL_DSS_PRIVATE
  203. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  204. INTEGER, INTENT(IN) :: OPT
  205. COMPLEX(KIND=8), INTENT(IN) :: RVALUES( * )
  206. INTEGER :: DSS_FACTOR_COMPLEX_D_
  207. END FUNCTION DSS_FACTOR_COMPLEX_D_
  208. FUNCTION DSS_FACTOR_COMPLEX_S_( HANDLE, OPT, RVALUES )
  209. USE MKL_DSS_PRIVATE
  210. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  211. INTEGER, INTENT(IN) :: OPT
  212. COMPLEX(KIND=4), INTENT(IN) :: RVALUES( * )
  213. INTEGER :: DSS_FACTOR_COMPLEX_S_
  214. END FUNCTION DSS_FACTOR_COMPLEX_S_
  215. END INTERFACE
  216. INTERFACE DSS_SOLVE
  217. FUNCTION DSS_SOLVE_REAL_D( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  218. USE MKL_DSS_PRIVATE
  219. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  220. INTEGER, INTENT(IN) :: OPT
  221. INTEGER, INTENT(IN) :: NRHS
  222. REAL(KIND=8), INTENT(IN) :: RRHSVALUES( * )
  223. REAL(KIND=8), INTENT(OUT) :: RSOLVALUES( * )
  224. INTEGER :: DSS_SOLVE_REAL_D
  225. END FUNCTION DSS_SOLVE_REAL_D
  226. FUNCTION DSS_SOLVE_REAL_S( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  227. USE MKL_DSS_PRIVATE
  228. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  229. INTEGER, INTENT(IN) :: OPT
  230. INTEGER, INTENT(IN) :: NRHS
  231. REAL(KIND=4), INTENT(IN) :: RRHSVALUES( * )
  232. REAL(KIND=4), INTENT(OUT) :: RSOLVALUES( * )
  233. INTEGER :: DSS_SOLVE_REAL_S
  234. END FUNCTION DSS_SOLVE_REAL_S
  235. FUNCTION DSS_SOLVE_COMPLEX_D( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  236. USE MKL_DSS_PRIVATE
  237. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  238. INTEGER, INTENT(IN) :: OPT
  239. INTEGER, INTENT(IN) :: NRHS
  240. COMPLEX(KIND=8), INTENT(IN) :: RRHSVALUES( * )
  241. COMPLEX(KIND=8), INTENT(OUT) :: RSOLVALUES( * )
  242. INTEGER :: DSS_SOLVE_COMPLEX_D
  243. END FUNCTION DSS_SOLVE_COMPLEX_D
  244. FUNCTION DSS_SOLVE_COMPLEX_S( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  245. USE MKL_DSS_PRIVATE
  246. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  247. INTEGER, INTENT(IN) :: OPT
  248. INTEGER, INTENT(IN) :: NRHS
  249. COMPLEX(KIND=4), INTENT(IN) :: RRHSVALUES( * )
  250. COMPLEX(KIND=4), INTENT(OUT) :: RSOLVALUES( * )
  251. INTEGER :: DSS_SOLVE_COMPLEX_S
  252. END FUNCTION DSS_SOLVE_COMPLEX_S
  253. END INTERFACE
  254. INTERFACE DSS_SOLVE_REAL
  255. FUNCTION DSS_SOLVE_REAL_D_( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  256. USE MKL_DSS_PRIVATE
  257. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  258. INTEGER, INTENT(IN) :: OPT
  259. INTEGER, INTENT(IN) :: NRHS
  260. REAL(KIND=8), INTENT(IN) :: RRHSVALUES( * )
  261. REAL(KIND=8), INTENT(OUT) :: RSOLVALUES( * )
  262. INTEGER :: DSS_SOLVE_REAL_D_
  263. END FUNCTION DSS_SOLVE_REAL_D_
  264. FUNCTION DSS_SOLVE_REAL_S_( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  265. USE MKL_DSS_PRIVATE
  266. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  267. INTEGER, INTENT(IN) :: OPT
  268. INTEGER, INTENT(IN) :: NRHS
  269. REAL(KIND=4), INTENT(IN) :: RRHSVALUES( * )
  270. REAL(KIND=4), INTENT(OUT) :: RSOLVALUES( * )
  271. INTEGER :: DSS_SOLVE_REAL_S_
  272. END FUNCTION DSS_SOLVE_REAL_S_
  273. END INTERFACE
  274. INTERFACE DSS_SOLVE_COMPLEX
  275. FUNCTION DSS_SOLVE_COMPLEX_D_( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  276. USE MKL_DSS_PRIVATE
  277. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  278. INTEGER, INTENT(IN) :: OPT
  279. INTEGER, INTENT(IN) :: NRHS
  280. COMPLEX(KIND=8), INTENT(IN) :: RRHSVALUES( * )
  281. COMPLEX(KIND=8), INTENT(OUT) :: RSOLVALUES( * )
  282. INTEGER :: DSS_SOLVE_COMPLEX_D_
  283. END FUNCTION DSS_SOLVE_COMPLEX_D_
  284. FUNCTION DSS_SOLVE_COMPLEX_S_( HANDLE, OPT, RRHSVALUES, NRHS, RSOLVALUES )
  285. USE MKL_DSS_PRIVATE
  286. TYPE(MKL_DSS_HANDLE), INTENT(INOUT) :: HANDLE
  287. INTEGER, INTENT(IN) :: OPT
  288. INTEGER, INTENT(IN) :: NRHS
  289. COMPLEX(KIND=4), INTENT(IN) :: RRHSVALUES( * )
  290. COMPLEX(KIND=4), INTENT(OUT) :: RSOLVALUES( * )
  291. INTEGER :: DSS_SOLVE_COMPLEX_S_
  292. END FUNCTION DSS_SOLVE_COMPLEX_S_
  293. END INTERFACE
  294. INTERFACE
  295. FUNCTION DSS_DELETE( HANDLE, OPT )
  296. USE MKL_DSS_PRIVATE
  297. TYPE(MKL_DSS_HANDLE), INTENT(IN) :: HANDLE
  298. INTEGER, INTENT(IN) :: OPT
  299. INTEGER :: DSS_DELETE
  300. END FUNCTION DSS_DELETE
  301. END INTERFACE
  302. INTERFACE
  303. FUNCTION DSS_STATISTICS( HANDLE, OPT, STAT, RET )
  304. USE MKL_DSS_PRIVATE
  305. TYPE(MKL_DSS_HANDLE), INTENT(IN) :: HANDLE
  306. INTEGER, INTENT(IN) :: OPT
  307. INTEGER, INTENT(IN) :: STAT( * )
  308. REAL(KIND=8), INTENT(OUT) :: RET( * )
  309. INTEGER :: DSS_STATISTICS
  310. END FUNCTION DSS_STATISTICS
  311. END INTERFACE
  312. INTERFACE
  313. SUBROUTINE MKL_CVT_TO_NULL_TERMINATED_STR(DESTSTR,DESTLEN,SRCSTR)
  314. INTEGER, INTENT(OUT) :: DESTSTR( * )
  315. INTEGER, INTENT(IN) :: DESTLEN
  316. CHARACTER, INTENT(IN) :: SRCSTR(*)
  317. END SUBROUTINE MKL_CVT_TO_NULL_TERMINATED_STR
  318. END INTERFACE
  319. END MODULE MKL_DSS
  320. !DEC$ ENDIF