ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mgoperation/src/main.cpp
Revision: 292
Committed: Tue Nov 1 21:42:09 2011 UTC (13 years, 7 months ago) by francois
File size: 23123 byte(s)
Log Message:
ajout de conditions aux limites de facon interactive par ligne de commande

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 292 if (strcmp(argv[i],"-ccf")==0) {action=19;strcpy(ccf,argv[i+1]);};
176     if (strcmp(argv[i],"-ccft")==0) {action=20;strcpy(ccf,argv[i+1]);};
177    
178    
179 francois 283 }
180     }
181     else {
182     AFFAIDE;
183     return 0;
184     }
185    
186    
187    
188    
189     char mess[3000];
190     sprintf(mess," Fichier : %s",nomfichier);
191     affiche(mess);
192     char *p=strrchr(nomfichier,'.');
193     char extension[50];
194     strcpy(extension,p);
195     minuscule(extension);
196     char chaine[3000];
197     for (int i=0;i<3000;i++) chaine[i]=0;
198     if ( ((strcmp(extension,".magic")==0) && (action==0)) || (action==3))
199     {
200     sprintf(mess," Conversion MAGiC vers GMSH");
201     affiche(mess);
202     MG_FILE gest(nomfichier);
203     int nb=gest.get_nb_mg_maillage();
204     char chaine[3000];
205     for (int i=0;i<nb;i++)
206     {
207     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
208     unsigned long id=mai->get_id();
209     strncpy(chaine,nomfichier,p-nomfichier);
210     char chaine2[3000];
211     sprintf(chaine2,"%s%lu",chaine,id);
212     std::string namefic=chaine2;
213     MG_EXPORT exp;
214     exp.gmsh(mai,namefic);
215     }
216     nb=gest.get_nb_fem_maillage();
217     for (int i=0;i<nb;i++)
218     {
219     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
220     unsigned long id=mai->get_id();
221     strncpy(chaine,nomfichier,p-nomfichier);
222     char chaine2[3000];
223     sprintf(chaine2,"%s%lu",chaine,id);
224     std::string namefic=chaine2;
225     MG_EXPORT exp;
226     double coef=eps;
227     if (coef<0.)
228     {
229     coef=mai->calcul_coef();
230     sprintf(mess," Coefficient de deforme pour le maillage %lu est de %le",mai->get_id(),coef);
231     affiche(mess);
232     }
233     exp.gmsh(mai,namefic,coef);
234     }
235     }
236     if (action==4)
237     {
238     sprintf(mess," Conversion MAGiC vers code ASTER");
239     affiche(mess);
240     MG_FILE gest(nomfichier);
241     int nb=gest.get_nb_fem_maillage();
242     char chaine[1000];
243     for (int i=0;i<nb;i++)
244     {
245     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
246     unsigned long id=mai->get_id();
247     strncpy(chaine,nomfichier,p-nomfichier);
248     char chaine2[3000];
249     sprintf(chaine2,"%s%lu",chaine,id);
250     std::string namefic=chaine2;
251     MG_EXPORT exp;
252     exp.aster(mai,namefic,0,coderesu);
253     }
254     }
255     if (((strcmp(extension,".ctt")==0) && (action==0)) || (action==7))
256     {
257     sprintf(mess," Conversion carte de taille vers GMSH");
258     affiche(mess);
259     FCT_GENERATEUR_3D<4> carte;
260     carte.lire(nomfichier);
261     strncpy(chaine,nomfichier,p-nomfichier);
262     std::string namefic=chaine;
263     MG_EXPORT exp;
264     exp.gmsh(&carte,namefic);
265     }
266     if (((strcmp(extension,".step")==0) &&(action==0)) || (action==5))
267     {
268     sprintf(mess," Conversion STEP vers MAGiC");
269     affiche(mess);
270     STEP_IMPORT stepimport;
271     MG_GESTIONNAIRE gest;
272     stepimport.importer(gest,nomfichier) ;
273     strncpy(chaine,nomfichier,p-nomfichier);
274     std::string namefic=chaine;
275     namefic=namefic + ".magic";
276     int nb=gest.get_nb_mg_geometrie();
277     for (int i=0;i<nb;i++)
278     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
279     gest.enregistrer(namefic.c_str());
280     }
281     if (((strcmp(extension,".sat")==0) && (action==0)) || (action==6))
282     {
283     sprintf(mess," Conversion SAT vers MAGiC");
284     affiche(mess);
285     MG_GESTIONNAIRE gest;
286     ACIS_IMPORT acisimport;
287     acisimport.importer(gest,nomfichier) ;
288     strncpy(chaine,nomfichier,p-nomfichier);
289     std::string namefic=chaine;
290     namefic=namefic + ".magic";
291     int nb=gest.get_nb_mg_geometrie();
292     for (int i=0;i<nb;i++)
293     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
294     gest.enregistrer(namefic.c_str());
295     }
296     if (((strcmp(extension,".brep")==0) && (action==0)) ||(action==8))
297     {
298     #ifdef BREP_OCC
299     sprintf(mess," Conversion OpenCascade vers MAGiC");
300     affiche(mess);
301     MG_GESTIONNAIRE gest;
302     OCC_IMPORT occimport;
303     MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIEROCC,unite,eps) ;
304     if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
305     strncpy(chaine,nomfichier,p-nomfichier);
306     std::string namefic=chaine;
307     namefic=namefic + ".magic";
308     int nb=gest.get_nb_mg_geometrie();
309     for (int i=0;i<nb;i++)
310     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
311     gest.enregistrer(namefic.c_str());
312     #endif
313     }
314     if (action==2)
315     {
316     #ifdef BREP_OCC
317     sprintf(mess," Conversion STEP via OpenCascade vers MAGiC avec epsilon=%lf",eps);
318     affiche(mess);
319     MG_GESTIONNAIRE gest;
320     OCC_IMPORT occimport;
321     MG_GEOMETRIE* mggeo=occimport.importer(gest,nomfichier,FICHIERSTEP,unite,eps) ;
322     if (importtri>0) occimport.importer(gest,mggeo,eps2,importtri);
323     strncpy(chaine,nomfichier,p-nomfichier);
324     std::string namefic=chaine;
325     namefic=namefic + ".magic";
326     int nb=gest.get_nb_mg_geometrie();
327     for (int i=0;i<nb;i++)
328     gest.get_mg_geometrie(i)->change_valeur_unite(unite);
329     gest.enregistrer(namefic.c_str());
330     #endif
331     }
332     if (action==1)
333     {
334     sprintf(mess," Creation d'un maillage FEM");
335     affiche(mess);
336     MG_FILE gest(nomfichier);
337     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummai);
338     FEM_MAILLAGE* fem=new FEM_MAILLAGE(mai->get_mg_geometrie(),mai,degre);
339     gest.ajouter_fem_maillage(fem);
340     fem->construire(0);
341     gest.enregistrer(nomfichier);
342     }
343     if (action==9)
344     {
345     sprintf(mess," Importation des résultats ASTER vers MAGIC");
346     affiche(mess);
347     MG_FILE gest(nomfichier);
348     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
349     MG_IMPORT imp;
350     imp.aster(mai,fichieraster,nomfichier);
351     gest.enregistrer(nomfichier);
352     }
353     if (action==10)
354     {
355     sprintf(mess," Conversion MAGiC vers OPTIS");
356     affiche(mess);
357     MG_FILE gest(nomfichier);
358     int nb=gest.get_nb_fem_maillage();
359     char chaine[1000];
360     for (int i=0;i<nb;i++)
361     {
362     FEM_MAILLAGE* mai=gest.get_fem_maillage(i);
363     unsigned long id=mai->get_id();
364     strncpy(chaine,nomfichier,p-nomfichier);
365     char chaine2[3000];
366     sprintf(chaine2,"%s%lu",chaine,id);
367     std::string namefic=chaine2;
368     MG_EXPORT exp;
369     exp.aster(mai,namefic,1,coderesu);
370     }
371     }
372     if (action==11)
373     {
374     sprintf(mess," Importation des résultats d'optimisation vers MAGIC");
375     affiche(mess);
376     MG_FILE gest(nomfichier);
377     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
378     MG_IMPORT imp;
379     imp.optis(mai,fichieroptis,fichierflottant,seuil,niveau,flottant);
380     gest.enregistrer(nomfichier);
381     }
382     if (action==12)
383     {
384     sprintf(mess," Selection dans MAGIC");
385     affiche(mess);
386     MG_FILE gest(nomfichier);
387     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
388     MG_GROUPE_TOPOLOGIQUE* mggt;
389     if (numgt==0)
390     {
391     mggt=new MG_GROUPE_TOPOLOGIQUE;
392     mggeo->ajouter_mg_groupe_topologique(mggt);
393     }
394     else mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
395     MG_ELEMENT_TOPOLOGIQUE* ele;
396     ele=mggeo->get_mg_sommetid(numentite);
397     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
398     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
399     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
400     if (ele!=NULL)
401     {
402     mggt->ajouter(ele);
403     if (expand)
404     {
405     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
406     ele->get_topologie_sousjacente(&lst);
407     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
408     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
409     mggt->ajouter(ele2);
410     }
411     }
412     gest.enregistrer(nomfichier);
413     }
414     if (action==13)
415     {
416     sprintf(mess," Deselection dans MAGIC");
417     affiche(mess);
418     MG_FILE gest(nomfichier);
419     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
420     MG_GROUPE_TOPOLOGIQUE* mggt=mggeo->get_mg_groupe_topologiqueid(numgt);
421     MG_ELEMENT_TOPOLOGIQUE* ele;
422     ele=mggeo->get_mg_sommetid(numentite);
423     if (ele==NULL) ele=mggeo->get_mg_areteid(numentite);
424     if (ele==NULL) ele=mggeo->get_mg_faceid(numentite);
425     if (ele==NULL) ele=mggeo->get_mg_volumeid(numentite);
426     if (ele!=NULL)
427     {
428     mggt->supprimer(ele);
429     if (expand)
430     {
431     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
432     ele->get_topologie_sousjacente(&lst);
433     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*>::ITERATEUR it;
434     for (MG_ELEMENT_TOPOLOGIQUE *ele2=lst.get_premier(it);ele2!=NULL;ele2=lst.get_suivant(it))
435     mggt->supprimer(ele2);
436     }
437     }
438     gest.enregistrer(nomfichier);
439     }
440     if (action==16)
441     {
442     sprintf(mess," Lissage de l'enveloppe externe du maillage optimisee");
443     affiche(mess);
444     MG_FILE gest(nomfichier);
445     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
446     MG_GESTIONNAIRE gest2;
447     MG_LISSAGE liss;
448     liss.active_affichage(affiche);
449     liss.lisse(mai,gest2,eps,sigma,sigmaf,sigmag,gamma,iter_max,reactivation,bruitage,lissage,consopti,consimpose,consmailleurauto);
450     gest2.enregistrer(fichierout);
451     }
452     sprintf(mess,"Conversion reussie");
453    
454     if (action==14)
455     {
456     sprintf(mess," Analyse MAGIC");
457     affiche(mess);
458     MG_FILE gest(nomfichier);
459     char message [5000];
460     int nbgeo=gest.get_nb_mg_geometrie();
461     sprintf(message," %d geometrie :",nbgeo);
462     for (int i=0;i<nbgeo;i++)
463     {
464     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
465     sprintf(message,"%s %lu ",message,geo->get_id());
466     }
467     affiche(message);
468     for (int i=0;i<nbgeo;i++)
469     {
470     MG_GEOMETRIE* geo=gest.get_mg_geometrie(i);
471     sprintf(message," geometrie %lu",geo->get_id());
472     affiche(message);
473     int nbmg=geo->get_nb_mg_groupe_topologique();
474     sprintf(message," %d groupe topologique",nbmg);
475     for (int j=0;j<nbmg;j++)
476     {
477     MG_GROUPE_TOPOLOGIQUE* mggp=geo->get_mg_groupe_topologique(j);
478     sprintf(message,"%s %lu ",message,mggp->get_id());
479     }
480     affiche(message);
481 francois 290 sprintf(message," %d volumes",geo->get_nb_mg_volume());
482     affiche(message);
483     sprintf(message," %d coques",geo->get_nb_mg_coque());
484     affiche(message);
485     sprintf(message," %d poutres",geo->get_nb_mg_poutre());
486     affiche(message);
487     sprintf(message," %d coquilles",geo->get_nb_mg_coquille());
488     affiche(message);
489 francois 283 sprintf(message," %d faces",geo->get_nb_mg_face());
490     affiche(message);
491     sprintf(message," %d aretes",geo->get_nb_mg_arete());
492     affiche(message);
493     sprintf(message," %d sommets",geo->get_nb_mg_sommet());
494     affiche(message);
495    
496     }
497     int nbmai=gest.get_nb_mg_maillage();
498     sprintf(message," %d maillage geometrique :",nbmai);
499     affiche(message);
500     for (int i=0;i<nbmai;i++)
501     {
502     MG_MAILLAGE* mai=gest.get_mg_maillage(i);
503     sprintf(message," maillage geometrique %lu ",mai->get_id());
504     affiche(message);
505     sprintf(message," %d noeuds",mai->get_nb_mg_noeud());
506     affiche(message);
507     sprintf(message," %d segments",mai->get_nb_mg_segment());
508     affiche(message);
509     sprintf(message," %d triangles",mai->get_nb_mg_triangle());
510     affiche(message);
511     sprintf(message," %d tetras",mai->get_nb_mg_tetra());
512     affiche(message);
513     }
514     int nbmaif=gest.get_nb_fem_maillage();
515     sprintf(message," %d maillage FEM :",nbmaif);
516     affiche(message);
517     for (int i=0;i<nbmaif;i++)
518     {
519     FEM_MAILLAGE* maif=gest.get_fem_maillage(i);
520     sprintf(message," maillage FEM %lu ",maif->get_id());
521     affiche(message);
522     sprintf(message," %d noeuds",maif->get_nb_fem_noeud());
523     affiche(message);
524     sprintf(message," %d segments",maif->get_nb_fem_segment());
525     affiche(message);
526     sprintf(message," %d triangles",maif->get_nb_fem_triangle());
527     affiche(message);
528     sprintf(message," %d tetras",maif->get_nb_fem_tetra());
529     affiche(message);
530     }
531     int nbsol=gest.get_nb_mg_solution();
532     sprintf(message," %d solution maillage geometrique :",nbsol);
533     for (int i=0;i<nbsol;i++)
534     {
535     MG_SOLUTION* sol=gest.get_mg_solution(i);
536     sprintf(message,"%s %lu ",message,sol->get_id());
537     }
538     affiche(message);
539     int nbsolf=gest.get_nb_fem_solution();
540     sprintf(message," %d solution maillage FEM :",nbsolf);
541     for (int i=0;i<nbsolf;i++)
542     {
543     FEM_SOLUTION* sol=gest.get_fem_solution(i);
544     sprintf(message,"%s %lu ",message,sol->get_id());
545     }
546     affiche(message);
547     }
548     if (action==15)
549     {
550     sprintf(mess," Calcul de deforme");
551     affiche(mess);
552     MG_FILE gest(nomfichier);
553     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
554     FEM_SOLUTION* sol1=gest.get_fem_solutionid(numsol1);
555     FEM_SOLUTION* sol2=gest.get_fem_solutionid(numsol2);
556     FEM_SOLUTION* sol3=gest.get_fem_solutionid(numsol3);
557     affiche(mess);
558     mai->calcul_deforme(sol1,numchamp1,sol2,numchamp2,sol3,numchamp3);
559     gest.enregistrer(nomfichier);
560     }
561     if (action==17)
562     {
563     sprintf(mess," Fusion de géométrie");
564     affiche(mess);
565     MG_FILE gest(nomfichier);
566     MG_GEOMETRIE* mggeo=gest.get_mg_geometrieid(numgeo);
567     VCT_MULTI_MODELE fusion(mggeo);
568     fusion.recherche_identite();
569     gest.enregistrer(nomfichier);
570     }
571     if (action==18)
572     {
573 francois 292 sprintf(mess," Création d'une pseudo-solution de la répartition de densite");
574 francois 283 affiche(mess);
575     MG_FILE gest(nomfichier);
576     FEM_MAILLAGE* mai=gest.get_fem_maillageid(nummai);
577     MG_IMPORT imp;
578     imp.import_densite(mai,fichierdensite,nomfichier);
579     gest.enregistrer(nomfichier);
580     }
581 francois 292 if ((action==19) || (action==20))
582     {
583     sprintf(mess," Ajout d'une condition aux limites");
584     affiche(mess);
585     MG_FILE gest(nomfichier);
586     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
587     unsigned long identity;
588     char typeccf[3];
589     double valccf=0.5;
590     sscanf(ccf,"%lu:%c%c:%le\n",&identity,&typeccf[0],&typeccf[1],&valccf);
591     TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> liste;
592     MG_FACE* ele=geo->get_mg_faceid(identity);
593     if (ele!=NULL) liste.ajouter(ele);
594     else
595     {
596     MG_ARETE* ele=geo->get_mg_areteid(identity);
597     if (ele!=NULL) liste.ajouter(ele);
598     else
599     {
600     MG_SOMMET* ele=geo->get_mg_sommetid(identity);
601     if (ele!=NULL) liste.ajouter(ele);
602     }
603     }
604     if (action==20)
605     {
606     int nb=liste.get_nb();
607     for (int i=0;i<nb;i++) liste.get(i)->get_topologie_sousjacente(&liste);
608     }
609     int nb=liste.get_nb();
610     for (int i=0;i<nb;i++) liste.get(i)->ajouter_ccf(typeccf,valccf);;
611     gest.enregistrer(nomfichier);
612     }
613 francois 283 sprintf(mess,"Fin");
614     affiche(mess);
615    
616     return 0;
617     }
618    
619    
620    
621     #pragma package(smart_init)