ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 304
Committed: Mon Jan 9 23:42:24 2012 UTC (13 years, 7 months ago) by gervaislavoie
File size: 27196 byte(s)
Log Message:
Erreur si l'axe X est normal a un element de plaque reglee.
Possibilite de desactiver la deforme par l'utilisateur avec l'option "nodeforme".

File Contents

# Content
1
2 //------------------------------------------------------------
3 //------------------------------------------------------------
4 // MAGiC
5 // Jean Christophe Cuilli�e et Vincent FRANCOIS
6 // D�artement de G�ie M�anique - UQTR
7 //------------------------------------------------------------
8 // Le projet MAGIC est un projet de recherche du d�artement
9 // de g�ie m�anique de l'Universit�du Qu�ec �
10 // Trois Rivi�es
11 // Les librairies ne peuvent �re utilis�s sans l'accord
12 // des auteurs (contact : francois@uqtr.ca)
13 //------------------------------------------------------------
14 //------------------------------------------------------------
15 //
16 // main.cpp
17 //
18 //------------------------------------------------------------
19 //------------------------------------------------------------
20 // COPYRIGHT 2000
21 // Version du 02/03/2006 �11H25
22 //------------------------------------------------------------
23 //------------------------------------------------------------
24 #include "gestionversion.h"
25 #ifdef WINDOWS_VERSION
26 #include "fenetre.h"
27 #endif
28
29
30 #include <string.h>
31 #include "main.h"
32 #include "mg_file.h"
33 #include "mg_export.h"
34 #include "mg_import.h"
35 #include "mg_lissage.h"
36 #include "step_import.h"
37 #include "acis_import.h"
38 #include "step_import.h"
39 #include "occ_import.h"
40 #include "aide.h"
41 #include "mc_gestionnaire.h"
42 #include "vct_multi_modele.h"
43 #include <ctype.h>
44 #include <math.h>
45
46
47 //---------------------------------------------------------------------------
48
49 void affiche(char* message)
50 {
51 #ifdef WINDOWS_VERSION
52 Form1->Memo1->Lines->Add(message);
53 #else
54 std::cout << message << std::endl;
55 #endif
56 }
57
58 void minuscule(char * mess)
59 {
60 int nb=strlen(mess);
61 for (int i=0;i<nb;i++)
62 mess[i]=tolower(mess[i]);
63 }
64
65 #ifdef WINDOWS_VERSION
66 int amain(int argc,char **argv)
67 #else
68 int main(int argc,char **argv)
69 #endif
70 {
71 affiche((char*)"Operation dans l'environnement MAGiC\n\n");
72 char nomfichier[3000];
73 char fichierout[3000];
74 char fichieraster[3000];
75 char fichieroptis[3000];
76 char fichierflottant[3000];
77 char fichierdensite[3000];
78 char coderesu[10];
79 int nummai;
80 int degre;
81 int action=0;
82 int numgeo=0;
83 int numgt=0;
84 int numentite=0;
85 int expand=0;
86 int numsol1=0;
87 int numsol2=0;
88 int numsol3=0;
89 int numchamp1=0;
90 int numchamp2=0;
91 int numchamp3=0;
92 int flottant=0;
93 int desactivedeforme=0;
94 int consimpose=0;
95 int consmailleurauto=0;
96 int consopti=0;
97 double unite=1;
98 double seuil=0.8;
99 double eps=1e-6;
100 double eps2=1.;
101 double niveau=150.;
102 int iter_max = 10;
103 double sigma;
104 double gamma=1.; //par d�faut 1.0
105 double sigmaf=1.; //par d�faut 1.0
106 double sigmag=1.; //par d�faut 1.0
107 int reactivation = 0;
108 int bruitage = 0;
109 int lissage = 0;
110 int importtri=0;
111 sigma = 0.038/sqrt(10.); //valeur par d�faut
112 char ccf[500];
113 INIAIDE;
114 if (argc==2) strcpy(nomfichier,argv[1]);
115 else if (argc>2)
116 {
117 for (int i=0;i<argc;i++)
118 {
119 if (strcmp(argv[i],"-file")==0) strcpy(nomfichier,argv[i+1]);
120 if (strcmp(argv[i],"-fileout")==0) strcpy(fichierout,argv[i+1]);
121 if (strcmp(argv[i],"-mesh")==0) nummai=atol(argv[i+1]);
122 if (strcmp(argv[i],"-numsol1")==0) numsol1=atol(argv[i+1]);
123 if (strcmp(argv[i],"-numsol2")==0) numsol2=atol(argv[i+1]);
124 if (strcmp(argv[i],"-numsol3")==0) numsol3=atol(argv[i+1]);
125 if (strcmp(argv[i],"-numchamp1")==0) numchamp1=atol(argv[i+1]);
126 if (strcmp(argv[i],"-numchamp2")==0) numchamp2=atol(argv[i+1]);
127 if (strcmp(argv[i],"-numchamp3")==0) numchamp3=atol(argv[i+1]);
128 if (strcmp(argv[i],"-geo")==0) numgeo=atol(argv[i+1]);
129 if (strcmp(argv[i],"-groupe")==0) numgt=atol(argv[i+1]);
130 if (strcmp(argv[i],"-entite")==0) numentite=atol(argv[i+1]);
131 if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
132 if (strcmp(argv[i],"-unite")==0) unite=atof(argv[i+1]);
133 if (strcmp(argv[i],"-seuil")==0) seuil=atof(argv[i+1]);
134 if (strcmp(argv[i],"-niveau")==0) niveau=atof(argv[i+1]);
135 if (strcmp(argv[i],"-aster")==0) strcpy(fichieraster,argv[i+1]);
136 if (strcmp(argv[i],"-densite")==0) strcpy(fichierdensite,argv[i+1]);
137 if (strcmp(argv[i],"-optis")==0) strcpy(fichieroptis,argv[i+1]);
138 if (strcmp(argv[i],"-ficflottant")==0) strcpy(fichierflottant,argv[i+1]);
139 if (strcmp(argv[i],"-coderesu")==0) strcpy(coderesu,argv[i+1]);
140 if (strcmp(argv[i],"-flottant")==0) flottant = 1;
141 if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
142 if (strcmp(argv[i],"-iter")==0) iter_max=atol(argv[i+1]);
143 if (strcmp(argv[i],"-sigma")==0) sigma=atof(argv[i+1]);
144 if (strcmp(argv[i],"-gamma")==0) gamma=atof(argv[i+1]);
145 if (strcmp(argv[i],"-sigmaf")==0) sigmaf=atof(argv[i+1]);
146 if (strcmp(argv[i],"-sigmag")==0) sigmag=atof(argv[i+1]);
147 if (strcmp(argv[i],"-fem")==0) action=1;
148 if (strcmp(argv[i],"-femdef")==0) action=15;
149 if (strcmp(argv[i],"-expand")==0) expand=1;
150 if (strcmp(argv[i],"-stepocc")==0) action=2;
151 if (strcmp(argv[i],"-magicgmsh")==0) action=3;
152 if (strcmp(argv[i],"-magicaster")==0) action=4;
153 if (strcmp(argv[i],"-stepmagic")==0) action=5;
154 if (strcmp(argv[i],"-satmagic")==0) action=6;
155 if (strcmp(argv[i],"-cttgmsh")==0) action=7;
156 if (strcmp(argv[i],"-occmagic")==0) action=8;
157 if (strcmp(argv[i],"-astermagic")==0) action=9;
158 if (strcmp(argv[i],"-magicoptis")==0) action=10;
159 if (strcmp(argv[i],"-optismagic")==0) action=11;
160 if (strcmp(argv[i],"-selectionne")==0) action=12;
161 if (strcmp(argv[i],"-deselectionne")==0) action=13;
162 if (strcmp(argv[i],"-examine")==0) action=14;
163 if (strcmp(argv[i],"-fusiongeo")==0) action=17;
164 if (strcmp(argv[i],"-importdensite")==0) action=18;
165 if (strcmp(argv[i],"-lissage")==0) action=16;
166 if (strcmp(argv[i],"-liss1")==0) lissage = 1;
167 if (strcmp(argv[i],"-liss2")==0) lissage = 2;
168 if (strcmp(argv[i],"-liss3")==0) lissage = 3;
169 if (strcmp(argv[i],"-bruitage")==0) bruitage = 1;
170 if (strcmp(argv[i],"-reactivation")==0) reactivation = 1;
171 if (strcmp(argv[i],"-cons_optimise")==0) consopti = 1;
172 if (strcmp(argv[i],"-cons_impose")==0) consimpose = 1;
173 if (strcmp(argv[i],"-cons_mailleurauto")==0) consmailleurauto = 1;
174 if (strcmp(argv[i],"-importtriangulation")==0) importtri=1;
175 if (strcmp(argv[i],"-importstl")==0) importtri=2;
176 if (strcmp(argv[i],"-deflexion")==0) eps2=atof(argv[i+1]);
177 if (strcmp(argv[i],"-ccf_id")==0) {action=19;strcpy(ccf,argv[i+1]);};
178 if (strcmp(argv[i],"-ccft_id")==0) {action=20;strcpy(ccf,argv[i+1]);};
179 if (strcmp(argv[i],"-ccf_num")==0) {action=21;strcpy(ccf,argv[i+1]);};
180 if (strcmp(argv[i],"-ccft_num")==0) {action=22;strcpy(ccf,argv[i+1]);};
181 if (strcmp(argv[i],"-ccfhelp")==0) action=23;
182 if (strcmp(argv[i],"-nodeforme")==0) desactivedeforme=1;
183
184
185 }
186 }
187 else {
188 AFFAIDE;
189 return 0;
190 }
191 char mess[3000];
192 char *p;
193 char extension[50];
194 char chaine[3000];
195
196 if (strcmp(nomfichier,"-ccfhelp")==0) action=23;
197 else
198 {
199
200 sprintf(mess," Fichier : %s",nomfichier);
201 affiche(mess);
202 p=strrchr(nomfichier,'.');
203 strcpy(extension,p);
204 minuscule(extension);
205 for (int i=0;i<3000;i++) chaine[i]=0;
206 }
207 if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
208 {
209 sprintf(mess," Conversion MAGiC vers GMSH");
210 affiche(mess);
211 MG_FILE gest(nomfichier);
212 int nb=gest.get_nb_mg_maillage();
213 char chaine[3000];
214 for (int i=0;i<nb;i++)
215 {
216 MG_MAILLAGE* mai=gest.get_mg_maillage(i);
217 unsigned long id=mai->get_id();
218 strncpy(chaine,nomfichier,p-nomfichier);
219 char chaine2[3000];
220 sprintf(chaine2,"%s%lu",chaine,id);
221 std::string namefic=chaine2;
222 MG_EXPORT exp;
223 exp.gmsh(mai,namefic);
224 }
225 nb=gest.get_nb_fem_maillage();
226 for (int i=0;i<nb;i++)
227 {
228 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
229 if (desactivedeforme==1) mai->desactive_deforme();
230 unsigned long id=mai->get_id();
231 strncpy(chaine,nomfichier,p-nomfichier);
232 char chaine2[3000];
233 sprintf(chaine2,"%s%lu",chaine,id);
234 std::string namefic=chaine2;
235 MG_EXPORT exp;
236 double coef=eps;
237 if (coef<0.)
238 {
239 coef=mai->calcul_coef();
240 sprintf(mess," Coefficient de deforme pour le maillage %lu est de %le",mai->get_id(),coef);
241 affiche(mess);
242 }
243 exp.gmsh(mai,namefic,coef);
244 }
245 }
246 if (action==4)
247 {
248 sprintf(mess," Conversion MAGiC vers code ASTER");
249 affiche(mess);
250 MG_FILE gest(nomfichier);
251 int nb=gest.get_nb_fem_maillage();
252 char chaine[1000];
253 for (int i=0;i<nb;i++)
254 {
255 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
256 unsigned long id=mai->get_id();
257 strncpy(chaine,nomfichier,p-nomfichier);
258 char chaine2[3000];
259 sprintf(chaine2,"%s%lu",chaine,id);
260 std::string namefic=chaine2;
261 MG_EXPORT exp;
262 exp.aster2(mai,namefic,0,coderesu);
263 }
264 }
265 if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
266 {
267 sprintf(mess," Conversion carte de taille vers GMSH");
268 affiche(mess);
269 FCT_GENERATEUR_3D<4> carte;
270 carte.lire(nomfichier);
271 strncpy(chaine,nomfichier,p-nomfichier);
272 std::string namefic=chaine;
273 MG_EXPORT exp;
274 exp.gmsh(&carte,namefic);
275 }
276 #ifdef BREP_STEP
277 if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
278 {
279 sprintf(mess," Conversion STEP vers MAGiC");
280 affiche(mess);
281 STEP_IMPORT stepimport;
282 MG_GESTIONNAIRE gest;
283 stepimport.importer(gest,nomfichier) ;
284 strncpy(chaine,nomfichier,p-nomfichier);
285 std::string namefic=chaine;
286 namefic=namefic + ".magic";
287 int nb=gest.get_nb_mg_geometrie();
288 for (int i=0;i<nb;i++)
289 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
290 gest.enregistrer(namefic.c_str());
291 }
292 #endif
293 #ifdef BREP_SAT
294 if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
295 {
296 sprintf(mess," Conversion SAT vers MAGiC");
297 affiche(mess);
298 MG_GESTIONNAIRE gest;
299 ACIS_IMPORT acisimport;
300 acisimport.importer(gest,nomfichier) ;
301 strncpy(chaine,nomfichier,p-nomfichier);
302 std::string namefic=chaine;
303 namefic=namefic + ".magic";
304 int nb=gest.get_nb_mg_geometrie();
305 for (int i=0;i<nb;i++)
306 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
307 gest.enregistrer(namefic.c_str());
308 }
309 #endif
310 if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
311 {
312 #ifdef BREP_OCC
313 sprintf(mess," Conversion OpenCascade vers MAGiC");
314 affiche(mess);
315 MG_GESTIONNAIRE gest;
316 OCC_IMPORT occimport;
317 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
318 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
319 strncpy(chaine,nomfichier,p-nomfichier);
320 std::string namefic=chaine;
321 namefic=namefic + ".magic";
322 int nb=gest.get_nb_mg_geometrie();
323 for (int i=0;i<nb;i++)
324 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
325 gest.enregistrer(namefic.c_str());
326 #endif
327 }
328 if (action==2)
329 {
330 #ifdef BREP_OCC
331 sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
332 affiche(mess);
333 MG_GESTIONNAIRE gest;
334 OCC_IMPORT occimport;
335 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,unite,eps) ;
336 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
337 strncpy(chaine,nomfichier,p-nomfichier);
338 std::string namefic=chaine;
339 namefic=namefic + ".magic";
340 int nb=gest.get_nb_mg_geometrie();
341 for (int i=0;i<nb;i++)
342 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
343 gest.enregistrer(namefic.c_str());
344 #endif
345 }
346 if (action==1)
347 {
348 sprintf(mess," Creation d'un maillage FEM");
349 affiche(mess);
350 MG_FILE gest(nomfichier);
351 MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
352 FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
353 gest.ajouter_fem_maillage(fem);
354 fem->construire(0);
355 gest.enregistrer(nomfichier);
356 }
357 if (action==9)
358 {
359 sprintf(mess," Importation des résultats ASTER vers MAGIC");
360 affiche(mess);
361 MG_FILE gest(nomfichier);
362 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
363 MG_IMPORT imp;
364 imp.aster2(mai,fichieraster,nomfichier);
365 gest.enregistrer(nomfichier);
366 }
367 if (action==10)
368 {
369 sprintf(mess," Conversion MAGiC vers OPTIS");
370 affiche(mess);
371 MG_FILE gest(nomfichier);
372 int nb=gest.get_nb_fem_maillage();
373 char chaine[1000];
374 for (int i=0;i<nb;i++)
375 {
376 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
377 unsigned long id=mai->get_id();
378 strncpy(chaine,nomfichier,p-nomfichier);
379 char chaine2[3000];
380 sprintf(chaine2,"%s%lu",chaine,id);
381 std::string namefic=chaine2;
382 MG_EXPORT exp;
383 exp.aster(mai,namefic,1,coderesu);
384 }
385 }
386 if (action==11)
387 {
388 sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
389 affiche(mess);
390 MG_FILE gest(nomfichier);
391 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
392 MG_IMPORT imp;
393 imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
394 gest.enregistrer(nomfichier);
395 }
396 if (action==12)
397 {
398 sprintf(mess," Selection dans MAGIC");
399 affiche(mess);
400 MG_FILE gest(nomfichier);
401 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
402 MG_GROUPE_TOPOLOGIQUE* mggt;
403 if (numgt==0)
404 {
405 mggt=new MG_GROUPE_TOPOLOGIQUE;
406 mggeo->ajouter_mg_groupe_topologique(mggt);
407 }
408 else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
409 MG_ELEMENT_TOPOLOGIQUE* ele;
410 ele=mggeo->get_mg_sommetid(numentite);
411 if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
412 if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
413 if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
414 if (ele!=NULL)
415 {
416 mggt->ajouter(ele);
417 if (expand)
418 {
419 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
420 ele->get_topologie_sousjacente(&lst);
421 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
422 for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
423 mggt->ajouter(ele2);
424 }
425 }
426 gest.enregistrer(nomfichier);
427 }
428 if (action==13)
429 {
430 sprintf(mess," Deselection dans MAGIC");
431 affiche(mess);
432 MG_FILE gest(nomfichier);
433 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
434 MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
435 MG_ELEMENT_TOPOLOGIQUE* ele;
436 ele=mggeo->get_mg_sommetid(numentite);
437 if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
438 if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
439 if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
440 if (ele!=NULL)
441 {
442 mggt->supprimer(ele);
443 if (expand)
444 {
445 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
446 ele->get_topologie_sousjacente(&lst);
447 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
448 for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
449 mggt->supprimer(ele2);
450 }
451 }
452 gest.enregistrer(nomfichier);
453 }
454 if (action==16)
455 {
456 sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
457 affiche(mess);
458 MG_FILE gest(nomfichier);
459 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
460 MG_GESTIONNAIRE gest2;
461 MG_LISSAGE liss;
462 liss.active_affichage(affiche);
463 liss.lisse(mai,gest2,eps,sigma,sigmaf,sigmag,gamma,iter_max,reactivation,bruitage,lissage,consopti,consimpose,consmailleurauto);
464 gest2.enregistrer(fichierout);
465 }
466 sprintf(mess,"Conversion reussie");
467
468 if (action==14)
469 {
470 sprintf(mess," Analyse MAGIC");
471 affiche(mess);
472 MG_FILE gest(nomfichier);
473 char message [5000];
474 int nbgeo=gest.get_nb_mg_geometrie();
475 sprintf(message," %d geometrie :",nbgeo);
476 for (int i=0;i<nbgeo;i++)
477 {
478 MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
479 sprintf(message,"%s %lu ",message,geo->get_id());
480 }
481 affiche(message);
482 for (int i=0;i<nbgeo;i++)
483 {
484 MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
485 sprintf(message," geometrie %lu",geo->get_id());
486 affiche(message);
487 int nbmg=geo->get_nb_mg_groupe_topologique();
488 sprintf(message," %d groupe topologique",nbmg);
489 for (int j=0;j<nbmg;j++)
490 {
491 MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
492 sprintf(message,"%s %lu ",message,mggp->get_id());
493 }
494 affiche(message);
495 int nbvolume=geo->get_nb_mg_volume();
496 if (nbvolume==0) sprintf(message," %d volumes",geo->get_nb_mg_volume());
497 else sprintf(message," %d volumes : ",geo->get_nb_mg_volume());
498 for (int i=0;i<nbvolume;i++) sprintf(message,"%s %lu",message,geo->get_mg_volume(i)->get_id());
499 affiche(message);
500 int nbcoque=geo->get_nb_mg_coque();
501 if (nbcoque==0) sprintf(message," %d coques",geo->get_nb_mg_coque());
502 else sprintf(message," %d coques : ",geo->get_nb_mg_coque());
503 for (int i=0;i<nbcoque;i++) sprintf(message,"%s %lu",message,geo->get_mg_coque(i)->get_id());
504 affiche(message);
505 int nbpoutre=geo->get_nb_mg_poutre();
506 if (nbpoutre==0) sprintf(message," %d poutres",geo->get_nb_mg_poutre());
507 else sprintf(message," %d poutres : ",geo->get_nb_mg_poutre());
508 for (int i=0;i<nbpoutre;i++) sprintf(message,"%s %lu",message,geo->get_mg_poutre(i)->get_id());
509 affiche(message);
510 sprintf(message," %d coquilles",geo->get_nb_mg_coquille());
511 affiche(message);
512 sprintf(message," %d faces",geo->get_nb_mg_face());
513 affiche(message);
514 sprintf(message," %d aretes",geo->get_nb_mg_arete());
515 affiche(message);
516 sprintf(message," %d sommets",geo->get_nb_mg_sommet());
517 affiche(message);
518
519 }
520 int nbmai=gest.get_nb_mg_maillage();
521 sprintf(message," %d maillage geometrique :",nbmai);
522 affiche(message);
523 for (int i=0;i<nbmai;i++)
524 {
525 MG_MAILLAGE* mai=gest.get_mg_maillage(i);
526 sprintf(message," maillage geometrique %lu ",mai->get_id());
527 affiche(message);
528 sprintf(message," %d noeuds",mai->get_nb_mg_noeud());
529 affiche(message);
530 sprintf(message," %d segments",mai->get_nb_mg_segment());
531 affiche(message);
532 sprintf(message," %d triangles",mai->get_nb_mg_triangle());
533 affiche(message);
534 sprintf(message," %d tetras",mai->get_nb_mg_tetra());
535 affiche(message);
536 }
537 int nbmaif=gest.get_nb_fem_maillage();
538 sprintf(message," %d maillage FEM :",nbmaif);
539 affiche(message);
540 for (int i=0;i<nbmaif;i++)
541 {
542 FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
543 sprintf(message," maillage FEM %lu ",maif->get_id());
544 affiche(message);
545 sprintf(message," %d noeuds",maif->get_nb_fem_noeud());
546 affiche(message);
547 sprintf(message," %d segments",maif->get_nb_fem_segment());
548 affiche(message);
549 sprintf(message," %d triangles",maif->get_nb_fem_triangle());
550 affiche(message);
551 sprintf(message," %d tetras",maif->get_nb_fem_tetra());
552 affiche(message);
553 }
554 int nbsol=gest.get_nb_mg_solution();
555 sprintf(message," %d solution maillage geometrique :",nbsol);
556 for (int i=0;i<nbsol;i++)
557 {
558 MG_SOLUTION* sol=gest.get_mg_solution(i);
559 sprintf(message,"%s %lu ",message,sol->get_id());
560 }
561 affiche(message);
562 int nbsolf=gest.get_nb_fem_solution();
563 sprintf(message," %d solution maillage FEM :",nbsolf);
564 for (int i=0;i<nbsolf;i++)
565 {
566 FEM_SOLUTION* sol=gest.get_fem_solution(i);
567 sprintf(message,"%s %lu ",message,sol->get_id());
568 }
569 affiche(message);
570 }
571 if (action==15)
572 {
573 sprintf(mess," Calcul de deforme");
574 affiche(mess);
575 MG_FILE gest(nomfichier);
576 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
577 FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
578 FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
579 FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
580 affiche(mess);
581 mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
582 gest.enregistrer(nomfichier);
583 }
584 if (action==17)
585 {
586 sprintf(mess," Fusion de géométrie");
587 affiche(mess);
588 MG_FILE gest(nomfichier);
589 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
590 VCT_MULTI_MODELE fusion(mggeo);
591 fusion.recherche_identite();
592 gest.enregistrer(nomfichier);
593 }
594 if (action==18)
595 {
596 sprintf(mess," Création d'une pseudo-solution de la répartition de densite");
597 affiche(mess);
598 MG_FILE gest(nomfichier);
599 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
600 MG_IMPORT imp;
601 imp.import_densite(mai,fichierdensite,nomfichier,3);
602 gest.enregistrer(nomfichier);
603 }
604 if ((action==19) || (action==20))
605 {
606 unsigned long identity;
607 char typeccf[3];
608 double valccf=0.5; // Valeur par défaut
609 sscanf(ccf,"%lu:%c%c:%le\n",&identity,&typeccf[0],&typeccf[1],&valccf);
610 MC_GESTIONNAIRE mcgest;
611 int res=mcgest.existe(typeccf);
612 if (res==0)
613 {
614 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
615 affiche(mess);
616 return 0;
617 }
618 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
619 affiche(mess);
620 MG_FILE gest(nomfichier);
621 MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
622 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
623 MG_VOLUME* ele;
624 ele=geo->get_mg_volumeid(identity);
625 if (ele!=NULL) liste.ajouter(ele);
626 else
627 {
628 MG_COQUE* ele;
629 ele=geo->get_mg_coqueid(identity);
630 if (ele!=NULL) liste.ajouter(ele);
631 else
632 {
633 MG_POUTRE* ele;
634 ele=geo->get_mg_poutreid(identity);
635 if (ele!=NULL) liste.ajouter(ele);
636 else
637 {
638 MG_FACE* ele;
639 ele=geo->get_mg_faceid(identity);
640 if (ele!=NULL) liste.ajouter(ele);
641 else
642 {
643 MG_ARETE* ele;
644 ele=geo->get_mg_areteid(identity);
645 if (ele!=NULL) liste.ajouter(ele);
646 else
647 {
648 MG_SOMMET* ele;
649 ele=geo->get_mg_sommetid(identity);
650 if (ele!=NULL) liste.ajouter(ele);
651 }
652 }
653 }
654 }
655 }
656 if (action==20)
657 {
658 int nb=liste.get_nb();
659 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
660 }
661 int nb=liste.get_nb();
662 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
663 gest.enregistrer(nomfichier);
664 }
665 if ((action==21)|| (action==22))
666 {
667 MC_GESTIONNAIRE mcgest;
668 unsigned long identity;
669 char typeccf[3];
670 double valccf=0.5;
671 char c;
672 sscanf(ccf,"%c:%lu:%c%c:%le\n",&c,&identity,&typeccf[0],&typeccf[1],&valccf);
673 int res=mcgest.existe(typeccf);
674 if (res==0)
675 {
676 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
677 affiche(mess);
678 return 0;
679 }
680 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
681 affiche(mess);
682 MG_FILE gest(nomfichier);
683 MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
684 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
685 MG_FACE* ele=NULL;
686 if (c=='F') ele=geo->get_mg_face(identity);
687 if (ele!=NULL) liste.ajouter(ele);
688 else
689 {
690 MG_ARETE* ele=NULL;
691 if (c=='A') ele=geo->get_mg_arete(identity);
692 if (ele!=NULL) liste.ajouter(ele);
693 else
694 {
695 MG_SOMMET* ele=NULL;
696 if (c=='S') ele=geo->get_mg_sommet(identity);
697 if (ele!=NULL) liste.ajouter(ele);
698 else
699 {
700 MG_VOLUME* ele=NULL;
701 if (c=='V') ele=geo->get_mg_volume(identity);
702 if (ele!=NULL) liste.ajouter(ele);
703 else
704 {
705 MG_COQUE* ele=NULL;
706 if (c=='C') ele=geo->get_mg_coque(identity);
707 if (ele!=NULL) liste.ajouter(ele);
708 else
709 {
710 MG_POUTRE* ele=NULL;
711 if (c=='P') ele=geo->get_mg_poutre(identity);
712 if (ele!=NULL) liste.ajouter(ele);
713
714 }
715 }
716 }
717 }
718 }
719 if (action==22)
720 {
721 int nb=liste.get_nb();
722 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
723 }
724 int nb=liste.get_nb();
725 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
726 gest.enregistrer(nomfichier);
727 }
728 if (action==23)
729 {
730 sprintf(mess," Liste des conditions aux limites disponibles");
731 affiche(mess);
732 MC_GESTIONNAIRE mcgest;
733 int ok=0;
734 do
735 {
736 std::string code;
737 std::string description;
738 int res=mcgest.get_description(code,description);
739 if (res)
740 {
741 sprintf(mess," %s : %s",code.c_str(),description.c_str());
742 affiche(mess);
743 }
744 else ok=1;
745 }
746 while (ok==0);
747 }
748
749 sprintf(mess,"Fin");
750 affiche(mess);
751
752 return 0;
753 }
754
755
756
757 #pragma package(smart_init)