From 86b9863d023e91cb8b85475f9eb33c0754e8160c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Tue, 11 Jan 2022 16:58:12 +0100 Subject: [PATCH] Separate and factorize dual 1d mesh builder It is now shared in 1d with median and diamond dual meshes --- src/language/modules/MeshModule.cpp | 12 +++--- src/mesh/CMakeLists.txt | 1 + src/mesh/DiamondDualMeshBuilder.cpp | 22 +++++------ src/mesh/DiamondDualMeshBuilder.hpp | 4 +- src/mesh/Dual1DMeshBuilder.cpp | 50 ++++++++++++++++++++++++ src/mesh/Dual1DMeshBuilder.hpp | 20 ++++++++++ src/mesh/DualMeshManager.cpp | 60 +++++++++++++++++++++-------- src/mesh/DualMeshManager.hpp | 8 ++-- src/mesh/MedianDualMeshBuilder.cpp | 17 +++----- src/mesh/MedianDualMeshBuilder.hpp | 4 +- tests/test_CellIntegrator.cpp | 2 +- tests/test_DualMeshManager.cpp | 16 ++++---- tests/test_EdgeIntegrator.cpp | 2 +- tests/test_FaceIntegrator.cpp | 2 +- 14 files changed, 154 insertions(+), 66 deletions(-) create mode 100644 src/mesh/Dual1DMeshBuilder.cpp create mode 100644 src/mesh/Dual1DMeshBuilder.hpp diff --git a/src/language/modules/MeshModule.cpp b/src/language/modules/MeshModule.cpp index bf2f0f0af..153c1be11 100644 --- a/src/language/modules/MeshModule.cpp +++ b/src/language/modules/MeshModule.cpp @@ -146,19 +146,19 @@ MeshModule::MeshModule() using MeshType = Mesh<Connectivity<1>>; std::shared_ptr p_mesh = std::dynamic_pointer_cast<const MeshType>(i_mesh); - return DualMeshManager::instance().getDiamondDualMesh(p_mesh); + return DualMeshManager::instance().getDiamondDualMesh(*p_mesh); } case 2: { using MeshType = Mesh<Connectivity<2>>; std::shared_ptr p_mesh = std::dynamic_pointer_cast<const MeshType>(i_mesh); - return DualMeshManager::instance().getDiamondDualMesh(p_mesh); + return DualMeshManager::instance().getDiamondDualMesh(*p_mesh); } case 3: { using MeshType = Mesh<Connectivity<3>>; std::shared_ptr p_mesh = std::dynamic_pointer_cast<const MeshType>(i_mesh); - return DualMeshManager::instance().getDiamondDualMesh(p_mesh); + return DualMeshManager::instance().getDiamondDualMesh(*p_mesh); } default: { throw UnexpectedError("invalid dimension"); @@ -178,19 +178,19 @@ MeshModule::MeshModule() using MeshType = Mesh<Connectivity<1>>; std::shared_ptr p_mesh = std::dynamic_pointer_cast<const MeshType>(i_mesh); - return DualMeshManager::instance().getMedianDualMesh(p_mesh); + return DualMeshManager::instance().getMedianDualMesh(*p_mesh); } case 2: { using MeshType = Mesh<Connectivity<2>>; std::shared_ptr p_mesh = std::dynamic_pointer_cast<const MeshType>(i_mesh); - return DualMeshManager::instance().getMedianDualMesh(p_mesh); + return DualMeshManager::instance().getMedianDualMesh(*p_mesh); } case 3: { using MeshType = Mesh<Connectivity<3>>; std::shared_ptr p_mesh = std::dynamic_pointer_cast<const MeshType>(i_mesh); - return DualMeshManager::instance().getMedianDualMesh(p_mesh); + return DualMeshManager::instance().getMedianDualMesh(*p_mesh); } default: { throw UnexpectedError("invalid dimension"); diff --git a/src/mesh/CMakeLists.txt b/src/mesh/CMakeLists.txt index b85297c51..7634b1134 100644 --- a/src/mesh/CMakeLists.txt +++ b/src/mesh/CMakeLists.txt @@ -10,6 +10,7 @@ add_library( DiamondDualConnectivityBuilder.cpp DiamondDualMeshBuilder.cpp Dual1DConnectivityBuilder.cpp + Dual1DMeshBuilder.cpp DualConnectivityManager.cpp DualMeshManager.cpp GmshReader.cpp diff --git a/src/mesh/DiamondDualMeshBuilder.cpp b/src/mesh/DiamondDualMeshBuilder.cpp index 5db07c20f..6f4c141cd 100644 --- a/src/mesh/DiamondDualMeshBuilder.cpp +++ b/src/mesh/DiamondDualMeshBuilder.cpp @@ -7,17 +7,17 @@ #include <mesh/MeshData.hpp> #include <mesh/MeshDataManager.hpp> #include <mesh/PrimalToDiamondDualConnectivityDataMapper.hpp> -#include <mesh/PrimalToDual1DConnectivityDataMapper.hpp> template <size_t Dimension> void -DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const std::shared_ptr<const IMesh>& p_i_mesh) +DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const IMesh& i_mesh) { + static_assert(Dimension > 1); + 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; + const MeshType& primal_mesh = dynamic_cast<const MeshType&>(i_mesh); DualConnectivityManager& manager = DualConnectivityManager::instance(); @@ -40,25 +40,21 @@ DiamondDualMeshBuilder::_buildDualDiamondMeshFrom(const std::shared_ptr<const IM m_mesh = std::make_shared<MeshType>(p_diamond_connectivity, diamond_xr); } -DiamondDualMeshBuilder::DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>& p_mesh) +DiamondDualMeshBuilder::DiamondDualMeshBuilder(const IMesh& i_mesh) { std::cout << "building DiamondDualMesh\n"; - switch (p_mesh->dimension()) { - case 1: { - this->_buildDualDiamondMeshFrom<1>(p_mesh); - break; - } + switch (i_mesh.dimension()) { case 2: { - this->_buildDualDiamondMeshFrom<2>(p_mesh); + this->_buildDualDiamondMeshFrom<2>(i_mesh); break; } case 3: { - this->_buildDualDiamondMeshFrom<3>(p_mesh); + this->_buildDualDiamondMeshFrom<3>(i_mesh); break; } default: { - throw UnexpectedError("invalid mesh dimension: " + std::to_string(p_mesh->dimension())); + throw UnexpectedError("invalid mesh dimension: " + std::to_string(i_mesh.dimension())); } } } diff --git a/src/mesh/DiamondDualMeshBuilder.hpp b/src/mesh/DiamondDualMeshBuilder.hpp index a380bcbba..1dc670638 100644 --- a/src/mesh/DiamondDualMeshBuilder.hpp +++ b/src/mesh/DiamondDualMeshBuilder.hpp @@ -9,10 +9,10 @@ class DiamondDualMeshBuilder : public MeshBuilderBase { private: template <size_t Dimension> - void _buildDualDiamondMeshFrom(const std::shared_ptr<const IMesh>&); + void _buildDualDiamondMeshFrom(const IMesh&); friend class DualMeshManager; - DiamondDualMeshBuilder(const std::shared_ptr<const IMesh>&); + DiamondDualMeshBuilder(const IMesh&); public: ~DiamondDualMeshBuilder() = default; diff --git a/src/mesh/Dual1DMeshBuilder.cpp b/src/mesh/Dual1DMeshBuilder.cpp new file mode 100644 index 000000000..0fd998478 --- /dev/null +++ b/src/mesh/Dual1DMeshBuilder.cpp @@ -0,0 +1,50 @@ +#include <mesh/Dual1DMeshBuilder.hpp> + +#include <mesh/Connectivity.hpp> +#include <mesh/DualConnectivityManager.hpp> +#include <mesh/ItemValueUtils.hpp> +#include <mesh/Mesh.hpp> +#include <mesh/MeshData.hpp> +#include <mesh/MeshDataManager.hpp> +#include <mesh/PrimalToDiamondDualConnectivityDataMapper.hpp> +#include <mesh/PrimalToDual1DConnectivityDataMapper.hpp> + +void +Dual1DMeshBuilder::_buildDual1DMeshFrom(const IMesh& i_mesh) +{ + using ConnectivityType = Connectivity<1>; + using MeshType = Mesh<Connectivity<1>>; + + const MeshType& primal_mesh = dynamic_cast<const MeshType&>(i_mesh); + + DualConnectivityManager& manager = DualConnectivityManager::instance(); + + std::shared_ptr<const ConnectivityType> p_dual_connectivity = + manager.getDiamondDualConnectivity(primal_mesh.connectivity()); + + const ConnectivityType& dual_connectivity = *p_dual_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(); + + std::shared_ptr primal_to_dual_1d_connectivity_data_mapper = + manager.getPrimalToDual1DConnectivityDataMapper(primal_mesh.connectivity()); + + NodeValue<TinyVector<1>> dual_xr{dual_connectivity}; + primal_to_dual_1d_connectivity_data_mapper->toDualNode(primal_xr, primal_xj, dual_xr); + + m_mesh = std::make_shared<MeshType>(p_dual_connectivity, dual_xr); +} + +Dual1DMeshBuilder::Dual1DMeshBuilder(const IMesh& i_mesh) +{ + std::cout << "building Dual1DMesh\n"; + + if (i_mesh.dimension() == 1) { + this->_buildDual1DMeshFrom(i_mesh); + } else { + throw UnexpectedError("invalid mesh dimension: " + std::to_string(i_mesh.dimension())); + } +} diff --git a/src/mesh/Dual1DMeshBuilder.hpp b/src/mesh/Dual1DMeshBuilder.hpp new file mode 100644 index 000000000..d2b271aee --- /dev/null +++ b/src/mesh/Dual1DMeshBuilder.hpp @@ -0,0 +1,20 @@ +#ifndef DUAL_1D_MESH_BUILDER_HPP +#define DUAL_1D_MESH_BUILDER_HPP + +#include <mesh/MeshBuilderBase.hpp> + +#include <memory> + +class Dual1DMeshBuilder : public MeshBuilderBase +{ + private: + void _buildDual1DMeshFrom(const IMesh&); + + friend class DualMeshManager; + Dual1DMeshBuilder(const IMesh&); + + public: + ~Dual1DMeshBuilder() = default; +}; + +#endif // DUAL_1D_MESH_BUILDER_HPP diff --git a/src/mesh/DualMeshManager.cpp b/src/mesh/DualMeshManager.cpp index 11f09ff21..86384b6ad 100644 --- a/src/mesh/DualMeshManager.cpp +++ b/src/mesh/DualMeshManager.cpp @@ -2,6 +2,7 @@ #include <mesh/Connectivity.hpp> #include <mesh/DiamondDualMeshBuilder.hpp> +#include <mesh/Dual1DMeshBuilder.hpp> #include <mesh/MedianDualMeshBuilder.hpp> #include <mesh/Mesh.hpp> #include <utils/Exceptions.hpp> @@ -55,11 +56,35 @@ DualMeshManager::deleteMesh(const IMesh* p_mesh) } while (has_removed); } +std::shared_ptr<const Mesh<Connectivity<1>>> +DualMeshManager::getDual1DMesh(const Mesh<Connectivity<1>>& mesh) +{ + const IMesh* p_mesh = &mesh; + + auto key = std::make_pair(DualMeshType::Dual1D, p_mesh); + if (auto i_mesh_data = m_mesh_to_dual_mesh_map.find(key); i_mesh_data != m_mesh_to_dual_mesh_map.end()) { + return std::dynamic_pointer_cast<const Mesh<Connectivity<1>>>(i_mesh_data->second); + } else { + Dual1DMeshBuilder builder{mesh}; + + m_mesh_to_dual_mesh_map[key] = builder.mesh(); + return std::dynamic_pointer_cast<const Mesh<Connectivity<1>>>(builder.mesh()); + } +} + +template <> +std::shared_ptr<const Mesh<Connectivity<1>>> +DualMeshManager::getMedianDualMesh(const Mesh<Connectivity<1>>& mesh) +{ + return this->getDual1DMesh(mesh); +} + template <size_t Dimension> std::shared_ptr<const Mesh<Connectivity<Dimension>>> -DualMeshManager::getMedianDualMesh(std::shared_ptr<const Mesh<Connectivity<Dimension>>> mesh) +DualMeshManager::getMedianDualMesh(const Mesh<Connectivity<Dimension>>& mesh) { - const IMesh* p_mesh = mesh.get(); + static_assert(Dimension > 1); + const IMesh* p_mesh = &mesh; auto key = std::make_pair(DualMeshType::Median, p_mesh); if (auto i_mesh_data = m_mesh_to_dual_mesh_map.find(key); i_mesh_data != m_mesh_to_dual_mesh_map.end()) { @@ -72,11 +97,23 @@ DualMeshManager::getMedianDualMesh(std::shared_ptr<const Mesh<Connectivity<Dimen } } +template std::shared_ptr<const Mesh<Connectivity<2>>> DualMeshManager::getMedianDualMesh(const Mesh<Connectivity<2>>&); +template std::shared_ptr<const Mesh<Connectivity<3>>> DualMeshManager::getMedianDualMesh(const Mesh<Connectivity<3>>&); + +template <> +std::shared_ptr<const Mesh<Connectivity<1>>> +DualMeshManager::getDiamondDualMesh(const Mesh<Connectivity<1>>& mesh) +{ + return this->getDual1DMesh(mesh); +} + template <size_t Dimension> std::shared_ptr<const Mesh<Connectivity<Dimension>>> -DualMeshManager::getDiamondDualMesh(std::shared_ptr<const Mesh<Connectivity<Dimension>>> mesh) +DualMeshManager::getDiamondDualMesh(const Mesh<Connectivity<Dimension>>& mesh) { - const IMesh* p_mesh = mesh.get(); + static_assert(Dimension > 1); + + const IMesh* p_mesh = &mesh; auto key = std::make_pair(DualMeshType::Diamond, p_mesh); if (auto i_mesh_data = m_mesh_to_dual_mesh_map.find(key); i_mesh_data != m_mesh_to_dual_mesh_map.end()) { @@ -89,16 +126,5 @@ DualMeshManager::getDiamondDualMesh(std::shared_ptr<const Mesh<Connectivity<Dime } } -template std::shared_ptr<const Mesh<Connectivity<1>>> DualMeshManager::getMedianDualMesh( - std::shared_ptr<const Mesh<Connectivity<1>>>); -template std::shared_ptr<const Mesh<Connectivity<2>>> DualMeshManager::getMedianDualMesh( - std::shared_ptr<const Mesh<Connectivity<2>>>); -template std::shared_ptr<const Mesh<Connectivity<3>>> DualMeshManager::getMedianDualMesh( - std::shared_ptr<const Mesh<Connectivity<3>>>); - -template std::shared_ptr<const Mesh<Connectivity<1>>> DualMeshManager::getDiamondDualMesh( - std::shared_ptr<const Mesh<Connectivity<1>>>); -template std::shared_ptr<const Mesh<Connectivity<2>>> DualMeshManager::getDiamondDualMesh( - std::shared_ptr<const Mesh<Connectivity<2>>>); -template std::shared_ptr<const Mesh<Connectivity<3>>> DualMeshManager::getDiamondDualMesh( - std::shared_ptr<const Mesh<Connectivity<3>>>); +template std::shared_ptr<const Mesh<Connectivity<2>>> DualMeshManager::getDiamondDualMesh(const Mesh<Connectivity<2>>&); +template std::shared_ptr<const Mesh<Connectivity<3>>> DualMeshManager::getDiamondDualMesh(const Mesh<Connectivity<3>>&); diff --git a/src/mesh/DualMeshManager.hpp b/src/mesh/DualMeshManager.hpp index 77c14d5e4..7b6358b70 100644 --- a/src/mesh/DualMeshManager.hpp +++ b/src/mesh/DualMeshManager.hpp @@ -52,13 +52,13 @@ class DualMeshManager void deleteMesh(const IMesh*); + std::shared_ptr<const Mesh<Connectivity<1>>> getDual1DMesh(const Mesh<Connectivity<1>>&); + template <size_t Dimension> - std::shared_ptr<const Mesh<Connectivity<Dimension>>> getDiamondDualMesh( - std::shared_ptr<const Mesh<Connectivity<Dimension>>>); + std::shared_ptr<const Mesh<Connectivity<Dimension>>> getDiamondDualMesh(const Mesh<Connectivity<Dimension>>&); template <size_t Dimension> - std::shared_ptr<const Mesh<Connectivity<Dimension>>> getMedianDualMesh( - std::shared_ptr<const Mesh<Connectivity<Dimension>>>); + std::shared_ptr<const Mesh<Connectivity<Dimension>>> getMedianDualMesh(const Mesh<Connectivity<Dimension>>&); }; #endif // DUAL_MESH_MANAGER_HPP diff --git a/src/mesh/MedianDualMeshBuilder.cpp b/src/mesh/MedianDualMeshBuilder.cpp index 87af0be24..1dde88902 100644 --- a/src/mesh/MedianDualMeshBuilder.cpp +++ b/src/mesh/MedianDualMeshBuilder.cpp @@ -10,15 +10,14 @@ template <size_t Dimension> void -MedianDualMeshBuilder::_buildMedianDualMeshFrom(const std::shared_ptr<const IMesh>& p_i_mesh) +MedianDualMeshBuilder::_buildMedianDualMeshFrom(const IMesh& i_mesh) { static_assert(Dimension > 1); 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; + const MeshType& primal_mesh = dynamic_cast<const MeshType&>(i_mesh); DualConnectivityManager& manager = DualConnectivityManager::instance(); @@ -42,15 +41,11 @@ MedianDualMeshBuilder::_buildMedianDualMeshFrom(const std::shared_ptr<const IMes m_mesh = std::make_shared<MeshType>(p_dual_connectivity, dual_xr); } -MedianDualMeshBuilder::MedianDualMeshBuilder(const std::shared_ptr<const IMesh>& p_mesh) +MedianDualMeshBuilder::MedianDualMeshBuilder(const IMesh& i_mesh) { - switch (p_mesh->dimension()) { - case 1: { - throw NotImplementedError("must be treated as a special common case with diamond dual meshes"); - break; - } + switch (i_mesh.dimension()) { case 2: { - this->_buildMedianDualMeshFrom<2>(p_mesh); + this->_buildMedianDualMeshFrom<2>(i_mesh); break; } case 3: { @@ -58,7 +53,7 @@ MedianDualMeshBuilder::MedianDualMeshBuilder(const std::shared_ptr<const IMesh>& break; } default: { - throw UnexpectedError("invalid mesh dimension: " + std::to_string(p_mesh->dimension())); + throw UnexpectedError("invalid mesh dimension: " + std::to_string(i_mesh.dimension())); } } } diff --git a/src/mesh/MedianDualMeshBuilder.hpp b/src/mesh/MedianDualMeshBuilder.hpp index 0d649c509..6f8f1842c 100644 --- a/src/mesh/MedianDualMeshBuilder.hpp +++ b/src/mesh/MedianDualMeshBuilder.hpp @@ -9,10 +9,10 @@ class MedianDualMeshBuilder : public MeshBuilderBase { private: template <size_t Dimension> - void _buildMedianDualMeshFrom(const std::shared_ptr<const IMesh>&); + void _buildMedianDualMeshFrom(const IMesh&); friend class DualMeshManager; - MedianDualMeshBuilder(const std::shared_ptr<const IMesh>&); + MedianDualMeshBuilder(const IMesh&); public: ~MedianDualMeshBuilder() = default; diff --git a/tests/test_CellIntegrator.cpp b/tests/test_CellIntegrator.cpp index a0f19555c..49f750afb 100644 --- a/tests/test_CellIntegrator.cpp +++ b/tests/test_CellIntegrator.cpp @@ -493,7 +493,7 @@ TEST_CASE("CellIntegrator", "[scheme]") std::vector<std::pair<std::string, decltype(hybrid_mesh)>> mesh_list; mesh_list.push_back(std::make_pair("hybrid mesh", hybrid_mesh)); - mesh_list.push_back(std::make_pair("diamond mesh", DualMeshManager::instance().getDiamondDualMesh(hybrid_mesh))); + mesh_list.push_back(std::make_pair("diamond mesh", DualMeshManager::instance().getDiamondDualMesh(*hybrid_mesh))); for (auto mesh_info : mesh_list) { auto mesh_name = mesh_info.first; diff --git a/tests/test_DualMeshManager.cpp b/tests/test_DualMeshManager.cpp index 6e24f7aa9..e5c8dbcf8 100644 --- a/tests/test_DualMeshManager.cpp +++ b/tests/test_DualMeshManager.cpp @@ -18,12 +18,12 @@ TEST_CASE("DualMeshManager", "[mesh]") SECTION("diamond dual mesh access") { - std::shared_ptr p_diamond_dual_mesh = DualMeshManager::instance().getDiamondDualMesh(mesh); + std::shared_ptr p_diamond_dual_mesh = DualMeshManager::instance().getDiamondDualMesh(*mesh); const auto ref_counter = p_diamond_dual_mesh.use_count(); { - std::shared_ptr p_diamond_dual_mesh2 = DualMeshManager::instance().getDiamondDualMesh(mesh); + std::shared_ptr p_diamond_dual_mesh2 = DualMeshManager::instance().getDiamondDualMesh(*mesh); REQUIRE(p_diamond_dual_mesh == p_diamond_dual_mesh2); REQUIRE(p_diamond_dual_mesh.use_count() == ref_counter + 1); @@ -40,7 +40,7 @@ TEST_CASE("DualMeshManager", "[mesh]") REQUIRE(p_diamond_dual_mesh.use_count() == ref_counter - 1); // A new dual mesh is built - std::shared_ptr p_diamond_dual_mesh_rebuilt = DualMeshManager::instance().getDiamondDualMesh(mesh); + std::shared_ptr p_diamond_dual_mesh_rebuilt = DualMeshManager::instance().getDiamondDualMesh(*mesh); REQUIRE(p_diamond_dual_mesh != p_diamond_dual_mesh_rebuilt); REQUIRE(p_diamond_dual_mesh.get() != p_diamond_dual_mesh_rebuilt.get()); @@ -51,12 +51,12 @@ TEST_CASE("DualMeshManager", "[mesh]") SECTION("median dual mesh access") { - std::shared_ptr p_median_dual_mesh = DualMeshManager::instance().getMedianDualMesh(mesh); + std::shared_ptr p_median_dual_mesh = DualMeshManager::instance().getMedianDualMesh(*mesh); const auto ref_counter = p_median_dual_mesh.use_count(); { - std::shared_ptr p_median_dual_mesh2 = DualMeshManager::instance().getMedianDualMesh(mesh); + std::shared_ptr p_median_dual_mesh2 = DualMeshManager::instance().getMedianDualMesh(*mesh); REQUIRE(p_median_dual_mesh == p_median_dual_mesh2); REQUIRE(p_median_dual_mesh.use_count() == ref_counter + 1); @@ -73,7 +73,7 @@ TEST_CASE("DualMeshManager", "[mesh]") REQUIRE(p_median_dual_mesh.use_count() == ref_counter - 1); // A new dual mesh is built - std::shared_ptr p_median_dual_mesh_rebuilt = DualMeshManager::instance().getMedianDualMesh(mesh); + std::shared_ptr p_median_dual_mesh_rebuilt = DualMeshManager::instance().getMedianDualMesh(*mesh); REQUIRE(p_median_dual_mesh != p_median_dual_mesh_rebuilt); REQUIRE(p_median_dual_mesh.get() != p_median_dual_mesh_rebuilt.get()); @@ -84,8 +84,8 @@ TEST_CASE("DualMeshManager", "[mesh]") SECTION("check multiple dual mesh using/freeing") { - std::shared_ptr p_median_dual_mesh = DualMeshManager::instance().getMedianDualMesh(mesh); - std::shared_ptr p_diamond_dual_mesh = DualMeshManager::instance().getDiamondDualMesh(mesh); + std::shared_ptr p_median_dual_mesh = DualMeshManager::instance().getMedianDualMesh(*mesh); + std::shared_ptr p_diamond_dual_mesh = DualMeshManager::instance().getDiamondDualMesh(*mesh); const auto median_ref_counter = p_median_dual_mesh.use_count(); const auto diamond_ref_counter = p_diamond_dual_mesh.use_count(); diff --git a/tests/test_EdgeIntegrator.cpp b/tests/test_EdgeIntegrator.cpp index dbfc74d49..f8ea09cee 100644 --- a/tests/test_EdgeIntegrator.cpp +++ b/tests/test_EdgeIntegrator.cpp @@ -30,7 +30,7 @@ TEST_CASE("EdgeIntegrator", "[scheme]") std::vector<std::pair<std::string, decltype(hybrid_mesh)>> mesh_list; mesh_list.push_back(std::make_pair("hybrid mesh", hybrid_mesh)); - mesh_list.push_back(std::make_pair("diamond mesh", DualMeshManager::instance().getDiamondDualMesh(hybrid_mesh))); + mesh_list.push_back(std::make_pair("diamond mesh", DualMeshManager::instance().getDiamondDualMesh(*hybrid_mesh))); for (auto mesh_info : mesh_list) { auto mesh_name = mesh_info.first; diff --git a/tests/test_FaceIntegrator.cpp b/tests/test_FaceIntegrator.cpp index 4afe3f9dc..184f1a8f9 100644 --- a/tests/test_FaceIntegrator.cpp +++ b/tests/test_FaceIntegrator.cpp @@ -258,7 +258,7 @@ TEST_CASE("FaceIntegrator", "[scheme]") std::vector<std::pair<std::string, decltype(hybrid_mesh)>> mesh_list; mesh_list.push_back(std::make_pair("hybrid mesh", hybrid_mesh)); - mesh_list.push_back(std::make_pair("diamond mesh", DualMeshManager::instance().getDiamondDualMesh(hybrid_mesh))); + mesh_list.push_back(std::make_pair("diamond mesh", DualMeshManager::instance().getDiamondDualMesh(*hybrid_mesh))); for (auto mesh_info : mesh_list) { auto mesh_name = mesh_info.first; -- GitLab