From 5030e6f402bec49808d101c046b567e59ac6b42e Mon Sep 17 00:00:00 2001 From: chantrait <teddy.chantrait@cea.fr> Date: Thu, 3 Aug 2023 18:37:23 +0200 Subject: [PATCH] fix --- src/mesh/MeshBuilderBase.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/mesh/MeshBuilderBase.cpp b/src/mesh/MeshBuilderBase.cpp index 205feceab..973a6099a 100644 --- a/src/mesh/MeshBuilderBase.cpp +++ b/src/mesh/MeshBuilderBase.cpp @@ -188,7 +188,24 @@ MeshBuilderBase::_checkMesh() const } } - MeshDataManager::instance().getMeshData(mesh).Vj(); + const auto& Cjr = MeshDataManager::instance().getMeshData(mesh).Cjr(); + const auto& xr = mesh.xr(); + + for (CellId cell_id = 0; cell_id < mesh.numberOfCells(); ++cell_id) { + double cell_volume = 0; + auto cell_nodes = cell_to_node_matrix[cell_id]; + for (size_t i_node = 0; i_node < cell_nodes.size(); ++i_node) { + cell_volume += dot(Cjr(cell_id, i_node), xr[cell_nodes[i_node]]); + } + + if (cell_volume <= 0) { + std::ostringstream error_msg; + error_msg << "invalid mesh.\n\tThe following cell\n"; + error_msg << "\t - id=" << cell_id << " number=" << connectivity.cellNumber()[cell_id] << '\n'; + error_msg << "\thas non-positive volume: " << cell_volume / Dimension; + throw NormalError(error_msg.str()); + } + } } template void MeshBuilderBase::_checkMesh<1>() const; -- GitLab