OSDN Git Service

Merge branch 'master' of git.sourceforge.jp:/gitroot/eos/base
[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_malloc(n) bind(C, name='fftw_malloc')
596       import
597       integer(C_SIZE_T), value :: n
598     end function fftw_malloc
599     
600     type(C_PTR) function fftw_alloc_real(n) bind(C, name='fftw_alloc_real')
601       import
602       integer(C_SIZE_T), value :: n
603     end function fftw_alloc_real
604     
605     type(C_PTR) function fftw_alloc_complex(n) bind(C, name='fftw_alloc_complex')
606       import
607       integer(C_SIZE_T), value :: n
608     end function fftw_alloc_complex
609     
610     subroutine fftw_free(p) bind(C, name='fftw_free')
611       import
612       type(C_PTR), value :: p
613     end subroutine fftw_free
614     
615     subroutine fftw_flops(p,add,mul,fmas) bind(C, name='fftw_flops')
616       import
617       type(C_PTR), value :: p
618       real(C_DOUBLE), intent(out) :: add
619       real(C_DOUBLE), intent(out) :: mul
620       real(C_DOUBLE), intent(out) :: fmas
621     end subroutine fftw_flops
622     
623     real(C_DOUBLE) function fftw_estimate_cost(p) bind(C, name='fftw_estimate_cost')
624       import
625       type(C_PTR), value :: p
626     end function fftw_estimate_cost
627     
628     real(C_DOUBLE) function fftw_cost(p) bind(C, name='fftw_cost')
629       import
630       type(C_PTR), value :: p
631     end function fftw_cost
632     
633   end interface
634
635   type, bind(C) :: fftwf_iodim
636      integer(C_INT) n, is, os
637   end type fftwf_iodim
638   type, bind(C) :: fftwf_iodim64
639      integer(C_INTPTR_T) n, is, os
640   end type fftwf_iodim64
641
642   interface
643     type(C_PTR) function fftwf_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftwf_plan_dft')
644       import
645       integer(C_INT), value :: rank
646       integer(C_INT), dimension(*), intent(in) :: n
647       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
648       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
649       integer(C_INT), value :: sign
650       integer(C_INT), value :: flags
651     end function fftwf_plan_dft
652     
653     type(C_PTR) function fftwf_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftwf_plan_dft_1d')
654       import
655       integer(C_INT), value :: n
656       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
657       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
658       integer(C_INT), value :: sign
659       integer(C_INT), value :: flags
660     end function fftwf_plan_dft_1d
661     
662     type(C_PTR) function fftwf_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftwf_plan_dft_2d')
663       import
664       integer(C_INT), value :: n0
665       integer(C_INT), value :: n1
666       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
667       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
668       integer(C_INT), value :: sign
669       integer(C_INT), value :: flags
670     end function fftwf_plan_dft_2d
671     
672     type(C_PTR) function fftwf_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftwf_plan_dft_3d')
673       import
674       integer(C_INT), value :: n0
675       integer(C_INT), value :: n1
676       integer(C_INT), value :: n2
677       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
678       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
679       integer(C_INT), value :: sign
680       integer(C_INT), value :: flags
681     end function fftwf_plan_dft_3d
682     
683     type(C_PTR) function fftwf_plan_many_dft(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,sign,flags) &
684                          bind(C, name='fftwf_plan_many_dft')
685       import
686       integer(C_INT), value :: rank
687       integer(C_INT), dimension(*), intent(in) :: n
688       integer(C_INT), value :: howmany
689       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
690       integer(C_INT), dimension(*), intent(in) :: inembed
691       integer(C_INT), value :: istride
692       integer(C_INT), value :: idist
693       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
694       integer(C_INT), dimension(*), intent(in) :: onembed
695       integer(C_INT), value :: ostride
696       integer(C_INT), value :: odist
697       integer(C_INT), value :: sign
698       integer(C_INT), value :: flags
699     end function fftwf_plan_many_dft
700     
701     type(C_PTR) function fftwf_plan_guru_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
702                          bind(C, name='fftwf_plan_guru_dft')
703       import
704       integer(C_INT), value :: rank
705       type(fftwf_iodim), dimension(*), intent(in) :: dims
706       integer(C_INT), value :: howmany_rank
707       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
708       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
709       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
710       integer(C_INT), value :: sign
711       integer(C_INT), value :: flags
712     end function fftwf_plan_guru_dft
713     
714     type(C_PTR) function fftwf_plan_guru_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
715                          bind(C, name='fftwf_plan_guru_split_dft')
716       import
717       integer(C_INT), value :: rank
718       type(fftwf_iodim), dimension(*), intent(in) :: dims
719       integer(C_INT), value :: howmany_rank
720       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
721       real(C_FLOAT), dimension(*), intent(out) :: ri
722       real(C_FLOAT), dimension(*), intent(out) :: ii
723       real(C_FLOAT), dimension(*), intent(out) :: ro
724       real(C_FLOAT), dimension(*), intent(out) :: io
725       integer(C_INT), value :: flags
726     end function fftwf_plan_guru_split_dft
727     
728     type(C_PTR) function fftwf_plan_guru64_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
729                          bind(C, name='fftwf_plan_guru64_dft')
730       import
731       integer(C_INT), value :: rank
732       type(fftwf_iodim64), dimension(*), intent(in) :: dims
733       integer(C_INT), value :: howmany_rank
734       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
735       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
736       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
737       integer(C_INT), value :: sign
738       integer(C_INT), value :: flags
739     end function fftwf_plan_guru64_dft
740     
741     type(C_PTR) function fftwf_plan_guru64_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
742                          bind(C, name='fftwf_plan_guru64_split_dft')
743       import
744       integer(C_INT), value :: rank
745       type(fftwf_iodim64), dimension(*), intent(in) :: dims
746       integer(C_INT), value :: howmany_rank
747       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
748       real(C_FLOAT), dimension(*), intent(out) :: ri
749       real(C_FLOAT), dimension(*), intent(out) :: ii
750       real(C_FLOAT), dimension(*), intent(out) :: ro
751       real(C_FLOAT), dimension(*), intent(out) :: io
752       integer(C_INT), value :: flags
753     end function fftwf_plan_guru64_split_dft
754     
755     subroutine fftwf_execute_dft(p,in,out) bind(C, name='fftwf_execute_dft')
756       import
757       type(C_PTR), value :: p
758       complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
759       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
760     end subroutine fftwf_execute_dft
761     
762     subroutine fftwf_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftwf_execute_split_dft')
763       import
764       type(C_PTR), value :: p
765       real(C_FLOAT), dimension(*), intent(inout) :: ri
766       real(C_FLOAT), dimension(*), intent(inout) :: ii
767       real(C_FLOAT), dimension(*), intent(out) :: ro
768       real(C_FLOAT), dimension(*), intent(out) :: io
769     end subroutine fftwf_execute_split_dft
770     
771     type(C_PTR) function fftwf_plan_many_dft_r2c(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
772                          bind(C, name='fftwf_plan_many_dft_r2c')
773       import
774       integer(C_INT), value :: rank
775       integer(C_INT), dimension(*), intent(in) :: n
776       integer(C_INT), value :: howmany
777       real(C_FLOAT), dimension(*), intent(out) :: in
778       integer(C_INT), dimension(*), intent(in) :: inembed
779       integer(C_INT), value :: istride
780       integer(C_INT), value :: idist
781       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
782       integer(C_INT), dimension(*), intent(in) :: onembed
783       integer(C_INT), value :: ostride
784       integer(C_INT), value :: odist
785       integer(C_INT), value :: flags
786     end function fftwf_plan_many_dft_r2c
787     
788     type(C_PTR) function fftwf_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftwf_plan_dft_r2c')
789       import
790       integer(C_INT), value :: rank
791       integer(C_INT), dimension(*), intent(in) :: n
792       real(C_FLOAT), dimension(*), intent(out) :: in
793       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
794       integer(C_INT), value :: flags
795     end function fftwf_plan_dft_r2c
796     
797     type(C_PTR) function fftwf_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_1d')
798       import
799       integer(C_INT), value :: n
800       real(C_FLOAT), dimension(*), intent(out) :: in
801       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
802       integer(C_INT), value :: flags
803     end function fftwf_plan_dft_r2c_1d
804     
805     type(C_PTR) function fftwf_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_2d')
806       import
807       integer(C_INT), value :: n0
808       integer(C_INT), value :: n1
809       real(C_FLOAT), dimension(*), intent(out) :: in
810       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
811       integer(C_INT), value :: flags
812     end function fftwf_plan_dft_r2c_2d
813     
814     type(C_PTR) function fftwf_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwf_plan_dft_r2c_3d')
815       import
816       integer(C_INT), value :: n0
817       integer(C_INT), value :: n1
818       integer(C_INT), value :: n2
819       real(C_FLOAT), dimension(*), intent(out) :: in
820       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
821       integer(C_INT), value :: flags
822     end function fftwf_plan_dft_r2c_3d
823     
824     type(C_PTR) function fftwf_plan_many_dft_c2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
825                          bind(C, name='fftwf_plan_many_dft_c2r')
826       import
827       integer(C_INT), value :: rank
828       integer(C_INT), dimension(*), intent(in) :: n
829       integer(C_INT), value :: howmany
830       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
831       integer(C_INT), dimension(*), intent(in) :: inembed
832       integer(C_INT), value :: istride
833       integer(C_INT), value :: idist
834       real(C_FLOAT), dimension(*), intent(out) :: out
835       integer(C_INT), dimension(*), intent(in) :: onembed
836       integer(C_INT), value :: ostride
837       integer(C_INT), value :: odist
838       integer(C_INT), value :: flags
839     end function fftwf_plan_many_dft_c2r
840     
841     type(C_PTR) function fftwf_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftwf_plan_dft_c2r')
842       import
843       integer(C_INT), value :: rank
844       integer(C_INT), dimension(*), intent(in) :: n
845       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
846       real(C_FLOAT), dimension(*), intent(out) :: out
847       integer(C_INT), value :: flags
848     end function fftwf_plan_dft_c2r
849     
850     type(C_PTR) function fftwf_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_1d')
851       import
852       integer(C_INT), value :: n
853       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
854       real(C_FLOAT), dimension(*), intent(out) :: out
855       integer(C_INT), value :: flags
856     end function fftwf_plan_dft_c2r_1d
857     
858     type(C_PTR) function fftwf_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_2d')
859       import
860       integer(C_INT), value :: n0
861       integer(C_INT), value :: n1
862       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
863       real(C_FLOAT), dimension(*), intent(out) :: out
864       integer(C_INT), value :: flags
865     end function fftwf_plan_dft_c2r_2d
866     
867     type(C_PTR) function fftwf_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftwf_plan_dft_c2r_3d')
868       import
869       integer(C_INT), value :: n0
870       integer(C_INT), value :: n1
871       integer(C_INT), value :: n2
872       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
873       real(C_FLOAT), dimension(*), intent(out) :: out
874       integer(C_INT), value :: flags
875     end function fftwf_plan_dft_c2r_3d
876     
877     type(C_PTR) function fftwf_plan_guru_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
878                          bind(C, name='fftwf_plan_guru_dft_r2c')
879       import
880       integer(C_INT), value :: rank
881       type(fftwf_iodim), dimension(*), intent(in) :: dims
882       integer(C_INT), value :: howmany_rank
883       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
884       real(C_FLOAT), dimension(*), intent(out) :: in
885       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
886       integer(C_INT), value :: flags
887     end function fftwf_plan_guru_dft_r2c
888     
889     type(C_PTR) function fftwf_plan_guru_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
890                          bind(C, name='fftwf_plan_guru_dft_c2r')
891       import
892       integer(C_INT), value :: rank
893       type(fftwf_iodim), dimension(*), intent(in) :: dims
894       integer(C_INT), value :: howmany_rank
895       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
896       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
897       real(C_FLOAT), dimension(*), intent(out) :: out
898       integer(C_INT), value :: flags
899     end function fftwf_plan_guru_dft_c2r
900     
901     type(C_PTR) function fftwf_plan_guru_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
902                          bind(C, name='fftwf_plan_guru_split_dft_r2c')
903       import
904       integer(C_INT), value :: rank
905       type(fftwf_iodim), dimension(*), intent(in) :: dims
906       integer(C_INT), value :: howmany_rank
907       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
908       real(C_FLOAT), dimension(*), intent(out) :: in
909       real(C_FLOAT), dimension(*), intent(out) :: ro
910       real(C_FLOAT), dimension(*), intent(out) :: io
911       integer(C_INT), value :: flags
912     end function fftwf_plan_guru_split_dft_r2c
913     
914     type(C_PTR) function fftwf_plan_guru_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
915                          bind(C, name='fftwf_plan_guru_split_dft_c2r')
916       import
917       integer(C_INT), value :: rank
918       type(fftwf_iodim), dimension(*), intent(in) :: dims
919       integer(C_INT), value :: howmany_rank
920       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
921       real(C_FLOAT), dimension(*), intent(out) :: ri
922       real(C_FLOAT), dimension(*), intent(out) :: ii
923       real(C_FLOAT), dimension(*), intent(out) :: out
924       integer(C_INT), value :: flags
925     end function fftwf_plan_guru_split_dft_c2r
926     
927     type(C_PTR) function fftwf_plan_guru64_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
928                          bind(C, name='fftwf_plan_guru64_dft_r2c')
929       import
930       integer(C_INT), value :: rank
931       type(fftwf_iodim64), dimension(*), intent(in) :: dims
932       integer(C_INT), value :: howmany_rank
933       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
934       real(C_FLOAT), dimension(*), intent(out) :: in
935       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
936       integer(C_INT), value :: flags
937     end function fftwf_plan_guru64_dft_r2c
938     
939     type(C_PTR) function fftwf_plan_guru64_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
940                          bind(C, name='fftwf_plan_guru64_dft_c2r')
941       import
942       integer(C_INT), value :: rank
943       type(fftwf_iodim64), dimension(*), intent(in) :: dims
944       integer(C_INT), value :: howmany_rank
945       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
946       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: in
947       real(C_FLOAT), dimension(*), intent(out) :: out
948       integer(C_INT), value :: flags
949     end function fftwf_plan_guru64_dft_c2r
950     
951     type(C_PTR) function fftwf_plan_guru64_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
952                          bind(C, name='fftwf_plan_guru64_split_dft_r2c')
953       import
954       integer(C_INT), value :: rank
955       type(fftwf_iodim64), dimension(*), intent(in) :: dims
956       integer(C_INT), value :: howmany_rank
957       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
958       real(C_FLOAT), dimension(*), intent(out) :: in
959       real(C_FLOAT), dimension(*), intent(out) :: ro
960       real(C_FLOAT), dimension(*), intent(out) :: io
961       integer(C_INT), value :: flags
962     end function fftwf_plan_guru64_split_dft_r2c
963     
964     type(C_PTR) function fftwf_plan_guru64_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
965                          bind(C, name='fftwf_plan_guru64_split_dft_c2r')
966       import
967       integer(C_INT), value :: rank
968       type(fftwf_iodim64), dimension(*), intent(in) :: dims
969       integer(C_INT), value :: howmany_rank
970       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
971       real(C_FLOAT), dimension(*), intent(out) :: ri
972       real(C_FLOAT), dimension(*), intent(out) :: ii
973       real(C_FLOAT), dimension(*), intent(out) :: out
974       integer(C_INT), value :: flags
975     end function fftwf_plan_guru64_split_dft_c2r
976     
977     subroutine fftwf_execute_dft_r2c(p,in,out) bind(C, name='fftwf_execute_dft_r2c')
978       import
979       type(C_PTR), value :: p
980       real(C_FLOAT), dimension(*), intent(inout) :: in
981       complex(C_FLOAT_COMPLEX), dimension(*), intent(out) :: out
982     end subroutine fftwf_execute_dft_r2c
983     
984     subroutine fftwf_execute_dft_c2r(p,in,out) bind(C, name='fftwf_execute_dft_c2r')
985       import
986       type(C_PTR), value :: p
987       complex(C_FLOAT_COMPLEX), dimension(*), intent(inout) :: in
988       real(C_FLOAT), dimension(*), intent(out) :: out
989     end subroutine fftwf_execute_dft_c2r
990     
991     subroutine fftwf_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftwf_execute_split_dft_r2c')
992       import
993       type(C_PTR), value :: p
994       real(C_FLOAT), dimension(*), intent(inout) :: in
995       real(C_FLOAT), dimension(*), intent(out) :: ro
996       real(C_FLOAT), dimension(*), intent(out) :: io
997     end subroutine fftwf_execute_split_dft_r2c
998     
999     subroutine fftwf_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftwf_execute_split_dft_c2r')
1000       import
1001       type(C_PTR), value :: p
1002       real(C_FLOAT), dimension(*), intent(inout) :: ri
1003       real(C_FLOAT), dimension(*), intent(inout) :: ii
1004       real(C_FLOAT), dimension(*), intent(out) :: out
1005     end subroutine fftwf_execute_split_dft_c2r
1006     
1007     type(C_PTR) function fftwf_plan_many_r2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,kind,flags) &
1008                          bind(C, name='fftwf_plan_many_r2r')
1009       import
1010       integer(C_INT), value :: rank
1011       integer(C_INT), dimension(*), intent(in) :: n
1012       integer(C_INT), value :: howmany
1013       real(C_FLOAT), dimension(*), intent(out) :: in
1014       integer(C_INT), dimension(*), intent(in) :: inembed
1015       integer(C_INT), value :: istride
1016       integer(C_INT), value :: idist
1017       real(C_FLOAT), dimension(*), intent(out) :: out
1018       integer(C_INT), dimension(*), intent(in) :: onembed
1019       integer(C_INT), value :: ostride
1020       integer(C_INT), value :: odist
1021       integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1022       integer(C_INT), value :: flags
1023     end function fftwf_plan_many_r2r
1024     
1025     type(C_PTR) function fftwf_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftwf_plan_r2r')
1026       import
1027       integer(C_INT), value :: rank
1028       integer(C_INT), dimension(*), intent(in) :: n
1029       real(C_FLOAT), dimension(*), intent(out) :: in
1030       real(C_FLOAT), dimension(*), intent(out) :: out
1031       integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1032       integer(C_INT), value :: flags
1033     end function fftwf_plan_r2r
1034     
1035     type(C_PTR) function fftwf_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftwf_plan_r2r_1d')
1036       import
1037       integer(C_INT), value :: n
1038       real(C_FLOAT), dimension(*), intent(out) :: in
1039       real(C_FLOAT), dimension(*), intent(out) :: out
1040       integer(C_FFTW_R2R_KIND), value :: kind
1041       integer(C_INT), value :: flags
1042     end function fftwf_plan_r2r_1d
1043     
1044     type(C_PTR) function fftwf_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftwf_plan_r2r_2d')
1045       import
1046       integer(C_INT), value :: n0
1047       integer(C_INT), value :: n1
1048       real(C_FLOAT), dimension(*), intent(out) :: in
1049       real(C_FLOAT), dimension(*), intent(out) :: out
1050       integer(C_FFTW_R2R_KIND), value :: kind0
1051       integer(C_FFTW_R2R_KIND), value :: kind1
1052       integer(C_INT), value :: flags
1053     end function fftwf_plan_r2r_2d
1054     
1055     type(C_PTR) function fftwf_plan_r2r_3d(n0,n1,n2,in,out,kind0,kind1,kind2,flags) bind(C, name='fftwf_plan_r2r_3d')
1056       import
1057       integer(C_INT), value :: n0
1058       integer(C_INT), value :: n1
1059       integer(C_INT), value :: n2
1060       real(C_FLOAT), dimension(*), intent(out) :: in
1061       real(C_FLOAT), dimension(*), intent(out) :: out
1062       integer(C_FFTW_R2R_KIND), value :: kind0
1063       integer(C_FFTW_R2R_KIND), value :: kind1
1064       integer(C_FFTW_R2R_KIND), value :: kind2
1065       integer(C_INT), value :: flags
1066     end function fftwf_plan_r2r_3d
1067     
1068     type(C_PTR) function fftwf_plan_guru_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
1069                          bind(C, name='fftwf_plan_guru_r2r')
1070       import
1071       integer(C_INT), value :: rank
1072       type(fftwf_iodim), dimension(*), intent(in) :: dims
1073       integer(C_INT), value :: howmany_rank
1074       type(fftwf_iodim), dimension(*), intent(in) :: howmany_dims
1075       real(C_FLOAT), dimension(*), intent(out) :: in
1076       real(C_FLOAT), dimension(*), intent(out) :: out
1077       integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1078       integer(C_INT), value :: flags
1079     end function fftwf_plan_guru_r2r
1080     
1081     type(C_PTR) function fftwf_plan_guru64_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
1082                          bind(C, name='fftwf_plan_guru64_r2r')
1083       import
1084       integer(C_INT), value :: rank
1085       type(fftwf_iodim64), dimension(*), intent(in) :: dims
1086       integer(C_INT), value :: howmany_rank
1087       type(fftwf_iodim64), dimension(*), intent(in) :: howmany_dims
1088       real(C_FLOAT), dimension(*), intent(out) :: in
1089       real(C_FLOAT), dimension(*), intent(out) :: out
1090       integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
1091       integer(C_INT), value :: flags
1092     end function fftwf_plan_guru64_r2r
1093     
1094     subroutine fftwf_execute_r2r(p,in,out) bind(C, name='fftwf_execute_r2r')
1095       import
1096       type(C_PTR), value :: p
1097       real(C_FLOAT), dimension(*), intent(inout) :: in
1098       real(C_FLOAT), dimension(*), intent(out) :: out
1099     end subroutine fftwf_execute_r2r
1100     
1101     subroutine fftwf_destroy_plan(p) bind(C, name='fftwf_destroy_plan')
1102       import
1103       type(C_PTR), value :: p
1104     end subroutine fftwf_destroy_plan
1105     
1106     subroutine fftwf_forget_wisdom() bind(C, name='fftwf_forget_wisdom')
1107       import
1108     end subroutine fftwf_forget_wisdom
1109     
1110     subroutine fftwf_cleanup() bind(C, name='fftwf_cleanup')
1111       import
1112     end subroutine fftwf_cleanup
1113     
1114     subroutine fftwf_set_timelimit(t) bind(C, name='fftwf_set_timelimit')
1115       import
1116       real(C_DOUBLE), value :: t
1117     end subroutine fftwf_set_timelimit
1118     
1119     subroutine fftwf_plan_with_nthreads(nthreads) bind(C, name='fftwf_plan_with_nthreads')
1120       import
1121       integer(C_INT), value :: nthreads
1122     end subroutine fftwf_plan_with_nthreads
1123     
1124     integer(C_INT) function fftwf_init_threads() bind(C, name='fftwf_init_threads')
1125       import
1126     end function fftwf_init_threads
1127     
1128     subroutine fftwf_cleanup_threads() bind(C, name='fftwf_cleanup_threads')
1129       import
1130     end subroutine fftwf_cleanup_threads
1131     
1132     integer(C_INT) function fftwf_export_wisdom_to_filename(filename) bind(C, name='fftwf_export_wisdom_to_filename')
1133       import
1134       character(C_CHAR), dimension(*), intent(in) :: filename
1135     end function fftwf_export_wisdom_to_filename
1136     
1137     subroutine fftwf_export_wisdom_to_file(output_file) bind(C, name='fftwf_export_wisdom_to_file')
1138       import
1139       type(C_PTR), value :: output_file
1140     end subroutine fftwf_export_wisdom_to_file
1141     
1142     type(C_PTR) function fftwf_export_wisdom_to_string() bind(C, name='fftwf_export_wisdom_to_string')
1143       import
1144     end function fftwf_export_wisdom_to_string
1145     
1146     subroutine fftwf_export_wisdom(write_char,data) bind(C, name='fftwf_export_wisdom')
1147       import
1148       type(C_FUNPTR), value :: write_char
1149       type(C_PTR), value :: data
1150     end subroutine fftwf_export_wisdom
1151     
1152     integer(C_INT) function fftwf_import_system_wisdom() bind(C, name='fftwf_import_system_wisdom')
1153       import
1154     end function fftwf_import_system_wisdom
1155     
1156     integer(C_INT) function fftwf_import_wisdom_from_filename(filename) bind(C, name='fftwf_import_wisdom_from_filename')
1157       import
1158       character(C_CHAR), dimension(*), intent(in) :: filename
1159     end function fftwf_import_wisdom_from_filename
1160     
1161     integer(C_INT) function fftwf_import_wisdom_from_file(input_file) bind(C, name='fftwf_import_wisdom_from_file')
1162       import
1163       type(C_PTR), value :: input_file
1164     end function fftwf_import_wisdom_from_file
1165     
1166     integer(C_INT) function fftwf_import_wisdom_from_string(input_string) bind(C, name='fftwf_import_wisdom_from_string')
1167       import
1168       character(C_CHAR), dimension(*), intent(in) :: input_string
1169     end function fftwf_import_wisdom_from_string
1170     
1171     integer(C_INT) function fftwf_import_wisdom(read_char,data) bind(C, name='fftwf_import_wisdom')
1172       import
1173       type(C_FUNPTR), value :: read_char
1174       type(C_PTR), value :: data
1175     end function fftwf_import_wisdom
1176     
1177     subroutine fftwf_fprint_plan(p,output_file) bind(C, name='fftwf_fprint_plan')
1178       import
1179       type(C_PTR), value :: p
1180       type(C_PTR), value :: output_file
1181     end subroutine fftwf_fprint_plan
1182     
1183     subroutine fftwf_print_plan(p) bind(C, name='fftwf_print_plan')
1184       import
1185       type(C_PTR), value :: p
1186     end subroutine fftwf_print_plan
1187     
1188     type(C_PTR) function fftwf_malloc(n) bind(C, name='fftwf_malloc')
1189       import
1190       integer(C_SIZE_T), value :: n
1191     end function fftwf_malloc
1192     
1193     type(C_PTR) function fftwf_alloc_real(n) bind(C, name='fftwf_alloc_real')
1194       import
1195       integer(C_SIZE_T), value :: n
1196     end function fftwf_alloc_real
1197     
1198     type(C_PTR) function fftwf_alloc_complex(n) bind(C, name='fftwf_alloc_complex')
1199       import
1200       integer(C_SIZE_T), value :: n
1201     end function fftwf_alloc_complex
1202     
1203     subroutine fftwf_free(p) bind(C, name='fftwf_free')
1204       import
1205       type(C_PTR), value :: p
1206     end subroutine fftwf_free
1207     
1208     subroutine fftwf_flops(p,add,mul,fmas) bind(C, name='fftwf_flops')
1209       import
1210       type(C_PTR), value :: p
1211       real(C_DOUBLE), intent(out) :: add
1212       real(C_DOUBLE), intent(out) :: mul
1213       real(C_DOUBLE), intent(out) :: fmas
1214     end subroutine fftwf_flops
1215     
1216     real(C_DOUBLE) function fftwf_estimate_cost(p) bind(C, name='fftwf_estimate_cost')
1217       import
1218       type(C_PTR), value :: p
1219     end function fftwf_estimate_cost
1220     
1221     real(C_DOUBLE) function fftwf_cost(p) bind(C, name='fftwf_cost')
1222       import
1223       type(C_PTR), value :: p
1224     end function fftwf_cost
1225     
1226   end interface