integer function fft_crfftm(scale, n1, m, ld1, data, iopt)
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.
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)