ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_table.cpp
Revision: 808
Committed: Tue Jul 19 20:17:03 2016 UTC (8 years, 9 months ago) by francois
File size: 21471 byte(s)
Log Message:
inclusion de l'origine dans les tables

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     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 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 789 if ((sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1)&&(sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND)) continue;
167     int dim=sol->get_dim_solution();
168 francois 697 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 francois 808 std::string titre="Num;Id;Origine;";
256 francois 697 char chaine[255];
257 francois 808 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
258 francois 697 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 francois 789 if ((sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2)&&(sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND)) continue;
263 francois 697 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 francois 808 std::string titre="Num;Id;Origine;";
351 francois 697 char chaine[255];
352 francois 808 sprintf(chaine,"%d;%lu;%d;",numno+1,ele->get_id(),ele->get_mg_element_maillage()->get_origine());
353 francois 697 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 francois 789 if ((sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3)&&(sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENTND)) continue;
358 francois 697 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 francois 789 void MG_TABLE::info_element_nd(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
408     {
409     FILE* in=fopen(nomfichier,"wt");
410     LISTE_FEM_ELEMENT1::iterator it1;
411     LISTE_FEM_ELEMENT2::iterator it2;
412     LISTE_FEM_ELEMENT3::iterator it3;
413     int num=0;
414     std::string chaine;
415     bool first=true;
416     for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it1);eletmp!=NULL;eletmp=fem->get_suivant_element1(it1))
417     {
418     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
419     if (first) chaine=info_element1(fem,eletmp,num,true);
420     else chaine=info_element1(fem,eletmp,num,false);
421     fprintf(in,"%s\n",chaine.c_str());
422     num++;
423     first=false;
424     }
425     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it2);eletmp!=NULL;eletmp=fem->get_suivant_element2(it2))
426     {
427     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
428     if (first) chaine=info_element2(fem,eletmp,num,true);
429     else chaine=info_element2(fem,eletmp,num,false);
430     fprintf(in,"%s\n",chaine.c_str());
431     num++;
432     first=false;
433     }
434     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it3);eletmp!=NULL;eletmp=fem->get_suivant_element3(it3))
435     {
436     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
437     if (first) chaine=info_element3(fem,eletmp,num,true);
438     else chaine=info_element3(fem,eletmp,num,false);
439     fprintf(in,"%s\n",chaine.c_str());
440     num++;
441     first=false;
442     }
443     fclose(in);
444    
445     }
446    
447 francois 757 void MG_TABLE::info_element_gauss3(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
448     {
449     FILE* in=fopen(nomfichier,"wt");
450     LISTE_FEM_ELEMENT3::iterator it;
451     int num=0;
452     std::string chaine;
453     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
454     {
455     static bool first=true;
456     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
457     if (first) chaine=info_element_gauss3(fem,eletmp,num,true);
458     else chaine=info_element_gauss3(fem,eletmp,num,false);
459     fprintf(in,"%s\n",chaine.c_str());
460     num++;
461     first=false;
462     }
463     fclose(in);
464    
465     }
466    
467     std::string MG_TABLE::info_element_gauss3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre)
468     {
469     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
470     std::string titre="Num;Id;";
471     char chaine[255];
472     char chaine2[255];
473     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
474     std::string valeur=chaine;
475     LISTE_FEM_SOLUTION::iterator its;
476     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
477     {
478     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3_GAUSS) continue;
479     int dim=sol->get_dim_solution();
480     int nb_champs=sol->get_nb_champ();
481     for (int j=0;j<nb_champs;j++)
482     {
483     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
484     int timestep=0;
485     bool avectimestep=false;
486     for (int k=0;k<nom.length();k++)
487     {
488     if (nom[k]==' ') nom[k]='_';
489     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
490     }
491     if (avectimestep)
492     {
493     char message[500];
494     sscanf(nom.c_str(),"%s %d",message,&timestep);
495     nom=message;
496     nom=nom+ "_" + sol->get_legende(j);
497     sprintf(message,"%d",timestep);
498     nom=nom+"_"+"T"+message;
499     }
500     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
501     {
502     int nbgauss=sol->get_nb_gauss(numno);
503     for (int i=0;i<nbgauss;i++)
504     {
505     string numgauss=to_string(i+1);
506     if (avectitre) titre=titre+nom+"_G"+numgauss+";";
507     double val=sol->lire(numno,j,0,i);
508     sprintf(chaine,"%le;",val);
509     valeur=valeur+chaine;
510     }
511     }
512     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
513     {
514     int nbgauss=sol->get_nb_gauss(numno);
515     for (int i=0;i<nbgauss;i++)
516     {
517     std::string numgauss=to_string(i+1);
518     std:string nom2;
519     if (avectitre) nom2=nom+"_G"+numgauss;
520     if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
521     double val1=sol->lire(numno,j,0,i);
522     double val2=sol->lire(numno,j,1,i);
523     double val3=sol->lire(numno,j,2,i);
524     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
525     valeur=valeur+chaine;
526     }
527    
528     }
529     }
530     }
531 francois 778 for (int i=0;i<valeur.length();i++)
532     if (valeur[i]=='.') valeur[i]=separateur;
533 francois 757 if (avectitre)
534     return titre+"\n"+valeur;
535     return valeur;
536    
537    
538     }
539    
540    
541     void MG_TABLE::info_element_gauss1(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
542     {
543     FILE* in=fopen(nomfichier,"wt");
544     LISTE_FEM_ELEMENT1::iterator it;
545     int num=0;
546     std::string chaine;
547     for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
548     {
549     static bool first=true;
550     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
551     if (first) chaine=info_element_gauss1(fem,eletmp,num,true);
552     else chaine=info_element_gauss1(fem,eletmp,num,false);
553     fprintf(in,"%s\n",chaine.c_str());
554     num++;
555     first=false;
556     }
557     fclose(in);
558    
559     }
560    
561     std::string MG_TABLE::info_element_gauss1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre)
562     {
563     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
564     std::string titre="Num;Id;";
565     char chaine[255];
566     char chaine2[255];
567     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
568     std::string valeur=chaine;
569     LISTE_FEM_SOLUTION::iterator its;
570     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
571     {
572     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1_GAUSS) continue;
573     int dim=sol->get_dim_solution();
574     int nb_champs=sol->get_nb_champ();
575     for (int j=0;j<nb_champs;j++)
576     {
577     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
578     int timestep=0;
579     bool avectimestep=false;
580     for (int k=0;k<nom.length();k++)
581     {
582     if (nom[k]==' ') nom[k]='_';
583     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
584     }
585     if (avectimestep)
586     {
587     char message[500];
588     sscanf(nom.c_str(),"%s %d",message,&timestep);
589     nom=message;
590     nom=nom+ "_" + sol->get_legende(j);
591     sprintf(message,"%d",timestep);
592     nom=nom+"_"+"T"+message;
593     }
594     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
595     {
596     int nbgauss=sol->get_nb_gauss(numno);
597     for (int i=0;i<nbgauss;i++)
598     {
599     string numgauss=to_string(i+1);
600     if (avectitre) titre=titre+nom+"_G"+numgauss+";";
601     double val=sol->lire(numno,j,0,i);
602     sprintf(chaine,"%le;",val);
603     valeur=valeur+chaine;
604     }
605     }
606     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
607     {
608     int nbgauss=sol->get_nb_gauss(numno);
609     for (int i=0;i<nbgauss;i++)
610     {
611     std::string numgauss=to_string(i+1);
612     std:string nom2;
613     if (avectitre) nom2=nom+"_G"+numgauss;
614     if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
615     double val1=sol->lire(numno,j,0,i);
616     double val2=sol->lire(numno,j,1,i);
617     double val3=sol->lire(numno,j,2,i);
618     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
619     valeur=valeur+chaine;
620     }
621    
622     }
623     }
624     }
625 francois 778 for (int i=0;i<valeur.length();i++)
626     if (valeur[i]=='.') valeur[i]=separateur;
627 francois 757 if (avectitre)
628     return titre+"\n"+valeur;
629     return valeur;
630     }
631    
632    
633     void MG_TABLE::info_element_gauss2(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
634     {
635     FILE* in=fopen(nomfichier,"wt");
636     LISTE_FEM_ELEMENT2::iterator it;
637     int num=0;
638     std::string chaine;
639     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
640     {
641     static bool first=true;
642     if ((topo!=NULL) && (eletmp->get_lien_topologie()!=topo)) {num++;continue;}
643     if (first) chaine=info_element_gauss2(fem,eletmp,num,true);
644     else chaine=info_element_gauss2(fem,eletmp,num,false);
645     fprintf(in,"%s\n",chaine.c_str());
646     num++;
647     first=false;
648     }
649     fclose(in);
650    
651     }
652    
653     std::string MG_TABLE::info_element_gauss2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre)
654     {
655     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
656     std::string titre="Num;Id;";
657     char chaine[255];
658     char chaine2[255];
659     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
660     std::string valeur=chaine;
661     LISTE_FEM_SOLUTION::iterator its;
662     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
663     {
664     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2_GAUSS) continue;
665     int dim=sol->get_dim_solution();
666     int nb_champs=sol->get_nb_champ();
667     for (int j=0;j<nb_champs;j++)
668     {
669     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
670     int timestep=0;
671     bool avectimestep=false;
672     for (int k=0;k<nom.length();k++)
673     {
674     if (nom[k]==' ') nom[k]='_';
675     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
676     }
677     if (avectimestep)
678     {
679     char message[500];
680     sscanf(nom.c_str(),"%s %d",message,&timestep);
681     nom=message;
682     nom=nom+ "_" + sol->get_legende(j);
683     sprintf(message,"%d",timestep);
684     nom=nom+"_"+"T"+message;
685     }
686     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
687     {
688     int nbgauss=sol->get_nb_gauss(numno);
689     for (int i=0;i<nbgauss;i++)
690     {
691     string numgauss=to_string(i+1);
692     if (avectitre) titre=titre+nom+"_G"+numgauss+";";
693     double val=sol->lire(numno,j,0,i);
694     sprintf(chaine,"%le;",val);
695     valeur=valeur+chaine;
696     }
697     }
698     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
699     {
700     int nbgauss=sol->get_nb_gauss(numno);
701     for (int i=0;i<nbgauss;i++)
702     {
703     std::string numgauss=to_string(i+1);
704     std:string nom2;
705     if (avectitre) nom2=nom+"_G"+numgauss;
706     if (avectitre) titre=titre+nom2+"_x;"+nom2+"_y;"+nom2+"_z;";
707     double val1=sol->lire(numno,j,0,i);
708     double val2=sol->lire(numno,j,1,i);
709     double val3=sol->lire(numno,j,2,i);
710     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
711     valeur=valeur+chaine;
712     }
713    
714     }
715     }
716     }
717 francois 778 for (int i=0;i<valeur.length();i++)
718     if (valeur[i]=='.') valeur[i]=separateur;
719 francois 757 if (avectitre)
720     return titre+"\n"+valeur;
721     return valeur;
722    
723    
724 francois 697 }