mkl_sparse_qr.f90 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. !===============================================================================
  2. ! Copyright 2018-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. !
  15. ! Content:
  16. ! Intel(R) oneAPI Math Kernel Library (oneMKL) Sparse QR FORTRAN header file
  17. !
  18. ! Contains interface to: MKL_SPARSE_X_QR
  19. ! MKL_SPARSE_QR_REORDER
  20. ! MKL_SPARSE_X_QR_FACTORIZE
  21. ! MKL_SPARSE_X_QR_SOLVE
  22. ! MKL_SPARSE_X_QR_QMULT
  23. ! MKL_SPARSE_X_QR_RSOLVE
  24. ! MKL_SPARSE_SET_QR_HINT
  25. !
  26. !===============================================================================
  27. MODULE MKL_SPARSE_QR
  28. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INTPTR_T, C_INT
  29. USE MKL_SPBLAS, ONLY : SPARSE_MATRIX_T, MATRIX_DESCR
  30. ENUM, BIND(C)
  31. ENUMERATOR :: SPARSE_QR_WITH_PIVOTS
  32. END ENUM
  33. INTERFACE
  34. FUNCTION MKL_SPARSE_SET_QR_HINT(A, HINT) &
  35. BIND(C, name='MKL_SPARSE_SET_QR_HINT')
  36. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  37. IMPORT SPARSE_MATRIX_T
  38. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  39. INTEGER(C_INT) , INTENT(IN) :: HINT
  40. INTEGER(C_INT) MKL_SPARSE_SET_QR_HINT
  41. END FUNCTION
  42. FUNCTION MKL_SPARSE_D_QR(operation, A, descr, layout, columns, x, ldx, b, ldb) &
  43. BIND(C, name='MKL_SPARSE_D_QR')
  44. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  45. IMPORT SPARSE_MATRIX_T
  46. IMPORT MATRIX_DESCR
  47. INTEGER(C_INT) , INTENT(IN) :: operation
  48. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  49. TYPE(MATRIX_DESCR) , INTENT(IN) :: descr
  50. INTEGER(C_INT) , INTENT(IN) :: layout
  51. INTEGER , INTENT(IN) :: columns
  52. REAL(C_DOUBLE) , INTENT(OUT), DIMENSION(*):: x
  53. INTEGER , INTENT(IN) :: ldx
  54. REAL(C_DOUBLE) , INTENT(IN) , DIMENSION(*):: b
  55. INTEGER , INTENT(IN) :: ldb
  56. INTEGER(C_INT) MKL_SPARSE_D_QR
  57. END FUNCTION
  58. FUNCTION MKL_SPARSE_S_QR(operation,A,descr, layout, columns, x, ldx, b, ldb) &
  59. BIND(C, name='MKL_SPARSE_S_QR')
  60. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  61. IMPORT SPARSE_MATRIX_T
  62. IMPORT MATRIX_DESCR
  63. INTEGER(C_INT) , INTENT(IN) :: operation
  64. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  65. TYPE(MATRIX_DESCR) , INTENT(IN) :: descr
  66. INTEGER(C_INT) , INTENT(IN) :: layout
  67. INTEGER , INTENT(IN) :: columns
  68. REAL(C_FLOAT) , INTENT(OUT), DIMENSION(*):: x
  69. INTEGER , INTENT(IN) :: ldx
  70. REAL(C_FLOAT) , INTENT(IN) , DIMENSION(*):: b
  71. INTEGER , INTENT(IN) :: ldb
  72. INTEGER(C_INT) MKL_SPARSE_S_QR
  73. END FUNCTION
  74. FUNCTION MKL_SPARSE_QR_REORDER(A, descr) &
  75. BIND(C, name='MKL_SPARSE_QR_REORDER')
  76. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT
  77. IMPORT SPARSE_MATRIX_T
  78. IMPORT MATRIX_DESCR
  79. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  80. TYPE(MATRIX_DESCR) , INTENT(IN) :: descr
  81. INTEGER(C_INT) MKL_SPARSE_QR_REORDER
  82. END FUNCTION
  83. FUNCTION MKL_SPARSE_D_QR_FACTORIZE(A, alt_values) &
  84. BIND(C, name='MKL_SPARSE_D_QR_FACTORIZE')
  85. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  86. IMPORT SPARSE_MATRIX_T
  87. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  88. REAL(C_DOUBLE) , INTENT(IN) , DIMENSION(*):: alt_values
  89. INTEGER(C_INT) MKL_SPARSE_D_QR_FACTORIZE
  90. END FUNCTION
  91. FUNCTION MKL_SPARSE_S_QR_FACTORIZE(A, alt_values) &
  92. BIND(C, name='MKL_SPARSE_S_QR_FACTORIZE')
  93. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  94. IMPORT SPARSE_MATRIX_T
  95. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  96. REAL(C_FLOAT) , INTENT(IN) , DIMENSION(*):: alt_values
  97. INTEGER(C_INT) MKL_SPARSE_S_QR_FACTORIZE
  98. END FUNCTION
  99. FUNCTION MKL_SPARSE_D_QR_SOLVE(operation, A, alt_values, layout, columns, x, ldx, b, ldb) &
  100. BIND(C, name='MKL_SPARSE_D_QR_SOLVE')
  101. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  102. IMPORT SPARSE_MATRIX_T
  103. IMPORT MATRIX_DESCR
  104. INTEGER(C_INT) , INTENT(IN) :: operation
  105. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  106. REAL(C_DOUBLE) , INTENT(OUT), DIMENSION(*):: alt_values
  107. INTEGER(C_INT) , INTENT(IN) :: layout
  108. INTEGER , INTENT(IN) :: columns
  109. REAL(C_DOUBLE) , INTENT(OUT), DIMENSION(*):: x
  110. INTEGER , INTENT(IN) :: ldx
  111. REAL(C_DOUBLE) , INTENT(IN) , DIMENSION(*):: b
  112. INTEGER , INTENT(IN) :: ldb
  113. INTEGER(C_INT) MKL_SPARSE_D_QR_SOLVE
  114. END FUNCTION
  115. FUNCTION MKL_SPARSE_S_QR_SOLVE(operation, A, alt_values, layout, columns, x, ldx, b, ldb) &
  116. BIND(C, name='MKL_SPARSE_S_QR_SOLVE')
  117. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  118. IMPORT SPARSE_MATRIX_T
  119. IMPORT MATRIX_DESCR
  120. INTEGER(C_INT) , INTENT(IN) :: operation
  121. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  122. REAL(C_FLOAT) , INTENT(OUT), DIMENSION(*):: alt_values
  123. INTEGER(C_INT) , INTENT(IN) :: layout
  124. INTEGER , INTENT(IN) :: columns
  125. REAL(C_FLOAT) , INTENT(OUT), DIMENSION(*):: x
  126. INTEGER , INTENT(IN) :: ldx
  127. REAL(C_FLOAT) , INTENT(IN) , DIMENSION(*):: b
  128. INTEGER , INTENT(IN) :: ldb
  129. INTEGER(C_INT) MKL_SPARSE_S_QR_SOLVE
  130. END FUNCTION
  131. FUNCTION MKL_SPARSE_D_QR_QMULT(operation, A, layout, columns, x, ldx, b, ldb) &
  132. BIND(C, name='MKL_SPARSE_D_QR_QMULT')
  133. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  134. IMPORT SPARSE_MATRIX_T
  135. IMPORT MATRIX_DESCR
  136. INTEGER(C_INT) , INTENT(IN) :: operation
  137. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  138. INTEGER(C_INT) , INTENT(IN) :: layout
  139. INTEGER , INTENT(IN) :: columns
  140. REAL(C_DOUBLE) , INTENT(OUT), DIMENSION(*):: x
  141. INTEGER , INTENT(IN) :: ldx
  142. REAL(C_DOUBLE) , INTENT(IN) , DIMENSION(*):: b
  143. INTEGER , INTENT(IN) :: ldb
  144. INTEGER(C_INT) MKL_SPARSE_D_QR_QMULT
  145. END FUNCTION
  146. FUNCTION MKL_SPARSE_S_QR_QMULT(operation, A, layout, columns, x, ldx, b, ldb) &
  147. BIND(C, name='MKL_SPARSE_S_QR_QMULT')
  148. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  149. IMPORT SPARSE_MATRIX_T
  150. IMPORT MATRIX_DESCR
  151. INTEGER(C_INT) , INTENT(IN) :: operation
  152. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  153. INTEGER(C_INT) , INTENT(IN) :: layout
  154. INTEGER , INTENT(IN) :: columns
  155. REAL(C_FLOAT) , INTENT(OUT), DIMENSION(*):: x
  156. INTEGER , INTENT(IN) :: ldx
  157. REAL(C_FLOAT) , INTENT(IN) , DIMENSION(*):: b
  158. INTEGER , INTENT(IN) :: ldb
  159. INTEGER(C_INT) MKL_SPARSE_S_QR_QMULT
  160. END FUNCTION
  161. FUNCTION MKL_SPARSE_D_QR_RSOLVE(operation, A, layout, columns, x, ldx, b, ldb) &
  162. BIND(C, name='MKL_SPARSE_D_QR_RSOLVE')
  163. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  164. IMPORT SPARSE_MATRIX_T
  165. IMPORT MATRIX_DESCR
  166. INTEGER(C_INT) , INTENT(IN) :: operation
  167. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  168. INTEGER(C_INT) , INTENT(IN) :: layout
  169. INTEGER , INTENT(IN) :: columns
  170. REAL(C_DOUBLE) , INTENT(OUT), DIMENSION(*):: x
  171. INTEGER , INTENT(IN) :: ldx
  172. REAL(C_DOUBLE) , INTENT(IN) , DIMENSION(*):: b
  173. INTEGER , INTENT(IN) :: ldb
  174. INTEGER(C_INT) MKL_SPARSE_D_QR_RSOLVE
  175. END FUNCTION
  176. FUNCTION MKL_SPARSE_S_QR_RSOLVE(operation, A, layout, columns, x, ldx, b, ldb) &
  177. BIND(C, name='MKL_SPARSE_S_QR_RSOLVE')
  178. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  179. IMPORT SPARSE_MATRIX_T
  180. IMPORT MATRIX_DESCR
  181. INTEGER(C_INT) , INTENT(IN) :: operation
  182. TYPE(SPARSE_MATRIX_T), INTENT(INOUT) :: A
  183. INTEGER(C_INT) , INTENT(IN) :: layout
  184. INTEGER , INTENT(IN) :: columns
  185. REAL(C_FLOAT) , INTENT(OUT), DIMENSION(*):: x
  186. INTEGER , INTENT(IN) :: ldx
  187. REAL(C_FLOAT) , INTENT(IN) , DIMENSION(*):: b
  188. INTEGER , INTENT(IN) :: ldb
  189. INTEGER(C_INT) MKL_SPARSE_S_QR_RSOLVE
  190. END FUNCTION
  191. END INTERFACE
  192. END MODULE