From 33387643d291a31c59676ab6c4c9ac1a97cd229f Mon Sep 17 00:00:00 2001 From: Stephane Del Pino <stephane.delpino44@gmail.com> Date: Sun, 18 Aug 2024 00:44:10 +0200 Subject: [PATCH] Add BoundaryConditionDescriptorBase It handles IBoundaryDescriptor data and its access functions --- .../AxisBoundaryConditionDescriptor.hpp | 16 +++------ .../BoundaryConditionDescriptorBase.hpp | 34 +++++++++++++++++++ .../DirichletBoundaryConditionDescriptor.hpp | 15 +++----- .../ExternalBoundaryConditionDescriptor.hpp | 15 +++----- .../FixedBoundaryConditionDescriptor.hpp | 16 +++------ .../FourierBoundaryConditionDescriptor.hpp | 17 +++------- .../FreeBoundaryConditionDescriptor.hpp | 14 ++------ src/scheme/IBoundaryConditionDescriptor.hpp | 4 ++- .../InflowBoundaryConditionDescriptor.hpp | 15 +++----- .../NeumannBoundaryConditionDescriptor.hpp | 15 +++----- .../OutflowBoundaryConditionDescriptor.hpp | 16 +++------ .../SymmetryBoundaryConditionDescriptor.hpp | 16 +++------ 12 files changed, 77 insertions(+), 116 deletions(-) create mode 100644 src/scheme/BoundaryConditionDescriptorBase.hpp diff --git a/src/scheme/AxisBoundaryConditionDescriptor.hpp b/src/scheme/AxisBoundaryConditionDescriptor.hpp index 07ab3be48..1dbbf9899 100644 --- a/src/scheme/AxisBoundaryConditionDescriptor.hpp +++ b/src/scheme/AxisBoundaryConditionDescriptor.hpp @@ -2,11 +2,11 @@ #define AXIS_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class AxisBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class AxisBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -16,23 +16,15 @@ class AxisBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return os; } - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; - public: - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { return Type::axis; } - AxisBoundaryConditionDescriptor(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) - : m_boundary_descriptor(boundary_descriptor) + AxisBoundaryConditionDescriptor(const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor) + : BoundaryConditionDescriptorBase{boundary_descriptor} { ; } diff --git a/src/scheme/BoundaryConditionDescriptorBase.hpp b/src/scheme/BoundaryConditionDescriptorBase.hpp new file mode 100644 index 000000000..d05dfd671 --- /dev/null +++ b/src/scheme/BoundaryConditionDescriptorBase.hpp @@ -0,0 +1,34 @@ +#ifndef BOUNDARY_CONDITION_DESCRIPTOR_BASE_HPP +#define BOUNDARY_CONDITION_DESCRIPTOR_BASE_HPP + +#include <scheme/IBoundaryConditionDescriptor.hpp> + +class BoundaryConditionDescriptorBase : public IBoundaryConditionDescriptor +{ + protected: + std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; + + public: + const std::shared_ptr<const IBoundaryDescriptor>& + boundaryDescriptor_shared() const final + { + return m_boundary_descriptor; + } + + const IBoundaryDescriptor& + boundaryDescriptor() const final + { + return *m_boundary_descriptor; + } + + BoundaryConditionDescriptorBase(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) + : m_boundary_descriptor{boundary_descriptor} + {} + + BoundaryConditionDescriptorBase(const BoundaryConditionDescriptorBase&) = delete; + BoundaryConditionDescriptorBase(BoundaryConditionDescriptorBase&&) = delete; + + virtual ~BoundaryConditionDescriptorBase() = default; +}; + +#endif // BOUNDARY_CONDITION_DESCRIPTOR_BASE_HPP diff --git a/src/scheme/DirichletBoundaryConditionDescriptor.hpp b/src/scheme/DirichletBoundaryConditionDescriptor.hpp index 36f95df0d..3b80103cb 100644 --- a/src/scheme/DirichletBoundaryConditionDescriptor.hpp +++ b/src/scheme/DirichletBoundaryConditionDescriptor.hpp @@ -3,11 +3,11 @@ #include <language/utils/FunctionSymbolId.hpp> #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class DirichletBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class DirichletBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -19,7 +19,6 @@ class DirichletBoundaryConditionDescriptor : public IBoundaryConditionDescriptor const std::string_view m_name; - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; const FunctionSymbolId m_rhs_symbol_id; public: @@ -35,12 +34,6 @@ class DirichletBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return m_rhs_symbol_id; } - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { @@ -48,9 +41,9 @@ class DirichletBoundaryConditionDescriptor : public IBoundaryConditionDescriptor } DirichletBoundaryConditionDescriptor(const std::string_view name, - std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor, + const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor, const FunctionSymbolId& rhs_symbol_id) - : m_name{name}, m_boundary_descriptor(boundary_descriptor), m_rhs_symbol_id{rhs_symbol_id} + : BoundaryConditionDescriptorBase{boundary_descriptor}, m_name{name}, m_rhs_symbol_id{rhs_symbol_id} { ; } diff --git a/src/scheme/ExternalBoundaryConditionDescriptor.hpp b/src/scheme/ExternalBoundaryConditionDescriptor.hpp index 056592931..eb915db37 100644 --- a/src/scheme/ExternalBoundaryConditionDescriptor.hpp +++ b/src/scheme/ExternalBoundaryConditionDescriptor.hpp @@ -2,12 +2,12 @@ #define EXTERNAL_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <utils/Socket.hpp> #include <memory> -class ExternalBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class ExternalBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -19,7 +19,6 @@ class ExternalBoundaryConditionDescriptor : public IBoundaryConditionDescriptor const std::string_view m_name; - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; const std::shared_ptr<const Socket> m_socket; public: @@ -35,12 +34,6 @@ class ExternalBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return m_socket; } - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { @@ -48,9 +41,9 @@ class ExternalBoundaryConditionDescriptor : public IBoundaryConditionDescriptor } ExternalBoundaryConditionDescriptor(const std::string_view name, - std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor, + const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor, const std::shared_ptr<const Socket>& socket) - : m_name{name}, m_boundary_descriptor(boundary_descriptor), m_socket{socket} + : BoundaryConditionDescriptorBase{boundary_descriptor}, m_name{name}, m_socket{socket} {} ExternalBoundaryConditionDescriptor(const ExternalBoundaryConditionDescriptor&) = delete; diff --git a/src/scheme/FixedBoundaryConditionDescriptor.hpp b/src/scheme/FixedBoundaryConditionDescriptor.hpp index b69648e38..010d427c3 100644 --- a/src/scheme/FixedBoundaryConditionDescriptor.hpp +++ b/src/scheme/FixedBoundaryConditionDescriptor.hpp @@ -3,11 +3,11 @@ #include <language/utils/FunctionSymbolId.hpp> #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class FixedBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class FixedBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -19,23 +19,15 @@ class FixedBoundaryConditionDescriptor : public IBoundaryConditionDescriptor const std::string_view m_name; - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; - public: - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { return Type::fixed; } - FixedBoundaryConditionDescriptor(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) - : m_boundary_descriptor(boundary_descriptor) + FixedBoundaryConditionDescriptor(const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor) + : BoundaryConditionDescriptorBase{boundary_descriptor} {} FixedBoundaryConditionDescriptor(const FixedBoundaryConditionDescriptor&) = delete; diff --git a/src/scheme/FourierBoundaryConditionDescriptor.hpp b/src/scheme/FourierBoundaryConditionDescriptor.hpp index c9d75883d..7c539f053 100644 --- a/src/scheme/FourierBoundaryConditionDescriptor.hpp +++ b/src/scheme/FourierBoundaryConditionDescriptor.hpp @@ -3,11 +3,11 @@ #include <language/utils/FunctionSymbolId.hpp> #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class FourierBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class FourierBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -19,7 +19,6 @@ class FourierBoundaryConditionDescriptor : public IBoundaryConditionDescriptor const std::string_view m_name; - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; const FunctionSymbolId m_mass_symbol_id; const FunctionSymbolId m_rhs_symbol_id; @@ -42,12 +41,6 @@ class FourierBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return m_rhs_symbol_id; } - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { @@ -55,11 +48,11 @@ class FourierBoundaryConditionDescriptor : public IBoundaryConditionDescriptor } FourierBoundaryConditionDescriptor(const std::string_view name, - std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor, + const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor, const FunctionSymbolId& mass_symbol_id, const FunctionSymbolId& rhs_symbol_id) - : m_name{name}, - m_boundary_descriptor(boundary_descriptor), + : BoundaryConditionDescriptorBase{boundary_descriptor}, + m_name{name}, m_mass_symbol_id{mass_symbol_id}, m_rhs_symbol_id{rhs_symbol_id} { diff --git a/src/scheme/FreeBoundaryConditionDescriptor.hpp b/src/scheme/FreeBoundaryConditionDescriptor.hpp index 2d46f2a36..8b6df26f7 100644 --- a/src/scheme/FreeBoundaryConditionDescriptor.hpp +++ b/src/scheme/FreeBoundaryConditionDescriptor.hpp @@ -2,11 +2,11 @@ #define FREE_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class FreeBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class FreeBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -16,15 +16,7 @@ class FreeBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return os; } - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; - public: - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { @@ -32,7 +24,7 @@ class FreeBoundaryConditionDescriptor : public IBoundaryConditionDescriptor } FreeBoundaryConditionDescriptor(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) - : m_boundary_descriptor(boundary_descriptor) + : BoundaryConditionDescriptorBase{boundary_descriptor} { ; } diff --git a/src/scheme/IBoundaryConditionDescriptor.hpp b/src/scheme/IBoundaryConditionDescriptor.hpp index 1350aa4db..58e8b6076 100644 --- a/src/scheme/IBoundaryConditionDescriptor.hpp +++ b/src/scheme/IBoundaryConditionDescriptor.hpp @@ -2,6 +2,7 @@ #define I_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <iostream> +#include <memory> class IBoundaryDescriptor; @@ -32,7 +33,8 @@ class IBoundaryConditionDescriptor return bcd._write(os); } - virtual const IBoundaryDescriptor& boundaryDescriptor() const = 0; + virtual const std::shared_ptr<const IBoundaryDescriptor>& boundaryDescriptor_shared() const = 0; + virtual const IBoundaryDescriptor& boundaryDescriptor() const = 0; virtual Type type() const = 0; diff --git a/src/scheme/InflowBoundaryConditionDescriptor.hpp b/src/scheme/InflowBoundaryConditionDescriptor.hpp index e648c1593..0b4608469 100644 --- a/src/scheme/InflowBoundaryConditionDescriptor.hpp +++ b/src/scheme/InflowBoundaryConditionDescriptor.hpp @@ -3,11 +3,11 @@ #include <language/utils/FunctionSymbolId.hpp> #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class InflowBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class InflowBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -17,7 +17,6 @@ class InflowBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return os; } - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; const FunctionSymbolId m_function_symbol_id; public: @@ -27,21 +26,15 @@ class InflowBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return m_function_symbol_id; } - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { return Type::inflow; } - InflowBoundaryConditionDescriptor(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor, + InflowBoundaryConditionDescriptor(const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor, const FunctionSymbolId& function_symbol_id) - : m_boundary_descriptor(boundary_descriptor), m_function_symbol_id{function_symbol_id} + : BoundaryConditionDescriptorBase{boundary_descriptor}, m_function_symbol_id{function_symbol_id} { ; } diff --git a/src/scheme/NeumannBoundaryConditionDescriptor.hpp b/src/scheme/NeumannBoundaryConditionDescriptor.hpp index 597ab95e7..ae591a38f 100644 --- a/src/scheme/NeumannBoundaryConditionDescriptor.hpp +++ b/src/scheme/NeumannBoundaryConditionDescriptor.hpp @@ -3,11 +3,11 @@ #include <language/utils/FunctionSymbolId.hpp> #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class NeumannBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class NeumannBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -19,7 +19,6 @@ class NeumannBoundaryConditionDescriptor : public IBoundaryConditionDescriptor const std::string_view m_name; - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; const FunctionSymbolId m_rhs_symbol_id; public: @@ -35,12 +34,6 @@ class NeumannBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return m_rhs_symbol_id; } - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { @@ -48,9 +41,9 @@ class NeumannBoundaryConditionDescriptor : public IBoundaryConditionDescriptor } NeumannBoundaryConditionDescriptor(const std::string_view name, - std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor, + const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor, const FunctionSymbolId& rhs_symbol_id) - : m_name{name}, m_boundary_descriptor(boundary_descriptor), m_rhs_symbol_id{rhs_symbol_id} + : BoundaryConditionDescriptorBase{boundary_descriptor}, m_name{name}, m_rhs_symbol_id{rhs_symbol_id} { ; } diff --git a/src/scheme/OutflowBoundaryConditionDescriptor.hpp b/src/scheme/OutflowBoundaryConditionDescriptor.hpp index 83ef7a775..bc999c501 100644 --- a/src/scheme/OutflowBoundaryConditionDescriptor.hpp +++ b/src/scheme/OutflowBoundaryConditionDescriptor.hpp @@ -2,11 +2,11 @@ #define OUTFLOW_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class OutflowBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class OutflowBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -16,23 +16,15 @@ class OutflowBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return os; } - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; - public: - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { return Type::outflow; } - OutflowBoundaryConditionDescriptor(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) - : m_boundary_descriptor(boundary_descriptor) + OutflowBoundaryConditionDescriptor(const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor) + : BoundaryConditionDescriptorBase{boundary_descriptor} { ; } diff --git a/src/scheme/SymmetryBoundaryConditionDescriptor.hpp b/src/scheme/SymmetryBoundaryConditionDescriptor.hpp index 9364090dd..1172bf7e4 100644 --- a/src/scheme/SymmetryBoundaryConditionDescriptor.hpp +++ b/src/scheme/SymmetryBoundaryConditionDescriptor.hpp @@ -2,11 +2,11 @@ #define SYMMETRY_BOUNDARY_CONDITION_DESCRIPTOR_HPP #include <mesh/IBoundaryDescriptor.hpp> -#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/BoundaryConditionDescriptorBase.hpp> #include <memory> -class SymmetryBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +class SymmetryBoundaryConditionDescriptor : public BoundaryConditionDescriptorBase { private: std::ostream& @@ -16,23 +16,15 @@ class SymmetryBoundaryConditionDescriptor : public IBoundaryConditionDescriptor return os; } - std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; - public: - const IBoundaryDescriptor& - boundaryDescriptor() const final - { - return *m_boundary_descriptor; - } - Type type() const final { return Type::symmetry; } - SymmetryBoundaryConditionDescriptor(std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) - : m_boundary_descriptor(boundary_descriptor) + SymmetryBoundaryConditionDescriptor(const std::shared_ptr<const IBoundaryDescriptor>& boundary_descriptor) + : BoundaryConditionDescriptorBase{boundary_descriptor} { ; } -- GitLab