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