Skip to content
Snippets Groups Projects
Commit 3efcd283 authored by Martin Bauer's avatar Martin Bauer
Browse files

lbmpy: bugfix in pressure/density boundary for incompressible methods

parent 62db0e2d
No related branches found
No related tags found
No related merge requests found
...@@ -56,7 +56,8 @@ def fixedDensity(pdfField, direction, lbMethod, density): ...@@ -56,7 +56,8 @@ def fixedDensity(pdfField, direction, lbMethod, density):
neighbor = offsetFromDir(direction, lbMethod.dim) neighbor = offsetFromDir(direction, lbMethod.dim)
inverseDir = invDir(direction) inverseDir = invDir(direction)
velocity = lbMethod.conservedQuantityComputation.definedSymbols()['velocity'] cqc = lbMethod.conservedQuantityComputation
velocity = cqc.definedSymbols()['velocity']
symmetricEq = removeAsymmetricPartOfMainEquations(lbMethod.getEquilibrium(), dofs=velocity) symmetricEq = removeAsymmetricPartOfMainEquations(lbMethod.getEquilibrium(), dofs=velocity)
substitutions = {sym: pdfField(i) for i, sym in enumerate(lbMethod.preCollisionPdfSymbols)} substitutions = {sym: pdfField(i) for i, sym in enumerate(lbMethod.preCollisionPdfSymbols)}
symmetricEq = symmetricEq.copyWithSubstitutionsApplied(substitutions) symmetricEq = symmetricEq.copyWithSubstitutionsApplied(substitutions)
...@@ -64,12 +65,17 @@ def fixedDensity(pdfField, direction, lbMethod, density): ...@@ -64,12 +65,17 @@ def fixedDensity(pdfField, direction, lbMethod, density):
simplification = createSimplificationStrategy(lbMethod) simplification = createSimplificationStrategy(lbMethod)
symmetricEq = simplification(symmetricEq) 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)) conditions = [(eq_i.rhs, sp.Equality(direction, i))
for i, eq_i in enumerate(symmetricEq.mainEquations)] + [(0, True)] for i, eq_i in enumerate(symmetricEq.mainEquations)] + [(0, True)]
eq_component = sp.Piecewise(*conditions) 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))] return subExprs + [sp.Eq(pdfField[neighbor](inverseDir), 2 * eq_component - pdfField(direction))]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment