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

Clean-up in ConnectivityMatrix and SubItemValuePerItem

- remove m_node_id_per_cell_matrix (was useless)
- SubItemValuePerItem use directly the item to subitem connectivity
parent 426d2bbf
Branches
Tags
1 merge request!6Feature/crs
...@@ -99,15 +99,6 @@ class ConnectivityFace<2> ...@@ -99,15 +99,6 @@ class ConnectivityFace<2>
KOKKOS_INLINE_FUNCTION KOKKOS_INLINE_FUNCTION
ConnectivityFace(ConnectivityFace&&) = default; 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 KOKKOS_INLINE_FUNCTION
~ConnectivityFace() = default; ~ConnectivityFace() = default;
}; };
...@@ -253,13 +244,6 @@ public: ...@@ -253,13 +244,6 @@ public:
private: private:
ConnectivityComputer m_connectivity_computer; 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<RefFaceList> m_ref_face_list;
std::vector<RefNodeList> m_ref_node_list; std::vector<RefNodeList> m_ref_node_list;
...@@ -357,20 +341,6 @@ private: ...@@ -357,20 +341,6 @@ private:
m_inv_cell_nb_nodes = inv_cell_nb_nodes; 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_connectivity_computer.computeInverseConnectivityMatrix(m_cell_to_node_matrix,
m_node_to_cell_matrix); m_node_to_cell_matrix);
...@@ -397,7 +367,7 @@ inline const ConnectivityMatrix& ...@@ -397,7 +367,7 @@ inline const ConnectivityMatrix&
Connectivity<3>::subItemIdPerItemMatrix<TypeOfItem::node, Connectivity<3>::subItemIdPerItemMatrix<TypeOfItem::node,
TypeOfItem::cell>() const TypeOfItem::cell>() const
{ {
return m_node_id_per_cell_matrix; return m_cell_to_node_matrix;
} }
using Connectivity2D = Connectivity<2>; using Connectivity2D = Connectivity<2>;
...@@ -408,7 +378,7 @@ inline const ConnectivityMatrix& ...@@ -408,7 +378,7 @@ inline const ConnectivityMatrix&
Connectivity<2>::subItemIdPerItemMatrix<TypeOfItem::node, Connectivity<2>::subItemIdPerItemMatrix<TypeOfItem::node,
TypeOfItem::cell>() const TypeOfItem::cell>() const
{ {
return m_node_id_per_cell_matrix; return m_cell_to_node_matrix;
} }
using Connectivity1D = Connectivity<1>; using Connectivity1D = Connectivity<1>;
...@@ -419,7 +389,7 @@ inline const ConnectivityMatrix& ...@@ -419,7 +389,7 @@ inline const ConnectivityMatrix&
Connectivity<1>::subItemIdPerItemMatrix<TypeOfItem::node, Connectivity<1>::subItemIdPerItemMatrix<TypeOfItem::node,
TypeOfItem::cell>() const TypeOfItem::cell>() const
{ {
return m_node_id_per_cell_matrix; return m_cell_to_node_matrix;
} }
#endif // CONNECTIVITY_HPP #endif // CONNECTIVITY_HPP
...@@ -11,6 +11,18 @@ class ConnectivityMatrix ...@@ -11,6 +11,18 @@ class ConnectivityMatrix
HostMatrix m_host_matrix; HostMatrix m_host_matrix;
public: 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 KOKKOS_INLINE_FUNCTION
const auto numEntries() const const auto numEntries() const
{ {
...@@ -42,6 +54,13 @@ class ConnectivityMatrix ...@@ -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")]] [[deprecated("Must only define connectivities so that only unsigned int should be treated")]]
ConnectivityMatrix(const std::vector<std::vector<unsigned short>>& initializer) ConnectivityMatrix(const std::vector<std::vector<unsigned short>>& initializer)
: m_host_matrix(Kokkos::create_staticcrsgraph<HostMatrix>("connecticity_matrix", initializer)) : m_host_matrix(Kokkos::create_staticcrsgraph<HostMatrix>("connecticity_matrix", initializer))
......
...@@ -15,9 +15,7 @@ class SubItemValuePerItem ...@@ -15,9 +15,7 @@ class SubItemValuePerItem
{ {
#warning should eventually filter const from DataType #warning should eventually filter const from DataType
private: private:
[[deprecated ("must use a specific class for subitem per item numbering")]] ConnectivityMatrix::HostRowType m_host_row_map;
ConnectivityMatrix m_subitem_id_per_item_matrix;
Kokkos::View<DataType*> m_values; Kokkos::View<DataType*> m_values;
public: public:
...@@ -105,13 +103,13 @@ class SubItemValuePerItem ...@@ -105,13 +103,13 @@ class SubItemValuePerItem
KOKKOS_FORCEINLINE_FUNCTION KOKKOS_FORCEINLINE_FUNCTION
DataType& operator()(const size_t& j, const size_t& r) 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 KOKKOS_FORCEINLINE_FUNCTION
const DataType& operator()(const size_t& j, const size_t& r) const 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 KOKKOS_INLINE_FUNCTION
...@@ -135,28 +133,29 @@ class SubItemValuePerItem ...@@ -135,28 +133,29 @@ class SubItemValuePerItem
KOKKOS_INLINE_FUNCTION KOKKOS_INLINE_FUNCTION
size_t numberOfItems() const 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 KOKKOS_INLINE_FUNCTION
size_t numberOfSubValues(const size_t& i_cell) const 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 KOKKOS_INLINE_FUNCTION
SubView itemValues(const size_t& i_cell) SubView itemValues(const size_t& i_cell)
{ {
const auto& cell_begin = m_subitem_id_per_item_matrix.rowMap(i_cell); const auto& cell_begin = m_host_row_map(i_cell);
const auto& cell_end = m_subitem_id_per_item_matrix.rowMap(i_cell+1); const auto& cell_end = m_host_row_map(i_cell+1);
return SubView(m_values, cell_begin, cell_end); return SubView(m_values, cell_begin, cell_end);
} }
KOKKOS_INLINE_FUNCTION KOKKOS_INLINE_FUNCTION
SubViewConst itemValues(const size_t& i_cell) const SubViewConst itemValues(const size_t& i_cell) const
{ {
const auto& cell_begin = m_subitem_id_per_item_matrix.rowMap(i_cell); const auto& cell_begin = m_host_row_map(i_cell);
const auto& cell_end = m_subitem_id_per_item_matrix.rowMap(i_cell+1); const auto& cell_end = m_host_row_map(i_cell+1);
return SubViewConst(m_values, cell_begin, cell_end); return SubViewConst(m_values, cell_begin, cell_end);
} }
...@@ -165,8 +164,10 @@ class SubItemValuePerItem ...@@ -165,8 +164,10 @@ class SubItemValuePerItem
template <typename ConnectivityType> template <typename ConnectivityType>
SubItemValuePerItem(const ConnectivityType& connectivity) SubItemValuePerItem(const ConnectivityType& connectivity)
{ {
m_subitem_id_per_item_matrix = connectivity.template subItemIdPerItemMatrix<SubItemType,ItemType>(); ConnectivityMatrix connectivity_matrix
m_values = Kokkos::View<DataType*>("values", m_subitem_id_per_item_matrix.numEntries()); = connectivity.template subItemIdPerItemMatrix<SubItemType,ItemType>();
m_host_row_map = connectivity_matrix.rowsMap();
m_values = Kokkos::View<DataType*>("values", connectivity_matrix.numEntries());
} }
~SubItemValuePerItem() = default; ~SubItemValuePerItem() = default;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment