MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mg_table.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_table.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:53 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
22 
23 #include "gestionversion.h"
24 #include "mg_table.h"
25 #include "mg_gestionnaire.h"
26 #include "ot_parametres.h"
27 
28 
29 
30 
32 {
33 OT_PARAMETRES param;
34 param.ajouter("Separateur_decimale",",",OT_PARAMETRES::STRING,"Séparateur décimale pour l'exportation des fichiers excel");
35 char fichier[500];
36 sprintf(fichier,"%s/.magic",getenv("HOME"));
37 param.lire(fichier);
38 param.enregistrer(fichier);
39 separateur=(param.get_nom("Separateur_decimale").c_str())[0];
40 }
41 
43 {
44 }
45 
46 
47 
49 {
50  LISTE_FEM_NOEUD::iterator it;
51  int numno=0;
52  for (FEM_NOEUD *notmp=fem->get_premier_noeud(it);notmp!=NULL;notmp=fem->get_suivant_noeud(it))
53  {
54  if (notmp==no) break;
55  numno++;
56  }
57 return info_noeud(fem,no,numno,true);
58 
59 }
60 
61 void MG_TABLE::info_noeud(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
62 {
63  FILE* in=fopen(nomfichier,"wt");
64  LISTE_FEM_NOEUD::iterator it;
65  int numno=0;
66  std::string chaine;
67  for (FEM_NOEUD *notmp=fem->get_premier_noeud(it);notmp!=NULL;notmp=fem->get_suivant_noeud(it))
68  {
69  static bool first=true;
70  if ((topo!=NULL) && (notmp->get_lien_topologie()!=topo)) {numno++;continue;}
71  if (first) chaine=info_noeud(fem,notmp,numno,true);
72  else chaine=info_noeud(fem,notmp,numno,false);
73  fprintf(in,"%s\n",chaine.c_str());
74  numno++;
75  first=false;
76  }
77 fclose(in);
78 
79 }
80 
81 std::string MG_TABLE::info_noeud(FEM_MAILLAGE *fem, FEM_NOEUD* no,int numno,bool avectitre)
82 {
84 std::string titre="Num;Id;Origine;x;y;z;";
85 char chaine[255];
86 sprintf(chaine,"%d;%lu;%d;%le;%le;%le;",numno+1,no->get_id(),no->get_mg_element_maillage()->get_origine(),no->get_x(),no->get_y(),no->get_z());
87 std::string valeur=chaine;
88 LISTE_FEM_SOLUTION::iterator its;
89 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
90  {
91  if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) continue;
92  int dim=sol->get_dim_solution();
93  int nb_champs=sol->get_nb_champ();
94  for (int j=0;j<nb_champs;j++)
95  {
96  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
97  int timestep=0;
98  bool avectimestep=false;
99  for (int k=0;k<nom.length();k++)
100  {
101  if (nom[k]==' ') nom[k]='_';
102  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
103  }
104  if (avectimestep)
105  {
106  char message[500];
107  sscanf(nom.c_str(),"%s %d",message,&timestep);
108  nom=message;
109  nom=nom+ "_" + sol->get_legende(j);
110  sprintf(message,"%d",timestep);
111  nom=nom+"_"+"T"+message;
112  }
114  {
115  if (avectitre) titre=titre+nom+";";
116  double val=sol->lire(numno,j);
117  sprintf(chaine,"%le;",val);
118  valeur=valeur+chaine;
119  }
121  {
122  if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
123  double val1=sol->lire(numno,j,0);
124  double val2=sol->lire(numno,j,1);
125  double val3=sol->lire(numno,j,2);
126  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
127  valeur=valeur+chaine;
128  }
129  }
130  }
131 for (int i=0;i<valeur.length();i++)
132  if (valeur[i]=='.') valeur[i]=separateur;
133 if (avectitre)
134  return titre+"\n"+valeur;
135 return valeur;
136 
137 
138 }
139 
140 
141 
142 
144 {
145  LISTE_FEM_ELEMENT1::iterator it;
146  int num=0;
147  for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
148  {
149  if (eletmp==ele) break;
150  num++;
151  }
152 return info_element1(fem,ele,num,true,false);
153 
154 }
155 
157 {
158  FILE* in=fopen(nomfichier,"wt");
159  LISTE_FEM_ELEMENT1::iterator it;
160  int num=0;
161  std::string chaine;
162  for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
163  {
164  static bool first=true;
165  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
166  if (first) chaine=info_element1(fem,eletmp,num,true,false);
167  else chaine=info_element1(fem,eletmp,num,false,false);
168  fprintf(in,"%s\n",chaine.c_str());
169  num++;
170  first=false;
171  }
172 fclose(in);
173 
174 }
175 
176 std::string MG_TABLE::info_element1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre,bool provnd)
177 {
179 std::string titre="Num;Id;Origine;";
180 char chaine[255];
181 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
182 std::string valeur=chaine;
183 LISTE_FEM_SOLUTION::iterator its;
184 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
185  {
186  if (!provnd)
187  {if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) continue;}
188  else
189  {if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND) continue;}
190  int dim=sol->get_dim_solution();
191  int nb_champs=sol->get_nb_champ();
192  for (int j=0;j<nb_champs;j++)
193  {
194  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
195  int timestep=0;
196  bool avectimestep=false;
197  for (int k=0;k<nom.length();k++)
198  {
199  if (nom[k]==' ') nom[k]='_';
200  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
201  }
202  if (avectimestep)
203  {
204  char message[500];
205  sscanf(nom.c_str(),"%s %d",message,&timestep);
206  nom=message;
207  nom=nom+ "_" + sol->get_legende(j);
208  sprintf(message,"%d",timestep);
209  nom=nom+"_"+"T"+message;
210  }
212  {
213  if (avectitre) titre=titre+nom+";";
214  double val=sol->lire(numno,j);
215  sprintf(chaine,"%le;",val);
216  valeur=valeur+chaine;
217  }
219  {
220  if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
221  double val1=sol->lire(numno,j,0);
222  double val2=sol->lire(numno,j,1);
223  double val3=sol->lire(numno,j,2);
224  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
225  valeur=valeur+chaine;
226  }
227  }
228  }
229 for (int i=0;i<valeur.length();i++)
230  if (valeur[i]=='.') valeur[i]=separateur;
231 if (avectitre)
232  return titre+"\n"+valeur;
233 return valeur;
234 
235 
236 }
237 
238 
239 
240 
241 
243 {
244  LISTE_FEM_ELEMENT2::iterator it;
245  int num=0;
246  for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
247  {
248  if (eletmp==ele) break;
249  num++;
250  }
251 return info_element2(fem,ele,num,true,false);
252 
253 }
254 
256 {
257  FILE* in=fopen(nomfichier,"wt");
258  LISTE_FEM_ELEMENT2::iterator it;
259  int num=0;
260  std::string chaine;
261  for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
262  {
263  static bool first=true;
264  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
265  if (first) chaine=info_element2(fem,eletmp,num,true,false);
266  else chaine=info_element2(fem,eletmp,num,false,false);
267  fprintf(in,"%s\n",chaine.c_str());
268  num++;
269  first=false;
270 }
271 fclose(in);
272 
273 }
274 
275 std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre,bool provnd)
276 {
278 std::string titre="Num;Id;Origine;";
279 char chaine[255];
280 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
281 std::string valeur=chaine;
282 LISTE_FEM_SOLUTION::iterator its;
283 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
284  {
285  if (!provnd)
286  {if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) continue;}
287  else
288  {if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND) continue;}
289  int dim=sol->get_dim_solution();
290  int nb_champs=sol->get_nb_champ();
291  for (int j=0;j<nb_champs;j++)
292  {
293  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
294  int timestep=0;
295  bool avectimestep=false;
296  for (int k=0;k<nom.length();k++)
297  {
298  if (nom[k]==' ') nom[k]='_';
299  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
300  }
301  if (avectimestep)
302  {
303  char message[500];
304  sscanf(nom.c_str(),"%s %d",message,&timestep);
305  nom=message;
306  nom=nom+ "_" + sol->get_legende(j);
307  sprintf(message,"%d",timestep);
308  nom=nom+"_"+"T"+message;
309  }
311  {
312  if (avectitre) titre=titre+nom+";";
313  double val=sol->lire(numno,j);
314  sprintf(chaine,"%le;",val);
315  valeur=valeur+chaine;
316  }
318  {
319  if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
320  double val1=sol->lire(numno,j,0);
321  double val2=sol->lire(numno,j,1);
322  double val3=sol->lire(numno,j,2);
323  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
324  valeur=valeur+chaine;
325  }
326  }
327  }
328 for (int i=0;i<valeur.length();i++)
329  if (valeur[i]=='.') valeur[i]=separateur;
330 if (avectitre)
331  return titre+"\n"+valeur;
332 return valeur;
333 
334 
335 }
336 
337 
338 
339 
341 {
342  LISTE_FEM_ELEMENT3::iterator it;
343  int num=0;
344  for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
345  {
346  if (eletmp==ele) break;
347  num++;
348  }
349 return info_element3(fem,ele,num,true,false);
350 
351 }
352 
354 {
355  FILE* in=fopen(nomfichier,"wt");
356  LISTE_FEM_ELEMENT3::iterator it;
357  int num=0;
358  std::string chaine;
359  for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
360  {
361  static bool first=true;
362  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
363  if (first) chaine=info_element3(fem,eletmp,num,true,false);
364  else chaine=info_element3(fem,eletmp,num,false,false);
365  fprintf(in,"%s\n",chaine.c_str());
366  num++;
367  first=false;
368 }
369 fclose(in);
370 
371 }
372 
373 std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre,bool provnd)
374 {
376 std::string titre="Num;Id;Origine;";
377 char chaine[255];
378 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
379 std::string valeur=chaine;
380 LISTE_FEM_SOLUTION::iterator its;
381 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
382  {
383  if (!provnd)
384  {if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) continue;}
385  else
386  {if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND) continue;}
387  int dim=sol->get_dim_solution();
388  int nb_champs=sol->get_nb_champ();
389  for (int j=0;j<nb_champs;j++)
390  {
391  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
392  int timestep=0;
393  bool avectimestep=false;
394  for (int k=0;k<nom.length();k++)
395  {
396  if (nom[k]==' ') nom[k]='_';
397  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
398  }
399  if (avectimestep)
400  {
401  char message[500];
402  sscanf(nom.c_str(),"%s %d",message,&timestep);
403  nom=message;
404  nom=nom+ "_" + sol->get_legende(j);
405  sprintf(message,"%d",timestep);
406  nom=nom+"_"+"T"+message;
407  }
409  {
410  if (avectitre) titre=titre+nom+";";
411  double val=sol->lire(numno,j);
412  sprintf(chaine,"%le;",val);
413  valeur=valeur+chaine;
414  }
416  {
417  if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
418  double val1=sol->lire(numno,j,0);
419  double val2=sol->lire(numno,j,1);
420  double val3=sol->lire(numno,j,2);
421  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
422  valeur=valeur+chaine;
423  }
424  }
425  }
426 for (int i=0;i<valeur.length();i++)
427  if (valeur[i]=='.') valeur[i]=separateur;
428 if (avectitre)
429  return titre+"\n"+valeur;
430 return valeur;
431 
432 
433 }
434 
435 
437 {
438  FILE* in=fopen(nomfichier,"wt");
439  LISTE_FEM_ELEMENT1::iterator it1;
440  LISTE_FEM_ELEMENT2::iterator it2;
441  LISTE_FEM_ELEMENT3::iterator it3;
442  int num=0;
443  std::string chaine;
444  bool first=true;
445  for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it1);eletmp!=NULL;eletmp=fem->get_suivant_element1(it1))
446  {
447  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
448  if (first) chaine=info_element1(fem,eletmp,num,true,true);
449  else chaine=info_element1(fem,eletmp,num,false,true);
450  fprintf(in,"%s\n",chaine.c_str());
451  num++;
452  first=false;
453  }
454  for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it2);eletmp!=NULL;eletmp=fem->get_suivant_element2(it2))
455  {
456  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
457  if (first) chaine=info_element2(fem,eletmp,num,true,true);
458  else chaine=info_element2(fem,eletmp,num,false,true);
459  fprintf(in,"%s\n",chaine.c_str());
460  num++;
461  first=false;
462  }
463  for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it3);eletmp!=NULL;eletmp=fem->get_suivant_element3(it3))
464  {
465  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
466  if (first) chaine=info_element3(fem,eletmp,num,true,true);
467  else chaine=info_element3(fem,eletmp,num,false,true);
468  fprintf(in,"%s\n",chaine.c_str());
469  num++;
470  first=false;
471  }
472 fclose(in);
473 
474 }
475 
477 {
478  FILE* in=fopen(nomfichier,"wt");
479  LISTE_FEM_ELEMENT3::iterator it;
480  int num=0;
481  std::string chaine;
482  for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
483  {
484  static bool first=true;
485  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
486  if (first) chaine=info_element_gauss3(fem,eletmp,num,true);
487  else chaine=info_element_gauss3(fem,eletmp,num,false);
488  fprintf(in,"%s\n",chaine.c_str());
489  num++;
490  first=false;
491 }
492 fclose(in);
493 
494 }
495 
496 std::string MG_TABLE::info_element_gauss3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre)
497 {
499 std::string titre="Num;Id;";
500 char chaine[255];
501 char chaine2[255];
502 sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
503 std::string valeur=chaine;
504 LISTE_FEM_SOLUTION::iterator its;
505 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
506  {
507  if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS) continue;
508  int dim=sol->get_dim_solution();
509  int nb_champs=sol->get_nb_champ();
510  for (int j=0;j<nb_champs;j++)
511  {
512  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
513  int timestep=0;
514  bool avectimestep=false;
515  for (int k=0;k<nom.length();k++)
516  {
517  if (nom[k]==' ') nom[k]='_';
518  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
519  }
520  if (avectimestep)
521  {
522  char message[500];
523  sscanf(nom.c_str(),"%s %d",message,&timestep);
524  nom=message;
525  nom=nom+ "_" + sol->get_legende(j);
526  sprintf(message,"%d",timestep);
527  nom=nom+"_"+"T"+message;
528  }
530  {
531  int nbgauss=sol->get_nb_gauss(numno);
532  for (int i=0;i<nbgauss;i++)
533  {
534  std::string numgauss=std::to_string(i+1);
535  if (avectitre) titre=titre+nom+"_G"+numgauss+";";
536  double val=sol->lire(numno,j,0,i);
537  sprintf(chaine,"%le;",val);
538  valeur=valeur+chaine;
539  }
540  }
542  {
543  int nbgauss=sol->get_nb_gauss(numno);
544  for (int i=0;i<nbgauss;i++)
545  {
546  std::string numgauss=std::to_string(i+1);
547  std::string nom2;
548  if (avectitre) nom2=nom+"_G"+numgauss;
549  if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
550  double val1=sol->lire(numno,j,0,i);
551  double val2=sol->lire(numno,j,1,i);
552  double val3=sol->lire(numno,j,2,i);
553  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
554  valeur=valeur+chaine;
555  }
556 
557  }
558  }
559  }
560 for (int i=0;i<valeur.length();i++)
561  if (valeur[i]=='.') valeur[i]=separateur;
562 if (avectitre)
563  return titre+"\n"+valeur;
564 return valeur;
565 
566 
567 }
568 
569 
571 {
572  FILE* in=fopen(nomfichier,"wt");
573  LISTE_FEM_ELEMENT1::iterator it;
574  int num=0;
575  std::string chaine;
576  for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
577  {
578  static bool first=true;
579  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
580  if (first) chaine=info_element_gauss1(fem,eletmp,num,true);
581  else chaine=info_element_gauss1(fem,eletmp,num,false);
582  fprintf(in,"%s\n",chaine.c_str());
583  num++;
584  first=false;
585 }
586 fclose(in);
587 
588 }
589 
590 std::string MG_TABLE::info_element_gauss1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre)
591 {
593 std::string titre="Num;Id;";
594 char chaine[255];
595 char chaine2[255];
596 sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
597 std::string valeur=chaine;
598 LISTE_FEM_SOLUTION::iterator its;
599 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
600  {
601  if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_GAUSS) continue;
602  int dim=sol->get_dim_solution();
603  int nb_champs=sol->get_nb_champ();
604  for (int j=0;j<nb_champs;j++)
605  {
606  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
607  int timestep=0;
608  bool avectimestep=false;
609  for (int k=0;k<nom.length();k++)
610  {
611  if (nom[k]==' ') nom[k]='_';
612  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
613  }
614  if (avectimestep)
615  {
616  char message[500];
617  sscanf(nom.c_str(),"%s %d",message,&timestep);
618  nom=message;
619  nom=nom+ "_" + sol->get_legende(j);
620  sprintf(message,"%d",timestep);
621  nom=nom+"_"+"T"+message;
622  }
624  {
625  int nbgauss=sol->get_nb_gauss(numno);
626  for (int i=0;i<nbgauss;i++)
627  {
628  std::string numgauss=std::to_string(i+1);
629  if (avectitre) titre=titre+nom+"_G"+numgauss+";";
630  double val=sol->lire(numno,j,0,i);
631  sprintf(chaine,"%le;",val);
632  valeur=valeur+chaine;
633  }
634  }
636  {
637  int nbgauss=sol->get_nb_gauss(numno);
638  for (int i=0;i<nbgauss;i++)
639  {
640  std::string numgauss=std::to_string(i+1);
641  std::string nom2;
642  if (avectitre) nom2=nom+"_G"+numgauss;
643  if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
644  double val1=sol->lire(numno,j,0,i);
645  double val2=sol->lire(numno,j,1,i);
646  double val3=sol->lire(numno,j,2,i);
647  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
648  valeur=valeur+chaine;
649  }
650 
651  }
652  }
653  }
654 for (int i=0;i<valeur.length();i++)
655  if (valeur[i]=='.') valeur[i]=separateur;
656 if (avectitre)
657  return titre+"\n"+valeur;
658 return valeur;
659 }
660 
661 
663 {
664  FILE* in=fopen(nomfichier,"wt");
665  LISTE_FEM_ELEMENT2::iterator it;
666  int num=0;
667  std::string chaine;
668  for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
669  {
670  static bool first=true;
671  if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
672  if (first) chaine=info_element_gauss2(fem,eletmp,num,true);
673  else chaine=info_element_gauss2(fem,eletmp,num,false);
674  fprintf(in,"%s\n",chaine.c_str());
675  num++;
676  first=false;
677 }
678 fclose(in);
679 
680 }
681 
682 std::string MG_TABLE::info_element_gauss2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre)
683 {
685 std::string titre="Num;Id;";
686 char chaine[255];
687 char chaine2[255];
688 sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
689 std::string valeur=chaine;
690 LISTE_FEM_SOLUTION::iterator its;
691 for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
692  {
693  if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_GAUSS) continue;
694  int dim=sol->get_dim_solution();
695  int nb_champs=sol->get_nb_champ();
696  for (int j=0;j<nb_champs;j++)
697  {
698  std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
699  int timestep=0;
700  bool avectimestep=false;
701  for (int k=0;k<nom.length();k++)
702  {
703  if (nom[k]==' ') nom[k]='_';
704  if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
705  }
706  if (avectimestep)
707  {
708  char message[500];
709  sscanf(nom.c_str(),"%s %d",message,&timestep);
710  nom=message;
711  nom=nom+ "_" + sol->get_legende(j);
712  sprintf(message,"%d",timestep);
713  nom=nom+"_"+"T"+message;
714  }
716  {
717  int nbgauss=sol->get_nb_gauss(numno);
718  for (int i=0;i<nbgauss;i++)
719  {
720  std::string numgauss=std::to_string(i+1);
721  if (avectitre) titre=titre+nom+"_G"+numgauss+";";
722  double val=sol->lire(numno,j,0,i);
723  sprintf(chaine,"%le;",val);
724  valeur=valeur+chaine;
725  }
726  }
728  {
729  int nbgauss=sol->get_nb_gauss(numno);
730  for (int i=0;i<nbgauss;i++)
731  {
732  std::string numgauss=std::to_string(i+1);
733  std::string nom2;
734  if (avectitre) nom2=nom+"_G"+numgauss;
735  if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
736  double val1=sol->lire(numno,j,0,i);
737  double val2=sol->lire(numno,j,1,i);
738  double val3=sol->lire(numno,j,2,i);
739  sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
740  valeur=valeur+chaine;
741  }
742 
743  }
744  }
745  }
746 for (int i=0;i<valeur.length();i++)
747  if (valeur[i]=='.') valeur[i]=separateur;
748 if (avectitre)
749  return titre+"\n"+valeur;
750 return valeur;
751 
752 
753 }
MG_TABLE::separateur
char separateur
Definition: mg_table.h:63
FEM_SOLUTION
Definition: fem_solution.h:40
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2
@ ENTITE_ELEMENT2
Definition: mg_definition.h:86
FEM_MAILLAGE::get_suivant_element3
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:680
gestionversion.h
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND
@ ENTITE_ELEMENTND
Definition: mg_definition.h:86
mg_gestionnaire.h
MAGIC::TYPE_SOLUTION::VECTEUR
@ VECTEUR
Definition: mg_definition.h:93
MG_IDENTIFICATEUR::get_id
unsigned long get_id()
Definition: mg_identificateur.cpp:53
MG_TABLE::info_element3
virtual void info_element3(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:353
OT_PARAMETRES::STRING
@ STRING
Definition: ot_parametres.h:38
OT_PARAMETRES::ajouter
void ajouter(std::string chaine, double valeur, int typep, std::string aide="")
Definition: ot_parametres.cpp:61
FEM_ELEMENT3
Definition: fem_element3.h:34
FEM_MAILLAGE::get_premier_noeud
FEM_NOEUD * get_premier_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:174
mg_table.h
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS
@ ENTITE_ELEMENT3_GAUSS
Definition: mg_definition.h:86
MG_GESTIONNAIRE
Definition: mg_gestionnaire.h:57
MG_GESTIONNAIRE::get_suivant_fem_solution
FEM_SOLUTION * get_suivant_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
Definition: mg_gestionnaire.cpp:1041
FEM_ELEMENT2
Definition: fem_element2.h:34
FEM_MAILLAGE::get_mg_maillage
MG_MAILLAGE * get_mg_maillage(void)
Definition: fem_maillage.cpp:93
FEM_MAILLAGE::get_premier_element2
FEM_ELEMENT2 * get_premier_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:561
MG_ELEMENT_TOPOLOGIQUE
Definition: mg_element_topologique.h:51
FEM_NOEUD::get_y
virtual double get_y(double coef=0.)
Definition: fem_noeud.cpp:210
FEM_MAILLAGE::get_suivant_element1
FEM_ELEMENT1 * get_suivant_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:457
MG_TABLE::info_element_gauss1
virtual void info_element_gauss1(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:570
MG_TABLE::info_element_nd
virtual void info_element_nd(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:436
OT_PARAMETRES::get_nom
std::string get_nom(std::string chaine)
Definition: ot_parametres.cpp:266
FEM_MAILLAGE
Definition: fem_maillage.h:66
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_GAUSS
@ ENTITE_ELEMENT2_GAUSS
Definition: mg_definition.h:86
ot_parametres.h
FEM_ELEMENT_MAILLAGE::get_mg_element_maillage
virtual class MG_ELEMENT_MAILLAGE * get_mg_element_maillage(void)
Definition: fem_element_maillage.cpp:81
FEM_ELEMENT1
Definition: fem_element1.h:34
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_GAUSS
@ ENTITE_ELEMENT1_GAUSS
Definition: mg_definition.h:86
OT_PARAMETRES
Definition: ot_parametres.h:31
MG_TABLE::info_element1
virtual void info_element1(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:156
FEM_MAILLAGE::get_suivant_element2
FEM_ELEMENT2 * get_suivant_element2(LISTE_FEM_ELEMENT2::iterator &it)
Definition: fem_maillage.cpp:569
MG_TABLE::info_element_gauss3
virtual void info_element_gauss3(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:476
FEM_NOEUD::get_x
virtual double get_x(double coef=0.)
Definition: fem_noeud.cpp:205
FEM_MAILLAGE::get_premier_element1
FEM_ELEMENT1 * get_premier_element1(LISTE_FEM_ELEMENT1::iterator &it)
Definition: fem_maillage.cpp:449
FEM_NOEUD
Definition: fem_noeud.h:35
OT_PARAMETRES::enregistrer
void enregistrer(char *nom)
Definition: ot_parametres.cpp:132
MG_TABLE::MG_TABLE
MG_TABLE()
Definition: mg_table.cpp:31
FEM_NOEUD::get_z
virtual double get_z(double coef=0.)
Definition: fem_noeud.cpp:215
MG_MAILLAGE::get_gestionnaire
MG_GESTIONNAIRE * get_gestionnaire(void)
Definition: mg_maillage.cpp:2658
OT_PARAMETRES::lire
int lire(char *nom)
Definition: ot_parametres.cpp:144
FEM_MAILLAGE::get_suivant_noeud
FEM_NOEUD * get_suivant_noeud(LISTE_FEM_NOEUD::iterator &it)
Definition: fem_maillage.cpp:182
MG_GESTIONNAIRE::get_premier_fem_solution
FEM_SOLUTION * get_premier_fem_solution(LISTE_FEM_SOLUTION::iterator &it)
Definition: mg_gestionnaire.cpp:1033
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1
@ ENTITE_ELEMENT1
Definition: mg_definition.h:86
MG_ELEMENT_MAILLAGE::get_origine
virtual int get_origine(void)
Definition: mg_element_maillage.cpp:91
MAGIC::TYPE_SOLUTION::SCALAIRE
@ SCALAIRE
Definition: mg_definition.h:93
MG_TABLE::~MG_TABLE
~MG_TABLE()
Definition: mg_table.cpp:42
MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3
@ ENTITE_ELEMENT3
Definition: mg_definition.h:86
MG_TABLE::info_element_gauss2
virtual void info_element_gauss2(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:662
MG_TABLE::info_noeud
virtual void info_noeud(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:61
MG_TABLE::info_element2
virtual void info_element2(FEM_MAILLAGE *fem, char *nomfichier, MG_ELEMENT_TOPOLOGIQUE *topo=NULL)
Definition: mg_table.cpp:255
FEM_MAILLAGE::get_premier_element3
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:672
MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD
@ ENTITE_NOEUD
Definition: mg_definition.h:86