8#ifndef model_GmshReader_cpp_
9#define model_GmshReader_cpp_
28 std::map<int,std::string> GmshReader::getElementTypes()
30 std::map<int,std::string>
temp;
31 temp.emplace(1,
"2-node line");
32 temp.emplace(2,
"3-node triangle");
33 temp.emplace(3,
"4-node quadrangle");
34 temp.emplace(4,
"4-node tetrahedron");
35 temp.emplace(5,
"8-node hexahedron");
36 temp.emplace(6,
"6-node prism");
37 temp.emplace(7,
"5-node pyramid");
38 temp.emplace(8,
"3-node second-order line");
39 temp.emplace(9,
"6-node second-order triangle");
40 temp.emplace(10,
"9-node second-order quadrangle");
41 temp.emplace(11,
"10-node tetrahedron");
42 temp.emplace(12,
"27-node second order hexahedron");
43 temp.emplace(13,
"18-node second order prism");
44 temp.emplace(14,
"14-node second order pyramid");
45 temp.emplace(15,
"1-node point");
50 int GmshReader::numberOfNodes(
const int& type)
101 std::cout<<
"Element type="<<
type<<std::endl;
102 assert(0 &&
"FINISH HERE");
113 read(meshFileName,Eigen::Matrix<double,3,3>::Identity(),Eigen::Matrix<double,3,1>::Zero());
116 GmshReader::GmshReader(
const std::string& meshFileName,
const Eigen::Matrix<double,3,3>&
A,
const Eigen::Matrix<double,3,1>& x0) :
119 read(meshFileName,
A,x0);
160 while (std::getline(meshFile, line))
163 if(line==
"$PhysicalNames")
165 std::getline(meshFile, line);
169 std::getline(meshFile, line);
178 Eigen::Vector3d nodePos;
180 std::getline(meshFile, line);
184 std::getline(meshFile, line);
185 std::stringstream
ss(line);
190 const bool success=
nodes().emplace(nodeID,
A*(nodePos-x0)).second;
193 std::cout<<
"Could not insert node "<<nodeID<<
" "<<nodePos.transpose()<<
". Exiting."<<std::endl;
199 if(line==
"$Elements")
202 std::getline(meshFile, line);
209 std::getline(meshFile, line);
210 std::stringstream
ss(line);
215 for(
int n=0;n<tags;++n)
217 element.
tags.push_back(0);
220 for(
int n=0;n<numberOfNodes(element.
type);++n)
229 std::cout<<
"Could not insert element "<<element.
ID<<
". Exiting."<<std::endl;
241 void GmshReader::read(
const std::string& meshFileName,
const Eigen::Matrix<double,3,3>&
A,
const Eigen::Matrix<double,3,1>& x0)
246 std::ifstream meshFile(meshFileName);
248 if(meshFile.is_open())
250 const auto t0= std::chrono::system_clock::now();
253 while (std::getline(meshFile, line))
256 if(line==
"$MeshFormat")
263 std::cout<<
"Unsupported format. Only format=0 (ASCII) is supported. "<<std::endl;
273 std::cout<<
"Unsupported msh version"<<std::endl;
280 std::cout<<
"version="<<
version<<std::endl;
281 std::cout<<
"format="<<
format<<std::endl;
282 std::cout<<
"size="<<
size<<std::endl;
284 std::cout<<
"number of Nodes="<<
numberNodes<<std::endl;
288 std::cout<<
" "<<pair.second<<
" of type "<<pair.first<<
": "<<
elementTypes.at(pair.first)<<std::endl;
293 std::cout<<
"File "<<meshFileName<<
" cannot be opened. Exiting."<<std::endl;
const std::map< size_t, Eigen::Vector3d > & nodes() const
std::map< int, GmshPhysicalName > & physicalNames()
const std::map< size_t, GmshElement > & elements() const
GmshReader(const std::string &meshFileName)
void readVersion2(std::ifstream &meshFile, const Eigen::Matrix< double, 3, 3 > &A, const Eigen::Matrix< double, 3, 1 > &x0)
const std::map< int, std::string > elementTypes
void read(const std::string &meshFileName, const Eigen::Matrix< double, 3, 3 > &A, const Eigen::Matrix< double, 3, 1 > &x0)
std::map< int, size_t > numberElementsByType
function infiniteDisplacement syms Ax Ay Az Bx By Bz qx qy qz u L x y z real A
size_t InstanceCount< Derived >::count
static std::string magentaColor
static std::string greenBoldColor
static std::string defaultColor
std::vector< size_t > nodeIDs
enum insertvertexresult success