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

Add all item local number in child items

Access function are defined to forbid inappropriate use and to match classical
nomenclature
- edge <-> face/node are forbidden except in dimension>2
- face <-> node are forbidden except in dimension>1
- when calling edge <-> cell in dimension<2 use face <-> cell
...
parent 0f44ba24
No related branches found
No related tags found
1 merge request!6Feature/crs
...@@ -236,16 +236,20 @@ class Connectivity final ...@@ -236,16 +236,20 @@ class Connectivity final
FaceValuePerCell<const bool> m_cell_face_is_reversed; FaceValuePerCell<const bool> m_cell_face_is_reversed;
NodeValuePerCell<const unsigned short> m_cell_local_numbers_in_their_nodes; NodeValuePerCell<const unsigned short> m_cell_local_numbers_in_their_nodes;
EdgeValuePerCell<const unsigned short> m_cell_local_numbers_in_their_edges;
FaceValuePerCell<const unsigned short> m_cell_local_numbers_in_their_faces;
CellValuePerFace<const unsigned short> m_face_local_numbers_in_their_cells; CellValuePerFace<const unsigned short> m_face_local_numbers_in_their_cells;
EdgeValuePerFace<const unsigned short> m_face_local_numbers_in_their_edges;
NodeValuePerFace<const unsigned short> m_face_local_numbers_in_their_nodes;
CellValuePerNode<const unsigned short> m_node_local_numbers_in_their_cells; CellValuePerEdge<const unsigned short> m_edge_local_numbers_in_their_cells;
FaceValuePerEdge<const unsigned short> m_edge_local_numbers_in_their_faces;
NodeValuePerEdge<const unsigned short> m_edge_local_numbers_in_their_nodes;
// not plugged ... CellValuePerNode<const unsigned short> m_node_local_numbers_in_their_cells;
#warning remaining def EdgeValuePerNode<const unsigned short> m_node_local_numbers_in_their_edges;
NodeValuePerFace<unsigned short> m_node_local_numbers_in_their_faces; FaceValuePerNode<const unsigned short> m_node_local_numbers_in_their_faces;
FaceValuePerNode<unsigned short> m_face_local_numbers_in_their_nodes;
// ... not plugged
ConnectivityComputer m_connectivity_computer; ConnectivityComputer m_connectivity_computer;
...@@ -300,34 +304,104 @@ class Connectivity final ...@@ -300,34 +304,104 @@ class Connectivity final
return connectivity_matrix; return connectivity_matrix;
} }
KOKKOS_INLINE_FUNCTION
const auto& cellFaceIsReversed() const const auto& cellFaceIsReversed() const
{ {
static_assert(dimension>1, "reversed faces makes no sense in dimension 1"); static_assert(dimension>1, "reversed faces makes no sense in dimension 1");
return m_cell_face_is_reversed; return m_cell_face_is_reversed;
} }
KOKKOS_INLINE_FUNCTION
const auto& cellLocalNumbersInTheirNodes() const const auto& cellLocalNumbersInTheirNodes() const
{ {
return _lazzyBuildItemNumberInTheirChild(m_cell_local_numbers_in_their_nodes); return _lazzyBuildItemNumberInTheirChild(m_cell_local_numbers_in_their_nodes);
} }
const auto& nodeLocalNumbersInTheirCells() const KOKKOS_INLINE_FUNCTION
const auto& cellLocalNumbersInTheirEdges() const
{ {
return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_cells); if constexpr (dimension>2) {
return _lazzyBuildItemNumberInTheirChild(m_cell_local_numbers_in_their_edges);
} else {
return cellLocalNumbersInTheirFaces();
}
} }
KOKKOS_INLINE_FUNCTION
const auto& cellLocalNumbersInTheirFaces() const
{
if constexpr (dimension>1) {
return _lazzyBuildItemNumberInTheirChild(m_cell_local_numbers_in_their_faces);
} else {
return cellLocalNumbersInTheirNodes();
}
}
KOKKOS_INLINE_FUNCTION
const auto& faceLocalNumbersInTheirCells() const const auto& faceLocalNumbersInTheirCells() const
{ {
if constexpr(dimension>1) { if constexpr(dimension>1) {
return _lazzyBuildItemNumberInTheirChild(m_face_local_numbers_in_their_cells); return _lazzyBuildItemNumberInTheirChild(m_face_local_numbers_in_their_cells);
} else { } else {
return nodeLocalNumbersInTheirCells();
}
}
KOKKOS_INLINE_FUNCTION
const auto& faceLocalNumbersInTheirEdges() const
{
static_assert(dimension>2,"this function has no meaning in 1d or 2d");
return _lazzyBuildItemNumberInTheirChild(m_face_local_numbers_in_their_edges);
}
KOKKOS_INLINE_FUNCTION
const auto& faceLocalNumbersInTheirNodes() const
{
static_assert(dimension>1,"this function has no meaning in 1d");
return _lazzyBuildItemNumberInTheirChild(m_face_local_numbers_in_their_nodes);
}
KOKKOS_INLINE_FUNCTION
const auto& edgeLocalNumbersInTheirCells() const
{
if constexpr (dimension>2) {
return _lazzyBuildItemNumberInTheirChild(m_edge_local_numbers_in_their_cells);
} else {
return faceLocalNumbersInTheirCells();
}
}
KOKKOS_INLINE_FUNCTION
const auto& edgeLocalNumbersInTheirFaces() const
{
static_assert(dimension>2, "this function has no meaning in 1d or 2d");
return _lazzyBuildItemNumberInTheirChild(m_edge_local_numbers_in_their_faces);
}
KOKKOS_INLINE_FUNCTION
const auto& edgeLocalNumbersInTheirNodes() const
{
static_assert(dimension>2, "this function has no meaning in 1d or 2d");
return _lazzyBuildItemNumberInTheirChild(m_edge_local_numbers_in_their_nodes);
}
KOKKOS_INLINE_FUNCTION
const auto& nodeLocalNumbersInTheirCells() const
{
return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_cells); return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_cells);
} }
KOKKOS_INLINE_FUNCTION
const auto& nodeLocalNumbersInTheirEdges() const
{
static_assert(dimension>2, "this function has no meaning in 1d or 2d");
return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_edges);
} }
KOKKOS_INLINE_FUNCTION
const auto& nodeLocalNumbersInTheirFaces() const const auto& nodeLocalNumbersInTheirFaces() const
{ {
static_assert(Dimension==1,"this function has no meaning in 1d"); static_assert(dimension>1,"this function has no meaning in 1d");
return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_faces); return _lazzyBuildItemNumberInTheirChild(m_node_local_numbers_in_their_faces);
} }
......
...@@ -202,21 +202,47 @@ class SubItemValuePerItem<DataType, ...@@ -202,21 +202,47 @@ class SubItemValuePerItem<DataType,
~SubItemValuePerItem() = default; ~SubItemValuePerItem() = default;
}; };
// Item values at nodes
template <typename DataType> template <typename DataType>
using NodeValuePerCell = SubItemValuePerItem<DataType, ItemType::node, ItemType::cell>; using NodeValuePerEdge = SubItemValuePerItem<DataType, ItemType::node, ItemType::edge>;
template <typename DataType> template <typename DataType>
using NodeValuePerFace = SubItemValuePerItem<DataType, ItemType::node, ItemType::face>; using NodeValuePerFace = SubItemValuePerItem<DataType, ItemType::node, ItemType::face>;
template <typename DataType>
using NodeValuePerCell = SubItemValuePerItem<DataType, ItemType::node, ItemType::cell>;
// Item values at edges
template <typename DataType>
using EdgeValuePerNode = SubItemValuePerItem<DataType, ItemType::edge, ItemType::node>;
template <typename DataType>
using EdgeValuePerFace = SubItemValuePerItem<DataType, ItemType::edge, ItemType::face>;
template <typename DataType>
using EdgeValuePerCell = SubItemValuePerItem<DataType, ItemType::edge, ItemType::cell>;
// Item values at faces
template <typename DataType> template <typename DataType>
using FaceValuePerNode = SubItemValuePerItem<DataType, ItemType::face, ItemType::node>; using FaceValuePerNode = SubItemValuePerItem<DataType, ItemType::face, ItemType::node>;
template <typename DataType>
using FaceValuePerEdge = SubItemValuePerItem<DataType, ItemType::face, ItemType::edge>;
template <typename DataType> template <typename DataType>
using FaceValuePerCell = SubItemValuePerItem<DataType, ItemType::face, ItemType::cell>; using FaceValuePerCell = SubItemValuePerItem<DataType, ItemType::face, ItemType::cell>;
// Item values at cells
template <typename DataType> template <typename DataType>
using CellValuePerNode = SubItemValuePerItem<DataType, ItemType::cell, ItemType::node>; using CellValuePerNode = SubItemValuePerItem<DataType, ItemType::cell, ItemType::node>;
template <typename DataType>
using CellValuePerEdge = SubItemValuePerItem<DataType, ItemType::cell, ItemType::edge>;
template <typename DataType> template <typename DataType>
using CellValuePerFace = SubItemValuePerItem<DataType, ItemType::cell, ItemType::face>; using CellValuePerFace = SubItemValuePerItem<DataType, ItemType::cell, ItemType::face>;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment