FFTPACK5
Fast Fourier Transform
FFTPACK5
is a FORTRAN90 library which
computes Fast Fourier Transforms,
by Paul Swarztrauber and Dick Valent;
Note: An apparent indexing problem in the 2D complex codes
CFFT2B/CFFT2F/CFFT2I and ZFFT2B/ZFFT2F/ZFFT2I was reported on
10 May 2010. A partial fix was inserted, the authors have been
noted, and a proper fix has been promised...
Special features include:

real or complex data can be handled;

separate routines for forward analysis (data => Fourier coefficients)
and backward analysis (Fourier coefficients => data);

sine and cosine transform routines;

quarter wave sine and cosine transform routines;

the amount of data is NOT required to be a power of 2.
Routines in the library come in groups of three:

an initialization routine;

the forward computational routine (data to FFT coefficients);

the backward computational routine (FFT coefficients to data).
The following table groups the routines:
Initialization  Forward  Backward  Purpose 
CFFT1I  CFFT1F  CFFT1B  FFT for complex single precision 1D data 
CFFT2I  CFFT2F  CFFT2B  FFT for complex single precision 2D data 
CFFTMI  CFFTMF  CFFTMB  FFT for complex single precision multiD data 
COSQ1I  COSQ1F  COSQ1B  Even function 1D quartercosine FFT for real single precision data 
DCOSQ1I  DCOSQ1F  DCOSQ1B  Even function 1D quartercosine FFT for real double precision data 
COSQMI  COSQMF  COSQMB  Even function 1D quartercosine FFT for real single precision data 
COST1I  COST1F  COST1B  Even function 1D cosine FFT for real single precision data 
DCOST1I  DCOST1F  DCOST1B  Even function 1D cosine FFT for real double precision data 
COSTMI  COSTMF  COSTMB  Even function 1D cosine FFT for real single precision data 
RFFT1I  RFFT1F  RFFT1B  FFT for real single precision 1D data 
DFFT1I  DFFT1F  DFFT1B  FFT for real double precision 1D data 
RFFT2I  RFFT2F  RFFT2B  FFT for real single precision 2D data 
RFFTMI  RFFTMF  RFFTMB  FFT for real single precision multiD data 
SINQ1I  SINQ1F  SINQ1B  Even function 1D quartersine FFT for real single precision data 
SINQMI  SINQMF  SINQMB  Even function 1D quartersine FFT for real single precision data 
SINT1I  SINT1F  SINT1B  Even function 1D sine FFT for real single precision data 
DSINT1I  DSINT1F  DSINT1B  Even function 1D sine FFT for real double precision data 
SINTMI  SINTMF  SINTMB  Even function 1D sine FFT for real single precision data 
ZFFT1I  ZFFT1F  ZFFT1B  FFT for complex double precision 1D data 
ZFFT2I  ZFFT2F  ZFFT2B  FFT for complex double precision 2D data 
ZFFTMI  ZFFTMF  ZFFTMB  FFT for complex double precision multiD data 
Licensing:
Licensed under the GNU General Public License (GPL).
Copyright (C) 19952004, Scientific Computing Division,
University Corporation for Atmospheric Research.
Languages:
FFTPACK5 is available in
a FORTRAN77 version and
a FORTRAN90 version.
Related Data and Programs:
FFTPACK5.1,
a FORTRAN90 library which
implements the Fast Fourier Transform
by Paul Swarztrauber and Dick Valent;
FFTW3,
FORTRAN90 programs which
illustrate the use of the FFTW3 library for Fast Fourier Transforms,
by Matteo Frigo and Steven Johnson.
GSL,
a C++ library which
embodies the "GNU Scientific Library", and includes FFT routines.
NMS,
a FORTRAN90 library which
includes a number of FFT routines.
SFTPACK,
a FORTRAN90 library which
implements the "slow" Fourier transform, intended as a teaching
tool and comparison with the fast Fourier transform.
WAVELET,
a FORTRAN90 library which
does some simple wavelet calculations;
XERROR,
a FORTRAN90 library which
is designed to report and handle errors detected during program execution.
Author:
The original Fortran77 version of this code was written by Dick Valent and
Paul Swarztrauber, of the National Center for Atmospheric Research (NCAR).
Modifications and additions were made by John Burkardt to convert the program
to FORTRAN90 format, and to add real and complex double precision routines.
Reference:

