MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_solution.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mg_solution.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:54 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 
24 #include "gestionversion.h"
25 #include <math.h>
26 #include <iostream>
27 #include <stdlib.h>
28 #include <string.h>
29 
30 #include "mg_solution.h"
31 #include "mg_maillage.h"
32 #include "ot_mathematique.h"
33 
34 
35 #include <stdio.h> // pour la fonction remove() qui remplace DeleteFile
36 
37 
38 
39 
40 
41 
42 MG_SOLUTION::MG_SOLUTION(MG_MAILLAGE* mai,int nb,char* chemin,int code,std::string nomsol,int entite,int type_solution):MG_IDENTIFICATEUR(),nb_champs(nb),mgmai(mai),nomsolution(nomsol),typeentite(entite),dim_solution(type_solution)
43 {
44  inisolution(chemin,code);
45 }
46 
47 MG_SOLUTION::MG_SOLUTION(unsigned long num,MG_MAILLAGE* mai,int nb,char* chemin,int code,std::string nomsol,int entite,int type_solution):MG_IDENTIFICATEUR(num),nb_champs(nb),mgmai(mai),nomsolution(nomsol),typeentite(entite),dim_solution(type_solution)
48 {
49  inisolution(chemin,code);
50 }
51 
53 {
54  delete [] nom_fichier;
55  delete [] legende;
56  if (in!=NULL) fclose(in);
57 }
58 
59 
60 void MG_SOLUTION::inisolution(char* chemin,int code)
61 {
62  nom_fichier=new char[strlen(chemin)+2];
63  legende=new std::string[nb_champs];
64  for (int i=0;i<nb_champs;i++)
65  {
66  char mess[15];
67  sprintf(mess,"Champs_%d",i);
68  legende[i]=mess ;
69  }
70  strcpy(nom_fichier,chemin);
71  if (code!=0)
72  {
73  in=fopen(nom_fichier,"wb");
74  unsigned long nbele=0;
82  fwrite(&nbele,sizeof(unsigned long),1,in);
83  for (unsigned long i=0;i<nbele+1;i++)
84  {
85  unsigned long val=0;
86  fwrite(&val,sizeof(unsigned long),1,in);
87  }
88  unsigned long *tab=new unsigned long[nbele+1];
89  unsigned long i=0;
90  unsigned long cumul_iter=0;
92  {
93  LISTE_MG_NOEUD::iterator ite;
94  for (MG_NOEUD* ele=mgmai->get_premier_noeud(ite);ele;ele=mgmai->get_suivant_noeud(ite))
95  {
96  tab[i]=cumul_iter;
97  unsigned long iter=1*nb_champs*dim_solution;
98  for (unsigned long j=0;j<iter;j++)
99  {
100  double val=0;
101  fwrite(&val,sizeof(double),1,in);
102  }
103  i++;
104  cumul_iter=cumul_iter+iter;
105  }
106 
107  }
109  {
110  LISTE_MG_SEGMENT::iterator ite;
111  for (MG_SEGMENT* ele=mgmai->get_premier_segment(ite);ele;ele=mgmai->get_suivant_segment(ite))
112  {
113  tab[i]=cumul_iter;
114  unsigned long iter=1*nb_champs*dim_solution;
115  for (unsigned long j=0;j<iter;j++)
116  {
117  double val=0;
118  fwrite(&val,sizeof(double),1,in);
119  }
120  i++;
121  cumul_iter=cumul_iter+iter;
122  }
123 
124  }
126  {
127  LISTE_MG_TRIANGLE::iterator itet;
128  for (MG_TRIANGLE* ele=mgmai->get_premier_triangle(itet);ele;ele=mgmai->get_suivant_triangle(itet))
129  {
130  tab[i]=cumul_iter;
131  unsigned long iter=1*nb_champs*dim_solution;
132  for (unsigned long j=0;j<iter;j++)
133  {
134  double val=0;
135  fwrite(&val,sizeof(double),1,in);
136  }
137  i++;
138  cumul_iter=cumul_iter+iter;
139  }
140  LISTE_MG_QUADRANGLE::iterator iteq;
142  {
143  tab[i]=cumul_iter;
144  unsigned long iter=1*nb_champs*dim_solution;
145  for (unsigned long j=0;j<iter;j++)
146  {
147  double val=0;
148  fwrite(&val,sizeof(double),1,in);
149  }
150  i++;
151  cumul_iter=cumul_iter+iter;
152  }
153 
154  }
156  {
157  LISTE_MG_TETRA::iterator itet;
158  for (MG_TETRA* ele=mgmai->get_premier_tetra(itet);ele;ele=mgmai->get_suivant_tetra(itet))
159  {
160  tab[i]=cumul_iter;
161  unsigned long iter=1*nb_champs*dim_solution;
162  for (unsigned long j=0;j<iter;j++)
163  {
164  double val=0;
165  fwrite(&val,sizeof(double),1,in);
166  }
167  i++;
168  cumul_iter=cumul_iter+iter;
169  }
170 
171  LISTE_MG_HEXA::iterator iteh;
172  for (MG_HEXA* ele=mgmai->get_premier_hexa(iteh);ele;ele=mgmai->get_suivant_hexa(iteh))
173  {
174  tab[i]=cumul_iter;
175  unsigned long iter=1*nb_champs*dim_solution;
176  for (unsigned long j=0;j<iter;j++)
177  {
178  double val=0;
179  fwrite(&val,sizeof(double),1,in);
180  }
181  i++;
182  cumul_iter=cumul_iter+iter;
183  }
184 
185  }
187  {
188  LISTE_MG_TETRA::iterator itet;
189  for (MG_TETRA* ele=mgmai->get_premier_tetra(itet);ele;ele=mgmai->get_suivant_tetra(itet))
190  {
191  tab[i]=cumul_iter;
192  unsigned long iter=4*nb_champs*dim_solution;
193  for (unsigned long j=0;j<iter;j++)
194  {
195  double val=0;
196  fwrite(&val,sizeof(double),1,in);
197  }
198  i++;
199  cumul_iter=cumul_iter+iter;
200  }
201  LISTE_MG_HEXA::iterator iteh;
202  for (MG_HEXA* ele=mgmai->get_premier_hexa(iteh);ele;ele=mgmai->get_suivant_hexa(iteh))
203  {
204  tab[i]=cumul_iter;
205  unsigned long iter=8*nb_champs*dim_solution;
206  for (unsigned long j=0;j<iter;j++)
207  {
208  double val=0;
209  fwrite(&val,sizeof(double),1,in);
210  }
211  i++;
212  cumul_iter=cumul_iter+iter;
213  }
214  }
216  {
217  LISTE_MG_SEGMENT::iterator ite;
218  for (MG_SEGMENT* ele=mgmai->get_premier_segment(ite);ele;ele=mgmai->get_suivant_segment(ite))
219  {
220  tab[i]=cumul_iter;
221  unsigned long iter=2*nb_champs*dim_solution;
222  for (unsigned long j=0;j<iter;j++)
223  {
224  double val=0;
225  fwrite(&val,sizeof(double),1,in);
226  }
227  i++;
228  cumul_iter=cumul_iter+iter;
229  }
230 
231  }
233  {
234  LISTE_MG_TRIANGLE::iterator itet;
235  for (MG_TRIANGLE* ele=mgmai->get_premier_triangle(itet);ele;ele=mgmai->get_suivant_triangle(itet))
236  {
237  tab[i]=cumul_iter;
238  unsigned long iter=3*nb_champs*dim_solution;
239  for (unsigned long j=0;j<iter;j++)
240  {
241  double val=0;
242  fwrite(&val,sizeof(double),1,in);
243  }
244  i++;
245  cumul_iter=cumul_iter+iter;
246  }
247  LISTE_MG_QUADRANGLE::iterator iteq;
249  {
250  tab[i]=cumul_iter;
251  unsigned long iter=4*nb_champs*dim_solution;
252  for (unsigned long j=0;j<iter;j++)
253  {
254  double val=0;
255  fwrite(&val,sizeof(double),1,in);
256  }
257  i++;
258  cumul_iter=cumul_iter+iter;
259  }
260 
261  }
262  tab[nbele]=cumul_iter;
263  fseek(in,sizeof(unsigned long),SEEK_SET);
264  for (unsigned long i=0;i<nbele+1;i++)
265  {
266  unsigned long val=0;
267  fwrite(&(tab[i]),sizeof(unsigned long),1,in);
268  }
269  delete [] tab;
270  fclose(in);
271  }
272  in=fopen(nom_fichier,"r+b");
273  hash.clear();
274  fseek(in,0,SEEK_SET);
275  unsigned long nb;
276  fread(&nb,sizeof(unsigned long),1,in);
277  hash.insert(hash.end(),nb);
278  for (unsigned long i=0;i<nb+1;i++)
279  {
280  unsigned long val;
281  fread(&val,sizeof(unsigned long),1,in);
282  hash.insert(hash.end(),val);
283  }
284 }
285 
286 
288 {
289  fclose(in);
290  remove(nom_fichier);
291  in=NULL;
292 }
293 
294 
295 
296 double MG_SOLUTION::lire(int i,int j,int coord,int num_no)
297 {
298  unsigned long nb=hash[0];
299  unsigned long pos=hash[i+1];
300  unsigned long pospro=hash[i+2];
301  int nbval=(pospro-pos)/nb_champs/dim_solution;
302  long posval=(nb+2)*sizeof(unsigned long)+(pos+j*dim_solution*nbval+num_no*dim_solution+coord)*sizeof(double);
303  fseek(in,posval,SEEK_SET);
304  double val;
305  fread(&val,sizeof(double),1,in);
306  return (val);
307 }
308 
309 void MG_SOLUTION::ecrire(double val,int i,int j,int coord,int num_no)
310 {
311  unsigned long nb=hash[0];
312  unsigned long pos=hash[i+1];
313  unsigned long pospro=hash[i+2];
314  int nbval=(pospro-pos)/nb_champs/dim_solution;
315  long posval=(nb+2)*sizeof(unsigned long)+(pos+j*dim_solution*nbval+num_no*dim_solution+coord)*sizeof(double);
316  fseek(in,posval,SEEK_SET);
317  fwrite(&val,sizeof(double),1,in);
318  fflush(in);
319 }
320 
321 
322 
324 {
325 return dim_solution;
326 }
327 
328 void MG_SOLUTION::change_legende(int num,std::string val)
329 {
330  legende[num]=val;
331 }
332 
333 std::string MG_SOLUTION::get_legende(int num)
334 {
335  return legende[num];
336 }
337 
339 {
340  return nb_champs;
341 }
342 
344 {
345  return mgmai;
346 }
347 
349 {
350  return solmin[num];
351 }
352 
354 {
355  return solmax[num];
356 }
357 
359 {
360  int nb;
361  for (int j=0;j<9;j++)
362  {
363  solmax[j]=-1e308;
364  solmin[j]=1e308;
365  }
366  int i=0;
368  {
369  LISTE_MG_NOEUD::iterator it;
370  for (MG_NOEUD* no=mgmai->get_premier_noeud(it);no!=NULL;no=mgmai->get_suivant_noeud(it))
371  {
372  for (int k=0;k<dim_solution;k++)
373  {
374  double val=lire(i,num,k);
375  no->change_solution(val,k);
376  if (val<solmin[k]) solmin[k]=val;
377  if (val>solmax[k]) solmax[k]=val;
378  }
379  i++;
380  }
381  }
383  {
384  LISTE_MG_SEGMENT::iterator it;
385  for (MG_SEGMENT* seg=mgmai->get_premier_segment(it);seg!=NULL;seg=mgmai->get_suivant_segment(it))
386  {
387  for (int k=0;k<dim_solution;k++)
388  {
389  double val=lire(i,num,k);
390  seg->change_solution(val,k);
391  if (val<solmin[k]) solmin[k]=val;
392  if (val>solmax[k]) solmax[k]=val;
393  }
394  i++;
395  }
396  }
398  {
399  LISTE_MG_TRIANGLE::iterator it;
400  for (MG_TRIANGLE* tri=mgmai->get_premier_triangle(it);tri!=NULL;tri=mgmai->get_suivant_triangle(it))
401  {
402  for (int k=0;k<dim_solution;k++)
403  {
404  double val=lire(i,num,k);
405  tri->change_solution(val,k);
406  if (val<solmin[k]) solmin[k]=val;
407  if (val>solmax[k]) solmax[k]=val;
408  }
409  i++;
410  }
411  LISTE_MG_QUADRANGLE::iterator it2;
412  for (MG_QUADRANGLE* quad=mgmai->get_premier_quadrangle(it2);quad!=NULL;quad=mgmai->get_suivant_quadrangle(it2))
413  {
414  for (int k=0;k<dim_solution;k++)
415  {
416  double val=lire(i,num,k);
417  quad->change_solution(val,k);
418  if (val<solmin[k]) solmin[k]=val;
419  if (val>solmax[k]) solmax[k]=val;
420  }
421  i++;
422  }
423  }
425  {
426  LISTE_MG_TETRA::iterator it;
427  for (MG_TETRA* tet=mgmai->get_premier_tetra(it);tet!=NULL;tet=mgmai->get_suivant_tetra(it))
428  {
429  for (int k=0;k<dim_solution;k++)
430  {
431  double val=lire(i,num,k);
432  tet->change_solution(val,k);
433  if (val<solmin[k]) solmin[k]=val;
434  if (val>solmax[k]) solmax[k]=val;
435  }
436  i++;
437  }
438  LISTE_MG_HEXA::iterator it2;
439  for (MG_HEXA* hex=mgmai->get_premier_hexa(it2);hex!=NULL;hex=mgmai->get_suivant_hexa(it2))
440  {
441  for (int k=0;k<dim_solution;k++)
442  {
443  double val=lire(i,num,k);
444  hex->change_solution(val,k);
445  if (val<solmin[k]) solmin[k]=val;
446  if (val>solmax[k]) solmax[k]=val;
447  }
448  i++;
449  }
450  }
451  for (int k=0;k<dim_solution;k++)
452  if (OPERATEUR::egal(fabs(solmin[k]-solmax[k]),0.,1e-10)==1)
453  solmax[k]=solmin[k]+1e-10;
454 }
455 
456 std::string MG_SOLUTION::get_nom(void)
457 {
458  return nomsolution;
459 }
461 {
462  return nom_fichier;
463 }
464 void MG_SOLUTION::enregistrer(std::ostream& o,double version)
465 {
466  o << "%" << get_id() << "=SOLUTION(" << typeentite << "," << dim_solution << "," << nomsolution << ",$" << mgmai->get_id() << "," << nb_champs << "," << nom_fichier << ",(";
467  for (int i=0;i<nb_champs;i++)
468  {
469  o << legende[i];
470  if (i!=nb_champs-1) o<<",";
471  else o<<")";
472  }
473 
474 
475  o << ");" << std::endl;
476 }
477 
478 void MG_SOLUTION::get_fichier_dependant(std::vector<std::string> &liste_fichier)
479 {
480 
481 }
482 
484 {
485  return typeentite;
486 }
487 
488 
489 
490 std::ostream& operator << (std::ostream& o,MG_SOLUTION& sol)
491 {
493  return o;
494 }
495 
496 
MG_SOLUTION::lire
double lire(int i, int j, int coord=0, int num_no=0)
Definition: mg_solution.cpp:296
MG_SOLUTION::legende
std::string * legende
Definition: mg_solution.h:83
MG_SOLUTION::mgmai
MG_MAILLAGE * mgmai
Definition: mg_solution.h:80
MG_SEGMENT
Definition: mg_segment.h:38
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2
@ ENTITE_ELEMENT2
Definition: mg_definition.h:86
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_NOEUD
@ ENTITE_ELEMENT1_NOEUD
Definition: mg_definition.h:86
MG_SOLUTION::solmax
double solmax[MAX_TYPE_SOLUTION]
Definition: mg_solution.h:82
MG_SOLUTION::get_legende
std::string get_legende(int num)
Definition: mg_solution.cpp:333
MG_MAILLAGE::get_premier_noeud
MG_NOEUD * get_premier_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:548
gestionversion.h
MG_SOLUTION::efface
void efface(void)
Definition: mg_solution.cpp:287
MG_SOLUTION::get_nb_champ
int get_nb_champ(void)
Definition: mg_solution.cpp:338
operator<<
std::ostream & operator<<(std::ostream &o, MG_SOLUTION &sol)
Definition: mg_solution.cpp:490
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_MAILLAGE::get_nb_mg_triangle
unsigned int get_nb_mg_triangle(void)
Definition: mg_maillage.cpp:814
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_NOEUD
@ ENTITE_ELEMENT3_NOEUD
Definition: mg_definition.h:86
MG_SOLUTION::nomsolution
std::string nomsolution
Definition: mg_solution.h:84
MG_MAILLAGE::get_suivant_quadrangle
MG_QUADRANGLE * get_suivant_quadrangle(LISTE_MG_QUADRANGLE::iterator &it)
Definition: mg_maillage.cpp:1150
MG_MAILLAGE::get_premier_tetra
MG_TETRA * get_premier_tetra(LISTE_MG_TETRA::iterator &it)
Definition: mg_maillage.cpp:1374
MG_SOLUTION
Definition: mg_solution.h:46
MG_MAILLAGE::get_nb_mg_hexa
unsigned int get_nb_mg_hexa(void)
Definition: mg_maillage.cpp:1512
MG_TRIANGLE
Definition: mg_triangle.h:38
MG_SOLUTION::MG_SOLUTION
MG_SOLUTION(class MG_MAILLAGE *mai, int nb, char *chemin, int code, std::string nomsol, int entite=MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD, int type_solution=MAGIC::TYPE_SOLUTION::SCALAIRE)
Definition: mg_solution.cpp:42
MG_MAILLAGE::get_premier_segment
MG_SEGMENT * get_premier_segment(LISTE_MG_SEGMENT::iterator &)
Definition: mg_maillage.cpp:630
MG_TETRA
Definition: mg_tetra.h:37
MG_HEXA
Definition: mg_hexa.h:37
MG_SOLUTION::enregistrer
virtual void enregistrer(std::ostream &o, double version)
Definition: mg_solution.cpp:464
MG_SOLUTION::get_maillage
MG_MAILLAGE * get_maillage(void)
Definition: mg_solution.cpp:343
MG_QUADRANGLE
Definition: mg_quadrangle.h:39
MG_MAILLAGE::get_suivant_tetra
MG_TETRA * get_suivant_tetra(LISTE_MG_TETRA::iterator &it)
Definition: mg_maillage.cpp:1382
MAGIC_VERSION_FICHIER_DOUBLE
#define MAGIC_VERSION_FICHIER_DOUBLE
Definition: version.h:7
MG_SOLUTION::typeentite
int typeentite
Definition: mg_solution.h:85
MG_SOLUTION::ecrire
void ecrire(double val, int i, int j, int coord=0, int num_no=0)
Definition: mg_solution.cpp:309
MG_SOLUTION::inisolution
void inisolution(char *chemin, int code)
Definition: mg_solution.cpp:60
MG_SOLUTION::get_legende_min
double get_legende_min(int num=0)
Definition: mg_solution.cpp:348
MG_SOLUTION::get_nom_fichier
std::string get_nom_fichier(void)
Definition: mg_solution.cpp:460
MG_SOLUTION::get_legende_max
double get_legende_max(int num=0)
Definition: mg_solution.cpp:353
MG_SOLUTION::get_entite_solution
int get_entite_solution(void)
Definition: mg_solution.cpp:483
MG_SOLUTION::get_dim_solution
int get_dim_solution(void)
Definition: mg_solution.cpp:323
MG_SOLUTION::get_fichier_dependant
virtual void get_fichier_dependant(std::vector< std::string > &liste_fichier)
Definition: mg_solution.cpp:478
MG_MAILLAGE::get_premier_triangle
MG_TRIANGLE * get_premier_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:912
OPERATEUR::egal
static int egal(double a, double b, double eps)
Definition: ot_mathematique.cpp:1629
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_NOEUD
@ ENTITE_ELEMENT2_NOEUD
Definition: mg_definition.h:86
MG_NOEUD
Definition: mg_noeud.h:41
MG_SOLUTION::hash
std::vector< unsigned long > hash
Definition: mg_solution.h:87
MG_MAILLAGE::get_suivant_segment
MG_SEGMENT * get_suivant_segment(LISTE_MG_SEGMENT::iterator &)
Definition: mg_maillage.cpp:638
MG_SOLUTION::~MG_SOLUTION
virtual ~MG_SOLUTION()
Definition: mg_solution.cpp:52
MG_SOLUTION::active_solution
void active_solution(int num)
Definition: mg_solution.cpp:358
MG_SOLUTION::get_nom
std::string get_nom(void)
Definition: mg_solution.cpp:456
MG_SOLUTION::dim_solution
int dim_solution
Definition: mg_solution.h:86
MG_MAILLAGE::get_nb_mg_segment
unsigned int get_nb_mg_segment(void)
Definition: mg_maillage.cpp:646
MG_MAILLAGE::get_suivant_hexa
MG_HEXA * get_suivant_hexa(LISTE_MG_HEXA::iterator &it)
Definition: mg_maillage.cpp:1660
ot_mathematique.h
MG_SOLUTION::change_legende
void change_legende(int num, std::string val)
Definition: mg_solution.cpp:328
mg_maillage.h
MG_MAILLAGE::get_nb_mg_noeud
unsigned int get_nb_mg_noeud(void)
Definition: mg_maillage.cpp:476
MG_MAILLAGE::get_suivant_triangle
MG_TRIANGLE * get_suivant_triangle(LISTE_MG_TRIANGLE::iterator &it)
Definition: mg_maillage.cpp:920
MG_MAILLAGE
Definition: mg_maillage.h:62
MG_MAILLAGE::get_nb_mg_tetra
unsigned int get_nb_mg_tetra(void)
Definition: mg_maillage.cpp:1262
MG_SOLUTION::in
FILE * in
Definition: mg_solution.h:79
MG_MAILLAGE::get_nb_mg_quadrangle
unsigned int get_nb_mg_quadrangle(void)
Definition: mg_maillage.cpp:1030
MG_SOLUTION::nb_champs
int nb_champs
Definition: mg_solution.h:78
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1
@ ENTITE_ELEMENT1
Definition: mg_definition.h:86
MG_IDENTIFICATEUR
Definition: mg_identificateur.h:34
MG_MAILLAGE::get_premier_quadrangle
MG_QUADRANGLE * get_premier_quadrangle(LISTE_MG_QUADRANGLE::iterator &it)
Definition: mg_maillage.cpp:1142
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3
@ ENTITE_ELEMENT3
Definition: mg_definition.h:86
MG_MAILLAGE::get_suivant_noeud
MG_NOEUD * get_suivant_noeud(LISTE_MG_NOEUD::iterator &it)
Definition: mg_maillage.cpp:556
MG_MAILLAGE::get_premier_hexa
MG_HEXA * get_premier_hexa(LISTE_MG_HEXA::iterator &it)
Definition: mg_maillage.cpp:1652
mg_solution.h
MG_SOLUTION::solmin
double solmin[MAX_TYPE_SOLUTION]
Definition: mg_solution.h:81
MG_SOLUTION::nom_fichier
char * nom_fichier
Definition: mg_solution.h:77
MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD
@ ENTITE_NOEUD
Definition: mg_definition.h:86