ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_table.cpp
Revision: 855
Committed: Fri Nov 4 21:11:47 2016 UTC (8 years, 6 months ago) by francois
File size: 21726 byte(s)
Log Message:
ajustement table

File Contents

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