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 :

Syntaxe Vieux FORTRAN


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Par défaut Syntaxe Vieux FORTRAN
    Bonjour A Tous

    J'ai un probleme avec un "vieux" fichier FORTRAN (dévellopé sur une plateforme VAX avec VAX/FORTRAN).....

    A priori, je suis parvenu a le convertir pour le compilateur gfortran...

    mais il me reste une ligne de commande qui est totalement incomprehensible pour moi, (qui suis totalement novice en FORTRAN) et pour le compilateur ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    !    WRITE(3,'(A8,I8,8X,6I8,''+'',<int((ndof1*2-6)/8.)> 
    !    (/''+       '',8I8,''+''),
    !    /''+      '',<ndof1*2-6-int((ndof1*2-6)/8.)*8>I8,
    !    T73,''+'')')'GENEL  ',iel,((dof1(j,k),j=1,2),k=1,ndof1)
    !      WRITE(3,'(''TEST'')')
    !      PRINT*,A8,I8,8X,6I8,((int((ndof1*2-6)/8.)) )
    !     &(/''+       '',8I8,''+''),&
    !     &/''+      '',(ndof1*2-6-int((ndof1*2-6)/8.)*8)I8,&
    !     &T73,''+'')')'GENEL  ',iel,((dof1(j,k),j=1,2),k=1,ndof1)
    Je pense que le probleme est juste une erreur de syntaxe, mais si quelq'un pouvai me donner un petit coup de main, ....

    Merci par avance

  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
    Le problème vient d'une extension (toujours présente d'ailleurs dans le compilateur Intel). Les bouts "<expression>" dans les formats sont remplacés par leur valeur numérique à l'exécution. Pour contourner le problème, tu dois construire le format dans une variable caractère, puis utiliser le format construit pour écrire.

    Le premier write :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        WRITE(3,'(A8,I8,8X,6I8,''+'',<int((ndof1*2-6)/8.)> 
        (/''+       '',8I8,''+''),
        /''+      '',<ndof1*2-6-int((ndof1*2-6)/8.)*8>I8,
        T73,''+'')')'GENEL  ',iel,((dof1(j,k),j=1,2),k=1,ndof1)
    devient donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        character (256) :: MonFmt
        ...    
    !   Construction du format par un write interne
        write(MonFmt,'(a,i0,a,i0,a)') '(A8,I8,8X,6I8,''+''', &
           int((ndof1*2-6)/8.), &
           ' (/''+       '',8I8,''+''),/''+      '',', &
           ndof1*2-6-int((ndof1*2-6)/8.)*8, &
           'I8,T73,''+'')'
     
    !   Utilisation du format
        WRITE(3,MonFmt) 'GENEL  ',iel,((dof1(j,k),j=1,2),k=1,ndof1)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Par défaut
    Merci beaucoup pour la réponse,

    a priori, le compilateur a bien "digérer" la solution, par contre j'ai essaye de reproduire la solution sur la deuxième (et dernière) ligne de code qui me résiste, ... mais sans succès,

    voici la ligne de code initiale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    !       WRITE(3,'(''+*  K   '',3E16.6,''+'',/, &
    !      &<int((nodf1**2/2.+ndof1/2.-3)/4.)>(''+*  '',4E16.6,''+'',/), &
    !      &''+*  '',(<int(ndof1**2/2.+ndof1/2.-3-int((ndof1**2/2.+ &
    !      &ndof1/2.-3)/4.)*4)>E16.6)') &
    !      &(mat1(k),k=1,int(ndof1**2/2.+ndof1/2.))
    et ma tentative de traduction ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    character (3000) :: MonFmt2
    ...
    ! Mon deuxieme formatage
         write (MonFmt2,'a,i0,a,a,i0')  '(''+*  K   '',3E16.6,''+'',/,&
         &',int((nodf1**2/2.+ndof1/2.-3)/4.),'&
         &(''+*  '',4E16.6,''+'',/), &
         &''+*  '',(',int(ndof1**2/2.+ndof1/2.-3-int((ndof1**2/2.+ &
         &ndof1/2.-3)/4.)*4),'E16.6)'
    ! a utiliser avec :
         WRITE(3,MonFmt2) (mat1(k),k=1,int(ndof1**2/2.+ndof1/2.))
    Mais à priori ... cela ne plais pas a mon deuxième compilateur préferé

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 52
    Par défaut
    A mon avis l'erreur est dans (MonFmt2,'a,i0,a,a,i0') je pense qu'il faut mettre (MonFmt2,'a,i0,a,i0,a')

  5. #5
    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
    Je n'ai pas vérifié et je n'ai pas le temps, mais à coup sûr, le format doit être entre parenthèses : (MonFmt2,'(a,i0,a,i0,a)')

    La même règle s'applique pour le format construit : il doit contenir des parenthèses au début et à la fin.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 34
    Par défaut
    Je progresse ....
    c'étais bien un probleme de parenthese, le compilateur accepte bien la modification.
    Pour memoire le code source
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ! Mon deuxieme formatage
          write (MonFmt2,'(a,i0,a,i0,a)')  '(''+*  K   '',3E16.6,''+'',/,&
         &',int((nodf1**2/2.+ndof1/2.-3)/4.),'&
         &(''+*  '',4E16.6,''+'',/), &
         &''+*  '',(',int(ndof1**2/2.+ndof1/2.-3-int((ndof1**2/2.+ &
         &ndof1/2.-3)/4.)*4),'E16.6)'
    ! a utiliser avec :
     
          WRITE(3,MonFmt2) (mat1(k),k=1,int(ndof1**2/2.+ndof1/2.)

    par contre je n'ai pas du bien traduire le code, lors de l'execution de mon ".exe", j'ai le probleme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    At line 164 of file genelm.f90 (Unit 3 "Ferrure_A-8_2D_Geo.bdf.GEN")
    Traceback: not available, compile with -ftrace=frame or -ftrace=full
    Fortran runtime error: Expected P edit descriptor in format
    ('+*  K   ',3E16.6,'+',/,-244668376('+*  ',4E16.6,'+',/), '+*  ',(2E16.6)
     
                                       ^
    j'ai essayer de compiler avec l'option specifié, mais pas de solution ....
    pour info, la ligne 164 correspond a la commande write....
    Quelq"un a une idee ??? et encore merci beaucoup pour toutes vos reponses

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

Discussions similaires

  1. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53
  2. Syntaxe requete
    Par Chipolata dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2003, 14h22
  3. [Syntaxe] Action simultanée sur plusieurs élements
    Par FranT dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/03/2003, 20h20
  4. Syntaxe TASM <-> MASM
    Par LFC dans le forum Assembleur
    Réponses: 3
    Dernier message: 28/02/2003, 15h56
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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