diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp index 679b52e8b43a8f042863aeca04ba82ab0930b5a0..61fe528ddc2d74a85e7a465ad5603ff8747722ba 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp +++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp @@ -26,7 +26,6 @@ #include "MeshLib/IO/VtkIO/VtuInterface.h" #include "MeshLib/IO/MPI_IO/PropertyVectorMetaData.h" -#include "MeshLib/Node.h" #include "MeshLib/Elements/Element.h" namespace ApplicationUtils @@ -212,7 +211,7 @@ void NodeWiseMeshPartitioner::processProperties() return sum + p.nodes.size(); }); - INFO("*** total number of tuples after partitioning: %d ***", + INFO("total number of tuples after partitioning: %d ", total_number_of_tuples); // 1 create new PV // 2 resize the PV with total_number_of_tuples @@ -223,42 +222,23 @@ void NodeWiseMeshPartitioner::processProperties() { if (original_properties.existsPropertyVector<double>(name)) { - auto const& pv(original_properties.getPropertyVector<double>(name)); - auto partitioned_pv = - _partitioned_properties.createNewPropertyVector<double>( - name, pv->getMeshItemType(), pv->getNumberOfComponents()); - partitioned_pv->resize(total_number_of_tuples * - pv->getNumberOfComponents()); - std::size_t cnt(0); - for (auto p : _partitions) - { - for (std::size_t i = 0; i < p.nodes.size(); ++i) - { - const auto global_id = p.nodes[i]->getID(); - (*partitioned_pv)[cnt+i] = (*pv)[global_id]; - } - cnt += p.nodes.size(); - } + copyPropertyVector<double>(name, total_number_of_tuples); } - if (original_properties.existsPropertyVector<int>(name)) + else if (original_properties.existsPropertyVector<float>(name)) { - auto const& pv(original_properties.getPropertyVector<int>(name)); - auto partitioned_pv = - _partitioned_properties.createNewPropertyVector<int>( - name, pv->getMeshItemType(), pv->getNumberOfComponents()); - partitioned_pv->resize(total_number_of_tuples * - pv->getNumberOfComponents()); - std::size_t cnt(0); - for (auto p : _partitions) - { - for (std::size_t i = 0; i < p.nodes.size(); ++i) - { - const auto global_id = p.nodes[i]->getID(); - (*partitioned_pv)[cnt+i] = (*pv)[global_id]; - } - cnt += p.nodes.size(); - } - + copyPropertyVector<float>(name, total_number_of_tuples); + } + else if (original_properties.existsPropertyVector<int>(name)) + { + copyPropertyVector<int>(name, total_number_of_tuples); + } + else if (original_properties.existsPropertyVector<long>(name)) + { + copyPropertyVector<long>(name, total_number_of_tuples); + } + else if (original_properties.existsPropertyVector<std::size_t>(name)) + { + copyPropertyVector<std::size_t>(name, total_number_of_tuples); } } } diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h index 5edd6c745e95266bb7df55dafcd0b403379a99c0..25e44f0d8afbf3830c36a3652b081ff06a22a98f 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h +++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h @@ -21,6 +21,7 @@ #include <fstream> #include "MeshLib/Mesh.h" +#include "MeshLib/Node.h" namespace ApplicationUtils { @@ -162,6 +163,29 @@ private: void processProperties(); + template <typename T> + void copyPropertyVector(std::string const& name, + std::size_t const total_number_of_tuples) + { + auto const& original_properties(_mesh->getProperties()); + auto const& pv(original_properties.getPropertyVector<T>(name)); + auto partitioned_pv = + _partitioned_properties.createNewPropertyVector<T>( + name, pv->getMeshItemType(), pv->getNumberOfComponents()); + partitioned_pv->resize(total_number_of_tuples * + pv->getNumberOfComponents()); + std::size_t position_offset(0); + for (auto p : _partitions) + { + for (std::size_t i = 0; i < p.nodes.size(); ++i) + { + const auto global_id = p.nodes[i]->getID(); + (*partitioned_pv)[position_offset + i] = (*pv)[global_id]; + } + position_offset += p.nodes.size(); + } + } + template <typename T> void writePropertyVectorValuesBinary( std::ostream& os, MeshLib::PropertyVector<T> const& pv) const