1! Generated automatically.  DO NOT EDIT!
2
3  integer, parameter :: C_FFTW_R2R_KIND = C_INT32_T
4
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
41
42  type, bind(C) :: fftw_iodim
43     integer(C_INT) n, is, os
44  end type fftw_iodim
45  type, bind(C) :: fftw_iodim64
46     integer(C_INTPTR_T) n, is, os
47  end type fftw_iodim64
48
49  interface
50    type(C_PTR) function fftw_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftw_plan_dft')
51      import
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
59
60    type(C_PTR) function fftw_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftw_plan_dft_1d')
61      import
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
68
69    type(C_PTR) function fftw_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftw_plan_dft_2d')
70      import
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
78
79    type(C_PTR) function fftw_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftw_plan_dft_3d')
80      import
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
89
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')
92      import
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
107
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')
110      import
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
120
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')
123      import
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
134
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')
137      import
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
147
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')
150      import
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
161
162    subroutine fftw_execute_dft(p,in,out) bind(C, name='fftw_execute_dft')
163      import
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
168
169    subroutine fftw_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftw_execute_split_dft')
170      import
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
177
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')
180      import
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
194
195    type(C_PTR) function fftw_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftw_plan_dft_r2c')
196      import
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
203
204    type(C_PTR) function fftw_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftw_plan_dft_r2c_1d')
205      import
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
211
212    type(C_PTR) function fftw_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftw_plan_dft_r2c_2d')
213      import
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
220
221    type(C_PTR) function fftw_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftw_plan_dft_r2c_3d')
222      import
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
230
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')
233      import
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
247
248    type(C_PTR) function fftw_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftw_plan_dft_c2r')
249      import
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
256
257    type(C_PTR) function fftw_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftw_plan_dft_c2r_1d')
258      import
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
264
265    type(C_PTR) function fftw_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftw_plan_dft_c2r_2d')
266      import
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
273
274    type(C_PTR) function fftw_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftw_plan_dft_c2r_3d')
275      import
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
283
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')
286      import
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
295
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')
298      import
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
307
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')
310      import
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
320
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')
323      import
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
333
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')
336      import
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
345
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')
348      import
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
357
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')
360      import
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
370
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')
373      import
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
383
384    subroutine fftw_execute_dft_r2c(p,in,out) bind(C, name='fftw_execute_dft_r2c')
385      import
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
390
391    subroutine fftw_execute_dft_c2r(p,in,out) bind(C, name='fftw_execute_dft_c2r')
392      import
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
397
398    subroutine fftw_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftw_execute_split_dft_r2c')
399      import
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
405
406    subroutine fftw_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftw_execute_split_dft_c2r')
407      import
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
413
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')
416      import
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
431
432    type(C_PTR) function fftw_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftw_plan_r2r')
433      import
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
441
442    type(C_PTR) function fftw_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftw_plan_r2r_1d')
443      import
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
450
451    type(C_PTR) function fftw_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftw_plan_r2r_2d')
452      import
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
461
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')
463      import
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
474
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')
477      import
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
487
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')
490      import
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
500
501    subroutine fftw_execute_r2r(p,in,out) bind(C, name='fftw_execute_r2r')
502      import
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
507
508    subroutine fftw_destroy_plan(p) bind(C, name='fftw_destroy_plan')
509      import
510      type(C_PTR), value :: p
511    end subroutine fftw_destroy_plan
512
513    subroutine fftw_forget_wisdom() bind(C, name='fftw_forget_wisdom')
514      import
515    end subroutine fftw_forget_wisdom
516
517    subroutine fftw_cleanup() bind(C, name='fftw_cleanup')
518      import
519    end subroutine fftw_cleanup
520
521    subroutine fftw_set_timelimit(t) bind(C, name='fftw_set_timelimit')
522      import
523      real(C_DOUBLE), value :: t
524    end subroutine fftw_set_timelimit
525
526    subroutine fftw_plan_with_nthreads(nthreads) bind(C, name='fftw_plan_with_nthreads')
527      import
528      integer(C_INT), value :: nthreads
529    end subroutine fftw_plan_with_nthreads
530
531    integer(C_INT) function fftw_init_threads() bind(C, name='fftw_init_threads')
532      import
533    end function fftw_init_threads
534
535    subroutine fftw_cleanup_threads() bind(C, name='fftw_cleanup_threads')
536      import
537    end subroutine fftw_cleanup_threads
538
539    integer(C_INT) function fftw_export_wisdom_to_filename(filename) bind(C, name='fftw_export_wisdom_to_filename')
540      import
541      character(C_CHAR), dimension(*), intent(in) :: filename
542    end function fftw_export_wisdom_to_filename
543
544    subroutine fftw_export_wisdom_to_file(output_file) bind(C, name='fftw_export_wisdom_to_file')
545      import
546      type(C_PTR), value :: output_file
547    end subroutine fftw_export_wisdom_to_file
548
549    type(C_PTR) function fftw_export_wisdom_to_string() bind(C, name='fftw_export_wisdom_to_string')
550      import
551    end function fftw_export_wisdom_to_string
552
553    subroutine fftw_export_wisdom(write_char,data) bind(C, name='fftw_export_wisdom')
554      import
555      type(C_FUNPTR), value :: write_char
556      type(C_PTR), value :: data
557    end subroutine fftw_export_wisdom
558
559    integer(C_INT) function fftw_import_system_wisdom() bind(C, name='fftw_import_system_wisdom')
560      import
561    end function fftw_import_system_wisdom
562
563    integer(C_INT) function fftw_import_wisdom_from_filename(filename) bind(C, name='fftw_import_wisdom_from_filename')
564      import
565      character(C_CHAR), dimension(*), intent(in) :: filename
566    end function fftw_import_wisdom_from_filename
567
568    integer(C_INT) function fftw_import_wisdom_from_file(input_file) bind(C, name='fftw_import_wisdom_from_file')
569      import
570      type(C_PTR), value :: input_file
571    end function fftw_import_wisdom_from_file
572
573    integer(C_INT) function fftw_import_wisdom_from_string(input_string) bind(C, name='fftw_import_wisdom_from_string')
574      import
575      character(C_CHAR), dimension(*), intent(in) :: input_string
576    end function fftw_import_wisdom_from_string
577
578    integer(C_INT) function fftw_import_wisdom(read_char,data) bind(C, name='fftw_import_wisdom')
579      import
580      type(C_FUNPTR), value :: read_char
581      type(C_PTR), value :: data
582    end function fftw_import_wisdom
583
584    subroutine fftw_fprint_plan(p,output_file) bind(C, name='fftw_fprint_plan')
585      import
586      type(C_PTR), value :: p
587      type(C_PTR), value :: output_file
588    end subroutine fftw_fprint_plan
589
590    subroutine fftw_print_plan(p) bind(C, name='fftw_print_plan')
591      import
592      type(C_PTR), value :: p
593    end subroutine fftw_print_plan
594
595    type(C_PTR) function fftw_sprint_plan(p) bind(C, name='fftw_sprint_plan')
596      import
597      type(C_PTR), value :: p
598    end function fftw_sprint_plan
599
600    type(C_PTR) function fftw_malloc(n) bind(C, name='fftw_malloc')
601      import
602      integer(C_SIZE_T), value :: n
603    end function fftw_malloc
604
605    type(C_PTR) function fftw_alloc_real(n) bind(C, name='fftw_alloc_real')
606      import
607      integer(C_SIZE_T), value :: n
608    end function fftw_alloc_real
609
610    type(C_PTR) function fftw_alloc_complex(n) bind(C, name='fftw_alloc_complex')
611      import
612      integer(C_SIZE_T), value :: n
613    end function fftw_alloc_complex
614
615    subroutine fftw_free(p) bind(C, name='fftw_free')
616      import
617      type(C_PTR), value :: p
618    end subroutine fftw_free
619
620    subroutine fftw_flops(p,add,mul,fmas) bind(C, name='fftw_flops')
621      import
622      type(C_PTR), value :: p
623      real(C_DOUBLE), intent(out) :: add
624      real(C_DOUBLE), intent(out) :: mul
625      real(C_DOUBLE), intent(out) :: fmas
626    end subroutine fftw_flops
627
628    real(C_DOUBLE) function fftw_estimate_cost(p) bind(C, name='fftw_estimate_cost')
629      import
630      type(C_PTR), value :: p
631    end function fftw_estimate_cost
632
633    real(C_DOUBLE) function fftw_cost(p) bind(C, name='fftw_cost')
634      import
635      type(C_PTR), value :: p
636    end function fftw_cost
637
638    integer(C_INT) function fftw_alignment_of(p) bind(C, name='fftw_alignment_of')
639      import
640      real(C_DOUBLE), dimension(*), intent(out) :: p
641    end function fftw_alignment_of
642
643  end interface
644
645  type, bind(C) :: fftwf_iodim
646     integer(C_INT) n, is, os
647  end type fftwf_iodim
648  type, bind(C) :: fftwf_iodim64
649     integer(C_INTPTR_T) n, is, os
650  end type fftwf_iodim64
651
652  interface
653    type(C_PTR) function fftwf_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftwf_plan_dft')
654      import
655      integer(C_INT), value :: rank
656      integer(C_INT), dimension(*), intent(in) :: n
657      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
658      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
659      integer(C_INT), value :: sign
660      integer(C_INT), value :: flags
661    end function fftwf_plan_dft
662
663    type(C_PTR) function fftwf_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftwf_plan_dft_1d')
664      import
665      integer(C_INT), value :: n
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_1d
671
672    type(C_PTR) function fftwf_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftwf_plan_dft_2d')
673      import
674      integer(C_INT), value :: n0
675      integer(C_INT), value :: n1
676      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
677      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
678      integer(C_INT), value :: sign
679      integer(C_INT), value :: flags
680    end function fftwf_plan_dft_2d
681
682    type(C_PTR) function fftwf_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftwf_plan_dft_3d')
683      import
684      integer(C_INT), value :: n0
685      integer(C_INT), value :: n1
686      integer(C_INT), value :: n2
687      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
688      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
689      integer(C_INT), value :: sign
690      integer(C_INT), value :: flags
691    end function fftwf_plan_dft_3d
692
693    type(C_PTR) function fftwf_plan_many_dft(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,sign,flags) &
694                         bind(C, name='fftwf_plan_many_dft')
695      import
696      integer(C_INT), value :: rank
697      integer(C_INT), dimension(*), intent(in) :: n
698      integer(C_INT), value :: howmany
699      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
700      integer(C_INT), dimension(*), intent(in) :: inembed
701      integer(C_INT), value :: istride
702      integer(C_INT), value :: idist
703      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
704      integer(C_INT), dimension(*), intent(in) :: onembed
705      integer(C_INT), value :: ostride
706      integer(C_INT), value :: odist
707      integer(C_INT), value :: sign
708      integer(C_INT), value :: flags
709    end function fftwf_plan_many_dft
710
711    type(C_PTR) function fftwf_plan_guru_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
712                         bind(C, name='fftwf_plan_guru_dft')
713      import
714      integer(C_INT), value :: rank
715      type(fftwf_iodim), dimension(*), intent(in) :: dims
716      integer(C_INT), value :: howmany_rank
717      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
718      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
719      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
720      integer(C_INT), value :: sign
721      integer(C_INT), value :: flags
722    end function fftwf_plan_guru_dft
723
724    type(C_PTR) function fftwf_plan_guru_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
725                         bind(C, name='fftwf_plan_guru_split_dft')
726      import
727      integer(C_INT), value :: rank
728      type(fftwf_iodim), dimension(*), intent(in) :: dims
729      integer(C_INT), value :: howmany_rank
730      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
731      real(C_FLOAT), dimension(*), intent(out) :: ri
732      real(C_FLOAT), dimension(*), intent(out) :: ii
733      real(C_FLOAT), dimension(*), intent(out) :: ro
734      real(C_FLOAT), dimension(*), intent(out) :: io
735      integer(C_INT), value :: flags
736    end function fftwf_plan_guru_split_dft
737
738    type(C_PTR) function fftwf_plan_guru64_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
739                         bind(C, name='fftwf_plan_guru64_dft')
740      import
741      integer(C_INT), value :: rank
742      type(fftwf_iodim64), dimension(*), intent(in) :: dims
743      integer(C_INT), value :: howmany_rank
744      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
745      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
746      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
747      integer(C_INT), value :: sign
748      integer(C_INT), value :: flags
749    end function fftwf_plan_guru64_dft
750
751    type(C_PTR) function fftwf_plan_guru64_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
752                         bind(C, name='fftwf_plan_guru64_split_dft')
753      import
754      integer(C_INT), value :: rank
755      type(fftwf_iodim64), dimension(*), intent(in) :: dims
756      integer(C_INT), value :: howmany_rank
757      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
758      real(C_FLOAT), dimension(*), intent(out) :: ri
759      real(C_FLOAT), dimension(*), intent(out) :: ii
760      real(C_FLOAT), dimension(*), intent(out) :: ro
761      real(C_FLOAT), dimension(*), intent(out) :: io
762      integer(C_INT), value :: flags
763    end function fftwf_plan_guru64_split_dft
764
765    subroutine fftwf_execute_dft(p,in,out) bind(C, name='fftwf_execute_dft')
766      import
767      type(C_PTR), value :: p
768      complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
769      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
770    end subroutine fftwf_execute_dft
771
772    subroutine fftwf_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftwf_execute_split_dft')
773      import
774      type(C_PTR), value :: p
775      real(C_FLOAT), dimension(*), intent(inout) :: ri
776      real(C_FLOAT), dimension(*), intent(inout) :: ii
777      real(C_FLOAT), dimension(*), intent(out) :: ro
778      real(C_FLOAT), dimension(*), intent(out) :: io
779    end subroutine fftwf_execute_split_dft
780
781    type(C_PTR) function fftwf_plan_many_dft_r2c(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
782                         bind(C, name='fftwf_plan_many_dft_r2c')
783      import
784      integer(C_INT), value :: rank
785      integer(C_INT), dimension(*), intent(in) :: n
786      integer(C_INT), value :: howmany
787      real(C_FLOAT), dimension(*), intent(out) :: in
788      integer(C_INT), dimension(*), intent(in) :: inembed
789      integer(C_INT), value :: istride
790      integer(C_INT), value :: idist
791      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
792      integer(C_INT), dimension(*), intent(in) :: onembed
793      integer(C_INT), value :: ostride
794      integer(C_INT), value :: odist
795      integer(C_INT), value :: flags
796    end function fftwf_plan_many_dft_r2c
797
798    type(C_PTR) function fftwf_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftwf_plan_dft_r2c')
799      import
800      integer(C_INT), value :: rank
801      integer(C_INT), dimension(*), intent(in) :: n
802      real(C_FLOAT), dimension(*), intent(out) :: in
803      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
804      integer(C_INT), value :: flags
805    end function fftwf_plan_dft_r2c
806
807    type(C_PTR) function fftwf_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_1d')
808      import
809      integer(C_INT), value :: n
810      real(C_FLOAT), dimension(*), intent(out) :: in
811      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
812      integer(C_INT), value :: flags
813    end function fftwf_plan_dft_r2c_1d
814
815    type(C_PTR) function fftwf_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_2d')
816      import
817      integer(C_INT), value :: n0
818      integer(C_INT), value :: n1
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_2d
823
824    type(C_PTR) function fftwf_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_3d')
825      import
826      integer(C_INT), value :: n0
827      integer(C_INT), value :: n1
828      integer(C_INT), value :: n2
829      real(C_FLOAT), dimension(*), intent(out) :: in
830      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
831      integer(C_INT), value :: flags
832    end function fftwf_plan_dft_r2c_3d
833
834    type(C_PTR) function fftwf_plan_many_dft_c2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
835                         bind(C, name='fftwf_plan_many_dft_c2r')
836      import
837      integer(C_INT), value :: rank
838      integer(C_INT), dimension(*), intent(in) :: n
839      integer(C_INT), value :: howmany
840      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
841      integer(C_INT), dimension(*), intent(in) :: inembed
842      integer(C_INT), value :: istride
843      integer(C_INT), value :: idist
844      real(C_FLOAT), dimension(*), intent(out) :: out
845      integer(C_INT), dimension(*), intent(in) :: onembed
846      integer(C_INT), value :: ostride
847      integer(C_INT), value :: odist
848      integer(C_INT), value :: flags
849    end function fftwf_plan_many_dft_c2r
850
851    type(C_PTR) function fftwf_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftwf_plan_dft_c2r')
852      import
853      integer(C_INT), value :: rank
854      integer(C_INT), dimension(*), intent(in) :: n
855      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
856      real(C_FLOAT), dimension(*), intent(out) :: out
857      integer(C_INT), value :: flags
858    end function fftwf_plan_dft_c2r
859
860    type(C_PTR) function fftwf_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_1d')
861      import
862      integer(C_INT), value :: n
863      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
864      real(C_FLOAT), dimension(*), intent(out) :: out
865      integer(C_INT), value :: flags
866    end function fftwf_plan_dft_c2r_1d
867
868    type(C_PTR) function fftwf_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_2d')
869      import
870      integer(C_INT), value :: n0
871      integer(C_INT), value :: n1
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_2d
876
877    type(C_PTR) function fftwf_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_3d')
878      import
879      integer(C_INT), value :: n0
880      integer(C_INT), value :: n1
881      integer(C_INT), value :: n2
882      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
883      real(C_FLOAT), dimension(*), intent(out) :: out
884      integer(C_INT), value :: flags
885    end function fftwf_plan_dft_c2r_3d
886
887    type(C_PTR) function fftwf_plan_guru_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
888                         bind(C, name='fftwf_plan_guru_dft_r2c')
889      import
890      integer(C_INT), value :: rank
891      type(fftwf_iodim), dimension(*), intent(in) :: dims
892      integer(C_INT), value :: howmany_rank
893      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
894      real(C_FLOAT), dimension(*), intent(out) :: in
895      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
896      integer(C_INT), value :: flags
897    end function fftwf_plan_guru_dft_r2c
898
899    type(C_PTR) function fftwf_plan_guru_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
900                         bind(C, name='fftwf_plan_guru_dft_c2r')
901      import
902      integer(C_INT), value :: rank
903      type(fftwf_iodim), dimension(*), intent(in) :: dims
904      integer(C_INT), value :: howmany_rank
905      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
906      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
907      real(C_FLOAT), dimension(*), intent(out) :: out
908      integer(C_INT), value :: flags
909    end function fftwf_plan_guru_dft_c2r
910
911    type(C_PTR) function fftwf_plan_guru_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
912                         bind(C, name='fftwf_plan_guru_split_dft_r2c')
913      import
914      integer(C_INT), value :: rank
915      type(fftwf_iodim), dimension(*), intent(in) :: dims
916      integer(C_INT), value :: howmany_rank
917      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
918      real(C_FLOAT), dimension(*), intent(out) :: in
919      real(C_FLOAT), dimension(*), intent(out) :: ro
920      real(C_FLOAT), dimension(*), intent(out) :: io
921      integer(C_INT), value :: flags
922    end function fftwf_plan_guru_split_dft_r2c
923
924    type(C_PTR) function fftwf_plan_guru_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
925                         bind(C, name='fftwf_plan_guru_split_dft_c2r')
926      import
927      integer(C_INT), value :: rank
928      type(fftwf_iodim), dimension(*), intent(in) :: dims
929      integer(C_INT), value :: howmany_rank
930      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
931      real(C_FLOAT), dimension(*), intent(out) :: ri
932      real(C_FLOAT), dimension(*), intent(out) :: ii
933      real(C_FLOAT), dimension(*), intent(out) :: out
934      integer(C_INT), value :: flags
935    end function fftwf_plan_guru_split_dft_c2r
936
937    type(C_PTR) function fftwf_plan_guru64_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
938                         bind(C, name='fftwf_plan_guru64_dft_r2c')
939      import
940      integer(C_INT), value :: rank
941      type(fftwf_iodim64), dimension(*), intent(in) :: dims
942      integer(C_INT), value :: howmany_rank
943      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
944      real(C_FLOAT), dimension(*), intent(out) :: in
945      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
946      integer(C_INT), value :: flags
947    end function fftwf_plan_guru64_dft_r2c
948
949    type(C_PTR) function fftwf_plan_guru64_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
950                         bind(C, name='fftwf_plan_guru64_dft_c2r')
951      import
952      integer(C_INT), value :: rank
953      type(fftwf_iodim64), dimension(*), intent(in) :: dims
954      integer(C_INT), value :: howmany_rank
955      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
956      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
957      real(C_FLOAT), dimension(*), intent(out) :: out
958      integer(C_INT), value :: flags
959    end function fftwf_plan_guru64_dft_c2r
960
961    type(C_PTR) function fftwf_plan_guru64_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
962                         bind(C, name='fftwf_plan_guru64_split_dft_r2c')
963      import
964      integer(C_INT), value :: rank
965      type(fftwf_iodim64), dimension(*), intent(in) :: dims
966      integer(C_INT), value :: howmany_rank
967      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
968      real(C_FLOAT), dimension(*), intent(out) :: in
969      real(C_FLOAT), dimension(*), intent(out) :: ro
970      real(C_FLOAT), dimension(*), intent(out) :: io
971      integer(C_INT), value :: flags
972    end function fftwf_plan_guru64_split_dft_r2c
973
974    type(C_PTR) function fftwf_plan_guru64_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
975                         bind(C, name='fftwf_plan_guru64_split_dft_c2r')
976      import
977      integer(C_INT), value :: rank
978      type(fftwf_iodim64), dimension(*), intent(in) :: dims
979      integer(C_INT), value :: howmany_rank
980      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
981      real(C_FLOAT), dimension(*), intent(out) :: ri
982      real(C_FLOAT), dimension(*), intent(out) :: ii
983      real(C_FLOAT), dimension(*), intent(out) :: out
984      integer(C_INT), value :: flags
985    end function fftwf_plan_guru64_split_dft_c2r
986
987    subroutine fftwf_execute_dft_r2c(p,in,out) bind(C, name='fftwf_execute_dft_r2c')
988      import
989      type(C_PTR), value :: p
990      real(C_FLOAT), dimension(*), intent(inout) :: in
991      complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
992    end subroutine fftwf_execute_dft_r2c
993
994    subroutine fftwf_execute_dft_c2r(p,in,out) bind(C, name='fftwf_execute_dft_c2r')
995      import
996      type(C_PTR), value :: p
997      complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
998      real(C_FLOAT), dimension(*), intent(out) :: out
999    end subroutine fftwf_execute_dft_c2r
1000
1001    subroutine fftwf_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftwf_execute_split_dft_r2c')
1002      import
1003      type(C_PTR), value :: p
1004      real(C_FLOAT), dimension(*), intent(inout) :: in
1005      real(C_FLOAT), dimension(*), intent(out) :: ro
1006      real(C_FLOAT), dimension(*), intent(out) :: io
1007    end subroutine fftwf_execute_split_dft_r2c
1008
1009    subroutine fftwf_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftwf_execute_split_dft_c2r')
1010      import
1011      type(C_PTR), value :: p
1012      real(C_FLOAT), dimension(*), intent(inout) :: ri
1013      real(C_FLOAT), dimension(*), intent(inout) :: ii
1014      real(C_FLOAT), dimension(*), intent(out) :: out
1015    end subroutine fftwf_execute_split_dft_c2r
1016
1017    type(C_PTR) function fftwf_plan_many_r2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,kind,flags) &
1018                         bind(C, name='fftwf_plan_many_r2r')
1019      import
1020      integer(C_INT), value :: rank
1021      integer(C_INT), dimension(*), intent(in) :: n
1022      integer(C_INT), value :: howmany
1023      real(C_FLOAT), dimension(*), intent(out) :: in
1024      integer(C_INT), dimension(*), intent(in) :: inembed
1025      integer(C_INT), value :: istride
1026      integer(C_INT), value :: idist
1027      real(C_FLOAT), dimension(*), intent(out) :: out
1028      integer(C_INT), dimension(*), intent(in) :: onembed
1029      integer(C_INT), value :: ostride
1030      integer(C_INT), value :: odist
1031      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1032      integer(C_INT), value :: flags
1033    end function fftwf_plan_many_r2r
1034
1035    type(C_PTR) function fftwf_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftwf_plan_r2r')
1036      import
1037      integer(C_INT), value :: rank
1038      integer(C_INT), dimension(*), intent(in) :: n
1039      real(C_FLOAT), dimension(*), intent(out) :: in
1040      real(C_FLOAT), dimension(*), intent(out) :: out
1041      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1042      integer(C_INT), value :: flags
1043    end function fftwf_plan_r2r
1044
1045    type(C_PTR) function fftwf_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftwf_plan_r2r_1d')
1046      import
1047      integer(C_INT), value :: n
1048      real(C_FLOAT), dimension(*), intent(out) :: in
1049      real(C_FLOAT), dimension(*), intent(out) :: out
1050      integer(C_FFTW_R2R_KIND), value :: kind
1051      integer(C_INT), value :: flags
1052    end function fftwf_plan_r2r_1d
1053
1054    type(C_PTR) function fftwf_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftwf_plan_r2r_2d')
1055      import
1056      integer(C_INT), value :: n0
1057      integer(C_INT), value :: n1
1058      real(C_FLOAT), dimension(*), intent(out) :: in
1059      real(C_FLOAT), dimension(*), intent(out) :: out
1060      integer(C_FFTW_R2R_KIND), value :: kind0
1061      integer(C_FFTW_R2R_KIND), value :: kind1
1062      integer(C_INT), value :: flags
1063    end function fftwf_plan_r2r_2d
1064
1065    type(C_PTR) function fftwf_plan_r2r_3d(n0,n1,n2,in,out,kind0,kind1,kind2,flags) bind(C, name='fftwf_plan_r2r_3d')
1066      import
1067      integer(C_INT), value :: n0
1068      integer(C_INT), value :: n1
1069      integer(C_INT), value :: n2
1070      real(C_FLOAT), dimension(*), intent(out) :: in
1071      real(C_FLOAT), dimension(*), intent(out) :: out
1072      integer(C_FFTW_R2R_KIND), value :: kind0
1073      integer(C_FFTW_R2R_KIND), value :: kind1
1074      integer(C_FFTW_R2R_KIND), value :: kind2
1075      integer(C_INT), value :: flags
1076    end function fftwf_plan_r2r_3d
1077
1078    type(C_PTR) function fftwf_plan_guru_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
1079                         bind(C, name='fftwf_plan_guru_r2r')
1080      import
1081      integer(C_INT), value :: rank
1082      type(fftwf_iodim), dimension(*), intent(in) :: dims
1083      integer(C_INT), value :: howmany_rank
1084      type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
1085      real(C_FLOAT), dimension(*), intent(out) :: in
1086      real(C_FLOAT), dimension(*), intent(out) :: out
1087      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1088      integer(C_INT), value :: flags
1089    end function fftwf_plan_guru_r2r
1090
1091    type(C_PTR) function fftwf_plan_guru64_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
1092                         bind(C, name='fftwf_plan_guru64_r2r')
1093      import
1094      integer(C_INT), value :: rank
1095      type(fftwf_iodim64), dimension(*), intent(in) :: dims
1096      integer(C_INT), value :: howmany_rank
1097      type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
1098      real(C_FLOAT), dimension(*), intent(out) :: in
1099      real(C_FLOAT), dimension(*), intent(out) :: out
1100      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1101      integer(C_INT), value :: flags
1102    end function fftwf_plan_guru64_r2r
1103
1104    subroutine fftwf_execute_r2r(p,in,out) bind(C, name='fftwf_execute_r2r')
1105      import
1106      type(C_PTR), value :: p
1107      real(C_FLOAT), dimension(*), intent(inout) :: in
1108      real(C_FLOAT), dimension(*), intent(out) :: out
1109    end subroutine fftwf_execute_r2r
1110
1111    subroutine fftwf_destroy_plan(p) bind(C, name='fftwf_destroy_plan')
1112      import
1113      type(C_PTR), value :: p
1114    end subroutine fftwf_destroy_plan
1115
1116    subroutine fftwf_forget_wisdom() bind(C, name='fftwf_forget_wisdom')
1117      import
1118    end subroutine fftwf_forget_wisdom
1119
1120    subroutine fftwf_cleanup() bind(C, name='fftwf_cleanup')
1121      import
1122    end subroutine fftwf_cleanup
1123
1124    subroutine fftwf_set_timelimit(t) bind(C, name='fftwf_set_timelimit')
1125      import
1126      real(C_DOUBLE), value :: t
1127    end subroutine fftwf_set_timelimit
1128
1129    subroutine fftwf_plan_with_nthreads(nthreads) bind(C, name='fftwf_plan_with_nthreads')
1130      import
1131      integer(C_INT), value :: nthreads
1132    end subroutine fftwf_plan_with_nthreads
1133
1134    integer(C_INT) function fftwf_init_threads() bind(C, name='fftwf_init_threads')
1135      import
1136    end function fftwf_init_threads
1137
1138    subroutine fftwf_cleanup_threads() bind(C, name='fftwf_cleanup_threads')
1139      import
1140    end subroutine fftwf_cleanup_threads
1141
1142    integer(C_INT) function fftwf_export_wisdom_to_filename(filename) bind(C, name='fftwf_export_wisdom_to_filename')
1143      import
1144      character(C_CHAR), dimension(*), intent(in) :: filename
1145    end function fftwf_export_wisdom_to_filename
1146
1147    subroutine fftwf_export_wisdom_to_file(output_file) bind(C, name='fftwf_export_wisdom_to_file')
1148      import
1149      type(C_PTR), value :: output_file
1150    end subroutine fftwf_export_wisdom_to_file
1151
1152    type(C_PTR) function fftwf_export_wisdom_to_string() bind(C, name='fftwf_export_wisdom_to_string')
1153      import
1154    end function fftwf_export_wisdom_to_string
1155
1156    subroutine fftwf_export_wisdom(write_char,data) bind(C, name='fftwf_export_wisdom')
1157      import
1158      type(C_FUNPTR), value :: write_char
1159      type(C_PTR), value :: data
1160    end subroutine fftwf_export_wisdom
1161
1162    integer(C_INT) function fftwf_import_system_wisdom() bind(C, name='fftwf_import_system_wisdom')
1163      import
1164    end function fftwf_import_system_wisdom
1165
1166    integer(C_INT) function fftwf_import_wisdom_from_filename(filename) bind(C, name='fftwf_import_wisdom_from_filename')
1167      import
1168      character(C_CHAR), dimension(*), intent(in) :: filename
1169    end function fftwf_import_wisdom_from_filename
1170
1171    integer(C_INT) function fftwf_import_wisdom_from_file(input_file) bind(C, name='fftwf_import_wisdom_from_file')
1172      import
1173      type(C_PTR), value :: input_file
1174    end function fftwf_import_wisdom_from_file
1175
1176    integer(C_INT) function fftwf_import_wisdom_from_string(input_string) bind(C, name='fftwf_import_wisdom_from_string')
1177      import
1178      character(C_CHAR), dimension(*), intent(in) :: input_string
1179    end function fftwf_import_wisdom_from_string
1180
1181    integer(C_INT) function fftwf_import_wisdom(read_char,data) bind(C, name='fftwf_import_wisdom')
1182      import
1183      type(C_FUNPTR), value :: read_char
1184      type(C_PTR), value :: data
1185    end function fftwf_import_wisdom
1186
1187    subroutine fftwf_fprint_plan(p,output_file) bind(C, name='fftwf_fprint_plan')
1188      import
1189      type(C_PTR), value :: p
1190      type(C_PTR), value :: output_file
1191    end subroutine fftwf_fprint_plan
1192
1193    subroutine fftwf_print_plan(p) bind(C, name='fftwf_print_plan')
1194      import
1195      type(C_PTR), value :: p
1196    end subroutine fftwf_print_plan
1197
1198    type(C_PTR) function fftwf_sprint_plan(p) bind(C, name='fftwf_sprint_plan')
1199      import
1200      type(C_PTR), value :: p
1201    end function fftwf_sprint_plan
1202
1203    type(C_PTR) function fftwf_malloc(n) bind(C, name='fftwf_malloc')
1204      import
1205      integer(C_SIZE_T), value :: n
1206    end function fftwf_malloc
1207
1208    type(C_PTR) function fftwf_alloc_real(n) bind(C, name='fftwf_alloc_real')
1209      import
1210      integer(C_SIZE_T), value :: n
1211    end function fftwf_alloc_real
1212
1213    type(C_PTR) function fftwf_alloc_complex(n) bind(C, name='fftwf_alloc_complex')
1214      import
1215      integer(C_SIZE_T), value :: n
1216    end function fftwf_alloc_complex
1217
1218    subroutine fftwf_free(p) bind(C, name='fftwf_free')
1219      import
1220      type(C_PTR), value :: p
1221    end subroutine fftwf_free
1222
1223    subroutine fftwf_flops(p,add,mul,fmas) bind(C, name='fftwf_flops')
1224      import
1225      type(C_PTR), value :: p
1226      real(C_DOUBLE), intent(out) :: add
1227      real(C_DOUBLE), intent(out) :: mul
1228      real(C_DOUBLE), intent(out) :: fmas
1229    end subroutine fftwf_flops
1230
1231    real(C_DOUBLE) function fftwf_estimate_cost(p) bind(C, name='fftwf_estimate_cost')
1232      import
1233      type(C_PTR), value :: p
1234    end function fftwf_estimate_cost
1235
1236    real(C_DOUBLE) function fftwf_cost(p) bind(C, name='fftwf_cost')
1237      import
1238      type(C_PTR), value :: p
1239    end function fftwf_cost
1240
1241    integer(C_INT) function fftwf_alignment_of(p) bind(C, name='fftwf_alignment_of')
1242      import
1243      real(C_FLOAT), dimension(*), intent(out) :: p
1244    end function fftwf_alignment_of
1245
1246  end interface
1247