From 664e69395e482ce5189b5e161bc4f97193ce9734 Mon Sep 17 00:00:00 2001
From: Martin Bauer <martin.bauer@fau.de>
Date: Fri, 5 May 2017 16:19:20 +0200
Subject: [PATCH] Simplifications for entropic setup

- used these simplifications in double_shear_layer benchmark
---
 creationfunctions.py |  8 ++++++--
 scenarios.py         | 14 ++++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/creationfunctions.py b/creationfunctions.py
index ee471653..816b73a3 100644
--- a/creationfunctions.py
+++ b/creationfunctions.py
@@ -191,8 +191,12 @@ def updateWithDefaultParameters(params, optParams, failOnUnknownParameter=True):
     }
     if 'relaxationRate' in params:
         if 'relaxationRates' not in params:
-            params['relaxationRates'] = [params['relaxationRate'],
-                                         relaxationRateFromMagicNumber(params['relaxationRate'])]
+            if 'entropic' in params and params['entropic']:
+                params['relaxationRates'] = [params['relaxationRate']]
+            else:
+                params['relaxationRates'] = [params['relaxationRate'],
+                                             relaxationRateFromMagicNumber(params['relaxationRate'])]
+
             del params['relaxationRate']
 
     if failOnUnknownParameter:
diff --git a/scenarios.py b/scenarios.py
index 5a12ab05..d1348375 100644
--- a/scenarios.py
+++ b/scenarios.py
@@ -24,6 +24,7 @@ at :mod:`lbmpy.creationfunctions`. The only mandatory keyword parameter is ``rel
 that defines the viscosity of the fluid (valid values being between 0 and 2).
 """
 import numpy as np
+import sympy as sp
 from functools import partial
 from pystencils.field import getLayoutOfArray, createNumpyArrayWithLayout
 from pystencils.slicing import sliceFromDirection, addGhostLayers, removeGhostLayers, normalizeSlice, makeSlice
@@ -270,6 +271,19 @@ class Scenario(object):
 
         # Create kernel
         if lbmKernel is None:
+            if methodParameters['entropic']:
+                newRelaxationRates = []
+                for rr in methodParameters['relaxationRates']:
+                    if not isinstance(rr, sp.Symbol):
+                        dummyVar = sp.Dummy()
+                        newRelaxationRates.append(dummyVar)
+                        kernelParams[dummyVar.name] = rr
+                    else:
+                        newRelaxationRates.append(rr)
+                if len(newRelaxationRates) < 2:
+                    newRelaxationRates.append(sp.Dummy())
+                methodParameters['relaxationRates'] = newRelaxationRates
+
             optimizationParams['pdfArr'] = self._pdfArrays[0]
             methodParameters['optimizationParams'] = optimizationParams
             self._lbmKernel = createLatticeBoltzmannFunction(**methodParameters)
-- 
GitLab