cannam@95: cannam@95:
cannam@95:cannam@95: Next: Real-to-Real Transform Kinds, cannam@95: Previous: Real-data DFT Array Format, cannam@95: Up: Basic Interface cannam@95:
fftw_plan fftw_plan_r2r_1d(int n, double *in, double *out, cannam@95: fftw_r2r_kind kind, unsigned flags); cannam@95: fftw_plan fftw_plan_r2r_2d(int n0, int n1, double *in, double *out, cannam@95: fftw_r2r_kind kind0, fftw_r2r_kind kind1, cannam@95: unsigned flags); cannam@95: fftw_plan fftw_plan_r2r_3d(int n0, int n1, int n2, cannam@95: double *in, double *out, cannam@95: fftw_r2r_kind kind0, cannam@95: fftw_r2r_kind kind1, cannam@95: fftw_r2r_kind kind2, cannam@95: unsigned flags); cannam@95: fftw_plan fftw_plan_r2r(int rank, const int *n, double *in, double *out, cannam@95: const fftw_r2r_kind *kind, unsigned flags); cannam@95:cannam@95:
cannam@95: Plan a real input/output (r2r) transform of various kinds 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.  A
cannam@95: non-NULL plan is always returned by the basic interface unless
cannam@95: you are using a customized FFTW configuration supporting a restricted
cannam@95: set of transforms, or for size-1 FFTW_REDFT00 kinds (which are
cannam@95: not defined). 
cannam@95: 
cannam@95: 
cannam@95: 
rank is the dimensionality of the transform (it should be the
cannam@95: size of the arrays *n and *kind), and can be any
cannam@95: non-negative integer.  The ‘_1d’, ‘_2d’, and ‘_3d’
cannam@95: planners correspond to a rank of 1, 2, and
cannam@95: 3, respectively.  A rank of zero is equivalent to a copy
cannam@95: of one number from input to output.
cannam@95: 
cannam@95:      n, or n0/n1/n2, or n[rank],
cannam@95: respectively, gives the (physical) size of the transform dimensions. 
cannam@95: They 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: REDFT00 or RODFT00 transform kind in a dimension of
cannam@95: size n, it is n-1 or n+1, respectively, that
cannam@95: should be factorizable in the above form. 
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:      kind, or kind0/kind1/kind2, or
cannam@95: kind[rank], is the kind of r2r transform used for the
cannam@95: corresponding dimension.  The valid kind constants are described in
cannam@95: Real-to-Real Transform Kinds.  In a multi-dimensional transform,
cannam@95: what is computed is the separable product formed by taking each
cannam@95: transform kind along the corresponding dimension, one dimension after
cannam@95: another.
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: