To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at https://github.com/sonic-visualiser/sv-dependency-builds .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Tag: | Revision:

root / src / fftw-3.3.8 / api / fftw3.f03.in @ 167:bd3cc4d1df30

History | View | Annotate | Download (53.3 KB)

1
! Generated automatically.  DO NOT EDIT!
2

    
3
  integer(C_INT), parameter :: FFTW_R2HC = 0
4
  integer(C_INT), parameter :: FFTW_HC2R = 1
5
  integer(C_INT), parameter :: FFTW_DHT = 2
6
  integer(C_INT), parameter :: FFTW_REDFT00 = 3
7
  integer(C_INT), parameter :: FFTW_REDFT01 = 4
8
  integer(C_INT), parameter :: FFTW_REDFT10 = 5
9
  integer(C_INT), parameter :: FFTW_REDFT11 = 6
10
  integer(C_INT), parameter :: FFTW_RODFT00 = 7
11
  integer(C_INT), parameter :: FFTW_RODFT01 = 8
12
  integer(C_INT), parameter :: FFTW_RODFT10 = 9
13
  integer(C_INT), parameter :: FFTW_RODFT11 = 10
14
  integer(C_INT), parameter :: FFTW_FORWARD = -1
15
  integer(C_INT), parameter :: FFTW_BACKWARD = +1
16
  integer(C_INT), parameter :: FFTW_MEASURE = 0
17
  integer(C_INT), parameter :: FFTW_DESTROY_INPUT = 1
18
  integer(C_INT), parameter :: FFTW_UNALIGNED = 2
19
  integer(C_INT), parameter :: FFTW_CONSERVE_MEMORY = 4
20
  integer(C_INT), parameter :: FFTW_EXHAUSTIVE = 8
21
  integer(C_INT), parameter :: FFTW_PRESERVE_INPUT = 16
22
  integer(C_INT), parameter :: FFTW_PATIENT = 32
23
  integer(C_INT), parameter :: FFTW_ESTIMATE = 64
24
  integer(C_INT), parameter :: FFTW_WISDOM_ONLY = 2097152
25
  integer(C_INT), parameter :: FFTW_ESTIMATE_PATIENT = 128
26
  integer(C_INT), parameter :: FFTW_BELIEVE_PCOST = 256
27
  integer(C_INT), parameter :: FFTW_NO_DFT_R2HC = 512
28
  integer(C_INT), parameter :: FFTW_NO_NONTHREADED = 1024
29
  integer(C_INT), parameter :: FFTW_NO_BUFFERING = 2048
30
  integer(C_INT), parameter :: FFTW_NO_INDIRECT_OP = 4096
31
  integer(C_INT), parameter :: FFTW_ALLOW_LARGE_GENERIC = 8192
32
  integer(C_INT), parameter :: FFTW_NO_RANK_SPLITS = 16384
33
  integer(C_INT), parameter :: FFTW_NO_VRANK_SPLITS = 32768
34
  integer(C_INT), parameter :: FFTW_NO_VRECURSE = 65536
35
  integer(C_INT), parameter :: FFTW_NO_SIMD = 131072
36
  integer(C_INT), parameter :: FFTW_NO_SLOW = 262144
37
  integer(C_INT), parameter :: FFTW_NO_FIXED_RADIX_LARGE_N = 524288
38
  integer(C_INT), parameter :: FFTW_ALLOW_PRUNING = 1048576
39

    
40
  type, bind(C) :: fftw_iodim
41
     integer(C_INT) n, is, os
42
  end type fftw_iodim
43
  type, bind(C) :: fftw_iodim64
44
     integer(C_INTPTR_T) n, is, os
45
  end type fftw_iodim64
46

    
47
  interface
48
    type(C_PTR) function fftw_plan_dft(rank,n,in,out,sign,flags) bind(C, name='fftw_plan_dft')
49
      import
50
      integer(C_INT), value :: rank
51
      integer(C_INT), dimension(*), intent(in) :: n
52
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
53
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
54
      integer(C_INT), value :: sign
55
      integer(C_INT), value :: flags
56
    end function fftw_plan_dft
57
    
58
    type(C_PTR) function fftw_plan_dft_1d(n,in,out,sign,flags) bind(C, name='fftw_plan_dft_1d')
