diff --git a/MeshLib/IO/XDMF/MeshPropertyDataType.cpp b/MeshLib/IO/XDMF/MeshPropertyDataType.cpp index 9b84fb063036e3ca4f85f61c027be1acabeba3a1..4b8e3fc725792f9bad7e43f64c8c25fc3d816599 100644 --- a/MeshLib/IO/XDMF/MeshPropertyDataType.cpp +++ b/MeshLib/IO/XDMF/MeshPropertyDataType.cpp @@ -11,86 +11,86 @@ #include "MeshPropertyDataType.h" // See https://www.xdmf.org/index.php/XDMF_Model_and_Format#Topology (Arbitrary) -std::string ParentDataType2String(ParentDataType p) +std::pair<std::string, std::size_t> ParentDataType2String(ParentDataType p) { // not used in OGS ParentDataType::POLYGON, ParentDataType::POLYHEDRON, // ParentDataType::HEXAHEDRON_24 if (p == ParentDataType::MIXED) { - return "Mixed"; + return {"Mixed", 1}; } if (p == ParentDataType::POLYVERTEX) { - return "Polyvertex"; + return {"Polyvertex", 1}; } if (p == ParentDataType::POLYLINE) { - return "Polyline"; + return {"Polyline", 2}; } if (p == ParentDataType::TRIANGLE) { - return "Triangle"; + return {"Triangle", 3}; } if (p == ParentDataType::QUADRILATERAL) { - return "Quadrilateral"; + return {"Quadrilateral", 4}; } if (p == ParentDataType::TETRAHEDRON) { - return "Tetrahedron"; + return {"Tetrahedron", 4}; } if (p == ParentDataType::PYRAMID) { - return "Pyramid"; + return {"Pyramid", 5}; } if (p == ParentDataType::WEDGE) { - return "Wedge"; + return {"Wedge", 6}; } if (p == ParentDataType::HEXAHEDRON) { - return "Hexahedron"; + return {"Hexahedron", 8}; } if (p == ParentDataType::EDGE_3) { - return "Edge_3"; + return {"Edge_3", 3}; } if (p == ParentDataType::QUADRILATERAL_9) { - return "Quadrilateral_9"; + return {"Quadrilateral_9", 9}; } if (p == ParentDataType::TRIANGLE_6) { - return "Triangle_6"; + return {"Triangle_6", 6}; } if (p == ParentDataType::QUADRILATERAL_8) { - return "Quadrilateral_8"; + return {"Quadrilateral_8", 8}; } if (p == ParentDataType::TETRAHEDRON_10) { - return "Tetrahedron_10"; + return {"Tetrahedron_10", 10}; } if (p == ParentDataType::PYRAMID_13) { - return "Pyramid_13"; + return {"Pyramid_13", 13}; } if (p == ParentDataType::WEDGE_15) { - return "Wedge_15"; + return {"Wedge_15", 15}; } if (p == ParentDataType::WEDGE_18) { - return "Wedge_18"; + return {"Wedge_18", 18}; } if (p == ParentDataType::HEXAHEDRON_20) { - return "Hexahedron_20"; + return {"Hexahedron_20", 20}; } if (p == ParentDataType::HEXAHEDRON_27) { - return "Hexahedron_27"; + return {"Hexahedron_27", 27}; } - return "Mixed"; + return {"Mixed", 1}; } diff --git a/MeshLib/IO/XDMF/MeshPropertyDataType.h b/MeshLib/IO/XDMF/MeshPropertyDataType.h index dc7899dafacd591d0c5773735acd37e1268de304..334019a6d057cb6d0becf60f5dcebc0e3a12b6c2 100644 --- a/MeshLib/IO/XDMF/MeshPropertyDataType.h +++ b/MeshLib/IO/XDMF/MeshPropertyDataType.h @@ -38,7 +38,7 @@ enum class ParentDataType { MIXED = 0, POLYVERTEX = 1, - POLYLINE = 2, + POLYLINE = 2, // OGS polylines are supposed to contain exactly 2 nodes // POLYGON = 3, // not used in OGS TRIANGLE = 4, QUADRILATERAL = 5, @@ -60,4 +60,4 @@ enum class ParentDataType HEXAHEDRON_27 = 50 }; -std::string ParentDataType2String(ParentDataType p); +std::pair<std::string, std::size_t> ParentDataType2String(ParentDataType p); diff --git a/MeshLib/IO/XDMF/transformData.cpp b/MeshLib/IO/XDMF/transformData.cpp index 1cff421eb70e058bac7dd186ce91598f1c001cb6..ae90e9f0b389f7318a89ba5fe3cfe3cf277753f0 100644 --- a/MeshLib/IO/XDMF/transformData.cpp +++ b/MeshLib/IO/XDMF/transformData.cpp @@ -370,10 +370,9 @@ std::pair<std::vector<std::size_t>, ParentDataType> transformToXDMFTopology( else if (topology_type == ParentDataType::POLYLINE) { // '+ 1' for number of nodes of the cell - values.reserve(elements.size() * (elements[0]->getNumberOfNodes() + 1)); + values.reserve(elements.size() * elements[0]->getNumberOfNodes()); for (auto const& cell : elements) { - values.push_back(cell->getNumberOfNodes()); push_cellnode_ids_to_vector(cell); } } diff --git a/MeshLib/IO/XDMF/writeXdmf.cpp b/MeshLib/IO/XDMF/writeXdmf.cpp index 788d4be89f8037b5107e52a8e690bb44b194dbb0..70db150a464b06106f7050e36684e9482012736a 100644 --- a/MeshLib/IO/XDMF/writeXdmf.cpp +++ b/MeshLib/IO/XDMF/writeXdmf.cpp @@ -208,7 +208,7 @@ std::function<std::string(std::vector<double>)> write_xdmf( "NumberOfElements=\"{number_of_elements}\">{dataitem}" "\n\t</Topology>"), "topology_type"_a = - ParentDataType2String(*topology.parent_data_type), + ParentDataType2String(*topology.parent_data_type).first, "dataitem"_a = dataitem_transform(topology), "nodes_per_element"_a = nodes_per_element, "number_of_elements"_a = topology.size_partitioned_dim); @@ -246,7 +246,7 @@ std::function<std::string(std::vector<double>)> write_xdmf( "\n\t<Topology " "Type=\"{topology_type}\">{dataitem}\n\t</Topology>"), "topology_type"_a = - ParentDataType2String(*topology.parent_data_type), + ParentDataType2String(*topology.parent_data_type).first, "dataitem"_a = dataitem_transform(topology)); } OGS_FATAL("Could not transform unknown XDMF topology type");