From f5d742d7f24a62543da5d0aecd9b85213fd6d59d Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Wed, 25 Jan 2017 12:09:23 +0100
Subject: [PATCH] new lbm module: macroscopic values & bugfixes

---
 equationcollection/equationcollection.py | 6 +++---
 field.py                                 | 2 +-
 sympyextensions.py                       | 5 +++++
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/equationcollection/equationcollection.py b/equationcollection/equationcollection.py
index c3a6e9294..91e483ef4 100644
--- a/equationcollection/equationcollection.py
+++ b/equationcollection/equationcollection.py
@@ -1,6 +1,6 @@
 import sympy as sp
-from copy import copy, deepcopy
-from pystencils.sympyextensions import fastSubs, countNumberOfOperations
+from copy import deepcopy
+from pystencils.sympyextensions import fastSubs, countNumberOfOperations, sortEquationsTopologically
 
 
 class EquationCollection:
@@ -64,7 +64,7 @@ class EquationCollection:
         if addSubstitutionsAsSubexpressions:
             newSubexpressions = [sp.Eq(b, a) for a, b in substitutionDict.items()] + newSubexpressions
 
-        return self.copy(newEquations, newSubexpressions)
+        return self.copy(newEquations, sortEquationsTopologically(newSubexpressions))
 
     def addSimplificationHint(self, key, value):
         """
diff --git a/field.py b/field.py
index 8913fc52a..f4424465f 100644
--- a/field.py
+++ b/field.py
@@ -311,7 +311,7 @@ def numpyDataTypeToC(dtype):
         return "float"
     elif dtype == np.int32:
         return "int"
-    raise NotImplementedError()
+    raise NotImplementedError("Cannot convert type " + str(dtype))
 
 
 def offsetComponentToDirectionString(coordinateId, value):
diff --git a/sympyextensions.py b/sympyextensions.py
index a5121775f..1d3203e66 100644
--- a/sympyextensions.py
+++ b/sympyextensions.py
@@ -367,3 +367,8 @@ def getSymmetricPart(term, vars):
     """
     substitutionDict = {e: -e for e in vars}
     return sp.Rational(1, 2) * (term + fastSubs(term, substitutionDict))
+
+
+def sortEquationsTopologically(equationSequence):
+    res = sp.cse_main.reps_toposort([[e.lhs, e.rhs] for e in equationSequence])
+    return [sp.Eq(a, b) for a, b in res]
-- 
GitLab