59
      import
60
      integer(C_INT), value :: n
61
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
62
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
63
      integer(C_INT), value :: sign
64
      integer(C_INT), value :: flags
65
    end function fftw_plan_dft_1d
66
    
67
    type(C_PTR) function fftw_plan_dft_2d(n0,n1,in,out,sign,flags) bind(C, name='fftw_plan_dft_2d')
68
      import
69
      integer(C_INT), value :: n0
70
      integer(C_INT), value :: n1
71
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
72
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
73
      integer(C_INT), value :: sign
74
      integer(C_INT), value :: flags
75
    end function fftw_plan_dft_2d
76
    
77
    type(C_PTR) function fftw_plan_dft_3d(n0,n1,n2,in,out,sign,flags) bind(C, name='fftw_plan_dft_3d')
78
      import
79
      integer(C_INT), value :: n0
80
      integer(C_INT), value :: n1
81
      integer(C_INT), value :: n2
82
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
83
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
84
      integer(C_INT), value :: sign
85
      integer(C_INT), value :: flags
86
    end function fftw_plan_dft_3d
87
    
88
    type(C_PTR) function fftw_plan_many_dft(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,sign,flags) &
89
                         bind(C, name='fftw_plan_many_dft')
90
      import
91
      integer(C_INT), value :: rank
92
      integer(C_INT), dimension(*), intent(in) :: n
93
      integer(C_INT), value :: howmany
94
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
95
      integer(C_INT), dimension(*), intent(in) :: inembed
96
      integer(C_INT), value :: istride
97
      integer(C_INT), value :: idist
98
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
99
      integer(C_INT), dimension(*), intent(in) :: onembed
100
      integer(C_INT), value :: ostride
101
      integer(C_INT), value :: odist
102
      integer(C_INT), value :: sign
103
      integer(C_INT), value :: flags
104
    end function fftw_plan_many_dft
105
    
106
    type(C_PTR) function fftw_plan_guru_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
107
                         bind(C, name='fftw_plan_guru_dft')
108
      import
109
      integer(C_INT), value :: rank
110
      type(fftw_iodim), dimension(*), intent(in) :: dims
111
      integer(C_INT), value :: howmany_rank
112
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
113
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
114
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
115
      integer(C_INT), value :: sign
116
      integer(C_INT), value :: flags
117
    end function fftw_plan_guru_dft
118
    
119
    type(C_PTR) function fftw_plan_guru_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
120
                         bind(C, name='fftw_plan_guru_split_dft')
121
      import
122
      integer(C_INT), value :: rank
123
      type(fftw_iodim), dimension(*), intent(in) :: dims
124
      integer(C_INT), value :: howmany_rank
125
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
126
      real(C_DOUBLE), dimension(*), intent(out) :: ri
127
      real(C_DOUBLE), dimension(*), intent(out) :: ii
128
      real(C_DOUBLE), dimension(*), intent(out) :: ro
129
      real(C_DOUBLE), dimension(*), intent(out) :: io
130
      integer(C_INT), value :: flags
131
    end function fftw_plan_guru_split_dft
132
    
133
    type(C_PTR) function fftw_plan_guru64_dft(rank,dims,howmany_rank,howmany_dims,in,out,sign,flags) &
134
                         bind(C, name='fftw_plan_guru64_dft')
135
      import
136
      integer(C_INT), value :: rank
137
      type(fftw_iodim64), dimension(*), intent(in) :: dims
138
      integer(C_INT), value :: howmany_rank
139
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
140
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
141
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
142
      integer(C_INT), value :: sign
143
      integer(C_INT), value :: flags
144
    end function fftw_plan_guru64_dft
145
    
146
    type(C_PTR) function fftw_plan_guru64_split_dft(rank,dims,howmany_rank,howmany_dims,ri,ii,ro,io,flags) &
147
                         bind(C, name='fftw_plan_guru64_split_dft')
148
      import
149
      integer(C_INT), value :: rank
150
      type(fftw_iodim64), dimension(*), intent(in) :: dims
151
      integer(C_INT), value :: howmany_rank
152
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
153
      real(C_DOUBLE), dimension(*), intent(out) :: ri
