From db2d36b5319b7168247cd92de5d6aac539bd97fd Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Tue, 11 Apr 2017 14:47:32 +0200
Subject: [PATCH] lbmpy: fixes in boundaries that take field values

previously the value was taken from the cell next to the boundary cell (i.e. the inner cell)
---
 boundaries/boundaryconditions.py | 3 +++
 boundaries/boundaryhandling.py   | 7 ++++---
 methods/creationfunctions.py     | 1 +
 3 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/boundaries/boundaryconditions.py b/boundaries/boundaryconditions.py
index 0cb31f32..3076b416 100644
--- a/boundaries/boundaryconditions.py
+++ b/boundaries/boundaryconditions.py
@@ -2,6 +2,7 @@ import sympy as sp
 
 from lbmpy.simplificationfactory import createSimplificationStrategy
 from pystencils.sympyextensions import getSymmetricPart
+from pystencils import Field
 from lbmpy.boundaries.boundaryhandling import offsetFromDir, weightOfDirection, invDir
 
 
@@ -20,6 +21,8 @@ def ubb(pdfField, direction, lbMethod, velocity, adaptVelocityToForce=False):
     neighbor = offsetFromDir(direction, lbMethod.dim)
     inverseDir = invDir(direction)
 
+    velocity = tuple(v_i.getShifted(*neighbor) if isinstance(v_i, Field.Access) else v_i for v_i in velocity)
+
     if adaptVelocityToForce:
         cqc = lbMethod.conservedQuantityComputation
         shiftedVelEqs = cqc.equilibriumInputEquationsFromInitValues(velocity=velocity)
diff --git a/boundaries/boundaryhandling.py b/boundaries/boundaryhandling.py
index 86293d09..a9248395 100644
--- a/boundaries/boundaryhandling.py
+++ b/boundaries/boundaryhandling.py
@@ -13,11 +13,12 @@ WEIGHTS_SYMBOL = TypedSymbol("weights", "double")
 
 class BoundaryHandling(object):
     class BoundaryInfo(object):
-        def __init__(self, name, flag, function, kernel):
+        def __init__(self, name, flag, function, kernel, ast):
             self.name = name
             self.flag = flag
             self.function = function
             self.kernel = kernel
+            self.ast = ast
 
     def __init__(self, pdfField, domainShape, lbMethod, ghostLayers=1, target='cpu'):
         """
@@ -135,7 +136,7 @@ class BoundaryHandling(object):
             return self._boundaryInfos[name].flag
 
         newIdx = len(self._boundaryInfos) + 1  # +1 because 2**0 is reserved for fluid flag
-        boundaryInfo = self.BoundaryInfo(name, 2 ** newIdx, boundaryFunction, None)
+        boundaryInfo = self.BoundaryInfo(name, 2 ** newIdx, boundaryFunction, None, None)
         self._boundaryInfos.append(boundaryInfo)
         self._nameToBoundary[name] = boundaryInfo
         self._dirty = True
@@ -173,7 +174,7 @@ class BoundaryHandling(object):
                                                boundary.flag, self._fluidFlag, self._ghostLayers)
             ast = generateBoundaryHandling(self._symbolicPdfField, idxField, self._lbMethod, boundary.function,
                                            target=self._target)
-
+            boundary.ast = ast
             if self._target == 'cpu':
                 from pystencils.cpu import makePythonFunction as makePythonCpuFunction
                 boundary.kernel = makePythonCpuFunction(ast, {'indexField': idxField})
diff --git a/methods/creationfunctions.py b/methods/creationfunctions.py
index 748f33df..35bbafa5 100644
--- a/methods/creationfunctions.py
+++ b/methods/creationfunctions.py
@@ -428,6 +428,7 @@ def compareMomentBasedLbMethods(reference, other, showDeviationsOnly=False):
 
 
 def compressibleToIncompressibleMomentValue(term, rho, u):
+    term = sp.sympify(term)
     term = term.expand()
     if term.func != sp.Add:
         args = [term, ]
-- 
GitLab