mkl_cdft.f90 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733
  1. !===============================================================================
  2. ! Copyright 2002-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) interface for Cluster DFT routines
  16. !*******************************************************************************
  17. ! Include to build module MKL_DFTI
  18. INCLUDE 'mkl_dfti.f90'
  19. ! Definition of module MKL_CDFT_DM_TYPE. It is used just to define type DFTI_DESCRIPTOR_DM
  20. MODULE MKL_CDFT_DM_TYPE
  21. ! Definition of descriptor.
  22. ! Structure of this type is not used in Fortran code. The pointer to this type is used only
  23. TYPE DFTI_DESCRIPTOR_DM
  24. PRIVATE
  25. INTEGER(4) DESCRIPTOR
  26. END TYPE
  27. END MODULE
  28. ! Definition of module MKL_CDFT. It is used to define constants and interfaces of routines
  29. MODULE MKL_CDFT
  30. ! Module MKL_CDFT includes definitions from module MKL_DFTI and MKL_CDFT_DM_TYPE
  31. USE MKL_DFTI
  32. USE MKL_CDFT_DM_TYPE
  33. IMPLICIT NONE
  34. ! Codes of parameters for DftiGetValueDM / DftiSetValueDM
  35. INTEGER, PARAMETER :: CDFT_LOCAL_SIZE =1000
  36. INTEGER, PARAMETER :: CDFT_LOCAL_X_START =1001
  37. INTEGER, PARAMETER :: CDFT_LOCAL_NX =1002
  38. INTEGER, PARAMETER :: CDFT_MPI_COMM =1003
  39. INTEGER, PARAMETER :: CDFT_WORKSPACE =1004
  40. INTEGER, PARAMETER :: CDFT_LOCAL_OUT_X_START =1005
  41. INTEGER, PARAMETER :: CDFT_LOCAL_OUT_NX =1006
  42. ! Codes of errors
  43. INTEGER, PARAMETER :: CDFT_MPI_ERROR =1000
  44. INTEGER, PARAMETER :: CDFT_SPREAD_ERROR =1001
  45. ! Interfaces of routines
  46. INTERFACE DftiCreateDescriptorDM
  47. MODULE PROCEDURE DftiCreateDescriptorDM1
  48. MODULE PROCEDURE DftiCreateDescriptorDMn
  49. MODULE PROCEDURE DftiCreateDescriptorDM1_s
  50. MODULE PROCEDURE DftiCreateDescriptorDM1_d
  51. MODULE PROCEDURE DftiCreateDescriptorDMn_s
  52. MODULE PROCEDURE DftiCreateDescriptorDMn_d
  53. END INTERFACE
  54. PRIVATE DftiCreateDescriptorDM1
  55. PRIVATE DftiCreateDescriptorDMn
  56. PRIVATE DftiCreateDescriptorDM1_s
  57. PRIVATE DftiCreateDescriptorDM1_d
  58. PRIVATE DftiCreateDescriptorDMn_s
  59. PRIVATE DftiCreateDescriptorDMn_d
  60. INTERFACE DftiGetValueDM
  61. MODULE PROCEDURE DftiGetValueDMs
  62. MODULE PROCEDURE DftiGetValueDMd
  63. MODULE PROCEDURE DftiGetValueDMi
  64. END INTERFACE
  65. PRIVATE DftiGetValueDMs
  66. PRIVATE DftiGetValueDMd
  67. PRIVATE DftiGetValueDMi
  68. INTERFACE DftiSetValueDM
  69. MODULE PROCEDURE DftiSetValueDMs
  70. MODULE PROCEDURE DftiSetValueDMd
  71. MODULE PROCEDURE DftiSetValueDMi
  72. MODULE PROCEDURE DftiSetValueDMpc
  73. MODULE PROCEDURE DftiSetValueDMpz
  74. MODULE PROCEDURE DftiSetValueDMps
  75. MODULE PROCEDURE DftiSetValueDMpd
  76. MODULE PROCEDURE DftiSetValueDMpi
  77. END INTERFACE
  78. PRIVATE DftiSetValueDMs
  79. PRIVATE DftiSetValueDMd
  80. PRIVATE DftiSetValueDMi
  81. PRIVATE DftiSetValueDMpc
  82. PRIVATE DftiSetValueDMpz
  83. PRIVATE DftiSetValueDMps
  84. PRIVATE DftiSetValueDMpd
  85. PRIVATE DftiSetValueDMpi
  86. INTERFACE DftiCommitDescriptorDM
  87. INTEGER FUNCTION DftiCommitDescriptorDM_internal(H)
  88. USE MKL_CDFT_DM_TYPE
  89. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  90. END FUNCTION
  91. END INTERFACE
  92. PRIVATE DftiCommitDescriptorDM_internal
  93. INTERFACE DftiComputeForwardDM
  94. MODULE PROCEDURE DftiComputeForwardDMos
  95. MODULE PROCEDURE DftiComputeForwardDMod
  96. MODULE PROCEDURE DftiComputeForwardDMoc
  97. MODULE PROCEDURE DftiComputeForwardDMoz
  98. MODULE PROCEDURE DftiComputeForwardDMis
  99. MODULE PROCEDURE DftiComputeForwardDMid
  100. MODULE PROCEDURE DftiComputeForwardDMic
  101. MODULE PROCEDURE DftiComputeForwardDMiz
  102. END INTERFACE
  103. PRIVATE DftiComputeForwardDMos
  104. PRIVATE DftiComputeForwardDMod
  105. PRIVATE DftiComputeForwardDMoc
  106. PRIVATE DftiComputeForwardDMoz
  107. PRIVATE DftiComputeForwardDMis
  108. PRIVATE DftiComputeForwardDMid
  109. PRIVATE DftiComputeForwardDMic
  110. PRIVATE DftiComputeForwardDMiz
  111. INTERFACE DftiComputeBackwardDM
  112. MODULE PROCEDURE DftiComputeBackwardDMos
  113. MODULE PROCEDURE DftiComputeBackwardDMod
  114. MODULE PROCEDURE DftiComputeBackwardDMoc
  115. MODULE PROCEDURE DftiComputeBackwardDMoz
  116. MODULE PROCEDURE DftiComputeBackwardDMis
  117. MODULE PROCEDURE DftiComputeBackwardDMid
  118. MODULE PROCEDURE DftiComputeBackwardDMic
  119. MODULE PROCEDURE DftiComputeBackwardDMiz
  120. END INTERFACE
  121. PRIVATE DftiComputeBackwardDMos
  122. PRIVATE DftiComputeBackwardDMod
  123. PRIVATE DftiComputeBackwardDMoc
  124. PRIVATE DftiComputeBackwardDMoz
  125. PRIVATE DftiComputeBackwardDMis
  126. PRIVATE DftiComputeBackwardDMid
  127. PRIVATE DftiComputeBackwardDMic
  128. PRIVATE DftiComputeBackwardDMiz
  129. INTERFACE DftiFreeDescriptorDM
  130. INTEGER FUNCTION DftiFreeDescriptorDM_internal(H)
  131. USE MKL_CDFT_DM_TYPE
  132. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  133. END FUNCTION
  134. END INTERFACE
  135. PRIVATE DftiFreeDescriptorDM_internal
  136. CONTAINS
  137. !INTERFACE DftiCreateDescriptorDM
  138. ! overloading of DftiCreateDescriptorDM for nD DFT
  139. INTEGER FUNCTION DftiCreateDescriptorDMn(C,H,P1,P2,D,L)
  140. USE MKL_CDFT_DM_TYPE
  141. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  142. INTEGER(4) C
  143. INTEGER P1,P2,D,L(*)
  144. INTENT(IN) :: C,P1,P2,D,L
  145. INTERFACE
  146. INTEGER FUNCTION DftiCreateDescriptorDMn_internal(C,H,P1,P2,D,L)
  147. USE MKL_CDFT_DM_TYPE
  148. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  149. INTEGER(4) C
  150. INTEGER P1,P2,D,L(*)
  151. INTENT(IN) :: C,P1,P2,D,L
  152. END FUNCTION
  153. END INTERFACE
  154. DftiCreateDescriptorDMn = DftiCreateDescriptorDMn_internal(C,H,P1,P2,D,L)
  155. END FUNCTION
  156. ! overloading of DftiCreateDescriptorDM for 1D DFT
  157. INTEGER FUNCTION DftiCreateDescriptorDM1(C,H,P1,P2,D,L)
  158. USE MKL_CDFT_DM_TYPE
  159. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  160. INTEGER(4) C
  161. INTEGER P1,P2,D,L
  162. INTENT(IN) :: C,P1,P2,D,L
  163. INTERFACE
  164. INTEGER FUNCTION DftiCreateDescriptorDM1_internal(C,H,P1,P2,D,L)
  165. USE MKL_CDFT_DM_TYPE
  166. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  167. INTEGER(4) C
  168. INTEGER P1,P2,D,L
  169. INTENT(IN) :: C,P1,P2,D,L
  170. END FUNCTION
  171. END INTERFACE
  172. DftiCreateDescriptorDM1 = DftiCreateDescriptorDM1_internal(C,H,P1,P2,D,L)
  173. END FUNCTION
  174. INTEGER FUNCTION DftiCreateDescriptorDM1_s(C,H,P1R,P2,D,L)
  175. USE MKL_CDFT_DM_TYPE
  176. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  177. REAL(4), INTENT(IN) :: P1R
  178. INTEGER(4) C
  179. INTEGER P1,P2,D,L
  180. INTENT(IN) :: C,P2,D,L
  181. P1 = INT(P1R)
  182. DftiCreateDescriptorDM1_s = DftiCreateDescriptorDM1(C,H,P1,P2,D,L)
  183. END FUNCTION
  184. INTEGER FUNCTION DftiCreateDescriptorDM1_d(C,H,P1R,P2,D,L)
  185. USE MKL_CDFT_DM_TYPE
  186. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  187. REAL(8), INTENT(IN) :: P1R
  188. INTEGER(4) C
  189. INTEGER P1,P2,D,L
  190. INTENT(IN) :: C,P2,D,L
  191. P1 = INT(P1R)
  192. DftiCreateDescriptorDM1_d = DftiCreateDescriptorDM1(C,H,P1,P2,D,L)
  193. END FUNCTION
  194. INTEGER FUNCTION DftiCreateDescriptorDMn_s(C,H,P1R,P2,D,L)
  195. USE MKL_CDFT_DM_TYPE
  196. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  197. REAL(4), INTENT(IN) :: P1R
  198. INTEGER(4) C
  199. INTEGER P1,P2,D,L(*)
  200. INTENT(IN) :: C,P2,D,L
  201. P1 = INT(P1R)
  202. DftiCreateDescriptorDMn_s = DftiCreateDescriptorDMn(C,H,P1,P2,D,L)
  203. END FUNCTION
  204. INTEGER FUNCTION DftiCreateDescriptorDMn_d(C,H,P1R,P2,D,L)
  205. USE MKL_CDFT_DM_TYPE
  206. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  207. REAL(8), INTENT(IN) :: P1R
  208. INTEGER(4) C
  209. INTEGER P1,P2,D,L(*)
  210. INTENT(IN) :: C,P2,D,L
  211. P1 = INT(P1R)
  212. DftiCreateDescriptorDMn_d = DftiCreateDescriptorDMn(C,H,P1,P2,D,L)
  213. END FUNCTION
  214. !END INTERFACE DftiCreateDescriptorDM
  215. !INTERFACE DftiSetValueDM
  216. ! overloading of DftiSetValueDM for SP value
  217. INTEGER FUNCTION DftiSetValueDMs(H,P,V)
  218. USE MKL_CDFT_DM_TYPE
  219. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  220. INTEGER P
  221. REAL(4) V
  222. INTENT(IN) :: P,V
  223. INTERFACE
  224. INTEGER FUNCTION DftiSetValueDMf_internal(H,P,V)
  225. USE MKL_CDFT_DM_TYPE
  226. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  227. INTEGER P
  228. REAL(4) V
  229. INTENT(IN) :: P,V
  230. END FUNCTION
  231. END INTERFACE
  232. DftiSetValueDMs = DftiSetValueDMf_internal(H,P,V)
  233. END FUNCTION
  234. ! overloading of DftiSetValueDM for DP value
  235. INTEGER FUNCTION DftiSetValueDMd(H,P,V)
  236. USE MKL_CDFT_DM_TYPE
  237. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  238. INTEGER P
  239. REAL(8) V
  240. INTENT(IN) :: P,V
  241. INTERFACE
  242. INTEGER FUNCTION DftiSetValueDMd_internal(H,P,V)
  243. USE MKL_CDFT_DM_TYPE
  244. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  245. INTEGER P
  246. REAL(8) V
  247. INTENT(IN) :: P,V
  248. END FUNCTION
  249. END INTERFACE
  250. DftiSetValueDMd = DftiSetValueDMd_internal(H,P,V)
  251. END FUNCTION
  252. ! overloading of DftiSetValueDM for integer value
  253. INTEGER FUNCTION DftiSetValueDMi(H,P,V)
  254. USE MKL_CDFT_DM_TYPE
  255. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  256. INTEGER P,V
  257. INTENT(IN) :: P,V
  258. INTERFACE
  259. INTEGER FUNCTION DftiSetValueDMi_internal(H,P,V)
  260. USE MKL_CDFT_DM_TYPE
  261. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  262. INTEGER P,V
  263. INTENT(IN) :: P,V
  264. END FUNCTION
  265. END INTERFACE
  266. DftiSetValueDMi = DftiSetValueDMi_internal(H,P,V)
  267. END FUNCTION
  268. ! overloading of DftiSetValueDM for SP complex array
  269. INTEGER FUNCTION DftiSetValueDMpc(H,P,V)
  270. USE MKL_CDFT_DM_TYPE
  271. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  272. INTEGER P
  273. COMPLEX(4) V(*)
  274. INTENT(IN) :: P,V
  275. INTERFACE
  276. INTEGER FUNCTION DftiSetValueDMp_internal(H,P,V)
  277. USE MKL_CDFT_DM_TYPE
  278. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  279. INTEGER P
  280. COMPLEX(4) V(*)
  281. INTENT(IN) :: P,V
  282. END FUNCTION
  283. END INTERFACE
  284. DftiSetValueDMpc = DftiSetValueDMp_internal(H,P,V)
  285. END FUNCTION
  286. ! overloading of DftiSetValueDM for DP complex array
  287. INTEGER FUNCTION DftiSetValueDMpz(H,P,V)
  288. USE MKL_CDFT_DM_TYPE
  289. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  290. INTEGER P
  291. COMPLEX(8) V(*)
  292. INTENT(IN) :: P,V
  293. INTERFACE
  294. INTEGER FUNCTION DftiSetValueDMp_internal(H,P,V)
  295. USE MKL_CDFT_DM_TYPE
  296. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  297. INTEGER P
  298. COMPLEX(8) V(*)
  299. INTENT(IN) :: P,V
  300. END FUNCTION
  301. END INTERFACE
  302. DftiSetValueDMpz = DftiSetValueDMp_internal(H,P,V)
  303. END FUNCTION
  304. ! overloading of DftiSetValueDM for SP array
  305. INTEGER FUNCTION DftiSetValueDMps(H,P,V)
  306. USE MKL_CDFT_DM_TYPE
  307. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  308. INTEGER P
  309. REAL(4) V(*)
  310. INTENT(IN) :: P,V
  311. INTERFACE
  312. INTEGER FUNCTION DftiSetValueDMp_internal(H,P,V)
  313. USE MKL_CDFT_DM_TYPE
  314. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  315. INTEGER P
  316. REAL(4) V(*)
  317. INTENT(IN) :: P,V
  318. END FUNCTION
  319. END INTERFACE
  320. DftiSetValueDMps = DftiSetValueDMp_internal(H,P,V)
  321. END FUNCTION
  322. ! overloading of DftiSetValueDM for DP array
  323. INTEGER FUNCTION DftiSetValueDMpd(H,P,V)
  324. USE MKL_CDFT_DM_TYPE
  325. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  326. INTEGER P
  327. REAL(8) V(*)
  328. INTENT(IN) :: P,V
  329. INTERFACE
  330. INTEGER FUNCTION DftiSetValueDMp_internal(H,P,V)
  331. USE MKL_CDFT_DM_TYPE
  332. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  333. INTEGER P
  334. REAL(8) V(*)
  335. INTENT(IN) :: P,V
  336. END FUNCTION
  337. END INTERFACE
  338. DftiSetValueDMpd = DftiSetValueDMp_internal(H,P,V)
  339. END FUNCTION
  340. ! overloading of DftiSetValueDM for integer array
  341. INTEGER FUNCTION DftiSetValueDMpi(H,P,V)
  342. USE MKL_CDFT_DM_TYPE
  343. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  344. INTEGER P,V(*)
  345. INTENT(IN) :: P,V
  346. INTERFACE
  347. INTEGER FUNCTION DftiSetValueDMp_internal(H,P,V)
  348. USE MKL_CDFT_DM_TYPE
  349. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  350. INTEGER P,V(*)
  351. INTENT(IN) :: P,V
  352. END FUNCTION
  353. END INTERFACE
  354. DftiSetValueDMpi = DftiSetValueDMp_internal(H,P,V)
  355. END FUNCTION
  356. !END INTERFACE DftiSetValueDM
  357. !INTERFACE DftiGetValueDM
  358. ! overloading of DftiGetValueDM for SP value
  359. INTEGER FUNCTION DftiGetValueDMs(H,P,V)
  360. USE MKL_CDFT_DM_TYPE
  361. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  362. INTEGER P
  363. REAL(4) V
  364. INTENT(IN) :: P
  365. INTENT(OUT) :: V
  366. INTERFACE
  367. INTEGER FUNCTION DftiGetValueDM_internal(H,P,V)
  368. USE MKL_CDFT_DM_TYPE
  369. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  370. INTEGER P
  371. REAL(4) V
  372. INTENT(IN) :: P
  373. INTENT(OUT) :: V
  374. END FUNCTION
  375. END INTERFACE
  376. DftiGetValueDMs = DftiGetValueDM_internal(H,P,V)
  377. END FUNCTION
  378. ! overloading of DftiGetValueDM for DP value
  379. INTEGER FUNCTION DftiGetValueDMd(H,P,V)
  380. USE MKL_CDFT_DM_TYPE
  381. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  382. INTEGER P
  383. REAL(8) V
  384. INTENT(IN) :: P
  385. INTENT(OUT) :: V
  386. INTERFACE
  387. INTEGER FUNCTION DftiGetValueDM_internal(H,P,V)
  388. USE MKL_CDFT_DM_TYPE
  389. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  390. INTEGER P
  391. REAL(8) V
  392. INTENT(IN) :: P
  393. INTENT(OUT) :: V
  394. END FUNCTION
  395. END INTERFACE
  396. DftiGetValueDMd = DftiGetValueDM_internal(H,P,V)
  397. END FUNCTION
  398. ! overloading of DftiGetValueDM for integer value
  399. INTEGER FUNCTION DftiGetValueDMi(H,P,V)
  400. USE MKL_CDFT_DM_TYPE
  401. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  402. INTEGER P,V
  403. INTENT(IN) :: P
  404. INTENT(OUT) :: V
  405. INTERFACE
  406. INTEGER FUNCTION DftiGetValueDM_internal(H,P,V)
  407. USE MKL_CDFT_DM_TYPE
  408. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  409. INTEGER P,V
  410. INTENT(IN) :: P
  411. INTENT(OUT) :: V
  412. END FUNCTION
  413. END INTERFACE
  414. DftiGetValueDMi = DftiGetValueDM_internal(H,P,V)
  415. END FUNCTION
  416. !END INTERFACE DftiGetValueDM
  417. !INTERFACE DftiComputeForwardDM
  418. ! overloading of DftiComputeForwardDM for SP R2C DFT (out-of-place)
  419. INTEGER FUNCTION DftiComputeForwardDMos(H,IN,OUT)
  420. USE MKL_CDFT_DM_TYPE
  421. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  422. REAL(4) IN(*)
  423. COMPLEX(4) OUT(*)
  424. INTENT(IN) :: IN
  425. INTENT(OUT) :: OUT
  426. INTERFACE
  427. INTEGER FUNCTION DftiComputeForwardDMo_internal(H,IN,OUT)
  428. USE MKL_CDFT_DM_TYPE
  429. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  430. REAL(4) IN(*)
  431. COMPLEX(4) OUT(*)
  432. INTENT(IN) :: IN
  433. INTENT(OUT) :: OUT
  434. END FUNCTION
  435. END INTERFACE
  436. DftiComputeForwardDMos = DftiComputeForwardDMo_internal(H,IN,OUT)
  437. END FUNCTION
  438. ! overloading of DftiComputeForwardDM for DP R2C DFT (out-of-place)
  439. INTEGER FUNCTION DftiComputeForwardDMod(H,IN,OUT)
  440. USE MKL_CDFT_DM_TYPE
  441. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  442. REAL(8) IN(*)
  443. COMPLEX(8) OUT(*)
  444. INTENT(IN) :: IN
  445. INTENT(OUT) :: OUT
  446. INTERFACE
  447. INTEGER FUNCTION DftiComputeForwardDMo_internal(H,IN,OUT)
  448. USE MKL_CDFT_DM_TYPE
  449. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  450. REAL(8) IN(*)
  451. COMPLEX(8) OUT(*)
  452. INTENT(IN) :: IN
  453. INTENT(OUT) :: OUT
  454. END FUNCTION
  455. END INTERFACE
  456. DftiComputeForwardDMod = DftiComputeForwardDMo_internal(H,IN,OUT)
  457. END FUNCTION
  458. ! overloading of DftiComputeForwardDM for SP C2C DFT (out-of-place)
  459. INTEGER FUNCTION DftiComputeForwardDMoc(H,IN,OUT)
  460. USE MKL_CDFT_DM_TYPE
  461. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  462. COMPLEX(4) IN(*),OUT(*)
  463. INTENT(IN) :: IN
  464. INTENT(OUT) :: OUT
  465. INTERFACE
  466. INTEGER FUNCTION DftiComputeForwardDMo_internal(H,IN,OUT)
  467. USE MKL_CDFT_DM_TYPE
  468. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  469. COMPLEX(4) IN(*),OUT(*)
  470. INTENT(IN) :: IN
  471. INTENT(OUT) :: OUT
  472. END FUNCTION
  473. END INTERFACE
  474. DftiComputeForwardDMoc = DftiComputeForwardDMo_internal(H,IN,OUT)
  475. END FUNCTION
  476. ! overloading of DftiComputeForwardDM for DP C2C DFT (out-of-place)
  477. INTEGER FUNCTION DftiComputeForwardDMoz(H,IN,OUT)
  478. USE MKL_CDFT_DM_TYPE
  479. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  480. COMPLEX(8) IN(*),OUT(*)
  481. INTENT(IN) :: IN
  482. INTENT(OUT) :: OUT
  483. INTERFACE
  484. INTEGER FUNCTION DftiComputeForwardDMo_internal(H,IN,OUT)
  485. USE MKL_CDFT_DM_TYPE
  486. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  487. COMPLEX(8) IN(*),OUT(*)
  488. INTENT(IN) :: IN
  489. INTENT(OUT) :: OUT
  490. END FUNCTION
  491. END INTERFACE
  492. DftiComputeForwardDMoz = DftiComputeForwardDMo_internal(H,IN,OUT)
  493. END FUNCTION
  494. ! overloading of DftiComputeForwardDM for SP R2C DFT (inplace)
  495. INTEGER FUNCTION DftiComputeForwardDMis(H,IN)
  496. USE MKL_CDFT_DM_TYPE
  497. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  498. REAL(4) IN(*)
  499. INTERFACE
  500. INTEGER FUNCTION DftiComputeForwardDMi_internal(H,IN)
  501. USE MKL_CDFT_DM_TYPE
  502. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  503. REAL(4) IN(*)
  504. END FUNCTION
  505. END INTERFACE
  506. DftiComputeForwardDMis = DftiComputeForwardDMi_internal(H,IN)
  507. END FUNCTION
  508. ! overloading of DftiComputeForwardDM for DP R2C DFT (inplace)
  509. INTEGER FUNCTION DftiComputeForwardDMid(H,IN)
  510. USE MKL_CDFT_DM_TYPE
  511. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  512. REAL(8) IN(*)
  513. INTERFACE
  514. INTEGER FUNCTION DftiComputeForwardDMi_internal(H,IN)
  515. USE MKL_CDFT_DM_TYPE
  516. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  517. REAL(8) IN(*)
  518. END FUNCTION
  519. END INTERFACE
  520. DftiComputeForwardDMid = DftiComputeForwardDMi_internal(H,IN)
  521. END FUNCTION
  522. ! overloading of DftiComputeForwardDM for SP C2C DFT (inplace)
  523. INTEGER FUNCTION DftiComputeForwardDMic(H,IN)
  524. USE MKL_CDFT_DM_TYPE
  525. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  526. COMPLEX(4) IN(*)
  527. INTERFACE
  528. INTEGER FUNCTION DftiComputeForwardDMi_internal(H,IN)
  529. USE MKL_CDFT_DM_TYPE
  530. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  531. COMPLEX(4) IN(*)
  532. END FUNCTION
  533. END INTERFACE
  534. DftiComputeForwardDMic = DftiComputeForwardDMi_internal(H,IN)
  535. END FUNCTION
  536. ! overloading of DftiComputeForwardDM for DP C2C DFT (inplace)
  537. INTEGER FUNCTION DftiComputeForwardDMiz(H,IN)
  538. USE MKL_CDFT_DM_TYPE
  539. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  540. COMPLEX(8) IN(*)
  541. INTERFACE
  542. INTEGER FUNCTION DftiComputeForwardDMi_internal(H,IN)
  543. USE MKL_CDFT_DM_TYPE
  544. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  545. COMPLEX(8) IN(*)
  546. END FUNCTION
  547. END INTERFACE
  548. DftiComputeForwardDMiz = DftiComputeForwardDMi_internal(H,IN)
  549. END FUNCTION
  550. !END INTERFACE DftiComputeForwardDM
  551. !INTERFACE DftiComputeBackwardDM
  552. ! overloading of DftiComputeBackwardDM for SP R2C DFT (out-of-place)
  553. INTEGER FUNCTION DftiComputeBackwardDMos(H,IN,OUT)
  554. USE MKL_CDFT_DM_TYPE
  555. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  556. COMPLEX(4) IN(*)
  557. REAL(4) OUT(*)
  558. INTENT(IN) :: IN
  559. INTENT(OUT) :: OUT
  560. INTERFACE
  561. INTEGER FUNCTION DftiComputeBackwardDMo_internal(H,IN,OUT)
  562. USE MKL_CDFT_DM_TYPE
  563. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  564. COMPLEX(4) IN(*)
  565. REAL(4) OUT(*)
  566. INTENT(IN) :: IN
  567. INTENT(OUT) :: OUT
  568. END FUNCTION
  569. END INTERFACE
  570. DftiComputeBackwardDMos = DftiComputeBackwardDMo_internal(H,IN,OUT)
  571. END FUNCTION
  572. ! overloading of DftiComputeBackwardDM for DP R2C DFT (out-of-place)
  573. INTEGER FUNCTION DftiComputeBackwardDMod(H,IN,OUT)
  574. USE MKL_CDFT_DM_TYPE
  575. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  576. COMPLEX(8) IN(*)
  577. REAL(8) OUT(*)
  578. INTENT(IN) :: IN
  579. INTENT(OUT) :: OUT
  580. INTERFACE
  581. INTEGER FUNCTION DftiComputeBackwardDMo_internal(H,IN,OUT)
  582. USE MKL_CDFT_DM_TYPE
  583. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  584. COMPLEX(8) IN(*)
  585. REAL(8) OUT(*)
  586. INTENT(IN) :: IN
  587. INTENT(OUT) :: OUT
  588. END FUNCTION
  589. END INTERFACE
  590. DftiComputeBackwardDMod = DftiComputeBackwardDMo_internal(H,IN,OUT)
  591. END FUNCTION
  592. ! overloading of DftiComputeBackwardDM for SP C2C DFT (out-of-place)
  593. INTEGER FUNCTION DftiComputeBackwardDMoc(H,IN,OUT)
  594. USE MKL_CDFT_DM_TYPE
  595. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  596. COMPLEX(4) IN(*),OUT(*)
  597. INTENT(IN) :: IN
  598. INTENT(OUT) :: OUT
  599. INTERFACE
  600. INTEGER FUNCTION DftiComputeBackwardDMo_internal(H,IN,OUT)
  601. USE MKL_CDFT_DM_TYPE
  602. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  603. COMPLEX(4) IN(*),OUT(*)
  604. INTENT(IN) :: IN
  605. INTENT(OUT) :: OUT
  606. END FUNCTION
  607. END INTERFACE
  608. DftiComputeBackwardDMoc = DftiComputeBackwardDMo_internal(H,IN,OUT)
  609. END FUNCTION
  610. ! overloading of DftiComputeBackwardDM for DP C2C DFT (out-of-place)
  611. INTEGER FUNCTION DftiComputeBackwardDMoz(H,IN,OUT)
  612. USE MKL_CDFT_DM_TYPE
  613. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  614. COMPLEX(8) IN(*),OUT(*)
  615. INTENT(IN) :: IN
  616. INTENT(OUT) :: OUT
  617. INTERFACE
  618. INTEGER FUNCTION DftiComputeBackwardDMo_internal(H,IN,OUT)
  619. USE MKL_CDFT_DM_TYPE
  620. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  621. COMPLEX(8) IN(*),OUT(*)
  622. INTENT(IN) :: IN
  623. INTENT(OUT) :: OUT
  624. END FUNCTION
  625. END INTERFACE
  626. DftiComputeBackwardDMoz = DftiComputeBackwardDMo_internal(H,IN,OUT)
  627. END FUNCTION
  628. ! overloading of DftiComputeBackwardDM for SP R2C DFT (inplace)
  629. INTEGER FUNCTION DftiComputeBackwardDMis(H,IN)
  630. USE MKL_CDFT_DM_TYPE
  631. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  632. REAL(4) IN(*)
  633. INTERFACE
  634. INTEGER FUNCTION DftiComputeBackwardDMi_internal(H,IN)
  635. USE MKL_CDFT_DM_TYPE
  636. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  637. REAL(4) IN(*)
  638. END FUNCTION
  639. END INTERFACE
  640. DftiComputeBackwardDMis = DftiComputeBackwardDMi_internal(H,IN)
  641. END FUNCTION
  642. ! overloading of DftiComputeBackwardDM for DP R2C DFT (inplace)
  643. INTEGER FUNCTION DftiComputeBackwardDMid(H,IN)
  644. USE MKL_CDFT_DM_TYPE
  645. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  646. REAL(8) IN(*)
  647. INTERFACE
  648. INTEGER FUNCTION DftiComputeBackwardDMi_internal(H,IN)
  649. USE MKL_CDFT_DM_TYPE
  650. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  651. REAL(8) IN(*)
  652. END FUNCTION
  653. END INTERFACE
  654. DftiComputeBackwardDMid = DftiComputeBackwardDMi_internal(H,IN)
  655. END FUNCTION
  656. ! overloading of DftiComputeBackwardDM for SP C2C DFT (inplace)
  657. INTEGER FUNCTION DftiComputeBackwardDMic(H,IN)
  658. USE MKL_CDFT_DM_TYPE
  659. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  660. COMPLEX(4) IN(*)
  661. INTERFACE
  662. INTEGER FUNCTION DftiComputeBackwardDMi_internal(H,IN)
  663. USE MKL_CDFT_DM_TYPE
  664. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  665. COMPLEX(4) IN(*)
  666. END FUNCTION
  667. END INTERFACE
  668. DftiComputeBackwardDMic = DftiComputeBackwardDMi_internal(H,IN)
  669. END FUNCTION
  670. ! overloading of DftiComputeBackwardDM for DP C2C DFT (inplace)
  671. INTEGER FUNCTION DftiComputeBackwardDMiz(H,IN)
  672. USE MKL_CDFT_DM_TYPE
  673. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  674. COMPLEX(8) IN(*)
  675. INTERFACE
  676. INTEGER FUNCTION DftiComputeBackwardDMi_internal(H,IN)
  677. USE MKL_CDFT_DM_TYPE
  678. TYPE(DFTI_DESCRIPTOR_DM), POINTER :: H
  679. COMPLEX(8) IN(*)
  680. END FUNCTION
  681. END INTERFACE
  682. DftiComputeBackwardDMiz = DftiComputeBackwardDMi_internal(H,IN)
  683. END FUNCTION
  684. !END INTERFACE DftiComputeBackwardDM
  685. END MODULE