Skip to content
Snippets Groups Projects
Commit a0639266 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Store RefEdgeList instead of edge list

Simplify access to MeshEdgeBoundary (simpler and safer)
parent 20d0fb48
No related branches found
No related tags found
1 merge request!140Change referenced item list policy
......@@ -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&);
......
......@@ -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:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment