From b608903df813f3cc0252259cb57e977dea94f4b5 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Thu, 11 Apr 2019 19:14:03 +0200 Subject: [PATCH] Move ConnectivityDescriptor to its own file --- src/mesh/Connectivity.cpp | 2 + src/mesh/Connectivity.hpp | 113 +------------------------- src/mesh/ConnectivityDescriptor.hpp | 121 ++++++++++++++++++++++++++++ src/mesh/ConnectivityDispatcher.hpp | 1 + 4 files changed, 126 insertions(+), 111 deletions(-) create mode 100644 src/mesh/ConnectivityDescriptor.hpp diff --git a/src/mesh/Connectivity.cpp b/src/mesh/Connectivity.cpp index 596a9b8b0..3a4b45766 100644 --- a/src/mesh/Connectivity.cpp +++ b/src/mesh/Connectivity.cpp @@ -3,6 +3,8 @@ #include <Messenger.hpp> +#include <ConnectivityDescriptor.hpp> + template<size_t Dimension> Connectivity<Dimension>::Connectivity() {} diff --git a/src/mesh/Connectivity.hpp b/src/mesh/Connectivity.hpp index 5643d0737..7e1ebd119 100644 --- a/src/mesh/Connectivity.hpp +++ b/src/mesh/Connectivity.hpp @@ -32,121 +32,12 @@ #include <ItemType.hpp> #include <RefItemList.hpp> + #include <SynchronizerManager.hpp> -#include <tuple> -#include <algorithm> #include <set> -class ConnectivityDescriptor -{ - private: - std::vector<RefCellList> m_ref_cell_list_vector; - std::vector<RefFaceList> m_ref_face_list_vector; - std::vector<RefEdgeList> m_ref_edge_list_vector; - std::vector<RefNodeList> m_ref_node_list_vector; - - public: - std::vector<std::vector<unsigned int>> cell_to_node_vector; - std::vector<std::vector<unsigned int>> cell_to_face_vector; - std::vector<std::vector<unsigned int>> cell_to_edge_vector; - - std::vector<std::vector<unsigned int>> face_to_node_vector; - std::vector<std::vector<unsigned int>> face_to_edge_vector; - - std::vector<std::vector<unsigned int>> edge_to_node_vector; - - template <typename ItemOfItemT> - auto& itemOfItemVector() - { - if constexpr (std::is_same_v<ItemOfItemT,NodeOfCell>) { - return cell_to_node_vector; - } else if constexpr (std::is_same_v<ItemOfItemT,FaceOfCell>) { - return cell_to_face_vector; - } else if constexpr (std::is_same_v<ItemOfItemT,EdgeOfCell>) { - return cell_to_edge_vector; - } else if constexpr (std::is_same_v<ItemOfItemT,EdgeOfFace>) { - return face_to_edge_vector; - } else if constexpr (std::is_same_v<ItemOfItemT,NodeOfFace>) { - return face_to_node_vector; - } else if constexpr (std::is_same_v<ItemOfItemT,NodeOfEdge>) { - return edge_to_node_vector; - } else { - static_assert(is_false_v<ItemOfItemT>, "Unexpected item of item type"); - } - } - - std::vector<Array<bool>> cell_face_is_reversed_vector; - std::vector<Array<bool>> face_edge_is_reversed_vector; - - std::vector<CellType> cell_type_vector; - - std::vector<int> cell_number_vector; - std::vector<int> face_number_vector; - std::vector<int> edge_number_vector; - std::vector<int> node_number_vector; - - template <ItemType item_type> - const std::vector<int>& itemNumberVector() const - { - if constexpr (item_type == ItemType::cell) { - return cell_number_vector; - } else if constexpr (item_type == ItemType::face) { - return face_number_vector; - } else if constexpr (item_type == ItemType::edge) { - return edge_number_vector; - } else if constexpr (item_type == ItemType::node) { - return node_number_vector; - } else { - static_assert(is_false_item_type_v<item_type>, "Unexpected item type"); - } - } - - std::vector<int> cell_owner_vector; - std::vector<int> face_owner_vector; - std::vector<int> edge_owner_vector; - std::vector<int> node_owner_vector; - - template <ItemType item_type> - const std::vector<RefItemList<item_type>>& refItemListVector() const - { - if constexpr (item_type == ItemType::cell) { - return m_ref_cell_list_vector; - } else if constexpr (item_type == ItemType::face) { - return m_ref_face_list_vector; - } else if constexpr (item_type == ItemType::edge) { - return m_ref_edge_list_vector; - } else if constexpr (item_type == ItemType::node) { - return m_ref_node_list_vector; - } else { - static_assert(is_false_item_type_v<item_type>, "Unexpected item type"); - } - } - - template <ItemType item_type> - void addRefItemList(const RefItemList<item_type>& ref_item_list) - { - if constexpr (item_type == ItemType::cell) { - m_ref_cell_list_vector.push_back(ref_item_list); - } else if constexpr (item_type == ItemType::face) { - m_ref_face_list_vector.push_back(ref_item_list); - } else if constexpr (item_type == ItemType::edge) { - m_ref_edge_list_vector.push_back(ref_item_list); - } else if constexpr (item_type == ItemType::node) { - m_ref_node_list_vector.push_back(ref_item_list); - } else { - static_assert(is_false_item_type_v<item_type>, "Unexpected item type"); - } - } - - ConnectivityDescriptor& operator=(const ConnectivityDescriptor&) = delete; - ConnectivityDescriptor& operator=(ConnectivityDescriptor&&) = delete; - - ConnectivityDescriptor() = default; - ConnectivityDescriptor(const ConnectivityDescriptor&) = default; - ConnectivityDescriptor(ConnectivityDescriptor&&) = delete; - ~ConnectivityDescriptor() = default; -}; +class ConnectivityDescriptor; template <size_t Dim> class Connectivity final diff --git a/src/mesh/ConnectivityDescriptor.hpp b/src/mesh/ConnectivityDescriptor.hpp new file mode 100644 index 000000000..e20b05c11 --- /dev/null +++ b/src/mesh/ConnectivityDescriptor.hpp @@ -0,0 +1,121 @@ +#ifndef CONNECTIVITY_DESCRIPTOR_HPP +#define CONNECTIVITY_DESCRIPTOR_HPP + +#include <RefItemList.hpp> +#include <PastisTraits.hpp> +#include <ItemOfItemType.hpp> + +#include <vector> + +class ConnectivityDescriptor +{ + private: + std::vector<RefCellList> m_ref_cell_list_vector; + std::vector<RefFaceList> m_ref_face_list_vector; + std::vector<RefEdgeList> m_ref_edge_list_vector; + std::vector<RefNodeList> m_ref_node_list_vector; + + public: + std::vector<std::vector<unsigned int>> cell_to_node_vector; + std::vector<std::vector<unsigned int>> cell_to_face_vector; + std::vector<std::vector<unsigned int>> cell_to_edge_vector; + + std::vector<std::vector<unsigned int>> face_to_node_vector; + std::vector<std::vector<unsigned int>> face_to_edge_vector; + + std::vector<std::vector<unsigned int>> edge_to_node_vector; + + template <typename ItemOfItemT> + auto& itemOfItemVector() + { + if constexpr (std::is_same_v<ItemOfItemT,NodeOfCell>) { + return cell_to_node_vector; + } else if constexpr (std::is_same_v<ItemOfItemT,FaceOfCell>) { + return cell_to_face_vector; + } else if constexpr (std::is_same_v<ItemOfItemT,EdgeOfCell>) { + return cell_to_edge_vector; + } else if constexpr (std::is_same_v<ItemOfItemT,EdgeOfFace>) { + return face_to_edge_vector; + } else if constexpr (std::is_same_v<ItemOfItemT,NodeOfFace>) { + return face_to_node_vector; + } else if constexpr (std::is_same_v<ItemOfItemT,NodeOfEdge>) { + return edge_to_node_vector; + } else { + static_assert(is_false_v<ItemOfItemT>, "Unexpected item of item type"); + } + } + + std::vector<Array<bool>> cell_face_is_reversed_vector; + std::vector<Array<bool>> face_edge_is_reversed_vector; + + std::vector<CellType> cell_type_vector; + + std::vector<int> cell_number_vector; + std::vector<int> face_number_vector; + std::vector<int> edge_number_vector; + std::vector<int> node_number_vector; + + template <ItemType item_type> + const std::vector<int>& itemNumberVector() const + { + if constexpr (item_type == ItemType::cell) { + return cell_number_vector; + } else if constexpr (item_type == ItemType::face) { + return face_number_vector; + } else if constexpr (item_type == ItemType::edge) { + return edge_number_vector; + } else if constexpr (item_type == ItemType::node) { + return node_number_vector; + } else { + static_assert(is_false_item_type_v<item_type>, "Unexpected item type"); + } + } + + std::vector<int> cell_owner_vector; + std::vector<int> face_owner_vector; + std::vector<int> edge_owner_vector; + std::vector<int> node_owner_vector; + + template <ItemType item_type> + const std::vector<RefItemList<item_type>>& refItemListVector() const + { + if constexpr (item_type == ItemType::cell) { + return m_ref_cell_list_vector; + } else if constexpr (item_type == ItemType::face) { + return m_ref_face_list_vector; + } else if constexpr (item_type == ItemType::edge) { + return m_ref_edge_list_vector; + } else if constexpr (item_type == ItemType::node) { + return m_ref_node_list_vector; + } else { + static_assert(is_false_item_type_v<item_type>, "Unexpected item type"); + } + } + + template <ItemType item_type> + void addRefItemList(const RefItemList<item_type>& ref_item_list) + { + if constexpr (item_type == ItemType::cell) { + m_ref_cell_list_vector.push_back(ref_item_list); + } else if constexpr (item_type == ItemType::face) { + m_ref_face_list_vector.push_back(ref_item_list); + } else if constexpr (item_type == ItemType::edge) { + m_ref_edge_list_vector.push_back(ref_item_list); + } else if constexpr (item_type == ItemType::node) { + m_ref_node_list_vector.push_back(ref_item_list); + } else { + static_assert(is_false_item_type_v<item_type>, "Unexpected item type"); + } + } + + ConnectivityDescriptor& operator=(const ConnectivityDescriptor&) = delete; + ConnectivityDescriptor& operator=(ConnectivityDescriptor&&) = delete; + + ConnectivityDescriptor() = default; + ConnectivityDescriptor(const ConnectivityDescriptor&) = default; + ConnectivityDescriptor(ConnectivityDescriptor&&) = delete; + ~ConnectivityDescriptor() = default; +}; + + +#endif // CONNECTIVITY_DESCRIPTOR_HPP diff --git a/src/mesh/ConnectivityDispatcher.hpp b/src/mesh/ConnectivityDispatcher.hpp index 710f336a9..e0ce2e88e 100644 --- a/src/mesh/ConnectivityDispatcher.hpp +++ b/src/mesh/ConnectivityDispatcher.hpp @@ -6,6 +6,7 @@ #include <ItemValueUtils.hpp> #include <unordered_map> +#include <ConnectivityDescriptor.hpp> template <int Dimension> class ConnectivityDispatcher -- GitLab