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 :

Problème fortran 90


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Problème fortran 90
    Bonjour,

    j'ai un petit soucis avec un programme écrit en fortran 90. Ce problème tourne sans soucis sous UNIX (HP). Je tente de le compiler sous linux à l'aide de gfortran (GNU Fortran 95 compiler).


    J'ai deux types d'erreur liées d'une part à un format d'entier (I), d'autre part à un format de réel (F) :

    Erreur (une seule erreur) et warning (plusieurs warnings) sur le format d'entier :

    Error: Nonnegative width required in format string at (1)
    In file sigma.f:102

    read(lint(1:4), '(I)', end=101)FScvt(Lcvt)

    Warning: Nonnegative width required in format string at (1)
    In file sigma.f:103

    read(lint(5:5), '(I)', end=101)Pcvt(Lcvt)


    Warning (un seul warning) sur le format de réel :

    Warning: Nonnegative width required in format string at (1)
    In file sigma.f:134

    read(lint(15:20), '(F)', end=101)Ccvt(Lcvt)


    J'ai réussi à compiler mon programme à l'aide des solutions trouvées sur le net:

    Remplacement de I par I0
    Remplacement de F par F1.4 (qui correspond au format de mes nombres réels positifs et négatifs)

    Exécution du programme

    J'obtiens une seule erreur liée à la seule Erreur présentée plus haut:

    At line 102 of file sigma_linux.f
    Fortran runtime error: Positive width required in format
    (I0)


    Quelqu'un a t il une idée pour résoudre ce problème ?

    Merci d'avance pour votre aide!

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    Il faut préciser dans le format, le nombre de caractères à prendre en compte pour lire la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    read(lint(1:4), '(I4)', end=101)FScvt(Lcvt)
    read(lint(5:5), '(I1)', end=101)Pcvt(Lcvt)
    Il est plus simple de laisser le format libre à la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    read(lint(1:4), *, end=101)FScvt(Lcvt)
    read(lint(5:5), *, end=101)Pcvt(Lcvt)

  3. #3
    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
    Points : 1 346
    Points
    1 346
    Par défaut
    Citation Envoyé par __dardanos__ Voir le message
    ... Il est plus simple de laisser le format libre à la lecture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    read(lint(1:4), *, end=101)FScvt(Lcvt)
    read(lint(5:5), *, end=101)Pcvt(Lcvt)
    Dans sa tentative avec F1.4, Cruz_Castillo voulait probablement dire F4.1, soit Flongueur.décimales

    Il y a 2 différences entre la lecture avec le format F4.1 et en format libre * :
    • S'il n'y a pas de point explicite dans la chaîne (ex:1234), F4.1 retournera 123,4 alors que le format libre retournera 1234,0
    • S'il y a un mauvais caractère dans la chaîne, le format explicite produira une erreur alors que le format libre lira jusqu'au mauvais caractère sans retourner d'erreur
    Pour ces raisons, il est généralement préférable d'utiliser un format explicite, surtout si on connait facilement la largeur à lire.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Juin 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 17
    Points : 14
    Points
    14
    Par défaut
    Merci pour votre aide!

    @__dardanos__

    Concernant les entiers, j'ai effectivement précisé le 'w' adéquat. Impeccable!

    @Sylvain Bergeron

    Effectivement je m'étais trompé. Je devais écrire F4.1.

    Le programme tourne sans erreurs (enfin à l'exception de celles prévues dans mon code, mais ça c'est une autre histoire )

    Merci encore!

    Cédric

Discussions similaires

  1. Réponses: 8
    Dernier message: 24/11/2006, 12h07
  2. Problème en interfacant C et Fortran
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 23/05/2006, 16h10
  3. [Fortran 90] Problème de fmt
    Par Nours87 dans le forum Fortran
    Réponses: 16
    Dernier message: 12/01/2006, 19h29
  4. Réponses: 8
    Dernier message: 01/06/2005, 09h45
  5. [Fortran 77] Problème de compilation
    Par Kenji dans le forum Fortran
    Réponses: 26
    Dernier message: 23/05/2005, 16h07

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