Bonjour.
je rencontre des problèmes sur des tableaux allouable selon que je compile le même code avec gfortran ou ifort.
Mon but est en faite de réaliser des sections de tableaux.
Cette différence vous est-elle connu ?
Sous GNU j'ai fait :
_ESSAI_TABLEAU.f____________________
_ESSAI_TABLEAU.f____________________
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 PROGRAM ESSAI_TABLEAU CHARACTER(11) :: NOMFICH = 'results.txt' IMPLICIT NONE INTEGER :: I INTEGER, DIMENSION(:) , ALLOCATABLE :: MAT_I_1 MAT_I_1=(/ (i,i=1,10) /) OPEN(UNIT=NUMFICH, FILE=NOMFICH, & FORM='FORMATTED',STATUS='REPLACE') print *, '--------------' print *, 'ESSAI_TABLEAU_DEBUT ' print *, 'MAT_I_1', MAT_I_1 print *, 'ESSAI_TABLEAU_FIN ' MAT_I_1=MAT_I_1((/ (i,i=3,8) /)) print *, '--------------' print *, 'MAT_I_1', MAT_I_1 CLOSE(NUMFICH) END PROGRAM ESSAI_TABLEAU
Et j'obtiens bien en sortie :
_results.txt____________________
_results.txt____________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 -------------- ESSAI_TABLEAU_DEBUT MAT_I_1 1 2 3 4 5 6 7 8 9 10 ESSAI_TABLEAU_FIN -------------- MAT_I_1 3 4 5 6 7 8
Mon Makefile :
_Makefile____________________
_Makefile____________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 # FC = the compiler to use FC=gfortran # flags for debugging or for maximum performance, comment as necessary FCFLAGS = -g -fbounds-check #FCFLAGS = -O2 # List of executables to be built within the package PROGRAMS = ESSAI_TABLEAU # "make" builds all all: $(PROGRAMS)
Sous ifort ce programme ne fonctionne pas du tout !
On ne peut pas réaliser l'allocation et l'initialisation en une seule étape à la volé comme je l'ai fait à la ligne 9, ni réaliser de section de tableau directement dans le même tableau comme je l'ai fais à la ligne 19. Je suis obligé d'écrire :
_ESSAI_TABLEAU.f____________________
_ESSAI_TABLEAU.f____________________
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 PROGRAM ESSAI_TABLEAU CHARACTER(11) :: NOMFICH = 'results.txt' IMPLICIT NONE INTEGER :: I INTEGER, DIMENSION(:) , ALLOCATABLE :: MAT_I_1 , TEMP ALLOCATE(MAT_I_1(10)) ALLOCATE(TEMP(10)) MAT_I_1=(/ (i,i=1,10) /) OPEN(UNIT=NUMFICH, FILE=NOMFICH, & FORM='FORMATTED',STATUS='REPLACE') print *, '--------------' print *, 'ESSAI_TABLEAU_DEBUT ' print *, 'MAT_I_1', MAT_I_1 print *, 'ESSAI_TABLEAU_FIN ' TEMP = MAT_I_1 DEALLOCATE(MAT_I_1) ALLOCATE(MAT_I_1(6)) MAT_I_1=TEMP((/ (i,i=3,8) /)) DEALLOCATE(TEMP) print *, '--------------' print *, 'MAT_I_1', MAT_I_1 CLOSE(NUMFICH) END PROGRAM ESSAI_TABLEAU
Est-ce que vous êtes au courant de ce genre de "petite" différences bien ennuyante. Sont-elles documentés quelques part ?
Merci beaucoup.
Partager