154
      real(C_DOUBLE), dimension(*), intent(out) :: ii
155
      real(C_DOUBLE), dimension(*), intent(out) :: ro
156
      real(C_DOUBLE), dimension(*), intent(out) :: io
157
      integer(C_INT), value :: flags
158
    end function fftw_plan_guru64_split_dft
159
    
160
    subroutine fftw_execute_dft(p,in,out) bind(C, name='fftw_execute_dft')
161
      import
162
      type(C_PTR), value :: p
163
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in
164
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
165
    end subroutine fftw_execute_dft
166
    
167
    subroutine fftw_execute_split_dft(p,ri,ii,ro,io) bind(C, name='fftw_execute_split_dft')
168
      import
169
      type(C_PTR), value :: p
170
      real(C_DOUBLE), dimension(*), intent(inout) :: ri
171
      real(C_DOUBLE), dimension(*), intent(inout) :: ii
172
      real(C_DOUBLE), dimension(*), intent(out) :: ro
173
      real(C_DOUBLE), dimension(*), intent(out) :: io
174
    end subroutine fftw_execute_split_dft
175
    
176
    type(C_PTR) function fftw_plan_many_dft_r2c(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
177
                         bind(C, name='fftw_plan_many_dft_r2c')
178
      import
179
      integer(C_INT), value :: rank
180
      integer(C_INT), dimension(*), intent(in) :: n
181
      integer(C_INT), value :: howmany
182
      real(C_DOUBLE), dimension(*), intent(out) :: in
183
      integer(C_INT), dimension(*), intent(in) :: inembed
184
      integer(C_INT), value :: istride
185
      integer(C_INT), value :: idist
186
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
187
      integer(C_INT), dimension(*), intent(in) :: onembed
188
      integer(C_INT), value :: ostride
189
      integer(C_INT), value :: odist
190
      integer(C_INT), value :: flags
191
    end function fftw_plan_many_dft_r2c
192
    
193
    type(C_PTR) function fftw_plan_dft_r2c(rank,n,in,out,flags) bind(C, name='fftw_plan_dft_r2c')
194
      import
195
      integer(C_INT), value :: rank
196
      integer(C_INT), dimension(*), intent(in) :: n
197
      real(C_DOUBLE), dimension(*), intent(out) :: in
198
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
199
      integer(C_INT), value :: flags
200
    end function fftw_plan_dft_r2c
201
    
202
    type(C_PTR) function fftw_plan_dft_r2c_1d(n,in,out,flags) bind(C, name='fftw_plan_dft_r2c_1d')
203
      import
204
      integer(C_INT), value :: n
205
      real(C_DOUBLE), dimension(*), intent(out) :: in
206
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
207
      integer(C_INT), value :: flags
208
    end function fftw_plan_dft_r2c_1d
209
    
210
    type(C_PTR) function fftw_plan_dft_r2c_2d(n0,n1,in,out,flags) bind(C, name='fftw_plan_dft_r2c_2d')
211
      import
212
      integer(C_INT), value :: n0
213
      integer(C_INT), value :: n1
214
      real(C_DOUBLE), dimension(*), intent(out) :: in
215
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
216
      integer(C_INT), value :: flags
217
    end function fftw_plan_dft_r2c_2d
218
    
219
    type(C_PTR) function fftw_plan_dft_r2c_3d(n0,n1,n2,in,out,flags) bind(C, name='fftw_plan_dft_r2c_3d')
220
      import
221
      integer(C_INT), value :: n0
222
      integer(C_INT), value :: n1
223
      integer(C_INT), value :: n2
224
      real(C_DOUBLE), dimension(*), intent(out) :: in
225
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
226
      integer(C_INT), value :: flags
227
    end function fftw_plan_dft_r2c_3d
228
    
229
    type(C_PTR) function fftw_plan_many_dft_c2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,flags) &
230
                         bind(C, name='fftw_plan_many_dft_c2r')
231
      import
232
      integer(C_INT), value :: rank
233
      integer(C_INT), dimension(*), intent(in) :: n
234
      integer(C_INT), value :: howmany
235
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
236
      integer(C_INT), dimension(*), intent(in) :: inembed