William Briggs, Van Emden Henson,
The DFT: An Owner's Manual for the Discrete Fourier Transform,
SIAM, 1995,
ISBN13: 9780898713428,
LC: QA403.5.B75.

Elbert Brigham,
The Fast Fourier Transform and Its Applications,
PrenticeHall, 1988,
ISBN: 0133075052,
LC: QA403.B74.

Bill Buzbee,
The SLATEC Common Math Library,
in Sources and Development of Mathematical Software,
edited by Wayne Cowell,
PrenticeHall, 1984,
ISBN: 0138235015,
LC: QA76.95.S68.

Eleanor Chu, Alan George,
Inside the FFT Black Box,
CRC Press,
ISBN: 0849302706,
LC: QA403.5C5.

David Kahaner, Cleve Moler, Steven Nash,
Numerical Methods and Software,
Prentice Hall, 1989,
ISBN: 0136272584,
LC: TA345.K34.

Paul Swarztrauber,
Symmetric FFT's,
Mathematics of Computation,
Volume 47, Number 175, July 1986, pages 323346.

Paul Swarztrauber,
Vectorizing the Fast Fourier Transforms,
in Parallel Computations,
edited by Garry Rodrigue,
Academic Press, 1982,
ISBN: 0125921012,
LC: QA76.6.P348.

Paul Swarztrauber,
Fast Fourier Transform Algorithms for Vector Computers,
Parallel Computing,
Volume 1, Number 1, August 1984, pages 4563.

http://www.cisl.ucar.edu/css/software/fftpack5
the home page for the original FORTRAN77 version of FFTPACK5.
Source Code:
Examples and Tests:
COST_TEST does a pair of cosine forward and backward transforms.
SINT_TEST does a pair of sine forward and backward transforms.
List of Routines:

C1F2KB is an FFTPACK5 auxiliary routine.

C1F2KF is an FFTPACK5 auxiliary routine.

C1F3KB is an FFTPACK5 auxiliary routine.

C1F3KF is an FFTPACK5 auxiliary routine.

C1F4KB is an FFTPACK5 auxiliary routine.

C1F4KF is an FFTPACK5 auxiliary routine.

C1F5KB is an FFTPACK5 auxiliary routine.

C1F5KF is an FFTPACK5 auxiliary routine.

C1FGKB is an FFTPACK5 auxiliary routine.

C1FGKF is an FFTPACK5 auxiliary routine.

C1FM1B is an FFTPACK5 auxiliary routine.

C1FM1F is an FFTPACK5 auxiliary routine.

CFFT1B: complex single precision backward fast Fourier transform, 1D.

CFFT1F: complex single precision forward fast Fourier transform, 1D.

CFFT1I: initialization for CFFT1B and CFFT1F.

CFFT2B: complex single precision backward fast Fourier transform, 2D.

CFFT2F: complex single precision forward fast Fourier transform, 2D.

CFFT2I: initialization for CFFT2B and CFFT2F.

CFFTMB: complex single precision backward FFT, 1D, multiple vectors.

CFFTMF: complex single precision forward FFT, 1D, multiple vectors.

CFFTMI: initialization for CFFTMB and CFFTMF.

CMF2KB is an FFTPACK5 auxiliary routine.

CMF2KF is an FFTPACK5 auxiliary routine.

CMF3KB is an FFTPACK5 auxiliary routine.

CMF3KF is an FFTPACK5 auxiliary routine.

CMF4KB is an FFTPACK5 auxiliary routine.

CMF4KF is an FFTPACK5 auxiliary routine.

CMF5KB is an FFTPACK5 auxiliary routine.

CMF5KF is an FFTPACK5 auxiliary routine.

CMFGKB is an FFTPACK5 auxiliary routine.

CMFGKF is an FFTPACK5 auxiliary routine.

CMFM1B is an FFTPACK5 auxiliary routine.

CMFM1F is an FFTPACK5 auxiliary routine.

COSQ1B: real single precision backward cosine quarter wave transform, 1D.

COSQ1F: real single precision forward cosine quarter wave transform, 1D.

COSQ1I: initialization for COSQ1B and COSQ1F.

COSQB1 is an FFTPACK5 auxiliary routine.

COSQF1 is an FFTPACK5 auxiliary routine.

COSQMB: real single precision backward cosine quarter wave transform, multiple vectors.

COSQMF: real single precision forward cosine quarter wave transform, multiple vectors.

COSQMI: initialization for COSQMB and COSQMF.

