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) :
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
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
La subroutine est dans le même fichier que le programme principal, qui s'appelle givens.f. Je compile avec cette ligne de commande :
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
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.
Partager