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