ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_table.cpp
Revision: 1158
Committed: Thu Jun 13 22:18:49 2024 UTC (11 months ago) by francois
File size: 22807 byte(s)
Log Message:
compatibilité Ubuntu 22.04
Suppression des refeences à Windows
Ajout d'une banière

File Contents

# User Rev Content
1 francois 1158 //####//------------------------------------------------------------
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 francois 697
23     #include "gestionversion.h"
24     #include "mg_table.h"
25     #include "mg_gestionnaire.h"
26 francois 778 #include "ot_parametres.h"
27 francois 697
28    
29    
30    
31     MG_TABLE::MG_TABLE()
32     {
33 francois 778 OT_PARAMETRES param;
34 francois 1076 param.ajouter("Separateur_decimale",",",OT_PARAMETRES::STRING,"Séparateur décimale pour l'exportation des fichiers excel");
35 francois 778 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 francois 697 }
41    
42     MG_TABLE::~MG_TABLE()
43     {
44     }
45    
46    
47    
48     std::string MG_TABLE::info_noeud(FEM_MAILLAGE *fem, FEM_NOEUD* no)
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 francois 698 void MG_TABLE::info_noeud(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
62 francois 697 {
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 francois 698 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 francois 697 else chaine=info_noeud(fem,notmp,numno,false);
73     fprintf(in,"%s\n",chaine.c_str());
74     numno++;
75 francois 698 first=false;
76 francois 697 }
77     fclose(in);
78    
79     }
80    
81     std::string MG_TABLE::info_noeud(FEM_MAILLAGE *fem, FEM_NOEUD* no,int numno,bool avectitre)
82     {
83     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
84 francois 808 std::string titre="Num;Id;Origine;x;y;z;";
85 francois 697 char chaine[255];
86 francois 808 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 francois 697 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 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
97 francois 697 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     }
113     if (MAGIC::TYPE_SOLUTION::SCALAIRE==1)
114     {
115     if (avectitre) titre=titre+nom+";";
116     double val=sol->lire(numno,j);
117     sprintf(chaine,"%le;",val);
118     valeur=valeur+chaine;
119     }
120     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
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 francois 778 for (int i=0;i<valeur.length();i++)
132     if (valeur[i]=='.') valeur[i]=separateur;
133 francois 697 if (avectitre)
134     return titre+"\n"+valeur;
135     return valeur;
136    
137    
138     }
139    
140    
141    
142    
143     std::string MG_TABLE::info_element1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele)
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 francois 853 return info_element1(fem,ele,num,true,false);
153 francois 697
154     }
155    
156 francois 698 void MG_TABLE::info_element1(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
157 francois 697 {
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 francois 698 static bool first=true;
165     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
166 francois 853 if (first) chaine=info_element1(fem,eletmp,num,true,false);
167     else chaine=info_element1(fem,eletmp,num,false,false);
168 francois 697 fprintf(in,"%s\n",chaine.c_str());
169     num++;
170 francois 698 first=false;
171 francois 697 }
172     fclose(in);
173    
174     }
175    
176 francois 853 std::string MG_TABLE::info_element1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre,bool provnd)
177 francois 697 {
178     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
179 francois 808 std::string titre="Num;Id;Origine;";
180 francois 697 char chaine[255];
181 francois 808 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
182 francois 697 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 francois 853 if (!provnd)
187 francois 855 {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 francois 854 int dim=sol->get_dim_solution();
191 francois 697 int nb_champs=sol->get_nb_champ();
192     for (int j=0;j<nb_champs;j++)
193     {
194 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
195 francois 697 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     }
211     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
212     {
213     if (avectitre) titre=titre+nom+";";
214     double val=sol->lire(numno,j);
215     sprintf(chaine,"%le;",val);
216     valeur=valeur+chaine;
217     }
218     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
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 francois 778 for (int i=0;i<valeur.length();i++)
230     if (valeur[i]=='.') valeur[i]=separateur;
231 francois 697 if (avectitre)
232     return titre+"\n"+valeur;
233     return valeur;
234    
235    
236     }
237    
238    
239    
240    
241    
242     std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele)
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 francois 853 return info_element2(fem,ele,num,true,false);
252 francois 697
253     }
254    
255 francois 698 void MG_TABLE::info_element2(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
256 francois 697 {
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 francois 698 static bool first=true;
264     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
265 francois 853 if (first) chaine=info_element2(fem,eletmp,num,true,false);
266     else chaine=info_element2(fem,eletmp,num,false,false);
267 francois 697 fprintf(in,"%s\n",chaine.c_str());
268     num++;
269 francois 698 first=false;
270     }
271 francois 697 fclose(in);
272    
273     }
274    
275 francois 853 std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre,bool provnd)
276 francois 697 {
277     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
278 francois 808 std::string titre="Num;Id;Origine;";
279 francois 697 char chaine[255];
280 francois 808 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
281 francois 697 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 francois 853 if (!provnd)
286 francois 855 {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 francois 697 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 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
294 francois 697 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     }
310     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
311     {
312     if (avectitre) titre=titre+nom+";";
313     double val=sol->lire(numno,j);
314     sprintf(chaine,"%le;",val);
315     valeur=valeur+chaine;
316     }
317     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
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 francois 778 for (int i=0;i<valeur.length();i++)
329     if (valeur[i]=='.') valeur[i]=separateur;
330 francois 697 if (avectitre)
331     return titre+"\n"+valeur;
332     return valeur;
333    
334    
335     }
336    
337    
338    
339    
340     std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele)
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 francois 853 return info_element3(fem,ele,num,true,false);
350 francois 697
351     }
352    
353 francois 698 void MG_TABLE::info_element3(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
354 francois 697 {
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 francois 698 static bool first=true;
362     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
363 francois 853 if (first) chaine=info_element3(fem,eletmp,num,true,false);
364     else chaine=info_element3(fem,eletmp,num,false,false);
365 francois 697 fprintf(in,"%s\n",chaine.c_str());
366     num++;
367 francois 698 first=false;
368     }
369 francois 697 fclose(in);
370    
371     }
372    
373 francois 853 std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre,bool provnd)
374 francois 697 {
375     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
376 francois 808 std::string titre="Num;Id;Origine;";
377 francois 697 char chaine[255];
378 francois 808 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
379 francois 697 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 francois 853 if (!provnd)
384 francois 855 {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 francois 697 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 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
392 francois 697 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     }
408     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
409     {
410     if (avectitre) titre=titre+nom+";";
411     double val=sol->lire(numno,j);
412     sprintf(chaine,"%le;",val);
413     valeur=valeur+chaine;
414     }
415     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
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 francois 778 for (int i=0;i<valeur.length();i++)
427     if (valeur[i]=='.') valeur[i]=separateur;
428 francois 697 if (avectitre)
429     return titre+"\n"+valeur;
430     return valeur;
431    
432    
433 francois 757 }
434    
435    
436 francois 789 void MG_TABLE::info_element_nd(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
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 francois 853 if (first) chaine=info_element1(fem,eletmp,num,true,true);
449     else chaine=info_element1(fem,eletmp,num,false,true);
450 francois 789 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 francois 853 if (first) chaine=info_element2(fem,eletmp,num,true,true);
458     else chaine=info_element2(fem,eletmp,num,false,true);
459 francois 789 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 francois 853 if (first) chaine=info_element3(fem,eletmp,num,true,true);
467     else chaine=info_element3(fem,eletmp,num,false,true);
468 francois 789 fprintf(in,"%s\n",chaine.c_str());
469     num++;
470     first=false;
471     }
472     fclose(in);
473    
474     }
475    
476 francois 757 void MG_TABLE::info_element_gauss3(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
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     {
498     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
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 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
513 francois 757 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     }
529     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
530     {
531     int nbgauss=sol->get_nb_gauss(numno);
532     for (int i=0;i<nbgauss;i++)
533     {
534 couturad 951 std::string numgauss=std::to_string(i+1);
535 francois 757 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     }
541     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
542     {
543     int nbgauss=sol->get_nb_gauss(numno);
544     for (int i=0;i<nbgauss;i++)
545     {
546 couturad 951 std::string numgauss=std::to_string(i+1);
547     std::string nom2;
548 francois 757 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 francois 778 for (int i=0;i<valeur.length();i++)
561     if (valeur[i]=='.') valeur[i]=separateur;
562 francois 757 if (avectitre)
563     return titre+"\n"+valeur;
564     return valeur;
565    
566    
567     }
568    
569    
570     void MG_TABLE::info_element_gauss1(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
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     {
592     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
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 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
607 francois 757 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     }
623     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
624     {
625     int nbgauss=sol->get_nb_gauss(numno);
626     for (int i=0;i<nbgauss;i++)
627     {
628 couturad 951 std::string numgauss=std::to_string(i+1);
629 francois 757 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     }
635     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
636     {
637     int nbgauss=sol->get_nb_gauss(numno);
638     for (int i=0;i<nbgauss;i++)
639     {
640 couturad 951 std::string numgauss=std::to_string(i+1);
641     std::string nom2;
642 francois 757 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 francois 778 for (int i=0;i<valeur.length();i++)
655     if (valeur[i]=='.') valeur[i]=separateur;
656 francois 757 if (avectitre)
657     return titre+"\n"+valeur;
658     return valeur;
659     }
660    
661    
662     void MG_TABLE::info_element_gauss2(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
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     {
684     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
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 couturad 951 std::string nom=sol->get_nom()+ "_" + sol->get_legende(j);
699 francois 757 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     }
715     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
716     {
717     int nbgauss=sol->get_nb_gauss(numno);
718     for (int i=0;i<nbgauss;i++)
719     {
720 couturad 951 std::string numgauss=std::to_string(i+1);
721 francois 757 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     }
727     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
728     {
729     int nbgauss=sol->get_nb_gauss(numno);
730     for (int i=0;i<nbgauss;i++)
731     {
732 couturad 951 std::string numgauss=std::to_string(i+1);
733     std::string nom2;
734 francois 757 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 francois 778 for (int i=0;i<valeur.length();i++)
747     if (valeur[i]=='.') valeur[i]=separateur;
748 francois 757 if (avectitre)
749     return titre+"\n"+valeur;
750     return valeur;
751    
752    
753 francois 1076 }