diff --git a/Applications/Python/ogs.mesh/OGSMesh.cpp b/Applications/Python/ogs.mesh/OGSMesh.cpp index f9e0cb4afd6160b4536982f1a8f35bd81b8c44e3..d039fd9acedc11da076cf9c879600e00ea701e5e 100644 --- a/Applications/Python/ogs.mesh/OGSMesh.cpp +++ b/Applications/Python/ogs.mesh/OGSMesh.cpp @@ -18,12 +18,15 @@ #include <spdlog/spdlog.h> #include <numeric> +#include <range/v3/algorithm/copy.hpp> #include <range/v3/numeric.hpp> #include <range/v3/range/conversion.hpp> #include <range/v3/view/enumerate.hpp> #include <range/v3/view/indirect.hpp> +#include <range/v3/view/join.hpp> #include <range/v3/view/map.hpp> #include <range/v3/view/transform.hpp> +#include <span> #include <vector> #include "BaseLib/ExportSymbol.h" @@ -39,14 +42,8 @@ OGSMesh::OGSMesh(MeshLib::Mesh& mesh) : _mesh(mesh) {} std::vector<double> OGSMesh::getPointCoordinates() const { - auto const& nodes = _mesh.getNodes(); - std::vector<double> coordinates; - for (auto const& coords : nodes | MeshLib::views::coords) - { - std::copy(coords.begin(), coords.end(), - std::back_inserter(coordinates)); - } - return coordinates; + return ranges::to<std::vector>(_mesh.getNodes() | MeshLib::views::coords | + ranges::views::join); } std::pair<std::vector<int>, std::vector<int>> OGSMesh::getCells() const @@ -56,13 +53,9 @@ std::pair<std::vector<int>, std::vector<int>> OGSMesh::getCells() const std::vector<int> cell_types; for (auto const* element : elements) { - auto const number_of_nodes = - static_cast<int>(element->getNumberOfNodes()); - cells.push_back(number_of_nodes); - for (int i = 0; i < number_of_nodes; ++i) - { - cells.push_back(element->getNode(i)->getID()); - } + cells.push_back(static_cast<int>(element->getNumberOfNodes())); + ranges::copy(element->nodes() | MeshLib::views::ids, + std::back_inserter(cells)); cell_types.push_back(OGSToVtkCellType(element->getCellType())); } return {cells, cell_types}; @@ -97,11 +90,7 @@ std::vector<double> OGSMesh::getPointDataArray( { OGS_FATAL("Couldn't access point/node property '{}'.", name); } - std::vector<double> data_array; - data_array.reserve(pv->getNumberOfTuples() * number_of_components); - std::copy(pv->begin(), pv->end(), std::back_inserter(data_array)); - - return data_array; + return ranges::to<std::vector>(std::span(pv->data(), pv->size())); } void OGSMesh::setCellDataArray(std::string const& name, @@ -133,9 +122,5 @@ std::vector<double> OGSMesh::getCellDataArray( { OGS_FATAL("Couldn't access cell/element property '{}'.", name); } - std::vector<double> data_array; - data_array.reserve(pv->getNumberOfTuples() * number_of_components); - std::copy(pv->begin(), pv->end(), std::back_inserter(data_array)); - - return data_array; + return ranges::to<std::vector>(std::span(pv->data(), pv->size())); }