cfft3d,zfft3d(3F) cfft3d,zfft3d(3F)
cfft3d, zfft3d - 3D Complex-to-Complex Fast Fourier Transform.
Fortran :
subroutine cfft3d( sign, n1, n2, n3, array, la1, la2, coef )
integer sign, n1, n2, n3, la1, la2
complex array(la1,la2,n3)
complex coef((n1+15)+(n2+15)+(n3+15))
subroutine zfft3d( sign, n1, n2, n3, array, la1, la2, coef )
integer sign, n1, n2, n3, la1, la2
double complex array(la1,la2,n3)
double complex coef((n1+15)+(n2+15)+(n3+15))
C :
#include <fft.h>
int cfft3d(int sign,int n1,int n2,int n3,complex *array,
int la1, int la2, complex *coef);
int zfft3d(int sign,int n1,int n2,int n3,zomplex *array,
int la1, int la2, zomplex *coef);
cfft3d and zfft3d compute in place the complex Fourier transform of
complex 3D sequence of size N1xN2xN3. The value F{j1,j2,j3} of the
transform of the 3D sequence f{i1,i2,i3} is equal to:
F{j1,j2,j3} = Sum(W1^(i1*j1)*W2^(i2*j2)*W3^(i3*j3*f{i1,i2,i3} ),
for i[123] =0,...,(N[123]-1)
W[123] = exp( (Sign*2*sqrt(-1)*PI) / N[123] )
It is assumed that the (N1 x N2 x N3) 3D sequence is stored along
dimension N1. So the index {i+1,j,l} has an offset of 1 element with
respect to {i,j,l}, and {i,j+1,k} an offset of la1 elements with respect
to {i,j,k}, and {i,j,k+1} an offset of (la1 * la2) elements with respect
to {i,j,k}.
The complex-to-complex 3D Fourier transform is computed with a row-column
approach.
- First, N3 2D FFTs complex-to-complex of size N1xN2 are evaluated,
- then, N1*N2 FFTs complex-to-complex of size N3 are performed,
stride=la1*la2, and leading_dimension=1.
Page 1
cfft3d,zfft3d(3F) cfft3d,zfft3d(3F)
PARAMETERS
SIGN - Integer specifying which sign to be used for the expression of W
(see above) - must be either +1 or -1.
Unchanged on exit.
N1 Integer, the first dimension size of the 3D sequence. Unchanged on
exit.
N2 Integer, the second dimension size of the 3D sequence. Unchanged on
exit.
N3 Integer, the third dimension size of the 3D sequence. Unchanged on
exit.
ARRAY Array containing the samples of the 3D sequence to be transformed.
On input, the element {i,j,k} of the sequence is stored as A(i,j,k) in
Fortran , and A[i+j*la1+k*la1*la2] in C. On exit, the array is
overwritten.
LA1 Integer, first leading dimension: increment between the samples of
two consecutive 1D sub-sequences (e.g between {i,j+1,k} and {i,j,k} ).
Unchanged on exit.
LA2 Integer, second leading dimension: number of the 1D sub-sequence
between two consecutive 2D sub-sequences (e.g between {i,j,k+1} and
{i,j,k}). Unchanged on exit.
COEFF - Array of at least ( (N+15)+(N2+15)+(N3+15) ) elements. On entry
it contains the Sines/Cosines and factorization of N. COEFF needs to be
initialized with a call to cfft3di or zfft3di. Unchanged on exit.
Example of Calling Sequence
3D FFT computed on a complex sequence of size 100x64x125.
Fortran
complex array(0:100-1,0:64-1,0:125-1)
complex coeff(100+15 + 64+15 + 125+15)
call cfft3di( 100, 64, 125, coeff)
call cfft3d( -1, 100, 64, 125, array, 100, 64, coeff)
C
#include <fft.h>
complex array[100*64*125], *coeff;
coeff = cfft3di( 100, 64, 125, NULL);
cfft3d( -1, 100, 64, 125, array, 100, 64, coeff);
fft, cfft3di, zfft3di
PPPPaaaaggggeeee 2222 [ Back ]
|