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

Use m_item_to_item_matrix instead of m_face_to_node_matrix

parent 89c224d0
Branches
Tags
1 merge request!6Feature/crs
......@@ -129,6 +129,9 @@ void Connectivity<3>::_computeFaceCellConnectivities()
}
{
auto& face_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
std::vector<std::vector<unsigned int>> face_to_node_vector(face_cells_map.size());
int l=0;
for (const auto& face_info : face_cells_map) {
......@@ -136,7 +139,7 @@ void Connectivity<3>::_computeFaceCellConnectivities()
face_to_node_vector[l] = face.nodeIdList();
++l;
}
m_face_to_node_matrix = face_to_node_vector;
face_to_node_matrix = face_to_node_vector;
}
{
......@@ -159,10 +162,13 @@ void Connectivity<3>::_computeFaceCellConnectivities()
m_face_to_cell_matrix,
m_face_to_cell_local_face);
const auto& face_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
#warning check that the number of cell per faces is <=2
std::unordered_map<unsigned int, std::vector<unsigned int>> node_faces_map;
for (size_t l=0; l<m_face_to_node_matrix.numRows(); ++l) {
const auto& face_nodes = m_face_to_node_matrix.rowConst(l);
for (size_t l=0; l<face_to_node_matrix.numRows(); ++l) {
const auto& face_nodes = face_to_node_matrix.rowConst(l);
for (size_t lr=0; lr<face_nodes.length; ++lr) {
const unsigned int r = face_nodes(lr);
node_faces_map[r].emplace_back(l);
......@@ -225,7 +231,9 @@ void Connectivity<2>::_computeFaceCellConnectivities()
face_to_node_vector[l] = {face.m_node0_id, face.m_node1_id};
++l;
}
m_face_to_node_matrix = face_to_node_vector;
auto& face_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
face_to_node_matrix = face_to_node_vector;
}
{
......
......@@ -243,6 +243,12 @@ class Connectivity final
return m_item_to_item_matrix[itemId(TypeOfItem::cell)][itemId(TypeOfItem::face)];
}
KOKKOS_INLINE_FUNCTION
ConnectivityMatrix faceToNodeMatrix() const
{
return m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
}
KOKKOS_INLINE_FUNCTION
ConnectivityMatrix nodeToCellMatrix() const
{
......@@ -255,7 +261,6 @@ class Connectivity final
ConnectivityMatrix m_face_to_cell_matrix;
CellValuePerFace<unsigned short> m_face_to_cell_local_face;
ConnectivityMatrix m_face_to_node_matrix;
CellValuePerNode<unsigned short> m_node_to_cell_local_node;
......@@ -443,7 +448,9 @@ inline const ConnectivityMatrix&
Connectivity<3>::itemToItemMatrix<TypeOfItem::face,
TypeOfItem::node>() const
{
return m_face_to_node_matrix;
const auto& face_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
return face_to_node_matrix;
}
template <>
......@@ -499,7 +506,9 @@ inline const ConnectivityMatrix&
Connectivity<2>::itemToItemMatrix<TypeOfItem::face,
TypeOfItem::node>() const
{
return m_face_to_node_matrix;
const auto& face_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
return face_to_node_matrix;
}
template <>
......@@ -556,7 +565,9 @@ Connectivity<1>::itemToItemMatrix<TypeOfItem::face,
TypeOfItem::node>() const
{
#warning in 1d, faces and node are the same
return m_face_to_node_matrix;
const auto& face_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)];
return face_to_node_matrix;
}
template <>
......
......@@ -106,11 +106,10 @@ class MeshData
} else if (dimension ==3) {
const Kokkos::View<const Rd*> xr = m_mesh.xr();
#warning Rewrite using better data structures and remove this explicit 4
Kokkos::View<Rd**> Nlr("Nlr", m_mesh.connectivity().numberOfFaces(), 4);
NodeValuePerFace<Rd> Nlr(m_mesh.connectivity());
const auto& face_to_node_matrix = m_mesh.connectivity().faceToNodeMatrix();
Kokkos::parallel_for(m_mesh.numberOfFaces(), KOKKOS_LAMBDA(const int& l) {
const auto& face_nodes = m_mesh.connectivity().m_face_to_node_matrix.rowConst(l);
const auto& face_nodes = face_to_node_matrix.rowConst(l);
const size_t nb_nodes = face_nodes.length;
std::vector<Rd> dxr(nb_nodes);
for (size_t r=0; r<nb_nodes; ++r) {
......@@ -143,7 +142,7 @@ class MeshData
for (size_t L=0; L<cell_faces.length; ++L) {
const size_t l = cell_faces(L);
const auto& face_nodes = m_mesh.connectivity().m_face_to_node_matrix.rowConst(l);
const auto& face_nodes = face_to_node_matrix.rowConst(l);
#warning should this lambda be replaced by a precomputed correspondance?
std::function local_node_number_in_cell
......
......@@ -41,9 +41,11 @@ class MeshNodeBoundary
Kokkos::vector<unsigned int> node_ids;
// not enough but should reduce significantly the number of resizing
node_ids.reserve(dimension*face_list.extent(0));
const auto& face_to_node_matrix = mesh.connectivity().faceToNodeMatrix();
for (size_t l=0; l<face_list.extent(0); ++l) {
const size_t face_number = face_list[l];
const auto& face_nodes = mesh.connectivity().m_face_to_node_matrix.rowConst(face_number);
const auto& face_nodes = face_to_node_matrix.rowConst(face_number);
for (size_t r=0; r<face_nodes.length; ++r) {
node_ids.push_back(face_nodes(r));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment