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.