16 # include "mesh_data.h"
28 MeshData::MeshData(
const MeshData &m) : mesh_file_(m.mesh_file_), n_vert(m.n_vert), n_el(m.n_el), n_bdy(m.n_bdy), n_curv(m.n_curv), n_ref(m.n_ref)
55 mesh_file_ = m.mesh_file_;
90 if(str.find(
'#') != str.npos)
91 str.erase(str.find(
'#'));
94 for (
size_t i = 0; i < str.length(); i++)
97 if(str[i] !=
'\t' && str[i] !=
'[' && str[i] !=
']' && str[i] !=
'{' && str[i] !=
'}')
99 if(str[i] ==
',' || str[i] ==
';')
101 else if(str[i] ==
'=')
104 temp.append(1,str[i]);
112 str.erase(0,str.find_first_not_of(
"\t "));
115 if(str.find_last_of(
"\t ") == (str.size() - 1))
116 str.erase(str.find_last_not_of(
"\t ") + 1);
119 for (
size_t i = 0; i < str.length(); i++)
123 if(str[i + 1] !=
' ' && str[i + 1] !=
'\t' && str[i + 1] !=
'=' && str[i - 1] !=
' ' && str[i - 1] !=
'\t')
127 temp.append(1,str[i]);
137 for (
size_t i = 0; i < str.length(); i++)
144 temp.append(1,str[i]);
154 std::vector<std::string> varlist;
159 std::ifstream inFile(mesh_file_.c_str());
163 bool isVert(
false), isElt(
false), isBdy(
false), isCurv(
false), isRef(
false), isVar(
false);
165 while (std::getline(inFile,line))
170 if(line.find_first_not_of(
"\t ") != line.npos)
172 std::istringstream stream(line);
175 if(*word.rbegin() ==
'=')
177 word.erase(word.size() - 1);
179 if(word ==
"vertices")
182 isElt =
false; isBdy =
false; isCurv =
false; isRef =
false; isVar =
false;
185 else if(word ==
"elements")
188 isVert =
false; isBdy =
false; isCurv =
false; isRef =
false; isVar =
false;
191 else if(word ==
"boundaries")
194 isVert =
false; isElt =
false; isCurv =
false; isRef =
false; isVar =
false;
197 else if(word ==
"curves")
200 isVert =
false; isElt =
false; isBdy =
false; isRef =
false; isVar =
false;
203 else if(word ==
"refinements")
206 isVert =
false; isElt =
false; isBdy =
false; isCurv =
false; isVar =
false;
212 isVert =
false; isElt =
false; isBdy =
false; isCurv =
false; isRef =
false;
215 temp_word = restore(word);
225 std::istringstream istr(word);
227 if(!(istr >> dummy_dbl))
230 x_vertex.push_back(atof(word.c_str()));
236 std::istringstream istr(word);
238 if(!(istr >> dummy_int))
239 en1.push_back(atoi(
vars_[restore(word)][0].c_str()));
241 en1.push_back(atoi(word.c_str()));
247 std::istringstream istr(word);
249 if(!(istr >> dummy_dbl))
258 std::istringstream istr(word);
260 if(!(istr >> dummy_int))
269 std::istringstream istr(word);
271 if(!(istr >> dummy_int))
272 ref_elt.push_back(atoi(
vars_[restore(word)][0].c_str()));
274 ref_elt.push_back(atoi(word.c_str()));
280 vars_[temp_word].push_back(restore(word));
287 while (stream >> word)
289 std::istringstream istr(word);
293 if(!(istr >> dummy_dbl))
296 x_vertex.push_back(atof(word.c_str()));
300 if(!(istr >> dummy_dbl))
303 y_vertex.push_back(atof(word.c_str()));
311 while (stream >> word)
313 std::istringstream istr(word);
317 if(!(istr >> dummy_int))
318 en1.push_back(atoi(
vars_[restore(word)][0].c_str()));
320 en1.push_back(atoi(word.c_str()));
322 else if(counter%5 == 1)
324 if(!(istr >> dummy_int))
325 en2.push_back(atoi(
vars_[restore(word)][0].c_str()));
327 en2.push_back(atoi(word.c_str()));
329 else if(counter%5 == 2)
331 if(!(istr >> dummy_int))
332 en3.push_back(atoi(
vars_[restore(word)][0].c_str()));
334 en3.push_back(atoi(word.c_str()));
336 else if(counter%5 == 3)
338 if(!(istr >> dummy_int))
341 e_mtl.push_back(restore(word));
346 en4.push_back(atoi(word.c_str()));
349 e_mtl.push_back(restore(word));
356 while (stream >> word)
358 std::istringstream istr(word);
362 if(!(istr >> dummy_int))
367 else if(counter%3 == 1)
369 if(!(istr >> dummy_int))
382 while (stream >> word)
384 std::istringstream istr(word);
388 if(!(istr >> dummy_int))
393 else if(counter%5 == 1)
395 if(!(istr >> dummy_int))
400 else if(counter%5 == 2)
402 if(istr >> dummy_dbl)
427 else if(counter%5 == 3)
439 while (stream >> word)
441 std::istringstream istr(word);
445 if(!(istr >> dummy_int))
446 ref_elt.push_back(atoi(
vars_[restore(word)][0].c_str()));
448 ref_elt.push_back(atoi(word.c_str()));
452 if(!(istr >> dummy_int))
455 ref_type.push_back(atoi(word.c_str()));
463 while (stream >> word)
465 vars_[temp_word].push_back(restore(word));
475 assert(
en1.size() ==
en2.size());
476 assert(
en2.size() ==
en3.size());
477 assert(
en3.size() ==
en4.size());