static void init_input(const ptrdiff_t *N, const ptrdiff_t *local_N, const ptrdiff_t *local_N_start, pfft_complex *data) { int m = 0; for(ptrdiff_t k0=local_N_start[0]; k0<local_N_start[0]+local_N[0]; k0++) for(ptrdiff_t k1=local_N_start[1]; k1<local_N_start[1]+local_N[1]; k1++) for(ptrdiff_t k2=local_N_start[2]; k2<local_N_start[2]+local_N[2]; k2++, m++) data[m] = semirandom(N, k0, k1, k2) + conj(semirandom(N, -k0, -k1, -k2)); }
static pfft_complex semirandom(const ptrdiff_t *N, ptrdiff_t k0, ptrdiff_t k1, ptrdiff_t k2) { if (k0 == N[0]) return semirandom(N, 0, k1, k2); if (k1 == N[1]) return semirandom(N, k0, 0, k2); if (k2 == N[2]) return semirandom(N, k0, k1, 0); ptrdiff_t l0 = (k0) ? k0+N[0] : 1; ptrdiff_t l1 = (k1) ? k1-2*N[1] : 1; ptrdiff_t l2 = (k2) ? k2+N[2] : 1; double re = DATA_INIT(l0+l1*l2) + 3*DATA_INIT(l0*l1+l2) + DATA_INIT(l2*l0+l1); double im = 3*DATA_INIT(l0+l1*l1) + DATA_INIT(l1+l2*l2) - DATA_INIT(l2+l0*l0); return re + im*I; }