237
      integer(C_INT), value :: istride
238
      integer(C_INT), value :: idist
239
      real(C_DOUBLE), dimension(*), intent(out) :: out
240
      integer(C_INT), dimension(*), intent(in) :: onembed
241
      integer(C_INT), value :: ostride
242
      integer(C_INT), value :: odist
243
      integer(C_INT), value :: flags
244
    end function fftw_plan_many_dft_c2r
245
    
246
    type(C_PTR) function fftw_plan_dft_c2r(rank,n,in,out,flags) bind(C, name='fftw_plan_dft_c2r')
247
      import
248
      integer(C_INT), value :: rank
249
      integer(C_INT), dimension(*), intent(in) :: n
250
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
251
      real(C_DOUBLE), dimension(*), intent(out) :: out
252
      integer(C_INT), value :: flags
253
    end function fftw_plan_dft_c2r
254
    
255
    type(C_PTR) function fftw_plan_dft_c2r_1d(n,in,out,flags) bind(C, name='fftw_plan_dft_c2r_1d')
256
      import
257
      integer(C_INT), value :: n
258
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
259
      real(C_DOUBLE), dimension(*), intent(out) :: out
260
      integer(C_INT), value :: flags
261
    end function fftw_plan_dft_c2r_1d
262
    
263
    type(C_PTR) function fftw_plan_dft_c2r_2d(n0,n1,in,out,flags) bind(C, name='fftw_plan_dft_c2r_2d')
264
      import
265
      integer(C_INT), value :: n0
266
      integer(C_INT), value :: n1
267
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
268
      real(C_DOUBLE), dimension(*), intent(out) :: out
269
      integer(C_INT), value :: flags
270
    end function fftw_plan_dft_c2r_2d
271
    
272
    type(C_PTR) function fftw_plan_dft_c2r_3d(n0,n1,n2,in,out,flags) bind(C, name='fftw_plan_dft_c2r_3d')
273
      import
274
      integer(C_INT), value :: n0
275
      integer(C_INT), value :: n1
276
      integer(C_INT), value :: n2
277
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
278
      real(C_DOUBLE), dimension(*), intent(out) :: out
279
      integer(C_INT), value :: flags
280
    end function fftw_plan_dft_c2r_3d
281
    
282
    type(C_PTR) function fftw_plan_guru_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
283
                         bind(C, name='fftw_plan_guru_dft_r2c')
284
      import
285
      integer(C_INT), value :: rank
286
      type(fftw_iodim), dimension(*), intent(in) :: dims
287
      integer(C_INT), value :: howmany_rank
288
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
289
      real(C_DOUBLE), dimension(*), intent(out) :: in
290
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
291
      integer(C_INT), value :: flags
292
    end function fftw_plan_guru_dft_r2c
293
    
294
    type(C_PTR) function fftw_plan_guru_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
295
                         bind(C, name='fftw_plan_guru_dft_c2r')
296
      import
297
      integer(C_INT), value :: rank
298
      type(fftw_iodim), dimension(*), intent(in) :: dims
299
      integer(C_INT), value :: howmany_rank
300
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
301
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
302
      real(C_DOUBLE), dimension(*), intent(out) :: out
303
      integer(C_INT), value :: flags
304
    end function fftw_plan_guru_dft_c2r
305
    
306
    type(C_PTR) function fftw_plan_guru_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
307
                         bind(C, name='fftw_plan_guru_split_dft_r2c')
308
      import
309
      integer(C_INT), value :: rank
310
      type(fftw_iodim), dimension(*), intent(in) :: dims
311
      integer(C_INT), value :: howmany_rank
312
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
313
      real(C_DOUBLE), dimension(*), intent(out) :: in
314
      real(C_DOUBLE), dimension(*), intent(out) :: ro
315
      real(C_DOUBLE), dimension(*), intent(out) :: io
316
      integer(C_INT), value :: flags
317
    end function fftw_plan_guru_split_dft_r2c
318
    
319
    type(C_PTR) function fftw_plan_guru_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
320
                         bind(C, name='fftw_plan_guru_split_dft_c2r')
321
      import
322
      integer(C_INT), value :: rank
323
      type(fftw_iodim), dimension(*), intent(in) :: dims
