diff --git a/src/mesh/ItemType.hpp b/src/mesh/ItemType.hpp index c2f2da131e417e931cce8d3c40d91fd83ad19d45..285806fe0599f66d5f70b55e0e4e2de3e5d9d919 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 d560a7098ee0e2cec80a1efb64ab599df5ef67ec..ba5d7fe603c4dfe148c2b7e209742da3e5c6cfe0 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); } }