From 9742f3f8a207f1a605f3322ff1505b02e6b52038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Tue, 15 Feb 2022 11:59:20 +0100 Subject: [PATCH] Change numbering of item type Also add dimension(ItemType) utility according to the space dimension --- src/mesh/ItemType.hpp | 31 ++++++++++++++++++++++++++----- tests/test_ItemType.cpp | 23 +++++++++++++++++++---- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/src/mesh/ItemType.hpp b/src/mesh/ItemType.hpp index c2f2da131..285806fe0 100644 --- a/src/mesh/ItemType.hpp +++ b/src/mesh/ItemType.hpp @@ -59,8 +59,8 @@ struct ItemTypeId<1> i = 0; break; } - case ItemType::edge: case ItemType::face: + case ItemType::edge: case ItemType::node: { // in 1d, faces, edges and nodes are the same i = 1; @@ -69,6 +69,13 @@ struct ItemTypeId<1> } return i; } + + PUGS_INLINE + static constexpr size_t + dimension(ItemType item_type) + { + return 1 - itemTId(item_type); + } }; template <ItemType item_type> @@ -87,8 +94,8 @@ struct ItemTypeId<2> i = 0; break; } - case ItemType::edge: - case ItemType::face: { + case ItemType::face: + case ItemType::edge: { // in 2d, faces and edges are the same i = 1; break; @@ -100,6 +107,13 @@ struct ItemTypeId<2> } return i; } + + PUGS_INLINE + static constexpr size_t + dimension(ItemType item_type) + { + return 2 - itemTId(item_type); + } }; template <ItemType item_type> @@ -118,11 +132,11 @@ struct ItemTypeId<3> i = 0; break; } - case ItemType::edge: { + case ItemType::face: { i = 1; break; } - case ItemType::face: { + case ItemType::edge: { i = 2; break; } @@ -133,6 +147,13 @@ struct ItemTypeId<3> } return i; } + + PUGS_INLINE + static constexpr size_t + dimension(ItemType item_type) + { + return 3 - itemTId(item_type); + } }; template <ItemType item_type> diff --git a/tests/test_ItemType.cpp b/tests/test_ItemType.cpp index d560a7098..ba5d7fe60 100644 --- a/tests/test_ItemType.cpp +++ b/tests/test_ItemType.cpp @@ -30,24 +30,39 @@ TEST_CASE("ItemType", "[connectivity]") SECTION("checking for item ids in 1d") { REQUIRE(ItemTypeId<1>::itemTId(cell_type) == 0); - REQUIRE(ItemTypeId<1>::itemTId(edge_type) == 1); REQUIRE(ItemTypeId<1>::itemTId(face_type) == 1); + REQUIRE(ItemTypeId<1>::itemTId(edge_type) == 1); REQUIRE(ItemTypeId<1>::itemTId(node_type) == 1); + + REQUIRE(ItemTypeId<1>::dimension(cell_type) == 1); + REQUIRE(ItemTypeId<1>::dimension(face_type) == 0); + REQUIRE(ItemTypeId<1>::dimension(edge_type) == 0); + REQUIRE(ItemTypeId<1>::dimension(node_type) == 0); } SECTION("checking for item ids in 2d") { REQUIRE(ItemTypeId<2>::itemTId(cell_type) == 0); - REQUIRE(ItemTypeId<2>::itemTId(edge_type) == 1); REQUIRE(ItemTypeId<2>::itemTId(face_type) == 1); + REQUIRE(ItemTypeId<2>::itemTId(edge_type) == 1); REQUIRE(ItemTypeId<2>::itemTId(node_type) == 2); + + REQUIRE(ItemTypeId<2>::dimension(cell_type) == 2); + REQUIRE(ItemTypeId<2>::dimension(face_type) == 1); + REQUIRE(ItemTypeId<2>::dimension(edge_type) == 1); + REQUIRE(ItemTypeId<2>::dimension(node_type) == 0); } SECTION("checking for item ids in 3d") { REQUIRE(ItemTypeId<3>::itemTId(cell_type) == 0); - REQUIRE(ItemTypeId<3>::itemTId(edge_type) == 1); - REQUIRE(ItemTypeId<3>::itemTId(face_type) == 2); + REQUIRE(ItemTypeId<3>::itemTId(face_type) == 1); + REQUIRE(ItemTypeId<3>::itemTId(edge_type) == 2); REQUIRE(ItemTypeId<3>::itemTId(node_type) == 3); + + REQUIRE(ItemTypeId<3>::dimension(cell_type) == 3); + REQUIRE(ItemTypeId<3>::dimension(face_type) == 2); + REQUIRE(ItemTypeId<3>::dimension(edge_type) == 1); + REQUIRE(ItemTypeId<3>::dimension(node_type) == 0); } } -- GitLab