IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

ALLOCATABLE ARRAY - Des difference entre ifort en gfortran ?


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Par défaut 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 : 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
    _ESSAI_TABLEAU.f____________________

    Et j'obtiens bien en sortie :

    _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
    _results.txt____________________


    Mon 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)
    _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 : 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
    _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.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    Bien sûr qu'elles sont documentées. C'est que tu as écrit du code Fortran 2003 (je crois) alors que ton compilateur ifort ne semble supporter que du Fortran 95. Alors ou bien tu te limites à du Fortran 95, ou bien tu mets à jour ton compilateur ifort.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Par défaut
    @Sylvain Bergeron ?
    Tu m’intéresse beaucoup ! Du coup j'ai deux questions supplémentaires :
    1. Es-tu certain que ces différences sont documentées ? Je ne suis pas suffisamment senior en FORTRAN pour connaître ce genre de "source" définissant les normes d'écriture de FORTRAN.
    2. Es-tu certain pour le fait que l'erreur ne proviendrait que d'un ifort obsolète ?

    Merciiiiiiii si tu as les réponses :-p

    (Ma version Intel Fortran compiler est la 14.0.3.174 de 2013 )
    (Mon GNU Fortran est le 4.9.2 (Debian 4.9.2-10) de 2014)

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Par défaut
    1. C'est probablement écrit ici : https://fortran.developpez.com/cours/fortran-2003/
    2. Le compilateur me semble très récent pour ne pas supporter ça. J'ai trouvé que la version 15 est la première à supporter totalement la norme 2003, mais je n'ai pas trouvé de détails du support par version. Si tu fournissais exactement le message d’erreur, ça aiderait à poser le juste diagnostique.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Par défaut
    Merci pour ta réponse et pour ta source. D'apres ton document, ma version ifort ne serait pas à jour de la norme fortran 2003 qui autorise l'allocation dynamique.
    Je suis étonné parce que ma version ifort date de 2013 et est la version 14.0.3.174 .

    Je continue mes investigations avant d'apporter la réponse définitive et clôturer la discussion.

    Merci encore.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Par défaut
    Merci beaucoup Sylvain Bergeron.

    Le problème provenait d'une option par défaut utilisé sur mon porte de travail ifort.

    Mon erreur était la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     forrtl: severe (408): fort: (8): Attempt to fetch from allocatable variable MAT_I_1 when it is not allocated
    Il est très probable que le ifort de mon poste de travail intel active par défaut l'option suivante : "nostandard-realloc-lhs" .

    En tout état de cause, l'utilisation de l'option : "-assume norealloc_lhs" lors de la compilation de mon exécutable m'a conduit à résoudre le problème.

    Merci encore Sylvain.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Moyenne des differences entre deux dates
    Par sp2308 dans le forum SQLite
    Réponses: 2
    Dernier message: 30/07/2016, 01h10
  2. Chercher des differences entre deux tables
    Par pierre24 dans le forum SAS Base
    Réponses: 2
    Dernier message: 30/07/2008, 14h56
  3. comparer des cellules entre 2 fichiers differents
    Par drabmol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 19/11/2007, 20h25
  4. Différence entre le positionnement relatif et absolu des objets graphiques
    Par pitizone dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 05/04/2007, 13h49
  5. Réponses: 2
    Dernier message: 04/04/2006, 10h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo