From 78709f74a48e03594b3c1ad5f6a098f2ab62f0f0 Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Mon, 18 Jun 2018 16:33:45 +0200 Subject: [PATCH] Beginning of BoundaryConditionDescriptor mechanism - only symmetry descriptors are defined - only named boundaries are allowed --- src/main.cpp | 16 ++++ src/scheme/BoundaryConditionDescriptor.hpp | 104 +++++++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 src/scheme/BoundaryConditionDescriptor.hpp diff --git a/src/main.cpp b/src/main.cpp index 5a333d3b9..c12e2c977 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,6 +21,8 @@ #include <TinyVector.hpp> #include <TinyMatrix.hpp> +#include <BoundaryConditionDescriptor.hpp> + #include <GmshReader.hpp> #include <CLI/CLI.hpp> @@ -211,6 +213,18 @@ int main(int argc, char *argv[]) break; } case 2: { + // test case boundary condition description + std::vector<std::string> sym_boundary_name_list = {"XMIN", "XMAX", "YMIN", "YMAX"}; + std::vector<std::shared_ptr<BoundaryConditionDescriptor>> bc_descriptor_list; + for (auto sym_boundary_name : sym_boundary_name_list){ + std::shared_ptr<BoundaryDescriptor> boudary_descriptor + = std::shared_ptr<BoundaryDescriptor>(new NamedBoundaryDescriptor(sym_boundary_name)); + SymmetryBoundaryConditionDescriptor* sym_bc_descriptor + = new SymmetryBoundaryConditionDescriptor(boudary_descriptor); + + bc_descriptor_list.push_back(std::shared_ptr<BoundaryConditionDescriptor>(sym_bc_descriptor)); + } + typedef Connectivity2D ConnectivityType; typedef Mesh<ConnectivityType> MeshType; typedef MeshData<MeshType> MeshDataType; @@ -222,8 +236,10 @@ int main(int argc, char *argv[]) timer.reset(); MeshDataType mesh_data(mesh); + std::vector<BoundaryConditionHandler> bc_list; { + for (size_t i_ref_face_list=0; i_ref_face_list<mesh.connectivity().numberOfRefFaceList(); ++i_ref_face_list) { const RefFaceList& ref_face_list = mesh.connectivity().refFaceList(i_ref_face_list); diff --git a/src/scheme/BoundaryConditionDescriptor.hpp b/src/scheme/BoundaryConditionDescriptor.hpp new file mode 100644 index 000000000..3e69e13d6 --- /dev/null +++ b/src/scheme/BoundaryConditionDescriptor.hpp @@ -0,0 +1,104 @@ +#ifndef BOUNDARY_CONDITION_DESCRIPTOR_HPP +#define BOUNDARY_CONDITION_DESCRIPTOR_HPP + +#include <RefId.hpp> +#include <memory> + +class BoundaryDescriptor +{ + public: + enum class Type + { + named, + numbered + }; + + virtual Type type() const = 0; + BoundaryDescriptor(const BoundaryDescriptor&) = default; + BoundaryDescriptor() = default; + virtual ~BoundaryDescriptor() = default; +}; + +class NamedBoundaryDescriptor + : public BoundaryDescriptor +{ + private: + std::string m_name; + + public: + Type type() const + { + return Type::named; + } + + NamedBoundaryDescriptor(const NamedBoundaryDescriptor&) = default; + NamedBoundaryDescriptor(const std::string& name) + : m_name(name) + { + ; + } + virtual ~NamedBoundaryDescriptor() = default; +}; + +class NumberedBoundaryDescriptor + : public BoundaryDescriptor +{ + public: + Type type() const + { + return Type::numbered; + } + + NumberedBoundaryDescriptor(const NumberedBoundaryDescriptor&) = default; + NumberedBoundaryDescriptor() = default; + virtual ~NumberedBoundaryDescriptor() = default; +}; + + +class BoundaryConditionDescriptor +{ + public: + enum class Type + { + symmetry + }; + private: + std::shared_ptr<BoundaryDescriptor> m_boundary_descriptor; + public: + virtual Type type() const = 0; + + const BoundaryDescriptor& boundaryDescriptor() const + { + return *m_boundary_descriptor; + } + + BoundaryConditionDescriptor(std::shared_ptr<BoundaryDescriptor> boundary_descriptor) + : m_boundary_descriptor(boundary_descriptor) + { + ; + } + + virtual ~BoundaryConditionDescriptor() = default; +}; + + +class SymmetryBoundaryConditionDescriptor + : public BoundaryConditionDescriptor +{ + public: + Type type() const + { + return Type::symmetry; + } + + SymmetryBoundaryConditionDescriptor(std::shared_ptr<BoundaryDescriptor> boundary_descriptor) + : BoundaryConditionDescriptor(boundary_descriptor) + { + ; + } + + SymmetryBoundaryConditionDescriptor(const SymmetryBoundaryConditionDescriptor&) = default; + ~SymmetryBoundaryConditionDescriptor() = default; +}; + +#endif // BOUNDARY_CONDITION_DESCRIPTOR_HPP -- GitLab