ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 293
Committed: Wed Nov 2 15:19:17 2011 UTC (13 years, 7 months ago) by francois
File size: 24372 byte(s)
Log Message:
ajout de fonctionnalite dans la saisie des conditions aux limites

File Contents

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