diff --git a/src/mesh/Stencil.hpp b/src/mesh/Stencil.hpp index 900c1b4d2e5dad1ff338c7c7714fcbe5f498cfb7..eb4864c7d064ab45b934aa70639697de18cc989e 100644 --- a/src/mesh/Stencil.hpp +++ b/src/mesh/Stencil.hpp @@ -8,8 +8,38 @@ class Stencil { public: - using BoundaryDescriptorStencilList = - std::vector<std::pair<std::shared_ptr<const IBoundaryDescriptor>, ConnectivityMatrix>>; + class BoundaryDescriptorStencil + { + private: + std::shared_ptr<const IBoundaryDescriptor> m_iboundary_descriptor; + ConnectivityMatrix m_stencil; + + public: + const IBoundaryDescriptor& + boundaryDescriptor() const + { + return *m_iboundary_descriptor; + } + + const ConnectivityMatrix& + stencil() const + { + return m_stencil; + } + + BoundaryDescriptorStencil(const std::shared_ptr<const IBoundaryDescriptor>& iboundary_descriptor, + const ConnectivityMatrix& stencil) + : m_iboundary_descriptor{iboundary_descriptor}, m_stencil{stencil} + {} + + BoundaryDescriptorStencil(const BoundaryDescriptorStencil&) = default; + BoundaryDescriptorStencil(BoundaryDescriptorStencil&&) = default; + + BoundaryDescriptorStencil() = default; + ~BoundaryDescriptorStencil() = default; + }; + + using BoundaryDescriptorStencilList = std::vector<BoundaryDescriptorStencil>; private: ConnectivityMatrix m_stencil; diff --git a/src/mesh/StencilBuilder.cpp b/src/mesh/StencilBuilder.cpp index ddff37e0cb6a693999701b83eb5418ef35644af8..30e922ec24b8303b9dd279ac702c154648a26b29 100644 --- a/src/mesh/StencilBuilder.cpp +++ b/src/mesh/StencilBuilder.cpp @@ -318,9 +318,10 @@ StencilBuilder::_build(const ConnectivityType& connectivity, size_t i = 0; for (auto&& p_boundary_descriptor : symmetry_boundary_descriptor_list) { symmetry_boundary_stencil_list.emplace_back( - std::make_pair(p_boundary_descriptor, - ConnectivityMatrix{symmetry_row_map_list[i], - convert_to_array(symmetry_column_indices_vector[i])})); + Stencil::BoundaryDescriptorStencil{p_boundary_descriptor, + ConnectivityMatrix{symmetry_row_map_list[i], + convert_to_array( + symmetry_column_indices_vector[i])}}); ++i; } } diff --git a/src/scheme/PolynomialReconstruction.cpp b/src/scheme/PolynomialReconstruction.cpp index b0cacf9d9768a73e5b1127d91569c0832254a523..7bcf3a5c68407bc0fb50d6cf46560de4178b635f 100644 --- a/src/scheme/PolynomialReconstruction.cpp +++ b/src/scheme/PolynomialReconstruction.cpp @@ -785,7 +785,7 @@ PolynomialReconstruction::_build( auto stencil_cell_list = stencil[cell_id]; size_t stencil_size = stencil_cell_list.size(); for (size_t i = 0; i < m_descriptor.symmetryBoundaryDescriptorList().size(); ++i) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i].stencil(); stencil_size += ghost_stencil[cell_id].size(); } @@ -898,7 +898,7 @@ PolynomialReconstruction::_build( } for (size_t i_symmetry = 0; i_symmetry < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].stencil(); auto ghost_cell_list = ghost_stencil[cell_j_id]; for (size_t i = 0; i < ghost_cell_list.size(); ++i, ++index) { const CellId cell_i_id = ghost_cell_list[i]; @@ -954,7 +954,7 @@ PolynomialReconstruction::_build( } for (size_t i_symmetry = 0; i_symmetry < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].stencil(); auto ghost_cell_list = ghost_stencil[cell_j_id]; for (size_t i = 0; i < ghost_cell_list.size(); ++i, ++index) { const CellId cell_i_id = ghost_cell_list[i]; @@ -989,7 +989,7 @@ PolynomialReconstruction::_build( } } for (size_t i_symmetry = 0; i_symmetry < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].stencil(); auto ghost_cell_list = ghost_stencil[cell_j_id]; const Rd& origin = symmetry_origin_list[i_symmetry]; @@ -1034,7 +1034,7 @@ PolynomialReconstruction::_build( } } for (size_t i_symmetry = 0; i_symmetry < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].stencil(); auto ghost_cell_list = ghost_stencil[cell_j_id]; const Rd& origin = symmetry_origin_list[i_symmetry]; @@ -1079,7 +1079,7 @@ PolynomialReconstruction::_build( } } for (size_t i_symmetry = 0; i_symmetry < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].stencil(); auto ghost_cell_list = ghost_stencil[cell_j_id]; const Rd& origin = symmetry_origin_list[i_symmetry]; @@ -1120,7 +1120,7 @@ PolynomialReconstruction::_build( } } for (size_t i_symmetry = 0; i_symmetry < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry) { - auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].second; + auto& ghost_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry].stencil(); auto ghost_cell_list = ghost_stencil[cell_j_id]; const Rd& origin = symmetry_origin_list[i_symmetry]; diff --git a/tests/test_StencilBuilder.cpp b/tests/test_StencilBuilder.cpp index 0ef8d97ba9ef690ca4420a49905881e5ccbc49b3..754a443a7d63d391807d8133110e04ec8b2b224f 100644 --- a/tests/test_StencilBuilder.cpp +++ b/tests/test_StencilBuilder.cpp @@ -130,7 +130,7 @@ TEST_CASE("StencilBuilder", "[mesh]") is_empty &= (stencil[cell_id].size() == 0); for (size_t i_symmetry_stencil = 0; i_symmetry_stencil < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry_stencil) { - is_empty &= (stencil.symmetryBoundaryStencilList()[i_symmetry_stencil].second[cell_id].size() == 0); + is_empty &= (stencil.symmetryBoundaryStencilList()[i_symmetry_stencil].stencil()[cell_id].size() == 0); } } } @@ -148,10 +148,10 @@ TEST_CASE("StencilBuilder", "[mesh]") for (size_t i_symmetry_stencil = 0; i_symmetry_stencil < stencil.symmetryBoundaryStencilList().size(); ++i_symmetry_stencil) { - auto p_boundary_descriptor = stencil.symmetryBoundaryStencilList()[i_symmetry_stencil].first; - const IBoundaryDescriptor& boundary_descriptor = *p_boundary_descriptor; + const IBoundaryDescriptor& boundary_descriptor = + stencil.symmetryBoundaryStencilList()[i_symmetry_stencil].boundaryDescriptor(); - auto boundary_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry_stencil].second; + auto boundary_stencil = stencil.symmetryBoundaryStencilList()[i_symmetry_stencil].stencil(); auto boundary_node_list = getMeshFlatNodeBoundary(mesh, boundary_descriptor); CellValue<bool> boundary_cell{mesh.connectivity()};