-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlecture.cpp
More file actions
114 lines (94 loc) · 2.58 KB
/
lecture.cpp
File metadata and controls
114 lines (94 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "fem.h"
#define DEBUG 0
void lecture(Fem &fem)
{
int NOD, ELEM, tags, reg, TYP;
double scale, value;
string trash, symb;
pair <string,int> p;
//string str = fem.pbname;
ifstream msh(fem.pbname); // ouverture du fichier probleme en lecture
if (msh.fail()){
cerr << "Impossible d'ouvrir le fichier " << fem.pbname << endl;
exit(1);}
getline(msh, trash); // entete 3 lignes
getline(msh, trash);
getline(msh, trash);
/*
fem.REG = REG;
*/
//msh >> trash >> scale; // lecture de l'echelle
//fem.scale = scale;
msh >> trash >> NOD; // lecture des noeuds
cout << boost::format("%5t nodes %50T. %d\n") % NOD;
fem.NOD = NOD;
fem.node.resize(NOD);
for (int i=0; i<NOD; i++){
double x,y,z;
msh >> trash >> x >> y >> z;
fem.node[i].x = x;
fem.node[i].y = y;
}
msh >> trash; // End Nodes
msh >> trash >> ELEM; // lecture des elements
cout << boost::format("%5t elements %50T. %d\n") % ELEM << endl;
for (;;){
msh >> symb;
if (symb == "$EndElements")
break;
msh >> TYP >> tags >> reg;
for (int i=1; i<tags; i++)
msh >> trash;
switch (TYP){
case 1:{
Seg seg;
seg.reg = reg;
msh >> seg.ind[0] >> seg.ind[1];
for (int i=0; i<2; i++)
seg.ind[i]--; // passage convention Matlab/msh a C++
fem.seg.push_back(seg);
break;
}
case 2:{
Tri tri;
tri.reg = reg;
msh >> tri.ind[0] >> tri.ind[1] >> tri.ind[2];
for (int i=0; i<3; i++)
tri.ind[i]--; // passage convention Matlab/msh a C++
fem.tri.push_back(tri);
break;
}
default:
getline(msh,trash);
}
}
fem.SEG = fem.seg.size();
fem.TRI = fem.tri.size();
msh >> trash >> scale; // lecture de l'echelle
fem.scale = scale;
for (int i=0; i<NOD; i++){
fem.node[i].x *= scale;
fem.node[i].y *= scale;
}
msh >> trash; // $Parameters
for (;;){ // lecture des parametres
msh >> symb;
if (symb=="$EndParameters" || symb=="$End")
break;
msh >> reg >> value;
cout << symb << '\t' << reg << '\t' << value << endl;
p = make_pair(symb,reg);
fem.param[p] = value;
}
msh >> trash; // $Dirichlet
for (;;){ // lecture des conditions
msh >> symb;
if (symb=="$EndDirichlet" || symb=="$End")
break;
msh >> reg >> value;
cout << symb << '\t' << reg << '\t' << value << endl;
p = make_pair(symb,reg);
fem.dir[p] = value;
}
msh.close();
}