324
      integer(C_INT), value :: howmany_rank
325
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
326
      real(C_DOUBLE), dimension(*), intent(out) :: ri
327
      real(C_DOUBLE), dimension(*), intent(out) :: ii
328
      real(C_DOUBLE), dimension(*), intent(out) :: out
329
      integer(C_INT), value :: flags
330
    end function fftw_plan_guru_split_dft_c2r
331
    
332
    type(C_PTR) function fftw_plan_guru64_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
333
                         bind(C, name='fftw_plan_guru64_dft_r2c')
334
      import
335
      integer(C_INT), value :: rank
336
      type(fftw_iodim64), dimension(*), intent(in) :: dims
337
      integer(C_INT), value :: howmany_rank
338
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
339
      real(C_DOUBLE), dimension(*), intent(out) :: in
340
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
341
      integer(C_INT), value :: flags
342
    end function fftw_plan_guru64_dft_r2c
343
    
344
    type(C_PTR) function fftw_plan_guru64_dft_c2r(rank,dims,howmany_rank,howmany_dims,in,out,flags) &
345
                         bind(C, name='fftw_plan_guru64_dft_c2r')
346
      import
347
      integer(C_INT), value :: rank
348
      type(fftw_iodim64), dimension(*), intent(in) :: dims
349
      integer(C_INT), value :: howmany_rank
350
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
351
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: in
352
      real(C_DOUBLE), dimension(*), intent(out) :: out
353
      integer(C_INT), value :: flags
354
    end function fftw_plan_guru64_dft_c2r
355
    
356
    type(C_PTR) function fftw_plan_guru64_split_dft_r2c(rank,dims,howmany_rank,howmany_dims,in,ro,io,flags) &
357
                         bind(C, name='fftw_plan_guru64_split_dft_r2c')
358
      import
359
      integer(C_INT), value :: rank
360
      type(fftw_iodim64), dimension(*), intent(in) :: dims
361
      integer(C_INT), value :: howmany_rank
362
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
363
      real(C_DOUBLE), dimension(*), intent(out) :: in
364
      real(C_DOUBLE), dimension(*), intent(out) :: ro
365
      real(C_DOUBLE), dimension(*), intent(out) :: io
366
      integer(C_INT), value :: flags
367
    end function fftw_plan_guru64_split_dft_r2c
368
    
369
    type(C_PTR) function fftw_plan_guru64_split_dft_c2r(rank,dims,howmany_rank,howmany_dims,ri,ii,out,flags) &
370
                         bind(C, name='fftw_plan_guru64_split_dft_c2r')
371
      import
372
      integer(C_INT), value :: rank
373
      type(fftw_iodim64), dimension(*), intent(in) :: dims
374
      integer(C_INT), value :: howmany_rank
375
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
376
      real(C_DOUBLE), dimension(*), intent(out) :: ri
377
      real(C_DOUBLE), dimension(*), intent(out) :: ii
378
      real(C_DOUBLE), dimension(*), intent(out) :: out
379
      integer(C_INT), value :: flags
380
    end function fftw_plan_guru64_split_dft_c2r
381
    
382
    subroutine fftw_execute_dft_r2c(p,in,out) bind(C, name='fftw_execute_dft_r2c')
383
      import
384
      type(C_PTR), value :: p
385
      real(C_DOUBLE), dimension(*), intent(inout) :: in
386
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(out) :: out
387
    end subroutine fftw_execute_dft_r2c
388
    
389
    subroutine fftw_execute_dft_c2r(p,in,out) bind(C, name='fftw_execute_dft_c2r')
390
      import
391
      type(C_PTR), value :: p
392
      complex(C_DOUBLE_COMPLEX), dimension(*), intent(inout) :: in
393
      real(C_DOUBLE), dimension(*), intent(out) :: out
394
    end subroutine fftw_execute_dft_c2r
395
    
396
    subroutine fftw_execute_split_dft_r2c(p,in,ro,io) bind(C, name='fftw_execute_split_dft_r2c')
397
      import
398
      type(C_PTR), value :: p
399
      real(C_DOUBLE), dimension(*), intent(inout) :: in
400
      real(C_DOUBLE), dimension(*), intent(out) :: ro
