ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/app/mailleur/src/main.cpp
Revision: 276
Committed: Wed Jun 15 18:25:46 2011 UTC (14 years ago) by francois
File size: 13756 byte(s)
Log Message:
Correction de bug + Version toIbrep  version du premier exmple complet + construction de la vectorisation a la lecture du fichier

File Contents

# User Rev Content
1 5 //------------------------------------------------------------
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     #include "main.h"
31 francois 210 #include <string.h>
32 5 #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 francois 56 #include "mailleur_adaptatif.h"
39 5 #include "mailleur3d_dia.h"
40     #include "fct_generateur_3D.h"
41 francois 56 #include "mg_export.h"
42 francois 62 #include "step_import.h"
43     #include "acis_import.h"
44 5
45     //---------------------------------------------------------------------------
46    
47     void affiche(char* message)
48     {
49     #ifdef WINDOWS_VERSION
50     Form1->Memo1->Lines->Add(message);
51     #else
52     std::cout << message << std::endl;
53     #endif
54     }
55    
56    
57    
58     #ifdef WINDOWS_VERSION
59     int amain(int argc,char **argv)
60     #else
61     int main(int argc,char **argv)
62     #endif
63     {
64 francois 210 if (argc<3)
65 francois 272 {affiche((char*)" \
66 francois 103 if (strcmp(argv[i],\"-magic\")==0) strcpy(fichier,argv[i+1]);\n\
67     if (strcmp(argv[i],\"-typecarte\")==0) typecarte=atoi(argv[i+1]);\n\
68     if (strcmp(argv[i],\"-carte\")==0) strcpy(fichiercarte,argv[i+1]);\n\
69     if (strcmp(argv[i],\"-eng\")==0) dg=atof(argv[i+1]);\n\
70     if (strcmp(argv[i],\"-eps\")==0) eps=atof(argv[i+1]);\n\
71     if (strcmp(argv[i],\"-niveau\")==0) niveau=atoi(argv[i+1]);\n\
72     if (strcmp(argv[i],\"-prioritemetrique\")==0) prioritemetrique=atof(argv[i+1]);\n\
73     if (strcmp(argv[i],\"-numgeo\")==0) numgeometrie=atoi(argv[i+1]);\n\
74     if (strcmp(argv[i],\"-adapt\")==0) adapt=1;\n\
75     if (strcmp(argv[i],\"-nummai\")==0) nummaillage=atoi(argv[i+1]);\n\
76     if (strcmp(argv[i],\"-exportgmsh\")==0) exportgmsh=1;\n\
77     if (strcmp(argv[i],\"-visufront\")==0) visufront=1;\n\
78     if (strcmp(argv[i],\"-analyse\")==0) analyse=1;\n\
79     if (strcmp(argv[i],\"-out\")==0) {strcpy(fichier2,argv[i+1]);diff=1;}\n\
80     if (strcmp(argv[i],\"-niveauopt\")==0) {niveauopt=atoi(argv[i+1]);}\n\
81     if (strcmp(argv[i],\"-limitadapt\")==0) {limiteadapt=atof(argv[i+1]);}\n\
82     if (strcmp(argv[i],\"-octal\")==0) octal=1;\n\
83     if (strcmp(argv[i],\"-verif\")==0) verif=1;\n\
84 francois 210 if (strcmp(argv[i],\"-coef\")==0) coef=atof(argv[i+1]);\n\
85     if (strcmp(argv[i],\"-help\")==0) ");
86    
87 francois 103 return 1;}
88 francois 56 char fichier[1000],fichier2[1000],fichiercarte[1000];
89     int typecarte,niveau=3,numgeometrie=0,adapt=0,nummaillage=0;
90     int exportgmsh=0;
91 francois 62 int visufront=0;
92     int analyse=0;
93 francois 56 int diff=0;
94 francois 62 int niveauopt=2;
95 francois 98 int octal=0;
96     int verif=0;
97     double coef=2.;
98 5 double eps,dg,prioritemetrique=0.65;
99 francois 62 double limiteadapt=0.25;
100 francois 210 int numgroupe=0;
101     int numgeo;
102 francois 276 int fem=0;
103     int degre=1;
104 francois 210
105 5 for (int i=0;i<argc;i++)
106     {
107     if (strcmp(argv[i],"-magic")==0) strcpy(fichier,argv[i+1]);
108     if (strcmp(argv[i],"-typecarte")==0) typecarte=atoi(argv[i+1]);
109     if (strcmp(argv[i],"-carte")==0) strcpy(fichiercarte,argv[i+1]);
110     if (strcmp(argv[i],"-eng")==0) dg=atof(argv[i+1]);
111     if (strcmp(argv[i],"-eps")==0) eps=atof(argv[i+1]);
112     if (strcmp(argv[i],"-niveau")==0) niveau=atoi(argv[i+1]);
113     if (strcmp(argv[i],"-prioritemetrique")==0) prioritemetrique=atof(argv[i+1]);
114     if (strcmp(argv[i],"-numgeo")==0) numgeometrie=atoi(argv[i+1]);
115 francois 56 if (strcmp(argv[i],"-adapt")==0) adapt=1;
116     if (strcmp(argv[i],"-nummai")==0) nummaillage=atoi(argv[i+1]);
117 francois 62 if (strcmp(argv[i],"-exportgmsh")==0) exportgmsh=1;
118     if (strcmp(argv[i],"-visufront")==0) visufront=1;
119     if (strcmp(argv[i],"-analyse")==0) analyse=1;
120 francois 56 if (strcmp(argv[i],"-out")==0) {strcpy(fichier2,argv[i+1]);diff=1;}
121 francois 62 if (strcmp(argv[i],"-niveauopt")==0) {niveauopt=atoi(argv[i+1]);}
122     if (strcmp(argv[i],"-limitadapt")==0) {limiteadapt=atof(argv[i+1]);}
123 francois 98 if (strcmp(argv[i],"-octal")==0) octal=1;
124     if (strcmp(argv[i],"-verif")==0) verif=1;
125 francois 210 if (strcmp(argv[i],"-coef")==0) coef=atof(argv[i+1]);
126     if (strcmp(argv[i],"-groupe")==0) numgroupe=atoi(argv[i+1]);
127     if (strcmp(argv[i],"-geo")==0) numgeo=atoi(argv[i+1]);
128 francois 276 if (strcmp(argv[i],"-fem")==0) fem=1;
129     if (strcmp(argv[i],"-degre")==0) degre=atoi(argv[i+1]);
130 francois 210
131 5 }
132     char message[500];
133     char nomtypecarte[9][9]={"Standard","Fichier"};
134 francois 56 if (adapt)
135     {
136 francois 272 affiche((char*)"Adaptation de maillage");
137 francois 56 sprintf(message," Fichier magic : %s",fichier);affiche(message);
138     sprintf(message," Numero de maillage : %d",nummaillage);affiche(message);
139     sprintf(message," Carte : %s",fichiercarte);affiche(message);
140     MG_FILE gest(fichier);
141     MG_MAILLAGE* mai=gest.get_mg_maillageid(nummaillage);
142     FCT_GENERATEUR_3D<4> carte;
143     FCT_TAILLE* metrique;
144     carte.lire(fichiercarte);
145     metrique=&carte;
146 francois 62 if (diff) strcpy(fichier,fichier2);
147 francois 56 MG_MAILLAGE* nvmai=new MG_MAILLAGE(mai->get_mg_geometrie());
148     gest.ajouter_mg_maillage(nvmai);
149 francois 62 MAILLEUR_ADAPTATIF mesh(mai,nvmai,metrique,limiteadapt);
150 francois 56 mesh.active_affichage(affiche);
151 francois 62 if (visufront) mesh.active_log(fichier);
152 francois 56 mesh.maille();
153 francois 62 if (analyse)
154     {
155     MAILLEUR3D m3d(nvmai,nvmai->get_mg_geometrie(),NULL,metrique);
156 francois 272 affiche((char*)"Analyse maillage");
157 francois 62 double vol;
158     m3d.analyse_maillage_obtenu(vol);
159     char mess[100];
160     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,nvmai->get_nb_mg_tetra());
161     affiche(mess);
162 francois 272 sprintf(mess," erreur %f",(nvmai->get_nb_mg_tetra()-vol)*100./vol);
163 francois 62 affiche(mess);
164     }
165 francois 272 affiche((char*)"Enregistrement");
166 francois 62 //strcat(fichier,".magic");
167 francois 56 gest.enregistrer(fichier);
168     if (exportgmsh)
169     {
170 francois 272 affiche((char*)"Exportation GMSH");
171 francois 56 MG_EXPORT exp;
172     exp.gmsh(mai,fichier);
173     }
174 francois 272 affiche((char*)"Fin");
175 francois 56 return 1;
176     }
177 francois 98 if (octal)
178     {
179     sprintf(message," Fichier magic : %s",fichier);affiche(message);
180     sprintf(message," Type de carte : %s",nomtypecarte[1]);affiche(message);
181     sprintf(message," Fichier carte : %s",fichiercarte);affiche(message);
182 francois 272 affiche((char*)"Lecture carte de taille");
183 francois 98 FCT_GENERATEUR_3D<4> carte;
184     carte.lire(fichiercarte);
185 francois 272 affiche((char*)"Maillage");
186 francois 210 MG_GESTIONNAIRE* gest;
187     MG_FILE* file=new MG_FILE(fichier);
188     if (file->get_code_de_lecture()==0)
189     {
190     delete file;
191     MG_GESTIONNAIRE* gest2=new MG_GESTIONNAIRE;
192     gest=gest2;
193     }
194 francois 106 else gest=file;
195 francois 98 MG_MAILLAGE* mgmai=new MG_MAILLAGE(NULL);
196 francois 106 gest->ajouter_mg_maillage(mgmai);
197 francois 98 MAILLEUR3D mailleur(&carte,mgmai);
198     mailleur.change_coef(coef);
199     mailleur.maille();
200     if (verif)
201     {
202 francois 272 affiche((char*)"Verification");
203 francois 98 MG_MAILLAGE* mgmai2=new MG_MAILLAGE(NULL);
204 francois 106 gest->ajouter_mg_maillage(mgmai2);
205 francois 98 mailleur.verifie_conformite_octale(mgmai,mgmai2);
206     }
207 francois 276 if (fem)
208     {
209     affiche((char*)"Maillage FEM");
210     FEM_MAILLAGE* femmai=new FEM_MAILLAGE(mgmai->get_mg_geometrie(),mgmai,degre);
211     gest->ajouter_fem_maillage(femmai);
212     femmai->construire(0);
213     }
214 francois 272 affiche((char*)"Enregistrement");
215 francois 106 gest->enregistrer(fichier);
216 francois 98 if (exportgmsh)
217     {
218 francois 272 affiche((char*)"Exportation GMSH");
219 francois 98 MG_EXPORT exp;
220 francois 276 if (fem)
221     {
222     affiche((char*)"Maillage FEM");
223     FEM_MAILLAGE* femmai=new FEM_MAILLAGE(mgmai->get_mg_geometrie(),mgmai,degre);
224     gest->ajouter_fem_maillage(femmai);
225     femmai->construire(0);
226     } exp.gmsh(mgmai,fichier);
227 francois 98 }
228 francois 210 delete gest;
229 francois 272 affiche((char*)"Fin");
230 francois 98 return 1;
231     }
232 francois 272 affiche((char*)"Parametre d'etude");
233 5 sprintf(message," Fichier magic : %s",fichier);affiche(message);
234 francois 272 sprintf(message," Numero de geometrie : %d",numgeometrie);affiche(message);
235 5 sprintf(message," Type de carte : %s",nomtypecarte[typecarte-1]);affiche(message);
236     if (typecarte==1)
237     {
238     sprintf(message," Eng : %f",dg);affiche(message);
239     sprintf(message," eps : %f",eps);affiche(message);
240     }
241     if (typecarte==2)
242     {
243     sprintf(message," Fichier carte : %s",fichiercarte);affiche(message);
244     }
245 francois 272 sprintf(message," Parametre de metrique : %2.2f",prioritemetrique*100);affiche(message);
246     affiche((char*)"Lecture du fichier M.A.G.i.C");
247 5 MG_FILE gest(fichier);
248     MG_GEOMETRIE* mggeo=gest.get_mg_geometrie(numgeometrie);
249     MG_MAILLAGE* mgmai=new MG_MAILLAGE(mggeo);
250     gest.ajouter_mg_maillage(mgmai);
251     FCT_GENERATEUR_3D<4> carte;
252     FCT_TAILLE* metrique;
253     MAILLEUR2D::priorite_metrique=prioritemetrique;
254 francois 210 MG_GROUPE_TOPOLOGIQUE* mggt=NULL;
255     if (numgroupe!=0)
256     {
257     MG_GEOMETRIE* geo=gest.get_mg_geometrieid(numgeo);
258     mggt=geo->get_mg_groupe_topologiqueid(numgroupe);
259     }
260 5 if (typecarte==1)
261     {
262     metrique=NULL;
263     MAILLEUR::epsilon=eps;
264     MAILLEUR::distance_maximale=dg;
265     }
266     if (typecarte==2)
267     {
268 francois 272 affiche((char*)"Lecture carte de taille");
269 5 carte.lire(fichiercarte);
270     metrique=&carte;
271     }
272     if (niveau>-1)
273     {
274 francois 272 affiche((char*)"MAILLAGE 0D");
275 5 MAILLEUR0D m0d(mgmai,mggeo);
276 francois 210 m0d.maille(mggt);
277 5 }
278 francois 210 TPL_MAP_ENTITE<MG_ELEMENT_TOPOLOGIQUE*> lst;
279     if (mggt!=NULL)
280     {
281     int nb=mggt->get_nb();
282     for (int i=0;i<nb;i++)
283     {
284     lst.ajouter(mggt->get(i));
285     mggt->get(i)->get_topologie_sousjacente(&lst);
286     }
287     }
288 5 if (niveau>0)
289     {
290 francois 272 affiche((char*)"MAILLAGE 1D");
291 5 int nb=mggeo->get_nb_mg_arete();
292 francois 103 for (int i=0;i<nb;i++)
293 5 {
294 francois 210 MG_ARETE* arete=mggeo->get_mg_arete(i);
295     if (mggt!=NULL)
296     if (lst.existe(arete)==0) continue;
297     char mess[100];
298 francois 175 sprintf(mess," arete %d",i);
299     affiche(mess);
300 5 MAILLEUR1D m1d(mgmai,mggeo,arete,metrique);
301 francois 210 m1d.maille(mggt);
302 5 }
303     }
304     if (niveau>1)
305     {
306 francois 272 affiche((char*)"MAILLAGE 2D");
307 5 int nb=mggeo->get_nb_mg_face();
308     for (int i=0;i<nb;i++)
309     {
310 francois 210 MG_FACE* mgface=mggeo->get_mg_face(i);
311     if (mggt!=NULL)
312     if (lst.existe(mgface)==0) continue;
313     char mess[100];
314 5 sprintf(mess," face %d",i);
315     affiche(mess);
316     MAILLEUR2D m2d(mgmai,mggeo,mgface,metrique);
317 francois 210 m2d.maille(mggt);
318 5 }
319     }
320 francois 62 if (diff) strcpy(fichier,fichier2);
321 5 if (niveau==3)
322     {
323 francois 272 affiche((char*)"MAILLAGE 3D");
324 francois 56 int nb=mggeo->get_nb_mg_volume();
325     for (int i=0;i<nb;i++)
326     {
327     MG_VOLUME* mgvol=mggeo->get_mg_volume(i);
328 francois 210 if (mggt!=NULL)
329     if (lst.existe(mgvol)==0) continue;
330     MAILLEUR3D m3d(mgmai,mggeo,mgvol,metrique);
331 francois 56 m3d.active_affichage(affiche);
332 francois 62 m3d.change_niveau_optimisation(niveauopt);
333     if (visufront) m3d.active_log(fichier);
334 francois 56 m3d.maille(mgvol);
335 francois 62 if (analyse)
336     {
337 francois 272 affiche((char*)"Analyse maillage");
338 francois 62 double vol;
339     m3d.analyse_maillage_obtenu(vol);
340     char mess[100];
341     sprintf(mess," nombre de tetra theorique %f, nombre de tetra pratique %d ",vol,mgmai->get_nb_mg_tetra());
342     affiche(mess);
343 francois 272 sprintf(mess," erreur %f",(mgmai->get_nb_mg_tetra()-vol)*100./vol);
344 francois 62 affiche(mess);
345     }
346 francois 56 }
347 5 }
348 francois 276 if (fem)
349     {
350     affiche((char*)"Maillage FEM");
351     FEM_MAILLAGE* femmai=new FEM_MAILLAGE(mgmai->get_mg_geometrie(),mgmai,degre);
352     gest.ajouter_fem_maillage(femmai);
353     femmai->construire(0);
354     }
355 francois 272 affiche((char*)"Enregistrement");
356 5 gest.enregistrer(fichier);
357 francois 56 if (exportgmsh)
358     {
359 francois 272 affiche((char*)"Exportation GMSH");
360 francois 56 MG_EXPORT exp;
361     exp.gmsh(mgmai,fichier);
362     }
363 francois 272 affiche((char*)"Fin");
364 5 return 0;
365     }
366    
367    
368    
369     #pragma package(smart_init)