annotate src/fftw-3.3.5/api/f77funcs.h @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 2cd0e3b3e1fd
children
rev   line source
Chris@42 1 /*
Chris@42 2 * Copyright (c) 2003, 2007-14 Matteo Frigo
Chris@42 3 * Copyright (c) 2003, 2007-14 Massachusetts Institute of Technology
Chris@42 4 *
Chris@42 5 * This program is free software; you can redistribute it and/or modify
Chris@42 6 * it under the terms of the GNU General Public License as published by
Chris@42 7 * the Free Software Foundation; either version 2 of the License, or
Chris@42 8 * (at your option) any later version.
Chris@42 9 *
Chris@42 10 * This program is distributed in the hope that it will be useful,
Chris@42 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@42 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@42 13 * GNU General Public License for more details.
Chris@42 14 *
Chris@42 15 * You should have received a copy of the GNU General Public License
Chris@42 16 * along with this program; if not, write to the Free Software
Chris@42 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Chris@42 18 *
Chris@42 19 */
Chris@42 20
Chris@42 21 /* Functions in the FFTW Fortran API, mangled according to the
Chris@42 22 F77(...) macro. This file is designed to be #included by
Chris@42 23 f77api.c, possibly multiple times in order to support multiple
Chris@42 24 compiler manglings (via redefinition of F77). */
Chris@42 25
Chris@42 26 FFTW_VOIDFUNC F77(execute, EXECUTE)(X(plan) * const p)
Chris@42 27 {
Chris@42 28 plan *pln = (*p)->pln;
Chris@42 29 pln->adt->solve(pln, (*p)->prb);
Chris@42 30 }
Chris@42 31
Chris@42 32 FFTW_VOIDFUNC F77(destroy_plan, DESTROY_PLAN)(X(plan) *p)
Chris@42 33 {
Chris@42 34 X(destroy_plan)(*p);
Chris@42 35 }
Chris@42 36
Chris@42 37 FFTW_VOIDFUNC F77(cleanup, CLEANUP)(void)
Chris@42 38 {
Chris@42 39 X(cleanup)();
Chris@42 40 }
Chris@42 41
Chris@42 42 FFTW_VOIDFUNC F77(forget_wisdom, FORGET_WISDOM)(void)
Chris@42 43 {
Chris@42 44 X(forget_wisdom)();
Chris@42 45 }
Chris@42 46
Chris@42 47 FFTW_VOIDFUNC F77(export_wisdom, EXPORT_WISDOM)(void (*f77_write_char)(char *, void *),
Chris@42 48 void *data)
Chris@42 49 {
Chris@42 50 write_char_data ad;
Chris@42 51 ad.f77_write_char = f77_write_char;
Chris@42 52 ad.data = data;
Chris@42 53 X(export_wisdom)(write_char, (void *) &ad);
Chris@42 54 }
Chris@42 55
Chris@42 56 FFTW_VOIDFUNC F77(import_wisdom, IMPORT_WISDOM)(int *isuccess,
Chris@42 57 void (*f77_read_char)(int *, void *),
Chris@42 58 void *data)
Chris@42 59 {
Chris@42 60 read_char_data ed;
Chris@42 61 ed.f77_read_char = f77_read_char;
Chris@42 62 ed.data = data;
Chris@42 63 *isuccess = X(import_wisdom)(read_char, (void *) &ed);
Chris@42 64 }
Chris@42 65
Chris@42 66 FFTW_VOIDFUNC F77(import_system_wisdom, IMPORT_SYSTEM_WISDOM)(int *isuccess)
Chris@42 67 {
Chris@42 68 *isuccess = X(import_system_wisdom)();
Chris@42 69 }
Chris@42 70
Chris@42 71 FFTW_VOIDFUNC F77(print_plan, PRINT_PLAN)(X(plan) * const p)
Chris@42 72 {
Chris@42 73 X(print_plan)(*p);
Chris@42 74 fflush(stdout);
Chris@42 75 }
Chris@42 76
Chris@42 77 FFTW_VOIDFUNC F77(flops,FLOPS)(X(plan) *p, double *add, double *mul, double *fma)
Chris@42 78 {
Chris@42 79 X(flops)(*p, add, mul, fma);
Chris@42 80 }
Chris@42 81
Chris@42 82 FFTW_VOIDFUNC F77(estimate_cost,ESTIMATE_COST)(double *cost, X(plan) * const p)
Chris@42 83 {
Chris@42 84 *cost = X(estimate_cost)(*p);
Chris@42 85 }
Chris@42 86
Chris@42 87 FFTW_VOIDFUNC F77(cost,COST)(double *cost, X(plan) * const p)
Chris@42 88 {
Chris@42 89 *cost = X(cost)(*p);
Chris@42 90 }
Chris@42 91
Chris@42 92 FFTW_VOIDFUNC F77(set_timelimit,SET_TIMELIMIT)(double *t)
Chris@42 93 {
Chris@42 94 X(set_timelimit)(*t);
Chris@42 95 }
Chris@42 96
Chris@42 97 /******************************** DFT ***********************************/
Chris@42 98
Chris@42 99 FFTW_VOIDFUNC F77(plan_dft, PLAN_DFT)(X(plan) *p, int *rank, const int *n,
Chris@42 100 C *in, C *out, int *sign, int *flags)
Chris@42 101 {
Chris@42 102 int *nrev = reverse_n(*rank, n);
Chris@42 103 *p = X(plan_dft)(*rank, nrev, in, out, *sign, *flags);
Chris@42 104 X(ifree0)(nrev);
Chris@42 105 }
Chris@42 106
Chris@42 107 FFTW_VOIDFUNC F77(plan_dft_1d, PLAN_DFT_1D)(X(plan) *p, int *n, C *in, C *out,
Chris@42 108 int *sign, int *flags)
Chris@42 109 {
Chris@42 110 *p = X(plan_dft_1d)(*n, in, out, *sign, *flags);
Chris@42 111 }
Chris@42 112
Chris@42 113 FFTW_VOIDFUNC F77(plan_dft_2d, PLAN_DFT_2D)(X(plan) *p, int *nx, int *ny,
Chris@42 114 C *in, C *out, int *sign, int *flags)
Chris@42 115 {
Chris@42 116 *p = X(plan_dft_2d)(*ny, *nx, in, out, *sign, *flags);
Chris@42 117 }
Chris@42 118
Chris@42 119 FFTW_VOIDFUNC F77(plan_dft_3d, PLAN_DFT_3D)(X(plan) *p, int *nx, int *ny, int *nz,
Chris@42 120 C *in, C *out,
Chris@42 121 int *sign, int *flags)
Chris@42 122 {
Chris@42 123 *p = X(plan_dft_3d)(*nz, *ny, *nx, in, out, *sign, *flags);
Chris@42 124 }
Chris@42 125
Chris@42 126 FFTW_VOIDFUNC F77(plan_many_dft, PLAN_MANY_DFT)(X(plan) *p, int *rank, const int *n,
Chris@42 127 int *howmany,
Chris@42 128 C *in, const int *inembed,
Chris@42 129 int *istride, int *idist,
Chris@42 130 C *out, const int *onembed,
Chris@42 131 int *ostride, int *odist,
Chris@42 132 int *sign, int *flags)
Chris@42 133 {
Chris@42 134 int *nrev = reverse_n(*rank, n);
Chris@42 135 int *inembedrev = reverse_n(*rank, inembed);
Chris@42 136 int *onembedrev = reverse_n(*rank, onembed);
Chris@42 137 *p = X(plan_many_dft)(*rank, nrev, *howmany,
Chris@42 138 in, inembedrev, *istride, *idist,
Chris@42 139 out, onembedrev, *ostride, *odist,
Chris@42 140 *sign, *flags);
Chris@42 141 X(ifree0)(onembedrev);
Chris@42 142 X(ifree0)(inembedrev);
Chris@42 143 X(ifree0)(nrev);
Chris@42 144 }
Chris@42 145
Chris@42 146 FFTW_VOIDFUNC F77(plan_guru_dft, PLAN_GURU_DFT)(X(plan) *p, int *rank, const int *n,
Chris@42 147 const int *is, const int *os,
Chris@42 148 int *howmany_rank, const int *h_n,
Chris@42 149 const int *h_is, const int *h_os,
Chris@42 150 C *in, C *out, int *sign, int *flags)
Chris@42 151 {
Chris@42 152 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 153 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 154 *p = X(plan_guru_dft)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 155 in, out, *sign, *flags);
Chris@42 156 X(ifree0)(howmany_dims);
Chris@42 157 X(ifree0)(dims);
Chris@42 158 }
Chris@42 159
Chris@42 160 FFTW_VOIDFUNC F77(plan_guru_split_dft, PLAN_GURU_SPLIT_DFT)(X(plan) *p, int *rank, const int *n,
Chris@42 161 const int *is, const int *os,
Chris@42 162 int *howmany_rank, const int *h_n,
Chris@42 163 const int *h_is, const int *h_os,
Chris@42 164 R *ri, R *ii, R *ro, R *io, int *flags)
Chris@42 165 {
Chris@42 166 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 167 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 168 *p = X(plan_guru_split_dft)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 169 ri, ii, ro, io, *flags);
Chris@42 170 X(ifree0)(howmany_dims);
Chris@42 171 X(ifree0)(dims);
Chris@42 172 }
Chris@42 173
Chris@42 174 FFTW_VOIDFUNC F77(execute_dft, EXECUTE_DFT)(X(plan) * const p, C *in, C *out)
Chris@42 175 {
Chris@42 176 plan_dft *pln = (plan_dft *) (*p)->pln;
Chris@42 177 if ((*p)->sign == FFT_SIGN)
Chris@42 178 pln->apply((plan *) pln, in[0], in[0]+1, out[0], out[0]+1);
Chris@42 179 else
Chris@42 180 pln->apply((plan *) pln, in[0]+1, in[0], out[0]+1, out[0]);
Chris@42 181 }
Chris@42 182
Chris@42 183 FFTW_VOIDFUNC F77(execute_split_dft, EXECUTE_SPLIT_DFT)(X(plan) * const p,
Chris@42 184 R *ri, R *ii, R *ro, R *io)
Chris@42 185 {
Chris@42 186 plan_dft *pln = (plan_dft *) (*p)->pln;
Chris@42 187 pln->apply((plan *) pln, ri, ii, ro, io);
Chris@42 188 }
Chris@42 189
Chris@42 190 /****************************** DFT r2c *********************************/
Chris@42 191
Chris@42 192 FFTW_VOIDFUNC F77(plan_dft_r2c, PLAN_DFT_R2C)(X(plan) *p, int *rank, const int *n,
Chris@42 193 R *in, C *out, int *flags)
Chris@42 194 {
Chris@42 195 int *nrev = reverse_n(*rank, n);
Chris@42 196 *p = X(plan_dft_r2c)(*rank, nrev, in, out, *flags);
Chris@42 197 X(ifree0)(nrev);
Chris@42 198 }
Chris@42 199
Chris@42 200 FFTW_VOIDFUNC F77(plan_dft_r2c_1d, PLAN_DFT_R2C_1D)(X(plan) *p, int *n, R *in, C *out,
Chris@42 201 int *flags)
Chris@42 202 {
Chris@42 203 *p = X(plan_dft_r2c_1d)(*n, in, out, *flags);
Chris@42 204 }
Chris@42 205
Chris@42 206 FFTW_VOIDFUNC F77(plan_dft_r2c_2d, PLAN_DFT_R2C_2D)(X(plan) *p, int *nx, int *ny,
Chris@42 207 R *in, C *out, int *flags)
Chris@42 208 {
Chris@42 209 *p = X(plan_dft_r2c_2d)(*ny, *nx, in, out, *flags);
Chris@42 210 }
Chris@42 211
Chris@42 212 FFTW_VOIDFUNC F77(plan_dft_r2c_3d, PLAN_DFT_R2C_3D)(X(plan) *p,
Chris@42 213 int *nx, int *ny, int *nz,
Chris@42 214 R *in, C *out,
Chris@42 215 int *flags)
Chris@42 216 {
Chris@42 217 *p = X(plan_dft_r2c_3d)(*nz, *ny, *nx, in, out, *flags);
Chris@42 218 }
Chris@42 219
Chris@42 220 FFTW_VOIDFUNC F77(plan_many_dft_r2c, PLAN_MANY_DFT_R2C)(
Chris@42 221 X(plan) *p, int *rank, const int *n,
Chris@42 222 int *howmany,
Chris@42 223 R *in, const int *inembed, int *istride, int *idist,
Chris@42 224 C *out, const int *onembed, int *ostride, int *odist,
Chris@42 225 int *flags)
Chris@42 226 {
Chris@42 227 int *nrev = reverse_n(*rank, n);
Chris@42 228 int *inembedrev = reverse_n(*rank, inembed);
Chris@42 229 int *onembedrev = reverse_n(*rank, onembed);
Chris@42 230 *p = X(plan_many_dft_r2c)(*rank, nrev, *howmany,
Chris@42 231 in, inembedrev, *istride, *idist,
Chris@42 232 out, onembedrev, *ostride, *odist,
Chris@42 233 *flags);
Chris@42 234 X(ifree0)(onembedrev);
Chris@42 235 X(ifree0)(inembedrev);
Chris@42 236 X(ifree0)(nrev);
Chris@42 237 }
Chris@42 238
Chris@42 239 FFTW_VOIDFUNC F77(plan_guru_dft_r2c, PLAN_GURU_DFT_R2C)(
Chris@42 240 X(plan) *p, int *rank, const int *n,
Chris@42 241 const int *is, const int *os,
Chris@42 242 int *howmany_rank, const int *h_n,
Chris@42 243 const int *h_is, const int *h_os,
Chris@42 244 R *in, C *out, int *flags)
Chris@42 245 {
Chris@42 246 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 247 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 248 *p = X(plan_guru_dft_r2c)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 249 in, out, *flags);
Chris@42 250 X(ifree0)(howmany_dims);
Chris@42 251 X(ifree0)(dims);
Chris@42 252 }
Chris@42 253
Chris@42 254 FFTW_VOIDFUNC F77(plan_guru_split_dft_r2c, PLAN_GURU_SPLIT_DFT_R2C)(
Chris@42 255 X(plan) *p, int *rank, const int *n,
Chris@42 256 const int *is, const int *os,
Chris@42 257 int *howmany_rank, const int *h_n,
Chris@42 258 const int *h_is, const int *h_os,
Chris@42 259 R *in, R *ro, R *io, int *flags)
Chris@42 260 {
Chris@42 261 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 262 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 263 *p = X(plan_guru_split_dft_r2c)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 264 in, ro, io, *flags);
Chris@42 265 X(ifree0)(howmany_dims);
Chris@42 266 X(ifree0)(dims);
Chris@42 267 }
Chris@42 268
Chris@42 269 FFTW_VOIDFUNC F77(execute_dft_r2c, EXECUTE_DFT_R2C)(X(plan) * const p, R *in, C *out)
Chris@42 270 {
Chris@42 271 plan_rdft2 *pln = (plan_rdft2 *) (*p)->pln;
Chris@42 272 problem_rdft2 *prb = (problem_rdft2 *) (*p)->prb;
Chris@42 273 pln->apply((plan *) pln, in, in + (prb->r1 - prb->r0), out[0], out[0]+1);
Chris@42 274 }
Chris@42 275
Chris@42 276 FFTW_VOIDFUNC F77(execute_split_dft_r2c, EXECUTE_SPLIT_DFT_R2C)(X(plan) * const p,
Chris@42 277 R *in, R *ro, R *io)
Chris@42 278 {
Chris@42 279 plan_rdft2 *pln = (plan_rdft2 *) (*p)->pln;
Chris@42 280 problem_rdft2 *prb = (problem_rdft2 *) (*p)->prb;
Chris@42 281 pln->apply((plan *) pln, in, in + (prb->r1 - prb->r0), ro, io);
Chris@42 282 }
Chris@42 283
Chris@42 284 /****************************** DFT c2r *********************************/
Chris@42 285
Chris@42 286 FFTW_VOIDFUNC F77(plan_dft_c2r, PLAN_DFT_C2R)(X(plan) *p, int *rank, const int *n,
Chris@42 287 C *in, R *out, int *flags)
Chris@42 288 {
Chris@42 289 int *nrev = reverse_n(*rank, n);
Chris@42 290 *p = X(plan_dft_c2r)(*rank, nrev, in, out, *flags);
Chris@42 291 X(ifree0)(nrev);
Chris@42 292 }
Chris@42 293
Chris@42 294 FFTW_VOIDFUNC F77(plan_dft_c2r_1d, PLAN_DFT_C2R_1D)(X(plan) *p, int *n, C *in, R *out,
Chris@42 295 int *flags)
Chris@42 296 {
Chris@42 297 *p = X(plan_dft_c2r_1d)(*n, in, out, *flags);
Chris@42 298 }
Chris@42 299
Chris@42 300 FFTW_VOIDFUNC F77(plan_dft_c2r_2d, PLAN_DFT_C2R_2D)(X(plan) *p, int *nx, int *ny,
Chris@42 301 C *in, R *out, int *flags)
Chris@42 302 {
Chris@42 303 *p = X(plan_dft_c2r_2d)(*ny, *nx, in, out, *flags);
Chris@42 304 }
Chris@42 305
Chris@42 306 FFTW_VOIDFUNC F77(plan_dft_c2r_3d, PLAN_DFT_C2R_3D)(X(plan) *p,
Chris@42 307 int *nx, int *ny, int *nz,
Chris@42 308 C *in, R *out,
Chris@42 309 int *flags)
Chris@42 310 {
Chris@42 311 *p = X(plan_dft_c2r_3d)(*nz, *ny, *nx, in, out, *flags);
Chris@42 312 }
Chris@42 313
Chris@42 314 FFTW_VOIDFUNC F77(plan_many_dft_c2r, PLAN_MANY_DFT_C2R)(
Chris@42 315 X(plan) *p, int *rank, const int *n,
Chris@42 316 int *howmany,
Chris@42 317 C *in, const int *inembed, int *istride, int *idist,
Chris@42 318 R *out, const int *onembed, int *ostride, int *odist,
Chris@42 319 int *flags)
Chris@42 320 {
Chris@42 321 int *nrev = reverse_n(*rank, n);
Chris@42 322 int *inembedrev = reverse_n(*rank, inembed);
Chris@42 323 int *onembedrev = reverse_n(*rank, onembed);
Chris@42 324 *p = X(plan_many_dft_c2r)(*rank, nrev, *howmany,
Chris@42 325 in, inembedrev, *istride, *idist,
Chris@42 326 out, onembedrev, *ostride, *odist,
Chris@42 327 *flags);
Chris@42 328 X(ifree0)(onembedrev);
Chris@42 329 X(ifree0)(inembedrev);
Chris@42 330 X(ifree0)(nrev);
Chris@42 331 }
Chris@42 332
Chris@42 333 FFTW_VOIDFUNC F77(plan_guru_dft_c2r, PLAN_GURU_DFT_C2R)(
Chris@42 334 X(plan) *p, int *rank, const int *n,
Chris@42 335 const int *is, const int *os,
Chris@42 336 int *howmany_rank, const int *h_n,
Chris@42 337 const int *h_is, const int *h_os,
Chris@42 338 C *in, R *out, int *flags)
Chris@42 339 {
Chris@42 340 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 341 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 342 *p = X(plan_guru_dft_c2r)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 343 in, out, *flags);
Chris@42 344 X(ifree0)(howmany_dims);
Chris@42 345 X(ifree0)(dims);
Chris@42 346 }
Chris@42 347
Chris@42 348 FFTW_VOIDFUNC F77(plan_guru_split_dft_c2r, PLAN_GURU_SPLIT_DFT_C2R)(
Chris@42 349 X(plan) *p, int *rank, const int *n,
Chris@42 350 const int *is, const int *os,
Chris@42 351 int *howmany_rank, const int *h_n,
Chris@42 352 const int *h_is, const int *h_os,
Chris@42 353 R *ri, R *ii, R *out, int *flags)
Chris@42 354 {
Chris@42 355 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 356 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 357 *p = X(plan_guru_split_dft_c2r)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 358 ri, ii, out, *flags);
Chris@42 359 X(ifree0)(howmany_dims);
Chris@42 360 X(ifree0)(dims);
Chris@42 361 }
Chris@42 362
Chris@42 363 FFTW_VOIDFUNC F77(execute_dft_c2r, EXECUTE_DFT_C2R)(X(plan) * const p, C *in, R *out)
Chris@42 364 {
Chris@42 365 plan_rdft2 *pln = (plan_rdft2 *) (*p)->pln;
Chris@42 366 problem_rdft2 *prb = (problem_rdft2 *) (*p)->prb;
Chris@42 367 pln->apply((plan *) pln, out, out + (prb->r1 - prb->r0), in[0], in[0]+1);
Chris@42 368 }
Chris@42 369
Chris@42 370 FFTW_VOIDFUNC F77(execute_split_dft_c2r, EXECUTE_SPLIT_DFT_C2R)(X(plan) * const p,
Chris@42 371 R *ri, R *ii, R *out)
Chris@42 372 {
Chris@42 373 plan_rdft2 *pln = (plan_rdft2 *) (*p)->pln;
Chris@42 374 problem_rdft2 *prb = (problem_rdft2 *) (*p)->prb;
Chris@42 375 pln->apply((plan *) pln, out, out + (prb->r1 - prb->r0), ri, ii);
Chris@42 376 }
Chris@42 377
Chris@42 378 /****************************** r2r *********************************/
Chris@42 379
Chris@42 380 FFTW_VOIDFUNC F77(plan_r2r, PLAN_R2R)(X(plan) *p, int *rank, const int *n,
Chris@42 381 R *in, R *out,
Chris@42 382 int *kind, int *flags)
Chris@42 383 {
Chris@42 384 int *nrev = reverse_n(*rank, n);
Chris@42 385 X(r2r_kind) *k = ints2kinds(*rank, kind);
Chris@42 386 *p = X(plan_r2r)(*rank, nrev, in, out, k, *flags);
Chris@42 387 X(ifree0)(k);
Chris@42 388 X(ifree0)(nrev);
Chris@42 389 }
Chris@42 390
Chris@42 391 FFTW_VOIDFUNC F77(plan_r2r_1d, PLAN_R2R_1D)(X(plan) *p, int *n, R *in, R *out,
Chris@42 392 int *kind, int *flags)
Chris@42 393 {
Chris@42 394 *p = X(plan_r2r_1d)(*n, in, out, (X(r2r_kind)) *kind, *flags);
Chris@42 395 }
Chris@42 396
Chris@42 397 FFTW_VOIDFUNC F77(plan_r2r_2d, PLAN_R2R_2D)(X(plan) *p, int *nx, int *ny,
Chris@42 398 R *in, R *out,
Chris@42 399 int *kindx, int *kindy, int *flags)
Chris@42 400 {
Chris@42 401 *p = X(plan_r2r_2d)(*ny, *nx, in, out,
Chris@42 402 (X(r2r_kind)) *kindy, (X(r2r_kind)) *kindx, *flags);
Chris@42 403 }
Chris@42 404
Chris@42 405 FFTW_VOIDFUNC F77(plan_r2r_3d, PLAN_R2R_3D)(X(plan) *p,
Chris@42 406 int *nx, int *ny, int *nz,
Chris@42 407 R *in, R *out,
Chris@42 408 int *kindx, int *kindy, int *kindz,
Chris@42 409 int *flags)
Chris@42 410 {
Chris@42 411 *p = X(plan_r2r_3d)(*nz, *ny, *nx, in, out,
Chris@42 412 (X(r2r_kind)) *kindz, (X(r2r_kind)) *kindy,
Chris@42 413 (X(r2r_kind)) *kindx, *flags);
Chris@42 414 }
Chris@42 415
Chris@42 416 FFTW_VOIDFUNC F77(plan_many_r2r, PLAN_MANY_R2R)(
Chris@42 417 X(plan) *p, int *rank, const int *n,
Chris@42 418 int *howmany,
Chris@42 419 R *in, const int *inembed, int *istride, int *idist,
Chris@42 420 R *out, const int *onembed, int *ostride, int *odist,
Chris@42 421 int *kind, int *flags)
Chris@42 422 {
Chris@42 423 int *nrev = reverse_n(*rank, n);
Chris@42 424 int *inembedrev = reverse_n(*rank, inembed);
Chris@42 425 int *onembedrev = reverse_n(*rank, onembed);
Chris@42 426 X(r2r_kind) *k = ints2kinds(*rank, kind);
Chris@42 427 *p = X(plan_many_r2r)(*rank, nrev, *howmany,
Chris@42 428 in, inembedrev, *istride, *idist,
Chris@42 429 out, onembedrev, *ostride, *odist,
Chris@42 430 k, *flags);
Chris@42 431 X(ifree0)(k);
Chris@42 432 X(ifree0)(onembedrev);
Chris@42 433 X(ifree0)(inembedrev);
Chris@42 434 X(ifree0)(nrev);
Chris@42 435 }
Chris@42 436
Chris@42 437 FFTW_VOIDFUNC F77(plan_guru_r2r, PLAN_GURU_R2R)(
Chris@42 438 X(plan) *p, int *rank, const int *n,
Chris@42 439 const int *is, const int *os,
Chris@42 440 int *howmany_rank, const int *h_n,
Chris@42 441 const int *h_is, const int *h_os,
Chris@42 442 R *in, R *out, int *kind, int *flags)
Chris@42 443 {
Chris@42 444 X(iodim) *dims = make_dims(*rank, n, is, os);
Chris@42 445 X(iodim) *howmany_dims = make_dims(*howmany_rank, h_n, h_is, h_os);
Chris@42 446 X(r2r_kind) *k = ints2kinds(*rank, kind);
Chris@42 447 *p = X(plan_guru_r2r)(*rank, dims, *howmany_rank, howmany_dims,
Chris@42 448 in, out, k, *flags);
Chris@42 449 X(ifree0)(k);
Chris@42 450 X(ifree0)(howmany_dims);
Chris@42 451 X(ifree0)(dims);
Chris@42 452 }
Chris@42 453
Chris@42 454 FFTW_VOIDFUNC F77(execute_r2r, EXECUTE_R2R)(X(plan) * const p, R *in, R *out)
Chris@42 455 {
Chris@42 456 plan_rdft *pln = (plan_rdft *) (*p)->pln;
Chris@42 457 pln->apply((plan *) pln, in, out);
Chris@42 458 }