401
      real(C_DOUBLE), dimension(*), intent(out) :: io
402
    end subroutine fftw_execute_split_dft_r2c
403
    
404
    subroutine fftw_execute_split_dft_c2r(p,ri,ii,out) bind(C, name='fftw_execute_split_dft_c2r')
405
      import
406
      type(C_PTR), value :: p
407
      real(C_DOUBLE), dimension(*), intent(inout) :: ri
408
      real(C_DOUBLE), dimension(*), intent(inout) :: ii
409
      real(C_DOUBLE), dimension(*), intent(out) :: out
410
    end subroutine fftw_execute_split_dft_c2r
411
    
412
    type(C_PTR) function fftw_plan_many_r2r(rank,n,howmany,in,inembed,istride,idist,out,onembed,ostride,odist,kind,flags) &
413
                         bind(C, name='fftw_plan_many_r2r')
414
      import
415
      integer(C_INT), value :: rank
416
      integer(C_INT), dimension(*), intent(in) :: n
417
      integer(C_INT), value :: howmany
418
      real(C_DOUBLE), dimension(*), intent(out) :: in
419
      integer(C_INT), dimension(*), intent(in) :: inembed
420
      integer(C_INT), value :: istride
421
      integer(C_INT), value :: idist
422
      real(C_DOUBLE), dimension(*), intent(out) :: out
423
      integer(C_INT), dimension(*), intent(in) :: onembed
424
      integer(C_INT), value :: ostride
425
      integer(C_INT), value :: odist
426
      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
427
      integer(C_INT), value :: flags
428
    end function fftw_plan_many_r2r
429
    
430
    type(C_PTR) function fftw_plan_r2r(rank,n,in,out,kind,flags) bind(C, name='fftw_plan_r2r')
431
      import
432
      integer(C_INT), value :: rank
433
      integer(C_INT), dimension(*), intent(in) :: n
434
      real(C_DOUBLE), dimension(*), intent(out) :: in
435
      real(C_DOUBLE), dimension(*), intent(out) :: out
436
      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
437
      integer(C_INT), value :: flags
438
    end function fftw_plan_r2r
439
    
440
    type(C_PTR) function fftw_plan_r2r_1d(n,in,out,kind,flags) bind(C, name='fftw_plan_r2r_1d')
441
      import
442
      integer(C_INT), value :: n
443
      real(C_DOUBLE), dimension(*), intent(out) :: in
444
      real(C_DOUBLE), dimension(*), intent(out) :: out
445
      integer(C_FFTW_R2R_KIND), value :: kind
446
      integer(C_INT), value :: flags
447
    end function fftw_plan_r2r_1d
448
    
449
    type(C_PTR) function fftw_plan_r2r_2d(n0,n1,in,out,kind0,kind1,flags) bind(C, name='fftw_plan_r2r_2d')
450
      import
451
      integer(C_INT), value :: n0
452
      integer(C_INT), value :: n1
453
      real(C_DOUBLE), dimension(*), intent(out) :: in
454
      real(C_DOUBLE), dimension(*), intent(out) :: out
455
      integer(C_FFTW_R2R_KIND), value :: kind0
456
      integer(C_FFTW_R2R_KIND), value :: kind1
457
      integer(C_INT), value :: flags
458
    end function fftw_plan_r2r_2d
459
    
460
    type(C_PTR) function fftw_plan_r2r_3d(n0,n1,n2,in,out,kind0,kind1,kind2,flags) bind(C, name='fftw_plan_r2r_3d')
461
      import
462
      integer(C_INT), value :: n0
463
      integer(C_INT), value :: n1
464
      integer(C_INT), value :: n2
465
      real(C_DOUBLE), dimension(*), intent(out) :: in
466
      real(C_DOUBLE), dimension(*), intent(out) :: out
467
      integer(C_FFTW_R2R_KIND), value :: kind0
468
      integer(C_FFTW_R2R_KIND), value :: kind1
469
      integer(C_FFTW_R2R_KIND), value :: kind2
470
      integer(C_INT), value :: flags
471
    end function fftw_plan_r2r_3d
472
    
473
    type(C_PTR) function fftw_plan_guru_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
