CSFFT3D,ZDFFT3D(3) MathKeisan FFT routine CSFFT3D,ZDFFT3D(3)
NAME
csfft3d, zdfft3d - three-dimensional real-to-complex FFT.
(OpenMP Parallel Support).
SYNOPSIS
libfft.a
INTEGER isign, n1, n2, n3, ldx, ldx2, ldy, ldy2, isys
COMPLEX x(ldx,ldx2,n3)
REAL scale, y(ldy,ldy2,n3), table(2*(n1+n2+n3)+195),
work(4*256*max(n1,n2,n3))
CALL CSFFT3D ( isign, n1, n2, n3, scale, x, ldx, ldx2,
y, ldy, ldy2, table, work, isys )
INTEGER isign, n1, n2, n3, ldx, ldx2, ldy, ldy2, isys
COMPLEX(kind=8) x(ldx,ldx2,n3)
REAL(kind=8) scale, y(ldy,ldy2,n3), table(2*(n1+n2+n3)+195),
work(4*256*max(n1,n2,n3))
CALL ZDFFT3D ( isign, n1, n2, n3, scale, x, ldx, ldx2,
y, ldy, ldy2, table, work, isys )
libfft_64.a
INTEGER(kind=8) isign, n1, n2, n3, ldx, ldx2, ldy, ldy2, isys
COMPLEX(kind=8) x(ldx,ldx2,n3)
REAL(kind=8) scale, y(ldy,ldy2,n3), table(2*(n1+n2+n3)+195),
work(4*256*max(n1,n2,n3))
CALL CSFFT3D ( isign, n1, n2, n3, scale, x, ldx, ldx2,
y, ldy, ldy2, table, work, isys )
INTEGER(kind=8) isign, n1, n2, n3, ldx, ldx2, ldy, ldy2, isys
COMPLEX(kind=8) x(ldx,ldx2,n3)
REAL(kind=8) scale, y(ldy,ldy2,n3), table(2*(n1+n2+n3)+195),
work(4*256*max(n1,n2,n3))
CALL ZDFFT3D ( isign, n1, n2, n3, scale, x, ldx, ldx2,
y, ldy, ldy2, table, work, isys )
DESCRIPTION
This subroutine computes the three-dimensional discrete Fourier trans-
form of the complex data stored in x; the transformed data is stored in
the real array y. If we take x and y to be dimensioned as
x(0:n1/2,0:n2-1,0:n3-1) and y(0:n1-1,0:n2-1,0:n3-1), the transform is
expressed by the following formula:
n1/2 n2-1 n3-1
y(k1,k2,k3) = scale * Sum Sum Sum x(j1,j2,j3) * fac
j1=0 j2=0 j3=0
where
fac = exp(isign*j1*k1*2*pi*i/n1) * exp(isign*j2*k2*2*pi*i/n2) *
exp(isign*j3*k3*2*pi*i/n3)
for
k1 = 0, ..., n1-1, k2 = 0, ..., n2-1, k3 = 0, ..., n3-1,
here
i = sqrt(-1).
(The additional values of x can be determined by conjugate symmetry.)
In order to accomodate multiple calls of the same size to this routine,
an additional initialization step is required prior to the computation
of any transforms. Hence, whenever it is desired to use ZDFFT3D or
CSFFT3D in a program, it must be called at least twice.
A result of Fourier theory is that a transform of real data is conju-
gate symmetric; hence, only the first n1/2 + 1 complex data points in
the first dimension are to be input to this routine.
Set the OpenMp environmental variable OMP_NUM_THREADS to the number of
threads you would like to use.
ARGUMENTS
Input
isign Option flag:
If isign = 0, the routine is initialized for the given values of
n1, n2, n3.
If isign = + 1, the transform is calculated, and isign is the
sign of the exponential in the transform.
n1 Number of data points in the first dimension (n1>0).
n2 Number of data points in the second dimension (n2>0).
n3 Number of data points in the third dimension (n3>0).
scale Scaling factor for the transform.
Not used if isign = 0.
x Array of data to be transformed.
Not used if isign = 0.
ldx Leading dimension of x. ldx >= n1/2 + 1.
ldx2 Second dimension of x. ldx2 >= n2.
ldy Leading dimension of y. ldy >= n1.
ldy2 Second dimension of y. ldy2 >= n2.
isys Currently unused.
Working Storage
table If isign = 0, table is initialized for computing transforms of
dimension n1-by-n2-by-n3.
If isign != 0, table must have been initialized by a previous
call with these values of n1, n2, and n3 in which isign was 0.
work Workspace for computing the transform.
Not used if isign = 0.
Output
y Transformed data.
Not used if isign = 0.
SciLib routine CSFFT3D,ZDFFT3D(3)