From 3efcd2835d4caf853f00c1fc114251902ccdbd95 Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Thu, 2 Mar 2017 13:05:17 +0100
Subject: [PATCH] lbmpy: bugfix in pressure/density boundary for incompressible
 methods

---
 boundaries/boundaryconditions.py | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/boundaries/boundaryconditions.py b/boundaries/boundaryconditions.py
index 26785bb8..a5ead12f 100644
--- a/boundaries/boundaryconditions.py
+++ b/boundaries/boundaryconditions.py
@@ -56,7 +56,8 @@ def fixedDensity(pdfField, direction, lbMethod, density):
     neighbor = offsetFromDir(direction, lbMethod.dim)
     inverseDir = invDir(direction)
 
-    velocity = lbMethod.conservedQuantityComputation.definedSymbols()['velocity']
+    cqc = lbMethod.conservedQuantityComputation
+    velocity = cqc.definedSymbols()['velocity']
     symmetricEq = removeAsymmetricPartOfMainEquations(lbMethod.getEquilibrium(), dofs=velocity)
     substitutions = {sym: pdfField(i) for i, sym in enumerate(lbMethod.preCollisionPdfSymbols)}
     symmetricEq = symmetricEq.copyWithSubstitutionsApplied(substitutions)
@@ -64,12 +65,17 @@ def fixedDensity(pdfField, direction, lbMethod, density):
     simplification = createSimplificationStrategy(lbMethod)
     symmetricEq = simplification(symmetricEq)
 
-    densitySymbol = lbMethod.conservedQuantityComputation.definedSymbols()['density']
+    densitySymbol = cqc.definedSymbols()['density']
+
+    densityEq = cqc.equilibriumInputEquationsFromInitValues(density=density).insertSubexpressions().mainEquations[0]
+    assert densityEq.lhs == densitySymbol
+    transformedDensity = densityEq.rhs
 
     conditions = [(eq_i.rhs, sp.Equality(direction, i))
                   for i, eq_i in enumerate(symmetricEq.mainEquations)] + [(0, True)]
     eq_component = sp.Piecewise(*conditions)
 
-    subExprs = [sp.Eq(eq.lhs, density if eq.lhs == densitySymbol else eq.rhs) for eq in symmetricEq.subexpressions]
+    subExprs = [sp.Eq(eq.lhs, transformedDensity if eq.lhs == densitySymbol else eq.rhs)
+                for eq in symmetricEq.subexpressions]
     return subExprs + [sp.Eq(pdfField[neighbor](inverseDir), 2 * eq_component - pdfField(direction))]
 
-- 
GitLab