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
No related branches found
No related tags found
1 merge request!6Feature/crs
......@@ -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
......@@ -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))
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment