Select Git revision
Connectivity.cpp
-
Stéphane Del Pino authoredStéphane Del Pino authored
Connectivity.cpp 7.85 KiB
#include <Connectivity.hpp>
#include <map>
template<>
void Connectivity<3>::_computeFaceCellConnectivities()
{
Kokkos::View<unsigned short*> cell_nb_faces("cell_nb_faces", this->numberOfCells());
typedef std::tuple<unsigned int, unsigned short, bool> CellFaceInfo;
const auto& cell_to_node_matrix
= m_item_to_item_matrix[itemId(TypeOfItem::cell)][itemId(TypeOfItem::node)];
std::map<Face, std::vector<CellFaceInfo>> face_cells_map;
for (unsigned int j=0; j<this->numberOfCells(); ++j) {
const auto& cell_nodes = cell_to_node_matrix.rowConst(j);
switch (cell_nodes.length) {
case 4: { // tetrahedron
cell_nb_faces[j] = 4;
// face 0
Face f0({cell_nodes(1),
cell_nodes(2),
cell_nodes(3)});
face_cells_map[f0].emplace_back(std::make_tuple(j, 0, f0.reversed()));
// face 1
Face f1({cell_nodes(0),
cell_nodes(3),
cell_nodes(2)});
face_cells_map[f1].emplace_back(std::make_tuple(j, 1, f1.reversed()));
// face 2
Face f2({cell_nodes(0),
cell_nodes(1),
cell_nodes(3)});
face_cells_map[f2].emplace_back(std::make_tuple(j, 2, f2.reversed()));
// face 3
Face f3({cell_nodes(0),
cell_nodes(2),
cell_nodes(1)});
face_cells_map[f3].emplace_back(std::make_tuple(j, 3, f3.reversed()));
break;
}
case 8: { // hexahedron
// face 0
Face f0({cell_nodes(3),
cell_nodes(2),
cell_nodes(1),
cell_nodes(0)});
face_cells_map[f0].emplace_back(std::make_tuple(j, 0, f0.reversed()));
// face 1
Face f1({cell_nodes(4),
cell_nodes(5),
cell_nodes(6),
cell_nodes(7)});
face_cells_map[f1].emplace_back(std::make_tuple(j, 1, f1.reversed()));
// face 2
Face f2({cell_nodes(0),
cell_nodes(4),
cell_nodes(7),
cell_nodes(3)});
face_cells_map[f2].emplace_back(std::make_tuple(j, 2, f2.reversed()));
// face 3
Face f3({cell_nodes(1),
cell_nodes(2),