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 :

Evaluer des variables d'un programme fortran tournant sous Ubuntu


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Evaluer des variables d'un programme fortran tournant sous Ubuntu
    Bonjour à tous,

    Déjà j'espère ne pas m'être trompé de rubrique pour poser ma question, déplacez sans mon problème mon topic si c'est le cas.

    Alors voilà j'utilise Fortran sous Ubuntu pour poser le contexte.

    Je compile deux fichiers sources de façon groupée (via la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gfortran -o nom_executable.exe fichier1.for fichier2.for
    )

    Jusque là tout va bien. Néanmoins, pour les besoins de mon travail, j'ai besoin d'évaluer la valeur de certaines variables "intermédiaires".

    Il y a 3 types de variables :
    1) les données initiales qu'on injecte au programme lors de la saisie de la commande
    2) les variables de sortie qui sont écrites dans un fichier à l'extension .dat
    3) les variables "intermédiaires", qui sont utilisées dans les nombreux calculs.

    Comment afficher la valeur de ces variables intermédiaires sur le terminal svp ?

    J'espère que ma question ne paraît pas trop bête !

    Merci pour toute réponse susceptible de m'éclairer...

    Cordialement.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Normalement, ceci peut être fait à l'aide de l'instruction PRINT*,Variable.

    '*' pouvant être remplacée par un format d'écriture suivant ce que tu souhaites afficher à l'écran, ou non. (*=format par défaut, pas pratique pour afficher des tableaux en somme)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour à toi,
    Merci de ta réponse.

    L'une de ces variables s'appelle mth (pour month, et c'est un entier)

    J'ai une erreur suivant tous mes essais.

    1)
    qui renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Warning: unknown mime-type for "int," -- using "application/octet-stream"
    Warning: unknown mime-type for "mth" -- using "application/octet-stream"
    Error: no such file "int,"
    Error: no such file "mth"
    On dirait que mth est considéré comme un fichier alors que ce n'est qu'une variable dans le programme

    2)
    qui renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Warning: unknown mime-type for "mth" -- using "application/octet-stream"
    Error: no such file "mth"
    La même chose...

    Et avec une virgule, c'est encore pire.


    En fait pour l'*, je suis pas sûr d'avoir compris ce que tu entendais par format d'écriture...

    Désolé, je suis vraiment débutant en Fortran lol...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Essayes en mettant PRINT*,mth

    L'*' signifie que tu demandes au programme d'envoyer la variable dans son format par défaut (si c'est un entier, il affichera un entier, si c'est un réel, un réel, ...). Cela étant, pour voir les tableaux, ce format (l'*) n'est pas optimisé. Si tu souhaites afficher un tableau, je te conseilles de recourir à la syntaxe: PRINT'(NMP)' où N correspond au nombre de colonnes de ton tableau, M le type de ta variable (i pour integer, f pour real, a pour character, ...) et P le nombre de caractère que tu alloues pour ta représentation. (ie: si j'ai un tableau comprenant 12 colonnes dont l'un des nombre est 10000, le tableau étant entier, alors ma syntaxe sera: PRINT'(12i10)': 12: nombre de colonnes, i pour integer, 5 pour représenter mon nombre le plus grand [composé de 5 chiffres] et 5 pour laisser des espaces lors de l'affichage)

    Note: les signes comptes aussi comme un caractère à afficher: si je veux afficher -10000 alors il me faudra au moins 6 caractères pour l'exemple ci-dessus, ce qui me laissera un espace de 10-6=4 caractères entre chaque nombres.

    En espérant avoir été plus clair,

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci beaucoup pour ta réponse.

    En fait j'y suis parvenu par un autre moyen avant de te lire, grâce à la fonction WRITE qui écrit dans un fichier.dat.

    Maintenant, tu fais bien d'aborder le sujet du format du résultat, puisque je bute encore un peu sur cet aspect.

    J'appelle un fichier repéré par le nombre 17 (ce qui s'appelle l'unit dans la terminologie du fortran), et je veux y écrire la valeur d'une variable intermédiaire nommée foE. Cette variable est un réel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          write(17,*)
         & ' frequence foE',
         &  foE
    donne en sortie, dans le fichier .dat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frequence foE  3.3933489671083619
    Pas moyen de réduire le nombre de chiffres significatifs ! Je suis perdu dans la doc en anglais, ce n'est pas bien clair. Je voudrais bien 6 chiffres après la virgule. (Car mon but est de comparer le foE retourné par Fortran au foE retourné par un logiciel en C qui comprend 6 chiffres).

    Et je dois aussi afficher avec cette fonction WRITE un tableau de 6 réels définis par
    dimension BB(6), là je suis perdu...

    Je suis pas encore arrivé à trouver une source internet expliquant vraiment de façon claire la façon dont ce format est codée.
    Là rien qu'avec ton petit exemple ça m'a un peu éclairé... Alors d'après le format NMP ce serait du 6f12, vu qu'il y a 6 colonnes, que ce sont des réels, et qu'il y a 3 chiffres dans la partie entière et 6 après la virgule. (sans compter les espaces de "sécurité")...

    Désolé si je manque de clarté, en tout cas merci pour ta patience.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    Pour les formats réels, il est nécessaire de comptabiliser le '.' ainsi que les chiffres après la virgule (ou le . le cas échéant). Sachant que le '.' compte lui même pour un des caractères.

    En gros, si tu veux afficher/écrire en format réel en contrôlant ce que tu vois, dans ton exemple il faudrait prendre:

    PRINT'(6f20.6)',BB

    Alors tu afficherait un tableau 6 colonnes, à 20 caractères réservés mais avec 6 chiffres après la virgule.

    Pour avoir un aperçu plus complet sur les formats, de nombreux cours sur FORTRAN90 sont disponibles sur Internet.
    Quelques liens:
    http://docs.google.com/viewer?a=v&q=...SI7bQfYA&pli=1

    http://docs.google.com/viewer?a=v&q=...1PA-XUKBycXNXg

    http://docs.google.com/viewer?a=v&q=...VPcLHJhqVU8jZQ

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Merci, j'y suis enfin arrivé !

    Maintenant, toute petite question qui vaut pas le coup d'ouvrir un topic.

    Les comparateurs "lt" et "gt" désignent quel genre d'inégalités : des strictes ou des supérieures (resp. inférieures) ou égales ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 152
    Points : 191
    Points
    191
    Par défaut
    LT=Less than (<)
    GT=Greater than (>)

    Cf ce lien pour la liste des comparateurs:

    http://www.tat.physik.uni-tuebingen....l/logical.html

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    (Merci pour la réponse plus haut)

    En fait même si j'ai résolu mon problème, j'ai toujours des soucis dans la même lignée.

    Le fil rouge de mon étude consiste à comparer toutes les variables intermédiaires ressorties par Fortran à toutes celles renvoyées par un code écrit en C. Alors le C, je maîtrise un peu mais le Fortran c'est une autre paire de manche, je dois me former pratiquement sur le tas !

    D'où une nouvelle question car là je bloque vraiment.

    Je veux renvoyer la valeur de z(1), z(2), z(3), z(4), où z est introduit par dimension z(4) dans une fonction mineure du programme utilisée une unique fois.

    Le souci est que cette variable z semble encore ""plus intermédiaire"" que les précédentes que j'ai comparées, elle n'est même pas comprise dans le return de la fonction qui l'appelle (ce qui fait échouer le schmilblick je crois).

    En erreur de compilation, j'ai "Empty set of digits in BOZ constant"...
    (Je n'ai pas la moindre idée de ce que signifie BOZ...)

    Alors j'ai essayé d'appliquer la stratégie qui marche en C, à savoir passer une variable locale détruite à la fin d'une fonction en une variable globale qu'on peut "printer" partout... mais j'ai l'impression que ça ne marche pas, ou c'est moi qui m'y prends mal.

    Merci à toute personne qui pourra un peu me débloquer.
    Je sais que c'est un peu obscur et c'est pas facile quand on a pas le code sous les yeux mais bon...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/02/2015, 13h30
  2. Réponses: 2
    Dernier message: 24/03/2009, 17h37
  3. choix des programmes de démarrage sous ubuntu 8.10
    Par supzero dans le forum Gnome
    Réponses: 5
    Dernier message: 13/02/2009, 19h15
  4. Affichage des variables d'un programme asm
    Par fgh39 dans le forum x86 32-bits / 64-bits
    Réponses: 2
    Dernier message: 13/05/2008, 06h16
  5. Programmation en C sous Ubuntu
    Par doothee dans le forum Linux
    Réponses: 20
    Dernier message: 18/07/2006, 17h19

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