fftw3-mpi.f03 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. !*******************************************************************************
  2. ! Copyright (c) 2003, 2007-11 Matteo Frigo
  3. ! Copyright (c) 2003, 2007-11 Massachusetts Institute of Technology
  4. !
  5. ! This program is distributed with permission
  6. !
  7. !*******************************************************************************
  8. ! Generated automatically by FFTW generator. DO NOT EDIT!
  9. include 'fftw3.f03'
  10. integer(C_INTPTR_T), parameter :: FFTW_MPI_DEFAULT_BLOCK = 0
  11. integer(C_INT), parameter :: FFTW_MPI_SCRAMBLED_IN = 134217728
  12. integer(C_INT), parameter :: FFTW_MPI_SCRAMBLED_OUT = 268435456
  13. integer(C_INT), parameter :: FFTW_MPI_TRANSPOSED_IN = 536870912
  14. integer(C_INT), parameter :: FFTW_MPI_TRANSPOSED_OUT = 1073741824
  15. type, bind(C) :: fftw_mpi_ddim
  16. integer(C_INTPTR_T) n, ib, ob
  17. end type fftw_mpi_ddim
  18. interface
  19. subroutine fftw_mpi_init() bind(C, name='fftw_mpi_init')
  20. import
  21. end subroutine fftw_mpi_init
  22. subroutine fftw_mpi_cleanup() bind(C, name='fftw_mpi_cleanup')
  23. import
  24. end subroutine fftw_mpi_cleanup
  25. integer(C_INTPTR_T) function fftw_mpi_local_size_many_transposed(rnk,n,howmany,block0,block1,comm,local_n0,local_0_start, &
  26. local_n1,local_1_start) &
  27. bind(C, name='fftw_mpi_local_size_many_transposed_f03')
  28. import
  29. integer(C_INT), value :: rnk
  30. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  31. integer(C_INTPTR_T), value :: howmany
  32. integer(C_INTPTR_T), value :: block0
  33. integer(C_INTPTR_T), value :: block1
  34. integer(C_INT32_T), value :: comm
  35. integer(C_INTPTR_T), intent(out) :: local_n0
  36. integer(C_INTPTR_T), intent(out) :: local_0_start
  37. integer(C_INTPTR_T), intent(out) :: local_n1
  38. integer(C_INTPTR_T), intent(out) :: local_1_start
  39. end function fftw_mpi_local_size_many_transposed
  40. integer(C_INTPTR_T) function fftw_mpi_local_size_many(rnk,n,howmany,block0,comm,local_n0,local_0_start) &
  41. bind(C, name='fftw_mpi_local_size_many_f03')
  42. import
  43. integer(C_INT), value :: rnk
  44. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  45. integer(C_INTPTR_T), value :: howmany
  46. integer(C_INTPTR_T), value :: block0
  47. integer(C_INT32_T), value :: comm
  48. integer(C_INTPTR_T), intent(out) :: local_n0
  49. integer(C_INTPTR_T), intent(out) :: local_0_start
  50. end function fftw_mpi_local_size_many
  51. integer(C_INTPTR_T) function fftw_mpi_local_size_transposed(rnk,n,comm,local_n0,local_0_start,local_n1,local_1_start) &
  52. bind(C, name='fftw_mpi_local_size_transposed_f03')
  53. import
  54. integer(C_INT), value :: rnk
  55. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  56. integer(C_INT32_T), value :: comm
  57. integer(C_INTPTR_T), intent(out) :: local_n0
  58. integer(C_INTPTR_T), intent(out) :: local_0_start
  59. integer(C_INTPTR_T), intent(out) :: local_n1
  60. integer(C_INTPTR_T), intent(out) :: local_1_start
  61. end function fftw_mpi_local_size_transposed
  62. integer(C_INTPTR_T) function fftw_mpi_local_size(rnk,n,comm,local_n0,local_0_start) bind(C, name='fftw_mpi_local_size_f03')
  63. import
  64. integer(C_INT), value :: rnk
  65. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  66. integer(C_INT32_T), value :: comm
  67. integer(C_INTPTR_T), intent(out) :: local_n0
  68. integer(C_INTPTR_T), intent(out) :: local_0_start
  69. end function fftw_mpi_local_size
  70. integer(C_INTPTR_T) function fftw_mpi_local_size_many_1d(n0,howmany,comm,sign,flags,local_ni,local_i_start,local_no, &
  71. local_o_start) bind(C, name='fftw_mpi_local_size_many_1d_f03')
  72. import
  73. integer(C_INTPTR_T), value :: n0
  74. integer(C_INTPTR_T), value :: howmany
  75. integer(C_INT32_T), value :: comm
  76. integer(C_INT), value :: sign
  77. integer(C_INT), value :: flags
  78. integer(C_INTPTR_T), intent(out) :: local_ni
  79. integer(C_INTPTR_T), intent(out) :: local_i_start
  80. integer(C_INTPTR_T), intent(out) :: local_no
  81. integer(C_INTPTR_T), intent(out) :: local_o_start
  82. end function fftw_mpi_local_size_many_1d
  83. integer(C_INTPTR_T) function fftw_mpi_local_size_1d(n0,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start) &
  84. bind(C, name='fftw_mpi_local_size_1d_f03')
  85. import
  86. integer(C_INTPTR_T), value :: n0
  87. integer(C_INT32_T), value :: comm
  88. integer(C_INT), value :: sign
  89. integer(C_INT), value :: flags
  90. integer(C_INTPTR_T), intent(out) :: local_ni
  91. integer(C_INTPTR_T), intent(out) :: local_i_start
  92. integer(C_INTPTR_T), intent(out) :: local_no
  93. integer(C_INTPTR_T), intent(out) :: local_o_start
  94. end function fftw_mpi_local_size_1d
  95. integer(C_INTPTR_T) function fftw_mpi_local_size_2d(n0,n1,comm,local_n0,local_0_start) &
  96. bind(C, name='fftw_mpi_local_size_2d_f03')
  97. import
  98. integer(C_INTPTR_T), value :: n0
  99. integer(C_INTPTR_T), value :: n1
  100. integer(C_INT32_T), value :: comm
  101. integer(C_INTPTR_T), intent(out) :: local_n0
  102. integer(C_INTPTR_T), intent(out) :: local_0_start
  103. end function fftw_mpi_local_size_2d
  104. integer(C_INTPTR_T) function fftw_mpi_local_size_2d_transposed(n0,n1,comm,local_n0,local_0_start,local_n1,local_1_start) &
  105. bind(C, name='fftw_mpi_local_size_2d_transposed_f03')
  106. import
  107. integer(C_INTPTR_T), value :: n0
  108. integer(C_INTPTR_T), value :: n1
  109. integer(C_INT32_T), value :: comm
  110. integer(C_INTPTR_T), intent(out) :: local_n0
  111. integer(C_INTPTR_T), intent(out) :: local_0_start
  112. integer(C_INTPTR_T), intent(out) :: local_n1
  113. integer(C_INTPTR_T), intent(out) :: local_1_start
  114. end function fftw_mpi_local_size_2d_transposed
  115. integer(C_INTPTR_T) function fftw_mpi_local_size_3d(n0,n1,n2,comm,local_n0,local_0_start) &
  116. bind(C, name='fftw_mpi_local_size_3d_f03')
  117. import
  118. integer(C_INTPTR_T), value :: n0
  119. integer(C_INTPTR_T), value :: n1
  120. integer(C_INTPTR_T), value :: n2
  121. integer(C_INT32_T), value :: comm
  122. integer(C_INTPTR_T), intent(out) :: local_n0
  123. integer(C_INTPTR_T), intent(out) :: local_0_start
  124. end function fftw_mpi_local_size_3d
  125. integer(C_INTPTR_T) function fftw_mpi_local_size_3d_transposed(n0,n1,n2,comm,local_n0,local_0_start,local_n1,local_1_start) &
  126. bind(C, name='fftw_mpi_local_size_3d_transposed_f03')
  127. import
  128. integer(C_INTPTR_T), value :: n0
  129. integer(C_INTPTR_T), value :: n1
  130. integer(C_INTPTR_T), value :: n2
  131. integer(C_INT32_T), value :: comm
  132. integer(C_INTPTR_T), intent(out) :: local_n0
  133. integer(C_INTPTR_T), intent(out) :: local_0_start
  134. integer(C_INTPTR_T), intent(out) :: local_n1
  135. integer(C_INTPTR_T), intent(out) :: local_1_start
  136. end function fftw_mpi_local_size_3d_transposed
  137. type(C_PTR) function fftw_mpi_plan_many_transpose(n0,n1,howmany,block0,block1,in,out,comm,flags) &
  138. bind(C, name='fftw_mpi_plan_many_transpose_f03')
  139. import
  140. integer(C_INTPTR_T), value :: n0
  141. integer(C_INTPTR_T), value :: n1
  142. integer(C_INTPTR_T), value :: howmany
  143. integer(C_INTPTR_T), value :: block0
  144. integer(C_INTPTR_T), value :: block1
  145. real(C_DOUBLE), dimension(*), intent(out) :: in
  146. real(C_DOUBLE), dimension(*), intent(out) :: out
  147. integer(C_INT32_T), value :: comm
  148. integer(C_INT), value :: flags
  149. end function fftw_mpi_plan_many_transpose
  150. type(C_PTR) function fftw_mpi_plan_transpose(n0,n1,in,out,comm,flags) bind(C, name='fftw_mpi_plan_transpose_f03')
  151. import
  152. integer(C_INTPTR_T), value :: n0
  153. integer(C_INTPTR_T), value :: n1
  154. real(C_DOUBLE), dimension(*), intent(out) :: in
  155. real(C_DOUBLE), dimension(*), intent(out) :: out
  156. integer(C_INT32_T), value :: comm
  157. integer(C_INT), value :: flags
  158. end function fftw_mpi_plan_transpose
  159. type(C_PTR) function fftw_mpi_plan_many_dft(rnk,n,howmany,block,tblock,in,out,comm,sign,flags) &
  160. bind(C, name='fftw_mpi_plan_many_dft_f03')
  161. import
  162. integer(C_INT), value :: rnk
  163. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  164. integer(C_INTPTR_T), value :: howmany
  165. integer(C_INTPTR_T), value :: block
  166. integer(C_INTPTR_T), value :: tblock
  167. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  168. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  169. integer(C_INT32_T), value :: comm
  170. integer(C_INT), value :: sign
  171. integer(C_INT), value :: flags
  172. end function fftw_mpi_plan_many_dft
  173. type(C_PTR) function fftw_mpi_plan_dft(rnk,n,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_f03')
  174. import
  175. integer(C_INT), value :: rnk
  176. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  177. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  178. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  179. integer(C_INT32_T), value :: comm
  180. integer(C_INT), value :: sign
  181. integer(C_INT), value :: flags
  182. end function fftw_mpi_plan_dft
  183. type(C_PTR) function fftw_mpi_plan_dft_1d(n0,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_1d_f03')
  184. import
  185. integer(C_INTPTR_T), value :: n0
  186. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  187. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  188. integer(C_INT32_T), value :: comm
  189. integer(C_INT), value :: sign
  190. integer(C_INT), value :: flags
  191. end function fftw_mpi_plan_dft_1d
  192. type(C_PTR) function fftw_mpi_plan_dft_2d(n0,n1,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_2d_f03')
  193. import
  194. integer(C_INTPTR_T), value :: n0
  195. integer(C_INTPTR_T), value :: n1
  196. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  197. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  198. integer(C_INT32_T), value :: comm
  199. integer(C_INT), value :: sign
  200. integer(C_INT), value :: flags
  201. end function fftw_mpi_plan_dft_2d
  202. type(C_PTR) function fftw_mpi_plan_dft_3d(n0,n1,n2,in,out,comm,sign,flags) bind(C, name='fftw_mpi_plan_dft_3d_f03')
  203. import
  204. integer(C_INTPTR_T), value :: n0
  205. integer(C_INTPTR_T), value :: n1
  206. integer(C_INTPTR_T), value :: n2
  207. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  208. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  209. integer(C_INT32_T), value :: comm
  210. integer(C_INT), value :: sign
  211. integer(C_INT), value :: flags
  212. end function fftw_mpi_plan_dft_3d
  213. type(C_PTR) function fftw_mpi_plan_many_r2r(rnk,n,howmany,iblock,oblock,in,out,comm,kind,flags) &
  214. bind(C, name='fftw_mpi_plan_many_r2r_f03')
  215. import
  216. integer(C_INT), value :: rnk
  217. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  218. integer(C_INTPTR_T), value :: howmany
  219. integer(C_INTPTR_T), value :: iblock
  220. integer(C_INTPTR_T), value :: oblock
  221. real(C_DOUBLE), dimension(*), intent(out) :: in
  222. real(C_DOUBLE), dimension(*), intent(out) :: out
  223. integer(C_INT32_T), value :: comm
  224. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  225. integer(C_INT), value :: flags
  226. end function fftw_mpi_plan_many_r2r
  227. type(C_PTR) function fftw_mpi_plan_r2r(rnk,n,in,out,comm,kind,flags) bind(C, name='fftw_mpi_plan_r2r_f03')
  228. import
  229. integer(C_INT), value :: rnk
  230. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  231. real(C_DOUBLE), dimension(*), intent(out) :: in
  232. real(C_DOUBLE), dimension(*), intent(out) :: out
  233. integer(C_INT32_T), value :: comm
  234. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  235. integer(C_INT), value :: flags
  236. end function fftw_mpi_plan_r2r
  237. type(C_PTR) function fftw_mpi_plan_r2r_2d(n0,n1,in,out,comm,kind0,kind1,flags) bind(C, name='fftw_mpi_plan_r2r_2d_f03')
  238. import
  239. integer(C_INTPTR_T), value :: n0
  240. integer(C_INTPTR_T), value :: n1
  241. real(C_DOUBLE), dimension(*), intent(out) :: in
  242. real(C_DOUBLE), dimension(*), intent(out) :: out
  243. integer(C_INT32_T), value :: comm
  244. integer(C_FFTW_R2R_KIND), value :: kind0
  245. integer(C_FFTW_R2R_KIND), value :: kind1
  246. integer(C_INT), value :: flags
  247. end function fftw_mpi_plan_r2r_2d
  248. type(C_PTR) function fftw_mpi_plan_r2r_3d(n0,n1,n2,in,out,comm,kind0,kind1,kind2,flags) bind(C, name='fftw_mpi_plan_r2r_3d_f03')
  249. import
  250. integer(C_INTPTR_T), value :: n0
  251. integer(C_INTPTR_T), value :: n1
  252. integer(C_INTPTR_T), value :: n2
  253. real(C_DOUBLE), dimension(*), intent(out) :: in
  254. real(C_DOUBLE), dimension(*), intent(out) :: out
  255. integer(C_INT32_T), value :: comm
  256. integer(C_FFTW_R2R_KIND), value :: kind0
  257. integer(C_FFTW_R2R_KIND), value :: kind1
  258. integer(C_FFTW_R2R_KIND), value :: kind2
  259. integer(C_INT), value :: flags
  260. end function fftw_mpi_plan_r2r_3d
  261. type(C_PTR) function fftw_mpi_plan_many_dft_r2c(rnk,n,howmany,iblock,oblock,in,out,comm,flags) &
  262. bind(C, name='fftw_mpi_plan_many_dft_r2c_f03')
  263. import
  264. integer(C_INT), value :: rnk
  265. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  266. integer(C_INTPTR_T), value :: howmany
  267. integer(C_INTPTR_T), value :: iblock
  268. integer(C_INTPTR_T), value :: oblock
  269. real(C_DOUBLE), dimension(*), intent(out) :: in
  270. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  271. integer(C_INT32_T), value :: comm
  272. integer(C_INT), value :: flags
  273. end function fftw_mpi_plan_many_dft_r2c
  274. type(C_PTR) function fftw_mpi_plan_dft_r2c(rnk,n,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_r2c_f03')
  275. import
  276. integer(C_INT), value :: rnk
  277. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  278. real(C_DOUBLE), dimension(*), intent(out) :: in
  279. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  280. integer(C_INT32_T), value :: comm
  281. integer(C_INT), value :: flags
  282. end function fftw_mpi_plan_dft_r2c
  283. type(C_PTR) function fftw_mpi_plan_dft_r2c_2d(n0,n1,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_r2c_2d_f03')
  284. import
  285. integer(C_INTPTR_T), value :: n0
  286. integer(C_INTPTR_T), value :: n1
  287. real(C_DOUBLE), dimension(*), intent(out) :: in
  288. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  289. integer(C_INT32_T), value :: comm
  290. integer(C_INT), value :: flags
  291. end function fftw_mpi_plan_dft_r2c_2d
  292. type(C_PTR) function fftw_mpi_plan_dft_r2c_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_r2c_3d_f03')
  293. import
  294. integer(C_INTPTR_T), value :: n0
  295. integer(C_INTPTR_T), value :: n1
  296. integer(C_INTPTR_T), value :: n2
  297. real(C_DOUBLE), dimension(*), intent(out) :: in
  298. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  299. integer(C_INT32_T), value :: comm
  300. integer(C_INT), value :: flags
  301. end function fftw_mpi_plan_dft_r2c_3d
  302. type(C_PTR) function fftw_mpi_plan_many_dft_c2r(rnk,n,howmany,iblock,oblock,in,out,comm,flags) &
  303. bind(C, name='fftw_mpi_plan_many_dft_c2r_f03')
  304. import
  305. integer(C_INT), value :: rnk
  306. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  307. integer(C_INTPTR_T), value :: howmany
  308. integer(C_INTPTR_T), value :: iblock
  309. integer(C_INTPTR_T), value :: oblock
  310. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  311. real(C_DOUBLE), dimension(*), intent(out) :: out
  312. integer(C_INT32_T), value :: comm
  313. integer(C_INT), value :: flags
  314. end function fftw_mpi_plan_many_dft_c2r
  315. type(C_PTR) function fftw_mpi_plan_dft_c2r(rnk,n,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_c2r_f03')
  316. import
  317. integer(C_INT), value :: rnk
  318. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  319. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  320. real(C_DOUBLE), dimension(*), intent(out) :: out
  321. integer(C_INT32_T), value :: comm
  322. integer(C_INT), value :: flags
  323. end function fftw_mpi_plan_dft_c2r
  324. type(C_PTR) function fftw_mpi_plan_dft_c2r_2d(n0,n1,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_c2r_2d_f03')
  325. import
  326. integer(C_INTPTR_T), value :: n0
  327. integer(C_INTPTR_T), value :: n1
  328. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  329. real(C_DOUBLE), dimension(*), intent(out) :: out
  330. integer(C_INT32_T), value :: comm
  331. integer(C_INT), value :: flags
  332. end function fftw_mpi_plan_dft_c2r_2d
  333. type(C_PTR) function fftw_mpi_plan_dft_c2r_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftw_mpi_plan_dft_c2r_3d_f03')
  334. import
  335. integer(C_INTPTR_T), value :: n0
  336. integer(C_INTPTR_T), value :: n1
  337. integer(C_INTPTR_T), value :: n2
  338. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
  339. real(C_DOUBLE), dimension(*), intent(out) :: out
  340. integer(C_INT32_T), value :: comm
  341. integer(C_INT), value :: flags
  342. end function fftw_mpi_plan_dft_c2r_3d
  343. subroutine fftw_mpi_gather_wisdom(comm_) bind(C, name='fftw_mpi_gather_wisdom_f03')
  344. import
  345. integer(C_INT32_T), value :: comm_
  346. end subroutine fftw_mpi_gather_wisdom
  347. subroutine fftw_mpi_broadcast_wisdom(comm_) bind(C, name='fftw_mpi_broadcast_wisdom_f03')
  348. import
  349. integer(C_INT32_T), value :: comm_
  350. end subroutine fftw_mpi_broadcast_wisdom
  351. subroutine fftw_mpi_execute_dft(p,in,out) bind(C, name='fftw_mpi_execute_dft')
  352. import
  353. type(C_PTR), value :: p
  354. complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in
  355. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  356. end subroutine fftw_mpi_execute_dft
  357. subroutine fftw_mpi_execute_dft_r2c(p,in,out) bind(C, name='fftw_mpi_execute_dft_r2c')
  358. import
  359. type(C_PTR), value :: p
  360. real(C_DOUBLE), dimension(*), intent(inout) :: in
  361. complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
  362. end subroutine fftw_mpi_execute_dft_r2c
  363. subroutine fftw_mpi_execute_dft_c2r(p,in,out) bind(C, name='fftw_mpi_execute_dft_c2r')
  364. import
  365. type(C_PTR), value :: p
  366. complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in
  367. real(C_DOUBLE), dimension(*), intent(out) :: out
  368. end subroutine fftw_mpi_execute_dft_c2r
  369. subroutine fftw_mpi_execute_r2r(p,in,out) bind(C, name='fftw_mpi_execute_r2r')
  370. import
  371. type(C_PTR), value :: p
  372. real(C_DOUBLE), dimension(*), intent(inout) :: in
  373. real(C_DOUBLE), dimension(*), intent(out) :: out
  374. end subroutine fftw_mpi_execute_r2r
  375. end interface
  376. type, bind(C) :: fftwf_mpi_ddim
  377. integer(C_INTPTR_T) n, ib, ob
  378. end type fftwf_mpi_ddim
  379. interface
  380. subroutine fftwf_mpi_init() bind(C, name='fftwf_mpi_init')
  381. import
  382. end subroutine fftwf_mpi_init
  383. subroutine fftwf_mpi_cleanup() bind(C, name='fftwf_mpi_cleanup')
  384. import
  385. end subroutine fftwf_mpi_cleanup
  386. integer(C_INTPTR_T) function fftwf_mpi_local_size_many_transposed(rnk,n,howmany,block0,block1,comm,local_n0,local_0_start, &
  387. local_n1,local_1_start) &
  388. bind(C, name='fftwf_mpi_local_size_many_transposed_f03')
  389. import
  390. integer(C_INT), value :: rnk
  391. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  392. integer(C_INTPTR_T), value :: howmany
  393. integer(C_INTPTR_T), value :: block0
  394. integer(C_INTPTR_T), value :: block1
  395. integer(C_INT32_T), value :: comm
  396. integer(C_INTPTR_T), intent(out) :: local_n0
  397. integer(C_INTPTR_T), intent(out) :: local_0_start
  398. integer(C_INTPTR_T), intent(out) :: local_n1
  399. integer(C_INTPTR_T), intent(out) :: local_1_start
  400. end function fftwf_mpi_local_size_many_transposed
  401. integer(C_INTPTR_T) function fftwf_mpi_local_size_many(rnk,n,howmany,block0,comm,local_n0,local_0_start) &
  402. bind(C, name='fftwf_mpi_local_size_many_f03')
  403. import
  404. integer(C_INT), value :: rnk
  405. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  406. integer(C_INTPTR_T), value :: howmany
  407. integer(C_INTPTR_T), value :: block0
  408. integer(C_INT32_T), value :: comm
  409. integer(C_INTPTR_T), intent(out) :: local_n0
  410. integer(C_INTPTR_T), intent(out) :: local_0_start
  411. end function fftwf_mpi_local_size_many
  412. integer(C_INTPTR_T) function fftwf_mpi_local_size_transposed(rnk,n,comm,local_n0,local_0_start,local_n1,local_1_start) &
  413. bind(C, name='fftwf_mpi_local_size_transposed_f03')
  414. import
  415. integer(C_INT), value :: rnk
  416. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  417. integer(C_INT32_T), value :: comm
  418. integer(C_INTPTR_T), intent(out) :: local_n0
  419. integer(C_INTPTR_T), intent(out) :: local_0_start
  420. integer(C_INTPTR_T), intent(out) :: local_n1
  421. integer(C_INTPTR_T), intent(out) :: local_1_start
  422. end function fftwf_mpi_local_size_transposed
  423. integer(C_INTPTR_T) function fftwf_mpi_local_size(rnk,n,comm,local_n0,local_0_start) bind(C, name='fftwf_mpi_local_size_f03')
  424. import
  425. integer(C_INT), value :: rnk
  426. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  427. integer(C_INT32_T), value :: comm
  428. integer(C_INTPTR_T), intent(out) :: local_n0
  429. integer(C_INTPTR_T), intent(out) :: local_0_start
  430. end function fftwf_mpi_local_size
  431. integer(C_INTPTR_T) function fftwf_mpi_local_size_many_1d(n0,howmany,comm,sign,flags,local_ni,local_i_start,local_no, &
  432. local_o_start) bind(C, name='fftwf_mpi_local_size_many_1d_f03')
  433. import
  434. integer(C_INTPTR_T), value :: n0
  435. integer(C_INTPTR_T), value :: howmany
  436. integer(C_INT32_T), value :: comm
  437. integer(C_INT), value :: sign
  438. integer(C_INT), value :: flags
  439. integer(C_INTPTR_T), intent(out) :: local_ni
  440. integer(C_INTPTR_T), intent(out) :: local_i_start
  441. integer(C_INTPTR_T), intent(out) :: local_no
  442. integer(C_INTPTR_T), intent(out) :: local_o_start
  443. end function fftwf_mpi_local_size_many_1d
  444. integer(C_INTPTR_T) function fftwf_mpi_local_size_1d(n0,comm,sign,flags,local_ni,local_i_start,local_no,local_o_start) &
  445. bind(C, name='fftwf_mpi_local_size_1d_f03')
  446. import
  447. integer(C_INTPTR_T), value :: n0
  448. integer(C_INT32_T), value :: comm
  449. integer(C_INT), value :: sign
  450. integer(C_INT), value :: flags
  451. integer(C_INTPTR_T), intent(out) :: local_ni
  452. integer(C_INTPTR_T), intent(out) :: local_i_start
  453. integer(C_INTPTR_T), intent(out) :: local_no
  454. integer(C_INTPTR_T), intent(out) :: local_o_start
  455. end function fftwf_mpi_local_size_1d
  456. integer(C_INTPTR_T) function fftwf_mpi_local_size_2d(n0,n1,comm,local_n0,local_0_start) &
  457. bind(C, name='fftwf_mpi_local_size_2d_f03')
  458. import
  459. integer(C_INTPTR_T), value :: n0
  460. integer(C_INTPTR_T), value :: n1
  461. integer(C_INT32_T), value :: comm
  462. integer(C_INTPTR_T), intent(out) :: local_n0
  463. integer(C_INTPTR_T), intent(out) :: local_0_start
  464. end function fftwf_mpi_local_size_2d
  465. integer(C_INTPTR_T) function fftwf_mpi_local_size_2d_transposed(n0,n1,comm,local_n0,local_0_start,local_n1,local_1_start) &
  466. bind(C, name='fftwf_mpi_local_size_2d_transposed_f03')
  467. import
  468. integer(C_INTPTR_T), value :: n0
  469. integer(C_INTPTR_T), value :: n1
  470. integer(C_INT32_T), value :: comm
  471. integer(C_INTPTR_T), intent(out) :: local_n0
  472. integer(C_INTPTR_T), intent(out) :: local_0_start
  473. integer(C_INTPTR_T), intent(out) :: local_n1
  474. integer(C_INTPTR_T), intent(out) :: local_1_start
  475. end function fftwf_mpi_local_size_2d_transposed
  476. integer(C_INTPTR_T) function fftwf_mpi_local_size_3d(n0,n1,n2,comm,local_n0,local_0_start) &
  477. bind(C, name='fftwf_mpi_local_size_3d_f03')
  478. import
  479. integer(C_INTPTR_T), value :: n0
  480. integer(C_INTPTR_T), value :: n1
  481. integer(C_INTPTR_T), value :: n2
  482. integer(C_INT32_T), value :: comm
  483. integer(C_INTPTR_T), intent(out) :: local_n0
  484. integer(C_INTPTR_T), intent(out) :: local_0_start
  485. end function fftwf_mpi_local_size_3d
  486. integer(C_INTPTR_T) function fftwf_mpi_local_size_3d_transposed(n0,n1,n2,comm,local_n0,local_0_start,local_n1,local_1_start) &
  487. bind(C, name='fftwf_mpi_local_size_3d_transposed_f03')
  488. import
  489. integer(C_INTPTR_T), value :: n0
  490. integer(C_INTPTR_T), value :: n1
  491. integer(C_INTPTR_T), value :: n2
  492. integer(C_INT32_T), value :: comm
  493. integer(C_INTPTR_T), intent(out) :: local_n0
  494. integer(C_INTPTR_T), intent(out) :: local_0_start
  495. integer(C_INTPTR_T), intent(out) :: local_n1
  496. integer(C_INTPTR_T), intent(out) :: local_1_start
  497. end function fftwf_mpi_local_size_3d_transposed
  498. type(C_PTR) function fftwf_mpi_plan_many_transpose(n0,n1,howmany,block0,block1,in,out,comm,flags) &
  499. bind(C, name='fftwf_mpi_plan_many_transpose_f03')
  500. import
  501. integer(C_INTPTR_T), value :: n0
  502. integer(C_INTPTR_T), value :: n1
  503. integer(C_INTPTR_T), value :: howmany
  504. integer(C_INTPTR_T), value :: block0
  505. integer(C_INTPTR_T), value :: block1
  506. real(C_FLOAT), dimension(*), intent(out) :: in
  507. real(C_FLOAT), dimension(*), intent(out) :: out
  508. integer(C_INT32_T), value :: comm
  509. integer(C_INT), value :: flags
  510. end function fftwf_mpi_plan_many_transpose
  511. type(C_PTR) function fftwf_mpi_plan_transpose(n0,n1,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_transpose_f03')
  512. import
  513. integer(C_INTPTR_T), value :: n0
  514. integer(C_INTPTR_T), value :: n1
  515. real(C_FLOAT), dimension(*), intent(out) :: in
  516. real(C_FLOAT), dimension(*), intent(out) :: out
  517. integer(C_INT32_T), value :: comm
  518. integer(C_INT), value :: flags
  519. end function fftwf_mpi_plan_transpose
  520. type(C_PTR) function fftwf_mpi_plan_many_dft(rnk,n,howmany,block,tblock,in,out,comm,sign,flags) &
  521. bind(C, name='fftwf_mpi_plan_many_dft_f03')
  522. import
  523. integer(C_INT), value :: rnk
  524. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  525. integer(C_INTPTR_T), value :: howmany
  526. integer(C_INTPTR_T), value :: block
  527. integer(C_INTPTR_T), value :: tblock
  528. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  529. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  530. integer(C_INT32_T), value :: comm
  531. integer(C_INT), value :: sign
  532. integer(C_INT), value :: flags
  533. end function fftwf_mpi_plan_many_dft
  534. type(C_PTR) function fftwf_mpi_plan_dft(rnk,n,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_f03')
  535. import
  536. integer(C_INT), value :: rnk
  537. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  538. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  539. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  540. integer(C_INT32_T), value :: comm
  541. integer(C_INT), value :: sign
  542. integer(C_INT), value :: flags
  543. end function fftwf_mpi_plan_dft
  544. type(C_PTR) function fftwf_mpi_plan_dft_1d(n0,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_1d_f03')
  545. import
  546. integer(C_INTPTR_T), value :: n0
  547. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  548. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  549. integer(C_INT32_T), value :: comm
  550. integer(C_INT), value :: sign
  551. integer(C_INT), value :: flags
  552. end function fftwf_mpi_plan_dft_1d
  553. type(C_PTR) function fftwf_mpi_plan_dft_2d(n0,n1,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_2d_f03')
  554. import
  555. integer(C_INTPTR_T), value :: n0
  556. integer(C_INTPTR_T), value :: n1
  557. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  558. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  559. integer(C_INT32_T), value :: comm
  560. integer(C_INT), value :: sign
  561. integer(C_INT), value :: flags
  562. end function fftwf_mpi_plan_dft_2d
  563. type(C_PTR) function fftwf_mpi_plan_dft_3d(n0,n1,n2,in,out,comm,sign,flags) bind(C, name='fftwf_mpi_plan_dft_3d_f03')
  564. import
  565. integer(C_INTPTR_T), value :: n0
  566. integer(C_INTPTR_T), value :: n1
  567. integer(C_INTPTR_T), value :: n2
  568. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  569. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  570. integer(C_INT32_T), value :: comm
  571. integer(C_INT), value :: sign
  572. integer(C_INT), value :: flags
  573. end function fftwf_mpi_plan_dft_3d
  574. type(C_PTR) function fftwf_mpi_plan_many_r2r(rnk,n,howmany,iblock,oblock,in,out,comm,kind,flags) &
  575. bind(C, name='fftwf_mpi_plan_many_r2r_f03')
  576. import
  577. integer(C_INT), value :: rnk
  578. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  579. integer(C_INTPTR_T), value :: howmany
  580. integer(C_INTPTR_T), value :: iblock
  581. integer(C_INTPTR_T), value :: oblock
  582. real(C_FLOAT), dimension(*), intent(out) :: in
  583. real(C_FLOAT), dimension(*), intent(out) :: out
  584. integer(C_INT32_T), value :: comm
  585. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  586. integer(C_INT), value :: flags
  587. end function fftwf_mpi_plan_many_r2r
  588. type(C_PTR) function fftwf_mpi_plan_r2r(rnk,n,in,out,comm,kind,flags) bind(C, name='fftwf_mpi_plan_r2r_f03')
  589. import
  590. integer(C_INT), value :: rnk
  591. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  592. real(C_FLOAT), dimension(*), intent(out) :: in
  593. real(C_FLOAT), dimension(*), intent(out) :: out
  594. integer(C_INT32_T), value :: comm
  595. integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
  596. integer(C_INT), value :: flags
  597. end function fftwf_mpi_plan_r2r
  598. type(C_PTR) function fftwf_mpi_plan_r2r_2d(n0,n1,in,out,comm,kind0,kind1,flags) bind(C, name='fftwf_mpi_plan_r2r_2d_f03')
  599. import
  600. integer(C_INTPTR_T), value :: n0
  601. integer(C_INTPTR_T), value :: n1
  602. real(C_FLOAT), dimension(*), intent(out) :: in
  603. real(C_FLOAT), dimension(*), intent(out) :: out
  604. integer(C_INT32_T), value :: comm
  605. integer(C_FFTW_R2R_KIND), value :: kind0
  606. integer(C_FFTW_R2R_KIND), value :: kind1
  607. integer(C_INT), value :: flags
  608. end function fftwf_mpi_plan_r2r_2d
  609. type(C_PTR) function fftwf_mpi_plan_r2r_3d(n0,n1,n2,in,out,comm,kind0,kind1,kind2,flags) &
  610. bind(C, name='fftwf_mpi_plan_r2r_3d_f03')
  611. import
  612. integer(C_INTPTR_T), value :: n0
  613. integer(C_INTPTR_T), value :: n1
  614. integer(C_INTPTR_T), value :: n2
  615. real(C_FLOAT), dimension(*), intent(out) :: in
  616. real(C_FLOAT), dimension(*), intent(out) :: out
  617. integer(C_INT32_T), value :: comm
  618. integer(C_FFTW_R2R_KIND), value :: kind0
  619. integer(C_FFTW_R2R_KIND), value :: kind1
  620. integer(C_FFTW_R2R_KIND), value :: kind2
  621. integer(C_INT), value :: flags
  622. end function fftwf_mpi_plan_r2r_3d
  623. type(C_PTR) function fftwf_mpi_plan_many_dft_r2c(rnk,n,howmany,iblock,oblock,in,out,comm,flags) &
  624. bind(C, name='fftwf_mpi_plan_many_dft_r2c_f03')
  625. import
  626. integer(C_INT), value :: rnk
  627. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  628. integer(C_INTPTR_T), value :: howmany
  629. integer(C_INTPTR_T), value :: iblock
  630. integer(C_INTPTR_T), value :: oblock
  631. real(C_FLOAT), dimension(*), intent(out) :: in
  632. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  633. integer(C_INT32_T), value :: comm
  634. integer(C_INT), value :: flags
  635. end function fftwf_mpi_plan_many_dft_r2c
  636. type(C_PTR) function fftwf_mpi_plan_dft_r2c(rnk,n,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_r2c_f03')
  637. import
  638. integer(C_INT), value :: rnk
  639. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  640. real(C_FLOAT), dimension(*), intent(out) :: in
  641. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  642. integer(C_INT32_T), value :: comm
  643. integer(C_INT), value :: flags
  644. end function fftwf_mpi_plan_dft_r2c
  645. type(C_PTR) function fftwf_mpi_plan_dft_r2c_2d(n0,n1,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_r2c_2d_f03')
  646. import
  647. integer(C_INTPTR_T), value :: n0
  648. integer(C_INTPTR_T), value :: n1
  649. real(C_FLOAT), dimension(*), intent(out) :: in
  650. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  651. integer(C_INT32_T), value :: comm
  652. integer(C_INT), value :: flags
  653. end function fftwf_mpi_plan_dft_r2c_2d
  654. type(C_PTR) function fftwf_mpi_plan_dft_r2c_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_r2c_3d_f03')
  655. import
  656. integer(C_INTPTR_T), value :: n0
  657. integer(C_INTPTR_T), value :: n1
  658. integer(C_INTPTR_T), value :: n2
  659. real(C_FLOAT), dimension(*), intent(out) :: in
  660. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  661. integer(C_INT32_T), value :: comm
  662. integer(C_INT), value :: flags
  663. end function fftwf_mpi_plan_dft_r2c_3d
  664. type(C_PTR) function fftwf_mpi_plan_many_dft_c2r(rnk,n,howmany,iblock,oblock,in,out,comm,flags) &
  665. bind(C, name='fftwf_mpi_plan_many_dft_c2r_f03')
  666. import
  667. integer(C_INT), value :: rnk
  668. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  669. integer(C_INTPTR_T), value :: howmany
  670. integer(C_INTPTR_T), value :: iblock
  671. integer(C_INTPTR_T), value :: oblock
  672. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  673. real(C_FLOAT), dimension(*), intent(out) :: out
  674. integer(C_INT32_T), value :: comm
  675. integer(C_INT), value :: flags
  676. end function fftwf_mpi_plan_many_dft_c2r
  677. type(C_PTR) function fftwf_mpi_plan_dft_c2r(rnk,n,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_c2r_f03')
  678. import
  679. integer(C_INT), value :: rnk
  680. integer(C_INTPTR_T), dimension(*), intent(in) :: n
  681. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  682. real(C_FLOAT), dimension(*), intent(out) :: out
  683. integer(C_INT32_T), value :: comm
  684. integer(C_INT), value :: flags
  685. end function fftwf_mpi_plan_dft_c2r
  686. type(C_PTR) function fftwf_mpi_plan_dft_c2r_2d(n0,n1,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_c2r_2d_f03')
  687. import
  688. integer(C_INTPTR_T), value :: n0
  689. integer(C_INTPTR_T), value :: n1
  690. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  691. real(C_FLOAT), dimension(*), intent(out) :: out
  692. integer(C_INT32_T), value :: comm
  693. integer(C_INT), value :: flags
  694. end function fftwf_mpi_plan_dft_c2r_2d
  695. type(C_PTR) function fftwf_mpi_plan_dft_c2r_3d(n0,n1,n2,in,out,comm,flags) bind(C, name='fftwf_mpi_plan_dft_c2r_3d_f03')
  696. import
  697. integer(C_INTPTR_T), value :: n0
  698. integer(C_INTPTR_T), value :: n1
  699. integer(C_INTPTR_T), value :: n2
  700. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
  701. real(C_FLOAT), dimension(*), intent(out) :: out
  702. integer(C_INT32_T), value :: comm
  703. integer(C_INT), value :: flags
  704. end function fftwf_mpi_plan_dft_c2r_3d
  705. subroutine fftwf_mpi_gather_wisdom(comm_) bind(C, name='fftwf_mpi_gather_wisdom_f03')
  706. import
  707. integer(C_INT32_T), value :: comm_
  708. end subroutine fftwf_mpi_gather_wisdom
  709. subroutine fftwf_mpi_broadcast_wisdom(comm_) bind(C, name='fftwf_mpi_broadcast_wisdom_f03')
  710. import
  711. integer(C_INT32_T), value :: comm_
  712. end subroutine fftwf_mpi_broadcast_wisdom
  713. subroutine fftwf_mpi_execute_dft(p,in,out) bind(C, name='fftwf_mpi_execute_dft')
  714. import
  715. type(C_PTR), value :: p
  716. complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
  717. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  718. end subroutine fftwf_mpi_execute_dft
  719. subroutine fftwf_mpi_execute_dft_r2c(p,in,out) bind(C, name='fftwf_mpi_execute_dft_r2c')
  720. import
  721. type(C_PTR), value :: p
  722. real(C_FLOAT), dimension(*), intent(inout) :: in
  723. complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
  724. end subroutine fftwf_mpi_execute_dft_r2c
  725. subroutine fftwf_mpi_execute_dft_c2r(p,in,out) bind(C, name='fftwf_mpi_execute_dft_c2r')
  726. import
  727. type(C_PTR), value :: p
  728. complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
  729. real(C_FLOAT), dimension(*), intent(out) :: out
  730. end subroutine fftwf_mpi_execute_dft_c2r
  731. subroutine fftwf_mpi_execute_r2r(p,in,out) bind(C, name='fftwf_mpi_execute_r2r')
  732. import
  733. type(C_PTR), value :: p
  734. real(C_FLOAT), dimension(*), intent(inout) :: in
  735. real(C_FLOAT), dimension(*), intent(out) :: out
  736. end subroutine fftwf_mpi_execute_r2r
  737. end interface