COST1B: real single precision backward cosine transform, 1D.

COST1F: real single precision forward cosine transform, 1D.

COST1I: initialization for COST1B and COST1F.

COSTB1 is an FFTPACK5 auxiliary routine.

COSTF1 is an FFTPACK5 auxiliary routine.

COSTMB: real single precision backward cosine transform, multiple vectors.

COSTMF: real single precision forward cosine transform, multiple vectors.

COSTMI: initialization for COSTMB and COSTMF.

D1F2KB is an FFTPACK5 auxiliary routine.

D1F2KF is an FFTPACK5 auxiliary routine.

D1F3KB is an FFTPACK5 auxiliary routine.

D1F3KF is an FFTPACK5 auxiliary routine.

D1F4KB is an FFTPACK5 auxiliary routine.

D1F4KF is an FFTPACK5 auxiliary routine.

D1F5KB is an FFTPACK5 auxiliary routine.

D1F5KF is an FFTPACK5 auxiliary routine.

D1FGKB is an FFTPACK5 auxiliary routine.

D1FGKF is an FFTPACK5 auxiliary routine.

DCOSQ1B: real double precision backward cosine quarter wave transform, 1D.

DCOSQ1F: real double precision forward cosine quarter wave transform, 1D.

DCOSQ1I: initialization for DCOSQ1B and DCOSQ1F.

DCOSQB1 is an FFTPACK5 auxiliary routine.

DCOSQF1 is an FFTPACK5 auxiliary routine.

DCOST1B: real double precision backward cosine transform, 1D.

DCOST1F: real double precision forward cosine transform, 1D.

DCOST1I: initialization for DCOST1B and DCOST1F.

DCOSTB1 is an FFTPACK5 auxiliary routine.

DCOSTF1 is an FFTPACK5 auxiliary routine.

DFFTB1 is an FFTPACK5 auxiliary routine.

DFFT1B: real double precision backward fast Fourier transform, 1D.

DFFT1F: real double precision forward fast Fourier transform, 1D.

DFFTF1 is an FFTPACK5 auxiliary routine.

DFFT1I: initialization for DFFT1B and DFFT1F.

DFFTI1 is an FFTPACK5 auxiliary routine.

DSINT1B: real double precision backward sine transform, 1D.

DSINT1F: real double precision forward sine transform, 1D.

DSINT1I: initialization for DSINT1B and DSINT1F.

DSINTB1 is an FFTPACK5 auxiliary routine.

DSINTF1 is an FFTPACK5 auxiliary routine.

MCSQB1 is an FFTPACK5 auxiliary routine.

MCSQF1 is an FFTPACK5 auxiliary routine.

MCSTB1 is an FFTPACK5 auxiliary routine.

MCSTF1 is an FFTPACK5 auxiliary routine.

MRADB2 is an FFTPACK5 auxiliary routine.

MRADB3 is an FFTPACK5 auxiliary routine.

MRADB4 is an FFTPACK5 auxiliary routine.

MRADB5 is an FFTPACK5 auxiliary routine.

MRADBG is an FFTPACK5 auxiliary routine.

MRADF2 is an FFTPACK5 auxiliary routine.

MRADF3 is an FFTPACK5 auxiliary routine.

MRADF4 is an FFTPACK5 auxiliary routine.

MRADF5 is an FFTPACK5 auxiliary routine.

MRADFG is an FFTPACK5 auxiliary routine.

MRFTB1 is an FFTPACK5 auxiliary routine.

MRFTF1 is an FFTPACK5 auxiliary routine.

MRFTI1 is an FFTPACK5 auxiliary routine.

MSNTB1 is an FFTPACK5 auxiliary routine.

MSNTF1 is an FFTPACK5 auxiliary routine.

R1F2KB is an FFTPACK5 auxiliary routine.

R1F2KF is an FFTPACK5 auxiliary routine.

R1F3KB is an FFTPACK5 auxiliary routine.

R1F3KF is an FFTPACK5 auxiliary routine.

R1F4KB is an FFTPACK5 auxiliary routine.

R1F4KF is an FFTPACK5 auxiliary routine.

R1F5KB is an FFTPACK5 auxiliary routine.

R1F5KF is an FFTPACK5 auxiliary routine.

R1FGKB is an FFTPACK5 auxiliary routine.

R1FGKF is an FFTPACK5 auxiliary routine.

R4_FACTOR factors of an integer for real single precision computations.

