*** JMFFT 8.0 - émulation des FFTs de la SciLib de CRAY - (c) CNRS/IDRIS *** NOM JMSETERREUR - Permet de contrôler le comportement de JMFFT en cas d'erreur SYNTAXE CALL JMSETERREUR(flag) IMPLEMENTATION Il s'agit d'un sous-programme de service de JMFFT. DESCRIPTION La valeur .true. correspond au comportement par défaut : en cas d'erreur JMFFT imprime un message d'erreur et arrête le programme par une instruction STOP. Avec la valeur .false., en cas d'erreur l'exécution continue. Il appartient donc à l'utilisateur de tester le code de retour des appels à JMFFT et de prendre les actions qui s'imposent. ARGUMENTS flag Variable ou constante de type LOGICAL En entrée, il contient la valeur à fournir. Non modifié en sortie. EXEMPLES Le programme suivant contient une erreur : l'utilisateur a fourni une première dimension trop petite pour le tableau Y. INTEGER, PARAMETER :: LDX = 129, NX1 = 128, NX2 = 256 INTEGER, PARAMETER :: LDY = 64, NY1 = 64, NY2 = 256 REAL(KIND=8), DIMENSION(LDX, NX2) :: X COMPLEX(KIND=8), DIMENSION(LDY, NY2) :: Y REAL(KIND=8), DIMENSION(512*NX2) :: WORK REAL(KIND=8), DIMENSION(100+2*(NX1+NX2)) :: TABLE ! ... (Definition de X) CALL SCFFT2D(0, 128, 256, 1.d0, X, 129, Y, 64, TABLE, WORK, 0) CALL SCFFT2D(1, 128, 256, 1.d0, X, 129, Y, 64, TABLE, WORK, 0) ! ... (Impression de Y) A l'exécution, le programme s'arrête après le premier appel à SCFFT2D avec le message suivant : JMFFT Erreur dans SCFFT2D : ldy doit etre >= n/2+1 ( 64 65 ) STOP 1 Voici une variante du même programme où on contrôle l'exécution : (HANDLER est un sous-programme personnel destiné à traiter ces exceptions) INTEGER, PARAMETER :: LDX = 129, NX1 = 128, NX2 = 256 INTEGER, PARAMETER :: LDY = 64, NY1 = 64, NY2 = 256 REAL(KIND=8), DIMENSION(LDX, NX2) :: X COMPLEX(KIND=8), DIMENSION(LDY, NY2) :: Y REAL(KIND=8), DIMENSION(512*NX2) :: WORK REAL(KIND=8), DIMENSION(100+2*(NX1+NX2)) :: TABLE INTEGER :: IRC CHARACTER(LEN=80) :: MESSAGE ! ... (Definition de X) CALL JMSETERREUR(.false.) CALL SCFFT2D(0, 128, 256, 1.d0, X, 129, Y, 64, TABLE, WORK, 0) CALL JMGETCODE(IRC) IF (IRC .NE. 0) THEN CALL JMGETMESSAGE(IRC,MESSAGE) PRINT *,'Code',IRC,', ',TRIM(MESSAGE) CALL HANDLER() END IF CALL SCFFT2D(1, 128, 256, 1.d0, X, 129, Y, 64, TABLE, WORK, 0) ! ... (Impression de Y) A l'exécution, ce programme écrira le message d'erreur suivant : Code 16 , ldy doit etre >= n/2+1 puis entrera dans le sous-programme HANDLER. VOIR AUSSI JMGETCODE, JMGETMESSAGE