1 subroutine infve2 ( coonoe,
2 > somare, np2are, hetare, merare,
4 > aretri, hettri, nivtri, nintri,
7 > arequa, hetqua, nivqua, ninqua,
10 > infsup, typbor, tbaux1,
11 > zoom, xyzmiz, xyzmaz,
13 > numniv, numblo, nublfa, nubnvo,
17 > ulsort, langue, codret )
18 c ______________________________________________________________________
22 c Outil de Maillage Adaptatif par Raffinement et Deraffinement d'EDF R&D
24 c Version originale enregistree le 18 juin 1996 sous le numero 96036
25 c aupres des huissiers de justice Simart et Lavoir a Clamart
26 c Version 11.2 enregistree le 13 fevrier 2015 sous le numero 2015/014
27 c aupres des huissiers de justice
28 c Lavoir, Silinski & Cherqui-Abrahmi a Clamart
30 c HOMARD est une marque deposee d'Electricite de France
36 c ______________________________________________________________________
38 c INformation : Fichier VEctoriel - 2eme partie
40 c ______________________________________________________________________
42 c determination de la liste des noeuds des faces et aretes a visualiser
44 c remarque : en sortie, on dispose de la liste des noeuds
45 c decrivant une face a visualiser par ses noeuds.
46 c la numerotation precedente des faces correspondantes est
47 c oubliee, et une nouvelle numerotation est disponible
48 c par defaut grace a l'ordre de sortie des triplets/quadruplets.
49 c idem pour les aretes isolees
50 c ______________________________________________________________________
52 c . nom . e/s . taille . description .
53 c .____________________________________________________________________.
54 c . coonoe . e . nbnoto . coordonnees des noeuds .
56 c . somare . e .2*nbarto. numeros des extremites d'arete .
57 c . merare . e . nbarto . mere de chaque arete .
58 c . np2are . e . nbarto . numero du noeud p2 milieu de l'arete .
59 c . posifa . e . nbarto . pointeur sur tableau facare .
60 c . facare . e . nbfaar . liste des faces contenant une arete .
61 c . hetare . e . nbarto . historique de l'etat des aretes .
62 c . aretri . e .nbtrto*3. numeros des 3 aretes des triangles .
63 c . hettri . e . nbtrto . historique de l'etat des triangles .
64 c . nivtri . e . nbtrto . niveau des triangles .
65 c . nintri . e . nbtrto . noeud interne au triangle .
66 c . voltri . e .2*nbtrto. numeros des 2 volumes par triangle .
67 c . . . . voltri(i,k) definit le i-eme voisin de k .
68 c . . . . 0 : pas de voisin .
69 c . . . . j>0 : tetraedre j .
70 c . . . . j<0 : pyramide/pentaedre dans pypetr(1/2,j).
71 c . pypetr . e .2*lgpype. pypetr(1,j) = numero de la pyramide voisine.
72 c . . . . du triangle k tel que voltri(1/2,k) = -j .
73 c . . . . pypetr(2,j) = numero du pentaedre voisin .
74 c . . . . du triangle k tel que voltri(1/2,k) = -j .
75 c . famtri . e . nbtrto . famille des triangles .
76 c . arequa . e .nbquto*4. numeros des 4 aretes des quadrangles .
77 c . hetqua . e . nbquto . historique de l'etat des quadrangles .
78 c . nivqua . e . nbquto . niveau des quadrangles .
79 c . ninqua . e . nbquto . noeud interne au quadrangle .
80 c . volqua . e .2*nbquto. numeros des 2 volumes par quadrangle .
81 c . . . . volqua(i,k) definit le i-eme voisin de k .
82 c . . . . 0 : pas de voisin .
83 c . . . . j>0 : hexaedre j .
84 c . . . . j<0 : pyramide/pentaedre dans pypequ(1/2,j).
85 c . pypequ . e .2*lgpype. pypequ(1,j) = numero de la pyramide voisine.
86 c . . . . du quadrangle k tel que volqua(1/2,k) = -j .
87 c . . . . pypequ(2,j) = numero du pentaedre voisin .
88 c . . . . du quadrangle k tel que volqua(1/2,k) = -j .
89 c . famqua . e . nbquto . famille des quadrangles .
90 c . infsup . e . 1 . information supplementaire a afficher .
91 c . . . . 0 : aucune .
92 c . . . . 1 : numero homard des noeuds .
93 c . . . . 2 : numero du calcul des noeuds .
94 c . . . . 3 : numero homard des faces .
95 c . . . . 4 : numero du calcul des faces .
96 c . . . . 5 : numero homard des aretes .
97 c . . . . 6 : numero du calcul des aretes .
98 c . . . . np : choix n et choix p simultanement .
99 c . typbor . e . 1 . type d'affichage du bord .
100 c . . . . 0 : pas de trace .
101 c . . . . 1 : trace en rouge .
102 c . . . . 2 : trace en noir .
103 c . tbaux1 . e . nbftri/. donne un numero equivalent a une famille .
104 c . . . nbfqua . selon que l'orientation est gardee ou non .
105 c . zoom . e . 1 . vrai ou faux selon zoom ou non .
106 c . xyzmiz . e . 1 . abscisse (i=1), ordonnee (i=2) et .
107 c . . . . cote (i=3) minimales de la fenetre de zoom .
108 c . xyzmaz . e . 1 . abscisse (i=1), ordonnee (i=2) et .
109 c . . . . cote (i=3) maximales de la fenetre de zoom .
110 c . tbaux2 . es .-nbquto:. tableau de travail .
112 c . numniv . e . 1 . numero du niveau a tracer .
113 c . . . . -1 : tous les niveaux .
114 c . numblo . e . 1 . numero du bloc a tracer .
115 c . . . . 0 : trace du domaine global .
116 c . nublfa . e .-nbquto:. numero de blocs des faces .
118 c . nubnvo . e . * . . si numblo>0 : numero de blocs des volumes.
119 c . . . . . si numniv >=0 : niveau des volumes .
120 c . . . . Rangement : .
121 c . . . . les tetraedres .
122 c . . . . les hexaedres .
123 c . . . . les pyramides .
124 c . . . . les pentaedres .
125 c . nnquvi . s .12nbquac. 1 : niveau du quadrangle a afficher .
126 c . . . . 2 : numero HOMARD du quadrangle .
127 c . . . . 3, 4, 5, 6 : numeros des noeuds p1 .
128 c . . . . 7 : famille du quadrangle .
129 c . . . . 8, 9, 10, 11 : numeros des noeuds p2 .
130 c . . . . 12 : numero du noeud interne .
131 c . nbquvi . s . 1 . nombre de quadrangles a visualiser .
132 c . nntrvi . s .10nbtrac. 1 : niveau du triangle a afficher .
133 c . . . . 2 : numero HOMARD du triangle .
134 c . . . . 3, 4, 5 : numeros des noeuds p1 .
135 c . . . . 6 : famille du triangle .
136 c . . . . 7, 8, 9 : numeros des noeuds p2 .
137 c . . . . 10 : numero du noeud interne .
138 c . nbtrvi . s . 1 . nombre de triangles a visualiser .
139 c . nnarvi . s .6*nbarto. niveau et numero des aretes a visualiser .
140 c . . . . liste des noeuds des aretes a visualiser .
141 c . nbarvi . s . 1 . nombre d'aretes visualisables .
142 c . ulsort . e . 1 . numero d'unite logique de la liste standard.
143 c . langue . e . 1 . langue des messages .
144 c . . . . 1 : francais, 2 : anglais .
145 c . codret . es . 1 . code de retour des modules .
146 c . . . . 0 : pas de probleme .
147 c ______________________________________________________________________
150 c 0. declarations et dimensionnement
153 c 0.1. ==> generalites
159 parameter ( nompro = 'INFVE2' )
181 double precision coonoe(nbnoto,sdim)
183 integer somare(2,nbarto)
184 integer np2are(nbarto), merare(nbarto), hetare(nbarto)
185 integer posifa(0:nbarto), facare(nbfaar)
186 integer aretri(nbtrto,3), hettri(nbtrto), nivtri(nbtrto)
187 integer nintri(nbtrto)
188 integer voltri(2,nbtrto), pypetr(2,*)
189 integer famtri(nbtrto)
190 integer arequa(nbquto,4), hetqua(nbquto), nivqua(nbquto)
191 integer ninqua(nbquto)
192 integer volqua(2,nbquto), pypequ(2,*)
193 integer famqua(nbquto)
194 integer tbaux2(-nbquto:*)
195 integer nnquvi(12,nbquac), nbquvi
196 integer nntrvi(10,nbtrac), nbtrvi
198 integer numblo, nublfa(-nbquto:nbtrto), nubnvo(*)
199 integer nnarvi(6,nbarto), nbarvi
200 integer infsup, typbor, tbaux1(*)
202 double precision xyzmiz(sdim), xyzmaz(sdim)
206 integer ulsort, langue, codret
208 c 0.4. ==> variables locales
210 integer a1, a2, a3, a4
211 integer sa1a2, sa2a3, sa3a4, sa4a1, sa3a1
212 integer larete, letria, lequad, noeudf(4)
213 integer iaux, jaux, kaux, laux
214 integer infsu1, infsu2, infsu3
217 #ifdef _DEBUG_HOMARD_
218 double precision daux(sdim)
222 parameter ( nbmess = 10 )
223 character*80 texte(nblang,nbmess)
224 c_______________________________________________________________________
232 #ifdef _DEBUG_HOMARD_
233 write (ulsort,texte(langue,1)) 'Entree', nompro
237 texte(1,4) = '(''Nombre de '',a,'' a tracer :'',i10)'
239 texte(2,4) = '(''Number of '',a,'' for plotting:'',i10)'
243 c a priori, on ne trace rien
250 c 2. Recherche des faces a tracer :
251 c On trace une face seulement si elle est active et
252 c . si elle appartient a une region bidimensionnelle du maillage, et
253 c si elle appartient au bloc ou au niveau retenu
254 c . si elle est une face ayant un et un seul element volumique
255 c voisin, et si ce volume appartient au bloc ou au niveau retenu
256 c . si elle est une face ayant deux elements volumiques voisins,
257 c et si un et un seul des volumes appartient au bloc ou au niveau
260 c La convention est la suivante :
261 c * tbaux2(iaux) vaut 0 si la face est d'une region 2D, du bloc ou
263 c * tbaux2(iaux) vaut 1 si la face borde un domaine volumique, du
264 c bloc ou du niveau retenu
265 c * tbaux2(iaux) vaut 2 si la face est interne a un domaine
266 c volumique, un et un seul des voisins appartenant au bloc ou au
268 c * tbaux2(iaux) vaut -1 sinon
269 c On tracera donc pour tbaux2(iaux) >= 0
272 #ifdef _DEBUG_HOMARD_
273 write (ulsort,*) '2. recherche des faces a tracer'
276 c 2.1. ==> A priori, on ne retient rien
278 do 21 , iaux = -nbquto, nbtrto
282 c 2.2. ==> En l'absence de mailles 3D
284 if ( nbteto.eq.0 .and. nbheto.eq.0 .and.
285 > nbpyto.eq.0 .and. nbpeto.eq.0 ) then
287 c 2.2.1. ==> Pour tout le domaine et sans tenir compte des niveaux, on
288 c se contente de filtrer sur les actives / inactives
290 if ( numblo.eq.0 .and. numniv.eq.-1 ) then
292 do 221 , iaux = -nbquto, -1
293 if ( mod(hetqua(-iaux),100).eq.0 ) then
298 do 212 , iaux = 1, nbtrto
299 if ( mod(hettri(iaux),10).eq.0 ) then
304 c 2.1.2. ==> Avec un bloc, on filtre aussi sur ce bloc
306 elseif ( numblo.gt.0 ) then
308 do 213 , iaux = -nbquto, -1
309 if ( mod(hetqua(-iaux),100).eq.0 ) then
310 if ( nublfa(iaux).eq.numblo ) then
316 do 214 , iaux = 1, nbtrto
317 if ( mod(hettri(iaux),10).eq.0 ) then
318 if ( nublfa(iaux).eq.numblo ) then
324 c 2.1.2. ==> Avec un niveau, on filtre aussi sur ce niveau
328 do 215 , iaux = -nbquto, -1
329 if ( mod(hetqua(-iaux),100).eq.0 ) then
330 if ( nivqua(iaux).eq.numniv ) then
336 do 216 , iaux = 1, nbtrto
337 if ( mod(hettri(iaux),10).eq.0 ) then
338 if ( nivtri(iaux).eq.numniv ) then
348 c 2.2 ==> En presence d'elements volumiques
349 c 2.2.1. ==> Les triangles
351 if ( codret.eq.0 ) then
353 if ( nbteto.gt.0 .or. nbpyto.gt.0 .or. nbpeto.gt.0 ) then
355 #ifdef _DEBUG_HOMARD_
356 write (ulsort,texte(langue,3)) 'INFVE5_tr', nompro
359 call infve5 ( iaux, nbtrto, voltri, pypetr,
361 > numniv, numblo, nubnvo,
363 > ulsort, langue, codret )
369 c 2.2.2. ==> Les quadrangles
371 if ( codret.eq.0 ) then
373 if ( nbheto.gt.0 .or. nbpyto.gt.0 .or. nbpeto.gt.0 ) then
375 #ifdef _DEBUG_HOMARD_
376 write (ulsort,texte(langue,3)) 'INFVE5_qu', nompro
379 call infve5 ( iaux, nbquto, volqua, pypequ,
381 > numniv, numblo, nubnvo,
383 > ulsort, langue, codret )
390 c 3. caracteristiques associees aux triangles a tracer
393 #ifdef _DEBUG_HOMARD_
394 write (ulsort,*) '3. caracteristiques des tria a tracer'
397 c 3.1. ==> prealable : on etablit le tableau de correspondance des
399 c on indique simplement le numero de la famille.
401 c iaux : numero de la famille en cours d'examen
402 c jaux : nombre de familles equivalentes etablies
403 c kaux : numero des familles a comparer
404 c laux : numero des codes a comparer
405 c famille courante iaux
407 if ( codret.eq.0 ) then
409 do 31 , iaux = 1 , nbftri
413 do 30 , letria = 1 , nbtrto
415 if ( tbaux2(letria).ge.0 ) then
419 c 3.2. ==> on cherche les sommets
421 a1 = aretri(letria,1)
422 a2 = aretri(letria,2)
423 a3 = aretri(letria,3)
425 call utsotr ( somare, a1, a2, a3,
426 > sa1a2, sa2a3, sa3a1 )
432 c 3.3. ==> on cherche si au moins un des noeuds est a l'interieur
433 c de la fenetre de zoom
441 do 331 , jaux = 1 , sdim
442 if ( coonoe(noeudf(iaux),jaux).ge.xyzmiz(jaux) .and.
443 > coonoe(noeudf(iaux),jaux).le.xyzmaz(jaux) ) then
447 if ( kaux.eq.sdim ) then
457 c 3.4. ==> Si le triangle est retenu, filtrage eventuel pour deboggage
459 #ifdef _DEBUG_HOMARD_
462 do 34 , jaux = 1 , sdim
464 do 341 , iaux = 1 , 3
465 daux(jaux) = daux(jaux) + coonoe(noeudf(iaux),jaux)
467 daux(jaux) = daux(jaux)/3.d0
471 if ( abs(daux(1)-6.d-2).lt.1.d-5 ) then
473 elseif ( abs(daux(1)-4.d-2).lt.1.d-5 ) then
475 elseif ( abs(daux(2)-1.5d-2).lt.1.d-5 ) then
477 elseif ( abs(daux(3)-0.0d-2).lt.1.d-5 ) then
479 elseif ( abs(daux(3)-1.5d-2).lt.1.d-5 ) then
486 c 3.5. ==> Si le triangle est retenu, on le memorise ainsi que
487 c son niveau, sa famille, et on stocke ses trois sommets.
488 c En degre 2, on stocke les 3 noeuds milieux. Attention a
489 c les placer en coherence avec l'ordre des sommets ...
495 nntrvi(1,nbtrvi) = nivtri(letria)
496 nntrvi(2,nbtrvi) = letria
497 nntrvi(3,nbtrvi) = noeudf(1)
498 nntrvi(4,nbtrvi) = noeudf(2)
499 nntrvi(5,nbtrvi) = noeudf(3)
500 nntrvi(6,nbtrvi) = tbaux1(famtri(letria))
501 if ( degre.eq.2 ) then
502 nntrvi(7,nbtrvi) = np2are(aretri(letria,2))
503 nntrvi(8,nbtrvi) = np2are(aretri(letria,3))
504 nntrvi(9,nbtrvi) = np2are(aretri(letria,1))
506 if ( mod(mailet,2).eq.0 ) then
507 nntrvi(10,nbtrvi) = nintri(letria)
516 #ifdef _DEBUG_HOMARD_
517 write (ulsort,texte(langue,4)) mess14(langue,3,2), nbtrvi
523 c 4. caracteristiques associees aux quadrangles a tracer
526 #ifdef _DEBUG_HOMARD_
527 write (ulsort,*) '4. caracteristiques des quad a tracer'
530 if ( codret.eq.0 ) then
532 c 4.1. ==> prealable : on etablit le tableau de correspondance des
534 c on indique simplement le numero de la famille.
536 c iaux : numero de la famille en cours d'examen
537 c jaux : nombre de familles equivalentes etablies
538 c kaux : numero des familles a comparer
539 c laux : numero des codes a comparer
540 c famille courante iaux
542 do 41 , iaux = 1 , nbfqua
546 do 40 , lequad = 1 , nbquto
548 if ( tbaux2(-lequad).ge.0 ) then
552 c 4.2. ==> on cherche les sommets
554 a1 = arequa(lequad,1)
555 a2 = arequa(lequad,2)
556 a3 = arequa(lequad,3)
557 a4 = arequa(lequad,4)
559 call utsoqu ( somare, a1, a2, a3, a4,
560 > sa1a2, sa2a3, sa3a4, sa4a1 )
567 c 4.3. ==> on cherche si au moins un des noeuds est a l'interieur
568 c de la fenetre de zoom
576 do 431 , jaux = 1 , sdim
577 if ( coonoe(noeudf(iaux),jaux).ge.xyzmiz(jaux) .and.
578 > coonoe(noeudf(iaux),jaux).le.xyzmaz(jaux) ) then
582 if ( kaux.eq.sdim ) then
592 c 4.4. ==> Si le quadrangle est retenu, filtrage eventuel pour deboggage
594 #ifdef _DEBUG_HOMARD_
597 do 44 , jaux = 1 , sdim
599 do 441 , iaux = 1 , 4
600 daux(jaux) = daux(jaux) + coonoe(noeudf(iaux),jaux)
602 daux(jaux) = daux(jaux)/4.d0
605 if ( abs(daux(1)-6.d-2).lt.1.d-5 ) then
607 elseif ( abs(daux(1)-4.d-2).lt.1.d-5 ) then
609 elseif ( abs(daux(2)-1.5d-2).lt.1.d-5 ) then
611 elseif ( abs(daux(3)-0.0d-2).lt.1.d-5 ) then
613 elseif ( abs(daux(3)-1.5d-2).lt.1.d-5 ) then
620 c 4.5. ==> Si le quadrangle est retenu, on le memorise ainsi que
621 c son niveau, sa famille, et on stocke ses quatre sommets.
622 c En degre 2, on stocke les 4 noeuds milieux. Attention a
623 c les placer en coherence avec l'ordre des sommets ...
628 cgn write (ulsort,*) 'quadrangle ',lequad,' de niveau ',nivqua(lequad)
630 nnquvi(1,nbquvi) = nivqua(lequad)
631 nnquvi(2,nbquvi) = lequad
632 nnquvi(3,nbquvi) = noeudf(1)
633 nnquvi(4,nbquvi) = noeudf(2)
634 nnquvi(5,nbquvi) = noeudf(3)
635 nnquvi(6,nbquvi) = noeudf(4)
636 nnquvi(7,nbquvi) = tbaux1(famqua(lequad))
637 if ( degre.eq.2 ) then
638 nnquvi( 8,nbquvi) = np2are(arequa(lequad,2))
639 nnquvi( 9,nbquvi) = np2are(arequa(lequad,3))
640 nnquvi(10,nbquvi) = np2are(arequa(lequad,4))
641 nnquvi(11,nbquvi) = np2are(arequa(lequad,1))
643 if ( mod(mailet,3).eq.0 ) then
644 nnquvi(12,nbquvi) = ninqua(lequad)
653 #ifdef _DEBUG_HOMARD_
654 write (ulsort,texte(langue,4)) mess14(langue,3,4), nbquvi
660 c 5. recherche des aretes a tracer si on a demande le trace des bords
662 c Une arete a tracer a au plus une face voisine
664 c la convention est la suivante :
665 c * tbaux2(iaux) vaut 0 si l'arete est isolee et est active ;
666 c * tbaux2(iaux) vaut 1 si l'arete est un bord de face active ;
667 c * tbaux2(iaux) vaut 2 sinon.
670 #ifdef _DEBUG_HOMARD_
671 write (ulsort,*) '5. recherche des aretes a tracer'
674 if ( numblo.eq.0 .and. numniv.eq.-1 ) then
676 if ( codret.eq.0 ) then
678 c 5.1. ==> on repere les aretes isolees actives ; pour les autres, on
681 do 51 , larete = 1 , nbarto
682 cgn print *,hetare(larete),posifa(larete-1),posifa(larete)
683 if ( mod(hetare(larete),10).eq.0 .and.
684 > posifa(larete).eq.posifa(larete-1) ) then
689 cgn print *,'===> tbaux2(,',larete,') = ',tbaux2(larete)
692 c 5.2. ==> recherche des bords eventuels de faces actives
693 c attention aux voisinages multiples dus aux conformites
695 if ( typbor.gt.0 ) then
697 do 521 , larete = 1 , nbarto
699 do 522 , iaux = posifa(larete-1)+1, posifa(larete)
701 if ( kaux.gt.0 ) then
702 if ( mod(hettri(kaux),10).eq.0 ) then
706 if ( mod(hetqua(-kaux),100).eq.0 ) then
711 if ( jaux.eq.1 ) then
723 c 6. recherche des noeuds associes aux aretes retenues
724 c methode : on boucle sur toutes les aretes retenues en ne
725 c considerant que les actives.
726 c pour celles-la, on recupere les 2 sommets
729 #ifdef _DEBUG_HOMARD_
730 write (ulsort,*) '6. recherche des noeuds associes aux aretes'
733 if ( ( numblo.eq.0 .and. numniv.eq.-1 ) .or.
734 > ( typbor.gt.0 ) ) then
736 if ( codret.eq.0 ) then
738 infsu1 = mod(infsup,10)
739 if ( infsup.ge.10 ) then
740 iaux = ( infsup-infsu1 ) / 10
741 infsu2 = mod(iaux,10)
742 if ( iaux.ge.10 ) then
743 infsu3 = ( iaux-infsu2 ) / 10
752 if ( ( infsu1.ge.5 .and. infsu1.le.6 ) .or.
753 > ( infsu2.ge.5 .and. infsu2.le.6 ) .or.
754 > ( infsu3.ge.5 .and. infsu3.le.6 ) ) then
761 do 60 , larete = 1 , nbarto
763 c dans le cas ou l'arete "est active" et "est a tracer"
765 if ( tbaux2(larete).le.1 .or.
766 > ( laux.eq.1 .and. mod(hetare(larete),10).eq.0 ) ) then
768 c 6.1. ==> on memorise les deux noeuds
770 noeudf(1) = somare ( 1, larete )
771 noeudf(2) = somare ( 2, larete )
773 c 6.3. ==> on cherche si au moins un des noeuds est a l'interieur
774 c de la fenetre de zoom
782 do 621 , jaux = 1 , sdim
783 if ( coonoe(noeudf(iaux),jaux).ge.xyzmiz(jaux) .and.
784 > coonoe(noeudf(iaux),jaux).le.xyzmaz(jaux) ) then
788 if ( kaux.eq.sdim ) then
798 c 6.4. ==> Si l'arete est retenue, on la memorise, ainsi que son niveau
799 c et ses noeuds extremes.
800 c En degre 2, on stocke le noeud milieu
807 do 64 , iaux = 0 , nivsup
808 if ( merare(jaux).eq.0 ) then
809 nnarvi(1,nbarvi) = iaux
815 nnarvi(2,nbarvi) = larete
816 nnarvi(3,nbarvi) = noeudf(1)
817 nnarvi(4,nbarvi) = noeudf(2)
818 nnarvi(5,nbarvi) = tbaux2(larete)
819 c if ( tbaux2(larete).eq.1 ) then
820 c nnarvi(5,nbarvi) = 1
822 c nnarvi(5,nbarvi) = 0
824 if ( degre.eq.2 ) then
825 nnarvi(6,nbarvi) = np2are(larete)
834 #ifdef _DEBUG_HOMARD_
835 if ( codret.eq.0 ) then
836 write (ulsort,texte(langue,4)) mess14(langue,3,1), nbarvi
848 if ( codret.ne.0 ) then
852 write (ulsort,texte(langue,1)) 'Sortie', nompro
853 write (ulsort,texte(langue,2)) codret
857 #ifdef _DEBUG_HOMARD_
858 write (ulsort,texte(langue,1)) 'Sortie', nompro