R4_MCFTI1 sets up factors and tables, real single precision arithmetic.

R4_TABLES computes trigonometric tables, real single precision arithmetic.

R8_FACTOR factors of an integer for real double precision computations.

R8_MCFTI1 sets up factors and tables, real double precision arithmetic.

R8_TABLES computes trigonometric tables, real double precision arithmetic.

RFFT1B: real single precision backward fast Fourier transform, 1D.

RFFT1F: real single precision forward fast Fourier transform, 1D.

RFFT1I: initialization for RFFT1B and RFFT1F.

RFFT2B: real single precision backward fast Fourier transform, 2D.

RFFT2I: initialization for RFFT2B and RFFT2F.

RFFTB1 is an FFTPACK5 auxiliary routine.

RFFTF1 is an FFTPACK5 auxiliary routine.

RFFTI1 is an FFTPACK5 auxiliary routine.

RFFTMB: real single precision backward FFT, 1D, multiple vectors.

RFFTMF: real single precision forward FFT, 1D, multiple vectors.

RFFTMI: initialization for RFFTMB and RFFTMF.

SINQ1B: real single precision backward sine quarter wave transform, 1D.

SINQ1F: real single precision forward sine quarter wave transform, 1D.

SINQ1I: initialization for SINQ1B and SINQ1F.

SINQMB: real single precision backward sine quarter wave transform, multiple vectors.

SINQMF: real single precision forward sine quarter wave transform, multiple vectors.

SINQMI: initialization for SINQMB and SINQMF.

SINT1B: real single precision backward sine transform, 1D.

SINT1F: real single precision forward sine transform, 1D.

SINT1I: initialization for SINT1B and SINT1F.

SINTB1 is an FFTPACK5 auxiliary routine.

SINTF1 is an FFTPACK5 auxiliary routine.

SINTMB: real single precision backward sine transform, multiple vectors.

SINTMF: real single precision forward sine transform, multiple vectors.

SINTMI: initialization for SINTMB and SINTMF.

XERCON checks INC, JUMP, N and LOT for consistency.

XERFFT is an error handler for the FFTPACK routines.

Z1F2KB is an FFTPACK5 auxiliary routine.

Z1F2KF is an FFTPACK5 auxiliary routine.

Z1F3KB is an FFTPACK5 auxiliary routine.

Z1F3KF is an FFTPACK5 auxiliary routine.

Z1F4KB is an FFTPACK5 auxiliary routine.

Z1F4KF is an FFTPACK5 auxiliary routine.

Z1F5KB is an FFTPACK5 auxiliary routine.

Z1F5KF is an FFTPACK5 auxiliary routine.

Z1FGKB is an FFTPACK5 auxiliary routine.

Z1FGKF is an FFTPACK5 auxiliary routine.

Z1FM1B is an FFTPACK5 auxiliary routine.

Z1FM1F is an FFTPACK5 auxiliary routine.

ZFFT1B: complex double precision backward fast Fourier transform, 1D.

ZFFT1F: complex double precision forward fast Fourier transform, 1D.

ZFFT1I: initialization for ZFFT1B and ZFFT1F.

ZFFT2B: complex double precision backward fast Fourier transform, 2D.

ZFFT2F: complex double precision forward fast Fourier transform, 2D.

ZFFT2I: initialization for ZFFT2B and ZFFT2F.

ZFFTMB: complex double precision backward FFT, 1D, multiple vectors.

ZFFTMF: complex double precision forward FFT, 1D, multiple vectors.

ZFFTMI: initialization for ZFFTMB and ZFFTMF.

ZMF2KB is an FFTPACK5 auxiliary routine.

ZMF2KF is an FFTPACK5 auxiliary routine.

ZMF3KB is an FFTPACK5 auxiliary routine.

ZMF3KF is an FFTPACK5 auxiliary routine.

ZMF4KB is an FFTPACK5 auxiliary routine.

ZMF4KF is an FFTPACK5 auxiliary routine.

ZMF5KB is an FFTPACK5 auxiliary routine.

ZMF5KF is an FFTPACK5 auxiliary routine.

ZMFGKB is an FFTPACK5 auxiliary routine.

ZMFGKF is an FFTPACK5 auxiliary routine.

ZMFM1B is an FFTPACK5 auxiliary routine.

ZMFM1F is an FFTPACK5 auxiliary routine.
You can go up one level to
the FORTRAN90 source codes.
Last revised on 10 May 2010.