ALLOCATABLE ARRAY - Des difference entre ifort en gfortran ?
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____________________
Code:
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 |
_ESSAI_TABLEAU.f____________________
Et j'obtiens bien en sortie :
_results.txt____________________
Code:
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 |
_results.txt____________________
Mon Makefile :
_Makefile____________________
Code:
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) |
_Makefile____________________
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____________________
Code:
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 |
_ESSAI_TABLEAU.f____________________
Est-ce que vous êtes au courant de ce genre de "petite" différences bien ennuyante. Sont-elles documentés quelques part ?
Merci beaucoup.