diff --git a/boundaries/__init__.py b/boundaries/__init__.py index 925579cb7c5f3c38f37a8581f318f3c1e7226b99..a07c43c5223e4a6b9ae09375b398afb9825e04a1 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 245f988c2c32c479e0ad4b40c61116e6f6987c82..2849747e3332c92c9381992c40817bdf295553d9 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