From 372aa8f1765aec30a4eb722b5ade30526f2c2a78 Mon Sep 17 00:00:00 2001
From: kutscher <kutscher@irmb.tu-bs.de>
Date: Wed, 10 Mar 2021 16:32:39 +0100
Subject: [PATCH] Implements cumulant phase field function and a passive
 incompressible momentum equation. The phase field is only coupled to the
 fluid velocity but there is no featback to the fluid. Only as a starting step
 for further developments.

---
 apps/cpu/ViskomatXL/viskomat.cfg              |   16 +-
 apps/cpu/ViskomatXL/viskomat.cpp              |   76 +-
 apps/cpu/rheometer/rheometer.cfg              |    2 +-
 apps/cpu/rheometer/rheometer.cpp              |    2 +-
 .../MultiphaseScratchCumulantLBMKernel.cpp    | 2406 +++++++++++++++++
 .../LBM/MultiphaseScratchCumulantLBMKernel.h  |  104 +
 6 files changed, 2562 insertions(+), 44 deletions(-)
 create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
 create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.h

diff --git a/apps/cpu/ViskomatXL/viskomat.cfg b/apps/cpu/ViskomatXL/viskomat.cfg
index f5d9fef26..c3472c808 100644
--- a/apps/cpu/ViskomatXL/viskomat.cfg
+++ b/apps/cpu/ViskomatXL/viskomat.cfg
@@ -1,20 +1,18 @@
-outputPath = d:/temp/rheometer/rheometerBinghamqQBB/rheometerBingham_tau_20e-7_nu_1.5e-3_new_lim
-
-viscosityPath = d:/Projects/VirtualFluidsCombined/apps/cpu/rheometer
+outputPath = d:/temp/viskomat
+geoPath = d:/Projects/TRR277/Project/WP1/Rheometer/Aileen
+geoFile = fishbone.stl
 
 numOfThreads = 4
 availMem = 8e9
 logToFile = false
 
-blocknx = 8 8 1
-#boundingBox = 32 32 1
+blocknx = 16 16 16
+boundingBox = 0 175 -9.5 155.5 -76.5 82.5
 deltax = 1
 
-#boundingBox = 0.02 0.02 0.00125
-#deltax = 0.000625
-
 refineLevel = 0
 
+nuLB = 1.5e-3
 OmegaLB = 4e-5
 tau0 = 20e-7
 
@@ -27,5 +25,5 @@ restartStep = 100000
 cpStart = 10000
 cpStep = 10000
 
-outTime = 10000
+outTime = 100
 endTime = 100000
\ No newline at end of file
diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp
index 1c0c10e71..7c73fe35f 100644
--- a/apps/cpu/ViskomatXL/viskomat.cpp
+++ b/apps/cpu/ViskomatXL/viskomat.cpp
@@ -14,11 +14,12 @@ void bflow(string configname)
       config.load(configname);
 
       string          outputPath = config.getValue<string>("outputPath");
-      string          viscosityPath = config.getValue<string>("viscosityPath");
+      string          geoPath = config.getValue<string>("geoPath");
+      string          geoFile = config.getValue<string>("geoFile");
       int             numOfThreads = config.getValue<int>("numOfThreads");
       vector<int>     blocknx = config.getVector<int>("blocknx");
       vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      //double          nuLB = 1.5e-3;//config.getValue<double>("nuLB");
+      double          nuLB = config.getValue<double>("nuLB");
       double          endTime = config.getValue<double>("endTime");
       double          outTime = config.getValue<double>("outTime");
       double          availMem = config.getValue<double>("availMem");
@@ -35,10 +36,10 @@ void bflow(string configname)
       double          resolution = config.getValue<double>("resolution");
 
       ConfigurationFile   viscosity;
-      viscosity.load(viscosityPath + "/viscosity.cfg");
-      double nuLB = viscosity.getValue<double>("nuLB");
+      //viscosity.load(viscosityPath + "/viscosity.cfg");
+      //double nuLB = viscosity.getValue<double>("nuLB");
 
-      outputPath = outputPath + "/rheometerBingham_" + config.getValue<string>("resolution") + "_" + config.getValue<string>("OmegaLB");
+      //outputPath = outputPath + "/rheometerBingham_" + config.getValue<string>("resolution") + "_" + config.getValue<string>("OmegaLB");
 
       SPtr<Communicator> comm = MPICommunicator::getInstance();
       int myid = comm->getProcessID();
@@ -89,13 +90,14 @@ void bflow(string configname)
 
       //bounding box
 
-      double g_minX1 = 0;
-      double g_minX2 = 0;
-      double g_minX3 = 0;
+      double g_minX1 = boundingBox[0];
+      double g_maxX1 = boundingBox[1];
 
-      double g_maxX1 = boundingBox[0];
-      double g_maxX2 = boundingBox[1];
-      double g_maxX3 = boundingBox[2];
+      double g_minX2 = boundingBox[2];
+      double g_maxX2 = boundingBox[3];
+      
+      double g_minX3 = boundingBox[4];
+      double g_maxX3 = boundingBox[5];
 
       //double g_minX1 = -boundingBox[0]/2.0;
       //double g_minX2 = -boundingBox[1] / 2.0;
@@ -136,21 +138,21 @@ void bflow(string configname)
       //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyHerschelBulkleyModelNoSlipBCAlgorithm()));
       noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelNoSlipBCAlgorithm()));
 
-      //SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
-      //slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SimpleSlipBCAlgorithm()));
+      SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
+      slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SimpleSlipBCAlgorithm()));
 
       mu::Parser fctVx;
       //fctVx.SetExpr("omega*(r-x2)");
       fctVx.SetExpr("-Omega*(x2-r)");
       fctVx.DefineConst("Omega", OmegaLB);
       //fctVx.DefineConst("r", R0);
-      fctVx.DefineConst("r", g_maxX1*0.5);
+      fctVx.DefineConst("r", 0.5 * (g_maxX2 - g_minX2));
 
       mu::Parser fctVy;
-      fctVy.SetExpr("Omega*(x1-r)");
+      fctVy.SetExpr("Omega*(x3-r)");
       fctVy.DefineConst("Omega", OmegaLB);
       //fctVy.DefineConst("r", R0);
-      fctVy.DefineConst("r", g_maxX2 * 0.5);
+      fctVy.DefineConst("r", 0.5 * (g_maxX2 - g_minX2));
 
       mu::Parser fctVz;
       fctVz.SetExpr("0.0");
@@ -169,7 +171,7 @@ void bflow(string configname)
       //BS visitor
       BoundaryConditionsBlockVisitor bcVisitor;
       bcVisitor.addBC(noSlipBCAdapter);
-      //bcVisitor.addBC(slipBCAdapter);
+      bcVisitor.addBC(slipBCAdapter);
       bcVisitor.addBC(velocityBCAdapter);
       //bcVisitor.addBC(densityBCAdapter);
       
@@ -178,7 +180,7 @@ void bflow(string configname)
 
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel());
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
       kernel->setBCProcessor(bcProc);
@@ -188,7 +190,7 @@ void bflow(string configname)
       SPtr<Grid3D> grid(new Grid3D(comm));
       grid->setPeriodicX1(false);
       grid->setPeriodicX2(false);
-      grid->setPeriodicX3(true);
+      grid->setPeriodicX3(false);
       grid->setDeltaX(deltax);
       grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
 
@@ -205,16 +207,22 @@ void bflow(string configname)
       //////////////////////////////////////////////////////////////////////////
 
       ////stator
-      SPtr<GbObject3D> stator(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3-2.0*deltax, 0.5 * g_maxX1, 0.5 * g_maxX2, g_maxX3+ 2.0 * deltax, 0.5 * g_maxX1));
+      //SPtr<GbObject3D> stator(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3-2.0*deltax, 0.5 * g_maxX1, 0.5 * g_maxX2, g_maxX3+ 2.0 * deltax, 0.5 * g_maxX1));
+      SPtr<GbTriFaceMesh3D> stator = make_shared<GbTriFaceMesh3D>();
+      stator->readMeshFromSTLFileBinary(geoPath + "/" + geoFile, false);
       GbSystem3D::writeGeoObject(stator.get(), outputPath + "/geo/stator", WbWriterVtkXmlBinary::getInstance());
 
-      SPtr<D3Q27Interactor> statorInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(stator, grid, velocityBCAdapter, Interactor3D::INVERSESOLID));
+      SPtr<D3Q27Interactor> statorInt = SPtr<D3Q27TriFaceMeshInteractor>(
+          new D3Q27TriFaceMeshInteractor(stator, grid, velocityBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES));
 
       ////rotor (cylinder)
-      SPtr<GbObject3D> rotor(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3- 2.0 * deltax, 0.5 * g_maxX1, 0.5 * g_maxX2, g_maxX3+ 2.0 * deltax, 0.25 * g_maxX1));
+      SPtr<GbObject3D> rotor(new GbCylinder3D(g_minX1, g_minX2 + 0.5 * (g_maxX2 - g_minX2),
+                                              g_minX3 + 0.5 * (g_maxX3 - g_minX3),
+                                              g_maxX1,
+          g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 0.5 * (g_maxX3 - g_minX3)));
       GbSystem3D::writeGeoObject(rotor.get(), outputPath + "/geo/rotor", WbWriterVtkXmlBinary::getInstance());
 
-      SPtr<D3Q27Interactor> rotorInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(rotor, grid, noSlipBCAdapter, Interactor3D::SOLID));
+      SPtr<D3Q27Interactor> rotorInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(rotor, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID));
 
       if (myid == 0)
       {
@@ -261,15 +269,17 @@ void bflow(string configname)
 
 
          //walls
-         //GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3));
-         //if (myid == 0) GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
+         GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - deltax, g_minX2 - deltax, g_minX3 - deltax, g_minX1,
+                                               g_maxX2 + deltax, g_maxX3 + deltax));
+         if (myid == 0) GbSystem3D::writeGeoObject(wallXmin.get(), outputPath + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
 
-         //GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength));
-         //if (myid == 0) GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
+         GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - deltax, g_minX3 - deltax, g_maxX1 + deltax,
+                                               g_maxX2 + deltax, g_maxX3 + deltax));
+         if (myid == 0) GbSystem3D::writeGeoObject(wallXmax.get(), outputPath + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
 
-         ////wall interactors
-         //SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
-         //SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
+         //wall interactors
+         SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
+         SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, slipBCAdapter, Interactor3D::SOLID));
 
          ////////////////////////////////////////////
          //METIS
