Contents


NAME

     zfftd -  initialize  the  trigonometric  weight  and  factor
     tables  or  compute  the inverse Fast Fourier Transform of a
     double complex sequence.

SYNOPSIS

     SUBROUTINE ZFFTD(IOPT, N, SCALE, X, Y, TRIGS, IFAC, WORK, LWORK, IERR)

     INTEGER IOPT, N, IFAC(*), LWORK, IERR
     DOUBLE COMPLEX X(*)
     DOUBLE PRECISION SCALE, Y(*), TRIGS(*), WORK(*)

     SUBROUTINE ZFFTD_64(IOPT, N, SCALE, X, Y, TRIGS, IFAC, WORK, LWORK, IERR)

     INTEGER*8 IOPT, N, IFAC(*), LWORK, IERR
     DOUBLE PRECISION SCALE, Y(*), TRIGS(*), WORK(*)
     DOUBLE COMPLEX X(*)

  F95 INTERFACE
     SUBROUTINE FFT(IOPT, N, [SCALE], X, Y, TRIGS, IFAC, WORK, [LWORK], IERR)

     INTEGER, INTENT(IN) :: IOPT, N
     INTEGER, INTENT(IN), OPTIONAL :: LWORK
     REAL(8), INTENT(IN), OPTIONAL :: SCALE
     COMPLEX(8), INTENT(IN), DIMENSION(:) :: X
     REAL(8), INTENT(OUT), DIMENSION(:) :: Y
     REAL(8), INTENT(INOUT), DIMENSION(:) :: TRIGS
     INTEGER, INTENT(INOUT), DIMENSION(:) :: IFAC
     REAL(8), INTENT(OUT), DIMENSION(:) :: WORK
     INTEGER, INTENT(OUT) :: IERR

     SUBROUTINE FFT_64(IOPT, N, [SCALE], X, Y, TRIGS, IFAC, WORK, [LWORK], IERR)

     INTEGER(8), INTENT(IN) :: IOPT, N
     INTEGER(8), INTENT(IN), OPTIONAL :: LWORK
     REAL(8), INTENT(IN), OPTIONAL :: SCALE
     COMPLEX(8), INTENT(IN), DIMENSION(:) :: X
     REAL(8), INTENT(OUT), DIMENSION(:) :: Y
     REAL(8), INTENT(INOUT), DIMENSION(:) :: TRIGS
     INTEGER(8), INTENT(INOUT), DIMENSION(:) :: IFAC
     REAL(8), INTENT(OUT), DIMENSION(:) :: WORK
     INTEGER(8), INTENT(OUT) :: IERR

  C INTERFACE
     #include <sunperf.h>

     void zfftd_ (int *iopt, int *n, double *scale, doublecomplex
               *x,  double  *y,  double *trigs, int *ifac, double
               *work, int *lwork, int *ierr);

     void zfftd_64_ (long *iopt, long *n,  double  *scale,  doub-
               lecomplex  *x,  double  *y,  double  *trigs,  long
               *ifac, double *work, long *lwork, long *ierr);

PURPOSE

     zfftd initializes the trigonometric weight and factor tables
     or  computes  the inverse Fast Fourier Transform of a double
     complex sequence as follows:

                    N-1
     Y(k) = scale * SUM  W*X(j)
                    j=0

     where
     k ranges from 0 to N-1
     i = sqrt(-1)
     isign = 1 for inverse transform or -1 for forward transform
     W = exp(isign*i*j*k*2*pi/N)
     In complex-to-real transform of length N, the  (N/2+1)  com-
     plex  input  data  points  stored are the positive-frequency
     half of the spectrum of the Discrete Fourier Transform.  The
     other  half  can be obtained through complex conjugation and
     therefore is not stored.  Furthermore, due to symmetries the
     imaginary  of the component of X(0) and X(N/2) (if N is even
     in the latter) is assumed to be zero and is not referenced.

ARGUMENTS

     IOPT (input)
               Integer specifying the operation to be performed:
               IOPT = 0 computes the trigonometric  weight  table
               and factor table
               IOPT = 1 computes inverse FFT

     N (input)
               Integer specifying length of the input sequence X.
               N  is most efficient when it is a product of small
               primes.  N >= 0.  Unchanged on exit.

     SCALE (input)
               Double precision scalar by which transform results
               are   scaled.    Unchanged   on  exit.   SCALE  is
               defaulted to 1.0D0 for F95 INTERFACE.

     X (input) On entry, X is a double complex array whose  first
               (N/2+1)  elements  are  the  input  sequence to be
               transformed.
     Y (output)
               Double precision array of  dimension  at  least  N
               that  contains the transform results.  X and Y may
               be the same array  starting  at  the  same  memory
               location.   Otherwise, it is assumed that there is
               no overlap between X and Y in memory.

     TRIGS (input/output)
               Double precision array of length 2*N that contains
               the  trigonometric  weights.  The weights are com-
               puted when the routine is called with IOPT = 0 and
               they  are  used in subsequent calls when IOPT = 1.
               Unchanged on exit.

     IFAC (input/output)
               Integer array of dimension at least 128 that  con-
               tains  the factors of N.  The factors are computed
               when the routine is called with IOPT = 0 and  they
               are  used  in  subsequent  calls  where  IOPT = 1.
               Unchanged on exit.

     WORK (workspace)
               Double precision array of dimension  at  least  N.
               The user can also choose to have the routine allo-
               cate its own workspace (see LWORK).

     LWORK (input)
               Integer specifying workspace size.  If LWORK =  0,
               the routine will allocate its own workspace.

     IERR (output)
               On exit, integer IERR has  one  of  the  following
               values:
               0 = normal return
               -1 = IOPT is not 0 or 1
               -2 = N < 0
               -3 = (LWORK is not 0) and (LWORK is less than N)
               -4 = memory allocation for workspace failed

SEE ALSO

     fft