mkl_rci.f90 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576
  1. !===============================================================================
  2. ! Copyright 2005-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 preconditioners,
  16. ! RCI ISS and TR solvers routines
  17. !******************************************************************************
  18. MODULE MKL_RCI_TYPE
  19. TYPE , PUBLIC :: HANDLE_TR
  20. INTEGER N
  21. INTEGER M
  22. INTEGER*8 HANDLE
  23. END TYPE HANDLE_TR
  24. END MODULE
  25. MODULE MKL_RCI
  26. USE MKL_RCI_TYPE
  27. ! PARAMETERS
  28. INTEGER(KIND=4), PARAMETER :: TR_SUCCESS = 1501
  29. INTEGER(KIND=4), PARAMETER :: TR_INVALID_OPTION = 1502
  30. INTEGER(KIND=4), PARAMETER :: TR_OUT_OF_MEMORY = 1503
  31. ! SUBROUTINES
  32. INTERFACE
  33. SUBROUTINE DCG(n,x,b,rci_request,ipar,dpar,tmp)
  34. INTEGER, INTENT(IN) :: n
  35. INTEGER, INTENT(OUT) :: rci_request
  36. INTEGER, INTENT(INOUT), DIMENSION(*) :: ipar
  37. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: x
  38. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: b
  39. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: dpar
  40. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(n,*) :: tmp
  41. END SUBROUTINE
  42. END INTERFACE
  43. INTERFACE
  44. SUBROUTINE DCG_INIT(n,x,b,rci_request,ipar,dpar,tmp)
  45. INTEGER, INTENT(IN) :: n
  46. INTEGER, INTENT(OUT) :: rci_request
  47. INTEGER, INTENT(OUT), DIMENSION(*) :: ipar
  48. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  49. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: b
  50. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: dpar
  51. DOUBLE PRECISION, INTENT(OUT), DIMENSION(n,*) :: tmp
  52. END SUBROUTINE
  53. END INTERFACE
  54. INTERFACE
  55. SUBROUTINE DCG_CHECK(n,x,b,rci_request,ipar,dpar,tmp)
  56. INTEGER, INTENT(IN) :: n
  57. INTEGER, INTENT(OUT) :: rci_request
  58. INTEGER, INTENT(INOUT), DIMENSION(*) :: ipar
  59. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  60. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: b
  61. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: dpar
  62. DOUBLE PRECISION, INTENT(OUT), DIMENSION(n,*) :: tmp
  63. END SUBROUTINE
  64. END INTERFACE
  65. INTERFACE
  66. SUBROUTINE DCG_GET(n,x,b,rci_request,ipar,dpar,tmp,itercount)
  67. INTEGER, INTENT(IN) :: n
  68. INTEGER, INTENT(IN) :: rci_request
  69. INTEGER, INTENT(OUT) :: itercount
  70. INTEGER, INTENT(IN), DIMENSION(*) :: ipar
  71. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  72. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: b
  73. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: dpar
  74. DOUBLE PRECISION, INTENT(IN), DIMENSION(n,*) :: tmp
  75. END SUBROUTINE
  76. END INTERFACE
  77. INTERFACE
  78. SUBROUTINE DCSRILU0(n,a,ia,ja,alu,ipar,dpar,ierr)
  79. INTEGER, INTENT(IN) :: n
  80. INTEGER, INTENT(OUT) :: ierr
  81. INTEGER, INTENT(IN), DIMENSION(*) :: ia, ja, ipar
  82. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: a, dpar
  83. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: alu
  84. END SUBROUTINE
  85. END INTERFACE
  86. INTERFACE
  87. SUBROUTINE DCSRILUT(n,a,ia,ja,alut,ialut,jalut,tol,maxfil,ipar,dpar,ierr)
  88. INTEGER, INTENT(IN) :: n, maxfil
  89. INTEGER, INTENT(OUT) :: ierr
  90. DOUBLE PRECISION, INTENT(IN) :: tol
  91. INTEGER, INTENT(IN), DIMENSION(*) :: ia, ja, ipar
  92. INTEGER, INTENT(OUT), DIMENSION(*) :: jalut, ialut
  93. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: alut
  94. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: a, dpar
  95. END SUBROUTINE
  96. END INTERFACE
  97. INTERFACE
  98. SUBROUTINE DFGMRES(n,x,b,rci_request,ipar,dpar,tmp)
  99. INTEGER, INTENT(IN) :: n
  100. INTEGER, INTENT(OUT) :: rci_request
  101. INTEGER, INTENT(INOUT), DIMENSION(*) :: ipar
  102. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: x
  103. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: b
  104. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: dpar
  105. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: tmp
  106. END SUBROUTINE
  107. END INTERFACE
  108. INTERFACE
  109. SUBROUTINE DFGMRES_INIT(n,x,b,rci_request,ipar,dpar,tmp)
  110. INTEGER, INTENT(IN) :: n
  111. INTEGER, INTENT(OUT) :: rci_request
  112. INTEGER, INTENT(OUT), DIMENSION(*) :: ipar
  113. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  114. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: b
  115. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: dpar
  116. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: tmp
  117. END SUBROUTINE
  118. END INTERFACE
  119. INTERFACE
  120. SUBROUTINE DFGMRES_CHECK(n,x,b,rci_request,ipar,dpar,tmp)
  121. INTEGER, INTENT(IN) :: n
  122. INTEGER, INTENT(OUT) :: rci_request
  123. INTEGER, INTENT(INOUT), DIMENSION(*) :: ipar
  124. DOUBLE PRECISION, INTENT(IN) , DIMENSION(*) :: x
  125. DOUBLE PRECISION, INTENT(IN) , DIMENSION(*) :: b
  126. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: dpar
  127. DOUBLE PRECISION, INTENT(OUT) , DIMENSION(*) :: tmp
  128. END SUBROUTINE
  129. END INTERFACE
  130. INTERFACE
  131. SUBROUTINE DFGMRES_GET(n,x,b,rci_request,ipar,dpar,tmp,itercount)
  132. INTEGER, INTENT(IN) :: n
  133. INTEGER, INTENT(OUT) :: rci_request
  134. INTEGER, INTENT(OUT) :: itercount
  135. INTEGER, INTENT(IN), DIMENSION(*) :: ipar
  136. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: x
  137. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: b
  138. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: dpar
  139. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: tmp
  140. END SUBROUTINE
  141. END INTERFACE
  142. INTERFACE
  143. SUBROUTINE DCGMRHS(n,x,nRhs,b,rci_request,ipar,dpar,tmp)
  144. INTEGER, INTENT(IN) :: n
  145. INTEGER, INTENT(IN) :: nRhs
  146. INTEGER, INTENT(OUT) :: rci_request
  147. INTEGER, INTENT(INOUT), DIMENSION(*) :: ipar
  148. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(n,*) :: x
  149. DOUBLE PRECISION, INTENT(IN), DIMENSION(nRhs,*) :: b
  150. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(n,*) :: tmp
  151. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: dpar
  152. END SUBROUTINE
  153. END INTERFACE
  154. INTERFACE
  155. SUBROUTINE DCGMRHS_INIT(n,x,nRhs,b,method,rci_request,ipar,dpar,tmp)
  156. INTEGER, INTENT(IN) :: n
  157. INTEGER, INTENT(IN) :: nRhs
  158. INTEGER, INTENT(IN) :: method
  159. INTEGER, INTENT(OUT) :: rci_request
  160. INTEGER, INTENT(OUT), DIMENSION(*) :: ipar
  161. DOUBLE PRECISION, INTENT(IN), DIMENSION(n,*) :: x
  162. DOUBLE PRECISION, INTENT(IN), DIMENSION(nRhs,*) :: b
  163. DOUBLE PRECISION, INTENT(OUT), DIMENSION(n,*) :: tmp
  164. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: dpar
  165. END SUBROUTINE
  166. END INTERFACE
  167. INTERFACE
  168. SUBROUTINE DCGMRHS_CHECK(n,x,nRhs,b,rci_request,ipar,dpar,tmp)
  169. INTEGER, INTENT(IN) :: n
  170. INTEGER, INTENT(IN) :: nRhs
  171. INTEGER, INTENT(OUT) :: rci_request
  172. INTEGER, INTENT(INOUT), DIMENSION(*) :: ipar
  173. DOUBLE PRECISION, INTENT(IN), DIMENSION(n,*) :: x
  174. DOUBLE PRECISION, INTENT(IN), DIMENSION(nRhs,*) :: b
  175. DOUBLE PRECISION, INTENT(OUT), DIMENSION(n,*) :: tmp
  176. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: dpar
  177. END SUBROUTINE
  178. END INTERFACE
  179. INTERFACE
  180. SUBROUTINE DCGMRHS_GET(n,x,nRhs,b,rci_request,ipar,dpar,tmp,itercount)
  181. INTEGER, INTENT(IN) :: n
  182. INTEGER, INTENT(IN) :: nRhs
  183. INTEGER, INTENT(IN) :: rci_request
  184. INTEGER, INTENT(OUT) :: itercount
  185. INTEGER, INTENT(IN), DIMENSION(*) :: ipar
  186. DOUBLE PRECISION, INTENT(IN), DIMENSION(n,*) :: x
  187. DOUBLE PRECISION, INTENT(IN), DIMENSION(nRhs,*) :: b
  188. DOUBLE PRECISION, INTENT(IN), DIMENSION(n,*) :: tmp
  189. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: dpar
  190. END SUBROUTINE
  191. END INTERFACE
  192. ! FUNCTIONS
  193. INTERFACE
  194. INTEGER FUNCTION DTRNLSP_INIT(handle, n, m, x, eps, iter1, iter2, rs)
  195. USE MKL_RCI_TYPE
  196. INTEGER, INTENT(IN) :: n
  197. INTEGER, INTENT(IN) :: m
  198. INTEGER, INTENT(IN) :: iter1
  199. INTEGER, INTENT(IN) :: iter2
  200. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  201. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: eps
  202. DOUBLE PRECISION, INTENT(IN) :: rs
  203. TYPE(HANDLE_TR), INTENT(OUT) :: handle
  204. END FUNCTION
  205. END INTERFACE
  206. INTERFACE
  207. INTEGER FUNCTION DTRNLSP_CHECK(handle, n, m, fjac, fvec, eps, info)
  208. USE MKL_RCI_TYPE
  209. INTEGER, INTENT(IN) :: n
  210. INTEGER, INTENT(IN) :: m
  211. INTEGER, INTENT(OUT), DIMENSION(*):: info
  212. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: fvec
  213. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: eps
  214. DOUBLE PRECISION, INTENT(IN), DIMENSION(m, *) :: fjac
  215. TYPE(HANDLE_TR), INTENT(IN) :: handle
  216. END FUNCTION
  217. END INTERFACE
  218. INTERFACE
  219. INTEGER FUNCTION DTRNLSP_SOLVE(handle, fvec, fjac, rci_request)
  220. USE MKL_RCI_TYPE
  221. INTEGER, INTENT(OUT) :: rci_request
  222. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: fvec
  223. TYPE(HANDLE_TR), INTENT(IN) :: handle
  224. DOUBLE PRECISION, INTENT(IN), DIMENSION(handle%m, *) :: fjac
  225. END FUNCTION
  226. END INTERFACE
  227. INTERFACE
  228. INTEGER FUNCTION DTRNLSP_GET(handle, iter, st_cr, r1, r2)
  229. USE MKL_RCI_TYPE
  230. INTEGER, INTENT(OUT) :: iter
  231. INTEGER, INTENT(OUT) :: st_cr
  232. DOUBLE PRECISION, INTENT(OUT) :: r1
  233. DOUBLE PRECISION, INTENT(OUT) :: r2
  234. TYPE(HANDLE_TR), INTENT(IN) :: handle
  235. END FUNCTION
  236. END INTERFACE
  237. INTERFACE
  238. INTEGER FUNCTION DTRNLSP_DELETE(handle)
  239. USE MKL_RCI_TYPE
  240. TYPE(HANDLE_TR), INTENT(INOUT) :: handle
  241. END FUNCTION
  242. END INTERFACE
  243. INTERFACE
  244. INTEGER FUNCTION DTRNLSPBC_INIT(handle, n, m, x, low, up, e, iter1, iter2, rs)
  245. USE MKL_RCI_TYPE
  246. INTEGER, INTENT(IN) :: n
  247. INTEGER, INTENT(IN) :: m
  248. INTEGER, INTENT(IN) :: iter1
  249. INTEGER, INTENT(IN) :: iter2
  250. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  251. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: low
  252. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: up
  253. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: e
  254. DOUBLE PRECISION, INTENT(IN) :: rs
  255. TYPE(HANDLE_TR), INTENT(OUT) :: handle
  256. END FUNCTION
  257. END INTERFACE
  258. INTERFACE
  259. INTEGER FUNCTION DTRNLSPBC_CHECK(handle, n, m, fjac, fvec, low, up, eps, info)
  260. USE MKL_RCI_TYPE
  261. INTEGER, INTENT(IN) :: n
  262. INTEGER, INTENT(IN) :: m
  263. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: fvec
  264. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: low
  265. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: up
  266. DOUBLE PRECISION, INTENT(IN), DIMENSION(m, *) :: fjac
  267. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: eps
  268. INTEGER, INTENT(OUT), DIMENSION(*):: info
  269. TYPE(HANDLE_TR), INTENT(IN) :: handle
  270. END FUNCTION
  271. END INTERFACE
  272. INTERFACE
  273. INTEGER FUNCTION DTRNLSPBC_SOLVE(handle, fvec, fjac, rci_request)
  274. USE MKL_RCI_TYPE
  275. INTEGER, INTENT(OUT) :: rci_request
  276. DOUBLE PRECISION, INTENT(INOUT), DIMENSION(*) :: fvec
  277. TYPE(HANDLE_TR), INTENT(IN) :: handle
  278. DOUBLE PRECISION, INTENT(IN), DIMENSION(handle%m, *) :: fjac
  279. END FUNCTION
  280. END INTERFACE
  281. INTERFACE
  282. INTEGER FUNCTION DTRNLSPBC_GET(handle, iter, st_cr, r1, r2)
  283. USE MKL_RCI_TYPE
  284. INTEGER, INTENT(OUT) :: iter
  285. INTEGER, INTENT(OUT) :: st_cr
  286. DOUBLE PRECISION, INTENT(OUT) :: r1
  287. DOUBLE PRECISION, INTENT(OUT) :: r2
  288. TYPE(HANDLE_TR), INTENT(IN) :: handle
  289. END FUNCTION
  290. END INTERFACE
  291. INTERFACE
  292. INTEGER FUNCTION DTRNLSPBC_DELETE(handle)
  293. USE MKL_RCI_TYPE
  294. TYPE(HANDLE_TR), INTENT(INOUT) :: handle
  295. END FUNCTION
  296. END INTERFACE
  297. INTERFACE
  298. INTEGER FUNCTION DJACOBI_INIT(handle, n, m, x, fjac, eps)
  299. INTEGER, INTENT(IN) :: n
  300. INTEGER, INTENT(IN) :: m
  301. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  302. DOUBLE PRECISION, INTENT(IN), DIMENSION(m, *) :: fjac
  303. DOUBLE PRECISION, INTENT(IN) :: eps
  304. INTEGER(KIND=8), INTENT(OUT) :: handle
  305. END FUNCTION
  306. END INTERFACE
  307. INTERFACE
  308. INTEGER FUNCTION DJACOBI_SOLVE(handle, f1, f2, rci_request)
  309. INTEGER, INTENT(OUT) :: rci_request
  310. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: f1
  311. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: f2
  312. INTEGER(KIND=8), INTENT(IN) :: handle
  313. END FUNCTION
  314. END INTERFACE
  315. INTERFACE
  316. INTEGER FUNCTION DJACOBI_DELETE(handle)
  317. INTEGER(KIND=8), INTENT(INOUT) :: handle
  318. END FUNCTION
  319. END INTERFACE
  320. INTERFACE
  321. INTEGER FUNCTION DJACOBI(fcn, n, m, fjac, x, eps)
  322. INTEGER, INTENT(IN) :: n
  323. INTEGER, INTENT(IN) :: m
  324. DOUBLE PRECISION, INTENT(IN) :: eps
  325. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  326. DOUBLE PRECISION, INTENT(OUT), DIMENSION(m, *) :: fjac
  327. INTERFACE
  328. SUBROUTINE fcn(m, n, x, f)
  329. INTEGER, INTENT(IN) :: n
  330. INTEGER, INTENT(IN) :: m
  331. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  332. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: f
  333. END SUBROUTINE
  334. END INTERFACE
  335. END FUNCTION
  336. END INTERFACE
  337. INTERFACE
  338. INTEGER FUNCTION DJACOBIX(fcn, n, m, fjac, x, eps, user_data)
  339. USE, INTRINSIC :: ISO_C_BINDING
  340. INTEGER, INTENT(IN) :: n
  341. INTEGER, INTENT(IN) :: m
  342. DOUBLE PRECISION, INTENT(IN) :: eps
  343. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  344. DOUBLE PRECISION, INTENT(OUT), DIMENSION(m, *) :: fjac
  345. INTEGER(C_INTPTR_T) :: user_data
  346. INTERFACE
  347. SUBROUTINE fcn(m, n, x, f, user_data)
  348. USE, INTRINSIC :: ISO_C_BINDING
  349. INTEGER, INTENT(IN) :: n
  350. INTEGER, INTENT(IN) :: m
  351. DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: x
  352. DOUBLE PRECISION, INTENT(OUT), DIMENSION(*) :: f
  353. INTEGER(C_INTPTR_T), INTENT(IN) :: user_data
  354. END SUBROUTINE
  355. END INTERFACE
  356. END FUNCTION
  357. END INTERFACE
  358. INTERFACE
  359. INTEGER FUNCTION STRNLSP_INIT(handle, n, m, x, eps, iter1, iter2, rs)
  360. USE MKL_RCI_TYPE
  361. INTEGER, INTENT(IN) :: n
  362. INTEGER, INTENT(IN) :: m
  363. INTEGER, INTENT(IN) :: iter1
  364. INTEGER, INTENT(IN) :: iter2
  365. REAL, INTENT(IN), DIMENSION(*) :: x
  366. REAL, INTENT(IN), DIMENSION(*) :: eps
  367. REAL, INTENT(IN) :: rs
  368. TYPE(HANDLE_TR), INTENT(OUT) :: handle
  369. END FUNCTION
  370. END INTERFACE
  371. INTERFACE
  372. INTEGER FUNCTION STRNLSP_CHECK(handle, n, m, fjac, fvec, eps, info)
  373. USE MKL_RCI_TYPE
  374. INTEGER, INTENT(IN) :: n
  375. INTEGER, INTENT(IN) :: m
  376. INTEGER, INTENT(OUT), DIMENSION(*):: info
  377. REAL, INTENT(IN), DIMENSION(*) :: fvec
  378. REAL, INTENT(IN), DIMENSION(*) :: eps
  379. REAL, INTENT(IN), DIMENSION(m, *) :: fjac
  380. TYPE(HANDLE_TR), INTENT(IN) :: handle
  381. END FUNCTION
  382. END INTERFACE
  383. INTERFACE
  384. INTEGER FUNCTION STRNLSP_SOLVE(handle, fvec, fjac, rci_request)
  385. USE MKL_RCI_TYPE
  386. INTEGER, INTENT(OUT) :: rci_request
  387. REAL, INTENT(INOUT), DIMENSION(*) :: fvec
  388. TYPE(HANDLE_TR), INTENT(IN) :: handle
  389. REAL, INTENT(IN), DIMENSION(handle%m, *) :: fjac
  390. END FUNCTION
  391. END INTERFACE
  392. INTERFACE
  393. INTEGER FUNCTION STRNLSP_GET(handle, iter, st_cr, r1, r2)
  394. USE MKL_RCI_TYPE
  395. INTEGER, INTENT(OUT) :: iter
  396. INTEGER, INTENT(OUT) :: st_cr
  397. REAL, INTENT(OUT) :: r1
  398. REAL, INTENT(OUT) :: r2
  399. TYPE(HANDLE_TR), INTENT(IN) :: handle
  400. END FUNCTION
  401. END INTERFACE
  402. INTERFACE
  403. INTEGER FUNCTION STRNLSP_DELETE(handle)
  404. USE MKL_RCI_TYPE
  405. TYPE(HANDLE_TR), INTENT(IN) :: handle
  406. END FUNCTION
  407. END INTERFACE
  408. INTERFACE
  409. INTEGER FUNCTION STRNLSPBC_INIT(handle, n, m, x, low, up, e, iter1, iter2, rs)
  410. USE MKL_RCI_TYPE
  411. INTEGER, INTENT(IN) :: n
  412. INTEGER, INTENT(IN) :: m
  413. INTEGER, INTENT(IN) :: iter1
  414. INTEGER, INTENT(IN) :: iter2
  415. REAL, INTENT(IN), DIMENSION(*) :: x
  416. REAL, INTENT(IN), DIMENSION(*) :: low
  417. REAL, INTENT(IN), DIMENSION(*) :: up
  418. REAL, INTENT(IN), DIMENSION(*) :: e
  419. REAL, INTENT(IN) :: rs
  420. TYPE(HANDLE_TR), INTENT(OUT) :: handle
  421. END FUNCTION
  422. END INTERFACE
  423. INTERFACE
  424. INTEGER FUNCTION STRNLSPBC_CHECK(handle, n, m, fjac, fvec, low, up, eps, info)
  425. USE MKL_RCI_TYPE
  426. INTEGER, INTENT(IN) :: n
  427. INTEGER, INTENT(IN) :: m
  428. REAL, INTENT(IN), DIMENSION(*) :: fvec
  429. REAL, INTENT(IN), DIMENSION(*) :: low
  430. REAL, INTENT(IN), DIMENSION(*) :: up
  431. REAL, INTENT(IN), DIMENSION(m, *) :: fjac
  432. REAL, INTENT(IN), DIMENSION(*) :: eps
  433. INTEGER, INTENT(OUT), DIMENSION(*):: info
  434. TYPE(HANDLE_TR), INTENT(OUT) :: handle
  435. END FUNCTION
  436. END INTERFACE
  437. INTERFACE
  438. INTEGER FUNCTION STRNLSPBC_SOLVE(handle, fvec, fjac, rci_request)
  439. USE MKL_RCI_TYPE
  440. INTEGER, INTENT(OUT) :: rci_request
  441. REAL, INTENT(INOUT), DIMENSION(*) :: fvec
  442. TYPE(HANDLE_TR), INTENT(IN) :: handle
  443. REAL, INTENT(IN), DIMENSION(handle%m, *) :: fjac
  444. END FUNCTION
  445. END INTERFACE
  446. INTERFACE
  447. INTEGER FUNCTION STRNLSPBC_GET(handle, iter, st_cr, r1, r2)
  448. USE MKL_RCI_TYPE
  449. INTEGER, INTENT(OUT) :: iter
  450. INTEGER, INTENT(OUT) :: st_cr
  451. REAL, INTENT(OUT) :: r1
  452. REAL, INTENT(OUT) :: r2
  453. TYPE(HANDLE_TR), INTENT(IN) :: handle
  454. END FUNCTION
  455. END INTERFACE
  456. INTERFACE
  457. INTEGER FUNCTION STRNLSPBC_DELETE(handle)
  458. USE MKL_RCI_TYPE
  459. TYPE(HANDLE_TR), INTENT(IN) :: handle
  460. END FUNCTION
  461. END INTERFACE
  462. INTERFACE
  463. INTEGER FUNCTION SJACOBI_INIT(handle, n, m, x, fjac, eps)
  464. INTEGER, INTENT(IN) :: n
  465. INTEGER, INTENT(IN) :: m
  466. REAL, INTENT(IN), DIMENSION(*) :: x
  467. REAL, INTENT(IN), DIMENSION(m, *) :: fjac
  468. REAL, INTENT(IN) :: eps
  469. INTEGER(KIND=8), INTENT(OUT) :: handle
  470. END FUNCTION
  471. END INTERFACE
  472. INTERFACE
  473. INTEGER FUNCTION SJACOBI_SOLVE(handle, f1, f2, rci_request)
  474. INTEGER, INTENT(OUT) :: rci_request
  475. REAL, INTENT(OUT), DIMENSION(*) :: f1
  476. REAL, INTENT(OUT), DIMENSION(*) :: f2
  477. INTEGER(KIND=8), INTENT(IN) :: handle
  478. END FUNCTION
  479. END INTERFACE
  480. INTERFACE
  481. INTEGER FUNCTION SJACOBI_DELETE(handle)
  482. INTEGER(KIND=8), INTENT(IN) :: handle
  483. END FUNCTION
  484. END INTERFACE
  485. INTERFACE
  486. INTEGER FUNCTION SJACOBI(fcn, n, m, fjac, x, eps)
  487. INTEGER, INTENT(IN) :: n
  488. INTEGER, INTENT(IN) :: m
  489. REAL, INTENT(IN) :: eps
  490. REAL, INTENT(IN), DIMENSION(*) :: x
  491. REAL, INTENT(OUT), DIMENSION(m, *) :: fjac
  492. INTERFACE
  493. SUBROUTINE fcn(m, n, x, f)
  494. INTEGER, INTENT(IN) :: n
  495. INTEGER, INTENT(IN) :: m
  496. REAL, INTENT(IN), DIMENSION(*) :: x
  497. REAL, INTENT(OUT), DIMENSION(*) :: f
  498. END SUBROUTINE
  499. END INTERFACE
  500. END FUNCTION
  501. END INTERFACE
  502. INTERFACE
  503. INTEGER FUNCTION SJACOBIX(fcn, n, m, fjac, x, eps, user_data)
  504. USE, INTRINSIC :: ISO_C_BINDING
  505. INTEGER, INTENT(IN) :: n
  506. INTEGER, INTENT(IN) :: m
  507. REAL, INTENT(IN) :: eps
  508. REAL, INTENT(IN), DIMENSION(*) :: x
  509. REAL, INTENT(OUT), DIMENSION(m, *) :: fjac
  510. INTEGER(C_INTPTR_T) :: user_data
  511. INTERFACE
  512. SUBROUTINE fcn(m, n, x, f, user_data)
  513. USE, INTRINSIC :: ISO_C_BINDING
  514. INTEGER, INTENT(IN) :: n
  515. INTEGER, INTENT(IN) :: m
  516. REAL, INTENT(IN), DIMENSION(*) :: x
  517. REAL, INTENT(OUT), DIMENSION(*) :: f
  518. INTEGER(C_INTPTR_T), INTENT(IN) :: user_data
  519. END SUBROUTINE
  520. END INTERFACE
  521. END FUNCTION
  522. END INTERFACE
  523. END MODULE