SFFTS,DFFTS(3)              MathKeisan FFT routine              SFFTS,DFFTS(3)



NAME
       sffts,  dffts  -  simultaneous one-dimensional FFT - real storage mode.
       (OpenMP Parallel Support).

SYNOPSIS
       libfft.a

          INTEGER   l, incl, n, incn, iopt, ier
          REAL      x(lenxy), y(lenxy)
          CALL SFFTS (x, y, l, incl, n, incn, iopt, ier)

          INTEGER   l, incl, n, incn, iopt, ier
          REAL(kind=8)   x(lenxy), y(lenxy)
          CALL DFFTS (x, y, l, incl, n, incn, iopt, ier)

       libfft_64.a

          INTEGER(kind=8)     l, incl, n, incn, iopt, ier
          REAL(kind=8)   x(lenxy), y(lenxy)
          CALL SFFTS (x, y, l, incl, n, incn, iopt, ier)

          INTEGER(kind=8)     l, incl, n, incn, iopt, ier
          REAL(kind=8)   x(lenxy), y(lenxy)
          CALL DFFTS (x, y, l, incl, n, incn, iopt, ier)

DESCRIPTION
       Given a number of sets of one-dimensional complex data  with  the  real
       and  imaginary parts in separate real arrays, these subprograms compute
       all of their one-dimensional forward or inverse discrete Fourier trans-
       forms using a mixed-radix fast Fourier transform (FFT) algorithm.

       A  pair  of  companion  subprograms, CFFTS and ZFFTS, performs the same
       operation, but with the complex data presented in a complex array.

       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

       x and y
              Arrays containing n data sets, each consisting of l data points,
              to be transformed.  Typically, x and y will be  two-  or  three-
              dimensional  arrays  with  each data set being a one-dimensional
              array section.  Refer to ``Notes'' for suggested usages.

              Treating x and y as one-dimensional arrays results in

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

              The real and imaginary parts of the i-th data point of the  j-th
              data set, 1 <= i <= l, 1 <= j <= n, are stored in

                      x((i-1)*incl + (j-1)*incn + 1)

              and

                      y((i-1)*incl + (j-1)*incn + 1),

              respectively.

       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 arrays x and y.

       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

       x and y
              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,  x  and y will be two- or three-dimensional arrays with each
       data set being a one-dimensional section of the arrays, i.e.,  all  but
       one  subscript will be constant within a data set.  If x and y are two-
       dimensional arrays of dimension ldxy by mdxy, and if the data sets  are
       stored  in  the columns of x and y, l <= ldxy, n <= mdxy, incl = 1, and
       incn = ldxy.  For example, use:

               CALL SFFTS (x, y, l, 1, n, ldxy, iopt, ier)

       If x and y are two-dimensional arrays as above and data sets are stored
       in  rows  of  x and y, l <= mdxy, n <= ldxy, incl = ldxy, and incn = 1.
       For example, use:

               CALL SFFTS (x, y, l, ldxy, n, 1, iopt, ier)

       If x and y are three-dimensional arrays of dimension ldxy  by  mdxy  by
       ndxy, then incl and incn will usually be 1, ldxy, or ldxy*mdxy, depend-
       ing 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 = ldxy.
               3rd  subscript, use incl = ldxy*mdxy.

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


               1st  subscript, use incn = 1.
               2nd  subscript, use incn = ldxy.
               3rd  subscript, use incn = ldxy*mdxy.

       l,  incl,  n, and incn must be such that no two points of any data sets
       occupy the same elements of x and y.   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                                                    SFFTS,DFFTS(3)