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