Contents


NAME

     vcfftf - compute the  Fourier  coefficients  of  a  periodic
     sequence.  The VCFFT operations are normalized, so a call of
     VCFFTF followed by a call of VCFFTB will return the original
     sequence.

SYNOPSIS

     SUBROUTINE VCFFTF(M, N, X, XT, MDIMX, ROWCOL, WSAVE)

     CHARACTER * 1 ROWCOL
     COMPLEX X(MDIMX,*), XT(MDIMX,*), WSAVE(*)
     INTEGER M, N, MDIMX

     SUBROUTINE VCFFTF_64(M, N, X, XT, MDIMX, ROWCOL, WSAVE)

     CHARACTER * 1 ROWCOL
     COMPLEX X(MDIMX,*), XT(MDIMX,*), WSAVE(*)
     INTEGER*8 M, N, MDIMX

  F95 INTERFACE
     SUBROUTINE FFTF([M], [N], X, XT, [MDIMX], ROWCOL, WSAVE)

     CHARACTER(LEN=1) :: ROWCOL
     COMPLEX, DIMENSION(:) :: WSAVE
     COMPLEX, DIMENSION(:,:) :: X, XT
     INTEGER :: M, N, MDIMX

     SUBROUTINE FFTF_64([M], [N], X, XT, [MDIMX], ROWCOL, WSAVE)

     CHARACTER(LEN=1) :: ROWCOL
     COMPLEX, DIMENSION(:) :: WSAVE
     COMPLEX, DIMENSION(:,:) :: X, XT
     INTEGER(8) :: M, N, MDIMX

  C INTERFACE
     #include <sunperf.h>

     void vcfftf(int m, int  n,  complex  *x,  complex  *xt,  int
               mdimx, char rowcol, complex *wsave);

     void vcfftf_64(long m, long n, complex *x, complex *xt, long
               mdimx, char rowcol, complex *wsave);

ARGUMENTS

     M (input) If ROWCOL =  'R'  or  'r',  M  is  the  number  of
               sequences  to be transformed.  Otherwise, M is the
               length of the sequences to be transformed.   M  >=
               0.

     N (input) If ROWCOL = 'R' or 'r', N is  the  length  of  the
               sequences  to be transformed.  Otherwise, N is the
               number of sequences to be transformed.  N >= 0.

     X (input) On entry, if ROWCOL = 'R' or 'r' X(MDIMX,N) is  an
               array  whose first M rows contain the sequences to
               be transformed.   Otherwise,  X(MDIMX,N)  contains
               data  sequences of length M stored in N columns of
               X.

     XT (input)
               A work array.  The size of this workspace  depends
               on  the number of threads that are used to execute
               this routine.  There are  various  functions  that
               can  be  used  to  determine the number of threads
               available (get_env, available_threads, etc).   The
               appropriate  amount, which is (number of threads *
               length of data sequences), can then be dynamically
               allocated  for  XT from the driver routine.  If XT
               can only be allocated statically, then the size of
               XT should be (length of data sequences * number of
               sequences).

     MDIMX (input)
               Leading dimension of the arrays X.  MDIMX >= M.

     ROWCOL (input)
               Indicates whether data sequences in X  are  stored
               row-wise ('R' or 'r') or column-wise ('C' or 'c').

     WSAVE (input/output)
               On  entry,  an  array  of  dimension  (L2+15)   or
               greater,  where L2 = 2*M if ROWCOL = ('R' or 'r').
               Otherwise, L2 =  2*N.   WSAVE  is  initialized  by
               VCFFTI.