fftw3: Advanced Real-data DFTs
4.4.2 Advanced Real-data DFTs
-----------------------------
fftw_plan fftw_plan_many_dft_r2c(int rank, const int *n, int howmany,
double *in, const int *inembed,
int istride, int idist,
fftw_complex *out, const int *onembed,
int ostride, int odist,
unsigned flags);
fftw_plan fftw_plan_many_dft_c2r(int rank, const int *n, int howmany,
fftw_complex *in, const int *inembed,
int istride, int idist,
double *out, const int *onembed,
int ostride, int odist,
unsigned flags);
Like 'fftw_plan_many_dft', these two functions add 'howmany',
'nembed', 'stride', and 'dist' parameters to the 'fftw_plan_dft_r2c' and
'fftw_plan_dft_c2r' functions, but otherwise behave the same as the
basic interface.
The interpretation of 'howmany', 'stride', and 'dist' are the same as
for 'fftw_plan_many_dft', above. Note that the 'stride' and 'dist' for
the real array are in units of 'double', and for the complex array are
in units of 'fftw_complex'.
If an 'nembed' parameter is 'NULL', it is interpreted as what it
would be in the basic interface, as described in Real-data DFT
Array Format. That is, for the complex array the size is assumed to
be the same as 'n', but with the last dimension cut roughly in half.
For the real array, the size is assumed to be 'n' if the transform is
out-of-place, or 'n' with the last dimension "padded" if the transform
is in-place.
If an 'nembed' parameter is non-'NULL', it is interpreted as the
physical size of the corresponding array, in row-major order, just as
for 'fftw_plan_many_dft'. In this case, each dimension of 'nembed'
should be '>=' what it would be in the basic interface (e.g. the halved
or padded 'n').
Arrays 'n', 'inembed', and 'onembed' are not used after this function
returns. You can safely free or reuse them.