From 83e8cc0f2e88b51c5ba286661cb9d84a76a93517 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Wed, 15 Feb 2017 12:25:02 +0100 Subject: [PATCH] [A/U/MP] Impl. and use writePropertyVectorValuesBinary. --- .../PartitionMesh/NodeWiseMeshPartitioner.cpp | 17 +++++++++--- .../PartitionMesh/NodeWiseMeshPartitioner.h | 26 +++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp index e8e0602a1da..50f70284c1b 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp +++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp @@ -266,9 +266,15 @@ NodeWiseMeshPartitioner::getNumberOfIntegerVariablesOfElements( void NodeWiseMeshPartitioner::writePropertiesBinary( const std::string& file_name_base) const { - const std::string fname = file_name_base + "_partitioned_properties_cfg" - + std::to_string(_npartitions) + ".bin"; - std::ofstream out(fname.c_str(), std::ios::binary | std::ios::out); + const std::string fname_cfg = file_name_base + + "_partitioned_properties_cfg" + + std::to_string(_npartitions) + ".bin"; + std::ofstream out(fname_cfg.c_str(), std::ios::binary | std::ios::out); + + const std::string fname_val = file_name_base + + "_partitioned_properties_val" + + std::to_string(_npartitions) + ".bin"; + std::ofstream out_val(fname_val.c_str(), std::ios::binary | std::ios::out); auto const& properties(_mesh->getProperties()); auto const& property_names(properties.getPropertyVectorNames()); @@ -289,6 +295,7 @@ void NodeWiseMeshPartitioner::writePropertiesBinary( pvmd.data_type_size_in_bytes = sizeof(double); pvmd.number_of_components = pv->getNumberOfComponents(); pvmd.number_of_tuples = pv->getNumberOfTuples(); + writePropertyVectorValuesBinary(out_val, *pv); } } { @@ -300,6 +307,7 @@ void NodeWiseMeshPartitioner::writePropertiesBinary( pvmd.data_type_size_in_bytes = sizeof(float); pvmd.number_of_components = pv->getNumberOfComponents(); pvmd.number_of_tuples = pv->getNumberOfTuples(); + writePropertyVectorValuesBinary(out_val, *pv); } } { @@ -311,6 +319,7 @@ void NodeWiseMeshPartitioner::writePropertiesBinary( pvmd.data_type_size_in_bytes = sizeof(int); pvmd.number_of_components = pv->getNumberOfComponents(); pvmd.number_of_tuples = pv->getNumberOfTuples(); + writePropertyVectorValuesBinary(out_val, *pv); } } { @@ -322,6 +331,7 @@ void NodeWiseMeshPartitioner::writePropertiesBinary( pvmd.data_type_size_in_bytes = sizeof(unsigned); pvmd.number_of_components = pv->getNumberOfComponents(); pvmd.number_of_tuples = pv->getNumberOfTuples(); + writePropertyVectorValuesBinary(out_val, *pv); } } MeshLib::IO::writePropertyVectorMetaDataBinary(out, pvmd); @@ -333,6 +343,7 @@ void NodeWiseMeshPartitioner::writePropertiesBinary( MeshLib::IO::writePropertyVectorPartitionMetaData(out, pvpmd); } out.close(); + out_val.close(); } void NodeWiseMeshPartitioner::readPropertiesConfigDataBinary( diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h index f3d139cc53a..66fbb920623 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h +++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h @@ -130,6 +130,32 @@ private: void writePropertiesBinary(std::string const& file_name_base) const; + template <typename T> + void writePropertyVectorValuesBinary( + std::ostream& os, MeshLib::PropertyVector<T> const& pv) const + { + std::size_t number_of_components(pv.getNumberOfComponents()); + std::size_t number_of_tuples(pv.getNumberOfTuples()); + std::vector<T> property_vector_buffer; + property_vector_buffer.resize(number_of_tuples * number_of_components); + std::size_t cnt(0); + for (std::size_t part_id = 0; part_id < _partitions.size(); part_id++) + { + for (std::size_t i = 0; i < pv.getNumberOfTuples(); ++i) + { + if (_nodes_partition_ids[i] == part_id) + { + for (std::size_t c(0); c < number_of_components; ++c) + property_vector_buffer[cnt * number_of_components + c] = + pv.getComponent(i, c); + cnt++; + } + } + } + os.write(reinterpret_cast<char*>(property_vector_buffer.data()), + number_of_components * number_of_tuples * sizeof(T)); + } + void readPropertiesConfigDataBinary( std::string const& file_name_base) const; -- GitLab