*** JMFFT - émulation des FFTs de la SciLib de CRAY - (c) CNRS/IDRIS ***

NOM

     SINFFTMLT - Applique une Transformée de Fourier rapide (FFT)
                 en sinus à un ensemble donné de vecteurs.

SYNTAXE

     CALL SINFFTFAX(n, ifax, trigs)

     CALL SINFFTMLT(x, work, trigs, ifax, inc, jump, n, m)

IMPLEMENTATION

     Ces sous-programmes ne font pas partie de la SCILIB. Mais comme ils
     sont fondés sur celle-ci, ils ont été intégrés à JMFFT.
     Tous les arguments réels ou complexes doivent être déclarés en
     double précision.

DESCRIPTION

     SINFFTMLT applique une FFT en sinus à un ensemble
     donné de vecteurs. Pour chacun des m vecteurs réels x(j,i),
     j = 1 ... m et i = 1 ... n-1,
     SINFFTMLT calcule le vecteur réel y(j,i) tel que :

              n-1
     y(j,i) = Sum  x(j,k) sin(k*i*pi/n)
              k=1

     pour j = 1 ... m et i = 1 ... n-1.     

ARGUMENTS

     x     Tableau du type REAL(KIND=8) de dimension (n, m). (entrée/sortie)
           En entrée, il contient les éléments à transformer.
           En sortie, il contient les éléments transformés.
           La première dimension doit être au moins égale à n.

           En fait, grâce à l'emploi des arguments inc et jump, le tableau
           x peut être dimensionné de façon différente (voir ci-dessous).

     work  Tableau du type REAL(KIND==8) de dimension 2*m*n + m*(n+2).
           Espace de travail.

     trigs Tableau du type REAL(KIND==8) de dimension 3*n. (entrée)
           Il contient la table des sinus et cosinus.
           L'appel suivant initialise les deux tableaux
           trigs et ifax à la fois :

                CALL SINFFTFAX(n, ifax, trigs)

           Note : Les tableaux ifax et trigs ainsi obtenus peuvent
           être également utilisés, sans besoin de les réinitialiser,
           dans les sous-programmes CFFTMLT et RFFTMLT
           (bien entendu avec la même valeur de n).
           En revanche ils ne peuvent pas être utilisés dans COSFFTMLT.

     ifax  Tableau du type INTEGER de dimension 19.  (entrée)
           Il contient la liste des facteurs premiers de n.

           Il est généré lors de l'appel à SINFFTFAX (voir ci-dessus)

     inc   Scalaire du type INTEGER.  (entrée)
           Le pas de déplacement en nombre d'éléments réels dans chaque
           vecteur à transformer.

     jump  Scalaire du type INTEGER.  (entrée)
           Le déplacement entre les premiers éléments de deux vecteurs
           consécutifs.

     n     Scalaire du type INTEGER. (entrée)
           Longueur de chaque vecteur à transformer. n >= 2.
           n doit être un nombre pair.

     m     Scalaire du type INTEGER. (entrée)
           Le nombre de vecteurs à transformer.

EXEMPLES

     Le programme suivant montre les séquences d'appels à SINFFTFAX et SINFFTMLT
     pour calculer la FFT en sinus du tableau A :

          INTEGER, PARAMETER                    :: n = 16, m = 2
          INTEGER                               :: inc = m, jump = 1
          REAL(KIND=8), DIMENSION(m, n)         :: a
          REAL(KIND=8), DIMENSION(3*n)          :: trigs
          REAL(KIND=8), DIMENSION(2*m*n+m*(n+2) :: work
          INTEGER, DIMENSION(19)                :: ifax
          . . .
          CALL SINFFTFAX(n, ifax, trigs)
          CALL SINFFTMLT(a, work, trigs, ifax, inc, jump, n, m)
          . . .

NOTES

     La transformée en sinus est sa propre inverse, au facteur multiplicatif
     n/2 près.


© CNRS - IDRIS