From 557a1192045ea176623e14bfdd8ca51ad898a632 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Thu, 8 Jul 2021 19:10:37 +0200
Subject: [PATCH] Add fixed boundary condition descriptor

---
 .../FixedBoundaryConditionDescriptor.hpp      | 56 +++++++++++++++++++
 src/scheme/IBoundaryConditionDescriptor.hpp   |  1 +
 2 files changed, 57 insertions(+)
 create mode 100644 src/scheme/FixedBoundaryConditionDescriptor.hpp

diff --git a/src/scheme/FixedBoundaryConditionDescriptor.hpp b/src/scheme/FixedBoundaryConditionDescriptor.hpp
new file mode 100644
index 000000000..2a635b041
--- /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 30a25db66..96989954c 100644
--- a/src/scheme/IBoundaryConditionDescriptor.hpp
+++ b/src/scheme/IBoundaryConditionDescriptor.hpp
@@ -10,6 +10,7 @@ class IBoundaryConditionDescriptor
   {
     dirichlet,
     fourier,
+    fixed,
     free,
     neumann,
     symmetry
-- 
GitLab