Wave number and angular frequency

Since the FFTW3 stores the spectra from the zero-th wave number, I need to map the indices to the wave numbers \(k\) as follows:

src/domain.c
66// wave numbers
67//   0, 1, ..., N/2-1, -N/2, -N/2+1, ..., -2, -1
68// e.g. glsize = 8
69//   -> +0 +1 +2 +3 -4 -3 -2 -1
70for(size_t dim = 0; dim < NDIMS; dim++){
71  int * restrict waves = allwaves[dim];
72  const int glsize = (int)domain->p_glsizes[dim];
73  const int mysize = (int)domain->s_x1_mysizes[dim];
74  const int offset = (int)domain->s_x1_offsets[dim];
75  for(int n = 0; n < mysize; n++){
76    waves[n] = n + offset;
77    if(glsize / 2 <= waves[n]){
78      // negative wave numbers
79      waves[n] -= glsize;
80    }
81  }
82}

Also for convenience, the angular frequency

\[\frac{2 \pi}{L} k\]

are computed and stored:

src/domain.c
119for(size_t dim = 0; dim < NDIMS; dim++){
120  const double length = domain->lengths[dim];
121  const size_t mysize = domain->s_x1_mysizes[dim];
122  const int * restrict waves = allwaves[dim];
123  double * restrict freqs = allfreqs[dim];
124  for(size_t n = 0; n < mysize; n++){
125    freqs[n] = 2. * M_PI / length * waves[n];
126  }
127}