d@0: d@0: d@0: Guru Real-data DFTs - FFTW 3.2.1 d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0: d@0:
d@0:

d@0: d@0: d@0: Next: , d@0: Previous: Guru Complex DFTs, d@0: Up: Guru Interface d@0:


d@0:
d@0: d@0:

4.5.4 Guru Real-data DFTs

d@0: d@0:
     fftw_plan fftw_plan_guru_dft_r2c(
d@0:           int rank, const fftw_iodim *dims,
d@0:           int howmany_rank, const fftw_iodim *howmany_dims,
d@0:           double *in, fftw_complex *out,
d@0:           unsigned flags);
d@0:      
d@0:      fftw_plan fftw_plan_guru_split_dft_r2c(
d@0:           int rank, const fftw_iodim *dims,
d@0:           int howmany_rank, const fftw_iodim *howmany_dims,
d@0:           double *in, double *ro, double *io,
d@0:           unsigned flags);
d@0:      
d@0:      fftw_plan fftw_plan_guru_dft_c2r(
d@0:           int rank, const fftw_iodim *dims,
d@0:           int howmany_rank, const fftw_iodim *howmany_dims,
d@0:           fftw_complex *in, double *out,
d@0:           unsigned flags);
d@0:      
d@0:      fftw_plan fftw_plan_guru_split_dft_c2r(
d@0:           int rank, const fftw_iodim *dims,
d@0:           int howmany_rank, const fftw_iodim *howmany_dims,
d@0:           double *ri, double *ii, double *out,
d@0:           unsigned flags);
d@0: 
d@0:

d@0: Plan a real-input (r2c) or real-output (c2r), multi-dimensional DFT with d@0: transform dimensions given by (rank, dims) over a d@0: multi-dimensional vector (loop) of dimensions (howmany_rank, d@0: howmany_dims). dims and howmany_dims should point d@0: to fftw_iodim arrays of length rank and d@0: howmany_rank, respectively. As for the basic and advanced d@0: interfaces, an r2c transform is FFTW_FORWARD and a c2r transform d@0: is FFTW_BACKWARD. d@0: d@0:

The last dimension of dims is interpreted specially: d@0: that dimension of the real array has size dims[rank-1].n, but d@0: that dimension of the complex array has size dims[rank-1].n/2+1 d@0: (division rounded down). The strides, on the other hand, are taken to d@0: be exactly as specified. It is up to the user to specify the strides d@0: appropriately for the peculiar dimensions of the data, and we do not d@0: guarantee that the planner will succeed (return non-NULL) for d@0: any dimensions other than those described in Real-data DFT Array Format and generalized in Advanced Real-data DFTs. (That is, d@0: for an in-place transform, each individual dimension should be able to d@0: operate in place.) d@0: d@0: in and out point to the input and output arrays for r2c d@0: and c2r transforms, respectively. For split arrays, ri and d@0: ii point to the real and imaginary input arrays for a c2r d@0: transform, and ro and io point to the real and imaginary d@0: output arrays for an r2c transform. in and ro or d@0: ri and out may be the same, indicating an in-place d@0: transform. (In-place transforms where in and io or d@0: ii and out are the same are not currently supported.) d@0: d@0:

flags is a bitwise OR (`|') of zero or more planner flags, d@0: as defined in Planner Flags. d@0: d@0:

In-place transforms of rank greater than 1 are currently only d@0: supported for interleaved arrays. For split arrays, the planner will d@0: return NULL. d@0: d@0: d@0: d@0: d@0: