diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp index 84ed64c4081051158dd4a479772d0bae3c6e23f4..0ba7c101a87969c8486d1f713c2f4e114bd26a34 100644 --- a/src/mesh/Connectivity.hpp +++ b/src/mesh/Connectivity.hpp @@ -99,15 +99,6 @@ class ConnectivityFace<2> KOKKOS_INLINE_FUNCTION ConnectivityFace(ConnectivityFace&&) = default; - // KOKKOS_INLINE_FUNCTION - // ConnectivityFace(unsigned int node0_id, - // unsigned int node1_id) - // : m_node0_id(node0_id), - // m_node1_id(node1_id) - // { - // ; - // } - KOKKOS_INLINE_FUNCTION ~ConnectivityFace() = default; }; @@ -253,13 +244,6 @@ public: private: ConnectivityComputer m_connectivity_computer; - // Stores numbering of nodes of each cell. - // gives an id to each node of each cell. (j,r) -> id - // - // This is different from m_cell_to_node_matrix which return the global id of - // a local node in a cell - ConnectivityMatrix m_node_id_per_cell_matrix; - std::vector<RefFaceList> m_ref_face_list; std::vector<RefNodeList> m_ref_node_list; @@ -357,20 +341,6 @@ private: m_inv_cell_nb_nodes = inv_cell_nb_nodes; } - { - std::vector<std::vector<unsigned int>> node_id_per_cell_vector(this->numberOfCells()); - unsigned int id=0; - for (unsigned int j=0; j<this->numberOfCells(); ++j) { - const auto& cell_to_node = m_cell_to_node_matrix.rowConst(j); - auto& node_id_per_cell = node_id_per_cell_vector[j]; - node_id_per_cell.resize(cell_to_node.length); - for (size_t r=0; r<cell_to_node.length; ++r) { - node_id_per_cell[r] = id++; - } - } - m_node_id_per_cell_matrix = node_id_per_cell_vector; - } - m_connectivity_computer.computeInverseConnectivityMatrix(m_cell_to_node_matrix, m_node_to_cell_matrix); @@ -397,7 +367,7 @@ inline const ConnectivityMatrix& Connectivity<3>::subItemIdPerItemMatrix<TypeOfItem::node, TypeOfItem::cell>() const { - return m_node_id_per_cell_matrix; + return m_cell_to_node_matrix; } using Connectivity2D = Connectivity<2>; @@ -408,7 +378,7 @@ inline const ConnectivityMatrix& Connectivity<2>::subItemIdPerItemMatrix<TypeOfItem::node, TypeOfItem::cell>() const { - return m_node_id_per_cell_matrix; + return m_cell_to_node_matrix; } using Connectivity1D = Connectivity<1>; @@ -419,7 +389,7 @@ inline const ConnectivityMatrix& Connectivity<1>::subItemIdPerItemMatrix<TypeOfItem::node, TypeOfItem::cell>() const { - return m_node_id_per_cell_matrix; + return m_cell_to_node_matrix; } #endif // CONNECTIVITY_HPP diff --git a/src/mesh/ConnectivityMatrix.hpp b/src/mesh/ConnectivityMatrix.hpp index 0e7804432902f262e8765c9ffa102e05addb2086..b888c175f1e4188aae80e7532137cb9ea12b0d56 100644 --- a/src/mesh/ConnectivityMatrix.hpp +++ b/src/mesh/ConnectivityMatrix.hpp @@ -11,6 +11,18 @@ class ConnectivityMatrix HostMatrix m_host_matrix; public: + typedef HostMatrix::row_map_type HostRowType; + + const auto& entries() const + { + return m_host_matrix.entries; + } + + const auto& rowsMap() const + { + return m_host_matrix.row_map; + } + KOKKOS_INLINE_FUNCTION const auto numEntries() const { @@ -42,6 +54,13 @@ class ConnectivityMatrix ; } + KOKKOS_INLINE_FUNCTION + ConnectivityMatrix(const ConnectivityMatrix& connecticity_matrix,std::vector<std::vector<unsigned int>>& initializer) + : m_host_matrix(Kokkos::create_staticcrsgraph<HostMatrix>("connecticity_matrix", initializer)) + { + ; + } + [[deprecated("Must only define connectivities so that only unsigned int should be treated")]] ConnectivityMatrix(const std::vector<std::vector<unsigned short>>& initializer) : m_host_matrix(Kokkos::create_staticcrsgraph<HostMatrix>("connecticity_matrix", initializer)) diff --git a/src/scheme/SubItemValuePerItem.hpp b/src/scheme/SubItemValuePerItem.hpp index 09dde640fc95d43257176cccca13544647e654a5..d2dd8596d62c9e8304ef2a89278acea63569fd2f 100644 --- a/src/scheme/SubItemValuePerItem.hpp +++ b/src/scheme/SubItemValuePerItem.hpp @@ -15,9 +15,7 @@ class SubItemValuePerItem { #warning should eventually filter const from DataType private: - [[deprecated ("must use a specific class for subitem per item numbering")]] - ConnectivityMatrix m_subitem_id_per_item_matrix; - + ConnectivityMatrix::HostRowType m_host_row_map; Kokkos::View<DataType*> m_values; public: @@ -105,13 +103,13 @@ class SubItemValuePerItem KOKKOS_FORCEINLINE_FUNCTION DataType& operator()(const size_t& j, const size_t& r) { - return m_values[m_subitem_id_per_item_matrix.rowMap(j)+r]; + return m_values[m_host_row_map(j)+r]; } KOKKOS_FORCEINLINE_FUNCTION const DataType& operator()(const size_t& j, const size_t& r) const { - return m_values[m_subitem_id_per_item_matrix.rowMap(j)+r]; + return m_values[m_host_row_map(j)+r]; } KOKKOS_INLINE_FUNCTION @@ -135,28 +133,29 @@ class SubItemValuePerItem KOKKOS_INLINE_FUNCTION size_t numberOfItems() const { - return m_subitem_id_per_item_matrix.numRows(); + Assert(m_host_row_map.extent(0) != 0>0); + return m_host_row_map.extent(0); } KOKKOS_INLINE_FUNCTION size_t numberOfSubValues(const size_t& i_cell) const { - return m_subitem_id_per_item_matrix.rowMap(i_cell+1)-m_subitem_id_per_item_matrix.rowMap(i_cell); + return m_host_row_map(i_cell+1)-m_host_row_map(i_cell); } KOKKOS_INLINE_FUNCTION SubView itemValues(const size_t& i_cell) { - const auto& cell_begin = m_subitem_id_per_item_matrix.rowMap(i_cell); - const auto& cell_end = m_subitem_id_per_item_matrix.rowMap(i_cell+1); + const auto& cell_begin = m_host_row_map(i_cell); + const auto& cell_end = m_host_row_map(i_cell+1); return SubView(m_values, cell_begin, cell_end); } KOKKOS_INLINE_FUNCTION SubViewConst itemValues(const size_t& i_cell) const { - const auto& cell_begin = m_subitem_id_per_item_matrix.rowMap(i_cell); - const auto& cell_end = m_subitem_id_per_item_matrix.rowMap(i_cell+1); + const auto& cell_begin = m_host_row_map(i_cell); + const auto& cell_end = m_host_row_map(i_cell+1); return SubViewConst(m_values, cell_begin, cell_end); } @@ -165,8 +164,10 @@ class SubItemValuePerItem template <typename ConnectivityType> SubItemValuePerItem(const ConnectivityType& connectivity) { - m_subitem_id_per_item_matrix = connectivity.template subItemIdPerItemMatrix<SubItemType,ItemType>(); - m_values = Kokkos::View<DataType*>("values", m_subitem_id_per_item_matrix.numEntries()); + ConnectivityMatrix connectivity_matrix + = connectivity.template subItemIdPerItemMatrix<SubItemType,ItemType>(); + m_host_row_map = connectivity_matrix.rowsMap(); + m_values = Kokkos::View<DataType*>("values", connectivity_matrix.numEntries()); } ~SubItemValuePerItem() = default;