diff --git a/src/mesh/MeshEdgeBoundary.cpp b/src/mesh/MeshEdgeBoundary.cpp index 2542b0a3d6eaa1d47927e6c83147b4d06888cf06..00ece5864c622b9e62d50afba09380d6022dfaef 100644 --- a/src/mesh/MeshEdgeBoundary.cpp +++ b/src/mesh/MeshEdgeBoundary.cpp @@ -7,7 +7,7 @@ template <size_t Dimension> MeshEdgeBoundary<Dimension>::MeshEdgeBoundary(const Mesh<Connectivity<Dimension>>&, const RefEdgeList& ref_edge_list) - : m_edge_list(ref_edge_list.list()), m_boundary_name(ref_edge_list.refId().tagName()) + : m_ref_edge_list(ref_edge_list), m_boundary_name(ref_edge_list.refId().tagName()) {} template MeshEdgeBoundary<1>::MeshEdgeBoundary(const Mesh<Connectivity<1>>&, const RefEdgeList&); @@ -43,18 +43,17 @@ MeshEdgeBoundary<Dimension>::MeshEdgeBoundary(const Mesh<Connectivity<Dimension> Array<EdgeId> edge_list(edge_ids.size()); parallel_for( edge_ids.size(), PUGS_LAMBDA(int r) { edge_list[r] = edge_ids[r]; }); - m_edge_list = edge_list; + m_ref_edge_list = RefEdgeList{ref_face_list.refId(), edge_list, ref_face_list.isBoundary()}; } else if constexpr (Dimension == 2) { Array<EdgeId> edge_list(face_list.size()); parallel_for( face_list.size(), PUGS_LAMBDA(int r) { edge_list[r] = static_cast<FaceId::base_type>(face_list[r]); }); - m_edge_list = edge_list; + m_ref_edge_list = RefEdgeList{ref_face_list.refId(), edge_list, ref_face_list.isBoundary()}; } // This is quite dirty but it allows a non negligible performance // improvement - const_cast<Connectivity<Dimension>&>(mesh.connectivity()) - .addRefItemList(RefItemList<ItemType::edge>(ref_face_list.refId(), m_edge_list, ref_face_list.isBoundary())); + const_cast<Connectivity<Dimension>&>(mesh.connectivity()).addRefItemList(m_ref_edge_list); } template MeshEdgeBoundary<2>::MeshEdgeBoundary(const Mesh<Connectivity<2>>&, const RefFaceList&); diff --git a/src/mesh/MeshEdgeBoundary.hpp b/src/mesh/MeshEdgeBoundary.hpp index 9ff40cc6e66070c6b1d3f6f2a5dcf3296cb9b791..012579bb065ec697d7d7aa97cd1bec0664b076ff 100644 --- a/src/mesh/MeshEdgeBoundary.hpp +++ b/src/mesh/MeshEdgeBoundary.hpp @@ -16,7 +16,7 @@ template <size_t Dimension> class [[nodiscard]] MeshEdgeBoundary // clazy:exclude=copyable-polymorphic { protected: - Array<const EdgeId> m_edge_list; + RefEdgeList m_ref_edge_list; std::string m_boundary_name; std::array<TinyVector<Dimension>, Dimension*(Dimension - 1)> _getBounds(const Mesh<Connectivity<Dimension>>& mesh) @@ -30,9 +30,16 @@ class [[nodiscard]] MeshEdgeBoundary // clazy:exclude=copyable-polymorphic MeshEdgeBoundary& operator=(const MeshEdgeBoundary&) = default; MeshEdgeBoundary& operator=(MeshEdgeBoundary&&) = default; + PUGS_INLINE + const RefEdgeList& refEdgeList() const + { + return m_ref_edge_list; + } + + PUGS_INLINE const Array<const EdgeId>& edgeList() const { - return m_edge_list; + return m_ref_edge_list.list(); } protected: