Visible to Intel only — GUID: GUID-AE4CC017-EE25-479F-A729-F3131D4BAB09
Visible to Intel only — GUID: GUID-AE4CC017-EE25-479F-A729-F3131D4BAB09
Configuring and Computing an FFT in Fortran
The table below summarizes information on configuring and computing an FFT in Fortran for all kinds of transforms and possible combinations of input and output domains.
FFT to Compute |
Input Data |
Output Data |
Required FFT Function Calls |
---|---|---|---|
Complex-to-complex, in-place, forward or backward |
Interleaved complex numbers |
Interleaved complex numbers |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_COMPLEX, <dimension>, <sizes>) status = DftiCommitDescriptor(hand) ! Compute an FFT ! forward FFT status = DftiComputeForward(hand, X_inout) ! or backward FFT status = DftiComputeBackward(hand, X_inout) |
Complex-to-complex, out-of-place, forward or backward |
Interleaved complex numbers |
Interleaved complex numbers |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_COMPLEX, <dimension>, <sizes>) status = DftiSetValue(hand, DFTI_PLACEMENT, & DFTI_NOT_INPLACE) status = DftiCommitDescriptor(hand) ! Compute an FFT ! forward FFT status = DftiComputeForward(hand, X_in, Y_out) ! or backward FFT status = DftiComputeBackward(hand, X_in, Y_out) |
Complex-to-complex, in-place, forward or backward |
Split-complex numbers |
Split-complex numbers |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_COMPLEX, <dimension>, <sizes>) status = DftiSetValue(hand, & DFTI_COMPLEX_STORAGE, DFTI_REAL_REAL) status = DftiCommitDescriptor(hand) ! Compute an FFT ! forward FFT status = DftiComputeForward(hand, Xre_inout, & Xim_inout) ! or backward FFT status = DftiComputeBackward(hand, Xre_inout, & Xim_inout) |
Complex-to-complex, out-of-place, forward or backward |
Split-complex numbers |
Split-complex numbers |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_COMPLEX, <dimension>, <sizes>) status = DftiSetValue(hand, & DFTI_COMPLEX_STORAGE, DFTI_REAL_REAL) status = DftiSetValue(hand, & DFTI_PLACEMENT, DFTI_NOT_INPLACE) status = DftiCommitDescriptor(hand) ! Compute an FFT ! forward FFT status = DftiComputeForward(hand, Xre_in, & Xim_in, Yre_out, Yim_out) ! or backward FFT status = DftiComputeBackward(hand, Xre_in, & Xim_in, Yre_out, Yim_out) |
Real-to-complex, in-place, forward |
Real numbers |
Numbers in the CCE format |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_REAL, <dimension>, <sizes>) status = DftiSetValue(hand, & DFTI_CONJUGATE_EVEN_STORAGE, & DFTI_COMPLEX_COMPLEX) status = DftiSetValue(hand, DFTI_PACKED_FORMAT, & DFTI_CCE_FORMAT) status = DftiSetValue(hand, DFTI_INPUT_STRIDES, & <real_strides>) status = DftiSetValue(hand, DFTI_OUTPUT_STRIDES, & <complex_strides>) status = DftiCommitDescriptor(hand) ! Compute an FFT status = DftiComputeForward(hand, X_inout) |
Real-to-complex, out-of-place, forward |
Real numbers |
Numbers in the CCE format |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision> &, DFTI_REAL, <dimension>, <sizes>) status = DftiSetValue(hand, & DFTI_CONJUGATE_EVEN_STORAGE, & DFTI_COMPLEX_COMPLEX) status = DftiSetValue(hand, DFTI_PACKED_FORMAT, & DFTI_CCE_FORMAT) status = DftiSetValue(hand, DFTI_PLACEMENT, & DFTI_NOT_INPLACE) status = DftiSetValue(hand, DFTI_INPUT_STRIDES, & <real_strides>) status = DftiSetValue(hand, DFTI_OUTPUT_STRIDES, & <complex_strides>) status = DftiCommitDescriptor(hand) ! Compute an FFT status = DftiComputeForward(hand, X_in, Y_out) |
Complex-to-real, in-place, backward |
Numbers in the CCE format |
Real numbers |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_REAL, <dimension>, <sizes>) status = DftiSetValue(hand, & DFTI_CONJUGATE_EVEN_STORAGE, & DFTI_COMPLEX_COMPLEX) status = DftiSetValue(hand, DFTI_PACKED_FORMAT, & DFTI_CCE_FORMAT) status = DftiSetValue(hand, DFTI_INPUT_STRIDES, & <complex_strides>) status = DftiSetValue(hand, DFTI_OUTPUT_STRIDES, & <real_strides>) status = DftiCommitDescriptor(hand) ! Compute an FFT status = DftiComputeBackward(hand, X_inout) |
Complex-to-real, out-of-place, backward |
Numbers in the CCE format |
Real numbers |
! Configure a Descriptor status = DftiCreateDescriptor(hand, <precision>, & DFTI_REAL, <dimension>, <sizes>) status = DftiSetValue(hand, & DFTI_CONJUGATE_EVEN_STORAGE, & DFTI_COMPLEX_COMPLEX) status = DftiSetValue(hand, DFTI_PLACEMENT, & DFTI_NOT_INPLACE) status = DftiSetValue(hand, DFTI_PACKED_FORMAT, & DFTI_CCE_FORMAT) status = DftiSetValue(hand, DFTI_INPUT_STRIDES, & <complex_strides>) status = DftiSetValue(hand, DFTI_OUTPUT_STRIDES, & <real_strides>) status = DftiCommitDescriptor(hand) ! Compute an FFT status = DftiComputeBackward(hand, X_in, Y_out) |
You can find Fortran programs that illustrate configuring and computing FFTs in the examples/dftf/subdirectory of your Intel® oneAPI Math Kernel Library (oneMKL) directory.