ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_table.cpp
Revision: 778
Committed: Wed Jan 27 22:58:37 2016 UTC (9 years, 3 months ago) by francois
File size: 19556 byte(s)
Log Message:
adapatation du parametrage du separateur decimal au cas de mg_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     std::string titre="Num;Id;x;y;z;";
65     char chaine[255];
66     sprintf(chaine,"%d;%lu;%le;%le;%le;",numno+1,no->get_id(),no->get_x(),no->get_y(),no->get_z());
67     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     return info_element1(fem,ele,num,true);
133    
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     if (first) chaine=info_element1(fem,eletmp,num,true);
147 francois 697 else chaine=info_element1(fem,eletmp,num,false);
148     fprintf(in,"%s\n",chaine.c_str());
149     num++;
150 francois 698 first=false;
151 francois 697 }
152     fclose(in);
153    
154     }
155    
156     std::string MG_TABLE::info_element1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre)
157     {
158     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
159     std::string titre="Num;Id;";
160     char chaine[255];
161     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
162     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 757 if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) continue;
167 francois 697 int dim=sol->get_dim_solution();
168     int nb_champs=sol->get_nb_champ();
169     for (int j=0;j<nb_champs;j++)
170     {
171     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
172     int timestep=0;
173     bool avectimestep=false;
174     for (int k=0;k<nom.length();k++)
175     {
176     if (nom[k]==' ') nom[k]='_';
177     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
178     }
179     if (avectimestep)
180     {
181     char message[500];
182     sscanf(nom.c_str(),"%s %d",message,&timestep);
183     nom=message;
184     nom=nom+ "_" + sol->get_legende(j);
185     sprintf(message,"%d",timestep);
186     nom=nom+"_"+"T"+message;
187     }
188     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
189     {
190     if (avectitre) titre=titre+nom+";";
191     double val=sol->lire(numno,j);
192     sprintf(chaine,"%le;",val);
193     valeur=valeur+chaine;
194     }
195     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
196     {
197     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
198     double val1=sol->lire(numno,j,0);
199     double val2=sol->lire(numno,j,1);
200     double val3=sol->lire(numno,j,2);
201     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
202     valeur=valeur+chaine;
203     }
204     }
205     }
206 francois 778 for (int i=0;i<valeur.length();i++)
207     if (valeur[i]=='.') valeur[i]=separateur;
208 francois 697 if (avectitre)
209     return titre+"\n"+valeur;
210     return valeur;
211    
212    
213     }
214    
215    
216    
217    
218    
219     std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele)
220     {
221     LISTE_FEM_ELEMENT2::iterator it;
222     int num=0;
223     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
224     {
225     if (eletmp==ele) break;
226     num++;
227     }
228     return info_element2(fem,ele,num,true);
229    
230     }
231    
232 francois 698 void MG_TABLE::info_element2(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
233 francois 697 {
234     FILE* in=fopen(nomfichier,"wt");
235     LISTE_FEM_ELEMENT2::iterator it;
236     int num=0;
237     std::string chaine;
238     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
239     {
240 francois 698 static bool first=true;
241     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
242     if (first) chaine=info_element2(fem,eletmp,num,true);
243 francois 697 else chaine=info_element2(fem,eletmp,num,false);
244     fprintf(in,"%s\n",chaine.c_str());
245     num++;
246 francois 698 first=false;
247     }
248 francois 697 fclose(in);
249    
250     }
251    
252     std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre)
253     {
254     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
255     std::string titre="Num;Id;";
256     char chaine[255];
257     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
258     std::string valeur=chaine;
259     LISTE_FEM_SOLUTION::iterator its;
260     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
261     {
262     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) continue;
263     int dim=sol->get_dim_solution();
264     int nb_champs=sol->get_nb_champ();
265     for (int j=0;j<nb_champs;j++)
266     {
267     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
268     int timestep=0;
269     bool avectimestep=false;
270     for (int k=0;k<nom.length();k++)
271     {
272     if (nom[k]==' ') nom[k]='_';
273     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
274     }
275     if (avectimestep)
276     {
277     char message[500];
278     sscanf(nom.c_str(),"%s %d",message,&timestep);
279     nom=message;
280     nom=nom+ "_" + sol->get_legende(j);
281     sprintf(message,"%d",timestep);
282     nom=nom+"_"+"T"+message;
283     }
284     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
285     {
286     if (avectitre) titre=titre+nom+";";
287     double val=sol->lire(numno,j);
288     sprintf(chaine,"%le;",val);
289     valeur=valeur+chaine;
290     }
291     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
292     {
293     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
294     double val1=sol->lire(numno,j,0);
295     double val2=sol->lire(numno,j,1);
296     double val3=sol->lire(numno,j,2);
297     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
298     valeur=valeur+chaine;
299     }
300     }
301     }
302 francois 778 for (int i=0;i<valeur.length();i++)
303     if (valeur[i]=='.') valeur[i]=separateur;
304 francois 697 if (avectitre)
305     return titre+"\n"+valeur;
306     return valeur;
307    
308    
309     }
310    
311    
312    
313    
314     std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele)
315     {
316     LISTE_FEM_ELEMENT3::iterator it;
317     int num=0;
318     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
319     {
320     if (eletmp==ele) break;
321     num++;
322     }
323     return info_element3(fem,ele,num,true);
324    
325     }
326    
327 francois 698 void MG_TABLE::info_element3(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
328 francois 697 {
329     FILE* in=fopen(nomfichier,"wt");
330     LISTE_FEM_ELEMENT3::iterator it;
331     int num=0;
332     std::string chaine;
333     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
334     {
335 francois 698 static bool first=true;
336     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
337     if (first) chaine=info_element3(fem,eletmp,num,true);
338 francois 697 else chaine=info_element3(fem,eletmp,num,false);
339     fprintf(in,"%s\n",chaine.c_str());
340     num++;
341 francois 698 first=false;
342     }
343 francois 697 fclose(in);
344    
345     }
346    
347     std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre)
348     {
349     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
350     std::string titre="Num;Id;";
351     char chaine[255];
352     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
353     std::string valeur=chaine;
354     LISTE_FEM_SOLUTION::iterator its;
355     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
356     {
357     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) continue;
358     int dim=sol->get_dim_solution();
359     int nb_champs=sol->get_nb_champ();
360     for (int j=0;j<nb_champs;j++)
361     {
362     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
363     int timestep=0;
364     bool avectimestep=false;
365     for (int k=0;k<nom.length();k++)
366     {
367     if (nom[k]==' ') nom[k]='_';
368     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
369     }
370     if (avectimestep)
371     {
372     char message[500];
373     sscanf(nom.c_str(),"%s %d",message,&timestep);
374     nom=message;
375     nom=nom+ "_" + sol->get_legende(j);
376     sprintf(message,"%d",timestep);
377     nom=nom+"_"+"T"+message;
378     }
379     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
380     {
381     if (avectitre) titre=titre+nom+";";
382     double val=sol->lire(numno,j);
383     sprintf(chaine,"%le;",val);
384     valeur=valeur+chaine;
385     }
386     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
387     {
388     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
389     double val1=sol->lire(numno,j,0);
390     double val2=sol->lire(numno,j,1);
391     double val3=sol->lire(numno,j,2);
392     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
393     valeur=valeur+chaine;
394     }
395     }
396     }
397 francois 778 for (int i=0;i<valeur.length();i++)
398     if (valeur[i]=='.') valeur[i]=separateur;
399 francois 697 if (avectitre)
400     return titre+"\n"+valeur;
401     return valeur;
402    
403    
404 francois 757 }
405    
406    
407     void MG_TABLE::info_element_gauss3(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
408     {
409     FILE* in=fopen(nomfichier,"wt");
410     LISTE_FEM_ELEMENT3::iterator it;
411     int num=0;
412     std::string chaine;
413     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
414     {
415     static bool first=true;
416     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
417     if (first) chaine=info_element_gauss3(fem,eletmp,num,true);
418     else chaine=info_element_gauss3(fem,eletmp,num,false);
419     fprintf(in,"%s\n",chaine.c_str());
420     num++;
421     first=false;
422     }
423     fclose(in);
424    
425     }
426    
427     std::string MG_TABLE::info_element_gauss3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre)
428     {
429     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
430     std::string titre="Num;Id;";
431     char chaine[255];
432     char chaine2[255];
433     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
434     std::string valeur=chaine;
435     LISTE_FEM_SOLUTION::iterator its;
436     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
437     {
438     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS) continue;
439     int dim=sol->get_dim_solution();
440     int nb_champs=sol->get_nb_champ();
441     for (int j=0;j<nb_champs;j++)
442     {
443     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
444     int timestep=0;
445     bool avectimestep=false;
446     for (int k=0;k<nom.length();k++)
447     {
448     if (nom[k]==' ') nom[k]='_';
449     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
450     }
451     if (avectimestep)
452     {
453     char message[500];
454     sscanf(nom.c_str(),"%s %d",message,&timestep);
455     nom=message;
456     nom=nom+ "_" + sol->get_legende(j);
457     sprintf(message,"%d",timestep);
458     nom=nom+"_"+"T"+message;
459     }
460     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
461     {
462     int nbgauss=sol->get_nb_gauss(numno);
463     for (int i=0;i<nbgauss;i++)
464     {
465     string numgauss=to_string(i+1);
466     if (avectitre) titre=titre+nom+"_G"+numgauss+";";
467     double val=sol->lire(numno,j,0,i);
468     sprintf(chaine,"%le;",val);
469     valeur=valeur+chaine;
470     }
471     }
472     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
473     {
474     int nbgauss=sol->get_nb_gauss(numno);
475     for (int i=0;i<nbgauss;i++)
476     {
477     std::string numgauss=to_string(i+1);
478     std:string nom2;
479     if (avectitre) nom2=nom+"_G"+numgauss;
480     if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
481     double val1=sol->lire(numno,j,0,i);
482     double val2=sol->lire(numno,j,1,i);
483     double val3=sol->lire(numno,j,2,i);
484     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
485     valeur=valeur+chaine;
486     }
487    
488     }
489     }
490     }
491 francois 778 for (int i=0;i<valeur.length();i++)
492     if (valeur[i]=='.') valeur[i]=separateur;
493 francois 757 if (avectitre)
494     return titre+"\n"+valeur;
495     return valeur;
496    
497    
498     }
499    
500    
501     void MG_TABLE::info_element_gauss1(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
502     {
503     FILE* in=fopen(nomfichier,"wt");
504     LISTE_FEM_ELEMENT1::iterator it;
505     int num=0;
506     std::string chaine;
507     for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
508     {
509     static bool first=true;
510     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
511     if (first) chaine=info_element_gauss1(fem,eletmp,num,true);
512     else chaine=info_element_gauss1(fem,eletmp,num,false);
513     fprintf(in,"%s\n",chaine.c_str());
514     num++;
515     first=false;
516     }
517     fclose(in);
518    
519     }
520    
521     std::string MG_TABLE::info_element_gauss1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre)
522     {
523     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
524     std::string titre="Num;Id;";
525     char chaine[255];
526     char chaine2[255];
527     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
528     std::string valeur=chaine;
529     LISTE_FEM_SOLUTION::iterator its;
530     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
531     {
532     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_GAUSS) continue;
533     int dim=sol->get_dim_solution();
534     int nb_champs=sol->get_nb_champ();
535     for (int j=0;j<nb_champs;j++)
536     {
537     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
538     int timestep=0;
539     bool avectimestep=false;
540     for (int k=0;k<nom.length();k++)
541     {
542     if (nom[k]==' ') nom[k]='_';
543     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
544     }
545     if (avectimestep)
546     {
547     char message[500];
548     sscanf(nom.c_str(),"%s %d",message,&timestep);
549     nom=message;
550     nom=nom+ "_" + sol->get_legende(j);
551     sprintf(message,"%d",timestep);
552     nom=nom+"_"+"T"+message;
553     }
554     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
555     {
556     int nbgauss=sol->get_nb_gauss(numno);
557     for (int i=0;i<nbgauss;i++)
558     {
559     string numgauss=to_string(i+1);
560     if (avectitre) titre=titre+nom+"_G"+numgauss+";";
561     double val=sol->lire(numno,j,0,i);
562     sprintf(chaine,"%le;",val);
563     valeur=valeur+chaine;
564     }
565     }
566     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
567     {
568     int nbgauss=sol->get_nb_gauss(numno);
569     for (int i=0;i<nbgauss;i++)
570     {
571     std::string numgauss=to_string(i+1);
572     std:string nom2;
573     if (avectitre) nom2=nom+"_G"+numgauss;
574     if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
575     double val1=sol->lire(numno,j,0,i);
576     double val2=sol->lire(numno,j,1,i);
577     double val3=sol->lire(numno,j,2,i);
578     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
579     valeur=valeur+chaine;
580     }
581    
582     }
583     }
584     }
585 francois 778 for (int i=0;i<valeur.length();i++)
586     if (valeur[i]=='.') valeur[i]=separateur;
587 francois 757 if (avectitre)
588     return titre+"\n"+valeur;
589     return valeur;
590     }
591    
592    
593     void MG_TABLE::info_element_gauss2(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
594     {
595     FILE* in=fopen(nomfichier,"wt");
596     LISTE_FEM_ELEMENT2::iterator it;
597     int num=0;
598     std::string chaine;
599     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
600     {
601     static bool first=true;
602     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
603     if (first) chaine=info_element_gauss2(fem,eletmp,num,true);
604     else chaine=info_element_gauss2(fem,eletmp,num,false);
605     fprintf(in,"%s\n",chaine.c_str());
606     num++;
607     first=false;
608     }
609     fclose(in);
610    
611     }
612    
613     std::string MG_TABLE::info_element_gauss2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre)
614     {
615     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
616     std::string titre="Num;Id;";
617     char chaine[255];
618     char chaine2[255];
619     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
620     std::string valeur=chaine;
621     LISTE_FEM_SOLUTION::iterator its;
622     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
623     {
624     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_GAUSS) continue;
625     int dim=sol->get_dim_solution();
626     int nb_champs=sol->get_nb_champ();
627     for (int j=0;j<nb_champs;j++)
628     {
629     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
630     int timestep=0;
631     bool avectimestep=false;
632     for (int k=0;k<nom.length();k++)
633     {
634     if (nom[k]==' ') nom[k]='_';
635     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
636     }
637     if (avectimestep)
638     {
639     char message[500];
640     sscanf(nom.c_str(),"%s %d",message,&timestep);
641     nom=message;
642     nom=nom+ "_" + sol->get_legende(j);
643     sprintf(message,"%d",timestep);
644     nom=nom+"_"+"T"+message;
645     }
646     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
647     {
648     int nbgauss=sol->get_nb_gauss(numno);
649     for (int i=0;i<nbgauss;i++)
650     {
651     string numgauss=to_string(i+1);
652     if (avectitre) titre=titre+nom+"_G"+numgauss+";";
653     double val=sol->lire(numno,j,0,i);
654     sprintf(chaine,"%le;",val);
655     valeur=valeur+chaine;
656     }
657     }
658     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
659     {
660     int nbgauss=sol->get_nb_gauss(numno);
661     for (int i=0;i<nbgauss;i++)
662     {
663     std::string numgauss=to_string(i+1);
664     std:string nom2;
665     if (avectitre) nom2=nom+"_G"+numgauss;
666     if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
667     double val1=sol->lire(numno,j,0,i);
668     double val2=sol->lire(numno,j,1,i);
669     double val3=sol->lire(numno,j,2,i);
670     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
671     valeur=valeur+chaine;
672     }
673    
674     }
675     }
676     }
677 francois 778 for (int i=0;i<valeur.length();i++)
678     if (valeur[i]=='.') valeur[i]=separateur;
679 francois 757 if (avectitre)
680     return titre+"\n"+valeur;
681     return valeur;
682    
683    
684 francois 697 }