Contents


NAME

     cfftc -  initialize  the  trigonometric  weight  and  factor
     tables  or  compute  the  Fast Fourier transform (forward or
     inverse) of a complex sequence.

SYNOPSIS

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

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

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

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

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

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

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

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

  C INTERFACE
     #include <sunperf.h>

     void cfftc_ (int *iopt, int *n, float  *scale,  complex  *x,
               complex  *y, float *trigs, int *ifac, float *work,
               int *lwork, int *ierr);

     void cfftc_64_ (long *iopt, long *n, float  *scale,  complex
               *x,  complex  *y,  float *trigs, long *ifac, float
               *work, long *lwork, long *ierr);

PURPOSE

     cfftc initializes the trigonometric weight and factor tables
     or  computes the Fast Fourier transform (forward or inverse)
     of a 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)

ARGUMENTS

     IOPT (input)
               Integer specifying the operation to be performed:
               IOPT = 0 computes the trigonometric  weight  table
               and factor table
               IOPT = -1 computes forward FFT
               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)
               Real scalar by which transform results are scaled.
               Unchanged  on exit.  SCALE is defaulted to 1.0 for
               F95 INTERFACE.

     X (input) On entry, X is a complex  array  of  dimension  at
               least   N   that   contains  the  sequence  to  be
               transformed.

     Y (output)
               Complex array of dimension at least  N  that  con-
               tains  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)
               Real array of length 2*N that  contains  the  tri-
               gonometric weights.  The weights are computed when
               the routine is called with IOPT = 0 and  they  are
               used  in  subsequent calls when IOPT = 1 or 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 or
               IOPT = -1. Unchanged on exit.

     WORK (workspace)
               Real array of dimension at least  2*N.   The  user
               can  also  choose to have the routine allocate 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, 1 or -1
               -2 = N < 0
               -3 = (LWORK is not 0) and (LWORK is less than 2*N)
               -4 = memory allocation for workspace failed

SEE ALSO

     fft