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, 7 months ago) by francois
File size: 19556 byte(s)
Log Message:
adapatation du parametrage du separateur decimal au cas de mg_table

File Contents

# Content
1 //---------------------------------------------------------------------------
2
3 #include "gestionversion.h"
4 #include "mg_table.h"
5 #include "mg_gestionnaire.h"
6 #include "ot_parametres.h"
7
8
9
10
11 MG_TABLE::MG_TABLE()
12 {
13 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 }
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 void MG_TABLE::info_noeud(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
42 {
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 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 else chaine=info_noeud(fem,notmp,numno,false);
53 fprintf(in,"%s\n",chaine.c_str());
54 numno++;
55 first=false;
56 }
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 for (int i=0;i<valeur.length();i++)
112 if (valeur[i]=='.') valeur[i]=separateur;
113 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 void MG_TABLE::info_element1(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
137 {
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 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 else chaine=info_element1(fem,eletmp,num,false);
148 fprintf(in,"%s\n",chaine.c_str());
149 num++;
150 first=false;
151 }
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 if (sol->get_entite_solution()!=MAGIC::ENTITE_SOLUTION::ENTITE_ELEMENT1) continue;
167 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 for (int i=0;i<valeur.length();i++)
207 if (valeur[i]=='.') valeur[i]=separateur;
208 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 void MG_TABLE::info_element2(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
233 {
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 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 else chaine=info_element2(fem,eletmp,num,false);
244 fprintf(in,"%s\n",chaine.c_str());
245 num++;
246 first=false;
247 }
248 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 for (int i=0;i<valeur.length();i++)
303 if (valeur[i]=='.') valeur[i]=separateur;
304 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 void MG_TABLE::info_element3(FEM_MAILLAGE *fem,char *nomfichier,MG_ELEMENT_TOPOLOGIQUE *topo)
328 {
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 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 else chaine=info_element3(fem,eletmp,num,false);
339 fprintf(in,"%s\n",chaine.c_str());
340 num++;
341 first=false;
342 }
343 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 for (int i=0;i<valeur.length();i++)
398 if (valeur[i]=='.') valeur[i]=separateur;
399 if (avectitre)
400 return titre+"\n"+valeur;
401 return valeur;
402
403
404 }
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 for (int i=0;i<valeur.length();i++)
492 if (valeur[i]=='.') valeur[i]=separateur;
493 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 for (int i=0;i<valeur.length();i++)
586 if (valeur[i]=='.') valeur[i]=separateur;
587 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 for (int i=0;i<valeur.length();i++)
678 if (valeur[i]=='.') valeur[i]=separateur;
679 if (avectitre)
680 return titre+"\n"+valeur;
681 return valeur;
682
683
684 }