diff --git a/src/scheme/FixedBoundaryConditionDescriptor.hpp b/src/scheme/FixedBoundaryConditionDescriptor.hpp new file mode 100644 index 0000000000000000000000000000000000000000..2a635b04148a30fda0add405e992ca5ca3f21875 --- /dev/null +++ b/src/scheme/FixedBoundaryConditionDescriptor.hpp @@ -0,0 +1,56 @@ +#ifndef FIXED_BOUNDARY_CONDITION_DESCRIPTOR_HPP +#define FIXED_BOUNDARY_CONDITION_DESCRIPTOR_HPP + +#include <language/utils/FunctionSymbolId.hpp> +#include <scheme/IBoundaryConditionDescriptor.hpp> +#include <scheme/IBoundaryDescriptor.hpp> + +#include <memory> + +class FixedBoundaryConditionDescriptor : public IBoundaryConditionDescriptor +{ + private: + std::ostream& + _write(std::ostream& os) const final + { + os << "fixed(" << m_name << ',' << *m_boundary_descriptor << ")"; + return os; + } + + const std::string_view m_name; + + std::shared_ptr<const IBoundaryDescriptor> m_boundary_descriptor; + + public: + std::string_view + name() const + { + return m_name; + } + + const IBoundaryDescriptor& + boundaryDescriptor() const + { + return *m_boundary_descriptor; + } + + Type + type() const final + { + return Type::fixed; + } + + FixedBoundaryConditionDescriptor(const std::string_view name, + std::shared_ptr<const IBoundaryDescriptor> boundary_descriptor) + : m_name{name}, m_boundary_descriptor(boundary_descriptor) + { + ; + } + + FixedBoundaryConditionDescriptor(const FixedBoundaryConditionDescriptor&) = delete; + FixedBoundaryConditionDescriptor(FixedBoundaryConditionDescriptor&&) = delete; + + ~FixedBoundaryConditionDescriptor() = default; +}; + +#endif // FIXED_BOUNDARY_CONDITION_DESCRIPTOR_HPP diff --git a/src/scheme/IBoundaryConditionDescriptor.hpp b/src/scheme/IBoundaryConditionDescriptor.hpp index 30a25db66f1278e72eb2bea0ce7a017d8022da65..96989954cc234d5426832b4f8a60a4b3f71f0566 100644 --- a/src/scheme/IBoundaryConditionDescriptor.hpp +++ b/src/scheme/IBoundaryConditionDescriptor.hpp @@ -10,6 +10,7 @@ class IBoundaryConditionDescriptor { dirichlet, fourier, + fixed, free, neumann, symmetry