1 |
francois |
283 |
/* 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 = (char*)EXT_OUT_NOE_MOSAIC ; |
32 |
|
|
ext_mai = (char*)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 = (char*)EXT_OUT_NOE_MOSAIC ; |
110 |
|
|
ext_mai = (char*)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 |
|
|
} |