diff --git a/MeshLib/IO/XDMF/transformData.cpp b/MeshLib/IO/XDMF/transformData.cpp index 35b63fbaf8b14ba0ec4e6123ffe2f2fc38794af5..43415a1cca6ceba8f7f5e4b1f0d9b4f09f041cff 100644 --- a/MeshLib/IO/XDMF/transformData.cpp +++ b/MeshLib/IO/XDMF/transformData.cpp @@ -321,7 +321,6 @@ std::pair<std::vector<int>, ParentDataType> transformToXDMFTopology( { std::vector<MeshLib::Element*> const& elements = mesh.getElements(); std::vector<int> values; - values.reserve(elements.size()); auto const push_cellnode_ids_to_vector = [&values, &offset](auto const& cell) @@ -335,6 +334,8 @@ std::pair<std::vector<int>, ParentDataType> transformToXDMFTopology( auto const topology_type = getTopologyType(mesh); if (topology_type == ParentDataType::MIXED) { + values.reserve(elements.size() * 2); // each cell has at least two + // numbers for (auto const& cell : elements) { auto const ogs_cell_type = cell->getCellType(); @@ -346,6 +347,8 @@ std::pair<std::vector<int>, ParentDataType> transformToXDMFTopology( else if (topology_type == ParentDataType::POLYVERTEX || topology_type == ParentDataType::POLYLINE) { + // '+ 1' for number of nodes of the cell + values.reserve(elements.size() * (elements[0]->getNumberOfNodes() + 1)); for (auto const& cell : elements) { values.push_back(cell->getNumberOfNodes()); @@ -354,6 +357,7 @@ std::pair<std::vector<int>, ParentDataType> transformToXDMFTopology( } else { + values.reserve(elements.size() * elements[0]->getNumberOfNodes()); for (auto const& cell : elements) { push_cellnode_ids_to_vector(cell);