OSDN Git Service

recompiled:
[eos/hostdependX86LINUX64.git] / util / X86LINUX64 / include / fftw3.f03
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