@@ -278,8 +288,8 @@ void bflow(string configname)
          /////delete solid blocks
          if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start");
          InteractorsHelper intHelper(grid, metisVisitor);
-         //intHelper.addInteractor(wallZminInt);
-         //intHelper.addInteractor(wallZmaxInt);
+         intHelper.addInteractor(wallXminInt);
+         intHelper.addInteractor(wallXmaxInt);
          intHelper.addInteractor(statorInt);
          intHelper.addInteractor(rotorInt);
          intHelper.selectBlocks();
@@ -359,7 +369,7 @@ void bflow(string configname)
       grid->accept(bcVisitor);
 
       SPtr<UbScheduler> geoSch(new UbScheduler(1));
-      WriteBoundaryConditionsCoProcessor ppgeo = WriteBoundaryConditionsCoProcessor(grid, geoSch, outputPath, WbWriterVtkXmlASCII::getInstance(), comm);
+      WriteBoundaryConditionsCoProcessor ppgeo = WriteBoundaryConditionsCoProcessor(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm);
       ppgeo.process(0);
 
       SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
diff --git a/apps/cpu/rheometer/rheometer.cfg b/apps/cpu/rheometer/rheometer.cfg
index f5d9fef26..344062fb9 100644
--- a/apps/cpu/rheometer/rheometer.cfg
+++ b/apps/cpu/rheometer/rheometer.cfg
@@ -1,4 +1,4 @@
-outputPath = d:/temp/rheometer/rheometerBinghamqQBB/rheometerBingham_tau_20e-7_nu_1.5e-3_new_lim
+outputPath = d:/temp/rheometer/rheometerBinghamqQBB/rheometerBingham_tau_20e-7_nu_1.5e-3_new_lim_test
 
 viscosityPath = d:/Projects/VirtualFluidsCombined/apps/cpu/rheometer
 
