From 6e648c2d0194537877ab7c8e0b49dd6423e796eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Thu, 30 Mar 2023 22:37:14 +0200 Subject: [PATCH] Store volume when detecting bad mesh --- src/mesh/CMakeLists.txt | 1 + src/mesh/MeshData.cpp | 25 +++++++++++++++++++++++++ src/mesh/MeshData.hpp | 14 +++----------- 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 src/mesh/MeshData.cpp diff --git a/src/mesh/CMakeLists.txt b/src/mesh/CMakeLists.txt index dd88e5fa8..39f312822 100644 --- a/src/mesh/CMakeLists.txt +++ b/src/mesh/CMakeLists.txt @@ -22,6 +22,7 @@ add_library( MedianDualMeshBuilder.cpp MeshBuilderBase.cpp MeshCellZone.cpp + MeshData.cpp MeshDataManager.cpp MeshEdgeBoundary.cpp MeshFaceBoundary.cpp diff --git a/src/mesh/MeshData.cpp b/src/mesh/MeshData.cpp new file mode 100644 index 000000000..2fdddb387 --- /dev/null +++ b/src/mesh/MeshData.cpp @@ -0,0 +1,25 @@ +#include <mesh/MeshData.hpp> + +#include <mesh/Connectivity.hpp> +#include <mesh/ItemValueVariant.hpp> +#include <mesh/Mesh.hpp> +#include <output/NamedItemValueVariant.hpp> +#include <output/VTKWriter.hpp> +#include <utils/Exceptions.hpp> + +template <size_t Dimension> +void +MeshData<Dimension>::_storeBadMesh() +{ + VTKWriter writer("bad_mesh"); + writer.writeOnMesh(std::make_shared<MeshType>(m_mesh.shared_connectivity(), m_mesh.xr()), + {std::make_shared<NamedItemValueVariant>(std::make_shared<ItemValueVariant>(m_Vj), "volume")}); + std::ostringstream error_msg; + error_msg << "mesh contains cells of non-positive volume (see " << rang::fgB::yellow << "bad_mesh.pvd" + << rang::fg::reset << " file)."; + throw NormalError(error_msg.str()); +} + +template void MeshData<1>::_storeBadMesh(); +template void MeshData<2>::_storeBadMesh(); +template void MeshData<3>::_storeBadMesh(); diff --git a/src/mesh/MeshData.hpp b/src/mesh/MeshData.hpp index a448862a0..78b9b81e6 100644 --- a/src/mesh/MeshData.hpp +++ b/src/mesh/MeshData.hpp @@ -5,14 +5,9 @@ #include <mesh/IMeshData.hpp> #include <mesh/ItemValue.hpp> #include <mesh/SubItemValuePerItem.hpp> -#include <utils/Exceptions.hpp> #include <utils/Messenger.hpp> #include <utils/PugsUtils.hpp> -#include <output/VTKWriter.hpp> - -#include <map> - template <size_t Dimension> class Connectivity; @@ -49,6 +44,8 @@ class MeshData : public IMeshData FaceValue<const double> m_ll; EdgeValue<const Rd> m_xe; + void _storeBadMesh(); + PUGS_INLINE void _computeNl() @@ -537,12 +534,7 @@ class MeshData : public IMeshData }(); if (not parallel::allReduceAnd(is_valid)) { - VTKWriter writer("bad_mesh"); - writer.writeMesh(m_mesh); - std::ostringstream error_msg; - error_msg << "mesh contains cells of non-positive volume (see " << rang::fgB::yellow << "bad_mesh.pvd" - << rang::fg::reset << " file)."; - throw NormalError(error_msg.str()); + this->_storeBadMesh(); } } -- GitLab