From 06fc3cf8a9cd00b6887efaf0fe0acb9173a86de8 Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Wed, 26 Jul 2017 13:09:28 +0200
Subject: [PATCH] New simple Neumann boundary (copy values of next inner cell)

---
 boundaries/__init__.py           |  2 +-
 boundaries/boundaryconditions.py | 12 ++++++++++++
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/boundaries/__init__.py b/boundaries/__init__.py
index 925579cb..a07c43c5 100644
--- a/boundaries/__init__.py
+++ b/boundaries/__init__.py
@@ -1,2 +1,2 @@
-from lbmpy.boundaries.boundaryconditions import NoSlip, NoSlipFullWay, UBB, FixedDensity
+from lbmpy.boundaries.boundaryconditions import NoSlip, NoSlipFullWay, UBB, FixedDensity, NeumannByCopy
 from lbmpy.boundaries.boundaryhandling import BoundaryHandling
\ No newline at end of file
diff --git a/boundaries/boundaryconditions.py b/boundaries/boundaryconditions.py
index 245f988c..2849747e 100644
--- a/boundaries/boundaryconditions.py
+++ b/boundaries/boundaryconditions.py
@@ -161,3 +161,15 @@ class FixedDensity(Boundary):
                     for eq in symmetricEq.subexpressions]
         return subExprs + [sp.Eq(pdfField[neighbor](inverseDir), 2 * eq_component - pdfField(directionSymbol))]
 
+
+class NeumannByCopy(Boundary):
+    def __call__(self, pdfField, directionSymbol, lbMethod, **kwargs):
+        neighbor = offsetFromDir(directionSymbol, lbMethod.dim)
+        return [sp.Eq(pdfField[neighbor](directionSymbol), pdfField(directionSymbol))]
+
+    def __hash__(self):
+        # All boundaries of these class behave equal -> should also be equal
+        return hash("NeumannByCopy")
+
+    def __eq__(self, other):
+        return type(other) == NeumannByCopy
-- 
GitLab