Bonjour à tous,

J'ai un problème que je n'avais jamais vu jusqu'à maintenant en programmation : la compilation de mon fichier ne s'arrête jamais.

Après quelques tests, j'ai remarqué que c'est en appelant une subroutine en particulier que le problème arrive.

Voici le code problèmatique :

Tout d'abord, le programme principal dans lequel j'appelle la subroutine MATRIXPRODUCT qui semble poser problème (si je mets en commentaire tout appel à cette subroutine, la compilation se passe bien) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
      PROGRAM GIVENS
      IMPLICIT NONE
 
      INTEGER MAXLENGTH, NROWS, NCOLS, I, J
      PARAMETER (MAXLENGTH=10000)
      REAL * 8 MATRIX(MAXLENGTH, MAXLENGTH), 
     +		JACOBI(MAXLENGTH, MAXLENGTH),
     +		TMP(MAXLENGTH, MAXLENGTH)
 
      CALL READMATRIX(MATRIX, NROWS, NCOLS, MAXLENGTH)
 
      DO I=1, NROWS
        DO J=1, NCOLS
          JACOBI(I,J) = 0.0
        END DO
      END DO
 
      DO I=1, NROWS
        JACOBI(I,I) = 1.0
      END DO
 
      DO I=2, NROWS-1
        DO J=I+1, NCOLS
          JACOBI(I,I) = COS(ATAN2(MATRIX(I-1,J), MATRIX(I-1, I)))
          JACOBI(J,J) = COS(ATAN2(MATRIX(I-1,J), MATRIX(I-1, I)))
          JACOBI(J,I) = SIN(ATAN2(MATRIX(I-1,J), MATRIX(I-1, I)))
          JACOBI(I,J) = -SIN(ATAN2(MATRIX(I-1,J), MATRIX(I-1, I)))
          PRINT*, 'GIVENS'
          CALL MATRIXPRODUCT(TRANSPOSE(JACOBI), MATRIX, TMP, NROWS, 
     +     	NCOLS, MAXLENGTH)
          CALL MATRIXPRODUCT(TMP, JACOBI, MATRIX, NROWS, NCOLS, 
     +     	MAXLENGTH)
          JACOBI(I,I) = 1.0
          JACOBI(J,J) = 1.0
          JACOBI(I,J) = 0.0
          JACOBI(J,I) = 0.0
        END DO
      END DO
 
      DO I=1, 4
        DO J=1, 4
          PRINT*, MATRIX(I,J)
        END DO
      END DO
 
      STOP
      END
Ensuite, la subroutine MATRIXPRODUCT qui pose problème (j'ai bien vérifié que ce n'était pas le code dans la subroutine qui posait problème en mettant tout en commentaire sauf les déclarations : même ainsi, la compilation ne s'arrête pas) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
      SUBROUTINE MATRIXPRODUCT(M1, M2, RES, NROWS, NCOLS, MAXLENGTH)
      IMPLICIT NONE
 
      INTEGER MAXLENGTH, NROWS, NCOLS, I, J, K
      REAL * 8 M1(MAXLENGTH, MAXLENGTH), M2(MAXLENGTH, MAXLENGTH),
     +		 RES(MAXLENGTH, MAXLENGTH)
 
      PRINT*, NROWS
      PRINT*, NCOLS
 
      DO I=1, NROWS
        DO J=1, NCOLS
          RES(I,J) = 0.0
        END DO
      END DO
 
      DO I=1, NROWS
        DO J=1, NCOLS
          DO K=1, NROWS
            RES(I,J) = RES(I,J)+M1(I,K)*M2(K,J)
          END DO
        END DO
      END DO
 
      RETURN
      END
La subroutine est dans le même fichier que le programme principal, qui s'appelle givens.f. Je compile avec cette ligne de commande :

gfortran -o givens givens.f

Je précise que je travaille en fortran 77.

J'ai beau regarder dans tous les sens, sur Internet et dans des tutoriels, je ne vois vraiment pas où est le problème

Si quelqu'un a une idée, je l'en remercie d'avance !

Bonne journée à tous.