From 228ec9dd1525806c1e0714a07e7f517184a835b1 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 2 Aug 2018 11:42:03 +0200 Subject: [PATCH] Use m_item_to_item_matrix instead of m_face_to_cell_matrix --- src/mesh/Connectivity.cpp | 11 +++++++---- src/mesh/Connectivity.hpp | 28 ++++++++++++++++++++++------ src/mesh/MeshNodeBoundary.hpp | 3 ++- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp index c8f7242a8..2244d1355 100644 --- a/src/mesh/Connectivity.cpp +++ b/src/mesh/Connectivity.cpp @@ -153,13 +153,14 @@ void Connectivity<3>::_computeFaceCellConnectivities() const auto& cell_to_face_matrix = m_item_to_item_matrix[itemId(TypeOfItem::cell)][itemId(TypeOfItem::face)]; + auto& face_to_cell_matrix + = m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::cell)]; m_connectivity_computer.computeInverseConnectivityMatrix(cell_to_face_matrix, - m_face_to_cell_matrix); + face_to_cell_matrix); m_face_to_cell_local_face = CellValuePerFace<unsigned short>(*this); - m_connectivity_computer.computeLocalChildItemNumberInItem(cell_to_face_matrix, - m_face_to_cell_matrix, + face_to_cell_matrix, m_face_to_cell_local_face); const auto& face_to_node_matrix @@ -246,6 +247,8 @@ void Connectivity<2>::_computeFaceCellConnectivities() } ++l; } - m_face_to_cell_matrix = face_to_cell_vector; + auto& face_to_cell_matrix + = m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::cell)]; + face_to_cell_matrix = face_to_cell_vector; } } diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp index dd421418b..269ee24a4 100644 --- a/src/mesh/Connectivity.hpp +++ b/src/mesh/Connectivity.hpp @@ -243,6 +243,12 @@ class Connectivity final return m_item_to_item_matrix[itemId(TypeOfItem::cell)][itemId(TypeOfItem::face)]; } + KOKKOS_INLINE_FUNCTION + ConnectivityMatrix faceToCellMatrix() const + { + return m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::cell)]; + } + KOKKOS_INLINE_FUNCTION ConnectivityMatrix faceToNodeMatrix() const { @@ -259,7 +265,6 @@ class Connectivity final FaceValuePerCell<bool> m_cell_face_is_reversed; - ConnectivityMatrix m_face_to_cell_matrix; CellValuePerFace<unsigned short> m_face_to_cell_local_face; CellValuePerNode<unsigned short> m_node_to_cell_local_node; @@ -333,7 +338,9 @@ private: KOKKOS_INLINE_FUNCTION size_t numberOfFaces() const { - return m_face_to_cell_matrix.numRows(); + const auto& face_to_node_matrix + = m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::node)]; + return face_to_node_matrix.numRows(); } KOKKOS_INLINE_FUNCTION @@ -440,8 +447,12 @@ inline const ConnectivityMatrix& Connectivity<3>::itemToItemMatrix<TypeOfItem::face, TypeOfItem::cell>() const { - return m_face_to_cell_matrix; + const auto& face_to_cell_matrix + = m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::cell)]; + + return face_to_cell_matrix; } + template <> template <> inline const ConnectivityMatrix& @@ -497,7 +508,10 @@ inline const ConnectivityMatrix& Connectivity<2>::itemToItemMatrix<TypeOfItem::face, TypeOfItem::cell>() const { - return m_face_to_cell_matrix; + const auto& face_to_cell_matrix + = m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::cell)]; + + return face_to_cell_matrix; } template <> @@ -554,8 +568,10 @@ inline const ConnectivityMatrix& Connectivity<1>::itemToItemMatrix<TypeOfItem::face, TypeOfItem::cell>() const { -#warning in 1d, faces and node are the same - return m_face_to_cell_matrix; + const auto& face_to_cell_matrix + = m_item_to_item_matrix[itemId(TypeOfItem::face)][itemId(TypeOfItem::cell)]; + + return face_to_cell_matrix; } template <> diff --git a/src/mesh/MeshNodeBoundary.hpp b/src/mesh/MeshNodeBoundary.hpp index a14fdefe0..56d3d254e 100644 --- a/src/mesh/MeshNodeBoundary.hpp +++ b/src/mesh/MeshNodeBoundary.hpp @@ -29,9 +29,10 @@ class MeshNodeBoundary const RefFaceList& ref_face_list) { static_assert(dimension == MeshType::dimension); + const auto& face_to_cell_matrix = mesh.connectivity().faceToCellMatrix(); const Kokkos::View<const unsigned int*>& face_list = ref_face_list.faceList(); Kokkos::parallel_for(face_list.extent(0), KOKKOS_LAMBDA(const int& l){ - const auto& face_cells = mesh.connectivity().m_face_to_cell_matrix.rowConst(face_list[l]); + const auto& face_cells = face_to_cell_matrix.rowConst(face_list[l]); if (face_cells.length>1) { std::cerr << "internal faces cannot be used to define mesh boundaries\n"; std::exit(1); -- GitLab