diff --git a/src/language/modules/SchemeModule.cpp b/src/language/modules/SchemeModule.cpp index 7a41194c3e3f9c7840fbfa686979a5d7d5f53e6e..05f6de0539b1c0925a188d116ca27fd2a65299e4 100644 --- a/src/language/modules/SchemeModule.cpp +++ b/src/language/modules/SchemeModule.cpp @@ -4,13 +4,17 @@ #include <language/utils/TypeDescriptor.hpp> #include <mesh/Mesh.hpp> #include <scheme/AcousticSolver.hpp> +#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/IBoundaryDescriptor.hpp> +#include <scheme/NamedBoundaryDescriptor.hpp> +#include <scheme/NumberedBoundaryDescriptor.hpp> +#include <scheme/SymmetryBoundaryConditionDescriptor.hpp> #include <memory> /////////// TEMPORARY #include <output/VTKWriter.hpp> -#include <scheme/BoundaryConditionDescriptor.hpp> template <size_t Dimension> struct MeshDimensionAdapter @@ -35,14 +39,14 @@ struct MeshDimensionAdapter }(); MeshDataType mesh_data(m_mesh); - std::vector<std::shared_ptr<BoundaryConditionDescriptor>> bc_descriptor_list; + std::vector<std::shared_ptr<IBoundaryConditionDescriptor>> bc_descriptor_list; for (const auto& sym_boundary_name : sym_boundary_name_list) { std::shared_ptr<IBoundaryDescriptor> boudary_descriptor = std::shared_ptr<IBoundaryDescriptor>(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)); + bc_descriptor_list.push_back(std::shared_ptr<IBoundaryConditionDescriptor>(sym_bc_descriptor)); } std::vector<BoundaryConditionHandler> bc_list; @@ -57,7 +61,7 @@ struct MeshDimensionAdapter for (const auto& bc_descriptor : bc_descriptor_list) { switch (bc_descriptor->type()) { - case BoundaryConditionDescriptor::Type::symmetry: { + case IBoundaryConditionDescriptor::Type::symmetry: { const SymmetryBoundaryConditionDescriptor& sym_bc_descriptor = dynamic_cast<const SymmetryBoundaryConditionDescriptor&>(*bc_descriptor); for (size_t i_ref_face_list = 0; diff --git a/src/main.cpp b/src/main.cpp index 76f822d21f1162c369d2aca9b188246841467c85..1bde1fe585ae2cc5a7498dbd0530bddf9ccd9fcc 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -15,7 +15,11 @@ #include <algebra/TinyMatrix.hpp> #include <algebra/TinyVector.hpp> -#include <scheme/BoundaryConditionDescriptor.hpp> +#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/IBoundaryDescriptor.hpp> +#include <scheme/NamedBoundaryDescriptor.hpp> +#include <scheme/NumberedBoundaryDescriptor.hpp> +#include <scheme/SymmetryBoundaryConditionDescriptor.hpp> #include <mesh/MeshNodeBoundary.hpp> @@ -63,14 +67,14 @@ main(int argc, char* argv[]) switch (p_mesh->dimension()) { case 1: { std::vector<std::string> sym_boundary_name_list = {"XMIN", "XMAX"}; - std::vector<std::shared_ptr<BoundaryConditionDescriptor>> bc_descriptor_list; + std::vector<std::shared_ptr<IBoundaryConditionDescriptor>> bc_descriptor_list; for (const auto& sym_boundary_name : sym_boundary_name_list) { std::shared_ptr<IBoundaryDescriptor> boudary_descriptor = std::shared_ptr<IBoundaryDescriptor>(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)); + bc_descriptor_list.push_back(std::shared_ptr<IBoundaryConditionDescriptor>(sym_bc_descriptor)); } using ConnectivityType = Connectivity1D; @@ -88,7 +92,7 @@ main(int argc, char* argv[]) { for (const auto& bc_descriptor : bc_descriptor_list) { switch (bc_descriptor->type()) { - case BoundaryConditionDescriptor::Type::symmetry: { + case IBoundaryConditionDescriptor::Type::symmetry: { const SymmetryBoundaryConditionDescriptor& sym_bc_descriptor = dynamic_cast<const SymmetryBoundaryConditionDescriptor&>(*bc_descriptor); for (size_t i_ref_node_list = 0; @@ -182,14 +186,14 @@ main(int argc, char* argv[]) 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; + std::vector<std::shared_ptr<IBoundaryConditionDescriptor>> bc_descriptor_list; for (const auto& sym_boundary_name : sym_boundary_name_list) { std::shared_ptr<IBoundaryDescriptor> boudary_descriptor = std::shared_ptr<IBoundaryDescriptor>(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)); + bc_descriptor_list.push_back(std::shared_ptr<IBoundaryConditionDescriptor>(sym_bc_descriptor)); } using ConnectivityType = Connectivity2D; @@ -207,7 +211,7 @@ main(int argc, char* argv[]) { for (const auto& bc_descriptor : bc_descriptor_list) { switch (bc_descriptor->type()) { - case BoundaryConditionDescriptor::Type::symmetry: { + case IBoundaryConditionDescriptor::Type::symmetry: { const SymmetryBoundaryConditionDescriptor& sym_bc_descriptor = dynamic_cast<const SymmetryBoundaryConditionDescriptor&>(*bc_descriptor); for (size_t i_ref_face_list = 0; @@ -288,14 +292,14 @@ main(int argc, char* argv[]) } case 3: { std::vector<std::string> sym_boundary_name_list = {"XMIN", "XMAX", "YMIN", "YMAX", "ZMIN", "ZMAX"}; - std::vector<std::shared_ptr<BoundaryConditionDescriptor>> bc_descriptor_list; + std::vector<std::shared_ptr<IBoundaryConditionDescriptor>> bc_descriptor_list; for (const auto& sym_boundary_name : sym_boundary_name_list) { std::shared_ptr<IBoundaryDescriptor> boudary_descriptor = std::shared_ptr<IBoundaryDescriptor>(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)); + bc_descriptor_list.push_back(std::shared_ptr<IBoundaryConditionDescriptor>(sym_bc_descriptor)); } using ConnectivityType = Connectivity3D; @@ -313,7 +317,7 @@ main(int argc, char* argv[]) { for (const auto& bc_descriptor : bc_descriptor_list) { switch (bc_descriptor->type()) { - case BoundaryConditionDescriptor::Type::symmetry: { + case IBoundaryConditionDescriptor::Type::symmetry: { const SymmetryBoundaryConditionDescriptor& sym_bc_descriptor = dynamic_cast<const SymmetryBoundaryConditionDescriptor&>(*bc_descriptor); for (size_t i_ref_face_list = 0; diff --git a/src/scheme/BoundaryConditionDescriptor.hpp b/src/scheme/BoundaryConditionDescriptor.hpp deleted file mode 100644 index 4fd5ae1d78fc6869ee3f7e92950091f798d0954b..0000000000000000000000000000000000000000 --- a/src/scheme/BoundaryConditionDescriptor.hpp +++ /dev/null @@ -1,179 +0,0 @@ -#ifndef BOUNDARY_CONDITION_DESCRIPTOR_HPP -#define BOUNDARY_CONDITION_DESCRIPTOR_HPP - -#include <mesh/RefId.hpp> - -#include <memory> - -class IBoundaryDescriptor -{ - public: - enum class Type - { - named, - numbered - }; - - protected: - virtual std::ostream& _write(std::ostream& os) const = 0; - - public: - friend std::ostream& - operator<<(std::ostream& os, const IBoundaryDescriptor& bd) - { - return bd._write(os); - } - - virtual bool operator==(const RefId& ref_id) const = 0; - friend bool - operator==(const RefId& ref_id, const IBoundaryDescriptor& bcd) - { - return bcd == ref_id; - } - virtual Type type() const = 0; - - IBoundaryDescriptor(const IBoundaryDescriptor&) = delete; - IBoundaryDescriptor(IBoundaryDescriptor&&) = delete; - IBoundaryDescriptor() = default; - - virtual ~IBoundaryDescriptor() = default; -}; - -class NamedBoundaryDescriptor : public IBoundaryDescriptor -{ - private: - std::string m_name; - - std::ostream& - _write(std::ostream& os) const final - { - os << '"' << m_name << '"'; - return os; - } - - public: - bool - operator==(const RefId& ref_id) const final - { - return m_name == ref_id.tagName(); - } - - Type - type() const final - { - return Type::named; - } - - NamedBoundaryDescriptor(const NamedBoundaryDescriptor&) = delete; - NamedBoundaryDescriptor(NamedBoundaryDescriptor&&) = delete; - NamedBoundaryDescriptor(const std::string& name) : m_name(name) - { - ; - } - virtual ~NamedBoundaryDescriptor() = default; -}; - -class NumberedBoundaryDescriptor : public IBoundaryDescriptor -{ - private: - unsigned int m_number; - - std::ostream& - _write(std::ostream& os) const final - { - os << '"' << m_number << '"'; - return os; - } - - bool - operator==(const RefId& ref_id) const final - { - return m_number == ref_id.tagNumber(); - } - - public: - Type - type() const final - { - return Type::numbered; - } - - NumberedBoundaryDescriptor(const NumberedBoundaryDescriptor&) = delete; - NumberedBoundaryDescriptor(NumberedBoundaryDescriptor&&) = delete; - NumberedBoundaryDescriptor(unsigned int number) : m_number(number) - { - ; - } - virtual ~NumberedBoundaryDescriptor() = default; -}; - -class BoundaryConditionDescriptor -{ - public: - enum class Type - { - symmetry - }; - - protected: - std::shared_ptr<IBoundaryDescriptor> m_boundary_descriptor; - - virtual std::ostream& _write(std::ostream& os) const = 0; - - public: - friend std::ostream& - operator<<(std::ostream& os, const BoundaryConditionDescriptor& bcd) - { - return bcd._write(os); - } - - virtual Type type() const = 0; - - const IBoundaryDescriptor& - boundaryDescriptor() const - { - return *m_boundary_descriptor; - } - - BoundaryConditionDescriptor(std::shared_ptr<IBoundaryDescriptor> boundary_descriptor) - : m_boundary_descriptor(boundary_descriptor) - { - ; - } - - BoundaryConditionDescriptor(const BoundaryConditionDescriptor&) = delete; - BoundaryConditionDescriptor(BoundaryConditionDescriptor&&) = delete; - - virtual ~BoundaryConditionDescriptor() = default; -}; - -class SymmetryBoundaryConditionDescriptor : public BoundaryConditionDescriptor -{ - private: - std::ostream& - _write(std::ostream& os) const final - { - os << "symmetry(" << *m_boundary_descriptor << ")"; - return os; - } - - public: - Type - type() const final - { - return Type::symmetry; - } - - SymmetryBoundaryConditionDescriptor(std::shared_ptr<IBoundaryDescriptor> boundary_descriptor) - : BoundaryConditionDescriptor(boundary_descriptor) - { - ; - } - - SymmetryBoundaryConditionDescriptor(const SymmetryBoundaryConditionDescriptor&) = delete; - SymmetryBoundaryConditionDescriptor(SymmetryBoundaryConditionDescriptor&&) = delete; - - ~SymmetryBoundaryConditionDescriptor() = default; -}; - -#endif // BOUNDARY_CONDITION_DESCRIPTOR_HPP diff --git a/src/scheme/IBoundaryConditionDescriptor.hpp b/src/scheme/IBoundaryConditionDescriptor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..0814c9e8580f6c36ad1152c3143d5877bff45dbc --- /dev/null +++ b/src/scheme/IBoundaryConditionDescriptor.hpp @@ -0,0 +1,33 @@ +#ifndef I_BOUNDARY_CONDITION_DESCRIPTOR_HPP +#define I_BOUNDARY_CONDITION_DESCRIPTOR_HPP + +#include <iostream> + +class IBoundaryConditionDescriptor +{ + public: + enum class Type + { + symmetry + }; + + protected: + virtual std::ostream& _write(std::ostream& os) const = 0; + + public: + friend std::ostream& + operator<<(std::ostream& os, const IBoundaryConditionDescriptor& bcd) + { + return bcd._write(os); + } + + virtual Type type() const = 0; + + IBoundaryConditionDescriptor() = default; + IBoundaryConditionDescriptor(const IBoundaryConditionDescriptor&) = delete; + IBoundaryConditionDescriptor(IBoundaryConditionDescriptor&&) = delete; + + virtual ~IBoundaryConditionDescriptor() = default; +}; + +#endif // I_BOUNDARY_CONDITION_DESCRIPTOR_HPP diff --git a/src/scheme/IBoundaryDescriptor.hpp b/src/scheme/IBoundaryDescriptor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4e016c35b6e13204fee2cbc23cf9bedf1d6ca4c7 --- /dev/null +++ b/src/scheme/IBoundaryDescriptor.hpp @@ -0,0 +1,41 @@ +#ifndef I_BOUNDARY_DESCRIPTOR_HPP +#define I_BOUNDARY_DESCRIPTOR_HPP + +#include <mesh/RefId.hpp> + +#include <iostream> + +class IBoundaryDescriptor +{ + public: + enum class Type + { + named, + numbered + }; + + protected: + virtual std::ostream& _write(std::ostream& os) const = 0; + + public: + friend std::ostream& + operator<<(std::ostream& os, const IBoundaryDescriptor& bd) + { + return bd._write(os); + } + + virtual bool operator==(const RefId& ref_id) const = 0; + friend bool + operator==(const RefId& ref_id, const IBoundaryDescriptor& bcd) + { + return bcd == ref_id; + } + virtual Type type() const = 0; + + IBoundaryDescriptor(const IBoundaryDescriptor&) = delete; + IBoundaryDescriptor(IBoundaryDescriptor&&) = delete; + IBoundaryDescriptor() = default; + + virtual ~IBoundaryDescriptor() = default; +}; +#endif // I_BOUNDARY_DESCRIPTOR_HPP diff --git a/src/scheme/NamedBoundaryDescriptor.hpp b/src/scheme/NamedBoundaryDescriptor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..db88ee4a0dd9ac39c65ff7b1a181d3c6aad262b4 --- /dev/null +++ b/src/scheme/NamedBoundaryDescriptor.hpp @@ -0,0 +1,43 @@ +#ifndef NAMED_BOUNDARY_DESCRIPTOR_HPP +#define NAMED_BOUNDARY_DESCRIPTOR_HPP + +#include <scheme/IBoundaryDescriptor.hpp> + +#include <iostream> +#include <string> + +class NamedBoundaryDescriptor : public IBoundaryDescriptor +{ + private: + std::string m_name; + + std::ostream& + _write(std::ostream& os) const final + { + os << '"' << m_name << '"'; + return os; + } + + public: + bool + operator==(const RefId& ref_id) const final + { + return m_name == ref_id.tagName(); + } + + Type + type() const final + { + return Type::named; + } + + NamedBoundaryDescriptor(const NamedBoundaryDescriptor&) = delete; + NamedBoundaryDescriptor(NamedBoundaryDescriptor&&) = delete; + NamedBoundaryDescriptor(const std::string& name) : m_name(name) + { + ; + } + virtual ~NamedBoundaryDescriptor() = default; +}; + +#endif // NAMED_BOUNDARY_DESCRIPTOR_HPP diff --git a/src/scheme/NumberedBoundaryDescriptor.hpp b/src/scheme/NumberedBoundaryDescriptor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..4ed9a262859762a4103582fef57b642c82820d11 --- /dev/null +++ b/src/scheme/NumberedBoundaryDescriptor.hpp @@ -0,0 +1,42 @@ +#ifndef NUMBERED_BOUNDARY_DESCRIPTOR_HPP +#define NUMBERED_BOUNDARY_DESCRIPTOR_HPP + +#include <scheme/IBoundaryDescriptor.hpp> + +#include <iostream> + +class NumberedBoundaryDescriptor : public IBoundaryDescriptor +{ + private: + unsigned int m_number; + + std::ostream& + _write(std::ostream& os) const final + { + os << '"' << m_number << '"'; + return os; + } + + bool + operator==(const RefId& ref_id) const final + { + return m_number == ref_id.tagNumber(); + } + + public: + Type + type() const final + { + return Type::numbered; + } + + NumberedBoundaryDescriptor(const NumberedBoundaryDescriptor&) = delete; + NumberedBoundaryDescriptor(NumberedBoundaryDescriptor&&) = delete; + NumberedBoundaryDescriptor(unsigned int number) : m_number(number) + { + ; + } + virtual ~NumberedBoundaryDescriptor() = default; +}; + +#endif // NUMBERED_BOUNDARY_DESCRIPTOR_HPP diff --git a/src/scheme/SymmetryBoundaryConditionDescriptor.hpp b/src/scheme/SymmetryBoundaryConditionDescriptor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..cdb35a4f42d0d22f8251a5eb0a2432bcaa7ac8d0 --- /dev/null +++ b/src/scheme/SymmetryBoundaryConditionDescriptor.hpp @@ -0,0 +1,46 @@ +#ifndef SYMMETRY_BOUNDARY_CONDITION_DESCRIPTOR_HPP +#define SYMMETRY_BOUNDARY_CONDITION_DESCRIPTOR_HPP + +#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/IBoundaryDescriptor.hpp> + +#include <memory> + +class SymmetryBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +{ + private: + std::ostream& + _write(std::ostream& os) const final + { + os << "symmetry(" << *m_boundary_descriptor << ")"; + return os; + } + + std::shared_ptr<IBoundaryDescriptor> m_boundary_descriptor; + + public: + const IBoundaryDescriptor& + boundaryDescriptor() const + { + return *m_boundary_descriptor; + } + + Type + type() const final + { + return Type::symmetry; + } + + SymmetryBoundaryConditionDescriptor(std::shared_ptr<IBoundaryDescriptor> boundary_descriptor) + : m_boundary_descriptor(boundary_descriptor) + { + ; + } + + SymmetryBoundaryConditionDescriptor(const SymmetryBoundaryConditionDescriptor&) = delete; + SymmetryBoundaryConditionDescriptor(SymmetryBoundaryConditionDescriptor&&) = delete; + + ~SymmetryBoundaryConditionDescriptor() = default; +}; + +#endif // SYMMETRY_BOUNDARY_CONDITION_DESCRIPTOR_HPP