Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
A newer version of this document is available. Customers should click here to go to the newest version.
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.