ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mailleur/src/main.cpp
Revision: 494
Committed: Thu Mar 6 20:39:09 2014 UTC (11 years, 3 months ago) by francois
File size: 23324 byte(s)
Log Message:
Possibilité d'enregistrement des mailleurs en cours de maillage pour voir ce qui se passe si il y a un bug

File Contents

# User Rev Content
1 francois 283 //------------------------------------------------------------
2     //------------------------------------------------------------
3     // MAGiC
4     // Jean Christophe Cuilli�e et Vincent FRANCOIS
5     // D�artement de G�ie M�anique - UQTR
6     //------------------------------------------------------------
7     // Le projet MAGIC est un projet de recherche du d�artement
8     // de g�ie m�anique de l'Universit�du Qu�ec �
9     // Trois Rivi�es
10     // Les librairies ne peuvent �re utilis�s sans l'accord
11     // des auteurs (contact : francois@uqtr.ca)
12     //------------------------------------------------------------
13     //------------------------------------------------------------
14     //
15     // main.cpp
16     //
17     //------------------------------------------------------------
18     //------------------------------------------------------------
19     // COPYRIGHT 2000
20     // Version du 02/03/2006 �11H25
21     //------------------------------------------------------------
22     //------------------------------------------------------------
23     #include "gestionversion.h"
24     #ifdef WINDOWS_VERSION
25     #include "fenetre.h"
26     #endif
27    
28     #pragma hdrstop
29    
30 francois 432 #include "magic_application.h"
31 francois 283 #include <string.h>
32     #include "mg_file.h"
33     #include "fct_taille.h"
34     #include "mailleur0d.h"
35     #include "mailleur1d.h"
36     #include "mailleur2d.h"
37     #include "mailleur3d.h"
38     #include "mailleur_adaptatif.h"
39 francois 481 #include "fct_generateur_3d.h"
40 francois 467 #include "fct_taille_fem_solution.h"
41 francois 283 #include "mg_export.h"
42     #include "step_import.h"
43     #include "acis_import.h"
44    
45     //---------------------------------------------------------------------------
46    
47 francois 432 int main(int argc,char **argv)
48 francois 283 {
49 francois 432 std::vector<MAGIC_PARAMETRE_APPLICATION> lst;
50     MAGIC_PARAMETRE_APPLICATION p1(3,(char*)"-carte",MAGIC_PARAMETRE_APPLICATION::STRING,(char*)"Fichier de carte de taille");
51 francois 447 MAGIC_PARAMETRE_APPLICATION p2(4,(char*)"-niveauopt3d",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Limite supérieure des mailles à optimiser - Défaut 2");
52 francois 432 MAGIC_PARAMETRE_APPLICATION p3(5,(char*)"-niveau",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Dimension limite des entités à mailler - Défaut 3");
53     MAGIC_PARAMETRE_APPLICATION p5(6,(char*)"-front",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage d'une géométrie par la méthode frontale - Defaut");
54     MAGIC_PARAMETRE_APPLICATION p6(7,(char*)"-adapt",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage adaptatif d'une géométrie maillée");
55     MAGIC_PARAMETRE_APPLICATION p4(8,(char*)"-prioritemetrique",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Valeur de la prise en compte de la métrique versus la qualité - Défaut 0.65");
56     MAGIC_PARAMETRE_APPLICATION p7(9,(char*)"-numgeo",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numero de géometrie à mailler - Défaut la première");
57     MAGIC_PARAMETRE_APPLICATION p8(10,(char*)"-groupe",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Groupe topologique à mailler - Défaut pas de groupe");
58     MAGIC_PARAMETRE_APPLICATION p9(11,(char*)"-analyse",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Analyse de la qualité du maillage après le maillage");
59     MAGIC_PARAMETRE_APPLICATION p10(12,(char*)"-visufront",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Activation de la visalisation dynamique du front");
60     MAGIC_PARAMETRE_APPLICATION p11(13,(char*)"-nummai",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Numéro du maillage à adapter - Défaut le premier");
61     MAGIC_PARAMETRE_APPLICATION p12(14,(char*)"-limitadapt",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Limite inférieure en %d'erreur pour conserver les mailles");
62 francois 447 MAGIC_PARAMETRE_APPLICATION p13(15,(char*)"-niveauopt2d",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Limite supérieure des mailles à optimiser - Défaut 5");
63 francois 467 MAGIC_PARAMETRE_APPLICATION p14(16,(char*)"-front2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage d'une géométrie par la méthode frontale avec une carte de taille sous forme de fichier magic");
64     MAGIC_PARAMETRE_APPLICATION p15(17,(char*)"-adapt2",MAGIC_PARAMETRE_APPLICATION::ACTION,(char*)"Maillage adaptatif d'une géométrie maillée avec une carte de taille sous forme de fichier magic");
65 francois 494 MAGIC_PARAMETRE_APPLICATION p16(18,(char*)"-enregistrer",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Enregistrement de la dernière étape (pour debbugage) - Defaut false");
66 francois 283
67    
68    
69 francois 432
70     //MAGIC_PARAMETRE_APPLICATION p7(8,(char*)"-tailleoctree",MAGIC_PARAMETRE_APPLICATION::DOUBLE,(char*)"Taille des octants par rapport à la taille souhaitée - Défaut 2.");
71     //MAGIC_PARAMETRE_APPLICATION p8(9,(char*)"-fem",MAGIC_PARAMETRE_APPLICATION::BOOL,(char*)"Création du maillage fem");
72     //MAGIC_PARAMETRE_APPLICATION p9(10,(char*)"-degre",MAGIC_PARAMETRE_APPLICATION::INTEGER,(char*)"Degre du maillage fem - Défaut 1");
73 francois 494 p5.ajouter_dependance(1);p5.ajouter_dependance(2);p5.ajouter_dependance(3);p5.ajouter_dependance(4);p5.ajouter_dependance(5);p5.ajouter_dependance(8);p5.ajouter_dependance(9);p5.ajouter_dependance(10);p5.ajouter_dependance(11);p5.ajouter_dependance(12);p5.ajouter_dependance(15);p5.ajouter_dependance(18);
74 francois 432 p6.ajouter_dependance(1);p6.ajouter_dependance(2);p6.ajouter_dependance(3);p6.ajouter_dependance(11);p6.ajouter_dependance(12);p6.ajouter_dependance(13);p6.ajouter_dependance(14);
75 francois 467 p14.ajouter_dependance(1);p14.ajouter_dependance(2);p14.ajouter_dependance(3);p14.ajouter_dependance(4);p14.ajouter_dependance(5);p14.ajouter_dependance(8);p14.ajouter_dependance(9);p14.ajouter_dependance(10);p14.ajouter_dependance(11);p14.ajouter_dependance(12);p14.ajouter_dependance(15);
76     p15.ajouter_dependance(1);p15.ajouter_dependance(2);p15.ajouter_dependance(3);p15.ajouter_dependance(11);p15.ajouter_dependance(12);p15.ajouter_dependance(13);p15.ajouter_dependance(14);
77 francois 432 lst.push_back(p1);
78     lst.push_back(p2);
79     lst.push_back(p3);
80     lst.push_back(p5);
81     lst.push_back(p6);
82     lst.push_back(p4);
83     lst.push_back(p7);
84     lst.push_back(p8);
85     lst.push_back(p9);
86     lst.push_back(p10);
87     lst.push_back(p11);
88     lst.push_back(p12);
89 francois 447 lst.push_back(p13);
90 francois 467 lst.push_back(p14);
91     lst.push_back(p15);
92 francois 494 lst.push_back(p16);
93 francois 432
94     MAGIC_APPLICATION app((char*)"Mailleur d'une géometrie par la méthode frontale",argc,argv,lst,true,true);
95     if (app.get_erreur()==true) return 0;
96    
97     if (app.get_action()==-1) app.change_action(6);
98    
99 francois 467 if ((app.get_action()==6) || (app.get_action()==16))
100 francois 432 {
101     char fichier[500];
102     char fichiersortie[500];
103 francois 494 char fichiersortie2[500];
104 francois 432 char fichiercarte[500];
105     int numgeometrie;
106     double prioritemetrique;
107     int numgroupe;
108     int niveau;
109     bool analyse;
110     bool visufront;
111 francois 447 int niveauopt3d;
112     int niveauopt2d;
113 francois 467 int numsol,numchamp;
114 francois 494 bool save;
115 francois 432 app.recupere_parametre_string(1,fichier,(char*)"Fichier d'entrée manquant");
116     app.recupere_parametre_string_avec_defaut(2,fichiersortie,fichier);
117     app.recupere_parametre_string(3,fichiercarte,(char*)"Fichier carte manquant");
118     app.recupere_parametre_double_avec_defaut(8,prioritemetrique,0.65);
119     app.recupere_parametre_int_avec_defaut(9,numgeometrie,0);
120     app.recupere_parametre_int_avec_defaut(10,numgroupe,0);
121     app.recupere_parametre_int_avec_defaut(5,niveau,3);
122     app.recupere_parametre_bool_avec_defaut(11,analyse,false);
123     app.recupere_parametre_bool_avec_defaut(12,visufront,false);
124 francois 447 app.recupere_parametre_int_avec_defaut(4,niveauopt3d,2);
125     app.recupere_parametre_int_avec_defaut(15,niveauopt2d,5);
126 francois 494 app.recupere_parametre_bool_avec_defaut(16,save,false);
127 francois 467 if (app.get_action()==16)
128     {
129     app.recupere_parametre_int_avec_defaut(18,numsol,0);
130     app.recupere_parametre_int_avec_defaut(19,numchamp,0);
131     }
132 francois 432 if (app.get_erreur()==true) return 0;
133     char message[500];
134 francois 494 strcpy(fichiersortie2,fichiersortie);
135     strcat(fichiersortie2,"dbg");
136 francois 432 app.affiche((char*)"Parametre d'etude du mailleur");
137     sprintf(message," Fichier magic : %s",fichier);
138     app.affiche(message);
139     sprintf(message," Numero de geometrie : %d",numgeometrie);
140     sprintf(message," Fichier carte : %s",fichiercarte);
141     app.affiche(message);
142     sprintf(message," Parametre de metrique : %2.2f",prioritemetrique*100);
143     app.affiche(message);
144     app.affiche((char*)"Lecture du fichier M.A.G.i.C");
145     MG_FILE gest(fichier);
146     MG_GEOMETRIE* mggeo;
147     if (numgeometrie==0) mggeo=gest.get_mg_geometrie(numgeometrie); else mggeo=gest.get_mg_geometrieid(numgeometrie);
148     MG_MAILLAGE* mgmai=new MG_MAILLAGE(mggeo);
149     gest.ajouter_mg_maillage(mgmai);
150 francois 467 app.affiche((char*)"Lecture carte de taille");
151 francois 432 FCT_TAILLE* metrique;
152 francois 467 if (app.get_action()==6)
153     {
154     FCT_GENERATEUR_3D<4> *carte=new FCT_GENERATEUR_3D<4>;
155     carte->lire(fichiercarte);
156     metrique=carte;
157     }
158     MG_FILE *gestcarte;
159     if (app.get_action()==16)
160     {
161     FCT_TAILLE_FEM_SOLUTION *carte=new FCT_TAILLE_FEM_SOLUTION(fichiercarte);
162     metrique=carte;
163     }
164 francois 432 MAILLEUR2D::priorite_metrique=prioritemetrique;
165     MG_GROUPE_TOPOLOGIQUE* mggt=NULL;
166     if (numgroupe!=0)
167     mggt=mggeo->get_mg_groupe_topologiqueid(numgroupe);
168     if (niveau>-1)
169 francois 283 {
170 francois 432 app.affiche((char*)"MAILLAGE 0D");
171     MAILLEUR0D m0d(mgmai,mggeo);
172     m0d.maille(mggt);
173 francois 494 if (save==true) gest.enregistrer(fichiersortie2);
174 francois 283 }
175 francois 432 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
176     if (mggt!=NULL)
177     {
178     int nb=mggt->get_nb();
179     for (int i=0;i<nb;i++)
180     {
181     lst.ajouter(mggt->get(i));
182     mggt->get(i)->get_topologie_sousjacente(&lst);
183     }
184     }
185     if (niveau>0)
186     {
187     app.affiche((char*)"MAILLAGE 1D");
188     int nb=mggeo->get_nb_mg_arete();
189     for (int i=0;i<nb;i++)
190     {
191     MG_ARETE* arete=mggeo->get_mg_arete(i);
192     if (mggt!=NULL)
193     if (lst.existe(arete)==0) continue;
194     char mess[100];
195     sprintf(mess," arete %d",i);
196     app.affiche(mess);
197 francois 446 MAILLEUR1D m1d(mgmai,mggeo,metrique,arete);
198 francois 432 m1d.maille(mggt);
199 francois 494 if (save==true) gest.enregistrer(fichiersortie2);
200 francois 432 }
201     }
202     if (niveau>1)
203     {
204     app.affiche((char*)"MAILLAGE 2D");
205     int nb=mggeo->get_nb_mg_face();
206     for (int i=0;i<nb;i++)
207     {
208     MG_FACE* mgface=mggeo->get_mg_face(i);
209     if (mggt!=NULL)
210     if (lst.existe(mgface)==0) continue;
211     char mess[100];
212     sprintf(mess," face %d",i);
213     app.affiche(mess);
214 francois 446 MAILLEUR2D m2d(mgmai,mggeo,metrique,mgface);
215 francois 447 m2d.change_niveau_optimisation(niveauopt2d);
216 francois 432 m2d.maille(mggt);
217 francois 494 if (save==true) gest.enregistrer(fichiersortie2);
218 francois 432 }
219     }
220     if (niveau==3)
221     {
222     app.affiche((char*)"MAILLAGE 3D");
223     int nb=mggeo->get_nb_mg_volume();
224     for (int i=0;i<nb;i++)
225     {
226     MG_VOLUME* mgvol=mggeo->get_mg_volume(i);
227     if (mggt!=NULL)
228     if (lst.existe(mgvol)==0) continue;
229 francois 446 MAILLEUR3D m3d(mgmai,mggeo,metrique,mgvol);
230 francois 432 m3d.active_affichage(app.affiche);
231 francois 447 m3d.change_niveau_optimisation(niveauopt3d);
232 francois 432 if (visufront) m3d.active_log(fichiersortie);
233 francois 494 if (save==true) m3d.change_nom_fichierdbg(fichiersortie2);
234     m3d.maille(mgvol);
235     if (save==true) gest.enregistrer(fichiersortie2);
236 francois 432 if (analyse)
237     {
238     app.affiche((char*)"Analyse maillage");
239     double vol;int tab[4];
240     m3d.analyse_maillage_obtenu(vol,tab);
241     char mess[100];
242     sprintf(mess," 1) Respect de la carte de taille");
243     app.affiche(mess);
244     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,mgmai->get_nb_mg_tetra());
245     app.affiche(mess);
246     sprintf(mess," erreur : %.2f%%",(mgmai->get_nb_mg_tetra()-vol)*100./vol);
247     app.affiche(mess);
248     sprintf(mess," 2) Qualite du maillage");
249     app.affiche(mess);
250     sprintf(mess," nombre de tetra bon (qualite>0.5) : %d (%.2f%%)",tab[3],tab[3]*100./mgmai->get_nb_mg_tetra());
251     app.affiche(mess);
252     sprintf(mess," nombre de tetra acceptable (qualite>0.2) : %d (%.2f%%) ",tab[2],tab[2]*100./mgmai->get_nb_mg_tetra());
253     app.affiche(mess);
254     sprintf(mess," nombre de tetra moyen (qualite>0.1) : %d (%.2f%%) ",tab[1],tab[1]*100./mgmai->get_nb_mg_tetra());
255     app.affiche(mess);
256     sprintf(mess," nombre de tetra mauvais (qualite>0.) : %d (%.2f%%) ",tab[0],tab[0]*100./mgmai->get_nb_mg_tetra());
257     app.affiche(mess);
258     }
259     }
260     }
261     app.affiche((char*)"Enregistrement");
262 francois 449 gest.enregistrer(fichiersortie);
263 francois 467 if (app.get_action()==6)
264     delete metrique;
265     if (app.get_action()==16)
266     {
267     delete metrique;
268     delete gestcarte;
269     }
270 francois 432 app.affiche((char*)"Fin");
271    
272     }
273    
274 francois 467 if ((app.get_action()==7)||(app.get_action()==17))
275 francois 432 {
276     char fichier[500];
277     char fichiersortie[500];
278     char fichiercarte[500];
279     int nummaillage;
280     double prioritemetrique;
281     bool analyse;
282     bool visufront;
283     double limiteadapt;
284 francois 467 int numsol,numchamp;
285 francois 432 app.recupere_parametre_string(1,fichier,(char*)"Fichier d'entrée manquant");
286     app.recupere_parametre_string_avec_defaut(2,fichiersortie,fichier);
287     app.recupere_parametre_string(3,fichiercarte,(char*)"Fichier carte manquant");
288     app.recupere_parametre_double_avec_defaut(8,prioritemetrique,0.65);
289     app.recupere_parametre_int_avec_defaut(13,nummaillage,0);
290     app.recupere_parametre_bool_avec_defaut(11,analyse,false);
291     app.recupere_parametre_bool_avec_defaut(12,visufront,false);
292 francois 479 app.recupere_parametre_double(14,limiteadapt,(char*)"Valeur limite d'adaptation manquante");
293 francois 467 if (app.get_action()==17)
294     {
295     app.recupere_parametre_int_avec_defaut(18,numsol,0);
296     app.recupere_parametre_int_avec_defaut(19,numchamp,0);
297     }
298 francois 432 if (app.get_erreur()==true) return 0;
299     char message[500];
300     app.affiche((char*)"Adaptation de maillage");
301     sprintf(message," Fichier magic : %s",fichier);
302     app.affiche(message);
303     printf(message," Numero de maillage : %d",nummaillage);
304     app.affiche(message);
305     sprintf(message," Carte : %s",fichiercarte);
306     app.affiche(message);
307     MG_FILE gest(fichier);
308     MG_MAILLAGE* mai;
309     if (nummaillage==0) mai=gest.get_mg_maillage(nummaillage); else mai=gest.get_mg_maillageid(nummaillage);
310     FCT_TAILLE* metrique;
311 francois 467 if (app.get_action()==7)
312     {
313     FCT_GENERATEUR_3D<4> *carte=new FCT_GENERATEUR_3D<4>;
314     carte->lire(fichiercarte);
315     metrique=carte;
316     }
317     MG_FILE *gestcarte;
318     if (app.get_action()==17)
319     {
320     FCT_TAILLE_FEM_SOLUTION *carte=new FCT_TAILLE_FEM_SOLUTION(fichiercarte);
321     metrique=carte;
322     }
323 francois 432 MG_MAILLAGE* nvmai=new MG_MAILLAGE(mai->get_mg_geometrie());
324     gest.ajouter_mg_maillage(nvmai);
325     MAILLEUR_ADAPTATIF mesh(mai,nvmai,metrique,limiteadapt);
326     mesh.active_affichage(app.affiche);
327     if (visufront) mesh.active_log(fichier);
328     mesh.maille();
329     if (analyse)
330     {
331 francois 494 MAILLEUR3D m3d(nvmai,nvmai->get_mg_geometrie(),metrique,false);
332 francois 432 app.affiche((char*)"Analyse maillage");
333     double vol;int tab[4];
334     m3d.analyse_maillage_obtenu(vol,tab);
335     char mess[100];
336     sprintf(mess," 1) Respect de la carte de taille");
337     app.affiche(mess);
338     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,nvmai->get_nb_mg_tetra());
339     app.affiche(mess);
340     sprintf(mess," erreur : %.2f%%",(nvmai->get_nb_mg_tetra()-vol)*100./vol);
341     app.affiche(mess);
342     sprintf(mess," 2) Qualite du maillage");
343     app.affiche(mess);
344     sprintf(mess," nombre de tetra bon (qualite>0.5) : %d (%.2f%%)",tab[3],tab[3]*100./nvmai->get_nb_mg_tetra());
345     app.affiche(mess);
346     sprintf(mess," nombre de tetra acceptable (qualite>0.2) : %d (%.2f%%) ",tab[2],tab[2]*100./nvmai->get_nb_mg_tetra());
347     app.affiche(mess);
348     sprintf(mess," nombre de tetra moyen (qualite>0.1) : %d (%.2f%%) ",tab[1],tab[1]*100./nvmai->get_nb_mg_tetra());
349     app.affiche(mess);
350     sprintf(mess," nombre de tetra mauvais (qualite>0.) : %d (%.2f%%) ",tab[0],tab[0]*100./nvmai->get_nb_mg_tetra());
351     app.affiche(mess);
352     }
353     app.affiche((char*)"Enregistrement");
354     gest.enregistrer(fichiersortie);
355 francois 467 if (app.get_action()==7)
356     delete metrique;
357     if (app.get_action()==17)
358     {
359     delete metrique;
360     delete gestcarte;
361     }
362     app.affiche((char*)"Fin");
363 francois 432 }
364    
365    
366    
367     /*
368 francois 283 char fichier[1000],fichier2[1000],fichiercarte[1000];
369     int typecarte,niveau=3,numgeometrie=0,adapt=0,nummaillage=0;
370     int exportgmsh=0;
371     int visufront=0;
372     int analyse=0;
373     int diff=0;
374     int niveauopt=2;
375     int octal=0;
376     int verif=0;
377     double coef=2.;
378     double eps,dg,prioritemetrique=0.65;
379     double limiteadapt=0.25;
380     int numgroupe=0;
381     int numgeo;
382     int fem=0;
383     int degre=1;
384 francois 375 bool versioncompilee=false;
385 francois 283 for (int i=0;i<argc;i++)
386     {
387     if (strcmp(argv[i],"-magic")==0) strcpy(fichier,argv[i+1]);
388     if (strcmp(argv[i],"-typecarte")==0) typecarte=atoi(argv[i+1]);
389     if (strcmp(argv[i],"-carte")==0) strcpy(fichiercarte,argv[i+1]);
390     if (strcmp(argv[i],"-eng")==0) dg=atof(argv[i+1]);
391     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
392     if (strcmp(argv[i],"-niveau")==0) niveau=atoi(argv[i+1]);
393     if (strcmp(argv[i],"-prioritemetrique")==0) prioritemetrique=atof(argv[i+1]);
394     if (strcmp(argv[i],"-numgeo")==0) numgeometrie=atoi(argv[i+1]);
395     if (strcmp(argv[i],"-adapt")==0) adapt=1;
396     if (strcmp(argv[i],"-nummai")==0) nummaillage=atoi(argv[i+1]);
397     if (strcmp(argv[i],"-exportgmsh")==0) exportgmsh=1;
398     if (strcmp(argv[i],"-visufront")==0) visufront=1;
399     if (strcmp(argv[i],"-analyse")==0) analyse=1;
400     if (strcmp(argv[i],"-out")==0) {
401     strcpy(fichier2,argv[i+1]);
402     diff=1;
403     }
404     if (strcmp(argv[i],"-niveauopt")==0) {
405     niveauopt=atoi(argv[i+1]);
406     }
407     if (strcmp(argv[i],"-limitadapt")==0) {
408     limiteadapt=atof(argv[i+1]);
409     }
410     if (strcmp(argv[i],"-octal")==0) octal=1;
411     if (strcmp(argv[i],"-verif")==0) verif=1;
412     if (strcmp(argv[i],"-coef")==0) coef=atof(argv[i+1]);
413     if (strcmp(argv[i],"-groupe")==0) numgroupe=atoi(argv[i+1]);
414     if (strcmp(argv[i],"-geo")==0) numgeo=atoi(argv[i+1]);
415     if (strcmp(argv[i],"-fem")==0) fem=1;
416     if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
417 francois 375 if (strcmp(argv[i],"-version")==0) versioncompilee=true;
418 francois 283 }
419 francois 375 affiche((char*)"Mailleur MAGiC");
420     if (versioncompilee)
421     {
422     GESTIONVERSION v;
423     char version[500];
424     v.print(version);
425     affiche(version);
426     }
427 francois 283 char message[500];
428     char nomtypecarte[9][9]={"Standard","Fichier"};
429     if (adapt)
430     {
431     affiche((char*)"Adaptation de maillage");
432     sprintf(message," Fichier magic : %s",fichier);
433     affiche(message);
434     sprintf(message," Numero de maillage : %d",nummaillage);
435     affiche(message);
436     sprintf(message," Carte : %s",fichiercarte);
437     affiche(message);
438     MG_FILE gest(fichier);
439     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummaillage);
440     FCT_GENERATEUR_3D<4> carte;
441     FCT_TAILLE* metrique;
442     carte.lire(fichiercarte);
443     metrique=&carte;
444     if (diff) strcpy(fichier,fichier2);
445     MG_MAILLAGE* nvmai=new MG_MAILLAGE(mai->get_mg_geometrie());
446     gest.ajouter_mg_maillage(nvmai);
447     MAILLEUR_ADAPTATIF mesh(mai,nvmai,metrique,limiteadapt);
448     mesh.active_affichage(affiche);
449     if (visufront) mesh.active_log(fichier);
450     mesh.maille();
451     if (analyse)
452     {
453     MAILLEUR3D m3d(nvmai,nvmai->get_mg_geometrie(),NULL,metrique);
454     affiche((char*)"Analyse maillage");
455 francois 424 double vol;int tab[4];
456     m3d.analyse_maillage_obtenu(vol,tab);
457 francois 283 char mess[100];
458 francois 424 sprintf(mess," 1) Respect de la carte de taille");
459     affiche(mess);
460     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,nvmai->get_nb_mg_tetra());
461     affiche(mess);
462     sprintf(mess," erreur : %.2f%%",(nvmai->get_nb_mg_tetra()-vol)*100./vol);
463     affiche(mess);
464     sprintf(mess," 2) Qualite du maillage");
465     affiche(mess);
466     sprintf(mess," nombre de tetra bon (qualite>0.5) : %d (%.2f%%)",tab[3],tab[3]*100./nvmai->get_nb_mg_tetra());
467     affiche(mess);
468     sprintf(mess," nombre de tetra acceptable (qualite>0.2) : %d (%.2f%%) ",tab[2],tab[2]*100./nvmai->get_nb_mg_tetra());
469     affiche(mess);
470     sprintf(mess," nombre de tetra moyen (qualite>0.1) : %d (%.2f%%) ",tab[1],tab[1]*100./nvmai->get_nb_mg_tetra());
471     affiche(mess);
472     sprintf(mess," nombre de tetra mauvais (qualite>0.) : %d (%.2f%%) ",tab[0],tab[0]*100./nvmai->get_nb_mg_tetra());
473     affiche(mess);
474     }
475 francois 283 affiche((char*)"Enregistrement");
476     //strcat(fichier,".magic");
477     gest.enregistrer(fichier);
478     if (exportgmsh)
479     {
480     affiche((char*)"Exportation GMSH");
481     MG_EXPORT exp;
482     exp.gmsh(mai,fichier);
483     }
484     affiche((char*)"Fin");
485     return 1;
486     }
487     if (octal)
488     {
489     sprintf(message," Fichier magic : %s",fichier);
490     affiche(message);
491     sprintf(message," Type de carte : %s",nomtypecarte[1]);
492     affiche(message);
493     sprintf(message," Fichier carte : %s",fichiercarte);
494     affiche(message);
495     affiche((char*)"Lecture carte de taille");
496     FCT_GENERATEUR_3D<4> carte;
497     carte.lire(fichiercarte);
498     affiche((char*)"Maillage");
499     MG_GESTIONNAIRE* gest;
500     MG_FILE* file=new MG_FILE(fichier);
501     if (file->get_code_de_lecture()==0)
502     {
503     delete file;
504     MG_GESTIONNAIRE* gest2=new MG_GESTIONNAIRE;
505     gest=gest2;
506     }
507     else gest=file;
508     MG_MAILLAGE* mgmai=new MG_MAILLAGE(NULL);
509     gest->ajouter_mg_maillage(mgmai);
510     MAILLEUR3D mailleur(&carte,mgmai);
511     mailleur.change_coef(coef);
512     mailleur.maille();
513     if (verif)
514     {
515     affiche((char*)"Verification");
516     MG_MAILLAGE* mgmai2=new MG_MAILLAGE(NULL);
517     gest->ajouter_mg_maillage(mgmai2);
518     mailleur.verifie_conformite_octale(mgmai,mgmai2);
519     }
520     if (fem)
521     {
522     affiche((char*)"Maillage FEM");
523     FEM_MAILLAGE* femmai=new FEM_MAILLAGE(mgmai->get_mg_geometrie(),mgmai,degre);
524     gest->ajouter_fem_maillage(femmai);
525     femmai->construire(0);
526     }
527     affiche((char*)"Enregistrement");
528     gest->enregistrer(fichier);
529     if (exportgmsh)
530     {
531     affiche((char*)"Exportation GMSH");
532     MG_EXPORT exp;
533     if (fem)
534     {
535     affiche((char*)"Maillage FEM");
536     FEM_MAILLAGE* femmai=new FEM_MAILLAGE(mgmai->get_mg_geometrie(),mgmai,degre);
537     gest->ajouter_fem_maillage(femmai);
538     femmai->construire(0);
539     } exp.gmsh(mgmai,fichier);
540     }
541     delete gest;
542     affiche((char*)"Fin");
543     return 1;
544 francois 432 }*/
545 francois 283 return 0;
546     }
547    
548    
549    
550     #pragma package(smart_init)