cannam@95: cannam@95: cannam@95: Row-major Format - FFTW 3.3.3 cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: cannam@95:
cannam@95: cannam@95: cannam@95:

cannam@95: Next: , cannam@95: Previous: Multi-dimensional Array Format, cannam@95: Up: Multi-dimensional Array Format cannam@95:


cannam@95:
cannam@95: cannam@95:

3.2.1 Row-major Format

cannam@95: cannam@95:

cannam@95: The multi-dimensional arrays passed to fftw_plan_dft etcetera cannam@95: are expected to be stored as a single contiguous block in cannam@95: row-major order (sometimes called “C order”). Basically, this cannam@95: means that as you step through adjacent memory locations, the first cannam@95: dimension's index varies most slowly and the last dimension's index cannam@95: varies most quickly. cannam@95: cannam@95:

To be more explicit, let us consider an array of rank d whose cannam@95: dimensions are n0 × n1 × n2 × … × nd-1. Now, we specify a location in the array by a cannam@95: sequence of d (zero-based) indices, one for each dimension: cannam@95: (i0, i1, i2,..., id-1). If the array is stored in row-major cannam@95: order, then this element is located at the position cannam@95: id-1 + nd-1 * (id-2 + nd-2 * (... + n1 * i0)). cannam@95: cannam@95:

Note that, for the ordinary complex DFT, each element of the array cannam@95: must be of type fftw_complex; i.e. a (real, imaginary) pair of cannam@95: (double-precision) numbers. cannam@95: cannam@95:

In the advanced FFTW interface, the physical dimensions n from cannam@95: which the indices are computed can be different from (larger than) cannam@95: the logical dimensions of the transform to be computed, in order to cannam@95: transform a subset of a larger array. cannam@95: Note also that, in the advanced interface, the expression above is cannam@95: multiplied by a stride to get the actual array index—this is cannam@95: useful in situations where each element of the multi-dimensional array cannam@95: is actually a data structure (or another array), and you just want to cannam@95: transform a single field. In the basic interface, however, the stride cannam@95: is 1. cannam@95: cannam@95: cannam@95: cannam@95: cannam@95: