diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp index 9f57841e16d414e2df6792705d521222250cbba0..fa6fae399c8548002931e0a91692c00b80fca232 100644 --- a/src/mesh/Connectivity.cpp +++ b/src/mesh/Connectivity.cpp @@ -109,22 +109,17 @@ void Connectivity<3>::_computeFaceCellConnectivities() m_cell_to_face_matrix = cell_to_face_vector; } + FaceValuePerCell<bool> cell_to_face_is_reversed(*this); { - std::vector<std::vector<unsigned short>> cell_to_face_is_reversed_vector(this->numberOfCells()); - for (size_t j=0; j<cell_to_face_is_reversed_vector.size(); ++j) { - cell_to_face_is_reversed_vector[j].resize(cell_nb_faces[j]); - } - int l=0; for (const auto& face_cells_vector : face_cells_map) { const auto& cells_vector = face_cells_vector.second; for (unsigned short lj=0; lj<cells_vector.size(); ++lj) { const auto& [cell_number, cell_local_face, reversed] = cells_vector[lj]; - cell_to_face_is_reversed_vector[cell_number][cell_local_face] = reversed; + cell_to_face_is_reversed(cell_number, cell_local_face) = reversed; } - ++l; } - m_cell_to_face_is_reversed_matrix = cell_to_face_is_reversed_vector; + m_cell_to_face_is_reversed_matrix = cell_to_face_is_reversed; } { diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp index 81dda065266c646bbd7430707f6425b1e3bb11ac..3a3e44fc8a7b64be5c04590f749617cd42dc810d 100644 --- a/src/mesh/Connectivity.hpp +++ b/src/mesh/Connectivity.hpp @@ -232,7 +232,7 @@ public: ConnectivityMatrix m_cell_to_node_matrix; ConnectivityMatrix m_cell_to_face_matrix; - ConnectivityMatrixShort m_cell_to_face_is_reversed_matrix; + FaceValuePerCell<bool> m_cell_to_face_is_reversed_matrix; ConnectivityMatrix m_face_to_cell_matrix; CellValuePerFace<unsigned short> m_face_to_cell_local_face_matrix; @@ -498,6 +498,9 @@ itemToItemMatrix(const TypeOfItem& item_type_0, case TypeOfItem::node: { return itemToItemMatrix<TypeOfItem::cell, TypeOfItem::node>(); } + case TypeOfItem::face: { + return itemToItemMatrix<TypeOfItem::cell, TypeOfItem::face>(); + } default: { std::cerr << __FILE__ << ":" << __LINE__ << ": NIY " << int(item_type_1) << "\n"; std::exit(1); diff --git a/src/mesh/ConnectivityMatrix.hpp b/src/mesh/ConnectivityMatrix.hpp index b888c175f1e4188aae80e7532137cb9ea12b0d56..9c68d144e5897e66df79f3414045e6685bb0470a 100644 --- a/src/mesh/ConnectivityMatrix.hpp +++ b/src/mesh/ConnectivityMatrix.hpp @@ -77,7 +77,4 @@ class ConnectivityMatrix ~ConnectivityMatrix() = default; }; -#warning use right type (unsigned short) instead of a clone of ConnectivityMatrix -using ConnectivityMatrixShort = ConnectivityMatrix; - #endif // CONNECTIVITY_MATRIX_HPP diff --git a/src/mesh/MeshData.hpp b/src/mesh/MeshData.hpp index 09278a77fcd2eb9e30bde67e7a202db0181cb1cc..2ad4ecc9a845dfd07d21d54c5efe5d96f4fce100 100644 --- a/src/mesh/MeshData.hpp +++ b/src/mesh/MeshData.hpp @@ -134,11 +134,11 @@ class MeshData node_id_to_local[cell_nodes(R)] = R; } const auto& cell_faces = m_mesh.connectivity().m_cell_to_face_matrix.rowConst(j); - const auto& cell_faces_is_reversed = m_mesh.connectivity().m_cell_to_face_is_reversed_matrix.rowConst(j); + const auto& cell_faces_is_reversed = m_mesh.connectivity().m_cell_to_face_is_reversed_matrix.itemValues(j); 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); - if (cell_faces_is_reversed(L)) { + if (cell_faces_is_reversed[L]) { for (size_t rl = 0; rl<face_nodes.length; ++rl) { m_Cjr(j, node_id_to_local[face_nodes(rl)]) -= Nlr(l,rl); } diff --git a/src/mesh/SubItemValuePerItem.hpp b/src/mesh/SubItemValuePerItem.hpp index 384e91c7fc92e1f79c9ad51f774332cdabc17768..3f0c9951e5e2daec9e4d6cd67b5f74a9235f0ec0 100644 --- a/src/mesh/SubItemValuePerItem.hpp +++ b/src/mesh/SubItemValuePerItem.hpp @@ -174,6 +174,9 @@ class SubItemValuePerItem template <typename DataType> using NodeValuePerCell = SubItemValuePerItem<DataType, TypeOfItem::node, TypeOfItem::cell>; +template <typename DataType> +using FaceValuePerCell = SubItemValuePerItem<DataType, TypeOfItem::face, TypeOfItem::cell>; + template <typename DataType> using CellValuePerNode = SubItemValuePerItem<DataType, TypeOfItem::cell, TypeOfItem::node>;