From 6334aebcb2622a173ceb4e725d2ec33aee15fbc1 Mon Sep 17 00:00:00 2001 From: "Praetorius, Simon" <simon.praetorius@tu-dresden.de> Date: Wed, 29 Apr 2020 10:04:08 +0200 Subject: [PATCH] read cell offset and connectivity with flexible index type --- dune/vtk/vtkreader.impl.hh | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/dune/vtk/vtkreader.impl.hh b/dune/vtk/vtkreader.impl.hh index 7acc338..604dd0c 100644 --- a/dune/vtk/vtkreader.impl.hh +++ b/dune/vtk/vtkreader.impl.hh @@ -418,19 +418,33 @@ void VtkReader<Grid,Creator>::readCellsAppended (std::ifstream& input) { assert(numberOfCells_ > 0); auto types_data = dataArray_["types"]; - auto dataArray_data = dataArray_["offsets"]; + auto offsets_data = dataArray_["offsets"]; auto connectivity_data = dataArray_["connectivity"]; assert(types_data.type == Vtk::UINT8); readAppended(input, vec_types, types_data.offset); assert(vec_types.size() == numberOfCells_); - assert(dataArray_data.type == Vtk::INT64); - readAppended(input, vec_offsets, dataArray_data.offset); + if (offsets_data.type == Vtk::INT64) + readAppended(input, vec_offsets, offsets_data.offset); + else if (offsets_data.type == Vtk::INT32) { + std::vector<std::int32_t> offsets; + readAppended(input, offsets, offsets_data.offset); + vec_offsets.resize(offsets.size()); + std::copy(offsets.begin(), offsets.end(), vec_offsets.begin()); + } + else { DUNE_THROW(Dune::NotImplemented, "Unsupported DataType in Cell offsets."); } assert(vec_offsets.size() == numberOfCells_); - assert(connectivity_data.type == Vtk::INT64); - readAppended(input, vec_connectivity, connectivity_data.offset); + if (connectivity_data.type == Vtk::INT64) + readAppended(input, vec_connectivity, connectivity_data.offset); + else if (connectivity_data.type == Vtk::INT32) { + std::vector<std::int32_t> connectivity; + readAppended(input, connectivity, connectivity_data.offset); + vec_connectivity.resize(connectivity.size()); + std::copy(connectivity.begin(), connectivity.end(), vec_connectivity.begin()); + } + else { DUNE_THROW(Dune::NotImplemented, "Unsupported DataType in Cell connectivity."); } assert(vec_connectivity.size() == std::size_t(vec_offsets.back())); if (dataArray_.count("global_point_ids") > 0) { -- GitLab