ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/diamesh/src/m3d_wmos.cpp
Revision: 253
Committed: Tue Jul 13 19:40:46 2010 UTC (14 years, 10 months ago) by francois
File size: 22747 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_erreur.h"
8     #include "m3d_struct.h"
9     #include "prototype.h"
10     extern GEST_MEM *gest ;
11     extern int debug ;
12     void m3d_wmos(int nb_noeud,int nb_tetra_cree,float *coord,int *numele,int *ierr)
13     {
14     FILE *output ;
15     char *ext_noe, *ext_mai ;
16     char temp[MAX_LINE] ;
17     int icode ;
18     int i, j, imat ;
19     int nb;
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     float vec[3] ;
25     neww = gest->neww ;
26     old = gest->old ;
27     coord2 = gest->coord2 ;
28    
29     if (gest->is_qua == FAUX)/* mailles lineaires */
30     {
31     ext_noe = EXT_OUT_NOE_MOSAIC ;
32     ext_mai = EXT_OUT_ELE_MOSAIC ;
33     /* ecriture du .COR */
34     temp[0] = 0 ;
35     strcpy(temp,gest->name) ;
36     strncat(temp,ext_noe,7) ;
37     if ( (output = fopen(temp,"w")) == NULL)
38     {
39     m3d_erreur(ERR_OPEN_RESU) ;
40     *ierr = VRAI ;
41     return ;
42     }
43     /* nombre de noeud ddl dimension et echelle */
44     fprintf(output,"%5d%5d%5d%10f%10f%10f%5d\n",nb_noeud,3,3,1.,1.,1.,gest->nb_init) ;
45     for (i=0;i<gest->nb_init;i++)
46     {
47     /* fprintf(output,"%5d%10f%10f%10f%5d\n",i+1,coord[x(i)],coord[y(i)],coord[z(i)],gest->tabcor[i+1]) ;*/
48     fprintf(output,"%5d",i+1) ;
49     fprintf(output," ") ;
50     m3d_prn(output,9,coord[x(i)]) ;
51     fprintf(output," ") ;
52     m3d_prn(output,9,coord[y(i)]) ;
53     fprintf(output," ") ;
54     m3d_prn(output,9,coord[z(i)]) ;
55     fprintf(output,"%5d\n",gest->tabcor[i+1]) ;
56     }
57    
58    
59     for (i=gest->nb_init;i<nb_noeud;i++)
60     /* fprintf(output,"%5d%10f%10f%10f%5d\n",i+1,coord[x(i)],coord[y(i)],coord[z(i)],i+1+gest->numax - gest->nb_init) ;*/
61     {
62     fprintf(output,"%5d",i+1) ;
63     fprintf(output," ") ;
64     m3d_prn(output,9,coord[x(i)]) ;
65     fprintf(output," ") ;
66     m3d_prn(output,9,coord[y(i)]) ;
67     fprintf(output," ") ;
68     m3d_prn(output,9,coord[z(i)]) ;
69     fprintf(output,"%5d\n",i+1+gest->numax - gest->nb_init) ;
70     }
71    
72     fprintf(output,"%5d\n",-1) ;
73     fclose(output) ;
74     /* ecriture du .ELE */
75     temp[0] = 0 ;
76     strcpy(temp,gest->name) ;
77     strncat(temp,ext_mai,7) ;
78     if ( (output = fopen(temp,"w")) == NULL)
79     {
80     m3d_erreur(ERR_OPEN_RESU) ;
81     *ierr = VRAI ;
82     return ;
83     }
84     fprintf(output,"%5d%5d%5d%5d%5d\n",nb_tetra_cree,4,1,1,0) ;
85     /* ecriture des elements */
86     j = 0 ;
87     nb = 0 ;
88     while (nb<nb_tetra_cree)
89     {
90     if (numele[4 * j] !=123456789)
91     {
92     nb++ ;
93     crit = m3d_e_qual(coord,numele[4*j],numele[4*j+1],numele[4*j+2],numele[4*j+3]) ;
94     if (crit>0.5) imat = 1 ;
95     else if (crit>0.2) imat = 2 ;
96     else if (crit>0.1) imat = 3 ;
97     else imat = 4 ;
98    
99     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",nb,0,0,15,imat,imat,numele[4 * j] + 1,numele[4 * j + 1] + 1,
100     numele[4 * j + 2] +1 ,numele[4 * j + 3]+1) ;
101     }
102     j ++ ;
103     }
104     fprintf(output,"%5d\n",-1) ;
105     fclose(output) ;
106     }
107     else /* traitement mailles quadratiques */
108     {
109     ext_noe = EXT_OUT_NOE_MOSAIC ;
110     ext_mai = EXT_OUT_ELE_MOSAIC ;
111     /* ecriture des noeuds */
112     /* ecriture du .COR */
113     temp[0] = 0 ;
114     strcpy(temp,gest->name) ;
115     strncat(temp,ext_noe,7) ;
116     if ( (output = fopen(temp,"w")) == NULL)
117     {
118     m3d_erreur(ERR_OPEN_RESU) ;
119     *ierr = VRAI ;
120     return ;
121     }
122     /* nombre de noeud ddl dimension et echelle : a modifier */
123     fprintf(output,"%5d%5d%5d%10f%10f%10f%5d\n",nb_noeud,6,3,1.,1.,1.,gest->nb_noe_qua) ;
124     /* noeuds appartenant au maillage de la peau */
125     for (i=0;i<gest->nb_noe_qua;i++)
126     /* fprintf(output,"%5d%10f%10f%10f%5d\n",i+1,coord2[x(i)],coord2[y(i)],coord2[z(i)],gest->tabcor[i+1]) ; */
127     {
128     fprintf(output,"%5d",i+1) ;
129     fprintf(output," ") ;
130     m3d_prn(output,9,coord2[x(i)]) ;
131     fprintf(output," ") ;
132     m3d_prn(output,9,coord2[y(i)]) ;
133     fprintf(output," ") ;
134     m3d_prn(output,9,coord2[z(i)]) ;
135     fprintf(output,"%5d\n",gest->tabcor[i+1]) ;
136     }
137    
138     /* creation des noeuds generes pendant le maillage */
139     for (i=gest->nb_init;i<nb_noeud;i++)
140     /* fprintf(output,"%5d%10f%10f%10f%5d\n",i+1+gest->nb_noe_qua -(gest->nb_init),coord[x(i)],coord[y(i)],coord[z(i)],gest->numax+i+1 -(gest->nb_init)) ; */
141    
142     {
143     fprintf(output,"%5d",i+1+gest->nb_noe_qua -(gest->nb_init)) ;
144     fprintf(output," ") ;
145     m3d_prn(output,9,coord[x(i)]) ;
146     fprintf(output," ") ;
147     m3d_prn(output,9,coord[y(i)]) ;
148     fprintf(output," ") ;
149     m3d_prn(output,9,coord[z(i)]) ;
150     fprintf(output,"%5d\n",gest->numax+i+1 -(gest->nb_init)) ;
151     }
152    
153     /* creation des noeuds intermediaires */
154     /* remarque si les 2 numeros des segments (nouvelle numerotation) sont inferieures a
155     gest->nb_init, le noeud milieu existe deja sinon , il faut le creer */
156     /* creation d'un tableau de connectivite par segment */
157     gest->connec = (int*)calloc(2*MAX_CONNEC*nb_noeud,sizeof(int)) ;
158     /* une case pour stocker le numero du noeud intermediaire */
159     if (gest->connec == NULL)
160     {
161     m3d_erreur(ERR_OPEN_RESU) ;
162     *ierr = VRAI ;
163     return ;
164     }
165     connec = gest->connec ;
166     /* connec[i*MAX_CONNEC*j] = jeme voisin du noeud i */
167     for (i=0;i<2*MAX_CONNEC*nb_noeud;i++) connec[i] = NUM_STOP ;
168     /* passer les sommets de numele2 en nouvelle numerotation -1 */
169     numele2 = gest->numele2 ;
170     /* les numeros des noeuds intermediaires sont inchanges */
171     /* stocker le milieu des segments des elements de peau */
172     /* les numeros commencent a 0 = numero du maillage lineaire */
173     for (i=0;i<gest->nb_2d;i++) /* elements de peau */
174     {
175     n1 = neww[numele2[6*i]] - 1 ;
176     n2 = neww[numele2[6*i+2]] - 1 ;
177     n3 = neww[numele2[6*i+4]] - 1 ;
178    
179     /* n1 - n2 */
180    
181     num1 = min(n1,n2) ;
182     num2 = max(n1,n2) ;
183    
184     ok = FAUX ;
185     k = 0 ;
186     /* table des noeuds connectes a n1 , ke voisins */
187     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
188     {
189     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
190     k++ ;
191     }
192     /* insertion */
193     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
194     {
195     m3d_erreur(ERR_OPEN_RESU) ;
196     *ierr = VRAI ;
197     return ;
198     }
199     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
200     {
201     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
202     connec[2*(num1*MAX_CONNEC+k)+1] = numele2[6*i+1] ;
203     }
204    
205     /* n2 - n3 */
206    
207     num1 = min(n2,n3) ;
208     num2 = max(n2,n3) ;
209    
210     ok = FAUX ;
211     k = 0 ;
212     /* table des noeuds connectes a n1 , ke voisins */
213     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
214     {
215     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
216     k++ ;
217     }
218     /* insertion */
219     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
220     {
221     m3d_erreur(ERR_OPEN_RESU) ;
222     *ierr = VRAI ;
223     return ;
224     }
225     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
226     {
227     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
228     connec[2*(num1*MAX_CONNEC+k)+1] = numele2[6*i+3] ;
229     }
230     /* n1 - n3 */
231    
232     num1 = min(n1,n3) ;
233     num2 = max(n1,n3) ;
234    
235     ok = FAUX ;
236     k = 0 ;
237     /* table des noeuds connectes a n1 , ke voisins */
238     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
239     {
240     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
241     k++ ;
242     }
243     /* insertion */
244     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
245     {
246     m3d_erreur(ERR_OPEN_RESU) ;
247     *ierr = VRAI ;
248     return ;
249     }
250     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
251     {
252     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
253     connec[2*(num1*MAX_CONNEC+k)+1] = numele2[6*i+5] ;
254     }
255     }
256     /* parcours du tableau des elements */
257     nb = 0 ;
258     j = 0 ;
259     nb_cree = 0 ;
260     while (nb<nb_tetra_cree)
261     {
262     if (numele[4 * j] !=123456789)
263     {
264     nb++ ;
265     n1 = numele[4*j] ;
266     n2 = numele[4*j+1] ;
267     n3 = numele[4*j+2] ;
268     n4 = numele[4*j+3] ;
269    
270     /* traitement des segments */
271     /* n1 n2 */
272     num1 = min(n1,n2) ;
273     num2 = max(n1,n2) ;
274     /* doit on creer un noeud */
275     ok = FAUX ;
276     k = 0 ;
277     /* table des noeuds connectes a n1 , ke voisins */
278     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
279     {
280     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
281     k++ ;
282     }
283     /* insertion */
284     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
285     {
286     m3d_erreur(ERR_OPEN_RESU) ;
287     *ierr = VRAI ;
288     return ;
289     }
290     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
291     {
292     nb_cree++ ;
293     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
294     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
295     vec[0] = 0.5*(coord[x(num1)]+coord[x(num2)]) ;
296     vec[1] = 0.5*(coord[y(num1)]+coord[y(num2)]) ;
297     vec[2] = 0.5*(coord[z(num1)]+coord[z(num2)]) ;
298     /*
299     fprintf(output,"%5d%10f%10f%10f%5d\n",
300     gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,vec[0],vec[1],vec[2],
301     (gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
302     */
303    
304     fprintf(output,"%5d",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree) ;
305     fprintf(output," ") ;
306     m3d_prn(output,9,vec[0]) ;
307     fprintf(output," ") ;
308     m3d_prn(output,9,vec[1]) ;
309     fprintf(output," ") ;
310     m3d_prn(output,9,vec[2]) ;
311     fprintf(output,"%5d\n",(gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
312     }
313    
314     /* n1 n3 */
315     num1 = min(n1,n3) ;
316     num2 = max(n1,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     vec[0] = 0.5*(coord[x(num1)]+coord[x(num2)]) ;
339     vec[1] = 0.5*(coord[y(num1)]+coord[y(num2)]) ;
340     vec[2] = 0.5*(coord[z(num1)]+coord[z(num2)]) ;
341     /*
342     fprintf(output,"%5d%10f%10f%10f%5d\n",
343     gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,vec[0],vec[1],vec[2],
344     (gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
345     */
346    
347     fprintf(output,"%5d",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree) ;
348     fprintf(output," ") ;
349     m3d_prn(output,9,vec[0]) ;
350     fprintf(output," ") ;
351     m3d_prn(output,9,vec[1]) ;
352     fprintf(output," ") ;
353     m3d_prn(output,9,vec[2]) ;
354     fprintf(output,"%5d\n",(gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
355     }
356    
357     /* n1 n4 */
358     num1 = min(n1,n4) ;
359     num2 = max(n1,n4) ;
360    
361     ok = FAUX ;
362     k = 0 ;
363     /* table des noeuds connectes a n1 , ke voisins */
364     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
365     {
366     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
367     k++ ;
368     }
369     /* insertion */
370     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
371     {
372     m3d_erreur(ERR_OPEN_RESU) ;
373     *ierr = VRAI ;
374     return ;
375     }
376     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
377     {
378     nb_cree++ ;
379     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
380     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
381     vec[0] = 0.5*(coord[x(num1)]+coord[x(num2)]) ;
382     vec[1] = 0.5*(coord[y(num1)]+coord[y(num2)]) ;
383     vec[2] = 0.5*(coord[z(num1)]+coord[z(num2)]) ;
384     /*
385     fprintf(output,"%5d%10f%10f%10f%5d\n",
386     gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,vec[0],vec[1],vec[2],
387     (gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
388     */
389    
390     fprintf(output,"%5d",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree) ;
391     fprintf(output," ") ;
392     m3d_prn(output,9,vec[0]) ;
393     fprintf(output," ") ;
394     m3d_prn(output,9,vec[1]) ;
395     fprintf(output," ") ;
396     m3d_prn(output,9,vec[2]) ;
397     fprintf(output,"%5d\n",(gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
398     }
399    
400     /* n2 n3 */
401     num1 = min(n2,n3) ;
402     num2 = max(n2,n3) ;
403    
404     ok = FAUX ;
405     k = 0 ;
406     /* table des noeuds connectes a n1 , ke voisins */
407     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
408     {
409     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
410     k++ ;
411     }
412     /* insertion */
413     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
414     {
415     m3d_erreur(ERR_OPEN_RESU) ;
416     *ierr = VRAI ;
417     return ;
418     }
419     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
420     {
421     nb_cree++ ;
422     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
423     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
424     vec[0] = 0.5*(coord[x(num1)]+coord[x(num2)]) ;
425     vec[1] = 0.5*(coord[y(num1)]+coord[y(num2)]) ;
426     vec[2] = 0.5*(coord[z(num1)]+coord[z(num2)]) ;
427     /*
428     fprintf(output,"%5d%10f%10f%10f%5d\n",
429     gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,vec[0],vec[1],vec[2],
430     (gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
431     */
432    
433     fprintf(output,"%5d",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree) ;
434     fprintf(output," ") ;
435     m3d_prn(output,9,vec[0]) ;
436     fprintf(output," ") ;
437     m3d_prn(output,9,vec[1]) ;
438     fprintf(output," ") ;
439     m3d_prn(output,9,vec[2]) ;
440     fprintf(output,"%5d\n",(gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
441     }
442    
443     num1 = min(n2,n4) ;
444     num2 = max(n2,n4) ;
445    
446     ok = FAUX ;
447     k = 0 ;
448     /* table des noeuds connectes a n1 , ke voisins */
449     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
450     {
451     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
452     k++ ;
453     }
454     /* insertion */
455     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
456     {
457     m3d_erreur(ERR_OPEN_RESU) ;
458     *ierr = VRAI ;
459     return ;
460     }
461     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
462     {
463     nb_cree++ ;
464     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
465     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
466     vec[0] = 0.5*(coord[x(num1)]+coord[x(num2)]) ;
467     vec[1] = 0.5*(coord[y(num1)]+coord[y(num2)]) ;
468     vec[2] = 0.5*(coord[z(num1)]+coord[z(num2)]) ;
469     /*
470     fprintf(output,"%5d%10f%10f%10f%5d\n",
471     gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,vec[0],vec[1],vec[2],
472     (gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
473     */
474    
475     fprintf(output,"%5d",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree) ;
476     fprintf(output," ") ;
477     m3d_prn(output,9,vec[0]) ;
478     fprintf(output," ") ;
479     m3d_prn(output,9,vec[1]) ;
480     fprintf(output," ") ;
481     m3d_prn(output,9,vec[2]) ;
482     fprintf(output,"%5d\n",(gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
483     }
484    
485     num1 = min(n3,n4) ;
486     num2 = max(n3,n4) ;
487    
488     ok = FAUX ;
489     k = 0 ;
490     /* table des noeuds connectes a n1 , ke voisins */
491     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
492     {
493     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
494     k++ ;
495     }
496     /* insertion */
497     if (k>MAX_CONNEC-1) /* il n'y a plus de place : erreur */
498     {
499     m3d_erreur(ERR_OPEN_RESU) ;
500     *ierr = VRAI ;
501     return ;
502     }
503     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
504     {
505     nb_cree++ ;
506     connec[2*(num1*MAX_CONNEC+k)] = num2 ;
507     connec[2*(num1*MAX_CONNEC+k)+1] = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;
508     vec[0] = 0.5*(coord[x(num1)]+coord[x(num2)]) ;
509     vec[1] = 0.5*(coord[y(num1)]+coord[y(num2)]) ;
510     vec[2] = 0.5*(coord[z(num1)]+coord[z(num2)]) ;
511     /*
512     fprintf(output,"%5d%10f%10f%10f%5d\n",
513     gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,vec[0],vec[1],vec[2],
514     (gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
515     */
516    
517     fprintf(output,"%5d",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree) ;
518     fprintf(output," ") ;
519     m3d_prn(output,9,vec[0]) ;
520     fprintf(output," ") ;
521     m3d_prn(output,9,vec[1]) ;
522     fprintf(output," ") ;
523     m3d_prn(output,9,vec[2]) ;
524     fprintf(output,"%5d\n",(gest->numax)+nb_noeud-(gest->nb_init)+nb_cree) ;
525     }
526     }
527     j ++ ;
528     }
529     /* fermeture du fichier des noeuds */
530     fprintf(output,"%5d\n",-1) ;
531     /* modification du nombre de noeuds */
532     fclose(output) ;
533     if ( (output = fopen(temp,"r+")) == NULL)
534     {
535     m3d_erreur(ERR_OPEN_RESU) ;
536     *ierr = VRAI ;
537     return ;
538     }
539     fprintf(output,"%5d%5d%5d%10f%10f%10f%5d\n",gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree,6,3,1.,1.,1.,gest->nb_noe_qua) ;
540     /* gest->nb_noeud = gest->nb_noe_qua+nb_noeud-(gest->nb_init)+nb_cree ;*/
541     fclose(output) ;
542     /* renumerotation des noeuds */
543     /* ouverture du fichier .ELE resultats */
544     temp[0] = 0 ;
545     strcpy(temp,gest->name) ;
546     strncat(temp,ext_mai,7) ;
547     if ( (output = fopen(temp,"w")) == NULL)
548     {
549     m3d_erreur(ERR_OPEN_RESU) ;
550     *ierr = VRAI ;
551     return ;
552     }
553     fprintf(output,"%5d%5d%5d%5d%5d\n",nb_tetra_cree,10,0,0,0) ;
554     nb = 0 ;
555     j = 0 ;
556     while (nb<nb_tetra_cree)
557     {
558     if (numele[4 * j] !=123456789)
559     {
560     nb++ ;
561     crit = m3d_e_qual(coord,numele[4*j],numele[4*j+1],numele[4*j+2],numele[4*j+3]) ;
562     if (crit>0.5) imat = 1 ;
563     else if (crit>0.2) imat = 2 ;
564     else if (crit>0.1) imat = 3 ;
565     else imat = 4 ;
566    
567     n1 = numele[4*j] ;
568     n2 = numele[4*j+1] ;
569     n3 = numele[4*j+2] ;
570     n4 = numele[4*j+3] ;
571    
572     /* n1 - n2 */
573     num1 = min(n1,n2) ;
574     num2 = max(n1,n2) ;
575    
576     ok = FAUX ;
577     k = 0 ;
578     /* table des noeuds connectes a n1 , ke voisins */
579     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
580     {
581     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
582     k++ ;
583     }
584     if (ok == FAUX)
585     {
586     m3d_erreur(ERR_OPEN_RESU) ;
587     *ierr = VRAI ;
588     return ;
589     }
590     n5 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
591    
592     /* n2 - n3 */
593     num1 = min(n2,n3) ;
594     num2 = max(n2,n3) ;
595    
596     ok = FAUX ;
597     k = 0 ;
598     /* table des noeuds connectes a n1 , ke voisins */
599     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
600     {
601     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
602     k++ ;
603     }
604     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
605     {
606     m3d_erreur(ERR_OPEN_RESU) ;
607     *ierr = VRAI ;
608     return ;
609     }
610     n6 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
611    
612     /* n1 - n3 */
613     num1 = min(n1,n3) ;
614     num2 = max(n1,n3) ;
615    
616     ok = FAUX ;
617     k = 0 ;
618     /* table des noeuds connectes a n1 , ke voisins */
619     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
620     {
621     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
622     k++ ;
623     }
624     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
625     {
626     m3d_erreur(ERR_OPEN_RESU) ;
627     *ierr = VRAI ;
628     return ;
629     }
630     n7 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
631    
632     /* n1 - n4 */
633     num1 = min(n1,n4) ;
634     num2 = max(n1,n4) ;
635    
636     ok = FAUX ;
637     k = 0 ;
638     /* table des noeuds connectes a n1 , ke voisins */
639     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
640     {
641     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
642     k++ ;
643     }
644     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
645     {
646     m3d_erreur(ERR_OPEN_RESU) ;
647     *ierr = VRAI ;
648     return ;
649     }
650     n8 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
651    
652     /* n2 - n4 */
653     num1 = min(n2,n4) ;
654     num2 = max(n2,n4) ;
655    
656     ok = FAUX ;
657     k = 0 ;
658     /* table des noeuds connectes a n1 , ke voisins */
659     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
660     {
661     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
662     k++ ;
663     }
664     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
665     {
666     m3d_erreur(ERR_OPEN_RESU) ;
667     *ierr = VRAI ;
668     return ;
669     }
670     n9 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
671    
672     /* n3 - n4 */
673     num1 = min(n3,n4) ;
674     num2 = max(n3,n4) ;
675    
676     ok = FAUX ;
677     k = 0 ;
678     /* table des noeuds connectes a n1 , ke voisins */
679     while ((connec[2*(num1*MAX_CONNEC+k)]!=NUM_STOP) && (ok == FAUX) && (k<MAX_CONNEC))
680     {
681     if (connec[2*(num1*MAX_CONNEC+k)] == num2) ok = VRAI ;
682     k++ ;
683     }
684     if (ok == FAUX)/* le noeud n'a pas ete trouve, on peut le generer */
685     {
686     m3d_erreur(ERR_OPEN_RESU) ;
687     *ierr = VRAI ;
688     return ;
689     }
690     n10 = connec[2*(num1*MAX_CONNEC+k-1)+ 1] ;
691    
692     if (n1<gest->nb_init) n1 = old[n1+1] ;/* numeros fortran */
693     else n1 = (gest->nb_noe_qua - gest->nb_init) + n1 + 1 ;
694     if (n2<gest->nb_init) n2 = old[n2+1] ;/* numeros fortran */
695     else n2 = (gest->nb_noe_qua - gest->nb_init) + n2 + 1 ;
696     if (n3<gest->nb_init) n3 = old[n3+1] ;/* numeros fortran */
697     else n3 = (gest->nb_noe_qua - gest->nb_init) + n3 + 1 ;
698     if (n4<gest->nb_init) n4 = old[n4+1] ;/* numeros fortran */
699     else n4 = (gest->nb_noe_qua - gest->nb_init) + n4 + 1 ;
700    
701     fprintf(output,"%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d%5d\n",nb,0,0,26,imat,imat,n1,n5,n2,n6,n3,n7,n8,n9,n10,n4) ;
702     /* fermeture du fichier des elements */
703     }
704     j++ ;
705     }
706     fprintf(output,"%5d\n",-1) ;
707     }
708     return ;
709     }