ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_wsystus.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 20477 byte(s)
Log Message:
changement de hiearchie et utilisation de ccmake + mise a jour

File Contents

# User Rev Content
1 5 /* ecriture des fichiers */
2     #include <stdio.h>
3     #include <string.h>
4     #include <stdlib.h>
5     #include "m3d_const.h"
6     #include "m3d_hotes.h"
7     #include "m3d_struct.h"
8     #include "m3d_erreur.h"
9     #include "prototype.h"
10     extern GEST_MEM *gest ;
11     extern int debug ;
12     extern char ext_out[MAX_LINE] ;
13     void m3d_wsystus(int nb_noeud,int nb_tetra_cree,float *coord,int *numele,int *ierr)
14     {
15     FILE *output ;
16     char *ext_mai ;
17     char temp[MAX_LINE] ;
18     int i, j ;
19     int nb_ligne, nb_rest, nb, type ;
20     float crit ;
21     float *coord2 ;
22     int *old, *neww, *connec, *numele2 ;
23     int n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, ok, k, num1, num2, nb_cree ;
24     int j1,j2,j3,j4,j5,j6,j7,j8,j9,j10 ;
25    
26     neww = gest->neww ;
27     old = gest->old ;
28     coord2 = gest->coord2 ;
29    
30     temp[0] = 0 ;
31     strcpy(temp,gest->name) ;
32     strcat(temp,"_3D.") ;
33     strcat(temp,ext_out) ;
34     /* ouverture du fichier */
35     if ( (output = fopen(temp,"w")) == NULL)
36     {
37     m3d_erreur(ERR_OPEN_RESU) ;
38     *ierr = VRAI ;
39     return ;
40     }
41     if (gest->is_qua == FAUX)/* mailles lineaires */
42     {
43     fprintf(output,"%s\n",gest->name) ;
44     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",4,nb_noeud,nb_tetra_cree,3,6,0,0,0,0) ;
45     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-1,nb_noeud,4,0,0,0) ;
46     /* noeuds de la peau */
47     for (i=0;i<gest->nb_init;i++)
48     fprintf(output,"%5d%16f%16f%16f\n",gest->tabcor[i+1],coord[x(i)],coord[y(i)],coord[z(i)]) ;
49     for (i=gest->nb_init;i<nb_noeud;i++) fprintf(output,"%5d%16f%16f%16f\n",i+1+gest->numax-gest->nb_init,coord[x(i)],coord[y(i)],coord[z(i)]) ;
50     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-2,nb_tetra_cree,8,0,0,0) ;
51     nb = 0 ;
52     j = 0 ;
53     while (nb<nb_tetra_cree)
54     {
55     if (numele[4 * j] !=123456789)
56     {
57     nb++ ;
58     crit = 1. - m3d_e_qual(coord,numele[4*j],numele[4*j+1],numele[4*j+2],numele[4*j+3]) ;
59     if (crit>0.9) type = BAD_CRIT ;
60     else if (crit>0.8) type = LOW_CRIT ;
61     else if (crit>0.5) type = MEDIUM_CRIT ;
62     else type = GOOD_CRIT ;
63     /* noeud de la peau */
64     if (numele[4*j]<gest->nb_init) j1 = gest->tabcor[(numele[4*j])+1] ;
65     else j1 = (numele[4*j])+1 + gest->numax - gest->nb_init ;/* noeud genere */
66    
67     if (numele[4*j+1]<gest->nb_init) j2 = gest->tabcor[(numele[4*j+1])+1] ;
68     else j2 = (numele[4*j+1])+1 + gest->numax - gest->nb_init ;/* noeud genere */
69    
70     if (numele[4*j+2]<gest->nb_init) j3 = gest->tabcor[(numele[4*j+2])+1] ;
71     else j3 = (numele[4*j+2])+1 + gest->numax - gest->nb_init ;/* noeud genere */
72    
73     if (numele[4*j+3]<gest->nb_init) j4 = gest->tabcor[(numele[4*j+3])+1] ;
74     else j4 = (numele[4*j+3])+1 + gest->numax - gest->nb_init ;/* noeud genere */
75     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d\n",nb,3004,type,4,j1,j2,j3,j4) ;
76     }
77     j ++ ;
78     }
79     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-3,4,8,0,0,0) ;
80     fprintf(output,"%5d%5d%5d %6f\n",1,1,100,0.01) ;
81     fprintf(output,"%5d%5d%5d %6f\n",2,1,100,0.5) ;
82     fprintf(output,"%5d%5d%5d %6f\n",3,1,100,0.8) ;
83     fprintf(output,"%5d%5d%5d %6f\n",4,1,100,0.9) ;
84     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",0,0,0,0,0,0) ;
85    
86     fclose(output) ;
87    
88     return ;
89     }
90     else/* traitement mailles quadratiques */
91     {
92     /* pas aussi facile que l'on peut le pretendre */
93     /* donnees
94     nombre de noeuds quadratiques gest->nb_qua
95     nombre de noeuds initial : gest->nb_init = noeuds du maillage lineaire
96     */
97     /* ecriture des noeuds */
98     fprintf(output,"%s\n",gest->name) ;
99     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",4,nb_noeud,nb_tetra_cree,3,6,0,0,0,0) ;
100     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-1,nb_noeud,4,0,0,0) ;
101     /* noeuds appartenant au maillage de la peau */
102     for (i=0;i<gest->nb_noe_qua;i++)
103     fprintf(output,"%5d%16f%16f%16f\n",gest->tabcor[i+1],coord2[x(i)],coord2[y(i)],coord2[z(i)]) ;
104     /* creation des noeuds generes pendant le maillage */
105     /* le nouveau numero de ces noeuds est superieur ou egal a gest->nb_init */
106     for (i=gest->nb_init;i<nb_noeud;i++)
107     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+i+1-gest->nb_init,coord[x(i)],coord[y(i)],coord[z(i)]) ;
108     /* creation des noeuds intermediaires */
109     /* remarque si les 2 numeros des segments (nouvelle numerotation) sont inferieures a
110     gest->nb_init, le noeud milieu existe deja sinon , il faut le creer */
111     /* creation d'un tableau de connectivite par segment */
112     gest->connec = (int*)calloc(2*MAX_CONNEC*nb_noeud,sizeof(int)) ;
113     /* une case pour stocker le numero du noeud intermediaire */
114     if (gest->connec == NULL)
115     {
116     m3d_erreur(ERR_OPEN_RESU) ;
117     *ierr = VRAI ;
118     return ;
119     }
120     connec = gest->connec ;
121     /* connec[i*MAX_CONNEC*j] = jeme voisin du noeud i */
122     for (i=0;i<2*MAX_CONNEC*nb_noeud;i++) connec[i] = NUM_STOP ;
123     /* passer les sommets de numele2 en nouvelle numerotation -1 */
124     numele2 = gest->numele2 ;
125     /*
126     for (i=0;i<gest->nb_2d;i++)
127     {
128     numele2[6*i] = neww[numele2[6*i]] - 1 ;
129     numele2[6*i+2] = neww[numele2[6*i+2]] - 1 ;
130     numele2[6*i+4] = neww[numele2[6*i+4]] - 1 ;
131     }
132     */
133     /* les numeros des noeuds intermediaires sont inchanges */
134     /* stocker le milieu des segments des elements de peau */
135     /* les numeros commencent a 0 = numero du maillage lineaire */
136     for (i=0;i<gest->nb_2d;i++) /* elements de peau */
137     {
138     n1 = neww[numele2[6*i]] - 1 ;
139     n2 = neww[numele2[6*i+2]] - 1 ;
140     n3 = neww[numele2[6*i+4]] - 1 ;
141     /* n1 - n2 */
142    
143     num1 = min(n1,n2) ;
144     num2 = max(n1,n2) ;
145    
146     ok = FAUX ;
147     k = 0 ;
148     /* table des noeuds connectes a n1 , ke voisins */
149     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
150     {
151     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
152     k++ ;
153     }
154     /* insertion */
155     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
156     {
157     m3d_erreur(ERR_OPEN_RESU) ;
158     *ierr = VRAI ;
159     return ;
160     }
161     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
162     {
163     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
164     connec[2*(num1*MAX_CONNEC+k)+1] = numele2[6*i+1] ;
165     }
166    
167     /* n2 - n3 */
168    
169     num1 = min(n2,n3) ;
170     num2 = max(n2,n3) ;
171    
172     ok = FAUX ;
173     k = 0 ;
174     /* table des noeuds connectes a n1 , ke voisins */
175     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
176     {
177     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
178     k++ ;
179     }
180     /* insertion */
181     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
182     {
183     m3d_erreur(ERR_OPEN_RESU) ;
184     *ierr = VRAI ;
185     return ;
186     }
187     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
188     {
189     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
190     connec[2*(num1*MAX_CONNEC+k)+1] = numele2[6*i+3] ;
191     }
192     /* n1 - n3 */
193    
194     num1 = min(n1,n3) ;
195     num2 = max(n1,n3) ;
196    
197     ok = FAUX ;
198     k = 0 ;
199     /* table des noeuds connectes a n1 , ke voisins */
200     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
201     {
202     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
203     k++ ;
204     }
205     /* insertion */
206     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
207     {
208     m3d_erreur(ERR_OPEN_RESU) ;
209     *ierr = VRAI ;
210     return ;
211     }
212     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
213     {
214     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
215     connec[2*(num1*MAX_CONNEC+k)+1] = numele2[6*i+5] ;
216     }
217     }
218     /* parcours du tableau des elements */
219     nb = 0 ;
220     j = 0 ;
221     nb_cree = 0 ;
222     while (nb<nb_tetra_cree)
223     {
224     if (numele[4 * j] !=123456789)
225     {
226     nb++ ;
227     n1 = numele[4*j] ;
228     n2 = numele[4*j+1] ;
229     n3 = numele[4*j+2] ;
230     n4 = numele[4*j+3] ;
231    
232     /* traitement des segments */
233     /* n1 n2 */
234     num1 = min(n1,n2) ;
235     num2 = max(n1,n2) ;
236     /* doit on creer un noeud */
237     ok = FAUX ;
238     k = 0 ;
239     /* table des noeuds connectes a n1 , ke voisins */
240     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
241     {
242     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
243     k++ ;
244     }
245     /* insertion */
246     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
247     {
248     m3d_erreur(ERR_OPEN_RESU) ;
249     *ierr = VRAI ;
250     return ;
251     }
252     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
253     {
254     nb_cree++ ;
255     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
256     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
257     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+nb_noeud-(gest->nb_init)+nb_cree, 0.5*(coord[x(num1)]+coord[x(num2)]),0.5*(coord[y(num1)]+coord[y(num2)]),0.5*(coord[z(num1)]+coord[z(num2)])) ;
258     }
259    
260     /* n1 n3 */
261     num1 = min(n1,n3) ;
262     num2 = max(n1,n3) ;
263    
264     ok = FAUX ;
265     k = 0 ;
266     /* table des noeuds connectes a n1 , ke voisins */
267     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
268     {
269     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
270     k++ ;
271     }
272     /* insertion */
273     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
274     {
275     m3d_erreur(ERR_OPEN_RESU) ;
276     *ierr = VRAI ;
277     return ;
278     }
279     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
280     {
281     nb_cree++ ;
282     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
283     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
284     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+nb_noeud-(gest->nb_init)+nb_cree, 0.5*(coord[x(num1)]+coord[x(num2)]),0.5*(coord[y(num1)]+coord[y(num2)]),0.5*(coord[z(num1)]+coord[z(num2)])) ;
285     }
286    
287     /* n1 n4 */
288     num1 = min(n1,n4) ;
289     num2 = max(n1,n4) ;
290    
291     ok = FAUX ;
292     k = 0 ;
293     /* table des noeuds connectes a n1 , ke voisins */
294     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
295     {
296     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
297     k++ ;
298     }
299     /* insertion */
300     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
301     {
302     m3d_erreur(ERR_OPEN_RESU) ;
303     *ierr = VRAI ;
304     return ;
305     }
306     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
307     {
308     nb_cree++ ;
309     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
310     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
311     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+nb_noeud-(gest->nb_init)+nb_cree, 0.5*(coord[x(num1)]+coord[x(num2)]),0.5*(coord[y(num1)]+coord[y(num2)]),0.5*(coord[z(num1)]+coord[z(num2)])) ;
312     }
313    
314     /* n2 n3 */
315     num1 = min(n2,n3) ;
316     num2 = max(n2,n3) ;
317    
318     ok = FAUX ;
319     k = 0 ;
320     /* table des noeuds connectes a n1 , ke voisins */
321     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
322     {
323     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
324     k++ ;
325     }
326     /* insertion */
327     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
328     {
329     m3d_erreur(ERR_OPEN_RESU) ;
330     *ierr = VRAI ;
331     return ;
332     }
333     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
334     {
335     nb_cree++ ;
336     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
337     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
338     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+nb_noeud-(gest->nb_init)+nb_cree, 0.5*(coord[x(num1)]+coord[x(num2)]),0.5*(coord[y(num1)]+coord[y(num2)]),0.5*(coord[z(num1)]+coord[z(num2)])) ;
339     }
340    
341     num1 = min(n2,n4) ;
342     num2 = max(n2,n4) ;
343    
344     ok = FAUX ;
345     k = 0 ;
346     /* table des noeuds connectes a n1 , ke voisins */
347     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
348     {
349     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
350     k++ ;
351     }
352     /* insertion */
353     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
354     {
355     m3d_erreur(ERR_OPEN_RESU) ;
356     *ierr = VRAI ;
357     return ;
358     }
359     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
360     {
361     nb_cree++ ;
362     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
363     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
364     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+nb_noeud-(gest->nb_init)+nb_cree, 0.5*(coord[x(num1)]+coord[x(num2)]),0.5*(coord[y(num1)]+coord[y(num2)]),0.5*(coord[z(num1)]+coord[z(num2)])) ;
365     }
366    
367     num1 = min(n3,n4) ;
368     num2 = max(n3,n4) ;
369    
370     ok = FAUX ;
371     k = 0 ;
372     /* table des noeuds connectes a n1 , ke voisins */
373     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
374     {
375     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
376     k++ ;
377     }
378     /* insertion */
379     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
380     {
381     m3d_erreur(ERR_OPEN_RESU) ;
382     *ierr = VRAI ;
383     return ;
384     }
385     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
386     {
387     nb_cree++ ;
388     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
389     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
390     fprintf(output,"%5d%16f%16f%16f\n",gest->numax+nb_noeud-(gest->nb_init)+nb_cree, 0.5*(coord[x(num1)]+coord[x(num2)]),0.5*(coord[y(num1)]+coord[y(num2)]),0.5*(coord[z(num1)]+coord[z(num2)])) ;
391     }
392     }
393     j ++ ;
394     }
395     /* gest->nb_noeud = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;*/
396     /* renumerotation des noeuds */
397    
398     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-2,nb_tetra_cree,14,0,0,0) ;
399     nb = 0 ;
400     j = 0 ;
401     while (nb<nb_tetra_cree)
402     {
403     if (numele[4 * j] !=123456789)
404     {
405     nb++ ;
406     crit = 1. - m3d_e_qual(coord,numele[4*j],numele[4*j+1],numele[4*j+2],numele[4*j+3]) ;
407     if (crit>0.9) type = BAD_CRIT ;
408     else if (crit>0.8) type = LOW_CRIT ;
409     else if (crit>0.5) type = MEDIUM_CRIT ;
410     else type = GOOD_CRIT ;
411    
412     n1 = numele[4*j] ;
413     n2 = numele[4*j+1] ;
414     n3 = numele[4*j+2] ;
415     n4 = numele[4*j+3] ;
416    
417     /* n1 - n2 */
418     num1 = min(n1,n2) ;
419     num2 = max(n1,n2) ;
420    
421     ok = FAUX ;
422     k = 0 ;
423     /* table des noeuds connectes a n1 , ke voisins */
424     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
425     {
426     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
427     k++ ;
428     }
429     if (ok == FAUX)
430     {
431     m3d_erreur(ERR_OPEN_RESU) ;
432     *ierr = VRAI ;
433     return ;
434     }
435     n5 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
436    
437     /* n2 - n3 */
438     num1 = min(n2,n3) ;
439     num2 = max(n2,n3) ;
440    
441     ok = FAUX ;
442     k = 0 ;
443     /* table des noeuds connectes a n1 , ke voisins */
444     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
445     {
446     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
447     k++ ;
448     }
449     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
450     {
451     m3d_erreur(ERR_OPEN_RESU) ;
452     *ierr = VRAI ;
453     return ;
454     }
455     n6 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
456    
457     /* n1 - n3 */
458     num1 = min(n1,n3) ;
459     num2 = max(n1,n3) ;
460    
461     ok = FAUX ;
462     k = 0 ;
463     /* table des noeuds connectes a n1 , ke voisins */
464     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
465     {
466     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
467     k++ ;
468     }
469     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
470     {
471     m3d_erreur(ERR_OPEN_RESU) ;
472     *ierr = VRAI ;
473     return ;
474     }
475     n7 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
476    
477     /* n1 - n2 */
478     num1 = min(n1,n4) ;
479     num2 = max(n1,n4) ;
480    
481     ok = FAUX ;
482     k = 0 ;
483     /* table des noeuds connectes a n1 , ke voisins */
484     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
485     {
486     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
487     k++ ;
488     }
489     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
490     {
491     m3d_erreur(ERR_OPEN_RESU) ;
492     *ierr = VRAI ;
493     return ;
494     }
495     n8 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
496    
497     /* n1 - n2 */
498     num1 = min(n2,n4) ;
499     num2 = max(n2,n4) ;
500    
501     ok = FAUX ;
502     k = 0 ;
503     /* table des noeuds connectes a n1 , ke voisins */
504     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
505     {
506     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
507     k++ ;
508     }
509     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
510     {
511     m3d_erreur(ERR_OPEN_RESU) ;
512     *ierr = VRAI ;
513     return ;
514     }
515     n9 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
516    
517     /* n1 - n2 */
518     num1 = min(n3,n4) ;
519     num2 = max(n3,n4) ;
520    
521     ok = FAUX ;
522     k = 0 ;
523     /* table des noeuds connectes a n1 , ke voisins */
524     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
525     {
526     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
527     k++ ;
528     }
529     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
530     {
531     m3d_erreur(ERR_OPEN_RESU) ;
532     *ierr = VRAI ;
533     return ;
534     }
535     n10 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
536    
537     if (n1<gest->nb_init) n1 = old[n1+1] ;/* numeros fortran */
538     else n1 = (gest->nb_noe_qua - gest->nb_init) + n1 + 1 ;
539     if (n2<gest->nb_init) n2 = old[n2+1] ;/* numeros fortran */
540     else n2 = (gest->nb_noe_qua - gest->nb_init) + n2 + 1 ;
541     if (n3<gest->nb_init) n3 = old[n3+1] ;/* numeros fortran */
542     else n3 = (gest->nb_noe_qua - gest->nb_init) + n3 + 1 ;
543     if (n4<gest->nb_init) n4 = old[n4+1] ;/* numeros fortran */
544     else n4 = (gest->nb_noe_qua - gest->nb_init) + n4 + 1 ;
545    
546     if (n1<gest->nb_noe_qua) j1 = gest->tabcor[n1] ;
547     else j1 = n1 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
548    
549     if (n2<gest->nb_noe_qua) j2 = gest->tabcor[n2] ;
550     else j2 = n2 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
551    
552     if (n3<gest->nb_noe_qua) j3 = gest->tabcor[n3] ;
553     else j3 = n3 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
554    
555     if (n4<gest->nb_noe_qua) j4 = gest->tabcor[n4] ;
556     else j4 = n4 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
557    
558     if (n5<gest->nb_noe_qua) j5 = gest->tabcor[n5] ;
559     else j5 = n5 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
560    
561     if (n6<gest->nb_noe_qua) j6 = gest->tabcor[n6] ;
562     else j6 = n6 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
563    
564     if (n7<gest->nb_noe_qua) j7 = gest->tabcor[n7] ;
565     else j7 = n7 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
566    
567     if (n8<gest->nb_noe_qua) j8 = gest->tabcor[n8] ;
568     else j8 = n8 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
569    
570     if (n9<gest->nb_noe_qua) j9 = gest->tabcor[n9] ;
571     else j9 = n9 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
572    
573     if (n10<gest->nb_noe_qua) j10 = gest->tabcor[n10] ;
574     else j10 = n10 + gest->numax - gest->nb_noe_qua ;/* noeud genere */
575     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",nb,3010,type,10,j1,j5,j2,j6,j3,j7,j8,j9,j10,j4) ;
576     }
577     j ++ ;
578     }
579     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-3,4,8,0,0,0) ;
580     fprintf(output,"%5d%5d%5d %6f\n",1,1,100,0.01) ;
581     fprintf(output,"%5d%5d%5d %6f\n",2,1,100,0.5) ;
582     fprintf(output,"%5d%5d%5d %6f\n",3,1,100,0.8) ;
583     fprintf(output,"%5d%5d%5d %6f\n",4,1,100,0.9) ;
584     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",0,0,0,0,0,0) ;
585     }
586     fclose(output) ;
587     if ( (output = fopen(temp,"r+")) == NULL)
588     {
589     if (debug) printf(" Erreur ouverture du fichier resultat M3DWRI\n") ;
590     m3d_erreur(ERR_OPEN);
591     *ierr = VRAI ;
592     return ;
593     }
594     fprintf(output,"%s\n",gest->name) ;
595     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",4,gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,nb_tetra_cree,3,6,0,0,0,0) ;
596     fprintf(output,"%5d%5d%5d%5d%5d%5d\n",-1,gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,4,0,0,0) ;
597     fclose(output) ;
598     return ;
599     }
600    
601