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

Add a few missing ingredients

- Mesh::numberOfEdges() function
- construction of edges and faces similarly to nodes in 1d
- construction of edges similarly to faces in 1d
parent 7d567418
Branches
Tags
1 merge request!84Add SubArray class
......@@ -82,7 +82,49 @@ Connectivity<Dimension>::_buildFrom(const ConnectivityDescriptor& descriptor)
m_ref_node_list_vector = descriptor.template refItemListVector<ItemType::node>();
m_ref_cell_list_vector = descriptor.template refItemListVector<ItemType::cell>();
if constexpr (Dimension > 1) {
if constexpr (Dimension == 1) {
// faces are similar to nodes
{
WeakFaceValue<int> face_number(*this);
face_number = convert_to_array(descriptor.node_number_vector);
m_face_number = face_number;
}
{
WeakFaceValue<int> face_owner(*this);
face_owner = convert_to_array(descriptor.node_owner_vector);
m_face_owner = face_owner;
}
{
const int rank = parallel::rank();
WeakFaceValue<bool> face_is_owned(*this);
parallel_for(
this->numberOfFaces(), PUGS_LAMBDA(FaceId l) { face_is_owned[l] = (m_face_owner[l] == rank); });
m_face_is_owned = face_is_owned;
}
// edges are similar to nodes
{
WeakEdgeValue<int> edge_number(*this);
edge_number = convert_to_array(descriptor.node_number_vector);
m_edge_number = edge_number;
}
{
WeakEdgeValue<int> edge_owner(*this);
edge_owner = convert_to_array(descriptor.node_owner_vector);
m_edge_owner = edge_owner;
}
{
const int rank = parallel::rank();
WeakEdgeValue<bool> edge_is_owned(*this);
parallel_for(
this->numberOfEdges(), PUGS_LAMBDA(EdgeId l) { edge_is_owned[l] = (m_edge_owner[l] == rank); });
m_edge_is_owned = edge_is_owned;
}
} else {
m_item_to_item_matrix[itemTId(ItemType::face)][itemTId(ItemType::node)] = descriptor.face_to_node_vector;
m_item_to_item_matrix[itemTId(ItemType::cell)][itemTId(ItemType::face)] = descriptor.cell_to_face_vector;
......@@ -120,7 +162,29 @@ Connectivity<Dimension>::_buildFrom(const ConnectivityDescriptor& descriptor)
m_ref_face_list_vector = descriptor.template refItemListVector<ItemType::face>();
if constexpr (Dimension > 2) {
if constexpr (Dimension == 2) {
// edges are similar to faces
{
WeakEdgeValue<int> edge_number(*this);
edge_number = convert_to_array(descriptor.face_number_vector);
m_edge_number = edge_number;
}
{
WeakEdgeValue<int> edge_owner(*this);
edge_owner = convert_to_array(descriptor.face_owner_vector);
m_edge_owner = edge_owner;
}
{
const int rank = parallel::rank();
WeakEdgeValue<bool> edge_is_owned(*this);
parallel_for(
this->numberOfEdges(), PUGS_LAMBDA(EdgeId l) { edge_is_owned[l] = (m_edge_owner[l] == rank); });
m_edge_is_owned = edge_is_owned;
}
} else {
m_item_to_item_matrix[itemTId(ItemType::edge)][itemTId(ItemType::node)] = descriptor.edge_to_node_vector;
m_item_to_item_matrix[itemTId(ItemType::face)][itemTId(ItemType::edge)] = descriptor.face_to_edge_vector;
......
......@@ -196,7 +196,6 @@ class Connectivity final : public IConnectivity
const auto&
edgeOwner() const
{
throw NotImplementedError("edge owner not built");
return m_edge_owner;
}
......@@ -242,7 +241,6 @@ class Connectivity final : public IConnectivity
const auto&
edgeIsOwned() const
{
throw NotImplementedError("edge is owned not built");
return m_edge_is_owned;
}
......
......@@ -49,6 +49,13 @@ class Mesh final : public IMesh
return m_connectivity->numberOfNodes();
}
PUGS_INLINE
size_t
numberOfEdges() const
{
return m_connectivity->numberOfEdges();
}
PUGS_INLINE
size_t
numberOfFaces() const
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment