ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 322
Committed: Thu Mar 1 21:34:08 2012 UTC (13 years, 6 months ago) by francois
File size: 27649 byte(s)
Log Message:
gestion des differentes versions de code aster

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 else {
187 AFFAIDE;
188 return 0;
189 }
190 char mess[3000];
191 char *p;
192 char extension[50];
193 char chaine[3000];
194
195 if (strcmp(nomfichier,"-ccfhelp")==0) action=23;
196 else
197 {
198
199 sprintf(mess," Fichier : %s",nomfichier);
200 affiche(mess);
201 p=strrchr(nomfichier,'.');
202 strcpy(extension,p);
203 minuscule(extension);
204 for (int i=0;i<3000;i++) chaine[i]=0;
205 }
206 if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
207 {
208 sprintf(mess," Conversion MAGiC vers GMSH");
209 affiche(mess);
210 MG_FILE gest(nomfichier);
211 int nb=gest.get_nb_mg_maillage();
212 char chaine[3000];
213 for (int i=0;i<nb;i++)
214 {
215 MG_MAILLAGE* mai=gest.get_mg_maillage(i);
216 unsigned long id=mai->get_id();
217 strncpy(chaine,nomfichier,p-nomfichier);
218 char chaine2[3000];
219 sprintf(chaine2,"%s%lu",chaine,id);
220 std::string namefic=chaine2;
221 MG_EXPORT exp;
222 exp.gmsh(mai,namefic);
223 }
224 nb=gest.get_nb_fem_maillage();
225 for (int i=0;i<nb;i++)
226 {
227 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
228 if (desactivedeforme==1) mai->desactive_deforme();
229 unsigned long id=mai->get_id();
230 strncpy(chaine,nomfichier,p-nomfichier);
231 char chaine2[3000];
232 sprintf(chaine2,"%s%lu",chaine,id);
233 std::string namefic=chaine2;
234 MG_EXPORT exp;
235 double coef=eps;
236 if (coef<0.)
237 {
238 coef=mai->calcul_coef();
239 sprintf(mess," Coefficient de deforme pour le maillage %lu est de %le",mai->get_id(),coef);
240 affiche(mess);
241 }
242 exp.gmsh(mai,namefic,coef);
243 }
244 }
245 if (action==4)
246 {
247 sprintf(mess," Conversion MAGiC vers code ASTER");
248 affiche(mess);
249 MG_FILE gest(nomfichier);
250 int nb=gest.get_nb_fem_maillage();
251 char chaine[1000];
252 for (int i=0;i<nb;i++)
253 {
254 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
255 MG_VOLUME* vol=mai->get_mg_geometrie()->get_mg_volume(0);
256 MG_COQUE* coq=mai->get_mg_geometrie()->get_mg_coque(0);
257 unsigned long id=mai->get_id();
258 strncpy(chaine,nomfichier,p-nomfichier);
259 char chaine2[3000];
260 sprintf(chaine2,"%s%lu",chaine,id);
261 std::string namefic=chaine2;
262 MG_EXPORT exp;
263 if (vol!=NULL) exp.aster(vol,mai,namefic,0,coderesu);
264 if (coq!=NULL) exp.aster(coq,mai,namefic,0,coderesu);
265 }
266 }
267 if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
268 {
269 sprintf(mess," Conversion carte de taille vers GMSH");
270 affiche(mess);
271 FCT_GENERATEUR_3D<4> carte;
272 carte.lire(nomfichier);
273 strncpy(chaine,nomfichier,p-nomfichier);
274 std::string namefic=chaine;
275 MG_EXPORT exp;
276 exp.gmsh(&carte,namefic);
277 }
278 #ifdef BREP_STEP
279 if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
280 {
281 sprintf(mess," Conversion STEP vers MAGiC");
282 affiche(mess);
283 STEP_IMPORT stepimport;
284 MG_GESTIONNAIRE gest;
285 stepimport.importer(gest,nomfichier) ;
286 strncpy(chaine,nomfichier,p-nomfichier);
287 std::string namefic=chaine;
288 namefic=namefic + ".magic";
289 int nb=gest.get_nb_mg_geometrie();
290 for (int i=0;i<nb;i++)
291 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
292 gest.enregistrer(namefic.c_str());
293 }
294 #endif
295 #ifdef BREP_SAT
296 if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
297 {
298 sprintf(mess," Conversion SAT vers MAGiC");
299 affiche(mess);
300 MG_GESTIONNAIRE gest;
301 ACIS_IMPORT acisimport;
302 acisimport.importer(gest,nomfichier) ;
303 strncpy(chaine,nomfichier,p-nomfichier);
304 std::string namefic=chaine;
305 namefic=namefic + ".magic";
306 int nb=gest.get_nb_mg_geometrie();
307 for (int i=0;i<nb;i++)
308 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
309 gest.enregistrer(namefic.c_str());
310 }
311 #endif
312 if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
313 {
314 #ifdef BREP_OCC
315 sprintf(mess," Conversion OpenCascade vers MAGiC");
316 affiche(mess);
317 MG_GESTIONNAIRE gest;
318 OCC_IMPORT occimport;
319 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
320 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
321 strncpy(chaine,nomfichier,p-nomfichier);
322 std::string namefic=chaine;
323 namefic=namefic + ".magic";
324 int nb=gest.get_nb_mg_geometrie();
325 for (int i=0;i<nb;i++)
326 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
327 gest.enregistrer(namefic.c_str());
328 #endif
329 }
330 if (action==2)
331 {
332 #ifdef BREP_OCC
333 sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
334 affiche(mess);
335 MG_GESTIONNAIRE gest;
336 OCC_IMPORT occimport;
337 MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,unite,eps) ;
338 if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
339 strncpy(chaine,nomfichier,p-nomfichier);
340 std::string namefic=chaine;
341 namefic=namefic + ".magic";
342 int nb=gest.get_nb_mg_geometrie();
343 for (int i=0;i<nb;i++)
344 gest.get_mg_geometrie(i)->change_valeur_unite(unite);
345 gest.enregistrer(namefic.c_str());
346 #endif
347 }
348 if (action==1)
349 {
350 sprintf(mess," Creation d'un maillage FEM");
351 affiche(mess);
352 MG_FILE gest(nomfichier);
353 MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
354 FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
355 gest.ajouter_fem_maillage(fem);
356 fem->construire(0);
357 gest.enregistrer(nomfichier);
358 }
359 if (action==9)
360 {
361 sprintf(mess," Importation des résultats ASTER vers MAGIC");
362 affiche(mess);
363 MG_FILE gest(nomfichier);
364 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
365 MG_IMPORT imp;
366 imp.aster(mai,fichieraster,nomfichier);
367 gest.enregistrer(nomfichier);
368 }
369 if (action==10)
370 {
371 sprintf(mess," Conversion MAGiC vers OPTIS");
372 affiche(mess);
373 MG_FILE gest(nomfichier);
374 int nb=gest.get_nb_fem_maillage();
375 char chaine[1000];
376 for (int i=0;i<nb;i++)
377 {
378 FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
379 unsigned long id=mai->get_id();
380 strncpy(chaine,nomfichier,p-nomfichier);
381 char chaine2[3000];
382 sprintf(chaine2,"%s%lu",chaine,id);
383 std::string namefic=chaine2;
384 MG_EXPORT exp;
385 MG_VOLUME* vol=mai->get_mg_geometrie()->get_mg_volume(0);
386 MG_COQUE* coq=mai->get_mg_geometrie()->get_mg_coque(0);
387 if (vol!=NULL) exp.aster(vol,mai,namefic,1,coderesu);
388 if (coq!=NULL) exp.aster(coq,mai,namefic,1,coderesu);
389 }
390 }
391 if (action==11)
392 {
393 sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
394 affiche(mess);
395 MG_FILE gest(nomfichier);
396 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
397 MG_IMPORT imp;
398 imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
399 gest.enregistrer(nomfichier);
400 }
401 if (action==12)
402 {
403 sprintf(mess," Selection dans MAGIC");
404 affiche(mess);
405 MG_FILE gest(nomfichier);
406 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
407 MG_GROUPE_TOPOLOGIQUE* mggt;
408 if (numgt==0)
409 {
410 mggt=new MG_GROUPE_TOPOLOGIQUE;
411 mggeo->ajouter_mg_groupe_topologique(mggt);
412 }
413 else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
414 MG_ELEMENT_TOPOLOGIQUE* ele;
415 ele=mggeo->get_mg_sommetid(numentite);
416 if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
417 if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
418 if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
419 if (ele!=NULL)
420 {
421 mggt->ajouter(ele);
422 if (expand)
423 {
424 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
425 ele->get_topologie_sousjacente(&lst);
426 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
427 for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
428 mggt->ajouter(ele2);
429 }
430 }
431 gest.enregistrer(nomfichier);
432 }
433 if (action==13)
434 {
435 sprintf(mess," Deselection dans MAGIC");
436 affiche(mess);
437 MG_FILE gest(nomfichier);
438 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
439 MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
440 MG_ELEMENT_TOPOLOGIQUE* ele;
441 ele=mggeo->get_mg_sommetid(numentite);
442 if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
443 if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
444 if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
445 if (ele!=NULL)
446 {
447 mggt->supprimer(ele);
448 if (expand)
449 {
450 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
451 ele->get_topologie_sousjacente(&lst);
452 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
453 for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
454 mggt->supprimer(ele2);
455 }
456 }
457 gest.enregistrer(nomfichier);
458 }
459 if (action==16)
460 {
461 sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
462 affiche(mess);
463 MG_FILE gest(nomfichier);
464 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
465 MG_GESTIONNAIRE gest2;
466 MG_LISSAGE liss;
467 liss.active_affichage(affiche);
468 liss.lisse(mai,gest2,eps,sigma,sigmaf,sigmag,gamma,iter_max,reactivation,bruitage,lissage,consopti,consimpose,consmailleurauto);
469 gest2.enregistrer(fichierout);
470 }
471 sprintf(mess,"Conversion reussie");
472
473 if (action==14)
474 {
475 sprintf(mess," Analyse MAGIC");
476 affiche(mess);
477 MG_FILE gest(nomfichier);
478 char message [5000];
479 int nbgeo=gest.get_nb_mg_geometrie();
480 sprintf(message," %d geometrie :",nbgeo);
481 for (int i=0;i<nbgeo;i++)
482 {
483 MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
484 sprintf(message,"%s %lu ",message,geo->get_id());
485 }
486 affiche(message);
487 for (int i=0;i<nbgeo;i++)
488 {
489 MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
490 sprintf(message," geometrie %lu",geo->get_id());
491 affiche(message);
492 int nbmg=geo->get_nb_mg_groupe_topologique();
493 sprintf(message," %d groupe topologique",nbmg);
494 for (int j=0;j<nbmg;j++)
495 {
496 MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
497 sprintf(message,"%s %lu ",message,mggp->get_id());
498 }
499 affiche(message);
500 int nbvolume=geo->get_nb_mg_volume();
501 if (nbvolume==0) sprintf(message," %d volumes",geo->get_nb_mg_volume());
502 else sprintf(message," %d volumes : ",geo->get_nb_mg_volume());
503 for (int i=0;i<nbvolume;i++) sprintf(message,"%s %lu",message,geo->get_mg_volume(i)->get_id());
504 affiche(message);
505 int nbcoque=geo->get_nb_mg_coque();
506 if (nbcoque==0) sprintf(message," %d coques",geo->get_nb_mg_coque());
507 else sprintf(message," %d coques : ",geo->get_nb_mg_coque());
508 for (int i=0;i<nbcoque;i++) sprintf(message,"%s %lu",message,geo->get_mg_coque(i)->get_id());
509 affiche(message);
510 int nbpoutre=geo->get_nb_mg_poutre();
511 if (nbpoutre==0) sprintf(message," %d poutres",geo->get_nb_mg_poutre());
512 else sprintf(message," %d poutres : ",geo->get_nb_mg_poutre());
513 for (int i=0;i<nbpoutre;i++) sprintf(message,"%s %lu",message,geo->get_mg_poutre(i)->get_id());
514 affiche(message);
515 sprintf(message," %d coquilles",geo->get_nb_mg_coquille());
516 affiche(message);
517 sprintf(message," %d faces",geo->get_nb_mg_face());
518 affiche(message);
519 sprintf(message," %d aretes",geo->get_nb_mg_arete());
520 affiche(message);
521 sprintf(message," %d sommets",geo->get_nb_mg_sommet());
522 affiche(message);
523
524 }
525 int nbmai=gest.get_nb_mg_maillage();
526 sprintf(message," %d maillage geometrique :",nbmai);
527 affiche(message);
528 for (int i=0;i<nbmai;i++)
529 {
530 MG_MAILLAGE* mai=gest.get_mg_maillage(i);
531 sprintf(message," maillage geometrique %lu ",mai->get_id());
532 affiche(message);
533 sprintf(message," %d noeuds",mai->get_nb_mg_noeud());
534 affiche(message);
535 sprintf(message," %d segments",mai->get_nb_mg_segment());
536 affiche(message);
537 sprintf(message," %d triangles",mai->get_nb_mg_triangle());
538 affiche(message);
539 sprintf(message," %d tetras",mai->get_nb_mg_tetra());
540 affiche(message);
541 }
542 int nbmaif=gest.get_nb_fem_maillage();
543 sprintf(message," %d maillage FEM :",nbmaif);
544 affiche(message);
545 for (int i=0;i<nbmaif;i++)
546 {
547 FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
548 sprintf(message," maillage FEM %lu ",maif->get_id());
549 affiche(message);
550 sprintf(message," %d noeuds",maif->get_nb_fem_noeud());
551 affiche(message);
552 sprintf(message," %d elements 1D",maif->get_nb_fem_element1());
553 affiche(message);
554 sprintf(message," %d elements 2D",maif->get_nb_fem_element2());
555 affiche(message);
556 sprintf(message," %d elements 3D",maif->get_nb_fem_element3());
557 affiche(message);
558 }
559 int nbsol=gest.get_nb_mg_solution();
560 sprintf(message," %d solution maillage geometrique :",nbsol);
561 for (int i=0;i<nbsol;i++)
562 {
563 MG_SOLUTION* sol=gest.get_mg_solution(i);
564 sprintf(message,"%s %lu ",message,sol->get_id());
565 }
566 affiche(message);
567 int nbsolf=gest.get_nb_fem_solution();
568 sprintf(message," %d solution maillage FEM :",nbsolf);
569 for (int i=0;i<nbsolf;i++)
570 {
571 FEM_SOLUTION* sol=gest.get_fem_solution(i);
572 sprintf(message,"%s %lu ",message,sol->get_id());
573 }
574 affiche(message);
575 }
576 if (action==15)
577 {
578 sprintf(mess," Calcul de deforme");
579 affiche(mess);
580 MG_FILE gest(nomfichier);
581 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
582 FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
583 FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
584 FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
585 affiche(mess);
586 mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
587 gest.enregistrer(nomfichier);
588 }
589 if (action==17)
590 {
591 sprintf(mess," Fusion de géométrie");
592 affiche(mess);
593 MG_FILE gest(nomfichier);
594 MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
595 VCT_MULTI_MODELE fusion(mggeo);
596 fusion.recherche_identite();
597 gest.enregistrer(nomfichier);
598 }
599 if (action==18)
600 {
601 sprintf(mess," Création d'une pseudo-solution de la répartition de densite");
602 affiche(mess);
603 MG_FILE gest(nomfichier);
604 FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
605 MG_IMPORT imp;
606 imp.import_densite(mai,fichierdensite,nomfichier,3);
607 gest.enregistrer(nomfichier);
608 }
609 if ((action==19) || (action==20))
610 {
611 unsigned long identity;
612 char typeccf[3];
613 typeccf[2]=0;
614 double valccf=0.5; // Valeur par défaut
615 sscanf(ccf,"%lu:%c%c:%le\n",&identity,&typeccf[0],&typeccf[1],&valccf);
616 MC_GESTIONNAIRE mcgest;
617 int res=mcgest.existe(typeccf);
618 if (res==0)
619 {
620 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
621 affiche(mess);
622 return 0;
623 }
624 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
625 affiche(mess);
626 MG_FILE gest(nomfichier);
627 MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
628 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
629 MG_VOLUME* ele;
630 ele=geo->get_mg_volumeid(identity);
631 if (ele!=NULL) liste.ajouter(ele);
632 else
633 {
634 MG_COQUE* ele;
635 ele=geo->get_mg_coqueid(identity);
636 if (ele!=NULL) liste.ajouter(ele);
637 else
638 {
639 MG_POUTRE* ele;
640 ele=geo->get_mg_poutreid(identity);
641 if (ele!=NULL) liste.ajouter(ele);
642 else
643 {
644 MG_FACE* ele;
645 ele=geo->get_mg_faceid(identity);
646 if (ele!=NULL) liste.ajouter(ele);
647 else
648 {
649 MG_ARETE* ele;
650 ele=geo->get_mg_areteid(identity);
651 if (ele!=NULL) liste.ajouter(ele);
652 else
653 {
654 MG_SOMMET* ele;
655 ele=geo->get_mg_sommetid(identity);
656 if (ele!=NULL) liste.ajouter(ele);
657 }
658 }
659 }
660 }
661 }
662 if (action==20)
663 {
664 int nb=liste.get_nb();
665 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
666 }
667 int nb=liste.get_nb();
668 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
669 gest.enregistrer(nomfichier);
670 }
671 if ((action==21)|| (action==22))
672 {
673 MC_GESTIONNAIRE mcgest;
674 unsigned long identity;
675 char typeccf[3];
676 double valccf=0.5;
677 char c;
678 sscanf(ccf,"%c:%lu:%c%c:%le\n",&c,&identity,&typeccf[0],&typeccf[1],&valccf);
679 int res=mcgest.existe(typeccf);
680 if (res==0)
681 {
682 sprintf(mess," ERREUR!!!! Code conditions aux limites inconnu");
683 affiche(mess);
684 return 0;
685 }
686 sprintf(mess," Ajout d'une condition aux limites : %s",mcgest.get_description(typeccf).c_str());
687 affiche(mess);
688 MG_FILE gest(nomfichier);
689 MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
690 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
691 MG_FACE* ele=NULL;
692 if (c=='F') ele=geo->get_mg_face(identity);
693 if (ele!=NULL) liste.ajouter(ele);
694 else
695 {
696 MG_ARETE* ele=NULL;
697 if (c=='A') ele=geo->get_mg_arete(identity);
698 if (ele!=NULL) liste.ajouter(ele);
699 else
700 {
701 MG_SOMMET* ele=NULL;
702 if (c=='S') ele=geo->get_mg_sommet(identity);
703 if (ele!=NULL) liste.ajouter(ele);
704 else
705 {
706 MG_VOLUME* ele=NULL;
707 if (c=='V') ele=geo->get_mg_volume(identity);
708 if (ele!=NULL) liste.ajouter(ele);
709 else
710 {
711 MG_COQUE* ele=NULL;
712 if (c=='C') ele=geo->get_mg_coque(identity);
713 if (ele!=NULL) liste.ajouter(ele);
714 else
715 {
716 MG_POUTRE* ele=NULL;
717 if (c=='P') ele=geo->get_mg_poutre(identity);
718 if (ele!=NULL) liste.ajouter(ele);
719
720 }
721 }
722 }
723 }
724 }
725 if (action==22)
726 {
727 int nb=liste.get_nb();
728 for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
729 }
730 int nb=liste.get_nb();
731 for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
732 gest.enregistrer(nomfichier);
733 }
734 if (action==23)
735 {
736 sprintf(mess," Liste des conditions aux limites disponibles");
737 affiche(mess);
738 MC_GESTIONNAIRE mcgest;
739 int ok=0;
740 do
741 {
742 std::string code;
743 std::string description;
744 int res=mcgest.get_description(code,description);
745 if (res)
746 {
747 sprintf(mess," %s : %s",code.c_str(),description.c_str());
748 affiche(mess);
749 }
750 else ok=1;
751 }
752 while (ok==0);
753 }
754
755 sprintf(mess,"Fin");
756 affiche(mess);
757
758 return 0;
759 }
760
761
762
763 #pragma package(smart_init)