ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_table.cpp
Revision: 697
Committed: Tue Jul 28 20:35:26 2015 UTC (9 years, 9 months ago) by francois
File size: 10061 byte(s)
Log Message:
ajout d'une operation qui permet d'extraire le contenu des solutions fem dans un fichier csv.

File Contents

# User Rev Content
1 francois 697 //---------------------------------------------------------------------------
2    
3     #include "gestionversion.h"
4     #include "mg_table.h"
5     #include "mg_gestionnaire.h"
6    
7    
8    
9    
10    
11     MG_TABLE::MG_TABLE()
12     {
13     }
14    
15     MG_TABLE::~MG_TABLE()
16     {
17     }
18    
19    
20    
21     std::string MG_TABLE::info_noeud(FEM_MAILLAGE *fem, FEM_NOEUD* no)
22     {
23     LISTE_FEM_NOEUD::iterator it;
24     int numno=0;
25     for (FEM_NOEUD *notmp=fem->get_premier_noeud(it);notmp!=NULL;notmp=fem->get_suivant_noeud(it))
26     {
27     if (notmp==no) break;
28     numno++;
29     }
30     return info_noeud(fem,no,numno,true);
31    
32     }
33    
34     void MG_TABLE::info_noeud(FEM_MAILLAGE *fem,char *nomfichier)
35     {
36     FILE* in=fopen(nomfichier,"wt");
37     LISTE_FEM_NOEUD::iterator it;
38     int numno=0;
39     std::string chaine;
40     for (FEM_NOEUD *notmp=fem->get_premier_noeud(it);notmp!=NULL;notmp=fem->get_suivant_noeud(it))
41     {
42     if (numno==0) chaine=info_noeud(fem,notmp,numno,true);
43     else chaine=info_noeud(fem,notmp,numno,false);
44     fprintf(in,"%s\n",chaine.c_str());
45     numno++;
46     }
47     fclose(in);
48    
49     }
50    
51     std::string MG_TABLE::info_noeud(FEM_MAILLAGE *fem, FEM_NOEUD* no,int numno,bool avectitre)
52     {
53     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
54     std::string titre="Num;Id;x;y;z;";
55     char chaine[255];
56     sprintf(chaine,"%d;%lu;%le;%le;%le;",numno+1,no->get_id(),no->get_x(),no->get_y(),no->get_z());
57     std::string valeur=chaine;
58     LISTE_FEM_SOLUTION::iterator its;
59     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
60     {
61     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_NOEUD) continue;
62     int dim=sol->get_dim_solution();
63     int nb_champs=sol->get_nb_champ();
64     for (int j=0;j<nb_champs;j++)
65     {
66     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
67     int timestep=0;
68     bool avectimestep=false;
69     for (int k=0;k<nom.length();k++)
70     {
71     if (nom[k]==' ') nom[k]='_';
72     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
73     }
74     if (avectimestep)
75     {
76     char message[500];
77     sscanf(nom.c_str(),"%s %d",message,&timestep);
78     nom=message;
79     nom=nom+ "_" + sol->get_legende(j);
80     sprintf(message,"%d",timestep);
81     nom=nom+"_"+"T"+message;
82     }
83     if (MAGIC::TYPE_SOLUTION::SCALAIRE==1)
84     {
85     if (avectitre) titre=titre+nom+";";
86     double val=sol->lire(numno,j);
87     sprintf(chaine,"%le;",val);
88     valeur=valeur+chaine;
89     }
90     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
91     {
92     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
93     double val1=sol->lire(numno,j,0);
94     double val2=sol->lire(numno,j,1);
95     double val3=sol->lire(numno,j,2);
96     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
97     valeur=valeur+chaine;
98     }
99     }
100     }
101    
102     if (avectitre)
103     return titre+"\n"+valeur;
104     return valeur;
105    
106    
107     }
108    
109    
110    
111    
112     std::string MG_TABLE::info_element1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele)
113     {
114     LISTE_FEM_ELEMENT1::iterator it;
115     int num=0;
116     for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
117     {
118     if (eletmp==ele) break;
119     num++;
120     }
121     return info_element1(fem,ele,num,true);
122    
123     }
124    
125     void MG_TABLE::info_element1(FEM_MAILLAGE *fem,char *nomfichier)
126     {
127     FILE* in=fopen(nomfichier,"wt");
128     LISTE_FEM_ELEMENT1::iterator it;
129     int num=0;
130     std::string chaine;
131     for (FEM_ELEMENT1 *eletmp=fem->get_premier_element1(it);eletmp!=NULL;eletmp=fem->get_suivant_element1(it))
132     {
133     if (num==0) chaine=info_element1(fem,eletmp,num,true);
134     else chaine=info_element1(fem,eletmp,num,false);
135     fprintf(in,"%s\n",chaine.c_str());
136     num++;
137     }
138     fclose(in);
139    
140     }
141    
142     std::string MG_TABLE::info_element1(FEM_MAILLAGE *fem, FEM_ELEMENT1* ele,int numno,bool avectitre)
143     {
144     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
145     std::string titre="Num;Id;";
146     char chaine[255];
147     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
148     std::string valeur=chaine;
149     LISTE_FEM_SOLUTION::iterator its;
150     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
151     {
152     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) continue;
153     int dim=sol->get_dim_solution();
154     int nb_champs=sol->get_nb_champ();
155     for (int j=0;j<nb_champs;j++)
156     {
157     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
158     int timestep=0;
159     bool avectimestep=false;
160     for (int k=0;k<nom.length();k++)
161     {
162     if (nom[k]==' ') nom[k]='_';
163     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
164     }
165     if (avectimestep)
166     {
167     char message[500];
168     sscanf(nom.c_str(),"%s %d",message,&timestep);
169     nom=message;
170     nom=nom+ "_" + sol->get_legende(j);
171     sprintf(message,"%d",timestep);
172     nom=nom+"_"+"T"+message;
173     }
174     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
175     {
176     if (avectitre) titre=titre+nom+";";
177     double val=sol->lire(numno,j);
178     sprintf(chaine,"%le;",val);
179     valeur=valeur+chaine;
180     }
181     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
182     {
183     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
184     double val1=sol->lire(numno,j,0);
185     double val2=sol->lire(numno,j,1);
186     double val3=sol->lire(numno,j,2);
187     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
188     valeur=valeur+chaine;
189     }
190     }
191     }
192    
193     if (avectitre)
194     return titre+"\n"+valeur;
195     return valeur;
196    
197    
198     }
199    
200    
201    
202    
203    
204     std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele)
205     {
206     LISTE_FEM_ELEMENT2::iterator it;
207     int num=0;
208     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
209     {
210     if (eletmp==ele) break;
211     num++;
212     }
213     return info_element2(fem,ele,num,true);
214    
215     }
216    
217     void MG_TABLE::info_element2(FEM_MAILLAGE *fem,char *nomfichier)
218     {
219     FILE* in=fopen(nomfichier,"wt");
220     LISTE_FEM_ELEMENT2::iterator it;
221     int num=0;
222     std::string chaine;
223     for (FEM_ELEMENT2 *eletmp=fem->get_premier_element2(it);eletmp!=NULL;eletmp=fem->get_suivant_element2(it))
224     {
225     if (num==0) chaine=info_element2(fem,eletmp,num,true);
226     else chaine=info_element2(fem,eletmp,num,false);
227     fprintf(in,"%s\n",chaine.c_str());
228     num++;
229     }
230     fclose(in);
231    
232     }
233    
234     std::string MG_TABLE::info_element2(FEM_MAILLAGE *fem, FEM_ELEMENT2* ele,int numno,bool avectitre)
235     {
236     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
237     std::string titre="Num;Id;";
238     char chaine[255];
239     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
240     std::string valeur=chaine;
241     LISTE_FEM_SOLUTION::iterator its;
242     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
243     {
244     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT2) continue;
245     int dim=sol->get_dim_solution();
246     int nb_champs=sol->get_nb_champ();
247     for (int j=0;j<nb_champs;j++)
248     {
249     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
250     int timestep=0;
251     bool avectimestep=false;
252     for (int k=0;k<nom.length();k++)
253     {
254     if (nom[k]==' ') nom[k]='_';
255     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
256     }
257     if (avectimestep)
258     {
259     char message[500];
260     sscanf(nom.c_str(),"%s %d",message,&timestep);
261     nom=message;
262     nom=nom+ "_" + sol->get_legende(j);
263     sprintf(message,"%d",timestep);
264     nom=nom+"_"+"T"+message;
265     }
266     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
267     {
268     if (avectitre) titre=titre+nom+";";
269     double val=sol->lire(numno,j);
270     sprintf(chaine,"%le;",val);
271     valeur=valeur+chaine;
272     }
273     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
274     {
275     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
276     double val1=sol->lire(numno,j,0);
277     double val2=sol->lire(numno,j,1);
278     double val3=sol->lire(numno,j,2);
279     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
280     valeur=valeur+chaine;
281     }
282     }
283     }
284    
285     if (avectitre)
286     return titre+"\n"+valeur;
287     return valeur;
288    
289    
290     }
291    
292    
293    
294    
295     std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele)
296     {
297     LISTE_FEM_ELEMENT3::iterator it;
298     int num=0;
299     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
300     {
301     if (eletmp==ele) break;
302     num++;
303     }
304     return info_element3(fem,ele,num,true);
305    
306     }
307    
308     void MG_TABLE::info_element3(FEM_MAILLAGE *fem,char *nomfichier)
309     {
310     FILE* in=fopen(nomfichier,"wt");
311     LISTE_FEM_ELEMENT3::iterator it;
312     int num=0;
313     std::string chaine;
314     for (FEM_ELEMENT3 *eletmp=fem->get_premier_element3(it);eletmp!=NULL;eletmp=fem->get_suivant_element3(it))
315     {
316     if (num==0) chaine=info_element3(fem,eletmp,num,true);
317     else chaine=info_element3(fem,eletmp,num,false);
318     fprintf(in,"%s\n",chaine.c_str());
319     num++;
320     }
321     fclose(in);
322    
323     }
324    
325     std::string MG_TABLE::info_element3(FEM_MAILLAGE *fem, FEM_ELEMENT3* ele,int numno,bool avectitre)
326     {
327     MG_GESTIONNAIRE *gest=fem->get_mg_maillage()->get_gestionnaire();
328     std::string titre="Num;Id;";
329     char chaine[255];
330     sprintf(chaine,"%d;%lu;",numno+1,ele->get_id());
331     std::string valeur=chaine;
332     LISTE_FEM_SOLUTION::iterator its;
333     for (FEM_SOLUTION* sol=gest->get_premier_fem_solution(its);sol!=NULL;sol=gest->get_suivant_fem_solution(its))
334     {
335     if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT3) continue;
336     int dim=sol->get_dim_solution();
337     int nb_champs=sol->get_nb_champ();
338     for (int j=0;j<nb_champs;j++)
339     {
340     string nom=sol->get_nom()+ "_" + sol->get_legende(j);
341     int timestep=0;
342     bool avectimestep=false;
343     for (int k=0;k<nom.length();k++)
344     {
345     if (nom[k]==' ') nom[k]='_';
346     if (nom[k]=='%') {nom[k]=' ';avectimestep=true;}
347     }
348     if (avectimestep)
349     {
350     char message[500];
351     sscanf(nom.c_str(),"%s %d",message,&timestep);
352     nom=message;
353     nom=nom+ "_" + sol->get_legende(j);
354     sprintf(message,"%d",timestep);
355     nom=nom+"_"+"T"+message;
356     }
357     if (dim==MAGIC::TYPE_SOLUTION::SCALAIRE)
358     {
359     if (avectitre) titre=titre+nom+";";
360     double val=sol->lire(numno,j);
361     sprintf(chaine,"%le;",val);
362     valeur=valeur+chaine;
363     }
364     if (dim==MAGIC::TYPE_SOLUTION::VECTEUR)
365     {
366     if (avectitre) titre=titre+nom+"_x;"+nom+"_y;"+nom+"_z;";
367     double val1=sol->lire(numno,j,0);
368     double val2=sol->lire(numno,j,1);
369     double val3=sol->lire(numno,j,2);
370     sprintf(chaine,"%le;%le;%le;",val1,val2,val3);
371     valeur=valeur+chaine;
372     }
373     }
374     }
375    
376     if (avectitre)
377     return titre+"\n"+valeur;
378     return valeur;
379    
380    
381     }