ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/magic/lib/fichier/src/mg_table.cpp
Revision: 757
Committed: Fri Nov 6 13:42:55 2015 UTC (9 years, 6 months ago) by francois
File size: 18657 byte(s)
Log Message:
Possibilite de calculer les comtraintes et les deformations aux points de gauss
Tester en elasticite volumique

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