diff --git a/apps/cpu/rheometer/rheometer.cpp b/apps/cpu/rheometer/rheometer.cpp
index 950e6e517..3f87dee34 100644
--- a/apps/cpu/rheometer/rheometer.cpp
+++ b/apps/cpu/rheometer/rheometer.cpp
@@ -178,7 +178,7 @@ void bflow(string configname)
 
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel());
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
       kernel->setBCProcessor(bcProc);
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
new file mode 100644
index 000000000..1bfa01272
--- /dev/null
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
@@ -0,0 +1,2406 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  This file is part of VirtualFluids. VirtualFluids is free software: you can
+//  redistribute it and/or modify it under the terms of the GNU General Public
+//  License as published by the Free Software Foundation, either version 3 of
+//  the License, or (at your option) any later version.
+//
+//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
+//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+//  for more details.
+//
+//  You should have received a copy of the GNU General Public License along
+//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
+//
+//! \file MultiphaseScratchCumulantLBMKernel.cpp
+//! \ingroup LBMKernel
+//! \author Hesameddin Safari
+//=======================================================================================
+
+#include "MultiphaseScratchCumulantLBMKernel.h"
+#include "BCArray3D.h"
+#include "Block3D.h"
+#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "D3Q27System.h"
+#include "DataSet3D.h"
+#include "LBMKernel.h"
+#include <cmath>
+
+#define PROOF_CORRECTNESS
+
+//////////////////////////////////////////////////////////////////////////
+MultiphaseScratchCumulantLBMKernel::MultiphaseScratchCumulantLBMKernel() { this->compressible = false; }
+//////////////////////////////////////////////////////////////////////////
+void MultiphaseScratchCumulantLBMKernel::initDataSet()
+{
+    SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9));
+    SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field
+    SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0));
+    dataSet->setFdistributions(f);
+    dataSet->setHdistributions(h); // For phase-field
+    dataSet->setPhaseField(divU);
+}
+//////////////////////////////////////////////////////////////////////////
+SPtr<LBMKernel> MultiphaseScratchCumulantLBMKernel::clone()
+{
+    SPtr<LBMKernel> kernel(new MultiphaseScratchCumulantLBMKernel());
+    kernel->setNX(nx);
+    dynamicPointerCast<MultiphaseScratchCumulantLBMKernel>(kernel)->initDataSet();
+    kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG);
+    kernel->setDensityRatio(this->densityRatio);
+    kernel->setMultiphaseModelParameters(this->beta, this->kappa);
+    kernel->setContactAngle(this->contactAngle);
+    kernel->setPhiL(this->phiL);
+    kernel->setPhiH(this->phiH);
+    kernel->setPhaseFieldRelaxation(this->tauH);
+    kernel->setMobility(this->mob);
+
+    kernel->setBCProcessor(bcProcessor->clone(kernel));
+    kernel->setWithForcing(withForcing);
+    kernel->setForcingX1(muForcingX1);
+    kernel->setForcingX2(muForcingX2);
+    kernel->setForcingX3(muForcingX3);
+    kernel->setIndex(ix1, ix2, ix3);
+    kernel->setDeltaT(deltaT);
+
+    return kernel;
+}
+//////////////////////////////////////////////////////////////////////////
+ void  MultiphaseScratchCumulantLBMKernel::forwardInverseChimeraWithKincompressible(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K, LBMReal oneMinusRho) {
+	using namespace UbMath;
+    LBMReal m2 = mfa + mfc;
+	LBMReal m1 = mfc - mfa;
+	LBMReal m0 = m2 + mfb;
+	mfa = m0;
+	m0 *= Kinverse;
+	m0 += oneMinusRho;
+	mfb = (m1 * Kinverse - m0 * vv) * K;
+	mfc = ((m2 - c2 * m1 * vv) * Kinverse + v2 * m0) * K;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+ void  MultiphaseScratchCumulantLBMKernel::backwardInverseChimeraWithKincompressible(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K, LBMReal oneMinusRho) {
+	using namespace UbMath;
+    LBMReal m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K;
+	LBMReal m1 = (((mfa - mfc) - c2 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K;
+	mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K;
+	mfa = m0;
+	mfb = m1;
+}
+
+
+////////////////////////////////////////////////////////////////////////////////
+ void  MultiphaseScratchCumulantLBMKernel::forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2) {
+	using namespace UbMath;
+    LBMReal m1 = (mfa + mfc) + mfb;
+	LBMReal m2 = mfc - mfa;
+	mfc = (mfc + mfa) + (v2 * m1 - c2 * vv * m2);
+	mfb = m2 - vv * m1;
+	mfa = m1;
+}
+
+
+ void  MultiphaseScratchCumulantLBMKernel::backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2) {
+	using namespace UbMath;
+    LBMReal ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2);
+	LBMReal mb = ((mfa - mfc) - mfa * v2) - c2 * mfb * vv;
+	mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2);
+	mfb = mb;
+	mfa = ma;
+}
+
+
+void MultiphaseScratchCumulantLBMKernel::calculate(int step)
+{
+    using namespace D3Q27System;
+    using namespace UbMath;
+
+    forcingX1 = 0.0;
+    forcingX2 = 0.0;
+    forcingX3 = 0.0;
+    /////////////////////////////////////
+
+    localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
+    nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
+    zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+
+    localDistributionsH    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
+    nonLocalDistributionsH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
+    zeroDistributionsH     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
+
+    SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
+
+    const int bcArrayMaxX1 = (int)bcArray->getNX1();
+    const int bcArrayMaxX2 = (int)bcArray->getNX2();
+    const int bcArrayMaxX3 = (int)bcArray->getNX3();
+
+    int minX1 = ghostLayerWidth;
+    int minX2 = ghostLayerWidth;
+    int minX3 = ghostLayerWidth;
+    int maxX1 = bcArrayMaxX1 - ghostLayerWidth;
+    int maxX2 = bcArrayMaxX2 - ghostLayerWidth;
+    int maxX3 = bcArrayMaxX3 - ghostLayerWidth;
+
+        CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField(
+            new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0));
+        CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr divU(
+            new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0));
+
+
+        for (int x3 = 0; x3 <= maxX3; x3++) {
+            for (int x2 = 0; x2 <= maxX2; x2++) {
+                for (int x1 = 0; x1 <= maxX1; x1++) {
+                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
+                        int x1p = x1 + 1;
+                        int x2p = x2 + 1;
+                        int x3p = x3 + 1;
+
+                        LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                        LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+                        LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+                        LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+                        LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+                        LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+                        LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+                        LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+                        LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+                        LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+                        LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+                        LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+                        LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+                        LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+                        LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+                        LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+                        LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+                        LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+                        LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+                        LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+                        LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+                        LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+                        LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                        LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                        LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                        LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                        LBMReal mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
+                        (*phaseField)(x1, x2, x3) = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
+                                                    (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
+                                                    (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) +
+                                                    (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
+                    }
+                }
+            }
+        }
+
+        LBMReal collFactorM;
+        LBMReal forcingTerm[D3Q27System::ENDF + 1];
+
+        for (int x3 = minX3; x3 < maxX3; x3++) {
+            for (int x2 = minX2; x2 < maxX2; x2++) {
+                for (int x1 = minX1; x1 < maxX1; x1++) {
+                    if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
+                        int x1p = x1 + 1;
+                        int x2p = x2 + 1;
+                        int x3p = x3 + 1;
+
+                        //////////////////////////////////////////////////////////////////////////
+                        // Read distributions and phase field
+                        ////////////////////////////////////////////////////////////////////////////
+                        //////////////////////////////////////////////////////////////////////////
+
+                        // E   N  T
+                        // c   c  c
+                        //////////
+                        // W   S  B
+                        // a   a  a
+
+                        // Rest ist b
+
+                        // mfxyz
+                        // a - negative
+                        // b - null
+                        // c - positive
+
+                        // a b c
+                        //-1 0 1
+
+                        findNeighbors(phaseField, x1, x2, x3);
+
+                        LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
+                        LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
+                        LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
+                        LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
+                        LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
+                        LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
+                        LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
+                        LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
+                        LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
+                        LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
+                        LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
+                        LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
+                        LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
+                        LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
+                        LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
+                        LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
+                        LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
+                        LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
+                        LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
+                        LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
+                        LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
+                        LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
+                        LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                        LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                        LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                        LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                        LBMReal mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
+
+                        LBMReal rhoH = 1.0;
+                        LBMReal rhoL = 1.0 / densityRatio;
+
+                        LBMReal rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
+
+                        LBMReal dX1_phi = gradX1_phi();
+                        LBMReal dX2_phi = gradX2_phi();
+                        LBMReal dX3_phi = gradX3_phi();
+
+                        LBMReal denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
+                        LBMReal normX1 = dX1_phi/denom;
+						LBMReal normX2 = dX2_phi/denom;
+						LBMReal normX3 = dX3_phi/denom;
+
+						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL);
+
+
+                        LBMReal mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi();
+
+                        //----------- Calculating Macroscopic Values -------------
+                        LBMReal rho = rhoH + rhoToPhi * (phi[REST] - phiH);
+
+                        if (withForcing) {
+                            // muX1 = static_cast<double>(x1-1+ix1*maxX1);
+                            // muX2 = static_cast<double>(x2-1+ix2*maxX2);
+                            // muX3 = static_cast<double>(x3-1+ix3*maxX3);
+
+                            forcingX1 = muForcingX1.Eval();
+                            forcingX2 = muForcingX2.Eval();
+                            forcingX3 = muForcingX3.Eval();
+
+                            LBMReal rho_m = 1.0 / densityRatio;
+                            forcingX1     = forcingX1 * (rho - rho_m);
+                            forcingX2     = forcingX2 * (rho - rho_m);
+                            forcingX3     = forcingX3 * (rho - rho_m);
+
+                            			   ////Incompressible Kernal
+
+			    mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
+			    mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
+			    mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
+			    mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);
+			    mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
+			    mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);
+			    mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);
+			    mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);
+			    mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);
+			    mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);
+			    mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);
+			    mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);
+			    mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+			    mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);
+			    mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);
+			    mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);
+			    mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);
+			    mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);
+			    mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);
+			    mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);
+			    mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);
+			    mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);
+			    mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+			    mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);
+			    mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);
+			    mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+			    mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);
+
+			   LBMReal m0, m1, m2;
+
+			  //LBMReal 
+			   rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
+				   + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
+				   + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
+
+			   LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+				   (mfcbb - mfabb));
+			   LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+				   (mfbcb - mfbab));
+			   LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+				   (mfbbc - mfbba));
+
+			   //forcing 
+			   ///////////////////////////////////////////////////////////////////////////////////////////
+			   if (withForcing)
+			   {
+				   muX1 = static_cast<double>(x1 - 1 + ix1 * maxX1);
+				   muX2 = static_cast<double>(x2 - 1 + ix2 * maxX2);
+				   muX3 = static_cast<double>(x3 - 1 + ix3 * maxX3);
+
+				   forcingX1 = muForcingX1.Eval();
+				   forcingX2 = muForcingX2.Eval();
+				   forcingX3 = muForcingX3.Eval();
+
+				   vvx += forcingX1 * deltaT * 0.5; // X
+				   vvy += forcingX2 * deltaT * 0.5; // Y
+				   vvz += forcingX3 * deltaT * 0.5; // Z
+			   }
+			   ///////////////////////////////////////////////////////////////////////////////////////////               
+			   LBMReal oMdrho;
+
+			   oMdrho = mfccc + mfaaa;
+			   m0 = mfaca + mfcac;
+			   m1 = mfacc + mfcaa;
+			   m2 = mfaac + mfcca;
+			   oMdrho += m0;
+			   m1 += m2;
+			   oMdrho += m1;
+			   m0 = mfbac + mfbca;
+			   m1 = mfbaa + mfbcc;
+			   m0 += m1;
+			   m1 = mfabc + mfcba;
+			   m2 = mfaba + mfcbc;
+			   m1 += m2;
+			   m0 += m1;
+			   m1 = mfacb + mfcab;
+			   m2 = mfaab + mfccb;
+			   m1 += m2;
+			   m0 += m1;
+			   oMdrho += m0;
+			   m0 = mfabb + mfcbb;
+			   m1 = mfbab + mfbcb;
+			   m2 = mfbba + mfbbc;
+			   m0 += m1 + m2;
+			   m0 += mfbbb; //hat gefehlt
+			   oMdrho = 1. - (oMdrho + m0);
+
+			   LBMReal vx2;
+			   LBMReal vy2;
+			   LBMReal vz2;
+			   vx2 = vvx * vvx;
+			   vy2 = vvy * vvy;
+			   vz2 = vvz * vvz;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   LBMReal wadjust;
+			   LBMReal qudricLimit = 0.01;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //Hin
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Z - Dir
+			   m2 = mfaaa + mfaac;
+			   m1 = mfaac - mfaaa;
+			   m0 = m2 + mfaab;
+			   mfaaa = m0;
+			   m0 += c1o36 * oMdrho;
+			   mfaab = m1 - m0 * vvz;
+			   mfaac = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaba + mfabc;
+			   m1 = mfabc - mfaba;
+			   m0 = m2 + mfabb;
+			   mfaba = m0;
+			   m0 += c1o9 * oMdrho;
+			   mfabb = m1 - m0 * vvz;
+			   mfabc = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaca + mfacc;
+			   m1 = mfacc - mfaca;
+			   m0 = m2 + mfacb;
+			   mfaca = m0;
+			   m0 += c1o36 * oMdrho;
+			   mfacb = m1 - m0 * vvz;
+			   mfacc = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfbaa + mfbac;
+			   m1 = mfbac - mfbaa;
+			   m0 = m2 + mfbab;
+			   mfbaa = m0;
+			   m0 += c1o9 * oMdrho;
+			   mfbab = m1 - m0 * vvz;
+			   mfbac = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfbba + mfbbc;
+			   m1 = mfbbc - mfbba;
+			   m0 = m2 + mfbbb;
+			   mfbba = m0;
+			   m0 += c4o9 * oMdrho;
+			   mfbbb = m1 - m0 * vvz;
+			   mfbbc = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfbca + mfbcc;
+			   m1 = mfbcc - mfbca;
+			   m0 = m2 + mfbcb;
+			   mfbca = m0;
+			   m0 += c1o9 * oMdrho;
+			   mfbcb = m1 - m0 * vvz;
+			   mfbcc = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfcaa + mfcac;
+			   m1 = mfcac - mfcaa;
+			   m0 = m2 + mfcab;
+			   mfcaa = m0;
+			   m0 += c1o36 * oMdrho;
+			   mfcab = m1 - m0 * vvz;
+			   mfcac = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfcba + mfcbc;
+			   m1 = mfcbc - mfcba;
+			   m0 = m2 + mfcbb;
+			   mfcba = m0;
+			   m0 += c1o9 * oMdrho;
+			   mfcbb = m1 - m0 * vvz;
+			   mfcbc = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfcca + mfccc;
+			   m1 = mfccc - mfcca;
+			   m0 = m2 + mfccb;
+			   mfcca = m0;
+			   m0 += c1o36 * oMdrho;
+			   mfccb = m1 - m0 * vvz;
+			   mfccc = m2 - 2. * m1 * vvz + vz2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Y - Dir
+			   m2 = mfaaa + mfaca;
+			   m1 = mfaca - mfaaa;
+			   m0 = m2 + mfaba;
+			   mfaaa = m0;
+			   m0 += c1o6 * oMdrho;
+			   mfaba = m1 - m0 * vvy;
+			   mfaca = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaab + mfacb;
+			   m1 = mfacb - mfaab;
+			   m0 = m2 + mfabb;
+			   mfaab = m0;
+			   mfabb = m1 - m0 * vvy;
+			   mfacb = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaac + mfacc;
+			   m1 = mfacc - mfaac;
+			   m0 = m2 + mfabc;
+			   mfaac = m0;
+			   m0 += c1o18 * oMdrho;
+			   mfabc = m1 - m0 * vvy;
+			   mfacc = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfbaa + mfbca;
+			   m1 = mfbca - mfbaa;
+			   m0 = m2 + mfbba;
+			   mfbaa = m0;
+			   m0 += c2o3 * oMdrho;
+			   mfbba = m1 - m0 * vvy;
+			   mfbca = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfbab + mfbcb;
+			   m1 = mfbcb - mfbab;
+			   m0 = m2 + mfbbb;
+			   mfbab = m0;
+			   mfbbb = m1 - m0 * vvy;
+			   mfbcb = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfbac + mfbcc;
+			   m1 = mfbcc - mfbac;
+			   m0 = m2 + mfbbc;
+			   mfbac = m0;
+			   m0 += c2o9 * oMdrho;
+			   mfbbc = m1 - m0 * vvy;
+			   mfbcc = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfcaa + mfcca;
+			   m1 = mfcca - mfcaa;
+			   m0 = m2 + mfcba;
+			   mfcaa = m0;
+			   m0 += c1o6 * oMdrho;
+			   mfcba = m1 - m0 * vvy;
+			   mfcca = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfcab + mfccb;
+			   m1 = mfccb - mfcab;
+			   m0 = m2 + mfcbb;
+			   mfcab = m0;
+			   mfcbb = m1 - m0 * vvy;
+			   mfccb = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfcac + mfccc;
+			   m1 = mfccc - mfcac;
+			   m0 = m2 + mfcbc;
+			   mfcac = m0;
+			   m0 += c1o18 * oMdrho;
+			   mfcbc = m1 - m0 * vvy;
+			   mfccc = m2 - 2. * m1 * vvy + vy2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // X - Dir
+			   m2 = mfaaa + mfcaa;
+			   m1 = mfcaa - mfaaa;
+			   m0 = m2 + mfbaa;
+			   mfaaa = m0;
+			   m0 += 1. * oMdrho;
+			   mfbaa = m1 - m0 * vvx;
+			   mfcaa = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaba + mfcba;
+			   m1 = mfcba - mfaba;
+			   m0 = m2 + mfbba;
+			   mfaba = m0;
+			   mfbba = m1 - m0 * vvx;
+			   mfcba = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaca + mfcca;
+			   m1 = mfcca - mfaca;
+			   m0 = m2 + mfbca;
+			   mfaca = m0;
+			   m0 += c1o3 * oMdrho;
+			   mfbca = m1 - m0 * vvx;
+			   mfcca = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaab + mfcab;
+			   m1 = mfcab - mfaab;
+			   m0 = m2 + mfbab;
+			   mfaab = m0;
+			   mfbab = m1 - m0 * vvx;
+			   mfcab = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfabb + mfcbb;
+			   m1 = mfcbb - mfabb;
+			   m0 = m2 + mfbbb;
+			   mfabb = m0;
+			   mfbbb = m1 - m0 * vvx;
+			   mfcbb = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfacb + mfccb;
+			   m1 = mfccb - mfacb;
+			   m0 = m2 + mfbcb;
+			   mfacb = m0;
+			   mfbcb = m1 - m0 * vvx;
+			   mfccb = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfaac + mfcac;
+			   m1 = mfcac - mfaac;
+			   m0 = m2 + mfbac;
+			   mfaac = m0;
+			   m0 += c1o3 * oMdrho;
+			   mfbac = m1 - m0 * vvx;
+			   mfcac = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfabc + mfcbc;
+			   m1 = mfcbc - mfabc;
+			   m0 = m2 + mfbbc;
+			   mfabc = m0;
+			   mfbbc = m1 - m0 * vvx;
+			   mfcbc = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m2 = mfacc + mfccc;
+			   m1 = mfccc - mfacc;
+			   m0 = m2 + mfbcc;
+			   mfacc = m0;
+			   m0 += c1o9 * oMdrho;
+			   mfbcc = m1 - m0 * vvx;
+			   mfccc = m2 - 2. * m1 * vvx + vx2 * m0;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Cumulants
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
+			   LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
+			   LBMReal OxyyMxzz  = 1.;//2+s9;//
+			   LBMReal O4 = 1.;
+			   LBMReal O5 = 1.;
+			   LBMReal O6 = 1.;
+
+			   //Cum 4.
+			   //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
+			   //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
+			   //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
+
+			   LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
+			   LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
+			   LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
+
+			   LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
+			   LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
+			   LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
+
+			   //Cum 5.
+			   LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho;
+			   LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho;
+			   LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho;
+
+			   //Cum 6.
+			   LBMReal CUMccc = mfccc + ((-4. * mfbbb * mfbbb
+				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
+				   - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc)
+				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
+				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
+					   + 2. * (mfcaa * mfaca * mfaac)
+					   + 16. * mfbba * mfbab * mfabb)
+				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
+				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
+				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
+					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho;
+
+			   //2.
+			   // linear combinations
+			   LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
+			   LBMReal mxxMyy = mfcaa - mfaca;
+			   LBMReal mxxMzz = mfcaa - mfaac;
+
+			   LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
+			   LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
+			   LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
+
+			   //relax
+			   mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
+			   mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
+			   mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
+
+			   mfabb += collFactorM * (-mfabb);
+			   mfbab += collFactorM * (-mfbab);
+			   mfbba += collFactorM * (-mfbba);
+
+			   // linear combinations back
+			   mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
+			   mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
+			   mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
+
+			   //3.
+			   // linear combinations
+			   LBMReal mxxyPyzz = mfcba + mfabc;
+			   LBMReal mxxyMyzz = mfcba - mfabc;
+
+			   LBMReal mxxzPyyz = mfcab + mfacb;
+			   LBMReal mxxzMyyz = mfcab - mfacb;
+
+			   LBMReal mxyyPxzz = mfbca + mfbac;
+			   LBMReal mxyyMxzz = mfbca - mfbac;
+
+			   //relax
+			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
+			   mfbbb += wadjust * (-mfbbb);
+			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
+			   mxxyPyzz += wadjust * (-mxxyPyzz);
+			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
+			   mxxyMyzz += wadjust * (-mxxyMyzz);
+			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
+			   mxxzPyyz += wadjust * (-mxxzPyyz);
+			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
+			   mxxzMyyz += wadjust * (-mxxzMyyz);
+			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
+			   mxyyPxzz += wadjust * (-mxyyPxzz);
+			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
+			   mxyyMxzz += wadjust * (-mxyyMxzz);
+
+			   // linear combinations back
+			   mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
+			   mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
+			   mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
+			   mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
+			   mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
+			   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
+
+			   //4.
+			   CUMacc += O4 * (-CUMacc);
+			   CUMcac += O4 * (-CUMcac);
+			   CUMcca += O4 * (-CUMcca);
+
+			   CUMbbc += O4 * (-CUMbbc);
+			   CUMbcb += O4 * (-CUMbcb);
+			   CUMcbb += O4 * (-CUMcbb);
+
+			   //5.
+			   CUMbcc += O5 * (-CUMbcc);
+			   CUMcbc += O5 * (-CUMcbc);
+			   CUMccb += O5 * (-CUMccb);
+
+			   //6.
+			   CUMccc += O6 * (-CUMccc);
+
+			   //back cumulants to central moments
+			   //4.
+			   //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015
+			   //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015
+			   //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015
+
+			   mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
+			   mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
+			   mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
+
+			   mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
+			   mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
+			   mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho;
+
+			   //5.
+			   mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho;
+			   mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho;
+			   mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho;
+
+			   //6.
+			   mfccc = CUMccc - ((-4. * mfbbb * mfbbb
+				   - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca)
+				   - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc)
+				   - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb))
+				   + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac)
+					   + 2. * (mfcaa * mfaca * mfaac)
+					   + 16. * mfbba * mfbab * mfabb)
+				   - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho
+				   - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho)
+				   + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)
+					   + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho;
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //forcing
+			   mfbaa = -mfbaa;
+			   mfaba = -mfaba;
+			   mfaab = -mfaab;
+			   //////////////////////////////////////////////////////////////////////////////////////
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //back
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Z - Dir
+			   m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2;
+			   m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2;
+			   m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2;
+			   mfaaa = m0;
+			   mfaab = m1;
+			   mfaac = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2;
+			   m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2);
+			   m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2;
+			   mfaba = m0;
+			   mfabb = m1;
+			   mfabc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
+			   m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2;
+			   m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
+			   mfaca = m0;
+			   mfacb = m1;
+			   mfacc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2;
+			   m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2);
+			   m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2;
+			   mfbaa = m0;
+			   mfbab = m1;
+			   mfbac = m2;
+			   /////////b//////////////////////////////////////////////////////////////////////////
+			   m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2;
+			   m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2);
+			   m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2;
+			   mfbba = m0;
+			   mfbbb = m1;
+			   mfbbc = m2;
+			   /////////b//////////////////////////////////////////////////////////////////////////
+			   m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2;
+			   m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2);
+			   m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2;
+			   mfbca = m0;
+			   mfbcb = m1;
+			   mfbcc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2;
+			   m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2;
+			   m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2;
+			   mfcaa = m0;
+			   mfcab = m1;
+			   mfcac = m2;
+			   /////////c//////////////////////////////////////////////////////////////////////////
+			   m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2;
+			   m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2);
+			   m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2;
+			   mfcba = m0;
+			   mfcbb = m1;
+			   mfcbc = m2;
+			   /////////c//////////////////////////////////////////////////////////////////////////
+			   m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2;
+			   m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2;
+			   m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2;
+			   mfcca = m0;
+			   mfccb = m1;
+			   mfccc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Y - Dir
+			   m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
+			   m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2;
+			   m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
+			   mfaaa = m0;
+			   mfaba = m1;
+			   mfaca = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2;
+			   m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2;
+			   m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2;
+			   mfaab = m0;
+			   mfabb = m1;
+			   mfacb = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2;
+			   m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2;
+			   m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2;
+			   mfaac = m0;
+			   mfabc = m1;
+			   mfacc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2;
+			   m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2);
+			   m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2;
+			   mfbaa = m0;
+			   mfbba = m1;
+			   mfbca = m2;
+			   /////////b//////////////////////////////////////////////////////////////////////////
+			   m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2;
+			   m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2);
+			   m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2;
+			   mfbab = m0;
+			   mfbbb = m1;
+			   mfbcb = m2;
+			   /////////b//////////////////////////////////////////////////////////////////////////
+			   m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2;
+			   m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2);
+			   m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2;
+			   mfbac = m0;
+			   mfbbc = m1;
+			   mfbcc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
+			   m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2;
+			   m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
+			   mfcaa = m0;
+			   mfcba = m1;
+			   mfcca = m2;
+			   /////////c//////////////////////////////////////////////////////////////////////////
+			   m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2;
+			   m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2;
+			   m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2;
+			   mfcab = m0;
+			   mfcbb = m1;
+			   mfccb = m2;
+			   /////////c//////////////////////////////////////////////////////////////////////////
+			   m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2;
+			   m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2;
+			   m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2;
+			   mfcac = m0;
+			   mfcbc = m1;
+			   mfccc = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // X - Dir
+			   m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2;
+			   m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfaaa = m0;
+			   mfbaa = m1;
+			   mfcaa = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2;
+			   m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfaba = m0;
+			   mfbba = m1;
+			   mfcba = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2;
+			   m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfaca = m0;
+			   mfbca = m1;
+			   mfcca = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2;
+			   m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfaab = m0;
+			   mfbab = m1;
+			   mfcab = m2;
+			   ///////////b////////////////////////////////////////////////////////////////////////
+			   m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2;
+			   m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfabb = m0;
+			   mfbbb = m1;
+			   mfcbb = m2;
+			   ///////////b////////////////////////////////////////////////////////////////////////
+			   m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2;
+			   m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfacb = m0;
+			   mfbcb = m1;
+			   mfccb = m2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2;
+			   m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfaac = m0;
+			   mfbac = m1;
+			   mfcac = m2;
+			   ///////////c////////////////////////////////////////////////////////////////////////
+			   m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2;
+			   m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfabc = m0;
+			   mfbbc = m1;
+			   mfcbc = m2;
+			   ///////////c////////////////////////////////////////////////////////////////////////
+			   m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2;
+			   m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2;
+			   m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2;
+			   mfacc = m0;
+			   mfbcc = m1;
+			   mfccc = m2;
+
+			   //////////////////////////////////////////////////////////////////////////
+			   //proof correctness
+			   //////////////////////////////////////////////////////////////////////////
+#ifdef  PROOF_CORRECTNESS
+			   LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca)
+				   + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc)
+				   + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb;
+			   //LBMReal dif = fabs(rho - rho_post);
+			   LBMReal dif = rho - rho_post;
+#ifdef SINGLEPRECISION
+			   if (dif > 10.0E-7 || dif < -10.0E-7)
+#else
+			   if (dif > 10.0E-15 || dif < -10.0E-15)
+#endif
+			   {
+				   UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post)
+					   + " dif=" + UbSystem::toString(dif)
+					   + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
+				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
+				   //exit(EXIT_FAILURE);
+			   }
+#endif
+			   //////////////////////////////////////////////////////////////////////////
+			   //write distribution
+			   //////////////////////////////////////////////////////////////////////////
+			   (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;
+			   (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;
+			   (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;
+			   (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;
+			   (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;
+			   (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;
+			   (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;
+			   (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;
+			   (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;
+			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;
+			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;
+			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;
+			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
+
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;
+			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;
+
+			   (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
+			   //////////////////////////////////////////////////////////////////////////
+
+			   ////!Incompressible Kernal
+
+                            
+//                            ///////Old Kernel \|/
+//                            // ux += forcingX1*deltaT*0.5; // X
+//                            // uy += forcingX2*deltaT*0.5; // Y
+//                            // uz += forcingX3*deltaT*0.5; // Z
+//                        }
+//
+//                        LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+//                                      (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+//                                      (mfcbb - mfabb)) /
+//                                         (rho * c1o3) +
+//                                     (mu * dX1_phi + forcingX1) / (2 * rho);
+//
+//                        LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+//                                      (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+//                                      (mfbcb - mfbab)) /
+//                                         (rho * c1o3) +
+//                                     (mu * dX2_phi + forcingX2) / (2 * rho);
+//
+//                        LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+//                                      (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+//                                      (mfbbc - mfbba)) /
+//                                         (rho * c1o3) +
+//                                     (mu * dX3_phi + forcingX3) / (2 * rho);
+//
+//                        //--------------------------------------------------------
+//
+//                        LBMReal ux2 = ux * ux;
+//                        LBMReal uy2 = uy * uy;
+//                        LBMReal uz2 = uz * uz;
+//
+//                        //----------- Calculating Forcing Terms * -------------
+//                        for (int dir = STARTF; dir <= (FENDDIR); dir++) {
+//                            LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
+//                            LBMReal velSq1  = velProd * velProd;
+//                            LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
+//
+//                            LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
+//
+//                            forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
+//                                                (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
+//                                                (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) +
+//                                               (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
+//                                               (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
+//                                               (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
+//                        }
+//
+//                        LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+//                        LBMReal fac1      = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
+//                        forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) +
+//                                            (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) +
+//                                            (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3));
+//
+//                        //--------------------------------------------------------
+//
+//                        mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[E]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+//                        mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+//                        mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+//                        mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+//                        mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+//                        mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+//                        mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+//                        mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+//                        mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+//                        mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+//                        mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+//                        mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+//                        mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+//                        mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+//                        mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+//                        mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+//                        mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+//                        mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+//                        mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+//                        mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+//                        mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+//                        mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+//                        mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+//                        mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+//                        mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+//                        mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+//                        mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST];
+//
+//                        LBMReal rho1 = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
+//                                       (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
+//                                       (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
+//                                       (mfbba + mfbbc) + mfbbb;
+//
+//
+//                        LBMReal oMdrho, m0, m1, m2;
+//
+//                        oMdrho = mfccc + mfaaa;
+//                        m0     = mfaca + mfcac;
+//                        m1     = mfacc + mfcaa;
+//                        m2     = mfaac + mfcca;
+//                        oMdrho += m0;
+//                        m1 += m2;
+//                        oMdrho += m1;
+//                        m0 = mfbac + mfbca;
+//                        m1 = mfbaa + mfbcc;
+//                        m0 += m1;
+//                        m1 = mfabc + mfcba;
+//                        m2 = mfaba + mfcbc;
+//                        m1 += m2;
+//                        m0 += m1;
+//                        m1 = mfacb + mfcab;
+//                        m2 = mfaab + mfccb;
+//                        m1 += m2;
+//                        m0 += m1;
+//                        oMdrho += m0;
+//                        m0 = mfabb + mfcbb;
+//                        m1 = mfbab + mfbcb;
+//                        m2 = mfbba + mfbbc;
+//                        m0 += m1 + m2;
+//                        m0 += mfbbb; // hat gefehlt
+//                        oMdrho = 1. - (oMdrho + m0);
+//                        // oMdrho = rho - (oMdrho + m0);
+//
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        LBMReal wadjust;
+//                        LBMReal qudricLimit = 0.01;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // Hin
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36  Konditionieren
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // Z - Dir
+//                        m2    = mfaaa + mfaac;
+//                        m1    = mfaac - mfaaa;
+//                        m0    = m2 + mfaab;
+//                        mfaaa = m0;
+//                        m0 += c1o36 * oMdrho;
+//                        mfaab = m1 - m0 * uz;
+//                        mfaac = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaba + mfabc;
+//                        m1    = mfabc - mfaba;
+//                        m0    = m2 + mfabb;
+//                        mfaba = m0;
+//                        m0 += c1o9 * oMdrho;
+//                        mfabb = m1 - m0 * uz;
+//                        mfabc = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaca + mfacc;
+//                        m1    = mfacc - mfaca;
+//                        m0    = m2 + mfacb;
+//                        mfaca = m0;
+//                        m0 += c1o36 * oMdrho;
+//                        mfacb = m1 - m0 * uz;
+//                        mfacc = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfbaa + mfbac;
+//                        m1    = mfbac - mfbaa;
+//                        m0    = m2 + mfbab;
+//                        mfbaa = m0;
+//                        m0 += c1o9 * oMdrho;
+//                        mfbab = m1 - m0 * uz;
+//                        mfbac = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfbba + mfbbc;
+//                        m1    = mfbbc - mfbba;
+//                        m0    = m2 + mfbbb;
+//                        mfbba = m0;
+//                        m0 += c4o9 * oMdrho;
+//                        mfbbb = m1 - m0 * uz;
+//                        mfbbc = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfbca + mfbcc;
+//                        m1    = mfbcc - mfbca;
+//                        m0    = m2 + mfbcb;
+//                        mfbca = m0;
+//                        m0 += c1o9 * oMdrho;
+//                        mfbcb = m1 - m0 * uz;
+//                        mfbcc = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfcaa + mfcac;
+//                        m1    = mfcac - mfcaa;
+//                        m0    = m2 + mfcab;
+//                        mfcaa = m0;
+//                        m0 += c1o36 * oMdrho;
+//                        mfcab = m1 - m0 * uz;
+//                        mfcac = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfcba + mfcbc;
+//                        m1    = mfcbc - mfcba;
+//                        m0    = m2 + mfcbb;
+//                        mfcba = m0;
+//                        m0 += c1o9 * oMdrho;
+//                        mfcbb = m1 - m0 * uz;
+//                        mfcbc = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfcca + mfccc;
+//                        m1    = mfccc - mfcca;
+//                        m0    = m2 + mfccb;
+//                        mfcca = m0;
+//                        m0 += c1o36 * oMdrho;
+//                        mfccb = m1 - m0 * uz;
+//                        mfccc = m2 - 2. * m1 * uz + uz2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // mit  1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // Y - Dir
+//                        m2    = mfaaa + mfaca;
+//                        m1    = mfaca - mfaaa;
+//                        m0    = m2 + mfaba;
+//                        mfaaa = m0;
+//                        m0 += c1o6 * oMdrho;
+//                        mfaba = m1 - m0 * uy;
+//                        mfaca = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaab + mfacb;
+//                        m1    = mfacb - mfaab;
+//                        m0    = m2 + mfabb;
+//                        mfaab = m0;
+//                        mfabb = m1 - m0 * uy;
+//                        mfacb = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaac + mfacc;
+//                        m1    = mfacc - mfaac;
+//                        m0    = m2 + mfabc;
+//                        mfaac = m0;
+//                        m0 += c1o18 * oMdrho;
+//                        mfabc = m1 - m0 * uy;
+//                        mfacc = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfbaa + mfbca;
+//                        m1    = mfbca - mfbaa;
+//                        m0    = m2 + mfbba;
+//                        mfbaa = m0;
+//                        m0 += c2o3 * oMdrho;
+//                        mfbba = m1 - m0 * uy;
+//                        mfbca = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfbab + mfbcb;
+//                        m1    = mfbcb - mfbab;
+//                        m0    = m2 + mfbbb;
+//                        mfbab = m0;
+//                        mfbbb = m1 - m0 * uy;
+//                        mfbcb = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfbac + mfbcc;
+//                        m1    = mfbcc - mfbac;
+//                        m0    = m2 + mfbbc;
+//                        mfbac = m0;
+//                        m0 += c2o9 * oMdrho;
+//                        mfbbc = m1 - m0 * uy;
+//                        mfbcc = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfcaa + mfcca;
+//                        m1    = mfcca - mfcaa;
+//                        m0    = m2 + mfcba;
+//                        mfcaa = m0;
+//                        m0 += c1o6 * oMdrho;
+//                        mfcba = m1 - m0 * uy;
+//                        mfcca = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfcab + mfccb;
+//                        m1    = mfccb - mfcab;
+//                        m0    = m2 + mfcbb;
+//                        mfcab = m0;
+//                        mfcbb = m1 - m0 * uy;
+//                        mfccb = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfcac + mfccc;
+//                        m1    = mfccc - mfcac;
+//                        m0    = m2 + mfcbc;
+//                        mfcac = m0;
+//                        m0 += c1o18 * oMdrho;
+//                        mfcbc = m1 - m0 * uy;
+//                        mfccc = m2 - 2. * m1 * uy + uy2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // mit     1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9            Konditionieren
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // X - Dir
+//                        m2    = mfaaa + mfcaa;
+//                        m1    = mfcaa - mfaaa;
+//                        m0    = m2 + mfbaa;
+//                        mfaaa = m0;
+//                        m0 += 1. * oMdrho;
+//                        mfbaa = m1 - m0 * ux;
+//                        mfcaa = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaba + mfcba;
+//                        m1    = mfcba - mfaba;
+//                        m0    = m2 + mfbba;
+//                        mfaba = m0;
+//                        mfbba = m1 - m0 * ux;
+//                        mfcba = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaca + mfcca;
+//                        m1    = mfcca - mfaca;
+//                        m0    = m2 + mfbca;
+//                        mfaca = m0;
+//                        m0 += c1o3 * oMdrho;
+//                        mfbca = m1 - m0 * ux;
+//                        mfcca = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaab + mfcab;
+//                        m1    = mfcab - mfaab;
+//                        m0    = m2 + mfbab;
+//                        mfaab = m0;
+//                        mfbab = m1 - m0 * ux;
+//                        mfcab = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfabb + mfcbb;
+//                        m1    = mfcbb - mfabb;
+//                        m0    = m2 + mfbbb;
+//                        mfabb = m0;
+//                        mfbbb = m1 - m0 * ux;
+//                        mfcbb = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfacb + mfccb;
+//                        m1    = mfccb - mfacb;
+//                        m0    = m2 + mfbcb;
+//                        mfacb = m0;
+//                        mfbcb = m1 - m0 * ux;
+//                        mfccb = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfaac + mfcac;
+//                        m1    = mfcac - mfaac;
+//                        m0    = m2 + mfbac;
+//                        mfaac = m0;
+//                        m0 += c1o3 * oMdrho;
+//                        mfbac = m1 - m0 * ux;
+//                        mfcac = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfabc + mfcbc;
+//                        m1    = mfcbc - mfabc;
+//                        m0    = m2 + mfbbc;
+//                        mfabc = m0;
+//                        mfbbc = m1 - m0 * ux;
+//                        mfcbc = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m2    = mfacc + mfccc;
+//                        m1    = mfccc - mfacc;
+//                        m0    = m2 + mfbcc;
+//                        mfacc = m0;
+//                        m0 += c1o9 * oMdrho;
+//                        mfbcc = m1 - m0 * ux;
+//                        mfccc = m2 - 2. * m1 * ux + ux2 * m0;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // Cumulants
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity
+//                        LBMReal OxyyPxzz  = 1.; //-s9;//2+s9;//
+//                        LBMReal OxyyMxzz  = 1.; // 2+s9;//
+//                        LBMReal O4        = 1.;
+//                        LBMReal O5        = 1.;
+//                        LBMReal O6        = 1.;
+//
+//                        // Cum 4.
+//                        LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
+//                        LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
+//                        LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
+//
+//                        LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) +
+//                                                  c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
+//                        LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) +
+//                                                  c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
+//                        LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) +
+//                                                  c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho);
+//
+//                        // Cum 5.
+//                        LBMReal CUMbcc = mfbcc -
+//                                         (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
+//                                          2. * (mfbab * mfacb + mfbba * mfabc)) -
+//                                         c1o3 * (mfbca + mfbac) * oMdrho;
+//                        LBMReal CUMcbc = mfcbc -
+//                                         (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
+//                                          2. * (mfabb * mfcab + mfbba * mfbac)) -
+//                                         c1o3 * (mfcba + mfabc) * oMdrho;
+//                        LBMReal CUMccb = mfccb -
+//                                         (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
+//                                          2. * (mfbab * mfbca + mfabb * mfcba)) -
+//                                         c1o3 * (mfacb + mfcab) * oMdrho;
+//
+//                        // Cum 6.
+//                        LBMReal CUMccc =
+//                            mfccc +
+//                            ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
+//                              4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -
+//                              2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
+//                             (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
+//                              2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
+//                             c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
+//                             c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
+//                             c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
+//                             (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
+//                              (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
+//                                 c2o3 * oMdrho) +
+//                            c1o27 * oMdrho;
+//
+//                        // 2.
+//                        // linear combinations
+//                        LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac;
+//                        LBMReal mxxMyy    = mfcaa - mfaca;
+//                        LBMReal mxxMzz    = mfcaa - mfaac;
+//
+//                        LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz);
+//                        LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
+//                        LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
+//
+//                        (*divU)(x1, x2, x3) = dxux + dyuy + dzuz;
+//
+//                        // relax
+//                        mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) -
+//                                     3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz);
+//                        mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy);
+//                        mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz);
+//
+//                        mfabb += collFactorM * (-mfabb);
+//                        mfbab += collFactorM * (-mfbab);
+//                        mfbba += collFactorM * (-mfbba);
+//
+//                        // linear combinations back
+//                        mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
+//                        mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
+//                        mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
+//
+//                        // 3.
+//                        // linear combinations
+//                        LBMReal mxxyPyzz = mfcba + mfabc;
+//                        LBMReal mxxyMyzz = mfcba - mfabc;
+//
+//                        LBMReal mxxzPyyz = mfcab + mfacb;
+//                        LBMReal mxxzMyyz = mfcab - mfacb;
+//
+//                        LBMReal mxyyPxzz = mfbca + mfbac;
+//                        LBMReal mxyyMxzz = mfbca - mfbac;
+//
+//                        // relax
+//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
+//                        mfbbb += wadjust * (-mfbbb);
+//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
+//                        mxxyPyzz += wadjust * (-mxxyPyzz);
+//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit);
+//                        mxxyMyzz += wadjust * (-mxxyMyzz);
+//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit);
+//                        mxxzPyyz += wadjust * (-mxxzPyyz);
+//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit);
+//                        mxxzMyyz += wadjust * (-mxxzMyyz);
+//                        wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit);
+//                        mxyyPxzz += wadjust * (-mxyyPxzz);
+//                        wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit);
+//                        mxyyMxzz += wadjust * (-mxyyMxzz);
+//
+//                        // linear combinations back
+//                        mfcba = (mxxyMyzz + mxxyPyzz) * c1o2;
+//                        mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2;
+//                        mfcab = (mxxzMyyz + mxxzPyyz) * c1o2;
+//                        mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2;
+//                        mfbca = (mxyyMxzz + mxyyPxzz) * c1o2;
+//                        mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
+//
+//                        // 4.
+//                        CUMacc += O4 * (-CUMacc);
+//                        CUMcac += O4 * (-CUMcac);
+//                        CUMcca += O4 * (-CUMcca);
+//
+//                        CUMbbc += O4 * (-CUMbbc);
+//                        CUMbcb += O4 * (-CUMbcb);
+//                        CUMcbb += O4 * (-CUMcbb);
+//
+//                        // 5.
+//                        CUMbcc += O5 * (-CUMbcc);
+//                        CUMcbc += O5 * (-CUMcbc);
+//                        CUMccb += O5 * (-CUMccb);
+//
+//                        // 6.
+//                        CUMccc += O6 * (-CUMccc);
+//
+//                        // back cumulants to central moments
+//                        // 4.
+//                        mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab);
+//                        mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb);
+//                        mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb);
+//
+//                        mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho +
+//                                c1o9 * (oMdrho - 1) * oMdrho;
+//                        mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho +
+//                                c1o9 * (oMdrho - 1) * oMdrho;
+//                        mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho +
+//                                c1o9 * (oMdrho - 1) * oMdrho;
+//
+//                        // 5.
+//                        mfbcc = CUMbcc +
+//                                (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb +
+//                                 2. * (mfbab * mfacb + mfbba * mfabc)) +
+//                                c1o3 * (mfbca + mfbac) * oMdrho;
+//                        mfcbc = CUMcbc +
+//                                (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb +
+//                                 2. * (mfabb * mfcab + mfbba * mfbac)) +
+//                                c1o3 * (mfcba + mfabc) * oMdrho;
+//                        mfccb = CUMccb +
+//                                (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb +
+//                                 2. * (mfbab * mfbca + mfabb * mfcba)) +
+//                                c1o3 * (mfacb + mfcab) * oMdrho;
+//
+//                        // 6.
+//                        mfccc = CUMccc -
+//                                ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -
+//                                  4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -
+//                                  2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) +
+//                                 (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) +
+//                                  2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) -
+//                                 c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -
+//                                 c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) -
+//                                 c1o27 * oMdrho * oMdrho * (-2. * oMdrho) +
+//                                 (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) +
+//                                  (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) *
+//                                     c2o3 * oMdrho) -
+//                                c1o27 * oMdrho;
+//
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // forcing
+//                        mfbaa = -mfbaa;
+//                        mfaba = -mfaba;
+//                        mfaab = -mfaab;
+//                        //////////////////////////////////////////////////////////////////////////////////////
+//
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // back
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9   Konditionieren
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // Z - Dir
+//                        m0    = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2;
+//                        m1    = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2;
+//                        m2    = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2;
+//                        mfaaa = m0;
+//                        mfaab = m1;
+//                        mfaac = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2;
+//                        m1    = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2);
+//                        m2    = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2;
+//                        mfaba = m0;
+//                        mfabb = m1;
+//                        mfabc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
+//                        m1    = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2;
+//                        m2    = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
+//                        mfaca = m0;
+//                        mfacb = m1;
+//                        mfacc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2;
+//                        m1    = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2);
+//                        m2    = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2;
+//                        mfbaa = m0;
+//                        mfbab = m1;
+//                        mfbac = m2;
+//                        /////////b//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2;
+//                        m1    = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2);
+//                        m2    = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2;
+//                        mfbba = m0;
+//                        mfbbb = m1;
+//                        mfbbc = m2;
+//                        /////////b//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2;
+//                        m1    = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2);
+//                        m2    = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2;
+//                        mfbca = m0;
+//                        mfbcb = m1;
+//                        mfbcc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2;
+//                        m1    = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2;
+//                        m2    = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2;
+//                        mfcaa = m0;
+//                        mfcab = m1;
+//                        mfcac = m2;
+//                        /////////c//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2;
+//                        m1    = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2);
+//                        m2    = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2;
+//                        mfcba = m0;
+//                        mfcbb = m1;
+//                        mfcbc = m2;
+//                        /////////c//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2;
+//                        m1    = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2;
+//                        m2    = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2;
+//                        mfcca = m0;
+//                        mfccb = m1;
+//                        mfccc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18   Konditionieren
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // Y - Dir
+//                        m0    = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
+//                        m1    = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2;
+//                        m2    = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
+//                        mfaaa = m0;
+//                        mfaba = m1;
+//                        mfaca = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2;
+//                        m1    = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2;
+//                        m2    = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2;
+//                        mfaab = m0;
+//                        mfabb = m1;
+//                        mfacb = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2;
+//                        m1    = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2;
+//                        m2    = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2;
+//                        mfaac = m0;
+//                        mfabc = m1;
+//                        mfacc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2;
+//                        m1    = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2);
+//                        m2    = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2;
+//                        mfbaa = m0;
+//                        mfbba = m1;
+//                        mfbca = m2;
+//                        /////////b//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2;
+//                        m1    = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2);
+//                        m2    = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2;
+//                        mfbab = m0;
+//                        mfbbb = m1;
+//                        mfbcb = m2;
+//                        /////////b//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2;
+//                        m1    = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2);
+//                        m2    = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2;
+//                        mfbac = m0;
+//                        mfbbc = m1;
+//                        mfbcc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
+//                        m1    = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2;
+//                        m2    = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
+//                        mfcaa = m0;
+//                        mfcba = m1;
+//                        mfcca = m2;
+//                        /////////c//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2;
+//                        m1    = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2;
+//                        m2    = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2;
+//                        mfcab = m0;
+//                        mfcbb = m1;
+//                        mfccb = m2;
+//                        /////////c//////////////////////////////////////////////////////////////////////////
+//                        m0    = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2;
+//                        m1    = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2;
+//                        m2    = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2;
+//                        mfcac = m0;
+//                        mfcbc = m1;
+//                        mfccc = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        // X - Dir
+//                        m0    = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2;
+//                        m2    = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfaaa = m0;
+//                        mfbaa = m1;
+//                        mfcaa = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2;
+//                        m2    = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfaba = m0;
+//                        mfbba = m1;
+//                        mfcba = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2;
+//                        m2    = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfaca = m0;
+//                        mfbca = m1;
+//                        mfcca = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2;
+//                        m2    = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfaab = m0;
+//                        mfbab = m1;
+//                        mfcab = m2;
+//                        ///////////b////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2;
+//                        m2    = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfabb = m0;
+//                        mfbbb = m1;
+//                        mfcbb = m2;
+//                        ///////////b////////////////////////////////////////////////////////////////////////
+//                        m0    = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2;
+//                        m2    = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfacb = m0;
+//                        mfbcb = m1;
+//                        mfccb = m2;
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        ////////////////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2;
+//                        m2    = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfaac = m0;
+//                        mfbac = m1;
+//                        mfcac = m2;
+//                        ///////////c////////////////////////////////////////////////////////////////////////
+//                        m0    = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2;
+//                        m2    = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfabc = m0;
+//                        mfbbc = m1;
+//                        mfcbc = m2;
+//                        ///////////c////////////////////////////////////////////////////////////////////////
+//                        m0    = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2;
+//                        m1    = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2;
+//                        m2    = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2;
+//                        mfacc = m0;
+//                        mfbcc = m1;
+//                        mfccc = m2;
+//
+//                        ///////////////////////////////////////////////////////////////////////////
+//
+//                        //////////////////////////////////////////////////////////////////////////
+//                        // proof correctness
+//                        //////////////////////////////////////////////////////////////////////////
+//#ifdef PROOF_CORRECTNESS
+//                        LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) +
+//                                           (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) +
+//                                           (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) +
+//                                           (mfbba + mfbbc) + mfbbb;
+//
+//                        LBMReal dif = rho1 - rho_post;
+//#ifdef SINGLEPRECISION
+//                        if (dif > 10.0E-7 || dif < -10.0E-7)
+//#else
+//                        if (dif > 10.0E-15 || dif < -10.0E-15)
+//#endif
+//                        {
+//                            UB_THROW(UbException(UB_EXARGS,
+//                                                 "rho=" + UbSystem::toString(rho) + ", rho_post=" +
+//                                                     UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) +
+//                                                     " rho is not correct for node " + UbSystem::toString(x1) + "," +
+//                                                     UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
+//                        }
+//#endif
+//
+//                        mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[E];
+//                        mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N];
+//                        mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T];
+//                        mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE];
+//                        mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW];
+//                        mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE];
+//                        mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW];
+//                        mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN];
+//                        mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS];
+//                        mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE];
+//                        mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW];
+//                        mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE];
+//                        mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW];
+//                        mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W];
+//                        mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S];
+//                        mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B];
+//                        mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW];
+//                        mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE];
+//                        mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW];
+//                        mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE];
+//                        mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS];
+//                        mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN];
+//                        mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW];
+//                        mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE];
+//                        mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW];
+//                        mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE];
+//                        mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST];
+//
+//                        //////////////////////////////////////////////////////////////////////////
+//                        // write distribution for F
+//                        //////////////////////////////////////////////////////////////////////////
+//
+//                        (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)     = mfabb;
+//                        (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)     = mfbab;
+//                        (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)     = mfbba;
+//                        (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)    = mfaab;
+//                        (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)   = mfcab;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)    = mfaba;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)   = mfcba;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)    = mfbaa;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)   = mfbca;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)   = mfaaa;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)  = mfcaa;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)  = mfaca;
+//                        (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
+//
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac;
+//                        (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac;
+//
+//                        (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;
+// !Old Kernel
+                        /////////////////////  P H A S E - F I E L D   S O L V E R
+                        ////////////////////////////////////////////
+		/////CUMULANT PHASE-FIELD
+				LBMReal omegaD =1.0/( 3.0 * mob + 0.5);
+
+			   mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+			   mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+			   mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+			   mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+			   mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+			   mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+			   mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+			   mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+			   mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+			   mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+			   mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+			   mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+			   mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+			   mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+			   mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+			   mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+			   mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+			   mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+			   mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+			   mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+			   mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+			   mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+			   mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+			   mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+			   mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+			   mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+			   mfbbb = (*this->zeroDistributionsH)(x1, x2, x3);
+
+
+					////////////////////////////////////////////////////////////////////////////////////
+		//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
+		//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+		//!
+		////////////////////////////////////////////////////////////////////////////////////
+		// fluid component
+			   //LBMReal drhoFluid =
+				  // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) +
+				  // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) +
+					 //  ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb;
+
+			   //LBMReal rhoFluid = c1 + drhoFluid;
+			   //LBMReal OOrhoFluid = c1 / rhoFluid;
+
+
+			   //LBMReal vvx =
+				  // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) +
+				  // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) +
+					 //  (fcbb - fabb)) * OOrhoFluid;
+			   //LBMReal vvy =
+				  // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) +
+				  // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) +
+					 //  (fbcb - fbab)) * OOrhoFluid;
+			   //LBMReal vvz =
+				  // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) +
+				  // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) +
+					 //  (fbbc - fbba)) * OOrhoFluid;
+
+			 //  LBMReal vvx = ux;
+			 //  LBMReal vvy = uy;
+			 //  LBMReal vvz = uz;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // second component
+			   LBMReal concentration =
+				   ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
+				   (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
+					   ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref
+			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+			   //!
+			  // LBMReal fx = forces[0];
+			  // LBMReal fy = forces[1];
+			  // LBMReal fz = -concentration * forces[2];
+			  // vvx += fx * c1o2;
+			  // vvy += fy * c1o2;
+			  // vvz += fz * c1o2;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   LBMReal oneMinusRho = c1- concentration;
+
+			   LBMReal cx =
+				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+				   (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+					   (mfcbb - mfabb));
+			   LBMReal cy =
+				   ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+				   (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+					   (mfbcb - mfbab));
+			   LBMReal cz =
+				   ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+				   (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+					   (mfbbc - mfbba));
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // calculate the square of velocities for this lattice node
+			   LBMReal cx2 = cx * cx;
+			   LBMReal cy2 = cy * cy;
+			   LBMReal cz2 = cz * cz;
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref
+			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+			   //! see also Eq. (6)-(14) in \ref
+			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
+			   //!
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Z - Dir
+			   forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36, c1o36, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9, c1o9, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36, c1o36, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9, c1o9, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9, c1o9, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36, c1o36, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9, c1o9, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36, c1o36, oneMinusRho);
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Y - Dir
+			   forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6, c1o6, oneMinusRho);
+			   forwardChimera(mfaab, mfabb, mfacb, cy, cy2);
+			   forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18, c1o18, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
+			   forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
+			   forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
+			   forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6, c1o6, oneMinusRho);
+			   forwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
+			   forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18, c1o18, oneMinusRho);
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // X - Dir
+			   forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1, c1, oneMinusRho);
+			   forwardChimera(mfaba, mfbba, mfcba, cx, cx2);
+			   forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3, c1o3, oneMinusRho);
+			   forwardChimera(mfaab, mfbab, mfcab, cx, cx2);
+			   forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
+			   forwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
+			   forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3, c1o3, oneMinusRho);
+			   forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
+			   forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3, c1o9, oneMinusRho);
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //! - experimental Cumulant ... to be published ... hopefully
+			   //!
+
+			   // linearized orthogonalization of 3rd order central moments
+			   LBMReal Mabc = mfabc - mfaba * c1o3;
+			   LBMReal Mbca = mfbca - mfbaa * c1o3;
+			   LBMReal Macb = mfacb - mfaab * c1o3;
+			   LBMReal Mcba = mfcba - mfaba * c1o3;
+			   LBMReal Mcab = mfcab - mfaab * c1o3;
+			   LBMReal Mbac = mfbac - mfbaa * c1o3;
+			   // linearized orthogonalization of 5th order central moments
+			   LBMReal Mcbc = mfcbc - mfaba * c1o9;
+			   LBMReal Mbcc = mfbcc - mfbaa * c1o9;
+			   LBMReal Mccb = mfccb - mfaab * c1o9;
+
+			   // collision of 1st order moments
+			   cx = cx * (c1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1 - 0.5*omegaD) * (1.0 - phi[REST]) * (phi[REST])*c1o3;
+			   cy = cy * (c1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST]) * c1o3;
+			   cz = cz * (c1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST]) * c1o3;
+
+			   //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx;
+			   //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy;
+			//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz;
+
+
+			   cx2 = cx * cx;
+			   cy2 = cy * cy;
+			   cz2 = cz * cz;
+
+			   // equilibration of 2nd order moments
+			   mfbba = zeroReal;
+			   mfbab = zeroReal;
+			   mfabb = zeroReal;
+
+			   mfcaa = c1o3 * concentration;
+			   mfaca = c1o3 * concentration;
+			   mfaac = c1o3 * concentration;
+
+
+			   //LBMReal omega2 = 1.0f;// omegaD;
+			   //mfbba *= (c1 - omega2);
+			   //mfbab *= (c1 - omega2);
+			   //mfabb *= (c1 - omega2);
+
+			   //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration;
+			   //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration;
+			   //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration;
+
+			   // equilibration of 3rd order moments
+			   Mabc = zeroReal;
+			   Mbca = zeroReal;
+			   Macb = zeroReal;
+			   Mcba = zeroReal;
+			   Mcab = zeroReal;
+			   Mbac = zeroReal;
+			   mfbbb = zeroReal;
+
+			   // from linearized orthogonalization 3rd order central moments to central moments
+			   mfabc = Mabc + mfaba * c1o3;
+			   mfbca = Mbca + mfbaa * c1o3;
+			   mfacb = Macb + mfaab * c1o3;
+			   mfcba = Mcba + mfaba * c1o3;
+			   mfcab = Mcab + mfaab * c1o3;
+			   mfbac = Mbac + mfbaa * c1o3;
+
+			   // equilibration of 4th order moments
+			   mfacc = c1o9 * concentration;
+			   mfcac = c1o9 * concentration;
+			   mfcca = c1o9 * concentration;
+
+			   mfcbb = zeroReal;
+			   mfbcb = zeroReal;
+			   mfbbc = zeroReal;
+
+			   // equilibration of 5th order moments
+			   Mcbc = zeroReal;
+			   Mbcc = zeroReal;
+			   Mccb = zeroReal;
+
+			   // from linearized orthogonalization 5th order central moments to central moments
+			   mfcbc = Mcbc + mfaba * c1o9;
+			   mfbcc = Mbcc + mfbaa * c1o9;
+			   mfccb = Mccb + mfaab * c1o9;
+
+			   // equilibration of 6th order moment
+			   mfccc = c1o27 * concentration;
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in
+			   //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
+			   //! see also Eq. (88)-(96) in
+			   //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
+			   //!
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // X - Dir
+			   backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1, c1, oneMinusRho);
+			   backwardChimera(mfaba, mfbba, mfcba, cx, cx2);
+			   backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3, c1o3, oneMinusRho);
+			   backwardChimera(mfaab, mfbab, mfcab, cx, cx2);
+			   backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2);
+			   backwardChimera(mfacb, mfbcb, mfccb, cx, cx2);
+			   backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3, c1o3, oneMinusRho);
+			   backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2);
+			   backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9, c1o9, oneMinusRho);
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Y - Dir
+			   backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6, c1o6, oneMinusRho);
+			   backwardChimera(mfaab, mfabb, mfacb, cy, cy2);
+			   backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18, c1o18, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho);
+			   backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2);
+			   backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6, c1o6, oneMinusRho);
+			   backwardChimera(mfcab, mfcbb, mfccb, cy, cy2);
+			   backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18, c1o18, oneMinusRho);
+
+			   ////////////////////////////////////////////////////////////////////////////////////
+			   // Z - Dir
+			   backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36, c1o36, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9, c1o9, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36, c1o36, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9, c1o9, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9, c1o9, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36, c1o36, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9, c1o9, oneMinusRho);
+			   backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36, c1o36, oneMinusRho);
+
+
+
+			   (*this->localDistributionsH)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
+   (*this->localDistributionsH)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
+   (*this->localDistributionsH)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
+   (*this->localDistributionsH)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
+   (*this->localDistributionsH)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
+   (*this->localDistributionsH)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
+   (*this->localDistributionsH)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
+   (*this->localDistributionsH)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
+   (*this->localDistributionsH)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
+   (*this->localDistributionsH)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
+   (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
+   (*this->localDistributionsH)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
+   (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
+
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
+   (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
+
+   (*this->zeroDistributionsH)(x1,x2,x3) = mfbbb;
+
+		/////!CUMULANT PHASE-FIELD
+
+
+
+                        /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
+
+                        //h[E]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                        //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+                        //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+                        //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+                        //h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+                        //h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+                        //h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+                        //h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+                        //h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+                        //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+                        //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+                        //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+                        //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                        //h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+                        //h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+                        //h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+                        //h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+                        //h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+                        //h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+                        //h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+                        //h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+                        //h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+                        //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                        //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                        //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                        //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                        //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
+
+                        //for (int dir = STARTF; dir < (ENDF + 1); dir++) {
+                        //    LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
+                        //    LBMReal velSq1  = velProd * velProd;
+                        //    LBMReal hEq; //, gEq;
+
+                        //    if (dir != REST) {
+                        //        LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
+                        //        LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
+                        //        hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
+
+                        //        // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
+                        //        h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
+
+                        //    } else {
+                        //        hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+                        //        h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
+                        //    }
+                        //}
+
+                        //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
+                        //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
+                        //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
+                        //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
+                        //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
+                        //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
+
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
+                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
+
+                        //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
+
+                        /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
+                    }
+                }
+            }
+        }
+        dataSet->setPhaseField(divU);
+		}
+}
+//////////////////////////////////////////////////////////////////////////
+
+LBMReal MultiphaseScratchCumulantLBMKernel::gradX1_phi()
+{
+    using namespace D3Q27System;
+    LBMReal sum = 0.0;
+    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+        sum += WEIGTH[k] * DX1[k] * phi[k];
+    }
+    return 3.0 * sum;
+}
+
+LBMReal MultiphaseScratchCumulantLBMKernel::gradX2_phi()
+{
+    using namespace D3Q27System;
+    LBMReal sum = 0.0;
+    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+        sum += WEIGTH[k] * DX2[k] * phi[k];
+    }
+    return 3.0 * sum;
+}
+
+LBMReal MultiphaseScratchCumulantLBMKernel::gradX3_phi()
+{
+    using namespace D3Q27System;
+    LBMReal sum = 0.0;
+    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+        sum += WEIGTH[k] * DX3[k] * phi[k];
+    }
+    return 3.0 * sum;
+}
+
+LBMReal MultiphaseScratchCumulantLBMKernel::nabla2_phi()
+{
+    using namespace D3Q27System;
+    LBMReal sum = 0.0;
+    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+        sum += WEIGTH[k] * (phi[k] - phi[REST]);
+    }
+    return 6.0 * sum;
+}
+
+void MultiphaseScratchCumulantLBMKernel::computePhasefield()
+{
+    using namespace D3Q27System;
+    SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions();
+
+    int minX1 = ghostLayerWidth;
+    int minX2 = ghostLayerWidth;
+    int minX3 = ghostLayerWidth;
+    int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth;
+    int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth;
+    int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth;
+
+    //------------- Computing the phase-field ------------------
+    for (int x3 = minX3; x3 < maxX3; x3++) {
+        for (int x2 = minX2; x2 < maxX2; x2++) {
+            for (int x1 = minX1; x1 < maxX1; x1++) {
+                // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3))
+                {
+                    int x1p = x1 + 1;
+                    int x2p = x2 + 1;
+                    int x3p = x3 + 1;
+
+                    h[E]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+                    h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+                    h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+                    h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+                    h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+                    h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+                    h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+                    h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+                    h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+                    h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+                    h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+                    h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+                    h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+                    h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+                    h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+                    h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+                    h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+                    h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+                    h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+                    h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+                    h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+                    h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+                    h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+                    h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+                    h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+                    h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+                    h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
+                }
+            }
+        }
+    }
+}
+
+void MultiphaseScratchCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
+                                                int x3)
+{
+    using namespace D3Q27System;
+
+    SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
+
+    phi[REST] = (*ph)(x1, x2, x3);
+
+    for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+
+        if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
+            phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
+        } else {
+         }
+    }
+}
+
+void MultiphaseScratchCumulantLBMKernel::swapDistributions()
+{
+    LBMKernel::swapDistributions();
+    dataSet->getHdistributions()->swap();
+}
\ No newline at end of file
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.h
new file mode 100644
index 000000000..c4cc5c263
--- /dev/null
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.h
@@ -0,0 +1,104 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  This file is part of VirtualFluids. VirtualFluids is free software: you can
+//  redistribute it and/or modify it under the terms of the GNU General Public
+//  License as published by the Free Software Foundation, either version 3 of
+//  the License, or (at your option) any later version.
+//
+//  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
+//  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+//  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+//  for more details.
+//
+//  You should have received a copy of the GNU General Public License along
+//  with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
+//
+//! \file MultiphaseScratchCumulantLBMKernel.h
+//! \ingroup LBMKernel
+//! \author Hesameddin Safari
+//=======================================================================================
+
+#ifndef MultiphaseScratchCumulantLBMKernel_H
+#define MultiphaseScratchCumulantLBMKernel_H
+
+#include "LBMKernel.h"
+#include "BCProcessor.h"
+#include "D3Q27System.h"
+#include "basics/utilities/UbTiming.h"
+#include "basics/container/CbArray4D.h"
+#include "basics/container/CbArray3D.h"
+
+//! \brief  Multiphase Cascaded Cumulant LBM kernel. 
+//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model
+//! \author  H. Safari, K. Kutscher, M. Geier
+class MultiphaseScratchCumulantLBMKernel : public LBMKernel
+{
+public:
+   MultiphaseScratchCumulantLBMKernel();
+   virtual ~MultiphaseScratchCumulantLBMKernel(void) = default;
+   void calculate(int step) override;
+   SPtr<LBMKernel> clone() override;
+   void forwardInverseChimeraWithKincompressible(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K, LBMReal oneMinusRho);
+   void backwardInverseChimeraWithKincompressible(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K, LBMReal oneMinusRho);
+   void forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2);
+   void backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2);
+
+   double getCalculationTime() override { return .0; }
+protected:
+   virtual void initDataSet();
+   void swapDistributions() override;
+   LBMReal f1[D3Q27System::ENDF+1];
+
+   CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
+   CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
+   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
+
+   CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH;
+   CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH;
+   CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH;
+
+   //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   phaseField;
+
+   LBMReal h  [D3Q27System::ENDF+1];
+   LBMReal g  [D3Q27System::ENDF+1];
+   LBMReal phi[D3Q27System::ENDF+1];
+   LBMReal pr1[D3Q27System::ENDF+1];
+   LBMReal phi_cutoff[D3Q27System::ENDF+1];
+
+   LBMReal gradX1_phi();
+   LBMReal gradX2_phi();
+   LBMReal gradX3_phi();
+   //LBMReal gradX1_pr1();
+   //LBMReal gradX2_pr1();
+   //LBMReal gradX3_pr1();
+   //LBMReal dirgradC_phi(int n, int k);
+   void computePhasefield();
+   void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
+   //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3);
+   //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/);
+
+   LBMReal nabla2_phi();
+
+
+   mu::value_type muX1,muX2,muX3;
+   mu::value_type muDeltaT;
+   mu::value_type muNu;
+   LBMReal forcingX1;
+   LBMReal forcingX2;
+   LBMReal forcingX3;
+};
+
+#endif
-- 
GitLab