From 69ec4168cecf3751f126e2ffee4a040238abb0e0 Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Thu, 12 Jan 2017 16:30:42 +0100
Subject: [PATCH] new_lbm: SRT simplifications working

---
 equationcollection/equationcollection.py     |  5 ++++-
 equationcollection/simplifications.py        | 21 +++++++++++++++++++-
 equationcollection/simplificationstrategy.py |  2 +-
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/equationcollection/equationcollection.py b/equationcollection/equationcollection.py
index ede7d66fb..8c6c6f32f 100644
--- a/equationcollection/equationcollection.py
+++ b/equationcollection/equationcollection.py
@@ -53,13 +53,16 @@ class EquationCollection:
         res.subexpressionSymbolNameGenerator = self.subexpressionSymbolNameGenerator
         return res
 
-    def newWithSubstitutionsApplied(self, substitutionDict):
+    def newWithSubstitutionsApplied(self, substitutionDict, addSubstitutionsAsSubexpresions=False):
         """
         Returns a new equation collection, where terms are substituted according to the passed `substitutionDict`.
         Substitutions are made in the subexpression terms and the main equations
         """
         newSubexpressions = [fastSubs(eq, substitutionDict) for eq in self.subexpressions]
         newEquations = [fastSubs(eq, substitutionDict) for eq in self.mainEquations]
+        if addSubstitutionsAsSubexpresions:
+            newSubexpressions = [sp.Eq(b, a) for a, b in substitutionDict.items()] + newSubexpressions
+
         res = EquationCollection(newEquations, newSubexpressions, self.simplificationHints)
         res.subexpressionSymbolNameGenerator = self.subexpressionSymbolNameGenerator
         return res
diff --git a/equationcollection/simplifications.py b/equationcollection/simplifications.py
index c8e93702b..412a889cc 100644
--- a/equationcollection/simplifications.py
+++ b/equationcollection/simplifications.py
@@ -53,7 +53,7 @@ def subexpressionSubstitutionInExistingSubexpressions(equationCollection):
                               equationCollection.subexpressionSymbolNameGenerator)
 
 
-def subexpressionSubstitutionInUpdateEquations(equationCollection):
+def subexpressionSubstitutionInMainEquations(equationCollection):
     """Replaces already existing subexpressions in the equations of the equationCollection"""
     result = []
     for s in equationCollection.mainEquations:
@@ -62,3 +62,22 @@ def subexpressionSubstitutionInUpdateEquations(equationCollection):
             newRhs = replaceAdditive(newRhs, subExpr.lhs, subExpr.rhs, requiredMatchReplacement=1.0)
         result.append(sp.Eq(s.lhs, newRhs))
     return equationCollection.newWithAdditionalSubexpressions(result, [])
+
+
+def addSubexpressionsForDivisions(equationCollection):
+    divisors = set()
+
+    def searchDivisors(term):
+        if term.func == sp.Pow:
+            if term.exp.is_integer and term.exp.is_number and term.exp < 0:
+                divisors.add(term)
+        else:
+            for a in term.args:
+                searchDivisors(a)
+
+    for eq in equationCollection.allEquations:
+        searchDivisors(eq.rhs)
+
+    newSymbolGen = equationCollection.subexpressionSymbolNameGenerator
+    substitutions = {divisor: newSymbol for newSymbol, divisor in zip(newSymbolGen, divisors)}
+    return equationCollection.newWithSubstitutionsApplied(substitutions, True)
diff --git a/equationcollection/simplificationstrategy.py b/equationcollection/simplificationstrategy.py
index 0caa0f269..8f2078ba4 100644
--- a/equationcollection/simplificationstrategy.py
+++ b/equationcollection/simplificationstrategy.py
@@ -14,7 +14,7 @@ class SimplificationStrategy:
     def __init__(self):
         self._rules = []
 
-    def addSimplificationRule(self, rule):
+    def add(self, rule):
         """
         Adds the given simplification rule to the end of the collection.
         :param rule: function that taking one equation collection and returning a (simplified) equation collection
-- 
GitLab