From aeec1b2f8d822fe6d04d47a6bc6051dc1ed1392e Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 3 May 2018 19:23:10 +0200 Subject: [PATCH] prepares reading of physical attributes in gmsh format 2.2 --- src/mesh/GmshReader.cpp | 117 ++++++++++++++++++++++------------------ src/mesh/GmshReader.hpp | 17 +++--- 2 files changed, 73 insertions(+), 61 deletions(-) diff --git a/src/mesh/GmshReader.cpp b/src/mesh/GmshReader.cpp index ee6d46fe7..25c1a4b7b 100644 --- a/src/mesh/GmshReader.cpp +++ b/src/mesh/GmshReader.cpp @@ -139,12 +139,14 @@ GmshReader::GmshReader(const std::string& filename) } // gmsh 2.2 format keywords - __keywordList["$MeshFormat"] = MESHFORMAT; - __keywordList["$EndMeshFormat"] = ENDMESHFORMAT; - __keywordList["$Nodes"] = NODES; - __keywordList["$EndNodes"] = ENDNODES; - __keywordList["$Elements"] = ELEMENTS; - __keywordList["$EndElements"] = ENDELEMENTS; + __keywordList["$MeshFormat"] = MESHFORMAT; + __keywordList["$EndMeshFormat"] = ENDMESHFORMAT; + __keywordList["$Nodes"] = NODES; + __keywordList["$EndNodes"] = ENDNODES; + __keywordList["$Elements"] = ELEMENTS; + __keywordList["$EndElements"] = ENDELEMENTS; + __keywordList["$PhysicalNames"] = PHYSICALNAMES; + __keywordList["$EndPhysicalNames"] = ENDPHYSICALNAMES; __numberOfPrimitiveNodes.resize(16); __numberOfPrimitiveNodes[ 0] = 2; // edge @@ -489,6 +491,14 @@ GmshReader::__readElements2_2() } } +void +GmshReader:: +__readPhysicalNames2_2() +{ + std::cerr << __FILE__ << ':' << __LINE__ << ": NIY\n"; + std::exit(0); +} + void GmshReader::__proceedData() { @@ -869,16 +879,11 @@ GmshReader::__nextKeyword() { GmshReader::Keyword kw; - std::cerr << "warning: " << rang::fg::red << __PRETTY_FUNCTION__ << rang::fg::reset << " keyword validity not checked!\n"; - int retval = 1; std::string aKeyword; m_fin >> aKeyword; - if (retval < 0) { + if (not m_fin) { kw.second = EndOfFile; return kw; - } else if (retval == 0) { - kw.second = Unknown; - return kw; } KeywordList::iterator i = __keywordList.find(aKeyword.c_str()); @@ -889,10 +894,10 @@ GmshReader::__nextKeyword() return kw; } - // throw ErrorHandler(__FILE__,__LINE__, - // "reading file '"+m_filename - // +"': unknown keyword '"+aKeyword+"'", - // ErrorHandler::normal); + throw ErrorHandler(__FILE__,__LINE__, + "reading file '"+m_filename + +"': unknown keyword '"+aKeyword+"'", + ErrorHandler::normal); kw.first = aKeyword; kw.second = Unknown; @@ -903,41 +908,51 @@ void GmshReader:: __readGmshFormat2_2() { std::cout << "- Reading Gmsh format 2.2\n"; - GmshReader::Keyword kw; - kw = this->__nextKeyword(); - if (kw.second != NODES) { - // throw ErrorHandler(__FILE__,__LINE__, - // "reading file '"+m_filename - // +"': expecting $Nodes, '"+kw.first+"' was found", - // ErrorHandler::normal); - } - - this->__readVertices(); - - kw = this->__nextKeyword(); - if (kw.second != ENDNODES) { - // throw ErrorHandler(__FILE__,__LINE__, - // "reading file '"+m_filename - // +"': expecting $EndNodes, '"+kw.first+"' was found", - // ErrorHandler::normal); - } - - // Getting elements list - kw = this->__nextKeyword(); - if (kw.second != ELEMENTS) { - // throw ErrorHandler(__FILE__,__LINE__, - // "reading file '"+m_filename - // +"': expecting $Elements, '"+kw.first+"' was found", - // ErrorHandler::normal); - } - - this->__readElements2_2(); + GmshReader::Keyword kw = std::make_pair("", Unknown); + while (kw.second != EndOfFile) { + kw = this->__nextKeyword(); + switch (kw.second) { + case NODES: { + this->__readVertices(); + if (this->__nextKeyword().second != ENDNODES) { + throw ErrorHandler(__FILE__,__LINE__, + "reading file '"+m_filename + +"': expecting $EndNodes, '"+kw.first+"' was found", + ErrorHandler::normal); + } + break; + } + case ELEMENTS: { + this->__readElements2_2(); + kw = this->__nextKeyword(); + if (kw.second != ENDELEMENTS) { + throw ErrorHandler(__FILE__,__LINE__, + "reading file '"+m_filename + +"': expecting $EndElements, '"+kw.first+"' was found", + ErrorHandler::normal); + } + break; + } + case PHYSICALNAMES: { + this->__readPhysicalNames2_2(); + if (this->__nextKeyword().second != ENDPHYSICALNAMES) { + throw ErrorHandler(__FILE__,__LINE__, + "reading file '"+m_filename + +"': expecting $EndNodes, '"+kw.first+"' was found", + ErrorHandler::normal); + } + break; + } - kw = this->__nextKeyword(); - if (kw.second != ENDELEMENTS) { - // throw ErrorHandler(__FILE__,__LINE__, - // "reading file '"+m_filename - // +"': expecting $EndElements, '"+kw.first+"' was found", - // ErrorHandler::normal); + case EndOfFile: { + break; + } + default: { + throw ErrorHandler(__FILE__,__LINE__, + "reading file '"+m_filename + +"': unexpected '"+kw.first+"'", + ErrorHandler::normal); + } + } } } diff --git a/src/mesh/GmshReader.hpp b/src/mesh/GmshReader.hpp index 5aec14118..5cb7e9e7b 100644 --- a/src/mesh/GmshReader.hpp +++ b/src/mesh/GmshReader.hpp @@ -126,6 +126,8 @@ private: ENDNODES, ELEMENTS, ENDELEMENTS, + PHYSICALNAMES, + ENDPHYSICALNAMES, Unknown, EndOfFile @@ -176,16 +178,11 @@ private: */ void __readElements2_2(); - // /** - // * Common interface for writing references - // * - // * @param references the set of computed references - // * @param objectName the type of refernces - // */ - // void __writeReferences(const std::set<size_t>& references, - // std::string objectName); - - + /** + * Reads physical names + * + */ + void __readPhysicalNames2_2(); Connectivity2D* m_connectivity; Mesh<Connectivity2D>* m_mesh; -- GitLab