474
                         bind(C, name='fftw_plan_guru_r2r')
475
      import
476
      integer(C_INT), value :: rank
477
      type(fftw_iodim), dimension(*), intent(in) :: dims
478
      integer(C_INT), value :: howmany_rank
479
      type(fftw_iodim), dimension(*), intent(in) :: howmany_dims
480
      real(C_DOUBLE), dimension(*), intent(out) :: in
481
      real(C_DOUBLE), dimension(*), intent(out) :: out
482
      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
483
      integer(C_INT), value :: flags
484
    end function fftw_plan_guru_r2r
485
    
486
    type(C_PTR) function fftw_plan_guru64_r2r(rank,dims,howmany_rank,howmany_dims,in,out,kind,flags) &
487
                         bind(C, name='fftw_plan_guru64_r2r')
488
      import
489
      integer(C_INT), value :: rank
490
      type(fftw_iodim64), dimension(*), intent(in) :: dims
491
      integer(C_INT), value :: howmany_rank
492
      type(fftw_iodim64), dimension(*), intent(in) :: howmany_dims
493
      real(C_DOUBLE), dimension(*), intent(out) :: in
494
      real(C_DOUBLE), dimension(*), intent(out) :: out
495
      integer(C_FFTW_R2R_KIND), dimension(*), intent(in) :: kind
496
      integer(C_INT), value :: flags
497
    end function fftw_plan_guru64_r2r
498
    
499
    subroutine fftw_execute_r2r(p,in,out) bind(C, name='fftw_execute_r2r')
500
      import
501
      type(C_PTR), value :: p
502
      real(C_DOUBLE), dimension(*), intent(inout) :: in
503
      real(C_DOUBLE), dimension(*), intent(out) :: out
504
    end subroutine fftw_execute_r2r
505
    
506
    subroutine fftw_destroy_plan(p) bind(C, name='fftw_destroy_plan')
507
      import
508
      type(C_PTR), value :: p
509
    end subroutine fftw_destroy_plan
510
    
511
    subroutine fftw_forget_wisdom() bind(C, name='fftw_forget_wisdom')
512
      import
513
    end subroutine fftw_forget_wisdom
514
    
515
    subroutine fftw_cleanup() bind(C, name='fftw_cleanup')
516
      import
517
    end subroutine fftw_cleanup
518
    
519
    subroutine fftw_set_timelimit(t) bind(C, name='fftw_set_timelimit')
520
      import
521
      real(C_DOUBLE), value :: t
522
    end subroutine fftw_set_timelimit
523
    
524
    subroutine fftw_plan_with_nthreads(nthreads) bind(C, name='fftw_plan_with_nthreads')
525
      import
526
      integer(C_INT), value :: nthreads
527
    end subroutine fftw_plan_with_nthreads
528
    
529
    integer(C_INT) function fftw_init_threads() bind(C, name='fftw_init_threads')
530
      import
531
    end function fftw_init_threads
532
    
533
    subroutine fftw_cleanup_threads() bind(C, name='fftw_cleanup_threads')
534
      import
535
    end subroutine fftw_cleanup_threads
536
    
537
    subroutine fftw_make_planner_thread_safe() bind(C, name='fftw_make_planner_thread_safe')
538
      import
539
    end subroutine fftw_make_planner_thread_safe
540
    
541
    integer(C_INT) function fftw_export_wisdom_to_filename(filename) bind(C, name='fftw_export_wisdom_to_filename')
542
      import
543
      character(C_CHAR), dimension(*), intent(in) :: filename
544
    end function fftw_export_wisdom_to_filename
545
    
546
    subroutine fftw_export_wisdom_to_file(output_file) bind(C, name='fftw_export_wisdom_to_file')
547
      import
548
      type(C_PTR), value :: output_file
549
    end subroutine fftw_export_wisdom_to_file
550
    
551
    type(C_PTR) function fftw_export_wisdom_to_string() bind(C, name='fftw_export_wisdom_to_string')
552
      import
553
    end function fftw_export_wisdom_to_string
554
    
555
    subroutine fftw_export_wisdom(write_char,data) bind(C, name='fftw_export_wisdom')
556
      import
557
      type(C_FUNPTR), value :: write_char
558
      type(C_PTR), value :: data
