From 45604b3874197b6de74c9bed3b1075e5d5f15ce9 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 9 May 2015 12:02:25 +0200 Subject: [PATCH] + use list of pairs instead of map for getVolumesByFace --- src/Mod/Fem/App/FemMesh.cpp | 9 +++++---- src/Mod/Fem/App/FemMesh.h | 2 +- src/Mod/Fem/App/FemMeshPyImp.cpp | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/Mod/Fem/App/FemMesh.cpp b/src/Mod/Fem/App/FemMesh.cpp index 680614d04..91701e188 100755 --- a/src/Mod/Fem/App/FemMesh.cpp +++ b/src/Mod/Fem/App/FemMesh.cpp @@ -406,9 +406,9 @@ std::set FemMesh::getSurfaceNodes(long ElemId, short FaceId, float Angle) /*! That function returns map containing volume ID and face ID. */ -std::map FemMesh::getVolumesByFace(const TopoDS_Face &face) const +std::list > FemMesh::getVolumesByFace(const TopoDS_Face &face) const { - std::map result; + std::list > result; std::set nodes_on_face = getNodesByFace(face); SMDS_VolumeIteratorPtr vol_iter = myMesh->GetMeshDS()->volumesIterator(); @@ -430,13 +430,14 @@ std::map FemMesh::getVolumesByFace(const TopoDS_Face &face) const std::set_intersection(nodes_on_face.begin(), nodes_on_face.end(), face_nodes.begin(), face_nodes.end(), std::back_insert_iterator >(element_face_nodes)); + // For curved faces it is possible that a volume contributes more than one face if (element_face_nodes.size() == numNodes) { - result[vol->GetID()] = face->GetID(); - break; + result.push_back(std::make_pair(vol->GetID(), face->GetID())); } } } + result.sort(); return result; } diff --git a/src/Mod/Fem/App/FemMesh.h b/src/Mod/Fem/App/FemMesh.h index ab87354b0..2ca263086 100755 --- a/src/Mod/Fem/App/FemMesh.h +++ b/src/Mod/Fem/App/FemMesh.h @@ -96,7 +96,7 @@ public: /// retrieving node IDs by element ID std::set getElementNodes(int id) const; /// retrieving volume IDs and face IDs number by face - std::map getVolumesByFace(const TopoDS_Face &face) const; + std::list > getVolumesByFace(const TopoDS_Face &face) const; /// retrieving volume IDs and CalculiX face number by face std::map getccxVolumesByFace(const TopoDS_Face &face) const; //@} diff --git a/src/Mod/Fem/App/FemMeshPyImp.cpp b/src/Mod/Fem/App/FemMeshPyImp.cpp index 732e86715..703ff53e9 100755 --- a/src/Mod/Fem/App/FemMeshPyImp.cpp +++ b/src/Mod/Fem/App/FemMeshPyImp.cpp @@ -530,8 +530,8 @@ PyObject* FemMeshPy::getVolumesByFace(PyObject *args) const TopoDS_Face& fc = TopoDS::Face(sh); Py::List ret; - std::map resultSet = getFemMeshPtr()->getVolumesByFace(fc); - for (std::map::const_iterator it = resultSet.begin();it!=resultSet.end();++it) { + std::list > resultSet = getFemMeshPtr()->getVolumesByFace(fc); + for (std::list >::const_iterator it = resultSet.begin();it!=resultSet.end();++it) { Py::Tuple vol_face(2); vol_face.setItem(0, Py::Int(it->first)); vol_face.setItem(1, Py::Int(it->second));