diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp index c8f7242a8ac99469392ee7db666c0136dfb1149e..2244d135584ef3a7db563d4897c15cb98ed68141 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 dd421418bd978781a7a7fd5334191cc3142ea341..269ee24a496043123b7e2dcb295c8925ac3cce7f 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 a14fdefe027d4ca7d87a86f5d9d721c8dbe7c2bb..56d3d254e314f7e18002f1f3b1624d03acc7218d 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);