From 5ca7b2348ab497f45f9049fce2acc28f9bbff80d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Mon, 15 Nov 2021 16:04:38 +0100 Subject: [PATCH] Add an unordered 1d mesh to the mesh database The aim of this mesh is to avoid the particular situation of the generated 1d mesh. --- tests/MeshDataBaseForTests.cpp | 110 ++++++++++++++++++++++++++++++++- tests/MeshDataBaseForTests.hpp | 32 +++++++++- 2 files changed, 138 insertions(+), 4 deletions(-) diff --git a/tests/MeshDataBaseForTests.cpp b/tests/MeshDataBaseForTests.cpp index 350dce0ff..b58cc22e8 100644 --- a/tests/MeshDataBaseForTests.cpp +++ b/tests/MeshDataBaseForTests.cpp @@ -21,8 +21,9 @@ MeshDataBaseForTests::MeshDataBaseForTests() m_cartesian_3d_mesh = std::dynamic_pointer_cast<const Mesh<Connectivity<3>>>( CartesianMeshBuilder{TinyVector<3>{0, 1, 0}, TinyVector<3>{2, -1, 3}, TinyVector<3, size_t>{6, 7, 4}}.mesh()); - m_hybrid_2d_mesh = _buildHybrid2dMesh(); - m_hybrid_3d_mesh = _buildHybrid3dMesh(); + m_unordered_1d_mesh = _buildUnordered1dMesh(); + m_hybrid_2d_mesh = _buildHybrid2dMesh(); + m_hybrid_3d_mesh = _buildHybrid3dMesh(); } const MeshDataBaseForTests& @@ -64,6 +65,12 @@ MeshDataBaseForTests::cartesian3DMesh() const return m_cartesian_3d_mesh; } +std::shared_ptr<const Mesh<Connectivity<1>>> +MeshDataBaseForTests::unordered1DMesh() const +{ + return m_unordered_1d_mesh; +} + std::shared_ptr<const Mesh<Connectivity<2>>> MeshDataBaseForTests::hybrid2DMesh() const { @@ -76,6 +83,105 @@ MeshDataBaseForTests::hybrid3DMesh() const return m_hybrid_3d_mesh; } +std::shared_ptr<const Mesh<Connectivity<1>>> +MeshDataBaseForTests::_buildUnordered1dMesh() +{ + const std::string filename = std::filesystem::path{PUGS_BINARY_DIR}.append("tests").append("unordered-1d.msh"); + if (parallel::rank() == 0) { + std::ofstream fout(filename); + fout << R"($MeshFormat +2.2 0 8 +$EndMeshFormat +$PhysicalNames +4 +0 1 "XMIN" +0 2 "XMAX" +1 3 "LEFT" +1 4 "RIGHT" +$EndPhysicalNames +$Nodes +35 +1 0 0 0 +2 -1 0 0 +3 1 0 0 +4 0.03246387076421061 0 0 +5 0.07692961499792127 0 0 +6 0.1378343163027127 0 0 +7 0.2212554508344625 0 0 +8 0.3355173320316702 0 0 +9 0.4920217492706127 0 0 +10 0.7063857794730655 0 0 +11 -0.9513615311521172 0 0 +12 -0.9036693300347614 0 0 +13 -0.8569049934960202 0 0 +14 -0.8110504814343311 0 0 +15 -0.7660880891035384 0 0 +16 -0.7220004662902741 0 0 +17 -0.6787705699229041 0 0 +18 -0.6363817403249178 0 0 +19 -0.5948175927947426 0 0 +20 -0.5540620983944274 0 0 +21 -0.5140995098187926 0 0 +22 -0.4749144219806904 0 0 +23 -0.4364916774353312 0 0 +24 -0.3988164798351664 0 0 +25 -0.3618742567441507 0 0 +26 -0.3256507606537927 0 0 +27 -0.2901320091863738 0 0 +28 -0.2553042883413312 0 0 +29 -0.2211541538737678 0 0 +30 -0.1876684263237806 0 0 +31 -0.1548341743437643 0 0 +32 -0.1226387276497952 0 0 +33 -0.09106965120674937 0 0 +34 -0.0601147701140996 0 0 +35 -0.02976212372405818 0 0 +$EndNodes +$Elements +36 +1 15 2 1 2 2 +2 15 2 2 3 3 +3 1 2 4 1 1 4 +4 1 2 4 1 4 5 +5 1 2 4 1 5 6 +6 1 2 4 1 6 7 +7 1 2 4 1 7 8 +8 1 2 4 1 8 9 +9 1 2 4 1 9 10 +10 1 2 4 1 10 3 +11 1 2 3 2 2 11 +12 1 2 3 2 11 12 +13 1 2 3 2 12 13 +14 1 2 3 2 13 14 +15 1 2 3 2 14 15 +16 1 2 3 2 15 16 +17 1 2 3 2 16 17 +18 1 2 3 2 17 18 +19 1 2 3 2 18 19 +20 1 2 3 2 19 20 +21 1 2 3 2 20 21 +22 1 2 3 2 21 22 +23 1 2 3 2 22 23 +24 1 2 3 2 23 24 +25 1 2 3 2 24 25 +26 1 2 3 2 25 26 +27 1 2 3 2 26 27 +28 1 2 3 2 27 28 +29 1 2 3 2 28 29 +30 1 2 3 2 29 30 +31 1 2 3 2 30 31 +32 1 2 3 2 31 32 +33 1 2 3 2 32 33 +34 1 2 3 2 33 34 +35 1 2 3 2 34 35 +36 1 2 3 2 35 1 +$EndElements +)"; + } + + return std::dynamic_pointer_cast<const Mesh<Connectivity<1>>>(GmshReader{filename}.mesh()); +} + std::shared_ptr<const Mesh<Connectivity<2>>> MeshDataBaseForTests::_buildHybrid2dMesh() { diff --git a/tests/MeshDataBaseForTests.hpp b/tests/MeshDataBaseForTests.hpp index 119348f0e..86e0019d4 100644 --- a/tests/MeshDataBaseForTests.hpp +++ b/tests/MeshDataBaseForTests.hpp @@ -9,7 +9,9 @@ class Connectivity; template <typename ConnectivityT> class Mesh; +#include <array> #include <memory> +#include <string> class MeshDataBaseForTests { @@ -22,21 +24,47 @@ class MeshDataBaseForTests std::shared_ptr<const Mesh<Connectivity<2>>> m_cartesian_2d_mesh; std::shared_ptr<const Mesh<Connectivity<3>>> m_cartesian_3d_mesh; + std::shared_ptr<const Mesh<Connectivity<1>>> m_unordered_1d_mesh; std::shared_ptr<const Mesh<Connectivity<2>>> m_hybrid_2d_mesh; std::shared_ptr<const Mesh<Connectivity<3>>> m_hybrid_3d_mesh; + std::shared_ptr<const Mesh<Connectivity<1>>> _buildUnordered1dMesh(); std::shared_ptr<const Mesh<Connectivity<2>>> _buildHybrid2dMesh(); std::shared_ptr<const Mesh<Connectivity<3>>> _buildHybrid3dMesh(); public: std::shared_ptr<const Mesh<Connectivity<1>>> cartesian1DMesh() const; - std::shared_ptr<const Mesh<Connectivity<2>>> cartesian2DMesh() const; - std::shared_ptr<const Mesh<Connectivity<3>>> cartesian3DMesh() const; + std::shared_ptr<const Mesh<Connectivity<1>>> unordered1DMesh() const; + std::shared_ptr<const Mesh<Connectivity<2>>> cartesian2DMesh() const; std::shared_ptr<const Mesh<Connectivity<2>>> hybrid2DMesh() const; + + std::shared_ptr<const Mesh<Connectivity<3>>> cartesian3DMesh() const; std::shared_ptr<const Mesh<Connectivity<3>>> hybrid3DMesh() const; static const MeshDataBaseForTests& get(); + + auto + all1DMeshes() const + { + return std::array{std::make_pair(std::string("cartesian 1d mesh"), cartesian1DMesh()), + std::make_pair(std::string("unordered 1d mesh"), unordered1DMesh())}; + } + + auto + all2DMeshes() const + { + return std::array{std::make_pair(std::string("cartesian 2d mesh"), cartesian2DMesh()), + std::make_pair(std::string("hybrid 2d mesh"), hybrid2DMesh())}; + } + + auto + all3DMeshes() const + { + return std::array{std::make_pair(std::string("cartesian 3d mesh"), cartesian3DMesh()), + std::make_pair(std::string("hybrid 3d mesh"), hybrid3DMesh())}; + } + static void create(); static void destroy(); -- GitLab