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

C Discussion :

erreur fonction write


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur calcul
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Par défaut erreur fonction write
    Bonjour,

    je travaille sur un code qui comporte des fonctions C et fortran. A l'aide d'une fonction write (appelée à la ligne 61 de la fonction suivante), je souhaite continuer l'écriture d'un fichier. Voici la fonction:

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
               subroutine ecrcont(uncont,iele,ipts,icou,iptz,ncomp,
         &     sigkir,epslag,err)
    ce
    ce Appele par : celiso, sauvnc, sauvcv
    ce ----------
    ce Objet : ecriture des contraintes et des deformations sur fichier
    ce -----
    ce
    ce ..........................................................................
    ce
    ce Entree :
    ce ------
    ce    uncont : numero d'unite du fichier des contraintes
    ce    ncomp  : numero du type de la loi de comportement (0 --> fin de fichier)
    ce    sigkir() : contraintes de Kirchhoff
    ce    epslag() : deformations de Green
    ce
    ce Sortie : err  : indicateur d'erreur
    ce ------
    ce
    ce Erreurs :
    ce -------
    ce
    ce ..........................................................................
    ce
          implicit none
    c
    c --- variables globales ---
    c     ------------------
          include 'message.dec'
    c
    c --- Arguments d'entree ---
    c     ------------------
          integer uncont
          integer ncomp
          integer iele,ipts,icou,iptz
          real*8 sigkir(6),epslag(6)
    c
    c --- Arguments de sortie ---
    c     -------------------
          integer err
    c
    c --- variables locales ---
    c     -----------------
          integer i,ios
          character *10 routine
          character *80 fic
    c
    c --- sous-programmes appeles ---
    c     -----------------------
          external damxmess, damsvc
     
          err=0
          routine='ecrcont'
    c
    c
    ci    ce format n'est plus util en binaire
    ci    garder pour info
    ci12    format(i7,12(1x,e15.8),4(1x,i7))
          write(uncont,err=29,iostat=ios) ncomp,
         &     (sigkir(i),i=1,6),(epslag(i),i=1,6),
         &     iele,ipts,icou,iptz
    c
          return
    c
    ce *** Erreurs ***
    ce     -------
    29    message='erreur_ecriture'
          call damxmess(message,'x',80,0,0)
          call damsvi('iostat',ios,0,0,0,0)
          call damsvi('unite logique du fichier',uncont,0,0,0,0)
          inquire(unit=uncont,name=fic)
          call damsvc('Nom du fichier',fic,0,0,0,0)
          call damsvc('routine',routine,0,0,0,0)
          err=2
          return
    c
          end
    Cette fonction est appelée ainsi, dans un fichier rédigé en C:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ecrcont(uncont,pnumelt,&n,&c__1,&c__2,&numtyp,sig,eps,&err);
    MON PROBLEME: L'écriture dans le fichier se passe correctement. Malgré cela, plutôt que de sortir classiquement de ecrcont grâce au return de la ligne 65, le code parcours le paragraphe suivant "29" dédié au message d'erreur. La variable iostat est égale à 101, ce qui semble correspondre à:

    Integer,Parameter :: IOERR_INTERNAL_FILE_OVERFLOW = 101
    Internal file overflow

    QUESTION: A quoi peut être dû un renvoi au paragraphe d'erreur alors que la fonction fait son office ?

    REMARQUES:

    Quelques affichages à l'écran me renseignent sur la valeur des arguments d'entrée dans la fonction ecrcont:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    uncont = 100
    *pnumelt = 5641
    n = 1
    c__1 = 1
    c__2 = 2
    numtyp = 200
    sig[0] = 22.000000	sig[1] = 22.000000	sig[2] = 22.000000	sig[3] = 22.000000	sig[4] = 22.000000	sig[5] = 22.000000	sig[6] = 22.000000	
    eps[0] = 27.000000	eps[1] = 27.000000	eps[2] = 27.000000	eps[3] = 27.000000	eps[4] = 27.000000	eps[5] = 27.000000	eps[6] = 27.000000
    Merci d'avance pour votre aide

    Anthony

  2. #2
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    salut !
    L'écriture dans le fichier se passe correctement.
    tu es sûr que le fichier binaire résultat est bien correct ? l'ordre des paramètres dans les lignes 62 et 63 me semble douteux et ce write en ligne 61 ressemble bien à un appel avec format et options mais il n'y a plus de format ...
    mais je n'ai jamais programmé en fortran !

    A+

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur calcul
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Par défaut
    Bonjour, merci pour cette réponse.

    Le fichier de sortie finale ressemble à ça: (j'ai mis 3 lignes sur les milliers de lignes qu'il fait). Mes variables, que ce soit des entiers, des réels, stockées en tableau ou non, sont bien affichées dans l'ordre souhaité. Elles correspondent aux données d'entrée de la fonction write.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    2
         200  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01     8583        1        1        2
         200  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01     8584        1        1        2
         200  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.20000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01  2.70000000E+01     8585        1        1        2

    Question format et option de la fonction write, j'avoue que je perd pied aussi car je programme en C et ce code en fortran n'est pas le mien.

  4. #4
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2012
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 190
    Par défaut
    en regardant d'un peu plus près, j'ai cherché en vain un external ecrcont et un call ecrcont(...) pour déclarer et appeler la fonction C. mais je ne crois pas qu'on puisse lui donner le même nom.

    A+

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur calcul
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Par défaut
    J'ai appelé la fonction de cette façon car elle est déjà appelée ainsi dans une autre partie du code. La phase de déclaration de la fonction et la compatibilité fortran/C est assurée dans d'autres fichiers que je n'ai pas jugé nécessaires de présenter car ecrcont fonctionne bien dans d'autre branches similaires du code. La seule chose qui change entre ma branche qui ne fonctionne pas et les autres, ce sont les variables d'entrée qui doivent être imprimées dans le fichier de sortie.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    C'est un fichier ouvert en Fortran ?

    Il est séquentiel ou à accès direct ?

    En Fortran un fichier peut être à accès direct (via le RECORD=)

Discussions similaires

  1. erreur fonction write
    Par Anthony_CTI dans le forum Fortran
    Réponses: 2
    Dernier message: 30/01/2012, 11h58
  2. [Forum] Erreur fonction mysql_result()
    Par reda93 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 01/08/2006, 10h13
  3. Réponses: 2
    Dernier message: 01/06/2006, 14h54
  4. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h43
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 12h42

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