def FFT(request): prec = {"s": "single", "d": "double"}[request.param[-1]] if request.param[:3] == "pen": return pencil_FFT(array([N, N, N]), L, MPI, prec, None, alignment=string.upper(request.param[-2])) else: return slab_FFT(array([N, N, N]), L, MPI, prec)
def FFT_padded(request): prec = {"s": "single", "d": "double"}[request.param[-1]] if request.param[:3] == "pen": if request.param[-3] == 's': return pencil_FFT(array([N, N, N]), L, MPI, prec, None, method='Swap', alignment=string.upper(request.param[-2])) elif request.param[-3] == 'n': return pencil_FFT(array([N, N, N]), L, MPI, prec, None, method='Nyquist', alignment=string.upper(request.param[-2])) else: return slab_FFT(array([N, N, N]), L, MPI, prec)
cp = zeros(FFT.transformed_shape(), dtype=FFT.complex) cp = FFT.fftn(ap, cp, dealias="3/2-rule") assert all(abs(cp - c) / cp.max() < rtol) # Now without padding # Transform back to original aa = zeros(FFT.original_shape(), dtype=FFT.complex) aa = FFT.ifftn(c, aa) # Verify a3 = A[FFT.original_local_slice()] assert allclose(aa, a3, rtol, atol) c2 = zeros(FFT.transformed_shape(), dtype=FFT.complex) c2 = FFT.fftn(aa, c2) # Verify assert allclose(c2, c, rtol, atol) #test_FFT(pencil_FFT(array([N, N, N], dtype=int), L, MPI, "double", P1=2, alignment="Y", method='Nyquist')) #test_FFT(slab_FFT(array([N, N, N]), L, MPI, "single")) #test_FFT2(line_FFT(array([N, N]), L[:-1], MPI, "single")) #test_FFT_padded(slab_FFT(array([N, N, N]), L, MPI, "double")) test_FFT_padded( pencil_FFT(array([N, N, N], dtype=int), L, MPI, "double", P1=2, alignment="Y", method='Swap')) #test_FFT_c2c(c2c(array([N, N, N]), L, MPI, "single"))