/// <summary> /// Create a real transform plan (fftw_plan_r2r). /// </summary> /// <param name="rank">Number of dimensions.</param> /// <param name="n">Array containing the logical size along each dimension.</param> /// <param name="input">FFTW array of 8-byte real numbers.</param> /// <param name="output">FFTW array of 8-byte real numbers.</param> /// <param name="kind">An array containing the kind of real-to-real transform to compute along each dimension.</param> /// <param name="flags">Flags that specify the behavior of the planner.</param> /// <returns>The FFTW plan.</returns> public static Plan Create(int rank, int[] n, RealArray input, RealArray output, Transform[] kind, Options flags) { mutex.WaitOne(); var handle = NativeMethods.fftw_plan_r2r(rank, n, input.Handle, output.Handle, kind, flags); mutex.ReleaseMutex(); return(new Plan(handle, input, output, false)); }
/// <summary> /// Create a 1D real to complex transform plan (fftw_plan_dft_r2c_1d). /// </summary> /// <param name="n">The logical size of the transform.</param> /// <param name="input">FFTW array of 8-byte real numbers.</param> /// <param name="output">FFTW array of 16-byte complex numbers.</param> /// <param name="flags">Flags that specify the behavior of the planner.</param> /// <returns>The FFTW plan.</returns> public static Plan Create1(int n, RealArray input, ComplexArray output, Options flags) { mutex.WaitOne(); var handle = NativeMethods.fftw_plan_dft_r2c_1d(n, input.Handle, output.Handle, flags); mutex.ReleaseMutex(); return(new Plan(handle, input, output, false)); }
/// <summary> /// Create a 2D real transform plan (fftw_plan_r2r_2d). /// </summary> /// <param name="nx">The logical size of the transform along the first dimension.</param> /// <param name="ny">The logical size of the transform along the second dimension.</param> /// <param name="input">FFTW array of 8-byte real numbers.</param> /// <param name="output">FFTW array of 8-byte real numbers.</param> /// <param name="kindx">The kind of real-to-real transform to compute along the first dimension.</param> /// <param name="kindy">The kind of real-to-real transform to compute along the second dimension.</param> /// <param name="flags">Flags that specify the behavior of the planner.</param> /// <returns>The FFTW plan.</returns> public static Plan Create2(int nx, int ny, RealArray input, RealArray output, Transform kindx, Transform kindy, Options flags) { mutex.WaitOne(); var handle = NativeMethods.fftw_plan_r2r_2d(nx, ny, input.Handle, output.Handle, kindx, kindy, flags); mutex.ReleaseMutex(); return(new Plan(handle, input, output, false)); }