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