1 ! Generated automatically. DO NOT EDIT!
3 integer, parameter :: C_FFTW_R2R_KIND = C_INT32_T
5 integer(C_INT), parameter :: FFTW_R2HC = 0
6 integer(C_INT), parameter :: FFTW_HC2R = 1
7 integer(C_INT), parameter :: FFTW_DHT = 2
8 integer(C_INT), parameter :: FFTW_REDFT00 = 3
9 integer(C_INT), parameter :: FFTW_REDFT01 = 4
10 integer(C_INT), parameter :: FFTW_REDFT10 = 5
11 integer(C_INT), parameter :: FFTW_REDFT11 = 6
12 integer(C_INT), parameter :: FFTW_RODFT00 = 7
13 integer(C_INT), parameter :: FFTW_RODFT01 = 8
14 integer(C_INT), parameter :: FFTW_RODFT10 = 9
15 integer(C_INT), parameter :: FFTW_RODFT11 = 10
16 integer(C_INT), parameter :: FFTW_FORWARD = -1
17 integer(C_INT), parameter :: FFTW_BACKWARD = +1
18 integer(C_INT), parameter :: FFTW_MEASURE = 0
19 integer(C_INT), parameter :: FFTW_DESTROY_INPUT = 1
20 integer(C_INT), parameter :: FFTW_UNALIGNED = 2
21 integer(C_INT), parameter :: FFTW_CONSERVE_MEMORY = 4
22 integer(C_INT), parameter :: FFTW_EXHAUSTIVE = 8
23 integer(C_INT), parameter :: FFTW_PRESERVE_INPUT = 16
24 integer(C_INT), parameter :: FFTW_PATIENT = 32
25 integer(C_INT), parameter :: FFTW_ESTIMATE = 64
26 integer(C_INT), parameter :: FFTW_WISDOM_ONLY = 2097152
27 integer(C_INT), parameter :: FFTW_ESTIMATE_PATIENT = 128
28 integer(C_INT), parameter :: FFTW_BELIEVE_PCOST = 256
29 integer(C_INT), parameter :: FFTW_NO_DFT_R2HC = 512
30 integer(C_INT), parameter :: FFTW_NO_NONTHREADED = 1024
31 integer(C_INT), parameter :: FFTW_NO_BUFFERING = 2048
32 integer(C_INT), parameter :: FFTW_NO_INDIRECT_OP = 4096
33 integer(C_INT), parameter :: FFTW_ALLOW_LARGE_GENERIC = 8192
34 integer(C_INT), parameter :: FFTW_NO_RANK_SPLITS = 16384
35 integer(C_INT), parameter :: FFTW_NO_VRANK_SPLITS = 32768
36 integer(C_INT), parameter :: FFTW_NO_VRECURSE = 65536
37 integer(C_INT), parameter :: FFTW_NO_SIMD = 131072
38 integer(C_INT), parameter :: FFTW_NO_SLOW = 262144
39 integer(C_INT), parameter :: FFTW_NO_FIXED_RADIX_LARGE_N = 524288
40 integer(C_INT), parameter :: FFTW_ALLOW_PRUNING = 1048576
42 type, bind(C) :: fftw_iodim
43 integer(C_INT) n, is, os
45 type, bind(C) :: fftw_iodim64
46 integer(C_INTPTR_T) n, is, os
50 type(C_PTR) function fftw_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftw_plan_dft')
52 integer(C_INT), value :: rank
53 integer(C_INT), dimension(*), intent(in) :: n
54 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
55 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
56 integer(C_INT), value :: sign
57 integer(C_INT), value :: flags
58 end function fftw_plan_dft
60 type(C_PTR) function fftw_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftw_plan_dft_1d')
62 integer(C_INT), value :: n
63 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
64 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
65 integer(C_INT), value :: sign
66 integer(C_INT), value :: flags
67 end function fftw_plan_dft_1d
69 type(C_PTR) function fftw_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftw_plan_dft_2d')
71 integer(C_INT), value :: n0
72 integer(C_INT), value :: n1
73 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
74 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
75 integer(C_INT), value :: sign
76 integer(C_INT), value :: flags
77 end function fftw_plan_dft_2d
79 type(C_PTR) function fftw_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftw_plan_dft_3d')
81 integer(C_INT), value :: n0
82 integer(C_INT), value :: n1
83 integer(C_INT), value :: n2
84 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
85 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
86 integer(C_INT), value :: sign
87 integer(C_INT), value :: flags
88 end function fftw_plan_dft_3d
90 type(C_PTR) function fftw_plan_many_dft(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,sign,flags) &
91 bind(C, name='fftw_plan_many_dft')
93 integer(C_INT), value :: rank
94 integer(C_INT), dimension(*), intent(in) :: n
95 integer(C_INT), value :: howmany
96 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
97 integer(C_INT), dimension(*), intent(in) :: inembed
98 integer(C_INT), value :: istride
99 integer(C_INT), value :: idist
100 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
101 integer(C_INT), dimension(*), intent(in) :: onembed
102 integer(C_INT), value :: ostride
103 integer(C_INT), value :: odist
104 integer(C_INT), value :: sign
105 integer(C_INT), value :: flags
106 end function fftw_plan_many_dft
108 type(C_PTR) function fftw_plan_guru_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
109 bind(C, name='fftw_plan_guru_dft')
111 integer(C_INT), value :: rank
112 type(fftw_iodim), dimension(*), intent(in) :: dims
113 integer(C_INT), value :: howmany_rank
114 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
115 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
116 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
117 integer(C_INT), value :: sign
118 integer(C_INT), value :: flags
119 end function fftw_plan_guru_dft
121 type(C_PTR) function fftw_plan_guru_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
122 bind(C, name='fftw_plan_guru_split_dft')
124 integer(C_INT), value :: rank
125 type(fftw_iodim), dimension(*), intent(in) :: dims
126 integer(C_INT), value :: howmany_rank
127 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
128 real(C_DOUBLE), dimension(*), intent(out) :: ri
129 real(C_DOUBLE), dimension(*), intent(out) :: ii
130 real(C_DOUBLE), dimension(*), intent(out) :: ro
131 real(C_DOUBLE), dimension(*), intent(out) :: io
132 integer(C_INT), value :: flags
133 end function fftw_plan_guru_split_dft
135 type(C_PTR) function fftw_plan_guru64_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
136 bind(C, name='fftw_plan_guru64_dft')
138 integer(C_INT), value :: rank
139 type(fftw_iodim64), dimension(*), intent(in) :: dims
140 integer(C_INT), value :: howmany_rank
141 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
142 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
143 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
144 integer(C_INT), value :: sign
145 integer(C_INT), value :: flags
146 end function fftw_plan_guru64_dft
148 type(C_PTR) function fftw_plan_guru64_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
149 bind(C, name='fftw_plan_guru64_split_dft')
151 integer(C_INT), value :: rank
152 type(fftw_iodim64), dimension(*), intent(in) :: dims
153 integer(C_INT), value :: howmany_rank
154 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
155 real(C_DOUBLE), dimension(*), intent(out) :: ri
156 real(C_DOUBLE), dimension(*), intent(out) :: ii
157 real(C_DOUBLE), dimension(*), intent(out) :: ro
158 real(C_DOUBLE), dimension(*), intent(out) :: io
159 integer(C_INT), value :: flags
160 end function fftw_plan_guru64_split_dft
162 subroutine fftw_execute_dft(p,in,out) bind(C, name='fftw_execute_dft')
164 type(C_PTR), value :: p
165 complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in
166 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
167 end subroutine fftw_execute_dft
169 subroutine fftw_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftw_execute_split_dft')
171 type(C_PTR), value :: p
172 real(C_DOUBLE), dimension(*), intent(inout) :: ri
173 real(C_DOUBLE), dimension(*), intent(inout) :: ii
174 real(C_DOUBLE), dimension(*), intent(out) :: ro
175 real(C_DOUBLE), dimension(*), intent(out) :: io
176 end subroutine fftw_execute_split_dft
178 type(C_PTR) function fftw_plan_many_dft_r2c(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
179 bind(C, name='fftw_plan_many_dft_r2c')
181 integer(C_INT), value :: rank
182 integer(C_INT), dimension(*), intent(in) :: n
183 integer(C_INT), value :: howmany
184 real(C_DOUBLE), dimension(*), intent(out) :: in
185 integer(C_INT), dimension(*), intent(in) :: inembed
186 integer(C_INT), value :: istride
187 integer(C_INT), value :: idist
188 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
189 integer(C_INT), dimension(*), intent(in) :: onembed
190 integer(C_INT), value :: ostride
191 integer(C_INT), value :: odist
192 integer(C_INT), value :: flags
193 end function fftw_plan_many_dft_r2c
195 type(C_PTR) function fftw_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftw_plan_dft_r2c')
197 integer(C_INT), value :: rank
198 integer(C_INT), dimension(*), intent(in) :: n
199 real(C_DOUBLE), dimension(*), intent(out) :: in
200 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
201 integer(C_INT), value :: flags
202 end function fftw_plan_dft_r2c
204 type(C_PTR) function fftw_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftw_plan_dft_r2c_1d')
206 integer(C_INT), value :: n
207 real(C_DOUBLE), dimension(*), intent(out) :: in
208 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
209 integer(C_INT), value :: flags
210 end function fftw_plan_dft_r2c_1d
212 type(C_PTR) function fftw_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftw_plan_dft_r2c_2d')
214 integer(C_INT), value :: n0
215 integer(C_INT), value :: n1
216 real(C_DOUBLE), dimension(*), intent(out) :: in
217 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
218 integer(C_INT), value :: flags
219 end function fftw_plan_dft_r2c_2d
221 type(C_PTR) function fftw_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftw_plan_dft_r2c_3d')
223 integer(C_INT), value :: n0
224 integer(C_INT), value :: n1
225 integer(C_INT), value :: n2
226 real(C_DOUBLE), dimension(*), intent(out) :: in
227 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
228 integer(C_INT), value :: flags
229 end function fftw_plan_dft_r2c_3d
231 type(C_PTR) function fftw_plan_many_dft_c2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
232 bind(C, name='fftw_plan_many_dft_c2r')
234 integer(C_INT), value :: rank
235 integer(C_INT), dimension(*), intent(in) :: n
236 integer(C_INT), value :: howmany
237 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
238 integer(C_INT), dimension(*), intent(in) :: inembed
239 integer(C_INT), value :: istride
240 integer(C_INT), value :: idist
241 real(C_DOUBLE), dimension(*), intent(out) :: out
242 integer(C_INT), dimension(*), intent(in) :: onembed
243 integer(C_INT), value :: ostride
244 integer(C_INT), value :: odist
245 integer(C_INT), value :: flags
246 end function fftw_plan_many_dft_c2r
248 type(C_PTR) function fftw_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftw_plan_dft_c2r')
250 integer(C_INT), value :: rank
251 integer(C_INT), dimension(*), intent(in) :: n
252 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
253 real(C_DOUBLE), dimension(*), intent(out) :: out
254 integer(C_INT), value :: flags
255 end function fftw_plan_dft_c2r
257 type(C_PTR) function fftw_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftw_plan_dft_c2r_1d')
259 integer(C_INT), value :: n
260 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
261 real(C_DOUBLE), dimension(*), intent(out) :: out
262 integer(C_INT), value :: flags
263 end function fftw_plan_dft_c2r_1d
265 type(C_PTR) function fftw_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftw_plan_dft_c2r_2d')
267 integer(C_INT), value :: n0
268 integer(C_INT), value :: n1
269 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
270 real(C_DOUBLE), dimension(*), intent(out) :: out
271 integer(C_INT), value :: flags
272 end function fftw_plan_dft_c2r_2d
274 type(C_PTR) function fftw_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftw_plan_dft_c2r_3d')
276 integer(C_INT), value :: n0
277 integer(C_INT), value :: n1
278 integer(C_INT), value :: n2
279 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
280 real(C_DOUBLE), dimension(*), intent(out) :: out
281 integer(C_INT), value :: flags
282 end function fftw_plan_dft_c2r_3d
284 type(C_PTR) function fftw_plan_guru_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
285 bind(C, name='fftw_plan_guru_dft_r2c')
287 integer(C_INT), value :: rank
288 type(fftw_iodim), dimension(*), intent(in) :: dims
289 integer(C_INT), value :: howmany_rank
290 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
291 real(C_DOUBLE), dimension(*), intent(out) :: in
292 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
293 integer(C_INT), value :: flags
294 end function fftw_plan_guru_dft_r2c
296 type(C_PTR) function fftw_plan_guru_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
297 bind(C, name='fftw_plan_guru_dft_c2r')
299 integer(C_INT), value :: rank
300 type(fftw_iodim), dimension(*), intent(in) :: dims
301 integer(C_INT), value :: howmany_rank
302 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
303 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
304 real(C_DOUBLE), dimension(*), intent(out) :: out
305 integer(C_INT), value :: flags
306 end function fftw_plan_guru_dft_c2r
308 type(C_PTR) function fftw_plan_guru_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
309 bind(C, name='fftw_plan_guru_split_dft_r2c')
311 integer(C_INT), value :: rank
312 type(fftw_iodim), dimension(*), intent(in) :: dims
313 integer(C_INT), value :: howmany_rank
314 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
315 real(C_DOUBLE), dimension(*), intent(out) :: in
316 real(C_DOUBLE), dimension(*), intent(out) :: ro
317 real(C_DOUBLE), dimension(*), intent(out) :: io
318 integer(C_INT), value :: flags
319 end function fftw_plan_guru_split_dft_r2c
321 type(C_PTR) function fftw_plan_guru_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
322 bind(C, name='fftw_plan_guru_split_dft_c2r')
324 integer(C_INT), value :: rank
325 type(fftw_iodim), dimension(*), intent(in) :: dims
326 integer(C_INT), value :: howmany_rank
327 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
328 real(C_DOUBLE), dimension(*), intent(out) :: ri
329 real(C_DOUBLE), dimension(*), intent(out) :: ii
330 real(C_DOUBLE), dimension(*), intent(out) :: out
331 integer(C_INT), value :: flags
332 end function fftw_plan_guru_split_dft_c2r
334 type(C_PTR) function fftw_plan_guru64_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
335 bind(C, name='fftw_plan_guru64_dft_r2c')
337 integer(C_INT), value :: rank
338 type(fftw_iodim64), dimension(*), intent(in) :: dims
339 integer(C_INT), value :: howmany_rank
340 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
341 real(C_DOUBLE), dimension(*), intent(out) :: in
342 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
343 integer(C_INT), value :: flags
344 end function fftw_plan_guru64_dft_r2c
346 type(C_PTR) function fftw_plan_guru64_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
347 bind(C, name='fftw_plan_guru64_dft_c2r')
349 integer(C_INT), value :: rank
350 type(fftw_iodim64), dimension(*), intent(in) :: dims
351 integer(C_INT), value :: howmany_rank
352 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
353 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
354 real(C_DOUBLE), dimension(*), intent(out) :: out
355 integer(C_INT), value :: flags
356 end function fftw_plan_guru64_dft_c2r
358 type(C_PTR) function fftw_plan_guru64_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
359 bind(C, name='fftw_plan_guru64_split_dft_r2c')
361 integer(C_INT), value :: rank
362 type(fftw_iodim64), dimension(*), intent(in) :: dims
363 integer(C_INT), value :: howmany_rank
364 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
365 real(C_DOUBLE), dimension(*), intent(out) :: in
366 real(C_DOUBLE), dimension(*), intent(out) :: ro
367 real(C_DOUBLE), dimension(*), intent(out) :: io
368 integer(C_INT), value :: flags
369 end function fftw_plan_guru64_split_dft_r2c
371 type(C_PTR) function fftw_plan_guru64_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
372 bind(C, name='fftw_plan_guru64_split_dft_c2r')
374 integer(C_INT), value :: rank
375 type(fftw_iodim64), dimension(*), intent(in) :: dims
376 integer(C_INT), value :: howmany_rank
377 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
378 real(C_DOUBLE), dimension(*), intent(out) :: ri
379 real(C_DOUBLE), dimension(*), intent(out) :: ii
380 real(C_DOUBLE), dimension(*), intent(out) :: out
381 integer(C_INT), value :: flags
382 end function fftw_plan_guru64_split_dft_c2r
384 subroutine fftw_execute_dft_r2c(p,in,out) bind(C, name='fftw_execute_dft_r2c')
386 type(C_PTR), value :: p
387 real(C_DOUBLE), dimension(*), intent(inout) :: in
388 complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
389 end subroutine fftw_execute_dft_r2c
391 subroutine fftw_execute_dft_c2r(p,in,out) bind(C, name='fftw_execute_dft_c2r')
393 type(C_PTR), value :: p
394 complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in
395 real(C_DOUBLE), dimension(*), intent(out) :: out
396 end subroutine fftw_execute_dft_c2r
398 subroutine fftw_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftw_execute_split_dft_r2c')
400 type(C_PTR), value :: p
401 real(C_DOUBLE), dimension(*), intent(inout) :: in
402 real(C_DOUBLE), dimension(*), intent(out) :: ro
403 real(C_DOUBLE), dimension(*), intent(out) :: io
404 end subroutine fftw_execute_split_dft_r2c
406 subroutine fftw_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftw_execute_split_dft_c2r')
408 type(C_PTR), value :: p
409 real(C_DOUBLE), dimension(*), intent(inout) :: ri
410 real(C_DOUBLE), dimension(*), intent(inout) :: ii
411 real(C_DOUBLE), dimension(*), intent(out) :: out
412 end subroutine fftw_execute_split_dft_c2r
414 type(C_PTR) function fftw_plan_many_r2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,kind,flags) &
415 bind(C, name='fftw_plan_many_r2r')
417 integer(C_INT), value :: rank
418 integer(C_INT), dimension(*), intent(in) :: n
419 integer(C_INT), value :: howmany
420 real(C_DOUBLE), dimension(*), intent(out) :: in
421 integer(C_INT), dimension(*), intent(in) :: inembed
422 integer(C_INT), value :: istride
423 integer(C_INT), value :: idist
424 real(C_DOUBLE), dimension(*), intent(out) :: out
425 integer(C_INT), dimension(*), intent(in) :: onembed
426 integer(C_INT), value :: ostride
427 integer(C_INT), value :: odist
428 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
429 integer(C_INT), value :: flags
430 end function fftw_plan_many_r2r
432 type(C_PTR) function fftw_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftw_plan_r2r')
434 integer(C_INT), value :: rank
435 integer(C_INT), dimension(*), intent(in) :: n
436 real(C_DOUBLE), dimension(*), intent(out) :: in
437 real(C_DOUBLE), dimension(*), intent(out) :: out
438 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
439 integer(C_INT), value :: flags
440 end function fftw_plan_r2r
442 type(C_PTR) function fftw_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftw_plan_r2r_1d')
444 integer(C_INT), value :: n
445 real(C_DOUBLE), dimension(*), intent(out) :: in
446 real(C_DOUBLE), dimension(*), intent(out) :: out
447 integer(C_FFTW_R2R_KIND), value :: kind
448 integer(C_INT), value :: flags
449 end function fftw_plan_r2r_1d
451 type(C_PTR) function fftw_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftw_plan_r2r_2d')
453 integer(C_INT), value :: n0
454 integer(C_INT), value :: n1
455 real(C_DOUBLE), dimension(*), intent(out) :: in
456 real(C_DOUBLE), dimension(*), intent(out) :: out
457 integer(C_FFTW_R2R_KIND), value :: kind0
458 integer(C_FFTW_R2R_KIND), value :: kind1
459 integer(C_INT), value :: flags
460 end function fftw_plan_r2r_2d
462 type(C_PTR) function fftw_plan_r2r_3d(n0,n1,n2,in,out,kind0,kind1,kind2,flags) bind(C, name='fftw_plan_r2r_3d')
464 integer(C_INT), value :: n0
465 integer(C_INT), value :: n1
466 integer(C_INT), value :: n2
467 real(C_DOUBLE), dimension(*), intent(out) :: in
468 real(C_DOUBLE), dimension(*), intent(out) :: out
469 integer(C_FFTW_R2R_KIND), value :: kind0
470 integer(C_FFTW_R2R_KIND), value :: kind1
471 integer(C_FFTW_R2R_KIND), value :: kind2
472 integer(C_INT), value :: flags
473 end function fftw_plan_r2r_3d
475 type(C_PTR) function fftw_plan_guru_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
476 bind(C, name='fftw_plan_guru_r2r')
478 integer(C_INT), value :: rank
479 type(fftw_iodim), dimension(*), intent(in) :: dims
480 integer(C_INT), value :: howmany_rank
481 type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
482 real(C_DOUBLE), dimension(*), intent(out) :: in
483 real(C_DOUBLE), dimension(*), intent(out) :: out
484 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
485 integer(C_INT), value :: flags
486 end function fftw_plan_guru_r2r
488 type(C_PTR) function fftw_plan_guru64_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
489 bind(C, name='fftw_plan_guru64_r2r')
491 integer(C_INT), value :: rank
492 type(fftw_iodim64), dimension(*), intent(in) :: dims
493 integer(C_INT), value :: howmany_rank
494 type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
495 real(C_DOUBLE), dimension(*), intent(out) :: in
496 real(C_DOUBLE), dimension(*), intent(out) :: out
497 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
498 integer(C_INT), value :: flags
499 end function fftw_plan_guru64_r2r
501 subroutine fftw_execute_r2r(p,in,out) bind(C, name='fftw_execute_r2r')
503 type(C_PTR), value :: p
504 real(C_DOUBLE), dimension(*), intent(inout) :: in
505 real(C_DOUBLE), dimension(*), intent(out) :: out
506 end subroutine fftw_execute_r2r
508 subroutine fftw_destroy_plan(p) bind(C, name='fftw_destroy_plan')
510 type(C_PTR), value :: p
511 end subroutine fftw_destroy_plan
513 subroutine fftw_forget_wisdom() bind(C, name='fftw_forget_wisdom')
515 end subroutine fftw_forget_wisdom
517 subroutine fftw_cleanup() bind(C, name='fftw_cleanup')
519 end subroutine fftw_cleanup
521 subroutine fftw_set_timelimit(t) bind(C, name='fftw_set_timelimit')
523 real(C_DOUBLE), value :: t
524 end subroutine fftw_set_timelimit
526 subroutine fftw_plan_with_nthreads(nthreads) bind(C, name='fftw_plan_with_nthreads')
528 integer(C_INT), value :: nthreads
529 end subroutine fftw_plan_with_nthreads
531 integer(C_INT) function fftw_init_threads() bind(C, name='fftw_init_threads')
533 end function fftw_init_threads
535 subroutine fftw_cleanup_threads() bind(C, name='fftw_cleanup_threads')
537 end subroutine fftw_cleanup_threads
539 integer(C_INT) function fftw_export_wisdom_to_filename(filename) bind(C, name='fftw_export_wisdom_to_filename')
541 character(C_CHAR), dimension(*), intent(in) :: filename
542 end function fftw_export_wisdom_to_filename
544 subroutine fftw_export_wisdom_to_file(output_file) bind(C, name='fftw_export_wisdom_to_file')
546 type(C_PTR), value :: output_file
547 end subroutine fftw_export_wisdom_to_file
549 type(C_PTR) function fftw_export_wisdom_to_string() bind(C, name='fftw_export_wisdom_to_string')
551 end function fftw_export_wisdom_to_string
553 subroutine fftw_export_wisdom(write_char,data) bind(C, name='fftw_export_wisdom')
555 type(C_FUNPTR), value :: write_char
556 type(C_PTR), value :: data
557 end subroutine fftw_export_wisdom
559 integer(C_INT) function fftw_import_system_wisdom() bind(C, name='fftw_import_system_wisdom')
561 end function fftw_import_system_wisdom
563 integer(C_INT) function fftw_import_wisdom_from_filename(filename) bind(C, name='fftw_import_wisdom_from_filename')
565 character(C_CHAR), dimension(*), intent(in) :: filename
566 end function fftw_import_wisdom_from_filename
568 integer(C_INT) function fftw_import_wisdom_from_file(input_file) bind(C, name='fftw_import_wisdom_from_file')
570 type(C_PTR), value :: input_file
571 end function fftw_import_wisdom_from_file
573 integer(C_INT) function fftw_import_wisdom_from_string(input_string) bind(C, name='fftw_import_wisdom_from_string')
575 character(C_CHAR), dimension(*), intent(in) :: input_string
576 end function fftw_import_wisdom_from_string
578 integer(C_INT) function fftw_import_wisdom(read_char,data) bind(C, name='fftw_import_wisdom')
580 type(C_FUNPTR), value :: read_char
581 type(C_PTR), value :: data
582 end function fftw_import_wisdom
584 subroutine fftw_fprint_plan(p,output_file) bind(C, name='fftw_fprint_plan')
586 type(C_PTR), value :: p
587 type(C_PTR), value :: output_file
588 end subroutine fftw_fprint_plan
590 subroutine fftw_print_plan(p) bind(C, name='fftw_print_plan')
592 type(C_PTR), value :: p
593 end subroutine fftw_print_plan
595 type(C_PTR) function fftw_malloc(n) bind(C, name='fftw_malloc')
597 integer(C_SIZE_T), value :: n
598 end function fftw_malloc
600 type(C_PTR) function fftw_alloc_real(n) bind(C, name='fftw_alloc_real')
602 integer(C_SIZE_T), value :: n
603 end function fftw_alloc_real
605 type(C_PTR) function fftw_alloc_complex(n) bind(C, name='fftw_alloc_complex')
607 integer(C_SIZE_T), value :: n
608 end function fftw_alloc_complex
610 subroutine fftw_free(p) bind(C, name='fftw_free')
612 type(C_PTR), value :: p
613 end subroutine fftw_free
615 subroutine fftw_flops(p,add,mul,fmas) bind(C, name='fftw_flops')
617 type(C_PTR), value :: p
618 real(C_DOUBLE), intent(out) :: add
619 real(C_DOUBLE), intent(out) :: mul
620 real(C_DOUBLE), intent(out) :: fmas
621 end subroutine fftw_flops
623 real(C_DOUBLE) function fftw_estimate_cost(p) bind(C, name='fftw_estimate_cost')
625 type(C_PTR), value :: p
626 end function fftw_estimate_cost
628 real(C_DOUBLE) function fftw_cost(p) bind(C, name='fftw_cost')
630 type(C_PTR), value :: p
631 end function fftw_cost
635 type, bind(C) :: fftwf_iodim
636 integer(C_INT) n, is, os
638 type, bind(C) :: fftwf_iodim64
639 integer(C_INTPTR_T) n, is, os
640 end type fftwf_iodim64
643 type(C_PTR) function fftwf_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftwf_plan_dft')
645 integer(C_INT), value :: rank
646 integer(C_INT), dimension(*), intent(in) :: n
647 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
648 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
649 integer(C_INT), value :: sign
650 integer(C_INT), value :: flags
651 end function fftwf_plan_dft
653 type(C_PTR) function fftwf_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftwf_plan_dft_1d')
655 integer(C_INT), value :: n
656 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
657 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
658 integer(C_INT), value :: sign
659 integer(C_INT), value :: flags
660 end function fftwf_plan_dft_1d
662 type(C_PTR) function fftwf_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftwf_plan_dft_2d')
664 integer(C_INT), value :: n0
665 integer(C_INT), value :: n1
666 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
667 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
668 integer(C_INT), value :: sign
669 integer(C_INT), value :: flags
670 end function fftwf_plan_dft_2d
672 type(C_PTR) function fftwf_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftwf_plan_dft_3d')
674 integer(C_INT), value :: n0
675 integer(C_INT), value :: n1
676 integer(C_INT), value :: n2
677 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
678 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
679 integer(C_INT), value :: sign
680 integer(C_INT), value :: flags
681 end function fftwf_plan_dft_3d
683 type(C_PTR) function fftwf_plan_many_dft(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,sign,flags) &
684 bind(C, name='fftwf_plan_many_dft')
686 integer(C_INT), value :: rank
687 integer(C_INT), dimension(*), intent(in) :: n
688 integer(C_INT), value :: howmany
689 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
690 integer(C_INT), dimension(*), intent(in) :: inembed
691 integer(C_INT), value :: istride
692 integer(C_INT), value :: idist
693 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
694 integer(C_INT), dimension(*), intent(in) :: onembed
695 integer(C_INT), value :: ostride
696 integer(C_INT), value :: odist
697 integer(C_INT), value :: sign
698 integer(C_INT), value :: flags
699 end function fftwf_plan_many_dft
701 type(C_PTR) function fftwf_plan_guru_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
702 bind(C, name='fftwf_plan_guru_dft')
704 integer(C_INT), value :: rank
705 type(fftwf_iodim), dimension(*), intent(in) :: dims
706 integer(C_INT), value :: howmany_rank
707 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
708 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
709 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
710 integer(C_INT), value :: sign
711 integer(C_INT), value :: flags
712 end function fftwf_plan_guru_dft
714 type(C_PTR) function fftwf_plan_guru_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
715 bind(C, name='fftwf_plan_guru_split_dft')
717 integer(C_INT), value :: rank
718 type(fftwf_iodim), dimension(*), intent(in) :: dims
719 integer(C_INT), value :: howmany_rank
720 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
721 real(C_FLOAT), dimension(*), intent(out) :: ri
722 real(C_FLOAT), dimension(*), intent(out) :: ii
723 real(C_FLOAT), dimension(*), intent(out) :: ro
724 real(C_FLOAT), dimension(*), intent(out) :: io
725 integer(C_INT), value :: flags
726 end function fftwf_plan_guru_split_dft
728 type(C_PTR) function fftwf_plan_guru64_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
729 bind(C, name='fftwf_plan_guru64_dft')
731 integer(C_INT), value :: rank
732 type(fftwf_iodim64), dimension(*), intent(in) :: dims
733 integer(C_INT), value :: howmany_rank
734 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
735 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
736 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
737 integer(C_INT), value :: sign
738 integer(C_INT), value :: flags
739 end function fftwf_plan_guru64_dft
741 type(C_PTR) function fftwf_plan_guru64_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
742 bind(C, name='fftwf_plan_guru64_split_dft')
744 integer(C_INT), value :: rank
745 type(fftwf_iodim64), dimension(*), intent(in) :: dims
746 integer(C_INT), value :: howmany_rank
747 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
748 real(C_FLOAT), dimension(*), intent(out) :: ri
749 real(C_FLOAT), dimension(*), intent(out) :: ii
750 real(C_FLOAT), dimension(*), intent(out) :: ro
751 real(C_FLOAT), dimension(*), intent(out) :: io
752 integer(C_INT), value :: flags
753 end function fftwf_plan_guru64_split_dft
755 subroutine fftwf_execute_dft(p,in,out) bind(C, name='fftwf_execute_dft')
757 type(C_PTR), value :: p
758 complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
759 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
760 end subroutine fftwf_execute_dft
762 subroutine fftwf_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftwf_execute_split_dft')
764 type(C_PTR), value :: p
765 real(C_FLOAT), dimension(*), intent(inout) :: ri
766 real(C_FLOAT), dimension(*), intent(inout) :: ii
767 real(C_FLOAT), dimension(*), intent(out) :: ro
768 real(C_FLOAT), dimension(*), intent(out) :: io
769 end subroutine fftwf_execute_split_dft
771 type(C_PTR) function fftwf_plan_many_dft_r2c(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
772 bind(C, name='fftwf_plan_many_dft_r2c')
774 integer(C_INT), value :: rank
775 integer(C_INT), dimension(*), intent(in) :: n
776 integer(C_INT), value :: howmany
777 real(C_FLOAT), dimension(*), intent(out) :: in
778 integer(C_INT), dimension(*), intent(in) :: inembed
779 integer(C_INT), value :: istride
780 integer(C_INT), value :: idist
781 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
782 integer(C_INT), dimension(*), intent(in) :: onembed
783 integer(C_INT), value :: ostride
784 integer(C_INT), value :: odist
785 integer(C_INT), value :: flags
786 end function fftwf_plan_many_dft_r2c
788 type(C_PTR) function fftwf_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftwf_plan_dft_r2c')
790 integer(C_INT), value :: rank
791 integer(C_INT), dimension(*), intent(in) :: n
792 real(C_FLOAT), dimension(*), intent(out) :: in
793 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
794 integer(C_INT), value :: flags
795 end function fftwf_plan_dft_r2c
797 type(C_PTR) function fftwf_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_1d')
799 integer(C_INT), value :: n
800 real(C_FLOAT), dimension(*), intent(out) :: in
801 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
802 integer(C_INT), value :: flags
803 end function fftwf_plan_dft_r2c_1d
805 type(C_PTR) function fftwf_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_2d')
807 integer(C_INT), value :: n0
808 integer(C_INT), value :: n1
809 real(C_FLOAT), dimension(*), intent(out) :: in
810 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
811 integer(C_INT), value :: flags
812 end function fftwf_plan_dft_r2c_2d
814 type(C_PTR) function fftwf_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_3d')
816 integer(C_INT), value :: n0
817 integer(C_INT), value :: n1
818 integer(C_INT), value :: n2
819 real(C_FLOAT), dimension(*), intent(out) :: in
820 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
821 integer(C_INT), value :: flags
822 end function fftwf_plan_dft_r2c_3d
824 type(C_PTR) function fftwf_plan_many_dft_c2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
825 bind(C, name='fftwf_plan_many_dft_c2r')
827 integer(C_INT), value :: rank
828 integer(C_INT), dimension(*), intent(in) :: n
829 integer(C_INT), value :: howmany
830 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
831 integer(C_INT), dimension(*), intent(in) :: inembed
832 integer(C_INT), value :: istride
833 integer(C_INT), value :: idist
834 real(C_FLOAT), dimension(*), intent(out) :: out
835 integer(C_INT), dimension(*), intent(in) :: onembed
836 integer(C_INT), value :: ostride
837 integer(C_INT), value :: odist
838 integer(C_INT), value :: flags
839 end function fftwf_plan_many_dft_c2r
841 type(C_PTR) function fftwf_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftwf_plan_dft_c2r')
843 integer(C_INT), value :: rank
844 integer(C_INT), dimension(*), intent(in) :: n
845 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
846 real(C_FLOAT), dimension(*), intent(out) :: out
847 integer(C_INT), value :: flags
848 end function fftwf_plan_dft_c2r
850 type(C_PTR) function fftwf_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_1d')
852 integer(C_INT), value :: n
853 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
854 real(C_FLOAT), dimension(*), intent(out) :: out
855 integer(C_INT), value :: flags
856 end function fftwf_plan_dft_c2r_1d
858 type(C_PTR) function fftwf_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_2d')
860 integer(C_INT), value :: n0
861 integer(C_INT), value :: n1
862 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
863 real(C_FLOAT), dimension(*), intent(out) :: out
864 integer(C_INT), value :: flags
865 end function fftwf_plan_dft_c2r_2d
867 type(C_PTR) function fftwf_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_3d')
869 integer(C_INT), value :: n0
870 integer(C_INT), value :: n1
871 integer(C_INT), value :: n2
872 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
873 real(C_FLOAT), dimension(*), intent(out) :: out
874 integer(C_INT), value :: flags
875 end function fftwf_plan_dft_c2r_3d
877 type(C_PTR) function fftwf_plan_guru_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
878 bind(C, name='fftwf_plan_guru_dft_r2c')
880 integer(C_INT), value :: rank
881 type(fftwf_iodim), dimension(*), intent(in) :: dims
882 integer(C_INT), value :: howmany_rank
883 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
884 real(C_FLOAT), dimension(*), intent(out) :: in
885 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
886 integer(C_INT), value :: flags
887 end function fftwf_plan_guru_dft_r2c
889 type(C_PTR) function fftwf_plan_guru_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
890 bind(C, name='fftwf_plan_guru_dft_c2r')
892 integer(C_INT), value :: rank
893 type(fftwf_iodim), dimension(*), intent(in) :: dims
894 integer(C_INT), value :: howmany_rank
895 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
896 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
897 real(C_FLOAT), dimension(*), intent(out) :: out
898 integer(C_INT), value :: flags
899 end function fftwf_plan_guru_dft_c2r
901 type(C_PTR) function fftwf_plan_guru_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
902 bind(C, name='fftwf_plan_guru_split_dft_r2c')
904 integer(C_INT), value :: rank
905 type(fftwf_iodim), dimension(*), intent(in) :: dims
906 integer(C_INT), value :: howmany_rank
907 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
908 real(C_FLOAT), dimension(*), intent(out) :: in
909 real(C_FLOAT), dimension(*), intent(out) :: ro
910 real(C_FLOAT), dimension(*), intent(out) :: io
911 integer(C_INT), value :: flags
912 end function fftwf_plan_guru_split_dft_r2c
914 type(C_PTR) function fftwf_plan_guru_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
915 bind(C, name='fftwf_plan_guru_split_dft_c2r')
917 integer(C_INT), value :: rank
918 type(fftwf_iodim), dimension(*), intent(in) :: dims
919 integer(C_INT), value :: howmany_rank
920 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
921 real(C_FLOAT), dimension(*), intent(out) :: ri
922 real(C_FLOAT), dimension(*), intent(out) :: ii
923 real(C_FLOAT), dimension(*), intent(out) :: out
924 integer(C_INT), value :: flags
925 end function fftwf_plan_guru_split_dft_c2r
927 type(C_PTR) function fftwf_plan_guru64_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
928 bind(C, name='fftwf_plan_guru64_dft_r2c')
930 integer(C_INT), value :: rank
931 type(fftwf_iodim64), dimension(*), intent(in) :: dims
932 integer(C_INT), value :: howmany_rank
933 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
934 real(C_FLOAT), dimension(*), intent(out) :: in
935 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
936 integer(C_INT), value :: flags
937 end function fftwf_plan_guru64_dft_r2c
939 type(C_PTR) function fftwf_plan_guru64_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
940 bind(C, name='fftwf_plan_guru64_dft_c2r')
942 integer(C_INT), value :: rank
943 type(fftwf_iodim64), dimension(*), intent(in) :: dims
944 integer(C_INT), value :: howmany_rank
945 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
946 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
947 real(C_FLOAT), dimension(*), intent(out) :: out
948 integer(C_INT), value :: flags
949 end function fftwf_plan_guru64_dft_c2r
951 type(C_PTR) function fftwf_plan_guru64_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
952 bind(C, name='fftwf_plan_guru64_split_dft_r2c')
954 integer(C_INT), value :: rank
955 type(fftwf_iodim64), dimension(*), intent(in) :: dims
956 integer(C_INT), value :: howmany_rank
957 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
958 real(C_FLOAT), dimension(*), intent(out) :: in
959 real(C_FLOAT), dimension(*), intent(out) :: ro
960 real(C_FLOAT), dimension(*), intent(out) :: io
961 integer(C_INT), value :: flags
962 end function fftwf_plan_guru64_split_dft_r2c
964 type(C_PTR) function fftwf_plan_guru64_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
965 bind(C, name='fftwf_plan_guru64_split_dft_c2r')
967 integer(C_INT), value :: rank
968 type(fftwf_iodim64), dimension(*), intent(in) :: dims
969 integer(C_INT), value :: howmany_rank
970 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
971 real(C_FLOAT), dimension(*), intent(out) :: ri
972 real(C_FLOAT), dimension(*), intent(out) :: ii
973 real(C_FLOAT), dimension(*), intent(out) :: out
974 integer(C_INT), value :: flags
975 end function fftwf_plan_guru64_split_dft_c2r
977 subroutine fftwf_execute_dft_r2c(p,in,out) bind(C, name='fftwf_execute_dft_r2c')
979 type(C_PTR), value :: p
980 real(C_FLOAT), dimension(*), intent(inout) :: in
981 complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
982 end subroutine fftwf_execute_dft_r2c
984 subroutine fftwf_execute_dft_c2r(p,in,out) bind(C, name='fftwf_execute_dft_c2r')
986 type(C_PTR), value :: p
987 complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
988 real(C_FLOAT), dimension(*), intent(out) :: out
989 end subroutine fftwf_execute_dft_c2r
991 subroutine fftwf_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftwf_execute_split_dft_r2c')
993 type(C_PTR), value :: p
994 real(C_FLOAT), dimension(*), intent(inout) :: in
995 real(C_FLOAT), dimension(*), intent(out) :: ro
996 real(C_FLOAT), dimension(*), intent(out) :: io
997 end subroutine fftwf_execute_split_dft_r2c
999 subroutine fftwf_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftwf_execute_split_dft_c2r')
1001 type(C_PTR), value :: p
1002 real(C_FLOAT), dimension(*), intent(inout) :: ri
1003 real(C_FLOAT), dimension(*), intent(inout) :: ii
1004 real(C_FLOAT), dimension(*), intent(out) :: out
1005 end subroutine fftwf_execute_split_dft_c2r
1007 type(C_PTR) function fftwf_plan_many_r2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,kind,flags) &
1008 bind(C, name='fftwf_plan_many_r2r')
1010 integer(C_INT), value :: rank
1011 integer(C_INT), dimension(*), intent(in) :: n
1012 integer(C_INT), value :: howmany
1013 real(C_FLOAT), dimension(*), intent(out) :: in
1014 integer(C_INT), dimension(*), intent(in) :: inembed
1015 integer(C_INT), value :: istride
1016 integer(C_INT), value :: idist
1017 real(C_FLOAT), dimension(*), intent(out) :: out
1018 integer(C_INT), dimension(*), intent(in) :: onembed
1019 integer(C_INT), value :: ostride
1020 integer(C_INT), value :: odist
1021 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1022 integer(C_INT), value :: flags
1023 end function fftwf_plan_many_r2r
1025 type(C_PTR) function fftwf_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftwf_plan_r2r')
1027 integer(C_INT), value :: rank
1028 integer(C_INT), dimension(*), intent(in) :: n
1029 real(C_FLOAT), dimension(*), intent(out) :: in
1030 real(C_FLOAT), dimension(*), intent(out) :: out
1031 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1032 integer(C_INT), value :: flags
1033 end function fftwf_plan_r2r
1035 type(C_PTR) function fftwf_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftwf_plan_r2r_1d')
1037 integer(C_INT), value :: n
1038 real(C_FLOAT), dimension(*), intent(out) :: in
1039 real(C_FLOAT), dimension(*), intent(out) :: out
1040 integer(C_FFTW_R2R_KIND), value :: kind
1041 integer(C_INT), value :: flags
1042 end function fftwf_plan_r2r_1d
1044 type(C_PTR) function fftwf_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftwf_plan_r2r_2d')
1046 integer(C_INT), value :: n0
1047 integer(C_INT), value :: n1
1048 real(C_FLOAT), dimension(*), intent(out) :: in
1049 real(C_FLOAT), dimension(*), intent(out) :: out
1050 integer(C_FFTW_R2R_KIND), value :: kind0
1051 integer(C_FFTW_R2R_KIND), value :: kind1
1052 integer(C_INT), value :: flags
1053 end function fftwf_plan_r2r_2d
1055 type(C_PTR) function fftwf_plan_r2r_3d(n0,n1,n2,in,out,kind0,kind1,kind2,flags) bind(C, name='fftwf_plan_r2r_3d')
1057 integer(C_INT), value :: n0
1058 integer(C_INT), value :: n1
1059 integer(C_INT), value :: n2
1060 real(C_FLOAT), dimension(*), intent(out) :: in
1061 real(C_FLOAT), dimension(*), intent(out) :: out
1062 integer(C_FFTW_R2R_KIND), value :: kind0
1063 integer(C_FFTW_R2R_KIND), value :: kind1
1064 integer(C_FFTW_R2R_KIND), value :: kind2
1065 integer(C_INT), value :: flags
1066 end function fftwf_plan_r2r_3d
1068 type(C_PTR) function fftwf_plan_guru_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
1069 bind(C, name='fftwf_plan_guru_r2r')
1071 integer(C_INT), value :: rank
1072 type(fftwf_iodim), dimension(*), intent(in) :: dims
1073 integer(C_INT), value :: howmany_rank
1074 type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
1075 real(C_FLOAT), dimension(*), intent(out) :: in
1076 real(C_FLOAT), dimension(*), intent(out) :: out
1077 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1078 integer(C_INT), value :: flags
1079 end function fftwf_plan_guru_r2r
1081 type(C_PTR) function fftwf_plan_guru64_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
1082 bind(C, name='fftwf_plan_guru64_r2r')
1084 integer(C_INT), value :: rank
1085 type(fftwf_iodim64), dimension(*), intent(in) :: dims
1086 integer(C_INT), value :: howmany_rank
1087 type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
1088 real(C_FLOAT), dimension(*), intent(out) :: in
1089 real(C_FLOAT), dimension(*), intent(out) :: out
1090 integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1091 integer(C_INT), value :: flags
1092 end function fftwf_plan_guru64_r2r
1094 subroutine fftwf_execute_r2r(p,in,out) bind(C, name='fftwf_execute_r2r')
1096 type(C_PTR), value :: p
1097 real(C_FLOAT), dimension(*), intent(inout) :: in
1098 real(C_FLOAT), dimension(*), intent(out) :: out
1099 end subroutine fftwf_execute_r2r
1101 subroutine fftwf_destroy_plan(p) bind(C, name='fftwf_destroy_plan')
1103 type(C_PTR), value :: p
1104 end subroutine fftwf_destroy_plan
1106 subroutine fftwf_forget_wisdom() bind(C, name='fftwf_forget_wisdom')
1108 end subroutine fftwf_forget_wisdom
1110 subroutine fftwf_cleanup() bind(C, name='fftwf_cleanup')
1112 end subroutine fftwf_cleanup
1114 subroutine fftwf_set_timelimit(t) bind(C, name='fftwf_set_timelimit')
1116 real(C_DOUBLE), value :: t
1117 end subroutine fftwf_set_timelimit
1119 subroutine fftwf_plan_with_nthreads(nthreads) bind(C, name='fftwf_plan_with_nthreads')
1121 integer(C_INT), value :: nthreads
1122 end subroutine fftwf_plan_with_nthreads
1124 integer(C_INT) function fftwf_init_threads() bind(C, name='fftwf_init_threads')
1126 end function fftwf_init_threads
1128 subroutine fftwf_cleanup_threads() bind(C, name='fftwf_cleanup_threads')
1130 end subroutine fftwf_cleanup_threads
1132 integer(C_INT) function fftwf_export_wisdom_to_filename(filename) bind(C, name='fftwf_export_wisdom_to_filename')
1134 character(C_CHAR), dimension(*), intent(in) :: filename
1135 end function fftwf_export_wisdom_to_filename
1137 subroutine fftwf_export_wisdom_to_file(output_file) bind(C, name='fftwf_export_wisdom_to_file')
1139 type(C_PTR), value :: output_file
1140 end subroutine fftwf_export_wisdom_to_file
1142 type(C_PTR) function fftwf_export_wisdom_to_string() bind(C, name='fftwf_export_wisdom_to_string')
1144 end function fftwf_export_wisdom_to_string
1146 subroutine fftwf_export_wisdom(write_char,data) bind(C, name='fftwf_export_wisdom')
1148 type(C_FUNPTR), value :: write_char
1149 type(C_PTR), value :: data
1150 end subroutine fftwf_export_wisdom
1152 integer(C_INT) function fftwf_import_system_wisdom() bind(C, name='fftwf_import_system_wisdom')
1154 end function fftwf_import_system_wisdom
1156 integer(C_INT) function fftwf_import_wisdom_from_filename(filename) bind(C, name='fftwf_import_wisdom_from_filename')
1158 character(C_CHAR), dimension(*), intent(in) :: filename
1159 end function fftwf_import_wisdom_from_filename
1161 integer(C_INT) function fftwf_import_wisdom_from_file(input_file) bind(C, name='fftwf_import_wisdom_from_file')
1163 type(C_PTR), value :: input_file
1164 end function fftwf_import_wisdom_from_file
1166 integer(C_INT) function fftwf_import_wisdom_from_string(input_string) bind(C, name='fftwf_import_wisdom_from_string')
1168 character(C_CHAR), dimension(*), intent(in) :: input_string
1169 end function fftwf_import_wisdom_from_string
1171 integer(C_INT) function fftwf_import_wisdom(read_char,data) bind(C, name='fftwf_import_wisdom')
1173 type(C_FUNPTR), value :: read_char
1174 type(C_PTR), value :: data
1175 end function fftwf_import_wisdom
1177 subroutine fftwf_fprint_plan(p,output_file) bind(C, name='fftwf_fprint_plan')
1179 type(C_PTR), value :: p
1180 type(C_PTR), value :: output_file
1181 end subroutine fftwf_fprint_plan
1183 subroutine fftwf_print_plan(p) bind(C, name='fftwf_print_plan')
1185 type(C_PTR), value :: p
1186 end subroutine fftwf_print_plan
1188 type(C_PTR) function fftwf_malloc(n) bind(C, name='fftwf_malloc')
1190 integer(C_SIZE_T), value :: n
1191 end function fftwf_malloc
1193 type(C_PTR) function fftwf_alloc_real(n) bind(C, name='fftwf_alloc_real')
1195 integer(C_SIZE_T), value :: n
1196 end function fftwf_alloc_real
1198 type(C_PTR) function fftwf_alloc_complex(n) bind(C, name='fftwf_alloc_complex')
1200 integer(C_SIZE_T), value :: n
1201 end function fftwf_alloc_complex
1203 subroutine fftwf_free(p) bind(C, name='fftwf_free')
1205 type(C_PTR), value :: p
1206 end subroutine fftwf_free
1208 subroutine fftwf_flops(p,add,mul,fmas) bind(C, name='fftwf_flops')
1210 type(C_PTR), value :: p
1211 real(C_DOUBLE), intent(out) :: add
1212 real(C_DOUBLE), intent(out) :: mul
1213 real(C_DOUBLE), intent(out) :: fmas
1214 end subroutine fftwf_flops
1216 real(C_DOUBLE) function fftwf_estimate_cost(p) bind(C, name='fftwf_estimate_cost')
1218 type(C_PTR), value :: p
1219 end function fftwf_estimate_cost
1221 real(C_DOUBLE) function fftwf_cost(p) bind(C, name='fftwf_cost')
1223 type(C_PTR), value :: p
1224 end function fftwf_cost