Run S3L_ifft to compute the inverse FFT of the complex or double complex parallel array a. Use the setup ID returned by S3L_fft_setup to specify the array of interest.
Both power-of-two and arbitrary radix FFT are supported. The 1D parallel FFT can be used for sizes that are a multiple of the square of the number of nodes; the 2D and 3D FFTs can be used for arbitrary sizes and distributions.
Upon completion, a is overwritten with the result. The floating-point precision of the result always matches that of the input.
For the 2D FFT, if the blocksizes along each dimension are equal to the extents divided by the number of processes, a more efficient transpose algorithm is employed, which yields significant performance improvements.
S3L_ifft can only be used for complex and double complex data types. To compute a real-data forward FFT, use S3L_rc_fft. This performs a forward FFT on the real data, yielding packed representation of the complex results. To compute the corresponding inverse FFT, use S3L_cr_fft, which will perform an inverse FFT on the complex data, overwriting the original real array with real-valued results of the inverse FFT.
S3L_fft and S3L_ifft do not perform any scaling. Consequently, when a forward FFT is followed by an inverse FFT, the original data will be scaled by the product of the extents of the array.
The C and Fortran syntax for S3L_ifft are shown below.
#include <s3l/s3l-c.h> #include <s3l/s3l_errno-c.h> int S3L_ifft(a, setup_id) S3L_array_t a int setup_id |
include `s3l/s3l-f.h' include `s3l/s3l_errno-f.h' subroutine S3L_ifft(a, setup_id, ier) integer*8 a integer*4 setup_id integer*4 ier |
a - S3L array handle for a parallel array that will be transformed. Its rank, extents, and type must be the same as the parallel array (a) supplied in the S3L_fft_setup call.
setup_id - Scalar integer variable. Use the value returned by the S3L_fft_setup call for this argument.
This function uses the following arguments for output:
a - The input array a is overwritten with the result of the FFT.
ier (Fortran only) - When called from a Fortran program, this function returns error status in ier.
On success, S3L_ifft returns S3L_SUCCESS.
S3L_ifft performs generic checking of the validity of the arrays it accepts as arguments. If an array argument contains an invalid or corrupted value, the function terminates and returns an error code indicating which value was invalid. See Appendix A of this manual for a detailed list of these error codes.
The following conditions will cause the function to terminate and return the associated error code.
S3L_ERR_FFT_RANKGT3 - The rank of the array a is larger than 3.
S3L_ERR_ARG_NCOMPLEX - Array a is not complex.
S3L_ERR_FFT_EXTSQPROCS - Array a is 1D but its extent is not divisible by the square of the number of processes.
S3L_ERR_ARG_SETUP - The setup_id supplied is not valid.
../examples/s3l/fft/fft.c ../examples/s3l/fft-f/fft.f
S3L_fft_setup(3) S3L_fft_free_setup(3) S3L_fft_detailed(3)