From cc025bdc119262233aa8520516c62f59659d95e9 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Wed, 15 Jul 2020 13:45:34 +0200 Subject: [PATCH] Simplify code Actually one avoids some useless copy/paste --- src/mesh/DiamondDualMeshBuilder.cpp | 71 +++++------------------------ src/mesh/DiamondDualMeshBuilder.hpp | 9 +--- 2 files changed, 13 insertions(+), 67 deletions(-) diff --git a/src/mesh/DiamondDualMeshBuilder.cpp b/src/mesh/DiamondDualMeshBuilder.cpp index 6554cb512..b7cc33e44 100644 --- a/src/mesh/DiamondDualMeshBuilder.cpp +++ b/src/mesh/DiamondDualMeshBuilder.cpp @@ -102,13 +102,19 @@ class MeshToDualDataMapper template <size_t Dimension> void -DiamondDualMeshBuilder::_buildDualDiamondMeshFrom( - const Mesh<Connectivity<Dimension>>& primal_mesh, - const std::shared_ptr<const Connectivity<Dimension>>& p_diamond_connectivity) +DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const std::shared_ptr<const IMesh>& p_i_mesh) { using ConnectivityType = Connectivity<Dimension>; using MeshType = Mesh<Connectivity<Dimension>>; + std::shared_ptr p_primal_mesh = std::dynamic_pointer_cast<const MeshType>(p_i_mesh); + const MeshType& primal_mesh = *p_primal_mesh; + + DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance(); + + std::shared_ptr<const ConnectivityType> p_diamond_connectivity = + manager.getDiamondDualConnectivity(primal_mesh.connectivity()); + const ConnectivityType& diamond_connectivity = *p_diamond_connectivity; const NodeValue<const TinyVector<Dimension>> primal_xr = primal_mesh.xr(); @@ -124,74 +130,21 @@ DiamondDualMeshBuilder::_buildDualDiamondMeshFrom( m_mesh = std::make_shared<MeshType>(p_diamond_connectivity, diamond_xr); } -// template <> -// void -// DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const Mesh<Connectivity<1>>& primal_mesh, -// const std::shared_ptr<const Connectivity<1>>& -// p_diamond_connectivity) -// { -// using ConnectivityType = Connectivity<1>; -// using MeshType = Mesh<Connectivity<1>>; - -// const ConnectivityType& diamond_connectivity = *p_diamond_connectivity; - -// const NodeValue<const TinyVector<1>> primal_xr = primal_mesh.xr(); -// MeshData<1>& primal_mesh_data = MeshDataManager::instance().getMeshData(primal_mesh); -// const CellValue<const TinyVector<1>> primal_xj = primal_mesh_data.xj(); - -// MeshToDualDataMapper<1> mesh_to_dual_data_mapper{primal_mesh.connectivity(), diamond_connectivity}; - -// NodeValue<TinyVector<1>> diamond_xr{diamond_connectivity}; -// mesh_to_dual_data_mapper.toDualNode(primal_xr, primal_xj, diamond_xr); - -// m_mesh = std::make_shared<MeshType>(p_diamond_connectivity, diamond_xr); -// } - DiamondDualMeshBuilder::DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>& p_mesh) { std::cout << "building DiamondDualMesh\n"; switch (p_mesh->dimension()) { case 1: { - using ConnectivityType = Connectivity<1>; - using MeshType = Mesh<ConnectivityType>; - - std::shared_ptr mesh = std::dynamic_pointer_cast<const MeshType>(p_mesh); - - DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance(); - - std::shared_ptr<const ConnectivityType> p_diamond_connectivity = - manager.getDiamondDualConnectivity(mesh->connectivity()); - - this->_buildDualDiamondMeshFrom(*mesh, p_diamond_connectivity); + this->_buildDualDiamondMeshFrom<1>(p_mesh); break; } case 2: { - using ConnectivityType = Connectivity<2>; - using MeshType = Mesh<ConnectivityType>; - - std::shared_ptr mesh = std::dynamic_pointer_cast<const MeshType>(p_mesh); - - DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance(); - - std::shared_ptr<const ConnectivityType> p_diamond_connectivity = - manager.getDiamondDualConnectivity(mesh->connectivity()); - - this->_buildDualDiamondMeshFrom(*mesh, p_diamond_connectivity); + this->_buildDualDiamondMeshFrom<2>(p_mesh); break; } case 3: { - using ConnectivityType = Connectivity<3>; - using MeshType = Mesh<ConnectivityType>; - - std::shared_ptr mesh = std::dynamic_pointer_cast<const MeshType>(p_mesh); - - DiamondDualConnectivityManager& manager = DiamondDualConnectivityManager::instance(); - - std::shared_ptr<const ConnectivityType> p_diamond_connectivity = - manager.getDiamondDualConnectivity(mesh->connectivity()); - - this->_buildDualDiamondMeshFrom(*mesh, p_diamond_connectivity); + this->_buildDualDiamondMeshFrom<3>(p_mesh); break; } default: { diff --git a/src/mesh/DiamondDualMeshBuilder.hpp b/src/mesh/DiamondDualMeshBuilder.hpp index cdb0d7a1c..2e47cfe21 100644 --- a/src/mesh/DiamondDualMeshBuilder.hpp +++ b/src/mesh/DiamondDualMeshBuilder.hpp @@ -5,18 +5,11 @@ #include <memory> -template <size_t> -class Connectivity; - -template <typename ConnectivityType> -class Mesh; - class DiamondDualMeshBuilder : public MeshBuilderBase { private: template <size_t Dimension> - void _buildDualDiamondMeshFrom(const Mesh<Connectivity<Dimension>>&, - const std::shared_ptr<const Connectivity<Dimension>>&); + void _buildDualDiamondMeshFrom(const std::shared_ptr<const IMesh>&); friend class DiamondDualMeshManager; DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>&); -- GitLab