fft_crfftm - multiple complex-real 1D FFT's


SYNOPSIS

#include <fft.h> (fixed-format sources)
#include <f90fft.h> (free-format sources)

integer function fft_crfftm(scale, n1, m, ld1, data, iopt)

real scale
integer n1
integer m
integer ld1
real data(ld1,m)
integer iopt

DESCRIPTION

The function, "fft_crfftm", performs multiple complex-to-real FFT's. The complex-to-real FFT is done with a positive exponential sign.

INPUT

The parameter, "scale", specified the scale factor to be applied to the data.

The size parameter, "n1", specifies the 1D FFT size. It must be setup as mixed radix values (must be even) in order to allow the FFT's to be more efficient. It is recommended to use fft_nrfft5 to calculate these values.

The number of 1D traces parameter, "m", specifies the number of 1D FFT's to do at a time.

The leading dimension parameter, "ld1", specifies the leading dimension of the data array in number of real values. It must be even and at least "n1" + 2.

The real array, "data", is the I/O array for the FFT's. This is performed "in place". The input complex data must be packed into teh first "n1"+2 real array locations in a typical half-complex format.

The parameter, "iopt", is used to specify any other information that is unique to a specific FFT implementation. Currently, the use is for specifying whether to measure or estimate the FFT's when using FFTW routines. The "fft.h" header defines FFT_MEASURE and FFT_ESTIMATE, besides defining the FFT functions, as integer.

OUTPUT

The FFT results are returned in the real data array and the returned value is zero "0" if successful. A value of "-1" is returned if the arguments are invalid. Otherwise, a value unique to each FFT implementation is returned.

EXAMPLE

      integer :: fft_size, complex_vals, m, fft_flag
      integer :: ier
      real    :: fft_scale
      real, allocatable :: data(:,:)
      complex           :: cdata
      pointer(ptr_cdata, cdata)

      fft_size = fft_nrfft5(100)
      complex_vals = fft_size/2+1
      m = 10

      ! allocate real data, but have complex data point to same location
      allocate(data(2*complex_vals, m))
      ptr_cdata = loc(data(1,1))

      ...
      fft_flag = FFT_ESTIMATE

      ! forward FFT
      fft_scale = 1.0D+00/(dble(fft_size))
      ier = fft_rcfftm(fft_scale, fft_size, m, 2*complex_vals, data, fft_flag)

      ! can now access complex data as cdata(complex_vals, m)

      ! inverse FFT
      fft_scale = 1.0
      ier = fft_crfftm(fft_scale, fft_size, m, 2*complex_vals, data, fft_flag)
    

AUTHOR

Phuong Vu, HPC
Jerry Ehlers, EPTG