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:
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:
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}