PageRenderTime 52ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/src/lapack.f90

http://github.com/certik/fortran-utils
FORTRAN Modern | 407 lines | 347 code | 51 blank | 9 comment | 0 complexity | 94e28aecf78aa206ceb52444d948ebb8 MD5 | raw file
  1. module lapack
  2. implicit none
  3. ! This is the precision that LAPACK "d" routines were compiled with (typically
  4. ! double precision, unless a special compiler option was used while compiling
  5. ! LAPACK). This "dp" is only used in lapack.f90
  6. ! The "d" routines data type is defined as "double precision", so
  7. ! we make "dp" the same kind as 0.d0 ("double precision"), so
  8. ! as long as LAPACK and this file were compiled with the same compiler options,
  9. ! it will be consistent. (If for example all double precision is promoted to
  10. ! quadruple precision, it will be promoted both in LAPACK and here.)
  11. integer, parameter :: dp=kind(0.d0)
  12. interface
  13. SUBROUTINE DGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
  14. import :: dp
  15. INTEGER INFO, LDA, LDB, N, NRHS
  16. INTEGER IPIV( * )
  17. REAL(dp) A( LDA, * ), B( LDB, * )
  18. END SUBROUTINE
  19. SUBROUTINE DGESVX( FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV, &
  20. EQUED, R, C, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, &
  21. IWORK, INFO )
  22. import :: dp
  23. CHARACTER EQUED, FACT, TRANS
  24. INTEGER INFO, LDA, LDAF, LDB, LDX, N, NRHS
  25. REAL(dp) RCOND
  26. INTEGER IPIV( * ), IWORK( * )
  27. REAL(dp) A( LDA, * ), AF( LDAF, * ), B( LDB, * ), BERR( * ), &
  28. C( * ), FERR( * ), R( * ), WORK( * ), X( LDX, * )
  29. END SUBROUTINE
  30. SUBROUTINE ZGESV( N, NRHS, A, LDA, IPIV, B, LDB, INFO )
  31. import :: dp
  32. INTEGER INFO, LDA, LDB, N, NRHS
  33. INTEGER IPIV( * )
  34. COMPLEX(dp) A( LDA, * ), B( LDB, * )
  35. END SUBROUTINE
  36. SUBROUTINE ZGESVX( FACT, TRANS, N, NRHS, A, LDA, AF, LDAF, IPIV, &
  37. EQUED, R, C, B, LDB, X, LDX, RCOND, FERR, BERR, &
  38. WORK, RWORK, INFO )
  39. import :: dp
  40. CHARACTER EQUED, FACT, TRANS
  41. INTEGER INFO, LDA, LDAF, LDB, LDX, N, NRHS
  42. REAL(dp) RCOND
  43. INTEGER IPIV( * )
  44. REAL(dp) BERR( * ), C( * ), FERR( * ), R( * ), RWORK( * )
  45. COMPLEX(dp) A( LDA, * ), AF( LDAF, * ), B( LDB, * ), WORK( * ), &
  46. X( LDX, * )
  47. END SUBROUTINE
  48. SUBROUTINE DGBSV( N, KL, KU, NRHS, AB, LDAB, IPIV, B, LDB, INFO )
  49. import :: dp
  50. INTEGER INFO, KL, KU, LDAB, LDB, N, NRHS
  51. INTEGER IPIV( * )
  52. REAL(dp) AB( LDAB, * ), B( LDB, * )
  53. END SUBROUTINE
  54. SUBROUTINE DSYSV( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, WORK, LWORK, INFO )
  55. import :: dp
  56. CHARACTER UPLO
  57. INTEGER INFO, LDA, LDB, LWORK, N, NRHS
  58. INTEGER IPIV( * )
  59. REAL(dp) A( LDA, * ), B( LDB, * ), WORK( * )
  60. END SUBROUTINE
  61. SUBROUTINE DSYTRS( UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
  62. import :: dp
  63. CHARACTER UPLO
  64. INTEGER INFO, LDA, LDB, N, NRHS
  65. INTEGER IPIV( * )
  66. REAL(dp) A( LDA, * ), B( LDB, * )
  67. END SUBROUTINE
  68. SUBROUTINE DSYTRF( UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO )
  69. import :: dp
  70. CHARACTER UPLO
  71. INTEGER INFO, LDA, LWORK, N
  72. INTEGER IPIV( * )
  73. REAL(dp) A( LDA, * ), WORK( * )
  74. END SUBROUTINE
  75. SUBROUTINE DSYSVX( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B, &
  76. LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK, &
  77. IWORK, INFO )
  78. import :: dp
  79. CHARACTER FACT, UPLO
  80. INTEGER INFO, LDA, LDAF, LDB, LDX, LWORK, N, NRHS
  81. REAL(dp) RCOND
  82. INTEGER IPIV( * ), IWORK( * )
  83. REAL(dp) A( LDA, * ), AF( LDAF, * ), B( LDB, * ), &
  84. BERR( * ), FERR( * ), WORK( * ), X( LDX, * )
  85. END SUBROUTINE
  86. SUBROUTINE DSYEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, IWORK, &
  87. LIWORK, INFO )
  88. import :: dp
  89. CHARACTER JOBZ, UPLO
  90. INTEGER INFO, LDA, LIWORK, LWORK, N
  91. INTEGER IWORK( * )
  92. REAL(dp) A( LDA, * ), W( * ), WORK( * )
  93. END SUBROUTINE
  94. SUBROUTINE DSYGVX( ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB, &
  95. VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, &
  96. LWORK, IWORK, IFAIL, INFO )
  97. import :: dp
  98. CHARACTER JOBZ, RANGE, UPLO
  99. INTEGER IL, INFO, ITYPE, IU, LDA, LDB, LDZ, LWORK, M, N
  100. REAL(dp) ABSTOL, VL, VU
  101. INTEGER IFAIL( * ), IWORK( * )
  102. REAL(dp) A( LDA, * ), B( LDB, * ), W( * ), WORK( * ), &
  103. Z( LDZ, * )
  104. END SUBROUTINE
  105. SUBROUTINE DSYEVX( JOBZ, RANGE, UPLO, N, A, LDA, &
  106. VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, &
  107. LWORK, IWORK, IFAIL, INFO )
  108. import :: dp
  109. CHARACTER JOBZ, RANGE, UPLO
  110. INTEGER IL, INFO, IU, LDA, LDZ, LWORK, M, N
  111. REAL(dp) ABSTOL, VL, VU
  112. INTEGER IFAIL( * ), IWORK( * )
  113. REAL(dp) A( LDA, * ), W( * ), WORK( * ), &
  114. Z( LDZ, * )
  115. END SUBROUTINE
  116. SUBROUTINE DGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI, &
  117. BETA, VL, LDVL, VR, LDVR, WORK, LWORK, INFO )
  118. import :: dp
  119. CHARACTER JOBVL, JOBVR
  120. INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N
  121. REAL(dp) A( LDA, * ), ALPHAI( * ), ALPHAR( * ), &
  122. B( LDB, * ), BETA( * ), VL( LDVL, * ), &
  123. VR( LDVR, * ), WORK( * )
  124. END SUBROUTINE
  125. SUBROUTINE DGGEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, B, LDB, &
  126. ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR, ILO, IHI, &
  127. LSCALE, RSCALE, ABNRM, BBNRM, RCONDE, RCONDV, WORK, &
  128. LWORK, IWORK, BWORK, INFO )
  129. import :: dp
  130. CHARACTER BALANC, JOBVL, JOBVR, SENSE
  131. INTEGER IHI, ILO, INFO, LDA, LDB, LDVL, LDVR, LWORK, N
  132. REAL(dp) ABNRM, BBNRM
  133. LOGICAL BWORK( * )
  134. INTEGER IWORK( * )
  135. REAL(dp) A( LDA, * ), ALPHAI( * ), ALPHAR( * ), B( LDB, * ), &
  136. BETA( * ), LSCALE( * ), RCONDE( * ), RCONDV( * ), &
  137. RSCALE( * ), VL( LDVL, * ), VR( LDVR, * ), WORK( * )
  138. END SUBROUTINE
  139. SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, &
  140. LDVR, WORK, LWORK, INFO )
  141. import :: dp
  142. CHARACTER JOBVL, JOBVR
  143. INTEGER INFO, LDA, LDVL, LDVR, LWORK, N
  144. REAL(dp) A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), WI( * ), &
  145. WORK( * ), WR( * )
  146. END SUBROUTINE
  147. SUBROUTINE DGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, WR, WI, &
  148. VL, LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, &
  149. RCONDE, RCONDV, WORK, LWORK, IWORK, INFO )
  150. import :: dp
  151. CHARACTER BALANC, JOBVL, JOBVR, SENSE
  152. INTEGER IHI, ILO, INFO, LDA, LDVL, LDVR, LWORK, N
  153. REAL(dp) ABNRM
  154. INTEGER IWORK( * )
  155. REAL(dp) A( LDA, * ), RCONDE( * ), RCONDV( * ), &
  156. SCALE( * ), VL( LDVL, * ), VR( LDVR, * ), &
  157. WI( * ), WORK( * ), WR( * )
  158. END SUBROUTINE
  159. SUBROUTINE ZGEEV( JOBVL, JOBVR, N, A, LDA, W, VL, LDVL, VR, LDVR, &
  160. WORK, LWORK, RWORK, INFO )
  161. import :: dp
  162. CHARACTER JOBVL, JOBVR
  163. INTEGER INFO, LDA, LDVL, LDVR, LWORK, N
  164. REAL(dp) RWORK( * )
  165. COMPLEX(dp) A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), W( * ), &
  166. WORK( * )
  167. END SUBROUTINE
  168. SUBROUTINE ZGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, W, VL, &
  169. LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, RCONDE, &
  170. RCONDV, WORK, LWORK, RWORK, INFO )
  171. import :: dp
  172. CHARACTER BALANC, JOBVL, JOBVR, SENSE
  173. INTEGER IHI, ILO, INFO, LDA, LDVL, LDVR, LWORK, N
  174. REAL(dp) ABNRM
  175. REAL(dp) RCONDE( * ), RCONDV( * ), RWORK( * ), SCALE( * )
  176. COMPLEX(dp) A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), W( * ), &
  177. WORK( * )
  178. END SUBROUTINE
  179. SUBROUTINE DSYGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, &
  180. LWORK, IWORK, LIWORK, INFO )
  181. import :: dp
  182. CHARACTER JOBZ, UPLO
  183. INTEGER INFO, ITYPE, LDA, LDB, LIWORK, LWORK, N
  184. INTEGER IWORK( * )
  185. REAL(dp) A( LDA, * ), B( LDB, * ), W( * ), WORK( * )
  186. END SUBROUTINE
  187. REAL(dp) FUNCTION DLAMCH( CMACH )
  188. import :: dp
  189. CHARACTER CMACH
  190. END FUNCTION
  191. INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 )
  192. CHARACTER*( * ) NAME, OPTS
  193. INTEGER ISPEC, N1, N2, N3, N4
  194. END FUNCTION
  195. SUBROUTINE ZGETRF( M, N, A, LDA, IPIV, INFO )
  196. import :: dp
  197. INTEGER INFO, LDA, M, N
  198. INTEGER IPIV( * )
  199. COMPLEX(dp) A( LDA, * )
  200. END SUBROUTINE
  201. SUBROUTINE ZGETRS( TRANS, N, NRHS, A, LDA, IPIV, B, LDB, INFO )
  202. import :: dp
  203. CHARACTER TRANS
  204. INTEGER INFO, LDA, LDB, N, NRHS
  205. INTEGER IPIV( * )
  206. COMPLEX(dp) A( LDA, * ), B( LDB, * )
  207. END SUBROUTINE
  208. SUBROUTINE ZGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
  209. import :: dp
  210. INTEGER INFO, LDA, LWORK, N
  211. INTEGER IPIV( * )
  212. COMPLEX(dp) A( LDA, * ), WORK( * )
  213. END SUBROUTINE
  214. SUBROUTINE DGETRF( M, N, A, LDA, IPIV, INFO )
  215. import :: dp
  216. INTEGER INFO, LDA, M, N
  217. INTEGER IPIV( * )
  218. REAL(dp) A( LDA, * )
  219. END SUBROUTINE
  220. SUBROUTINE DGETRI( N, A, LDA, IPIV, WORK, LWORK, INFO )
  221. import :: dp
  222. INTEGER INFO, LDA, LWORK, N
  223. INTEGER IPIV( * )
  224. REAL(dp) A( LDA, * ), WORK( * )
  225. END SUBROUTINE
  226. SUBROUTINE ZHEEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, INFO )
  227. import :: dp
  228. CHARACTER JOBZ, UPLO
  229. INTEGER INFO, LDA, LWORK, N
  230. REAL(dp) RWORK( * ), W( * )
  231. COMPLEX(dp) A( LDA, * ), WORK( * )
  232. END SUBROUTINE
  233. SUBROUTINE ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, &
  234. LRWORK, IWORK, LIWORK, INFO )
  235. import :: dp
  236. CHARACTER JOBZ, UPLO
  237. INTEGER INFO, LDA, LIWORK, LRWORK, LWORK, N
  238. INTEGER IWORK( * )
  239. REAL(dp) RWORK( * ), W( * )
  240. COMPLEX(dp) A( LDA, * ), WORK( * )
  241. END SUBROUTINE
  242. SUBROUTINE ZHEGVD( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, &
  243. WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, &
  244. INFO )
  245. import :: dp
  246. CHARACTER JOBZ, UPLO
  247. INTEGER INFO, ITYPE, LDA, LDB, LIWORK, LRWORK, LWORK, N
  248. INTEGER IWORK( * )
  249. REAL(dp) RWORK( * ), W( * )
  250. COMPLEX(dp) A( LDA, * ), B( LDB, * ), WORK( * )
  251. END SUBROUTINE
  252. SUBROUTINE DGELSY( M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK, &
  253. WORK, LWORK, INFO )
  254. import :: dp
  255. INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
  256. REAL(dp) RCOND
  257. INTEGER JPVT( * )
  258. REAL(dp) A( LDA, * ), B( LDB, * ), WORK( * )
  259. END SUBROUTINE
  260. SUBROUTINE ZGELSY( M, N, NRHS, A, LDA, B, LDB, JPVT, RCOND, RANK, &
  261. WORK, LWORK, RWORK, INFO )
  262. import :: dp
  263. INTEGER INFO, LDA, LDB, LWORK, M, N, NRHS, RANK
  264. REAL(dp) RCOND
  265. INTEGER JPVT( * )
  266. REAL(dp) RWORK( * )
  267. COMPLEX(dp) A( LDA, * ), B( LDB, * ), WORK( * )
  268. END SUBROUTINE
  269. SUBROUTINE DGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, &
  270. LDVT, WORK, LWORK, INFO )
  271. import :: dp
  272. CHARACTER JOBU, JOBVT
  273. INTEGER INFO, LDA, LDU, LDVT, LWORK, M, N
  274. REAL(dp) A( LDA, * ), S( * ), U( LDU, * ), VT( LDVT, * ), &
  275. WORK( * )
  276. END SUBROUTINE
  277. SUBROUTINE ZGESVD( JOBU, JOBVT, M, N, A, LDA, S, U, LDU, VT, LDVT, &
  278. WORK, LWORK, RWORK, INFO )
  279. import :: dp
  280. CHARACTER JOBU, JOBVT
  281. INTEGER INFO, LDA, LDU, LDVT, LWORK, M, N
  282. REAL(dp) RWORK( * ), S( * )
  283. COMPLEX(dp) A( LDA, * ), U( LDU, * ), VT( LDVT, * ), WORK( * )
  284. END SUBROUTINE
  285. SUBROUTINE DSTEVD( JOBZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, &
  286. LIWORK, INFO )
  287. import :: dp
  288. CHARACTER JOBZ
  289. INTEGER INFO, LDZ, LIWORK, LWORK, N
  290. INTEGER IWORK( * )
  291. REAL(dp) D( * ), E( * ), WORK( * ), Z( LDZ, * )
  292. END SUBROUTINE
  293. SUBROUTINE XERBLA( SRNAME, INFO )
  294. CHARACTER*(*) SRNAME
  295. INTEGER INFO
  296. END SUBROUTINE
  297. ! BLAS
  298. SUBROUTINE ZCOPY(N,ZX,INCX,ZY,INCY)
  299. import :: dp
  300. INTEGER INCX,INCY,N
  301. COMPLEX(dp) ZX(*),ZY(*)
  302. END SUBROUTINE
  303. SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY)
  304. import :: dp
  305. integer :: INCX, INCY, N
  306. real(dp) :: DA, DX(*), DY(*)
  307. END SUBROUTINE
  308. SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  309. import :: dp
  310. DOUBLE PRECISION ALPHA,BETA
  311. INTEGER K,LDA,LDB,LDC,M,N
  312. CHARACTER TRANSA,TRANSB
  313. REAL(dp) A(LDA,*),B(LDB,*),C(LDC,*)
  314. END SUBROUTINE
  315. real(dp) FUNCTION DNRM2(N,X,INCX)
  316. import :: dp
  317. integer :: INCX, N
  318. real(dp) :: X(*)
  319. END FUNCTION
  320. SUBROUTINE DSCAL(N,DA,DX,INCX)
  321. import :: dp
  322. real(dp) :: DA, DX(*)
  323. integer :: INCX, N
  324. END SUBROUTINE
  325. SUBROUTINE DSYMM(SIDE,UPLO,M,N,ALPHA,A,LDA,B,LDB,BETA,C,LDC)
  326. import :: dp
  327. REAL(dp) ALPHA,BETA
  328. INTEGER LDA,LDB,LDC,M,N
  329. CHARACTER SIDE,UPLO
  330. REAL(dp) A(LDA,*),B(LDB,*),C(LDC,*)
  331. END SUBROUTINE
  332. SUBROUTINE DGEQRF(M, N, A, LDA, TAU, WORK, LWORK, INFO)
  333. import :: dp
  334. INTEGER INFO, LDA, LWORK, M, N
  335. REAL(dp) A(LDA, *), TAU(*), WORK(*)
  336. END SUBROUTINE
  337. SUBROUTINE DORGQR(M, N, K, A, LDA, TAU, WORK, LWORK, INFO)
  338. import :: dp
  339. INTEGER INFO, K, LDA, LWORK, M, N
  340. REAL(dp) A(LDA,*), TAU(*), WORK(*)
  341. END SUBROUTINE
  342. SUBROUTINE DPOTRF( UPLO, N, A, LDA, INFO )
  343. import :: dp
  344. CHARACTER UPLO
  345. INTEGER INFO, LDA, N
  346. REAL(dp) A( LDA, * )
  347. END SUBROUTINE
  348. SUBROUTINE DTRTRS( UPLO, TRANS, DIAG, N, NRHS, A, LDA, B, LDB, INFO )
  349. import :: dp
  350. CHARACTER DIAG, TRANS, UPLO
  351. INTEGER INFO, LDA, LDB, N, NRHS
  352. REAL(dp) A( LDA, * ), B( LDB, * )
  353. END SUBROUTINE
  354. end interface
  355. contains
  356. end module