559
    end subroutine fftw_export_wisdom
560
    
561
    integer(C_INT) function fftw_import_system_wisdom() bind(C, name='fftw_import_system_wisdom')
562
      import
563
    end function fftw_import_system_wisdom
564
    
565
    integer(C_INT) function fftw_import_wisdom_from_filename(filename) bind(C, name='fftw_import_wisdom_from_filename')
566
      import
567
      character(C_CHAR), dimension(*), intent(in) :: filename
568
    end function fftw_import_wisdom_from_filename
569
    
570
    integer(C_INT) function fftw_import_wisdom_from_file(input_file) bind(C, name='fftw_import_wisdom_from_file')
571
      import
572
      type(C_PTR), value :: input_file
573
    end function fftw_import_wisdom_from_file
574
    
575
    integer(C_INT) function fftw_import_wisdom_from_string(input_string) bind(C, name='fftw_import_wisdom_from_string')
576
      import
577
      character(C_CHAR), dimension(*), intent(in) :: input_string
578
    end function fftw_import_wisdom_from_string
579
    
580
    integer(C_INT) function fftw_import_wisdom(read_char,data) bind(C, name='fftw_import_wisdom')
581
      import
582
      type(C_FUNPTR), value :: read_char
583
      type(C_PTR), value :: data
584
    end function fftw_import_wisdom
585
    
586
    subroutine fftw_fprint_plan(p,output_file) bind(C, name='fftw_fprint_plan')
587
      import
588
      type(C_PTR), value :: p
589
      type(C_PTR), value :: output_file
590
    end subroutine fftw_fprint_plan
591
    
592
    subroutine fftw_print_plan(p) bind(C, name='fftw_print_plan')
593
      import
594
      type(C_PTR), value :: p
595
    end subroutine fftw_print_plan
596
    
597
    type(C_PTR) function fftw_sprint_plan(p) bind(C, name='fftw_sprint_plan')
598
      import
599
      type(C_PTR), value :: p
600
    end function fftw_sprint_plan
601
    
602
    type(C_PTR) function fftw_malloc(n) bind(C, name='fftw_malloc')
603
      import
604
      integer(C_SIZE_T), value :: n
605
    end function fftw_malloc
606
    
607
    type(C_PTR) function fftw_alloc_real(n) bind(C, name='fftw_alloc_real')
608
      import
609
      integer(C_SIZE_T), value :: n
610
    end function fftw_alloc_real
611
    
612
    type(C_PTR) function fftw_alloc_complex(n) bind(C, name='fftw_alloc_complex')
613
      import
614
      integer(C_SIZE_T), value :: n
615
    end function fftw_alloc_complex
616
    
617
    subroutine fftw_free(p) bind(C, name='fftw_free')
618
      import
619
      type(C_PTR), value :: p
620
    end subroutine fftw_free
621
    
622
    subroutine fftw_flops(p,add,mul,fmas) bind(C, name='fftw_flops')
623
      import
624
      type(C_PTR), value :: p
625
      real(C_DOUBLE), intent(out) :: add
626
      real(C_DOUBLE), intent(out) :: mul
627
      real(C_DOUBLE), intent(out) :: fmas
628
    end subroutine fftw_flops
629
    
630
    real(C_DOUBLE) function fftw_estimate_cost(p) bind(C, name='fftw_estimate_cost')
631
      import
632
      type(C_PTR), value :: p
633
    end function fftw_estimate_cost
634
    
635
    real(C_DOUBLE) function fftw_cost(p) bind(C, name='fftw_cost')
636
      import
637
      type(C_PTR), value :: p
638
    end function fftw_cost
639
    
640
    integer(C_INT) function fftw_alignment_of(p) bind(C, name='fftw_alignment_of')
641
      import
642
      real(C_DOUBLE), dimension(*), intent(out) :: p
643
    end function fftw_alignment_of
644
    
645
  end interface
646

    
647
  type, bind(C) :: fftwf_iodim
648
     integer(C_INT) n, is, os
649
  end type fftwf_iodim
650
  type, bind(C) :: fftwf_iodim64
651
     integer(C_INTPTR_T) n, is, os
652
  end type fftwf_iodim64
653

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