cannam@95: cannam@95:
cannam@95:cannam@95: Next: Planner Flags, cannam@95: Previous: Basic Interface, cannam@95: Up: Basic Interface cannam@95:
fftw_plan fftw_plan_dft_1d(int n0, cannam@95: fftw_complex *in, fftw_complex *out, cannam@95: int sign, unsigned flags); cannam@95: fftw_plan fftw_plan_dft_2d(int n0, int n1, cannam@95: fftw_complex *in, fftw_complex *out, cannam@95: int sign, unsigned flags); cannam@95: fftw_plan fftw_plan_dft_3d(int n0, int n1, int n2, cannam@95: fftw_complex *in, fftw_complex *out, cannam@95: int sign, unsigned flags); cannam@95: fftw_plan fftw_plan_dft(int rank, const int *n, cannam@95: fftw_complex *in, fftw_complex *out, cannam@95: int sign, unsigned flags); cannam@95:cannam@95:
cannam@95: Plan a complex input/output discrete Fourier transform (DFT) in zero or
cannam@95: more dimensions, returning an fftw_plan (see Using Plans).
cannam@95: 
cannam@95:    
Once you have created a plan for a certain transform type and cannam@95: parameters, then creating another plan of the same type and parameters, cannam@95: but for different arrays, is fast and shares constant data with the cannam@95: first plan (if it still exists). cannam@95: cannam@95:
The planner returns NULL if the plan cannot be created.  In the
cannam@95: standard FFTW distribution, the basic interface is guaranteed to return
cannam@95: a non-NULL plan.  A plan may be NULL, however, if you are
cannam@95: using a customized FFTW configuration supporting a restricted set of
cannam@95: transforms.
cannam@95: 
cannam@95: 
rank is the rank of the transform (it should be the size of the
cannam@95: array *n), and can be any non-negative integer.  (See Complex Multi-Dimensional DFTs, for the definition of “rank”.)  The
cannam@95: ‘_1d’, ‘_2d’, and ‘_3d’ planners correspond to a
cannam@95: rank of 1, 2, and 3, respectively.  The rank
cannam@95: may be zero, which is equivalent to a rank-1 transform of size 1, i.e. a
cannam@95: copy of one number from input to output.
cannam@95: 
cannam@95:      n0, n1, n2, or n[0..rank-1] (as appropriate
cannam@95: for each routine) specify the size of the transform dimensions.  They
cannam@95: can be any positive integer.
cannam@95: 
cannam@95:           n0 x n1; or n0 x n1 x n2; or
cannam@95: n[0] x n[1] x ... x n[rank-1]. 
cannam@95: See Multi-dimensional Array Format. 
cannam@95: in and out point to the input and output arrays of the
cannam@95: transform, which may be the same (yielding an in-place transform). 
cannam@95: These arrays are overwritten during planning, unless
cannam@95: FFTW_ESTIMATE is used in the flags.  (The arrays need not be
cannam@95: initialized, but they must be allocated.)
cannam@95: 
cannam@95:      If in == out, the transform is in-place and the input
cannam@95: array is overwritten. If in != out, the two arrays must
cannam@95: not overlap (but FFTW does not check for this condition).
cannam@95: 
cannam@95:      
sign is the sign of the exponent in the formula that defines the
cannam@95: Fourier transform.  It can be -1 (= FFTW_FORWARD) or
cannam@95: +1 (= FFTW_BACKWARD).
cannam@95: 
cannam@95:      flags is a bitwise OR (‘|’) of zero or more planner flags,
cannam@95: as defined in Planner Flags.
cannam@95: 
cannam@95: FFTW computes an unnormalized transform: computing a forward followed by cannam@95: a backward transform (or vice versa) will result in the original data cannam@95: multiplied by the size of the transform (the product of the dimensions). cannam@95: For more information, see What FFTW Really Computes. cannam@95: cannam@95: cannam@95: cannam@95: