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 :

erreur fonction write


Sujet :

Fortran

  1. #1
    Membre à l'essai
    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
    Points : 16
    Points
    16
    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
    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
    Ton affichage des valeurs, il est fait en C avant d'entrée ou en Fortran dans la routine ? Il est impératif que tu génères l'affichage du côté Fortran (soit APRÈS le passage d'argument).

    J'ai déjà eu à résoudre ce genre de problème, et en général, le problème venait d'une corruption de mémoire suite à un mauvais passage d'argument. Faire des lecture-écriture dans ce contexte est particulièrement explosif (d'expérience).

  3. #3
    Membre à l'essai
    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
    Points : 16
    Points
    16
    Par défaut
    Merci pour ta réponse.

    Mon affichage était en effet réalisé dans la partie c, avant l'appel de la fonction et donc le passage des valeurs. Je l'ai réalisé dans la partie fortran: je faits un write(*,*)... juste avant le write(cont,ios=iostat)... avec exactement les mêmes variables. Ces dernières sont correctement affichées à l'écran.

    Voila !

Discussions similaires

  1. erreur fonction write
    Par Anthony_CTI dans le forum C
    Réponses: 17
    Dernier message: 30/01/2012, 18h49
  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