From 1c2a2f11042a552d7b2b49c8f40a16b9f8b64388 Mon Sep 17 00:00:00 2001 From: Thomas Fischer <thomas.fischer@ufz.de> Date: Tue, 14 Mar 2017 11:26:29 +0100 Subject: [PATCH] [A/U/MP] Impl. writePropertyVectorBinary. --- .../PartitionMesh/NodeWiseMeshPartitioner.cpp | 59 ++++--------------- .../PartitionMesh/NodeWiseMeshPartitioner.h | 20 +++++++ 2 files changed, 33 insertions(+), 46 deletions(-) diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp index e41e0c7e791..b3535273ca4 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp +++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.cpp @@ -24,7 +24,6 @@ #include "BaseLib/Error.h" #include "MeshLib/IO/VtkIO/VtuInterface.h" -#include "MeshLib/IO/MPI_IO/PropertyVectorMetaData.h" #include "MeshLib/Elements/Element.h" @@ -338,8 +337,7 @@ NodeWiseMeshPartitioner::getNumberOfIntegerVariablesOfElements( void NodeWiseMeshPartitioner::writePropertiesBinary( const std::string& file_name_base) const { - auto const& properties(_partitioned_properties); - auto const& property_names(properties.getPropertyVectorNames()); + auto const& property_names(_partitioned_properties.getPropertyVectorNames()); if (property_names.empty()) return; const std::string fname_cfg = file_name_base + @@ -357,49 +355,18 @@ void NodeWiseMeshPartitioner::writePropertiesBinary( sizeof(number_of_properties)); for (auto const& name : property_names) { - MeshLib::IO::PropertyVectorMetaData pvmd; - pvmd.property_name = name; - { - if (properties.existsPropertyVector<double>(name)) - { - auto* pv = properties.getPropertyVector<double>(name); - MeshLib::IO::fillPropertyVectorMetaDataTypeInfo<double>(pvmd); - pvmd.number_of_components = pv->getNumberOfComponents(); - pvmd.number_of_tuples = pv->getNumberOfTuples(); - writePropertyVectorValuesBinary(out_val, *pv); - } - } - { - if (properties.existsPropertyVector<float>(name)) - { - auto* pv = properties.getPropertyVector<float>(name); - MeshLib::IO::fillPropertyVectorMetaDataTypeInfo<float>(pvmd); - pvmd.number_of_components = pv->getNumberOfComponents(); - pvmd.number_of_tuples = pv->getNumberOfTuples(); - writePropertyVectorValuesBinary(out_val, *pv); - } - } - { - if (properties.existsPropertyVector<int>(name)) - { - auto* pv = properties.getPropertyVector<int>(name); - MeshLib::IO::fillPropertyVectorMetaDataTypeInfo<int>(pvmd); - pvmd.number_of_components = pv->getNumberOfComponents(); - pvmd.number_of_tuples = pv->getNumberOfTuples(); - writePropertyVectorValuesBinary(out_val, *pv); - } - } - { - if (properties.existsPropertyVector<unsigned>(name)) - { - auto* pv = properties.getPropertyVector<unsigned>(name); - MeshLib::IO::fillPropertyVectorMetaDataTypeInfo<unsigned>(pvmd); - pvmd.number_of_components = pv->getNumberOfComponents(); - pvmd.number_of_tuples = pv->getNumberOfTuples(); - writePropertyVectorValuesBinary(out_val, *pv); - } - } - MeshLib::IO::writePropertyVectorMetaDataBinary(out, pvmd); + bool success = + writePropertyVectorBinary<double>(name, out_val, out) || + writePropertyVectorBinary<float>(name, out_val, out) || + writePropertyVectorBinary<int>(name, out_val, out) || + writePropertyVectorBinary<long>(name, out_val, out) || + writePropertyVectorBinary<unsigned>(name, out_val, out) || + writePropertyVectorBinary<unsigned long>(name, out_val, out) || + writePropertyVectorBinary<std::size_t>(name, out_val, out); + if (!success) + OGS_FATAL( + "writePropertiesBinary: Could not write PropertyVector '%s'.", + name.c_str()); } unsigned long offset = 0; for (const auto& partition : _partitions) diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h index 4d92d8be85e..190e1cdc1e5 100644 --- a/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h +++ b/Applications/Utils/ModelPreparation/PartitionMesh/NodeWiseMeshPartitioner.h @@ -22,6 +22,7 @@ #include "MeshLib/Mesh.h" #include "MeshLib/Node.h" +#include "MeshLib/IO/MPI_IO/PropertyVectorMetaData.h" namespace ApplicationUtils { @@ -210,6 +211,25 @@ private: number_of_components * number_of_tuples * sizeof(T)); } + template <typename T> + bool writePropertyVectorBinary(std::string const& name, + std::ostream& out_val, + std::ostream& out_meta) const + { + if (!_partitioned_properties.existsPropertyVector<T>(name)) + return false; + + MeshLib::IO::PropertyVectorMetaData pvmd; + pvmd.property_name = name; + auto* pv = _partitioned_properties.getPropertyVector<T>(name); + pvmd.fillPropertyVectorMetaDataTypeInfo<T>(); + pvmd.number_of_components = pv->getNumberOfComponents(); + pvmd.number_of_tuples = pv->getNumberOfTuples(); + writePropertyVectorValuesBinary(out_val, *pv); + MeshLib::IO::writePropertyVectorMetaDataBinary(out_meta, pvmd); + return true; + } + /*! \brief Write the configuration data of the partition data in binary files. -- GitLab