fftw3q.f03 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614
  1. ! Generated automatically. DO NOT EDIT!
  2. type, bind(C) :: fftwq_iodim
  3. integer(C_INT) n, is, os
  4. end type fftwq_iodim
  5. type, bind(C) :: fftwq_iodim64
  6. integer(C_INTPTR_T) n, is, os
  7. end type fftwq_iodim64
  8. interface
  9. type(C_PTR) function fftwq_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftwq_plan_dft')
  10. import
  11. integer(C_INT), value :: rank
  12. integer(C_INT), dimension(*), intent(in) :: n
  13. complex(16), dimension(*), intent(out) :: in
  14. complex(16), dimension(*), intent(out) :: out
  15. integer(C_INT), value :: sign
  16. integer(C_INT), value :: flags
  17. end function fftwq_plan_dft
  18. type(C_PTR) function fftwq_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftwq_plan_dft_1d')
  19. import
  20. integer(C_INT), value :: n
  21. complex(16), dimension(*), intent(out) :: in
  22. complex(16), dimension(*), intent(out) :: out
  23. integer(C_INT), value :: sign
  24. integer(C_INT), value :: flags
  25. end function fftwq_plan_dft_1d
  26. type(C_PTR) function fftwq_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftwq_plan_dft_2d')
  27. import
  28. integer(C_INT), value :: n0
  29. integer(C_INT), value :: n1
  30. complex(16), dimension(*), intent(out) :: in
  31. complex(16), dimension(*), intent(out) :: out
  32. integer(C_INT), value :: sign
  33. integer(C_INT), value :: flags
  34. end function fftwq_plan_dft_2d
  35. type(C_PTR) function fftwq_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftwq_plan_dft_3d')
  36. import
  37. integer(C_INT), value :: n0
  38. integer(C_INT), value :: n1
  39. integer(C_INT), value :: n2
  40. complex(16), dimension(*), intent(out) :: in
  41. complex(16), dimension(*), intent(out) :: out
  42. integer(C_INT), value :: sign
  43. integer(C_INT), value :: flags
  44. end function fftwq_plan_dft_3d
  45. type(C_PTR) function fftwq_plan_many_dft(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,sign,flags) &
  46. bind(C, name='fftwq_plan_many_dft')
  47. import
  48. integer(C_INT), value :: rank
  49. integer(C_INT), dimension(*), intent(in) :: n
  50. integer(C_INT), value :: howmany
  51. complex(16), dimension(*), intent(out) :: in
  52. integer(C_INT), dimension(*), intent(in) :: inembed
  53. integer(C_INT), value :: istride
  54. integer(C_INT), value :: idist
  55. complex(16), dimension(*), intent(out) :: out
  56. integer(C_INT), dimension(*), intent(in) :: onembed
  57. integer(C_INT), value :: ostride
  58. integer(C_INT), value :: odist
  59. integer(C_INT), value :: sign
  60. integer(C_INT), value :: flags
  61. end function fftwq_plan_many_dft
  62. type(C_PTR) function fftwq_plan_guru_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
  63. bind(C, name='fftwq_plan_guru_dft')
  64. import
  65. integer(C_INT), value :: rank
  66. type(fftwq_iodim), dimension(*), intent(in) :: dims
  67. integer(C_INT), value :: howmany_rank
  68. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  69. complex(16), dimension(*), intent(out) :: in
  70. complex(16), dimension(*), intent(out) :: out
  71. integer(C_INT), value :: sign
  72. integer(C_INT), value :: flags
  73. end function fftwq_plan_guru_dft
  74. type(C_PTR) function fftwq_plan_guru_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
  75. bind(C, name='fftwq_plan_guru_split_dft')
  76. import
  77. integer(C_INT), value :: rank
  78. type(fftwq_iodim), dimension(*), intent(in) :: dims
  79. integer(C_INT), value :: howmany_rank
  80. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  81. real(16), dimension(*), intent(out) :: ri
  82. real(16), dimension(*), intent(out) :: ii
  83. real(16), dimension(*), intent(out) :: ro
  84. real(16), dimension(*), intent(out) :: io
  85. integer(C_INT), value :: flags
  86. end function fftwq_plan_guru_split_dft
  87. type(C_PTR) function fftwq_plan_guru64_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
  88. bind(C, name='fftwq_plan_guru64_dft')
  89. import
  90. integer(C_INT), value :: rank
  91. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  92. integer(C_INT), value :: howmany_rank
  93. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  94. complex(16), dimension(*), intent(out) :: in
  95. complex(16), dimension(*), intent(out) :: out
  96. integer(C_INT), value :: sign
  97. integer(C_INT), value :: flags
  98. end function fftwq_plan_guru64_dft
  99. type(C_PTR) function fftwq_plan_guru64_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
  100. bind(C, name='fftwq_plan_guru64_split_dft')
  101. import
  102. integer(C_INT), value :: rank
  103. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  104. integer(C_INT), value :: howmany_rank
  105. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  106. real(16), dimension(*), intent(out) :: ri
  107. real(16), dimension(*), intent(out) :: ii
  108. real(16), dimension(*), intent(out) :: ro
  109. real(16), dimension(*), intent(out) :: io
  110. integer(C_INT), value :: flags
  111. end function fftwq_plan_guru64_split_dft
  112. subroutine fftwq_execute_dft(p,in,out) bind(C, name='fftwq_execute_dft')
  113. import
  114. type(C_PTR), value :: p
  115. complex(16), dimension(*), intent(inout) :: in
  116. complex(16), dimension(*), intent(out) :: out
  117. end subroutine fftwq_execute_dft
  118. subroutine fftwq_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftwq_execute_split_dft')
  119. import
  120. type(C_PTR), value :: p
  121. real(16), dimension(*), intent(inout) :: ri
  122. real(16), dimension(*), intent(inout) :: ii
  123. real(16), dimension(*), intent(out) :: ro
  124. real(16), dimension(*), intent(out) :: io
  125. end subroutine fftwq_execute_split_dft
  126. type(C_PTR) function fftwq_plan_many_dft_r2c(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
  127. bind(C, name='fftwq_plan_many_dft_r2c')
  128. import
  129. integer(C_INT), value :: rank
  130. integer(C_INT), dimension(*), intent(in) :: n
  131. integer(C_INT), value :: howmany
  132. real(16), dimension(*), intent(out) :: in
  133. integer(C_INT), dimension(*), intent(in) :: inembed
  134. integer(C_INT), value :: istride
  135. integer(C_INT), value :: idist
  136. complex(16), dimension(*), intent(out) :: out
  137. integer(C_INT), dimension(*), intent(in) :: onembed
  138. integer(C_INT), value :: ostride
  139. integer(C_INT), value :: odist
  140. integer(C_INT), value :: flags
  141. end function fftwq_plan_many_dft_r2c
  142. type(C_PTR) function fftwq_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftwq_plan_dft_r2c')
  143. import
  144. integer(C_INT), value :: rank
  145. integer(C_INT), dimension(*), intent(in) :: n
  146. real(16), dimension(*), intent(out) :: in
  147. complex(16), dimension(*), intent(out) :: out
  148. integer(C_INT), value :: flags
  149. end function fftwq_plan_dft_r2c
  150. type(C_PTR) function fftwq_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftwq_plan_dft_r2c_1d')
  151. import
  152. integer(C_INT), value :: n
  153. real(16), dimension(*), intent(out) :: in
  154. complex(16), dimension(*), intent(out) :: out
  155. integer(C_INT), value :: flags
  156. end function fftwq_plan_dft_r2c_1d
  157. type(C_PTR) function fftwq_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftwq_plan_dft_r2c_2d')
  158. import
  159. integer(C_INT), value :: n0
  160. integer(C_INT), value :: n1
  161. real(16), dimension(*), intent(out) :: in
  162. complex(16), dimension(*), intent(out) :: out
  163. integer(C_INT), value :: flags
  164. end function fftwq_plan_dft_r2c_2d
  165. type(C_PTR) function fftwq_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwq_plan_dft_r2c_3d')
  166. import
  167. integer(C_INT), value :: n0
  168. integer(C_INT), value :: n1
  169. integer(C_INT), value :: n2
  170. real(16), dimension(*), intent(out) :: in
  171. complex(16), dimension(*), intent(out) :: out
  172. integer(C_INT), value :: flags
  173. end function fftwq_plan_dft_r2c_3d
  174. type(C_PTR) function fftwq_plan_many_dft_c2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
  175. bind(C, name='fftwq_plan_many_dft_c2r')
  176. import
  177. integer(C_INT), value :: rank
  178. integer(C_INT), dimension(*), intent(in) :: n
  179. integer(C_INT), value :: howmany
  180. complex(16), dimension(*), intent(out) :: in
  181. integer(C_INT), dimension(*), intent(in) :: inembed
  182. integer(C_INT), value :: istride
  183. integer(C_INT), value :: idist
  184. real(16), dimension(*), intent(out) :: out
  185. integer(C_INT), dimension(*), intent(in) :: onembed
  186. integer(C_INT), value :: ostride
  187. integer(C_INT), value :: odist
  188. integer(C_INT), value :: flags
  189. end function fftwq_plan_many_dft_c2r
  190. type(C_PTR) function fftwq_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftwq_plan_dft_c2r')
  191. import
  192. integer(C_INT), value :: rank
  193. integer(C_INT), dimension(*), intent(in) :: n
  194. complex(16), dimension(*), intent(out) :: in
  195. real(16), dimension(*), intent(out) :: out
  196. integer(C_INT), value :: flags
  197. end function fftwq_plan_dft_c2r
  198. type(C_PTR) function fftwq_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftwq_plan_dft_c2r_1d')
  199. import
  200. integer(C_INT), value :: n
  201. complex(16), dimension(*), intent(out) :: in
  202. real(16), dimension(*), intent(out) :: out
  203. integer(C_INT), value :: flags
  204. end function fftwq_plan_dft_c2r_1d
  205. type(C_PTR) function fftwq_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftwq_plan_dft_c2r_2d')
  206. import
  207. integer(C_INT), value :: n0
  208. integer(C_INT), value :: n1
  209. complex(16), dimension(*), intent(out) :: in
  210. real(16), dimension(*), intent(out) :: out
  211. integer(C_INT), value :: flags
  212. end function fftwq_plan_dft_c2r_2d
  213. type(C_PTR) function fftwq_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwq_plan_dft_c2r_3d')
  214. import
  215. integer(C_INT), value :: n0
  216. integer(C_INT), value :: n1
  217. integer(C_INT), value :: n2
  218. complex(16), dimension(*), intent(out) :: in
  219. real(16), dimension(*), intent(out) :: out
  220. integer(C_INT), value :: flags
  221. end function fftwq_plan_dft_c2r_3d
  222. type(C_PTR) function fftwq_plan_guru_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
  223. bind(C, name='fftwq_plan_guru_dft_r2c')
  224. import
  225. integer(C_INT), value :: rank
  226. type(fftwq_iodim), dimension(*), intent(in) :: dims
  227. integer(C_INT), value :: howmany_rank
  228. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  229. real(16), dimension(*), intent(out) :: in
  230. complex(16), dimension(*), intent(out) :: out
  231. integer(C_INT), value :: flags
  232. end function fftwq_plan_guru_dft_r2c
  233. type(C_PTR) function fftwq_plan_guru_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
  234. bind(C, name='fftwq_plan_guru_dft_c2r')
  235. import
  236. integer(C_INT), value :: rank
  237. type(fftwq_iodim), dimension(*), intent(in) :: dims
  238. integer(C_INT), value :: howmany_rank
  239. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  240. complex(16), dimension(*), intent(out) :: in
  241. real(16), dimension(*), intent(out) :: out
  242. integer(C_INT), value :: flags
  243. end function fftwq_plan_guru_dft_c2r
  244. type(C_PTR) function fftwq_plan_guru_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
  245. bind(C, name='fftwq_plan_guru_split_dft_r2c')
  246. import
  247. integer(C_INT), value :: rank
  248. type(fftwq_iodim), dimension(*), intent(in) :: dims
  249. integer(C_INT), value :: howmany_rank
  250. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  251. real(16), dimension(*), intent(out) :: in
  252. real(16), dimension(*), intent(out) :: ro
  253. real(16), dimension(*), intent(out) :: io
  254. integer(C_INT), value :: flags
  255. end function fftwq_plan_guru_split_dft_r2c
  256. type(C_PTR) function fftwq_plan_guru_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
  257. bind(C, name='fftwq_plan_guru_split_dft_c2r')
  258. import
  259. integer(C_INT), value :: rank
  260. type(fftwq_iodim), dimension(*), intent(in) :: dims
  261. integer(C_INT), value :: howmany_rank
  262. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  263. real(16), dimension(*), intent(out) :: ri
  264. real(16), dimension(*), intent(out) :: ii
  265. real(16), dimension(*), intent(out) :: out
  266. integer(C_INT), value :: flags
  267. end function fftwq_plan_guru_split_dft_c2r
  268. type(C_PTR) function fftwq_plan_guru64_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
  269. bind(C, name='fftwq_plan_guru64_dft_r2c')
  270. import
  271. integer(C_INT), value :: rank
  272. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  273. integer(C_INT), value :: howmany_rank
  274. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  275. real(16), dimension(*), intent(out) :: in
  276. complex(16), dimension(*), intent(out) :: out
  277. integer(C_INT), value :: flags
  278. end function fftwq_plan_guru64_dft_r2c
  279. type(C_PTR) function fftwq_plan_guru64_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
  280. bind(C, name='fftwq_plan_guru64_dft_c2r')
  281. import
  282. integer(C_INT), value :: rank
  283. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  284. integer(C_INT), value :: howmany_rank
  285. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  286. complex(16), dimension(*), intent(out) :: in
  287. real(16), dimension(*), intent(out) :: out
  288. integer(C_INT), value :: flags
  289. end function fftwq_plan_guru64_dft_c2r
  290. type(C_PTR) function fftwq_plan_guru64_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
  291. bind(C, name='fftwq_plan_guru64_split_dft_r2c')
  292. import
  293. integer(C_INT), value :: rank
  294. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  295. integer(C_INT), value :: howmany_rank
  296. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  297. real(16), dimension(*), intent(out) :: in
  298. real(16), dimension(*), intent(out) :: ro
  299. real(16), dimension(*), intent(out) :: io
  300. integer(C_INT), value :: flags
  301. end function fftwq_plan_guru64_split_dft_r2c
  302. type(C_PTR) function fftwq_plan_guru64_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
  303. bind(C, name='fftwq_plan_guru64_split_dft_c2r')
  304. import
  305. integer(C_INT), value :: rank
  306. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  307. integer(C_INT), value :: howmany_rank
  308. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  309. real(16), dimension(*), intent(out) :: ri
  310. real(16), dimension(*), intent(out) :: ii
  311. real(16), dimension(*), intent(out) :: out
  312. integer(C_INT), value :: flags
  313. end function fftwq_plan_guru64_split_dft_c2r
  314. subroutine fftwq_execute_dft_r2c(p,in,out) bind(C, name='fftwq_execute_dft_r2c')
  315. import
  316. type(C_PTR), value :: p
  317. real(16), dimension(*), intent(inout) :: in
  318. complex(16), dimension(*), intent(out) :: out
  319. end subroutine fftwq_execute_dft_r2c
  320. subroutine fftwq_execute_dft_c2r(p,in,out) bind(C, name='fftwq_execute_dft_c2r')
  321. import
  322. type(C_PTR), value :: p
  323. complex(16), dimension(*), intent(inout) :: in
  324. real(16), dimension(*), intent(out) :: out
  325. end subroutine fftwq_execute_dft_c2r
  326. subroutine fftwq_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftwq_execute_split_dft_r2c')
  327. import
  328. type(C_PTR), value :: p
  329. real(16), dimension(*), intent(inout) :: in
  330. real(16), dimension(*), intent(out) :: ro
  331. real(16), dimension(*), intent(out) :: io
  332. end subroutine fftwq_execute_split_dft_r2c
  333. subroutine fftwq_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftwq_execute_split_dft_c2r')
  334. import
  335. type(C_PTR), value :: p
  336. real(16), dimension(*), intent(inout) :: ri
  337. real(16), dimension(*), intent(inout) :: ii
  338. real(16), dimension(*), intent(out) :: out
  339. end subroutine fftwq_execute_split_dft_c2r
  340. type(C_PTR) function fftwq_plan_many_r2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,kind,flags) &
  341. bind(C, name='fftwq_plan_many_r2r')
  342. import
  343. integer(C_INT), value :: rank
  344. integer(C_INT), dimension(*), intent(in) :: n
  345. integer(C_INT), value :: howmany
  346. real(16), dimension(*), intent(out) :: in
  347. integer(C_INT), dimension(*), intent(in) :: inembed
  348. integer(C_INT), value :: istride
  349. integer(C_INT), value :: idist
  350. real(16), dimension(*), intent(out) :: out
  351. integer(C_INT), dimension(*), intent(in) :: onembed
  352. integer(C_INT), value :: ostride
  353. integer(C_INT), value :: odist
  354. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  355. integer(C_INT), value :: flags
  356. end function fftwq_plan_many_r2r
  357. type(C_PTR) function fftwq_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftwq_plan_r2r')
  358. import
  359. integer(C_INT), value :: rank
  360. integer(C_INT), dimension(*), intent(in) :: n
  361. real(16), dimension(*), intent(out) :: in
  362. real(16), dimension(*), intent(out) :: out
  363. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  364. integer(C_INT), value :: flags
  365. end function fftwq_plan_r2r
  366. type(C_PTR) function fftwq_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftwq_plan_r2r_1d')
  367. import
  368. integer(C_INT), value :: n
  369. real(16), dimension(*), intent(out) :: in
  370. real(16), dimension(*), intent(out) :: out
  371. integer(C_FFTW_R2R_KIND), value :: kind
  372. integer(C_INT), value :: flags
  373. end function fftwq_plan_r2r_1d
  374. type(C_PTR) function fftwq_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftwq_plan_r2r_2d')
  375. import
  376. integer(C_INT), value :: n0
  377. integer(C_INT), value :: n1
  378. real(16), dimension(*), intent(out) :: in
  379. real(16), dimension(*), intent(out) :: out
  380. integer(C_FFTW_R2R_KIND), value :: kind0
  381. integer(C_FFTW_R2R_KIND), value :: kind1
  382. integer(C_INT), value :: flags
  383. end function fftwq_plan_r2r_2d
  384. type(C_PTR) function fftwq_plan_r2r_3d(n0,n1,n2,in,out,kind0,kind1,kind2,flags) bind(C, name='fftwq_plan_r2r_3d')
  385. import
  386. integer(C_INT), value :: n0
  387. integer(C_INT), value :: n1
  388. integer(C_INT), value :: n2
  389. real(16), dimension(*), intent(out) :: in
  390. real(16), dimension(*), intent(out) :: out
  391. integer(C_FFTW_R2R_KIND), value :: kind0
  392. integer(C_FFTW_R2R_KIND), value :: kind1
  393. integer(C_FFTW_R2R_KIND), value :: kind2
  394. integer(C_INT), value :: flags
  395. end function fftwq_plan_r2r_3d
  396. type(C_PTR) function fftwq_plan_guru_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
  397. bind(C, name='fftwq_plan_guru_r2r')
  398. import
  399. integer(C_INT), value :: rank
  400. type(fftwq_iodim), dimension(*), intent(in) :: dims
  401. integer(C_INT), value :: howmany_rank
  402. type(fftwq_iodim), dimension(*), intent(in) :: howmany_dims
  403. real(16), dimension(*), intent(out) :: in
  404. real(16), dimension(*), intent(out) :: out
  405. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  406. integer(C_INT), value :: flags
  407. end function fftwq_plan_guru_r2r
  408. type(C_PTR) function fftwq_plan_guru64_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
  409. bind(C, name='fftwq_plan_guru64_r2r')
  410. import
  411. integer(C_INT), value :: rank
  412. type(fftwq_iodim64), dimension(*), intent(in) :: dims
  413. integer(C_INT), value :: howmany_rank
  414. type(fftwq_iodim64), dimension(*), intent(in) :: howmany_dims
  415. real(16), dimension(*), intent(out) :: in
  416. real(16), dimension(*), intent(out) :: out
  417. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  418. integer(C_INT), value :: flags
  419. end function fftwq_plan_guru64_r2r
  420. subroutine fftwq_execute_r2r(p,in,out) bind(C, name='fftwq_execute_r2r')
  421. import
  422. type(C_PTR), value :: p
  423. real(16), dimension(*), intent(inout) :: in
  424. real(16), dimension(*), intent(out) :: out
  425. end subroutine fftwq_execute_r2r
  426. subroutine fftwq_destroy_plan(p) bind(C, name='fftwq_destroy_plan')
  427. import
  428. type(C_PTR), value :: p
  429. end subroutine fftwq_destroy_plan
  430. subroutine fftwq_forget_wisdom() bind(C, name='fftwq_forget_wisdom')
  431. import
  432. end subroutine fftwq_forget_wisdom
  433. subroutine fftwq_cleanup() bind(C, name='fftwq_cleanup')
  434. import
  435. end subroutine fftwq_cleanup
  436. subroutine fftwq_set_timelimit(t) bind(C, name='fftwq_set_timelimit')
  437. import
  438. real(C_DOUBLE), value :: t
  439. end subroutine fftwq_set_timelimit
  440. subroutine fftwq_plan_with_nthreads(nthreads) bind(C, name='fftwq_plan_with_nthreads')
  441. import
  442. integer(C_INT), value :: nthreads
  443. end subroutine fftwq_plan_with_nthreads
  444. integer(C_INT) function fftwq_planner_nthreads() bind(C, name='fftwq_planner_nthreads')
  445. import
  446. end function fftwq_planner_nthreads
  447. integer(C_INT) function fftwq_init_threads() bind(C, name='fftwq_init_threads')
  448. import
  449. end function fftwq_init_threads
  450. subroutine fftwq_cleanup_threads() bind(C, name='fftwq_cleanup_threads')
  451. import
  452. end subroutine fftwq_cleanup_threads
  453. ! Unable to generate Fortran interface for fftwq_threads_set_callback
  454. subroutine fftwq_make_planner_thread_safe() bind(C, name='fftwq_make_planner_thread_safe')
  455. import
  456. end subroutine fftwq_make_planner_thread_safe
  457. integer(C_INT) function fftwq_export_wisdom_to_filename(filename) bind(C, name='fftwq_export_wisdom_to_filename')
  458. import
  459. character(C_CHAR), dimension(*), intent(in) :: filename
  460. end function fftwq_export_wisdom_to_filename
  461. subroutine fftwq_export_wisdom_to_file(output_file) bind(C, name='fftwq_export_wisdom_to_file')
  462. import
  463. type(C_PTR), value :: output_file
  464. end subroutine fftwq_export_wisdom_to_file
  465. type(C_PTR) function fftwq_export_wisdom_to_string() bind(C, name='fftwq_export_wisdom_to_string')
  466. import
  467. end function fftwq_export_wisdom_to_string
  468. subroutine fftwq_export_wisdom(write_char,data) bind(C, name='fftwq_export_wisdom')
  469. import
  470. type(C_FUNPTR), value :: write_char
  471. type(C_PTR), value :: data
  472. end subroutine fftwq_export_wisdom
  473. integer(C_INT) function fftwq_import_system_wisdom() bind(C, name='fftwq_import_system_wisdom')
  474. import
  475. end function fftwq_import_system_wisdom
  476. integer(C_INT) function fftwq_import_wisdom_from_filename(filename) bind(C, name='fftwq_import_wisdom_from_filename')
  477. import
  478. character(C_CHAR), dimension(*), intent(in) :: filename
  479. end function fftwq_import_wisdom_from_filename
  480. integer(C_INT) function fftwq_import_wisdom_from_file(input_file) bind(C, name='fftwq_import_wisdom_from_file')
  481. import
  482. type(C_PTR), value :: input_file
  483. end function fftwq_import_wisdom_from_file
  484. integer(C_INT) function fftwq_import_wisdom_from_string(input_string) bind(C, name='fftwq_import_wisdom_from_string')
  485. import
  486. character(C_CHAR), dimension(*), intent(in) :: input_string
  487. end function fftwq_import_wisdom_from_string
  488. integer(C_INT) function fftwq_import_wisdom(read_char,data) bind(C, name='fftwq_import_wisdom')
  489. import
  490. type(C_FUNPTR), value :: read_char
  491. type(C_PTR), value :: data
  492. end function fftwq_import_wisdom
  493. subroutine fftwq_fprint_plan(p,output_file) bind(C, name='fftwq_fprint_plan')
  494. import
  495. type(C_PTR), value :: p
  496. type(C_PTR), value :: output_file
  497. end subroutine fftwq_fprint_plan
  498. subroutine fftwq_print_plan(p) bind(C, name='fftwq_print_plan')
  499. import
  500. type(C_PTR), value :: p
  501. end subroutine fftwq_print_plan
  502. type(C_PTR) function fftwq_sprint_plan(p) bind(C, name='fftwq_sprint_plan')
  503. import
  504. type(C_PTR), value :: p
  505. end function fftwq_sprint_plan
  506. type(C_PTR) function fftwq_malloc(n) bind(C, name='fftwq_malloc')
  507. import
  508. integer(C_SIZE_T), value :: n
  509. end function fftwq_malloc
  510. type(C_PTR) function fftwq_alloc_real(n) bind(C, name='fftwq_alloc_real')
  511. import
  512. integer(C_SIZE_T), value :: n
  513. end function fftwq_alloc_real
  514. type(C_PTR) function fftwq_alloc_complex(n) bind(C, name='fftwq_alloc_complex')
  515. import
  516. integer(C_SIZE_T), value :: n
  517. end function fftwq_alloc_complex
  518. subroutine fftwq_free(p) bind(C, name='fftwq_free')
  519. import
  520. type(C_PTR), value :: p
  521. end subroutine fftwq_free
  522. subroutine fftwq_flops(p,add,mul,fmas) bind(C, name='fftwq_flops')
  523. import
  524. type(C_PTR), value :: p
  525. real(C_DOUBLE), intent(out) :: add
  526. real(C_DOUBLE), intent(out) :: mul
  527. real(C_DOUBLE), intent(out) :: fmas
  528. end subroutine fftwq_flops
  529. real(C_DOUBLE) function fftwq_estimate_cost(p) bind(C, name='fftwq_estimate_cost')
  530. import
  531. type(C_PTR), value :: p
  532. end function fftwq_estimate_cost
  533. real(C_DOUBLE) function fftwq_cost(p) bind(C, name='fftwq_cost')
  534. import
  535. type(C_PTR), value :: p
  536. end function fftwq_cost
  537. integer(C_INT) function fftwq_alignment_of(p) bind(C, name='fftwq_alignment_of')
  538. import
  539. real(16), dimension(*), intent(out) :: p
  540. end function fftwq_alignment_of
  541. end interface