*** JMFFT 8.1 - é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.