mkl_solvers_ee.f90 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. !===============================================================================
  2. ! Copyright 2014-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. ! This file contains preliminary version of new SpBLAS API which supports
  16. ! two-step execution (inspector-executor) model.
  17. !
  18. !*******************************************************************************
  19. !*******************************************************************************
  20. !*********************************** Basic types and constants *****************
  21. !*******************************************************************************
  22. MODULE MKL_SOLVERS_EE
  23. USE MKL_SPBLAS
  24. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INTPTR_T, C_INT
  25. !*************************************************************************************************
  26. !*** Opaque structure for sparse matrix in internal format, further D - means double precision ***
  27. !*************************************************************************************************
  28. ! struct sparse_matrix;
  29. ! typedef struct sparse_matrix *sparse_matrix_t;
  30. ! TYPE, BIND(C) :: SPARSE_MATRIX_T
  31. ! INTEGER(C_INTPTR_T) :: PTR
  32. ! END TYPE SPARSE_MATRIX_T
  33. ! descriptor of main sparse matrix properties
  34. ! TYPE, BIND(C) :: MATRIX_DESCR
  35. ! INTEGER(C_INT) :: TYPE
  36. ! INTEGER(C_INT) :: MODE
  37. ! INTEGER(C_INT) :: DIAG
  38. ! END TYPE MATRIX_DESCR
  39. INTERFACE
  40. !****************************************************************************************
  41. !****************************** Computational routines **********************************
  42. !****************************************************************************************
  43. FUNCTION MKL_SPARSE_EE_INIT(pm) &
  44. BIND(C, name='MKL_SPARSE_EE_INIT')
  45. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT
  46. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  47. INTEGER(C_INT) MKL_SPARSE_EE_INIT
  48. END FUNCTION
  49. FUNCTION MKL_SPARSE_S_EV(which, pm, A, descrA, k0, k, E, X, res) &
  50. BIND(C, name='MKL_SPARSE_S_EV')
  51. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  52. IMPORT SPARSE_MATRIX_T
  53. IMPORT MATRIX_DESCR
  54. CHARACTER , INTENT(IN) :: which
  55. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  56. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: A
  57. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrA
  58. INTEGER, INTENT(IN) :: k0
  59. INTEGER, INTENT(INOUT) :: k
  60. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: E
  61. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: X
  62. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: res
  63. INTEGER(C_INT) MKL_SPARSE_S_EV
  64. END FUNCTION
  65. FUNCTION MKL_SPARSE_D_EV(which, pm, A, descrA, k0, k, E, X, res) &
  66. BIND(C, name='MKL_SPARSE_D_EV')
  67. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  68. IMPORT SPARSE_MATRIX_T
  69. IMPORT MATRIX_DESCR
  70. CHARACTER , INTENT(IN) :: which
  71. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  72. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: A
  73. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrA
  74. INTEGER, INTENT(IN) :: k0
  75. INTEGER, INTENT(INOUT) :: k
  76. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: E
  77. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: X
  78. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: res
  79. INTEGER(C_INT) MKL_SPARSE_D_EV
  80. END FUNCTION
  81. FUNCTION MKL_SPARSE_D_GV(which, pm, A, descrA, B, descrB, k0, k, E, X, res) &
  82. BIND(C, name='MKL_SPARSE_D_GV')
  83. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  84. IMPORT SPARSE_MATRIX_T
  85. IMPORT MATRIX_DESCR
  86. CHARACTER , INTENT(IN) :: which
  87. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  88. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: A
  89. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrA
  90. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: B
  91. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrB
  92. INTEGER, INTENT(IN) :: k0
  93. INTEGER, INTENT(INOUT) :: k
  94. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: E
  95. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: X
  96. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: res
  97. INTEGER(C_INT) MKL_SPARSE_D_GV
  98. END FUNCTION
  99. FUNCTION MKL_SPARSE_S_GV(which, pm, A, descrA, B, descrB, k0, k, E, X, res) &
  100. BIND(C, name='MKL_SPARSE_S_GV')
  101. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  102. IMPORT SPARSE_MATRIX_T
  103. IMPORT MATRIX_DESCR
  104. CHARACTER , INTENT(IN) :: which
  105. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  106. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: A
  107. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrA
  108. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: B
  109. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrB
  110. INTEGER, INTENT(IN) :: k0
  111. INTEGER, INTENT(INOUT) :: k
  112. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: E
  113. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: X
  114. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: res
  115. INTEGER(C_INT) MKL_SPARSE_S_GV
  116. END FUNCTION
  117. FUNCTION MKL_SPARSE_S_SVD(whichE, whichV, pm, A, descrA, k0, k, E, XL, XR, res) &
  118. BIND(C, name='MKL_SPARSE_S_SVD')
  119. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_FLOAT
  120. IMPORT SPARSE_MATRIX_T
  121. IMPORT MATRIX_DESCR
  122. CHARACTER , INTENT(IN) :: whichE
  123. CHARACTER , INTENT(IN) :: whichV
  124. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  125. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: A
  126. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrA
  127. INTEGER, INTENT(IN) :: k0
  128. INTEGER, INTENT(INOUT) :: k
  129. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: E
  130. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: XL
  131. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: XR
  132. REAL(C_FLOAT), INTENT(INOUT), DIMENSION(*) :: res
  133. INTEGER(C_INT) MKL_SPARSE_S_SVD
  134. END FUNCTION
  135. FUNCTION MKL_SPARSE_D_SVD(whichE, whichV, pm, A, descrA, k0, k, E, XL, XR, res) &
  136. BIND(C, name='MKL_SPARSE_D_SVD')
  137. USE, INTRINSIC :: ISO_C_BINDING , ONLY : C_INT, C_DOUBLE
  138. IMPORT SPARSE_MATRIX_T
  139. IMPORT MATRIX_DESCR
  140. CHARACTER , INTENT(IN) :: whichE
  141. CHARACTER , INTENT(IN) :: whichV
  142. INTEGER, INTENT(IN), DIMENSION(*) :: pm
  143. TYPE(SPARSE_MATRIX_T), INTENT(IN) :: A
  144. TYPE(MATRIX_DESCR) , INTENT(IN) :: descrA
  145. INTEGER, INTENT(IN) :: k0
  146. INTEGER, INTENT(INOUT) :: k
  147. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: E
  148. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: XL
  149. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: XR
  150. REAL(C_DOUBLE), INTENT(INOUT), DIMENSION(*) :: res
  151. INTEGER(C_INT) MKL_SPARSE_D_SVD
  152. END FUNCTION
  153. END INTERFACE
  154. END MODULE MKL_SOLVERS_EE