From bc9ddce4874d3a6ac60a944e7693dbbc2c981ec9 Mon Sep 17 00:00:00 2001 From: Tom Fischer <thomas.fischer@ufz.de> Date: Thu, 7 Nov 2024 16:07:23 +0100 Subject: [PATCH] [MeL/IO/XDMF] ParentDataType2String() returns additionaly number of nodes --- MeshLib/IO/XDMF/MeshPropertyDataType.cpp | 42 ++++++++++++------------ MeshLib/IO/XDMF/MeshPropertyDataType.h | 4 +-- MeshLib/IO/XDMF/transformData.cpp | 3 +- MeshLib/IO/XDMF/writeXdmf.cpp | 4 +-- 4 files changed, 26 insertions(+), 27 deletions(-) diff --git a/MeshLib/IO/XDMF/MeshPropertyDataType.cpp b/MeshLib/IO/XDMF/MeshPropertyDataType.cpp index 9b84fb06303..4b8e3fc7257 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 dc7899dafac..334019a6d05 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 1cff421eb70..ae90e9f0b38 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 788d4be89f8..70db150a464 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"); -- GitLab