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 :

Changement comportement de la fonction 'write' avec autre compilateur


Sujet :

Fortran

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Changement comportement de la fonction 'write' avec autre compilateur
    Bonjour,

    Je développe actuellement un programme qui simule une régulation numérique.
    Le programme calcule à chaque pas de temps des consignes de sortie, mais pour déboguer le programme nous exportons dans un
    fichier .txt les consignes de sortie ainsi que les variables intermédiaires du calcul pour vérifier le bon fonctionnement général.

    au démarrage on crée une unité logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(unit=20,file='c:\test\fichier_debug.txt')
    on écrit les noms des variables pour se repérer plus tard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(20,*) 'var1','var2',..,'varN'
    puis à chaque pas de temps on écrit ligne après ligne les valeurs des variables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(20,*) var1,var2,...,varN
    Initialement je compilais le programme avec 'gfortran' et le format des fichiers était conforme à ce dont nous avions besoin, les valeurs des variables sont toutes écrites sur une même ligne.

    Depuis qqs semaines nous utilisons le compilateur 'intel visual fortran' en mode évaluation 30jours et le format des fichiers .txt n'est plus le même:
    le programme écrit les valeurs numériques pour un pas de temps sur plusieurs lignes:
    var1,var2,...,vark
    vark+1,..,varj,
    varj+1,...,varN
    La question est donc pourquoi ce changement avec le nouveau compilateur et comment faire pour avoir les fichiers sous le même format que précédemment?
    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    L'astérisque dans write(20,*) ne contraint pas le format. Ce dernier est choisi au moment de l'execution.
    Il ne me paraît pas impossible que le comportement diffère selon les architectures et les compilateurs, en particulier si la liste de variables est longue.
    Un exemple de spécification est le suivant : write(20,'(99(1x,es10.3))') var1, [...], varN spécifie le format (pour N=99).

    Il demande pour les 99 variables le pattern "un espace (1x), et un réel en notation scientifique de longueur 10 (comprenant le signe éventuel, le E, l'exposant (deux chiffres), son signe et le point) avec 3 chiffres décimaux" -1234 -> -1.234E+03.
    Pour une chaîne de charactères longue de 10 chars le descripteur est a10.

    Sur une question similaire il y a peu de temps, il y a aussi eu le problème de limitation de la taille de record [ici] sur lequel j'ai tenté d'aider mais n'ai pas réussi. Si la spécification du format ne résoud pas tous vos problèmes, il peut y avoir quelque chose du côté des rcl.

    Cordialement,
    xflr6

    ps:
    On notera que la spécification des formats est sympa pour les sorties, mais peut être dangereuse pour les entrées lorsqu'on ne les contrôle pas soi-même.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut changement comportement fonction write
    Bonjour,

    Effectivement en imposant le format des sorties le problème est corrigé.
    J'ai repris votre idée qui aurait du marcher du premier coup si toutes mes variables étaient des réels, mais il y avait un entier au milieu qui
    a crée un crash lors de l'appel par un autre programme.

    J'ai donc découpé le format en plusieurs parties comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    write(20,'(20(1xE10.3),1xI1,7(1xE10.3) )')
    et la l'écriture dans le fichier texte s'est mise à fonctionner correctement,

    Thanks,

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

Discussions similaires

  1. tri d'1 tableau en fonction d'un autre avec qsort
    Par Invité dans le forum Débuter
    Réponses: 1
    Dernier message: 20/02/2010, 14h11
  2. Réponses: 2
    Dernier message: 31/12/2007, 13h50
  3. Réponses: 4
    Dernier message: 18/12/2006, 21h43
  4. Réponses: 1
    Dernier message: 23/11/2006, 12h22
  5. Comportement fonctions imbriquées avec appel à Xmlhttprequest
    Par eirmag dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/05/2006, 16h10

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