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.