Mode d'emploi

Introduction

JMFFT est une bibliothèque de sous-programmes de transformées de Fourier écrite par Jean-Marie Teuler, émulant la plupart des sous-programmes de transformées de Fourier de la bibliothèque Cray (la SCILIB).

JMFFT offre les avantages suivants :

Contenu de JMFFT

On y trouvera les sous-programmes suivants :
Nom Fonction
CCFFT 1D complexe-complexe
CCFFTM 1D multiple complexe-complexe
CCFFT2D 2D complexe-complexe
CCFFT3D 3D complexe-complexe
SCFFT 1D réel-complexe
SCFFTM 1D multiple réel-complexe
SCFFT2D 2D réel-complexe
SCFFT3D 3D réel-complexe
CSFFT 1D complexe-réel
CSFFTM 1D multiple complexe-réel
CSFFT2D 2D complexe-réel
CSFFT3D 3D complexe-réel
CFFTMLT 1D multiple complexe-complexe
RFFTMLT 1D multiple complexe-réel et réel-complexe
SINFFTMLT 1D multiple en sinus
COSFFTMLT 1D multiple en cosinus
CFTFAX Factorisation pour CFFTMLT
FFTFAX Factorisation pour RFFTMLT

Outre ces sous-programmes de premier niveau, il existe également des sous-programmes de second niveau, appelés par les précédents.

Il existe également certains sous-programmes de service qui peuvent être intéressants à appeler :

Nom Fonction
JMSETNWORK Contrôle de l'espace de travail
JMSETERREUR Contrôle du comportement en cas d'erreur
JMGETCODE Récupération du code d'erreur
JMGETMESSAGE Récupération du message d'erreur

Pour une discussion de l'intérêt et de l'utilisation de ces sous-programmes, voir ci-dessous.

Restrictions

Contrôle de JMFFT

Il existe dans JMFFT des sous-programmes de service qui permettent de contrôler son comportement.
  1. JMSETNWORK
    Ce sous-programme permet de contrôler plus finement l'espace de travail dont disposeront les sous-programmes 2D et 3D. En effet, dans la SCILIB, le tableau de travail WORK doit être dimensionné à 512*MAX(N1,N2) en 2D et à 512*MAX(N1,N2,N3) en 3D. Avec une telle dimension, la longueur des boucles dans les sous-programmes de calcul est de 128, ce qui est optimal en effet sur les C90. En revanche, une telle longueur de boucle est loin d'être optimale sur un Fujitsu VPP300 ou sur un NEC SX-5 par exemple. JMSETNWORK permet de fournir plus d'espace de travail à JMFFT, et donc d'obtenir de meilleures performances. Son utilisation est très simple. Par exemple dans l'appel suivant :
      call jmsetnwork(4096)
    
    on fournit 4096 éléments d'espace de travail à JMFFT.
    Notes :

  2. JMSETERREUR
    Les sous-programmes de JMFFT vérifient la cohérence des arguments transmis. Lorsqu'ils détectent une incohérence, le comportement par défaut est alors de tout arrêter en affichant un message d'erreur et en déclenchant une instruction STOP. Ce comportement est imposé par la compatibilité avec la SCILIB qui n'a prévu aucun argument de type code de retour, comme celui que l'on trouve par exemple dans NAG et IMSL. Ceci dit, on peut le modifier légèrement. Si on effectue l'appel suivant :
      call jmseterreur(.false.)
    
    en cas d'erreur l'exécution n'est pas interrompue. Voir ci-dessous les deux sous-programmes qui permettent de vérifier si une erreur s'est produite et si oui laquelle.

  3. JMGETCODE
    Si l'on a effectué l'appel précédent, en cas d'erreur l'exécution se poursuit. C'est donc à l'utilisateur de vérifier, après chaque appel de JMFFT, si une erreur s'est produite. Ceci peut se faire de la façon suivante :
      call jmgetcode(irc)
    
    irc est une variable entière qui contient le code de retour du dernier appel à JMFFT. Si ce code est nul, c'est que tout s'est bien passé. Sinon, une erreur a été détectée. Pour savoir laquelle, voir ci-dessous.

  4. JMGETMESSAGE
    Si une erreur s'est produite et que l'on a obtenu le code d'erreur irc par appel de JMGETCODE, on peut récupérer le message d'erreur correspondant par l'appel suivant :
      call jmgetmessage(irc, message)
    
    message est une variable de type chaîne de caractères qui contiendra au retour le texte en clair du message d'erreur.