diff --git a/src/mesh/DiamondDualMeshBuilder.cpp b/src/mesh/DiamondDualMeshBuilder.cpp index 6554cb512f0ff2d9e556575b4b1ac23bdd047e8f..b7cc33e444dce3698aa7244f7c5edd9c8ffc6cad 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 cdb0d7a1c5433692fe3e66de6aa925bf6a36f16f..2e47cfe21b4790a63e0e4aeba2fcfb9c59699286 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>&);