cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: FFTW 3.3.8: Guru Real-data DFTs cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: cannam@167:
cannam@167:

cannam@167: Next: , Previous: , Up: Guru Interface   [Contents][Index]

cannam@167:
cannam@167:
cannam@167: cannam@167:

4.5.4 Guru Real-data DFTs

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

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

cannam@167:

The last dimension of dims is interpreted specially: cannam@167: that dimension of the real array has size dims[rank-1].n, but cannam@167: that dimension of the complex array has size dims[rank-1].n/2+1 cannam@167: (division rounded down). The strides, on the other hand, are taken to cannam@167: be exactly as specified. It is up to the user to specify the strides cannam@167: appropriately for the peculiar dimensions of the data, and we do not cannam@167: guarantee that the planner will succeed (return non-NULL) for cannam@167: any dimensions other than those described in Real-data DFT Array Format and generalized in Advanced Real-data DFTs. (That is, cannam@167: for an in-place transform, each individual dimension should be able to cannam@167: operate in place.) cannam@167: cannam@167:

cannam@167: cannam@167:

in and out point to the input and output arrays for r2c cannam@167: and c2r transforms, respectively. For split arrays, ri and cannam@167: ii point to the real and imaginary input arrays for a c2r cannam@167: transform, and ro and io point to the real and imaginary cannam@167: output arrays for an r2c transform. in and ro or cannam@167: ri and out may be the same, indicating an in-place cannam@167: transform. (In-place transforms where in and io or cannam@167: ii and out are the same are not currently supported.) cannam@167:

cannam@167: cannam@167:

flags is a bitwise OR (‘|’) of zero or more planner flags, cannam@167: as defined in Planner Flags. cannam@167:

cannam@167:

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

cannam@167:
cannam@167:
cannam@167:

cannam@167: Next: , Previous: , Up: Guru Interface   [Contents][Index]

cannam@167:
cannam@167: cannam@167: cannam@167: cannam@167: cannam@167: