CFFTS,ZFFTS(3)              MathKeisan FFT routine              CFFTS,ZFFTS(3)



NAME
       cffts, zffts - simultaneous one-dimensional fft - complex storage mode.
       (OpenMP Parallel Support).

SYNOPSIS
       libfft.a

          INTEGER   l, incl, n, incn, iopt, ier
          COMPLEX   z(lenz)
          CALL CFFTS (z, l, incl, n, incn, iopt, ier)

          INTEGER   l, incl, n, incn, iopt, ier
          COMPLEX(kind=8)     z(lenz)
          CALL ZFFTS (z, l, incl, n, incn, iopt, ier)

       libfft_64.a

          INTEGER(kind=8)     l, incl, n, incn, iopt, ier
          COMPLEX(kind=8)     z(lenz)
          CALL CFFTS (z, l, incl, n, incn, iopt, ier)

          INTEGER(kind=8)     l, incl, n, incn, iopt, ier
          COMPLEX(kind=8)     z(lenz)
          CALL ZFFTS (z, l, incl, n, incn, iopt, ier)

DESCRIPTION
       Given a number of sets of one-dimensional complex  data  in  a  complex
       array, these subprograms simultaneously compute all of their one-dimen-
       sional forward or inverse discrete Fourier transforms  using  a  mixed-
       radix fast Fourier transform (FFT) algorithm.

       A  pair  of  companion  subprograms, SFFTS and DFFTS, performs the same
       operation, but with the complex data presented with real and  imaginary
       parts in separate real arrays.

       Other subprograms are more suited for computing just one transform.

       Set  the OpenMP environmental variable OMP_NUM_THREADS to the number of
       threads you would like to use.


ARGUMENTS
       Input

       z      Array containing n data sets, each consisting of l data  points,
              to  be transformed.  Typically, z will be a two- or three-dimen-
              sional array with each set of data being a one-dimensional array
              section.   Refer  to ``Notes'' for suggested usages.  Treating z
              as a one-dimensional array results in

                      lenz = (l-1)*incl + (n-1)*incn + 1.

              The i-th data point of the j-th data set, 1 <= i <= l, 1 <= j <=
              n, is stored in

                      z((i-1)*incl + (j-1)*incn + 1).

       l      Number of data points in each data set (l>0).

       incl   Storage  increment  between successive elements of the same data
              set, incl > 0.  Use incl = 1 if each data set is stored contigu-
              ously in array z.

       n      The number of data sets, n > 0.

       incn   Storage  increment  between corresponding data points of succes-
              sive data sets, incn > 0.

       iopt   Option flag:


              iopt >=   0    Compute forward transform.
              iopt <    0    Compute inverse transform.

       Output

       z      The transformed data replaces the input if ier = 0 is  returned.
              Unchanged if ier < 0.

       ier    Status response:


              ier  =    0    Normal return - transform successful.
              ier  =    -2   incl <= 0.
              ier  =    -3   n <= 0.
              ier  =    -4   incn <= 0.
              ier  =    -5   l, incl, n, and incn are incompatible.
                             Refer to ``Notes.''

NOTES
       Typically, z will be a two- or three-dimensional array with each set of
       data being a one-dimensional section of the array, i.e.,  all  but  one
       subscript  will  be  constant  within a data set.  If z is a two-dimen-
       sional array of dimension ldz by mdz, and if the data sets  are  stored
       in the columns of z, l <= ldz, n <= mdz, incl = 1, and incn = ldz.  For
       example, use

               CALL CFFTS (z, l, 1, n, ldz, iopt, ier)

       If z is a two-dimensional array as above and data sets  are  stored  in
       rows  of z, l <= mdz, n <= ldz, incl = ldz, and incn = 1.  For example,
       use

               CALL CFFTS (z, l, ldz, n, 1, iopt, ier)

       If z is a three-dimensional array of dimension ldz by mdz by ndz,  then
       incl and incn will usually be 1, ldz, or ldz*mdz, depending on which of
       the subscripts of the three-dimensional array varies within a data set,
       which  subscript  varies between data sets, and which remains constant.
       Specifically, if the subscript that varies within a data set is the


               1st  subscript, use incl = 1.
               2nd  subscript, use incl = ldz.
               3rd  subscript, use incl = ldz*mdz.

       Similarly, if the subscript that varies between data sets is the


               1st  subscript, use incn = 1.
               2nd  subscript, use incn = ldz.
               3rd  subscript, use incn = ldz*mdz.

       l, incl, n, and incn must be such that no two points of any  data  sets
       occupy  the same element of z.  These subprograms detect this situation
       and return ier = -5 if

               incl < n * gcd(incl,incn)

       and

               incn < l * gcd (incl,incn)

       where gcd (.,.) is the greatest common divisor.



MLIB routine                                                    CFFTS,ZFFTS(3)