From e58a88758ab4c4c99da9544098f9e78fc9a9cc74 Mon Sep 17 00:00:00 2001
From: Kutscher <kutscher@irmb.tu-bs.de>
Date: Tue, 13 Dec 2022 10:11:46 +0100
Subject: [PATCH] add MultiphaseSimpleVelocityBaseExternalPressureLBMKernel

---
 apps/cpu/Applications.cmake                   |    1 +
 apps/cpu/ConvectionOfVortex/CMakeLists.txt    |   17 +-
 apps/cpu/ConvectionOfVortex/cov.cpp           |   14 +-
 apps/cpu/JetBreakup/JetBreakup.cfg            |   12 +-
 apps/cpu/JetBreakup/JetBreakup.cpp            |   65 +-
 apps/cpu/JetBreakup/JetBreakup.cpp.new        |  638 ++++
 apps/cpu/Nozzle/in.nozzle                     |   16 +-
 apps/cpu/Nozzle/nozzle.cpp                    |  282 +-
 src/cpu/VirtualFluids.h                       |    1 +
 .../BoundaryConditions/BCAlgorithm.h          |    2 +
 .../BoundaryConditions/BoundaryConditions.cpp |    2 +-
 .../MultiphaseNoSlipBCAlgorithm.cpp           |   36 +-
 ...tiphaseNonReflectingOutflowBCAlgorithm.cpp |  328 +-
 ...ultiphaseNonReflectingOutflowBCAlgorithm.h |   13 +-
 .../MultiphaseVelocityBCAlgorithm.cpp         |   42 +-
 .../MultiphaseVelocityBCAlgorithm.cpp.new     |  151 +
 .../WriteMacroscopicQuantitiesCoProcessor.cpp |   14 +-
 src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp     |    1 -
 ...bleOffsetMomentsInterpolationProcessor.cpp |  106 +-
 src/cpu/VirtualFluidsCore/LBM/D3Q27System.h   |    8 +-
 .../LBM/MultiphaseCumulantLBMKernel.cpp       |    2 +-
 .../MultiphaseScratchCumulantLBMKernel.cpp    |    2 +-
 ...eVelocityBaseExternalPressureLBMKernel.cpp | 3024 +++++++++++++++++
 ...ocityBaseExternalPressureLBMKernel.cpp.old | 3024 +++++++++++++++++
 ...pleVelocityBaseExternalPressureLBMKernel.h |  125 +
 ...tiphaseTwoPhaseFieldsCumulantLBMKernel.cpp |    2 +-
 ...ocityFormInitDistributionsBlockVisitor.cpp |  140 +-
 ...elocityFormInitDistributionsBlockVisitor.h |    4 +
 .../RefineCrossAndInsideGbObjectHelper.cpp    |    2 +-
 .../Visitors/SetConnectorsBlockVisitor.h      |    2 +-
 utilities/DirRename.py                        |  181 +
 31 files changed, 7924 insertions(+), 333 deletions(-)
 create mode 100644 apps/cpu/JetBreakup/JetBreakup.cpp.new
 create mode 100644 src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp.new
 create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
 create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp.old
 create mode 100644 src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
 create mode 100644 utilities/DirRename.py

diff --git a/apps/cpu/Applications.cmake b/apps/cpu/Applications.cmake
index b63689a9d..71648d1fd 100644
--- a/apps/cpu/Applications.cmake
+++ b/apps/cpu/Applications.cmake
@@ -14,6 +14,7 @@ add_subdirectory(${APPS_ROOT_CPU}/JetBreakup)
 add_subdirectory(${APPS_ROOT_CPU}/LiggghtsApp)
 add_subdirectory(${APPS_ROOT_CPU}/FallingSphere)
 add_subdirectory(${APPS_ROOT_CPU}/Nozzle)
+add_subdirectory(${APPS_ROOT_CPU}/ConvectionOfVortex)
 #add_subdirectory(tests)
 #add_subdirectory(Applications/gridRf)
 #add_subdirectory(Applications/greenvortex)
diff --git a/apps/cpu/ConvectionOfVortex/CMakeLists.txt b/apps/cpu/ConvectionOfVortex/CMakeLists.txt
index 671dfcfeb..b76c48282 100644
--- a/apps/cpu/ConvectionOfVortex/CMakeLists.txt
+++ b/apps/cpu/ConvectionOfVortex/CMakeLists.txt
@@ -5,21 +5,6 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
 ########################################################
 PROJECT(ConvectionOfVortex)
 
-INCLUDE(${APPS_ROOT}/IncludsList.cmake) 
+vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES cov.cpp )
 
-#################################################################
-###   LOCAL FILES                                             ###
-#################################################################
-FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp
-                         ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp  )
- 
-SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES})
-SOURCE_GROUP(src FILES ${SPECIFIC_FILES})
-  
-SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids)
 
-#################################################################
-###   CREATE PROJECT                                          ###
-#################################################################
-CREATE_CAB_PROJECT(cov BINARY)
diff --git a/apps/cpu/ConvectionOfVortex/cov.cpp b/apps/cpu/ConvectionOfVortex/cov.cpp
index 4e1f592b8..ba53075ca 100644
--- a/apps/cpu/ConvectionOfVortex/cov.cpp
+++ b/apps/cpu/ConvectionOfVortex/cov.cpp
@@ -56,7 +56,7 @@ void run()
       //LBMReal nuLB = 8.66025e-6*4.0;
       //double yFactor = 4.0;
 
-      string  pathname = "d:/temp/ConvectionOfVortex_0.00075_moments";
+      //string  pathname = "d:/temp/ConvectionOfVortex_0.00075_moments";
       //double  endTime = 160;
       //double  outTime = 160;
       //LBMReal dx =  0.00075;
@@ -150,7 +150,7 @@ void run()
       if (myid==0) GbSystem3D::writeGeoObject(geoOutflow4.get(), pathname+"/geo/geoOutflow4", WbWriterVtkXmlASCII::getInstance());
       SPtr<D3Q27Interactor> outflowIntr4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow4, grid, outflowBCAdapter, Interactor3D::SOLID));
 
-      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B));
+      SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::DIR_00M));
       InteractorsHelper intHelper(grid, metisVisitor);
       //intHelper.addInteractor(outflowIntr1);
       //intHelper.addInteractor(outflowIntr2);
@@ -163,10 +163,16 @@ void run()
 
       //set connectors  
       //SPtr<InterpolationProcessor> iProcessor(new CompressibleOffsetInterpolationProcessor());
-      SPtr<InterpolationProcessor> iProcessor(new CompressibleOffsetMomentsInterpolationProcessor());
+      //SPtr<InterpolationProcessor> iProcessor(new CompressibleOffsetMomentsInterpolationProcessor());
       //dynamicPointerCast<CompressibleOffsetMomentsInterpolationProcessor>(iProcessor)->setBulkOmegaToOmega(true);
       //SPtr<InterpolationProcessor> iProcessor(new CompressibleOffsetSquarePressureInterpolationProcessor());
-      SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
+
+      OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
+      grid->accept(setConnsVisitor);
+
+      SPtr<InterpolationProcessor> iProcessor(new CompressibleOffsetMomentsInterpolationProcessor());
+      SetInterpolationConnectorsBlockVisitor setInterConnsVisitor(comm, nuLB, iProcessor);
+      grid->accept(setInterConnsVisitor);
 
       UBLOG(logINFO, "SetConnectorsBlockVisitor:start");
       grid->accept(setConnsVisitor);
diff --git a/apps/cpu/JetBreakup/JetBreakup.cfg b/apps/cpu/JetBreakup/JetBreakup.cfg
index 1b0638fdb..eef35c305 100644
--- a/apps/cpu/JetBreakup/JetBreakup.cfg
+++ b/apps/cpu/JetBreakup/JetBreakup.cfg
@@ -1,18 +1,18 @@
-pathname = d:/temp/JetBreakupBenchmark_D50_2
+pathname = f:/Multiphase/JetBreakupCaseCSThreeNonConservativePressShortCorrPhaseOutflow1
 #pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup
 pathGeo = d:/Projects/VirtualFluidsCombined/apps/cpu/Multiphase/backup
 #geoFile = JetBreakupR.ASCII.stl
 #geoFile = inlet1.stl
 geoFile = tubeTransformed.stl
 
-numOfThreads = 4
+numOfThreads = 16
 availMem = 10e9
 
 #Grid
-blocknx = 20 25 25
+blocknx = 25 25 25
 
 #Simulation
-case = 2
+case = 3
 U_LB = 0.01 #inlet velocity
 #uF2 = 0.0001
 #Re = 10
@@ -40,5 +40,5 @@ restartStep = 100000
 cpStart = 100000
 cpStep = 100000
 
-outTime = 100
-endTime = 36000
\ No newline at end of file
+outTime = 1 #205
+endTime = 100000#36000
\ No newline at end of file
diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp
index 83cb83fd4..aabc3f4d0 100644
--- a/apps/cpu/JetBreakup/JetBreakup.cpp
+++ b/apps/cpu/JetBreakup/JetBreakup.cpp
@@ -21,8 +21,8 @@ void run(string configname)
         config.load(configname);
 
         string pathname = config.getValue<string>("pathname");
-        string pathGeo = config.getValue<string>("pathGeo");
-        string geoFile = config.getValue<string>("geoFile");
+        //string pathGeo = config.getValue<string>("pathGeo");
+        //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");
@@ -89,11 +89,11 @@ void run(string configname)
                 rho_h = 848; 
                 //density of light fluid (kg/m^3)
                 rho_l = 34.5;
-                //density retio
+                //density ratio
                 r_rho = rho_h / rho_l;
-                //dynamic viscosity of heavy fluid (Pa · s)
+                //dynamic viscosity of heavy fluid (Pa � s)
                 mu_h = 2.87e-3;
-                //dynamic viscosity of light fluid (Pa · s)
+                //dynamic viscosity of light fluid (Pa � s)
                 mu_l = 1.97e-5;
                 //velocity (m/s)
                 Uo = 100;
@@ -107,11 +107,11 @@ void run(string configname)
                 rho_h = 848;
                 // density of light fluid (kg/m^3)
                 rho_l = 1.205;
-                // density retio
+                // density ratio
                 r_rho = rho_h / rho_l;
-                // dynamic viscosity of heavy fluid (Pa · s)
+                // dynamic viscosity of heavy fluid (Pa � s)
                 mu_h = 2.87e-3;
-                // dynamic viscosity of light fluid (Pa · s)
+                // dynamic viscosity of light fluid (Pa � s)
                 mu_l = 1.84e-5;
                 // velocity (m/s)
                 Uo = 200;
@@ -120,6 +120,24 @@ void run(string configname)
                 // surface tension (N/m)
                 sigma = 0.03;
                 break;
+            case 3:
+                // density of heavy fluid (kg/m^3)
+                rho_h = 1000;
+                // density of light fluid (kg/m^3)
+                rho_l = 1.0;
+                // density ratio
+                r_rho = rho_h / rho_l;
+                // dynamic viscosity of heavy fluid (Pa � s)
+                mu_h = 2.87e-3;
+                // dynamic viscosity of light fluid (Pa � s)
+                mu_l = 1.84e-5;
+                // velocity (m/s)
+                Uo = 200;
+                // diameter of jet (m)
+                D = 0.0001;
+                // surface tension (N/m)
+                sigma = 0.03;
+                break;                
         }
 
         double Re = rho_h * Uo * D / mu_h;
@@ -167,7 +185,8 @@ void run(string configname)
         // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
         // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
         // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
-        kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
+        //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
+        kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
 
         kernel->setWithForcing(true);
         kernel->setForcingX1(0.0);
@@ -186,7 +205,7 @@ void run(string configname)
         kernel->setMultiphaseModelParameters(beta, kappa);
         kernel->setContactAngle(theta);
         kernel->setInterfaceWidth(interfaceWidth);
-        dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0);
+        //dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0);
 
         SPtr<BCProcessor> bcProc(new BCProcessor());
         // BCProcessorPtr bcProc(new ThinWallBCProcessor());
@@ -232,7 +251,7 @@ void run(string configname)
         fctF2.SetExpr("vy1");
         fctF2.DefineConst("vy1", U_LB);
 
-        double startTime = 30;
+        double startTime = 1;
         SPtr<BCAdapter> velBCAdapterF1(
             new MultiphaseVelocityBCAdapter(true, false, false, fctF1, phiH, 0.0, startTime));
         SPtr<BCAdapter> velBCAdapterF2(
@@ -278,9 +297,13 @@ void run(string configname)
             double g_minX2 = 0;
             double g_minX3 = 0;
 
-            double g_maxX1 = 8.0*D;
-            double g_maxX2 = 2.5*D;
-            double g_maxX3 = 2.5*D;
+            //double g_maxX1 = 8.0*D;
+            //double g_maxX2 = 2.5*D;
+            //double g_maxX3 = 2.5*D;
+
+             double g_maxX1 = 1.0 * D; // 8.0 * D;
+             double g_maxX2 = 2.0 * D;
+             double g_maxX3 = 2.0 * D;
 
             // geometry
             SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
@@ -326,10 +349,8 @@ void run(string configname)
             // outflow
             // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
             // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
-            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2, g_minX3, g_maxX1, g_maxX2 + dx, g_maxX3));
-            if (myid == 0)
-                GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow",
-                                           WbWriterVtkXmlASCII::getInstance());
+            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
+            if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow",                                         WbWriterVtkXmlASCII::getInstance());
 
             // double blockLength = blocknx[0] * dx;
 
@@ -407,11 +428,11 @@ void run(string configname)
             InteractorsHelper intHelper(grid, metisVisitor, true);
             //intHelper.addInteractor(cylInt);
             //intHelper.addInteractor(tubes);
-            // intHelper.addInteractor(outflowInt);
+            intHelper.addInteractor(outflowInt);
             // intHelper.addInteractor(cyl2Int);
 
             intHelper.addInteractor(wallXminInt);
-            intHelper.addInteractor(wallXmaxInt);
+            //intHelper.addInteractor(wallXmaxInt);
             intHelper.addInteractor(wallZminInt);
             intHelper.addInteractor(wallZmaxInt);
             intHelper.addInteractor(wallYminInt);
@@ -548,8 +569,8 @@ void run(string configname)
 
         grid->accept(bcVisitor);
 
-        // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
-        TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
+        ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
+        //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
         grid->accept(setConnsVisitor);
 
         SPtr<UbScheduler> visSch(new UbScheduler(outTime));
diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp.new b/apps/cpu/JetBreakup/JetBreakup.cpp.new
new file mode 100644
index 000000000..953a8dee8
--- /dev/null
+++ b/apps/cpu/JetBreakup/JetBreakup.cpp.new
@@ -0,0 +1,638 @@
+#include <iostream>
+#include <memory>
+#include <string>
+
+#include "VirtualFluids.h"
+
+using namespace std;
+
+void setInflowBC(double x1, double x2, double x3, double radius, int dir)
+{
+
+}
+
+void run(string configname)
+{
+    try {
+
+        // Sleep(30000);
+
+        vf::basics::ConfigurationFile config;
+        config.load(configname);
+
+        string pathname = config.getValue<string>("pathname");
+        //string pathGeo = config.getValue<string>("pathGeo");
+        //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");
+        // vector<double>  length = config.getVector<double>("length");
+        double U_LB = config.getValue<double>("U_LB");
+        // double uF2                         = config.getValue<double>("uF2");
+        //double nuL = config.getValue<double>("nuL");
+        //double nuG = config.getValue<double>("nuG");
+        //double densityRatio = config.getValue<double>("densityRatio");
+        //double sigma = config.getValue<double>("sigma");
+        int interfaceWidth = config.getValue<int>("interfaceWidth");
+        //double D          = config.getValue<double>("D");
+        double theta = config.getValue<double>("contactAngle");
+        double D_LB = config.getValue<double>("D_LB");
+        double phiL = config.getValue<double>("phi_L");
+        double phiH = config.getValue<double>("phi_H");
+        double tauH = config.getValue<double>("Phase-field Relaxation");
+        double mob = config.getValue<double>("Mobility");
+
+        double endTime = config.getValue<double>("endTime");
+        double outTime = config.getValue<double>("outTime");
+        double availMem = config.getValue<double>("availMem");
+        //int refineLevel = config.getValue<int>("refineLevel");
+        //double Re = config.getValue<double>("Re");
+        
+        bool logToFile = config.getValue<bool>("logToFile");
+        double restartStep = config.getValue<double>("restartStep");
+        double cpStart = config.getValue<double>("cpStart");
+        double cpStep = config.getValue<double>("cpStep");
+        bool newStart = config.getValue<bool>("newStart");
+
+
+
+        int caseN = config.getValue<int>("case");
+
+        SPtr<vf::mpi::Communicator> comm = vf::mpi::MPICommunicator::getInstance();
+        int myid = comm->getProcessID();
+
+        if (myid == 0)
+            UBLOG(logINFO, "Jet Breakup: Start!");
+
+        if (logToFile) {
+#if defined(__unix__)
+            if (myid == 0) {
+                const char *str = pathname.c_str();
+                mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
+            }
+#endif
+
+            if (myid == 0) {
+                stringstream logFilename;
+                logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
+                UbLog::output_policy::setStream(logFilename.str());
+            }
+        }
+
+        // Sleep(30000);
+
+        double rho_h, rho_l, r_rho, mu_h, mu_l, Uo, D, sigma;
+
+        switch (caseN) {
+            case 1: 
+                //density of heavy fluid (kg/m^3)
+                rho_h = 848; 
+                //density of light fluid (kg/m^3)
+                rho_l =  34.5;
+                //density ratio
+                r_rho = rho_h / rho_l;
+                //dynamic viscosity of heavy fluid (Pa � s)
+                mu_h = 2.87e-3;
+                //dynamic viscosity of light fluid (Pa � s)
+                mu_l = 1.97e-5;
+                //velocity (m/s)
+                Uo = 100;
+                //diameter of jet (m)
+                D = 0.0001;
+                //surface tension (N/m)
+                sigma = 0.03;
+                break;
+            case 2:
+                // density of heavy fluid (kg/m^3)
+                rho_h = 848;
+                // density of light fluid (kg/m^3)
+                rho_l = 1.205;
+                // density ratio
+                r_rho = rho_h / rho_l;
+                // dynamic viscosity of heavy fluid (Pa � s)
+                mu_h = 2.87e-3;
+                // dynamic viscosity of light fluid (Pa � s)
+                mu_l = 1.84e-5;
+                // velocity (m/s)
+                Uo = 200;
+                // diameter of jet (m)
+                D = 0.0001;
+                // surface tension (N/m)
+                sigma = 0.03;
+                break;
+            case 3:
+                // density of heavy fluid (kg/m^3)
+                rho_h = 1000;
+                // density of light fluid (kg/m^3)
+                rho_l = 1.0;
+                // density ratio
+                r_rho = rho_h / rho_l;
+                // dynamic viscosity of heavy fluid (Pa � s)
+                mu_h = 2.87e-3;
+                // dynamic viscosity of light fluid (Pa � s)
+                mu_l = 1.84e-5;
+                // velocity (m/s)
+                Uo = 200;
+                // diameter of jet (m)
+                D = 0.0001;
+                // surface tension (N/m)
+                sigma = 0.03;
+                break;
+        }
+
+        double Re = rho_h * Uo * D / mu_h;
+        double We = rho_h * Uo * Uo * D / sigma;
+
+        double dx = D / D_LB;
+        double nu_h = U_LB * D_LB / Re;
+        double nu_l = nu_h;
+
+        double rho_h_LB = 1;
+        //surface tension
+        double sigma_LB = rho_h_LB * U_LB * U_LB * D_LB / We;
+
+        // LBMReal dLB = 0; // = length[1] / dx;
+        LBMReal rhoLB = 0.0;
+        LBMReal nuLB = nu_l; //(uLB*dLB) / Re;
+
+        double beta = 12.0 * sigma_LB / interfaceWidth;
+        double kappa = 1.5 * interfaceWidth * sigma_LB;
+
+        if (myid == 0) {
+            UBLOG(logINFO, "Parameters:");
+            UBLOG(logINFO, "U_LB = " << U_LB);
+            UBLOG(logINFO, "rho = " << rhoLB);
+            UBLOG(logINFO, "nu_l = " << nu_l);
+            UBLOG(logINFO, "nu_h = " << nu_h);
+            UBLOG(logINFO, "Re = " << Re);
+            UBLOG(logINFO, "We = " << We);
+            UBLOG(logINFO, "dx = " << dx);
+            UBLOG(logINFO, "sigma = " << sigma);
+            UBLOG(logINFO, "density ratio = " << r_rho);
+            // UBLOG(logINFO, "number of levels = " << refineLevel + 1);
+            UBLOG(logINFO, "numOfThreads = " << numOfThreads);
+            UBLOG(logINFO, "path = " << pathname);
+        }
+
+        SPtr<LBMUnitConverter> conv(new LBMUnitConverter());
+
+        // const int baseLevel = 0;
+
+        SPtr<LBMKernel> kernel;
+
+        // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
+        // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
+        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
+        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel());
+        // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel());
+        kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
+        //kernel = SPtr<LBMKernel>(new MultiphaseVelocityBaseSplitDistributionLBMKernel());
+        //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel());
+
+        kernel->setWithForcing(true);
+        kernel->setForcingX1(0.0);
+        kernel->setForcingX2(0.0);
+        kernel->setForcingX3(0.0);
+
+        kernel->setPhiL(phiL);
+        kernel->setPhiH(phiH);
+        kernel->setPhaseFieldRelaxation(tauH);
+        kernel->setMobility(mob);
+
+        // nuL, nuG, densityRatio, beta, kappa, theta,
+
+        kernel->setCollisionFactorMultiphase(nu_h, nu_l);
+        kernel->setDensityRatio(r_rho);
+        kernel->setMultiphaseModelParameters(beta, kappa);
+        kernel->setContactAngle(theta);
+        kernel->setInterfaceWidth(interfaceWidth);
+        //dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0);
+
+        SPtr<BCProcessor> bcProc(new BCProcessor());
+        // BCProcessorPtr bcProc(new ThinWallBCProcessor());
+
+        kernel->setBCProcessor(bcProc);
+
+        SPtr<Grid3D> grid(new Grid3D(comm));
+        // grid->setPeriodicX1(true);
+        // grid->setPeriodicX2(true);
+        // grid->setPeriodicX3(true);
+        grid->setGhostLayerWidth(2);
+
+        SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(
+            comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE));
+
+        //////////////////////////////////////////////////////////////////////////
+        // restart
+        SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
+        // SPtr<MPIIORestartCoProcessor> rcp(new MPIIORestartCoProcessor(grid, rSch, pathname, comm));
+        SPtr<MPIIOMigrationCoProcessor> rcp(new MPIIOMigrationCoProcessor(grid, rSch, metisVisitor, pathname, comm));
+        // SPtr<MPIIOMigrationBECoProcessor> rcp(new MPIIOMigrationBECoProcessor(grid, rSch, pathname, comm));
+        // rcp->setNu(nuLB);
+        // rcp->setNuLG(nuL, nuG);
+        // rcp->setDensityRatio(densityRatio);
+
+        rcp->setLBMKernel(kernel);
+        rcp->setBCProcessor(bcProc);
+        //////////////////////////////////////////////////////////////////////////
+        // BC Adapter
+        //////////////////////////////////////////////////////////////////////////////
+            // bounding box
+        double g_minX1 = 0;
+        double g_minX2 = 0;
+        double g_minX3 = 0;
+
+        double g_maxX1 = 8.0 * D;//8.0 * D;
+        double g_maxX2 = 5.0 * D;
+        double g_maxX3 = 5.0 * D;
+
+        //double g_maxX1 = 1.0 * D; // 8.0 * D;
+        //double g_maxX2 = 2.0 * D;
+        //double g_maxX3 = 2.0 * D;
+
+
+        LBMReal x1c = 0;  // (g_maxX1 - g_minX1-1)/2; //
+        LBMReal x2c = (g_maxX2 - g_minX2) / 2;
+        LBMReal x3c = (g_maxX3 - g_minX3) / 2;
+        
+        mu::Parser fctF1;
+        // fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))");
+        // fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1");
+        fctF1.SetExpr("vy1");
+        fctF1.DefineConst("vy1", 0.0);
+        fctF1.DefineConst("R", 8.0);
+        fctF1.DefineConst("x0", 0.0);
+        fctF1.DefineConst("z0", 0.0);
+        // SPtr<BCAdapter> velBCAdapterF1(
+        //    new MultiphaseVelocityBCAdapter(false, true, false, fctF1, phiH, 0.0, BCFunction::INFCONST));
+
+        mu::Parser fctF2;
+        fctF2.SetExpr("vy1");//*(1-(sqrt((x2-x2c)*(x2-x2c)+(x3-x3c)*(x3-x3c))/R))");
+        fctF2.DefineConst("vy1", U_LB);
+        fctF2.DefineConst("R", D*0.5);
+        fctF2.DefineConst("x1c", x1c);
+        fctF2.DefineConst("x2c", x2c);
+        fctF2.DefineConst("x3c", x3c);
+
+
+        double startTime = 1;
+        SPtr<BCAdapter> velBCAdapterF1(
+            new MultiphaseVelocityBCAdapter(true, false, false, fctF1, phiH, 0.0, startTime));
+        SPtr<BCAdapter> velBCAdapterF2(
+            new MultiphaseVelocityBCAdapter(true, false, false, fctF2, phiH, startTime, endTime));
+
+        SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
+        noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNoSlipBCAlgorithm()));
+
+        SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB));
+        denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNonReflectingOutflowBCAlgorithm()));
+
+        mu::Parser fctPhi_F1;
+        fctPhi_F1.SetExpr("phiH");
+        fctPhi_F1.DefineConst("phiH", phiH);
+
+        mu::Parser fctPhi_F2;
+        fctPhi_F2.SetExpr("phiL");
+        fctPhi_F2.DefineConst("phiL", phiL);
+
+        mu::Parser fctvel_F2_init;
+        fctvel_F2_init.SetExpr("U");
+        fctvel_F2_init.DefineConst("U", 0);
+
+        velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm()));
+        //////////////////////////////////////////////////////////////////////////////////
+        // BC visitor
+        MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
+        bcVisitor.addBC(noSlipBCAdapter);
+        bcVisitor.addBC(denBCAdapter); // Ohne das BB?
+        bcVisitor.addBC(velBCAdapterF1);
+
+        //SPtr<D3Q27Interactor> inflowF1Int;
+        //SPtr<D3Q27Interactor> cylInt;
+
+        SPtr<D3Q27Interactor> inflowInt;
+
+        if (newStart) {
+
+            //  if (newStart) {
+
+
+
+
+
+            // geometry
+            SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3));
+            if (myid == 0)
+                GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube",
+                                           WbWriterVtkXmlBinary::getInstance());
+
+            //if (myid == 0)
+            //    UBLOG(logINFO, "Read geoFile:start");
+            //SPtr<GbTriFaceMesh3D> cylinder = make_shared<GbTriFaceMesh3D>();
+            //cylinder->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false);
+            //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance());
+            //if (myid == 0)
+            //    UBLOG(logINFO, "Read geoFile:stop");
+            // inflow
+            // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 *
+            // dx, g_maxX3));
+            //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx,
+            //                                         g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx));
+            //if (myid == 0)
+            //    GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",
+            //                               WbWriterVtkXmlASCII::getInstance());
+
+            GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1,
+                                                       g_maxX2 / 2.0,
+                                                       g_maxX3 / 2.0, D / 2.0));
+            if (myid == 0)
+                GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow",
+                                           WbWriterVtkXmlASCII::getInstance());
+
+            GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1-dx,
+                                                       g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0));
+            if (myid == 0)
+                GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid",
+                                           WbWriterVtkXmlASCII::getInstance());
+
+
+            // GbCylinder3DPtr cylinder2(
+            //    new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx));
+            // if (myid == 0)
+            //    GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2",
+            //                               WbWriterVtkXmlASCII::getInstance());
+            // outflow
+            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original)
+            // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
+            GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
+            if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow",                                         WbWriterVtkXmlASCII::getInstance());
+
+            // double blockLength = blocknx[0] * dx;
+
+            if (myid == 0) {
+                UBLOG(logINFO, "Preprocess - start");
+            }
+
+            grid->setDeltaX(dx);
+            grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]);
+
+            grid->setPeriodicX1(false);
+            grid->setPeriodicX2(false);
+            grid->setPeriodicX3(false);
+
+            GenBlocksGridVisitor genBlocks(gridCube);
+            grid->accept(genBlocks);
+
+            SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor(
+                grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
+
+            //SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter,
+            //                                                        Interactor3D::SOLID, Interactor3D::POINTS));
+
+            // inflowF1Int =
+            //    SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            // inflowF1Int->addBCAdapter(velBCAdapterF2);
+
+            SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
+
+            // Create boundary conditions geometry
+            GbCuboid3DPtr wallXmin(
+                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_minX1, g_maxX2 + 2.0*dx, g_maxX3));
+            GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
+            GbCuboid3DPtr wallXmax(
+                new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
+            GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
+            GbCuboid3DPtr wallZmin(
+                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3));
+            GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
+            GbCuboid3DPtr wallZmax(
+                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx));
+            GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
+            GbCuboid3DPtr wallYmin(
+                new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_minX2, g_maxX3));
+            GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
+            GbCuboid3DPtr wallYmax(
+                new GbCuboid3D(g_minX1 - 2.0*dx, g_maxX2, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3));
+            GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance());
+
+            // Add boundary conditions to grid generator
+            SPtr<D3Q27Interactor> wallXminInt(
+                new D3Q27Interactor(wallXmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            SPtr<D3Q27Interactor> wallXmaxInt(
+                new D3Q27Interactor(wallXmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            SPtr<D3Q27Interactor> wallZminInt(
+                new D3Q27Interactor(wallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            SPtr<D3Q27Interactor> wallZmaxInt(
+                new D3Q27Interactor(wallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            SPtr<D3Q27Interactor> wallYminInt(
+                new D3Q27Interactor(wallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            SPtr<D3Q27Interactor> wallYmaxInt(
+                new D3Q27Interactor(wallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID));
+
+            //cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCAdapterF1, Interactor3D::SOLID));
+            //cylInt->addBCAdapter(velBCAdapterF2);
+            // SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBCAdapter,
+            // Interactor3D::SOLID));
+
+            inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapterF1, Interactor3D::SOLID));
+            inflowInt->addBCAdapter(velBCAdapterF2);
+
+            SPtr<D3Q27Interactor> solidInt =
+                SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBCAdapter, Interactor3D::SOLID));
+
+            InteractorsHelper intHelper(grid, metisVisitor, true);
+            //intHelper.addInteractor(cylInt);
+            //intHelper.addInteractor(tubes);
+            intHelper.addInteractor(outflowInt);
+            // intHelper.addInteractor(cyl2Int);
+
+            intHelper.addInteractor(wallXminInt);
+            //intHelper.addInteractor(wallXmaxInt);
+            intHelper.addInteractor(wallZminInt);
+            intHelper.addInteractor(wallZmaxInt);
+            intHelper.addInteractor(wallYminInt);
+            intHelper.addInteractor(wallYmaxInt);
+            intHelper.addInteractor(inflowInt);
+            //intHelper.addInteractor(solidInt);
+
+            intHelper.selectBlocks();
+
+            ppblocks->process(0);
+            ppblocks.reset();
+
+            unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks();
+            int ghostLayer = 3;
+            unsigned long long numberOfNodesPerBlock =
+                (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]);
+            unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock;
+            unsigned long long numberOfNodesPerBlockWithGhostLayer =
+                numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer);
+            double needMemAll =
+                double(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(double) + sizeof(int) + sizeof(float) * 4));
+            double needMem = needMemAll / double(comm->getNumberOfProcesses());
+
+            if (myid == 0) {
+                UBLOG(logINFO, "Number of blocks = " << numberOfBlocks);
+                UBLOG(logINFO, "Number of nodes  = " << numberOfNodes);
+                int minInitLevel = grid->getCoarsestInitializedLevel();
+                int maxInitLevel = grid->getFinestInitializedLevel();
+                for (int level = minInitLevel; level <= maxInitLevel; level++) {
+                    int nobl = grid->getNumberOfBlocks(level);
+                    UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl);
+                    UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock);
+                }
+                UBLOG(logINFO, "Necessary memory  = " << needMemAll << " bytes");
+                UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes");
+                UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
+            }
+
+            MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l,0,0,0,0, availMem, needMem);
+
+            grid->accept(kernelVisitor);
+
+            //if (refineLevel > 0) {
+            //    SetUndefinedNodesBlockVisitor undefNodesVisitor;
+            //    grid->accept(undefNodesVisitor);
+            //}
+
+            intHelper.setBC();
+
+            // initialization of distributions
+            //mu::Parser fct1;
+            //fct1.SetExpr("phiL");
+            //fct1.DefineConst("phiL", phiL);
+            
+            mu::Parser fct1;
+            fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
+            fct1.DefineConst("x1c", x1c);
+            fct1.DefineConst("x2c", x2c);
+            fct1.DefineConst("x3c", x3c);
+            fct1.DefineConst("radius", 0.5*D);
+            fct1.DefineConst("interfaceThickness", interfaceWidth*dx);
+
+            MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
+            initVisitor.setPhi(fct1);
+            grid->accept(initVisitor);
+            ///////////////////////////////////////////////////////////////////////////////////////////
+            //{
+            // std::vector<std::vector<SPtr<Block3D>>> blockVector;
+            // int gridRank = comm->getProcessID();
+            // int minInitLevel = grid->getCoarsestInitializedLevel();
+            // int maxInitLevel = grid->getFinestInitializedLevel();
+            // blockVector.resize(maxInitLevel + 1);
+            // for (int level = minInitLevel; level <= maxInitLevel; level++) {
+            //    grid->getBlocks(level, gridRank, true, blockVector[level]);
+            //}
+            //    for (int level = minInitLevel; level <= maxInitLevel; level++) {
+            //    for (SPtr<Block3D> block : blockVector[level]) {
+            //        if (block) {
+            //            int ix1 = block->getX1();
+            //            int ix2 = block->getX2();
+            //            int ix3 = block->getX3();
+            //            int level = block->getLevel();
+
+            //            for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) {
+            //                SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level);
+
+            //                if (!neighBlock) {
+
+            //                }
+            //            }
+            //        }
+            //    }
+            //}
+            //    SPtr<Block3D> block = grid->getBlock(0, 0, 0, 0);
+            //    SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel());
+            //    SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray();
+
+            //    for (int ix3 = 0; ix3 <= 13; ix3++) {
+            //        for (int ix2 = 0; ix2 <= 13; ix2++) {
+            //            for (int ix1 = 0; ix1 <= 13; ix1++) {
+            //                if (ix1 == 0 || ix2 == 0 || ix3 == 0 || ix1 == 13 || ix2 == 13 || ix3 == 13)
+            //                    bcArray->setUndefined(ix1, ix2, ix3);
+            //            }
+            //        }
+            //    }
+            //}
+            ////////////////////////////////////////////////////////////////////////////////////////////
+            // boundary conditions grid
+            {
+                SPtr<UbScheduler> geoSch(new UbScheduler(1));
+                SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(
+                    grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm));
+                ppgeo->process(0);
+                ppgeo.reset();
+            }
+
+            if (myid == 0)
+                UBLOG(logINFO, "Preprocess - end");
+        } else {
+            rcp->restart((int)restartStep);
+            grid->setTimeStep(restartStep);
+
+            if (myid == 0)
+                UBLOG(logINFO, "Restart - end");
+        }
+        
+        //  TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
+        //  grid->accept(setConnsVisitor);
+
+        // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
+
+        grid->accept(bcVisitor);
+
+         ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
+        //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
+        grid->accept(setConnsVisitor);
+
+        SPtr<UbScheduler> visSch(new UbScheduler(outTime));
+        double t_ast, t;
+        t_ast = 7.19;
+        t = (int)(t_ast/(U_LB/(D_LB)));
+        visSch->addSchedule(t,t,t); //t=7.19
+        SPtr<WriteMultiphaseQuantitiesCoProcessor> pp(new WriteMultiphaseQuantitiesCoProcessor(
+            grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm));
+        pp->process(0);
+
+        SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100));
+        SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm));
+
+        SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime));
+        auto timeDepBC = make_shared<TimeDependentBCCoProcessor>(TimeDependentBCCoProcessor(grid, timeBCSch));
+        timeDepBC->addInteractor(inflowInt);
+
+#ifdef _OPENMP
+        omp_set_num_threads(numOfThreads);
+#endif
+
+        SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
+        SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
+        calculator->addCoProcessor(npr);
+        calculator->addCoProcessor(pp);
+        calculator->addCoProcessor(timeDepBC);
+        calculator->addCoProcessor(rcp);
+
+        if (myid == 0)
+            UBLOG(logINFO, "Simulation-start");
+        calculator->calculate();
+        if (myid == 0)
+            UBLOG(logINFO, "Simulation-end");
+    } catch (std::exception &e) {
+        cerr << e.what() << endl << flush;
+    } catch (std::string &s) {
+        cerr << s << endl;
+    } catch (...) {
+        cerr << "unknown exception" << endl;
+    }
+}
+int main(int argc, char *argv[])
+{
+    // Sleep(30000);
+    if (argv != NULL) {
+        if (argv[1] != NULL) {
+            run(string(argv[1]));
+        } else {
+            cout << "Configuration file is missing!" << endl;
+        }
+    }
+}
diff --git a/apps/cpu/Nozzle/in.nozzle b/apps/cpu/Nozzle/in.nozzle
index 4479b5e3c..7b633f553 100644
--- a/apps/cpu/Nozzle/in.nozzle
+++ b/apps/cpu/Nozzle/in.nozzle
@@ -76,13 +76,15 @@ region bc cylinder z -1.3013105 0.388582 0.01275005 0.18055 0.20105 units box
        # nparticles 6000 massrate 0.1 insert_every 1000 overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 &
        # insertion_face inface 
        
-# fix    ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 &
-       # nparticles 6000 massrate 0.1 insert_every ones overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 &
-       # insertion_face inface 
-
-fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 1000 &
-                        overlapcheck yes volumefraction_region 0.1 region bc ntry_mc 1001
-   
+ # fix    ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 &
+        # nparticles 6000 massrate 0.1 insert_every ones overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 &
+        # insertion_face inface 
+
+#working setup
+# fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 1000 &
+                       # overlapcheck yes vel constant 0.0 0.0 -1.0 volumefraction_region 0.1 region bc ntry_mc 1001
+fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 10 &
+                       overlapcheck yes vel constant 0.0 0.0 -1.0 volumefraction_region 0.1 region bc ntry_mc 1001   
        
 # fix    ins all insert/stream seed 32452867 distributiontemplate pdd1 &
        # nparticles INF massrate 0.1 overlapcheck yes all_in yes vel constant 0.0 0.0 -1.0 &
diff --git a/apps/cpu/Nozzle/nozzle.cpp b/apps/cpu/Nozzle/nozzle.cpp
index 81ab57a73..ab07f1f91 100644
--- a/apps/cpu/Nozzle/nozzle.cpp
+++ b/apps/cpu/Nozzle/nozzle.cpp
@@ -1,4 +1,4 @@
-#include <iostream>
+#include <iostream>
 #include <string>
 #include <memory>
 
@@ -30,61 +30,229 @@ int main(int argc, char *argv[])
 
     double g_minX1 = -1341.81e-3 + 10e-3;
     double g_minX2 =  0.360872;
-    double g_minX3 = -210e-3;
+    double g_minX3 = 0;//-210e-3;
 
     double g_maxX1 = -1260.81e-3 - 10e-3;
     double g_maxX2 =  0.416302;
-    double g_maxX3 =  210e-3;
+    double g_maxX3 = 0.20105; //210e-3;
 
     int blockNX[3] = { 10, 10, 10 };
 
     double dx = 1e-3;
 
-    double nuLB = 1e-3;
-    double uLB  = -0.01;
-    double rhoLB = 0.0;
+    double uLB  = 0.0001;
+    //double rhoLB = 0.0;
 
-    SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
+    // concrete 
+    double d_part = 1e-3;
+    double V = 0.4;     // flow rate [m^3/h]
+    double D = 0.026;   // shotcrete inlet diameter [m]
+    double R = D / 2.0; // radius [m]
+    double A = UbMath::PI * R * R;
+    double u = V / 3600 / A;
+    double muConcrete = 2.1133054011798826; // [Pa s]
+    double tau0 = 715.218181094648; //
+    double rhoConcrete = 2400; // [kg/m^3]
+    double nu = muConcrete / rhoConcrete;
+    double rhoAir = 1.2041; // [kg/m^3]
+    //double Re_D = d_part * u / nu;
+    //if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D);
+    //
+    SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB);
+    //double nuLB = D*units->getFactorLentghWToLb() * u*units->getFactorVelocityWToLb() / Re_D;
+    //if (myid == 0) UBLOG(logINFO, "nuLB = " << nuLB);
+
+    double interfaceThickness = 4.096;
+    double sigma = 0.03;
+    double Re = rhoConcrete * u * d_part / muConcrete;
+    double We = rhoConcrete * u * u * d_part / sigma;
+
+    double nu_h_LB = uLB * d_part / Re;
+    double nu_l_LB = nu_h_LB;
+    if (myid == 0) UBLOG(logINFO, "nu_h = " << nu_h_LB << " nu_l = " << nu_l_LB);
+
+    double rho_h_LB = 1;
+
+    // surface tension
+    double sigma_LB = rho_h_LB * uLB * uLB * d_part / We;
+    if (myid == 0) UBLOG(logINFO, "sigma_LB = " << sigma_LB);
+
+    // LBMReal dLB = 0; // = length[1] / dx;
+    LBMReal rhoLB = 0.0;
+    //LBMReal nuLB = nu_l; //(uLB*dLB) / Re;
+
+    double beta = 12.0 * sigma_LB / interfaceThickness;
+    double kappa = 1.5 * interfaceThickness * sigma_LB;
+
+    double phiL = 0.0;
+    double phiH = 1.0;
+    double tauH = 0.6; // Phase - field Relaxation
+    double mob = 0.02; // Mobility
+    //double nuL = 1e-2;
+    //double nuG = 0.015811388300841892;
+    double densityRatio =  rhoConcrete / rhoAir;
+    //double sigma_old = 1.0850694444444444e-06;
+    //
+    //double beta_old = 12.0 * sigma / interfaceThickness;
+    //double kappa_old = 1.5 * interfaceThickness * sigma;
+    
+    double theta = 110; //contact angle
+
+    //https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/
+
+    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
+    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
+    //SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB));
+    //SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB));
+    //SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef);
+    if (myid == 0) std::cout << units->toString() << std::endl;
+
+    //SPtr<LBMKernel> kernel   = make_shared<IBcumulantK17LBMKernel>();
     //SPtr<LBMKernel> kernel   = make_shared<CumulantK17LBMKernel>();
+    //SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>();
+    SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>();
+
+    kernel->setWithForcing(true);
+    kernel->setForcingX1(0.0);
+    kernel->setForcingX2(0.0);
+    kernel->setForcingX3(0.0);
+
+    kernel->setPhiL(phiL);
+    kernel->setPhiH(phiH);
+    kernel->setPhaseFieldRelaxation(tauH);
+    kernel->setMobility(mob);
+    kernel->setInterfaceWidth(interfaceThickness);
+
+    kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB);
+    kernel->setDensityRatio(densityRatio);
+    kernel->setMultiphaseModelParameters(beta, kappa);
+    kernel->setContactAngle(theta);
+ 
     SPtr<BCProcessor> bcProc = make_shared<BCProcessor>();
     kernel->setBCProcessor(bcProc);
 
+    //SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
+    //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
     SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-    noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
+    noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNoSlipBCAlgorithm()));
+
 
     mu::Parser fct;
-    fct.SetExpr("U");
-    fct.DefineConst("U", uLB);
-    SPtr<BCAdapter> inflowBCAdapter(new VelocityBCAdapter(false, false, true, fct, 0, BCFunction::INFCONST));
-    inflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
+
+    {
+        // concrete inflow boundary condition
+        fct.SetExpr("U");
+        fct.DefineConst("U", -u*units->getFactorVelocityWToLb());
+        if (myid == 0) UBLOG(logINFO, "Concrete inflow velocity = " << u << " m/s");
+        if (myid == 0) UBLOG(logINFO, "Concrete inflow velocity = " << u*units->getFactorVelocityWToLb() << " dx/dt");
+    //    // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
+    //    // Mechanics, 21(6), 371-379.
+    //    double cx1 = -1.31431 + R;
+    //    double cx2 = 0.375582 + R;
+    //    //double cx3 = 0.20105 + R;
+    //    double L = g_maxX1 - g_minX1;
+    //    double p_concrete = 7e5; // Pa = 7 Bar
+    //    double p1 = p_concrete * units->getFactorPressureWToLb();
+    //    double p2 = 0.0;
+    //    double drhoLB = 1.0 + rhoLB;
+    //    double muLB = drhoLB * nuLB;
+    //    double N = R * R / 2 * muLB * uLB * (p1 - p2) / L - 3;
+
+    //    // mu::Parser fct;
+    //    fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))");
+    //    fct.DefineConst("x0", cx1);
+    //    fct.DefineConst("y0", cx2);
+    //    //fct.DefineConst("z0", cx3);
+    //    fct.DefineConst("R", R);
+    //    fct.DefineConst("U", uLB * ((N + 3) / (N + 1)));
+    //    fct.DefineConst("NplusOne", N + 1.0);
+    }
+
+    //SPtr<BCAdapter> inflowConcreteBCAdapter(new VelocityBCAdapter(false, false, true, fct, 0, BCFunction::INFCONST));
+    //inflowConcreteBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
+    SPtr<BCAdapter> inflowConcreteBCAdapter(new MultiphaseVelocityBCAdapter(false, false, true, fct, phiH, 0, BCFunction::INFCONST));
+    inflowConcreteBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm()));
+
+    {
+        //air inflow boundary condition
+        // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering
+        // Mechanics, 21(6), 371-379.
+        //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx);
+        SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB);
+        double V = 40;     // flow rate [m^3/h]
+        double D = 0.0166;  // air inlet diameter [m]
+        double R = D / 2.0; // radius [m]
+        double A = UbMath::PI * R * R;
+        double u = V / 3600 / A;
+        double uLB = u * unitsAir->getFactorVelocityWToLb();
+        //double cx1 = -1.2788 + R;
+        double cx2 = 0.3803 + R;
+        double cx3 = 0.1517 + R;
+        double L = g_maxX1 - g_minX1;
+        double p_air = 7e5; // Pa = 7 Bar
+        double p1 = p_air;
+        double p2 = 0.0;
+        double mu = 17.2e-6; //Pa s, air 20° C
+        double N = R * R / 2 * mu * u * (p1 - p2) / L - 3;
+        if (myid == 0) UBLOG(logINFO, "Air inflow velocity = " << u << " m/s");
+        if (myid == 0) UBLOG(logINFO, "Air inflow velocity = " << uLB << " dx/dt");
+
+        double nu = mu / rhoConcrete;
+        double Re = D * u / nu;
+        if (myid == 0) UBLOG(logINFO, "Re_air = " << Re);
+
+        double nuLB = D * unitsAir->getFactorLentghWToLb() * uLB * unitsAir->getFactorVelocityWToLb() / Re;
+        if (myid == 0) UBLOG(logINFO, "nuLB_air = " << nuLB);
+
+        // mu::Parser fct;
+        fct.SetExpr("U");
+        fct.DefineConst("U", -uLB);
+        //fct.SetExpr("U*(1-(((((x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))");
+        ////fct.DefineConst("x0", cx1);
+        //fct.DefineConst("y0", cx2);
+        //fct.DefineConst("z0", cx3);
+        //fct.DefineConst("R", R);
+        //fct.DefineConst("U", -uLB * ((N + 3) / (N + 1)));
+        //fct.DefineConst("NplusOne", N + 1.0);
+    }
+
+    //SPtr<BCAdapter> inflowAirBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
+    //inflowAirBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
+    SPtr<BCAdapter> inflowAirBCAdapter(new MultiphaseVelocityBCAdapter(true, false, false, fct, phiL, 0, BCFunction::INFCONST));
+    inflowAirBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm()));
 
     SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB));
-    outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
+    //outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
+    //SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB));
+    outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNonReflectingOutflowBCAlgorithm()));
     //////////////////////////////////////////////////////////////////////////////////
     // BC visitor
-    BoundaryConditionsBlockVisitor bcVisitor;
+    //BoundaryConditionsBlockVisitor bcVisitor;♣
+    MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
     bcVisitor.addBC(noSlipBCAdapter);
-    bcVisitor.addBC(inflowBCAdapter);
+    bcVisitor.addBC(inflowConcreteBCAdapter);
+    bcVisitor.addBC(inflowAirBCAdapter);
     bcVisitor.addBC(outflowBCAdapter);
 
     SPtr<Grid3D> grid = make_shared<Grid3D>(comm);
-    grid->setPeriodicX1(true);
-    grid->setPeriodicX2(true);
+    grid->setPeriodicX1(false);
+    grid->setPeriodicX2(false);
     grid->setPeriodicX3(false);
     grid->setDeltaX(dx);
     grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]);
+    grid->setGhostLayerWidth(2);
 
     string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo";
 
-    string outputPath = "f:/temp/NozzleFlowTestSerial";
+    string outputPath = "d:/temp/NozzleFlowTest_Multiphase";
     UbSystem::makeDirectory(outputPath);
     UbSystem::makeDirectory(outputPath + "/liggghts");
 
-    if (myid == 0) {
-        stringstream logFilename;
-        logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
-        UbLog::output_policy::setStream(logFilename.str());
-    }
+    //if (myid == 0) {
+    //    stringstream logFilename;
+    //    logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt";
+    //    UbLog::output_policy::setStream(logFilename.str());
+    //}
 
     SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::DIR_MMM, MetisPartitioner::RECURSIVE));
     
@@ -154,17 +322,26 @@ int main(int argc, char *argv[])
     //inflow
     GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181+0.0005, 0.390872-0.00229, 0.20105, -1.30181+0.0005, 0.390872-0.00229, 0.23, 0.013));
     if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance());
-    SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowBCAdapter, Interactor3D::SOLID));
+    SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBCAdapter, Interactor3D::SOLID));
     ///////////////////////////////////////////////////////////
     //outflow
     GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181+0.0005, 0.390872-0.00229, -0.22, -1.30181+0.0005, 0.390872-0.00229, -0.21, 0.013));
     if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-    SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, inflowBCAdapter, Interactor3D::SOLID));
+    SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID));
+    ///////////////////////////////////////////////////////////
+    SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>();
+    if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start");
+    geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true);
+    if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end");
+    if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance());
+    SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(
+        geoAirInlet, grid, inflowAirBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES);
     ///////////////////////////////////////////////////////////
 
     InteractorsHelper intHelper(grid, metisVisitor, true);
     intHelper.addInteractor(intrBox);
     intHelper.addInteractor(intrInflow);
+    intHelper.addInteractor(intrAirInlet);
     intHelper.addInteractor(intrOutflow);
     intHelper.addInteractor(intrNozzleAirDistributor);
     intHelper.addInteractor(intrNozzleAirInlet);
@@ -185,12 +362,30 @@ int main(int argc, char *argv[])
      if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses()));
 
 
-    SetKernelBlockVisitor kernelVisitor(kernel, nuLB, comm->getNumberOfProcesses());
+    //SetKernelBlockVisitor kernelVisitor(kernel, nuLB, comm->getNumberOfProcesses());
+     MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1);
     grid->accept(kernelVisitor);
 
     intHelper.setBC();
 
-    InitDistributionsBlockVisitor initVisitor;
+    //InitDistributionsBlockVisitor initVisitor;
+    //grid->accept(initVisitor);
+
+    double x1c = -1.31431 + R;
+    double x2c = 0.375582 + R;
+    double x3c = 0.20105;
+
+    mu::Parser fct1;
+    //fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
+    fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)");
+    fct1.DefineConst("x1c", x1c);
+    fct1.DefineConst("x2c", x2c);
+    fct1.DefineConst("x3c", x3c);
+    fct1.DefineConst("radius", R);
+    fct1.DefineConst("interfaceThickness", interfaceThickness * dx);
+
+    MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor;
+    initVisitor.setPhi(fct1);
     grid->accept(initVisitor);
 
   
@@ -199,21 +394,11 @@ int main(int argc, char *argv[])
     MPI_Comm mpi_comm = *(MPI_Comm*)(comm->getNativeCommunicator());
     LiggghtsCouplingWrapper wrapper(argv, mpi_comm);
 
-
-    double d_part = 1e-3;
- 
-    // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx);
-    //SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx);
-    SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, 0.01);
-    if (myid == 0) std::cout << units->toString() << std::endl;
-
-    //return 0;
-
     double v_frac = 0.1;
     double dt_phys   = units->getFactorTimeLbToW();
     int demSubsteps = 10;
     double dt_dem   = dt_phys / (double)demSubsteps;
-    int vtkSteps    = 100;
+    int vtkSteps    = 1000;
     string demOutDir = outputPath + "/liggghts";
 
     //wrapper.execCommand("echo none");
@@ -225,8 +410,8 @@ int main(int argc, char *argv[])
     wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps);
     wrapper.setVariable("dmp_dir", demOutDir);
 
-    wrapper.execFile((char *)inFile1.c_str());
-    wrapper.runUpto(demSubsteps - 1);
+    //wrapper.execFile((char *)inFile1.c_str());
+    //wrapper.runUpto(demSubsteps - 1);
     //wrapper.runUpto(1000);
 
     SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); 
@@ -236,15 +421,16 @@ int main(int argc, char *argv[])
     // boundary conditions grid
     {
         SPtr<UbScheduler> geoSch(new UbScheduler(1));
-        SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(
-            grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
+        SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm));
         ppgeo->process(0);
         ppgeo.reset();
     }
 
     grid->accept(bcVisitor);
 
-    OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
+    //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm);
+    //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
+    ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm);
     grid->accept(setConnsVisitor);
 
     int numOfThreads          = 18;
@@ -256,16 +442,16 @@ int main(int argc, char *argv[])
     //// write data for visualization of macroscopic quantities
     SPtr < UbScheduler> visSch(new UbScheduler(vtkSteps));
     //SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800));
-    visSch->addSchedule(1, 8700, 8800);
-    SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(
-        new WriteMacroscopicQuantitiesCoProcessor(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(),
+   // visSch->addSchedule(1, 8700, 8800);
+    SPtr<WriteMultiphaseQuantitiesCoProcessor> writeMQCoProcessor(
+        new WriteMultiphaseQuantitiesCoProcessor(grid, visSch, outputPath, WbWriterVtkXmlASCII::getInstance(),
                                                   SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
     writeMQCoProcessor->process(0);
 
-    int endTime = 10000000; //20;
+    int endTime = 1000000;
     SPtr<Calculator> calculator(new BasicCalculator(grid, lScheduler, endTime));
     calculator->addCoProcessor(nupsCoProcessor);
-    calculator->addCoProcessor(lcCoProcessor);
+   // calculator->addCoProcessor(lcCoProcessor);
     calculator->addCoProcessor(writeMQCoProcessor);
 
     if (myid == 0) UBLOG(logINFO, "Simulation-start");
diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h
index a9181e228..ade31e5fd 100644
--- a/src/cpu/VirtualFluids.h
+++ b/src/cpu/VirtualFluids.h
@@ -256,6 +256,7 @@
 #include <LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h>
 #include <LBM/MultiphasePressureFilterLBMKernel.h>
 #include <LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h>
+#include <MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h>
 
 
 
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
index 67a3620c0..f8e77af6d 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h
@@ -69,6 +69,8 @@ public:
     static const char RheologyPowellEyringModelNoSlipBCAlgorithm           = 18;
     static const char RheologyBinghamModelVelocityBCAlgorithm              = 19;
     static const char MultiphaseNoSlipBCAlgorithm                  = 20;
+    static const char MultiphaseVelocityBCAlgorithm = 21;
+
 
 
 public:
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp
index d66094dcc..abaf54808 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp
@@ -33,4 +33,4 @@
 
 #include "BoundaryConditions.h"
 
-const long long BoundaryConditions::maxOptionVal = (1 << optionDigits) - 1; // 2^3-1 -> 7
+const long long BoundaryConditions::maxOptionVal = (1 << optionDigits) - 1; // 2^2-1 -> 3
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNoSlipBCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNoSlipBCAlgorithm.cpp
index 76128e0e7..aafa0da55 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNoSlipBCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNoSlipBCAlgorithm.cpp
@@ -66,17 +66,20 @@ void MultiphaseNoSlipBCAlgorithm::applyBC()
 {
    LBMReal f[D3Q27System::ENDF+1];
    LBMReal h[D3Q27System::ENDF+1];
-   LBMReal feq[D3Q27System::ENDF+1];
-   LBMReal heq[D3Q27System::ENDF+1];
+   LBMReal h2[D3Q27System::ENDF + 1];
+   //LBMReal feq[D3Q27System::ENDF+1];
+   //LBMReal heq[D3Q27System::ENDF+1];
    distributions ->getDistributionInv(f, x1, x2, x3);
+   if (distributionsH2)
+       distributionsH2->getDistributionInv(h2, x1, x2, x3);
    distributionsH->getDistributionInv(h, x1, x2, x3);
-   LBMReal phi, vx1, vx2, vx3, p1;
+  // LBMReal phi, vx1, vx2, vx3, p1;
    
-   D3Q27System::calcDensity(h, phi);
+ //  D3Q27System::calcDensity(h, phi);
    
-   calcMacrosFct(f, p1, vx1, vx2, vx3);
-   D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
-   D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); 
+ //  calcMacrosFct(f, p1, vx1, vx2, vx3);
+ //  D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
+ //  D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); 
 
    for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
    {
@@ -85,13 +88,18 @@ void MultiphaseNoSlipBCAlgorithm::applyBC()
          //quadratic bounce back
          const int invDir = D3Q27System::INVDIR[fdir];
 		 LBMReal fReturn = f[invDir];
-         //if (UbMath::isNaN(fReturn))
-             //UBLOG(logINFO, "fReturn: " << fReturn);
-         distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
-		 LBMReal hReturn = h[invDir];
-         //if (UbMath::isNaN(hReturn))
-             //UBLOG(logINFO, "hReturn: " << hReturn);
-		 distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         //distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
+         LBMReal hReturn = h[invDir];
+		// distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+         distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
+         if (distributionsH2)
+         {
+             LBMReal h2Return = h2[invDir];
+             distributionsH2->setDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB
+            // distributionsH2->setDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+
+         }
       }
    }
 }
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.cpp
index fc6019244..054227ecd 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.cpp
@@ -62,6 +62,11 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::addDistributionsH(SPtr<Distribut
 	this->distributionsH = distributionsH;
 }
 //////////////////////////////////////////////////////////////////////////
+void MultiphaseNonReflectingOutflowBCAlgorithm::addDistributionsH2(SPtr<DistributionArray3D> distributionsH2)
+{
+    this->distributionsH2 = distributionsH2;
+}
+//////////////////////////////////////////////////////////////////////////
 void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 {
    using namespace D3Q27System;
@@ -70,6 +75,8 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
    LBMReal ftemp[ENDF+1];
    LBMReal h[D3Q27System::ENDF+1];
    LBMReal htemp[ENDF+1];
+   LBMReal h2[D3Q27System::ENDF + 1];
+   LBMReal h2temp[ENDF + 1];
 
    int nx1 = x1;
    int nx2 = x2;
@@ -89,45 +96,47 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
    distributions->getDistribution(ftemp, nx1, nx2, nx3);
    distributionsH->getDistribution(h, x1, x2, x3);
    distributionsH->getDistribution(htemp, nx1, nx2, nx3);
+   distributionsH2->getDistribution(h2, x1, x2, x3);
+   distributionsH2->getDistribution(h2temp, nx1, nx2, nx3);
 
-   LBMReal phi, p1, vx1, vx2, vx3;
+   LBMReal /* phi,*/ p1, vx1, vx2, vx3;
    
-   D3Q27System::calcDensity(h, phi);
+   //D3Q27System::calcDensity(h, phi);
    
    calcMacrosFct(f, p1, vx1, vx2, vx3);
 
    switch (direction)
    {
    case DIR_P00:
-      f[DIR_P00] = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_P00];
-      f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PP0];
-      f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PM0];
-      f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_P0P];
-      f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_P0M];
-      f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PPP];
-      f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PMP];
-      f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PPM];
-      f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PMM];
-
-      distributions->setDistributionInvForDirection(f[DIR_P00], x1+DX1[DIR_M00], x2+DX2[DIR_M00], x3+DX3[DIR_M00], DIR_M00);
-      distributions->setDistributionInvForDirection(f[DIR_PP0], x1+DX1[DIR_MM0], x2+DX2[DIR_MM0], x3+DX3[DIR_MM0], DIR_MM0);
-      distributions->setDistributionInvForDirection(f[DIR_PM0], x1+DX1[DIR_MP0], x2+DX2[DIR_MP0], x3+DX3[DIR_MP0], DIR_MP0);
-      distributions->setDistributionInvForDirection(f[DIR_P0P], x1+DX1[DIR_M0M], x2+DX2[DIR_M0M], x3+DX3[DIR_M0M], DIR_M0M);
-      distributions->setDistributionInvForDirection(f[DIR_P0M], x1+DX1[DIR_M0P], x2+DX2[DIR_M0P], x3+DX3[DIR_M0P], DIR_M0P);
+      f[DIR_P00]   = ftemp[DIR_P00]   * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_P00]   ;
+      f[DIR_PP0]  = ftemp[DIR_PP0]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PP0]  ;
+      f[DIR_PM0]  = ftemp[DIR_PM0]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PM0]  ;
+      f[DIR_P0P]  = ftemp[DIR_P0P]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_P0P]  ;
+      f[DIR_P0M]  = ftemp[DIR_P0M]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_P0M]  ;
+      f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PPP] ;
+      f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PMP] ;
+      f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PPM] ;
+      f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[DIR_PMM] ;
+
+      distributions->setDistributionInvForDirection(f[DIR_P00],   x1+DX1[DIR_M00],   x2+DX2[DIR_M00],   x3+DX3[DIR_M00],   DIR_M00);
+      distributions->setDistributionInvForDirection(f[DIR_PP0],  x1+DX1[DIR_MM0],  x2+DX2[DIR_MM0],  x3+DX3[DIR_MM0],  DIR_MM0);
+      distributions->setDistributionInvForDirection(f[DIR_PM0],  x1+DX1[DIR_MP0],  x2+DX2[DIR_MP0],  x3+DX3[DIR_MP0],  DIR_MP0);
+      distributions->setDistributionInvForDirection(f[DIR_P0P],  x1+DX1[DIR_M0M],  x2+DX2[DIR_M0M],  x3+DX3[DIR_M0M],  DIR_M0M);
+      distributions->setDistributionInvForDirection(f[DIR_P0M],  x1+DX1[DIR_M0P],  x2+DX2[DIR_M0P],  x3+DX3[DIR_M0P],  DIR_M0P);
       distributions->setDistributionInvForDirection(f[DIR_PPP], x1+DX1[DIR_MMM], x2+DX2[DIR_MMM], x3+DX3[DIR_MMM], DIR_MMM);
       distributions->setDistributionInvForDirection(f[DIR_PMP], x1+DX1[DIR_MPM], x2+DX2[DIR_MPM], x3+DX3[DIR_MPM], DIR_MPM);
       distributions->setDistributionInvForDirection(f[DIR_PPM], x1+DX1[DIR_MMP], x2+DX2[DIR_MMP], x3+DX3[DIR_MMP], DIR_MMP);
       distributions->setDistributionInvForDirection(f[DIR_PMM], x1+DX1[DIR_MPP], x2+DX2[DIR_MPP], x3+DX3[DIR_MPP], DIR_MPP);
       
-	  h[DIR_P00] = htemp[DIR_P00] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_P00];
-	  h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PP0];
-	  h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PM0];
-	  h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_P0P];
-	  h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_P0M];
-	  h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PPP];
-	  h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PMP];
-	  h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PPM];
-	  h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PMM];
+	  h[DIR_P00]   = htemp[DIR_P00]   * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_P00]   ;
+	  h[DIR_PP0]  = htemp[DIR_PP0]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PP0]  ;
+	  h[DIR_PM0]  = htemp[DIR_PM0]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PM0]  ;
+	  h[DIR_P0P]  = htemp[DIR_P0P]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_P0P]  ;
+	  h[DIR_P0M]  = htemp[DIR_P0M]  * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_P0M]  ;
+	  h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PPP] ;
+	  h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PMP] ;
+	  h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PPM] ;
+	  h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[DIR_PMM] ;
 
 	  distributionsH->setDistributionInvForDirection(h[DIR_P00],   x1+DX1[DIR_M00],   x2+DX2[DIR_M00],   x3+DX3[DIR_M00],   DIR_M00);
 	  distributionsH->setDistributionInvForDirection(h[DIR_PP0],  x1+DX1[DIR_MM0],  x2+DX2[DIR_MM0],  x3+DX3[DIR_MM0],  DIR_MM0);
@@ -138,49 +147,152 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1+DX1[DIR_MPM], x2+DX2[DIR_MPM], x3+DX3[DIR_MPM], DIR_MPM);
 	  distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1+DX1[DIR_MMP], x2+DX2[DIR_MMP], x3+DX3[DIR_MMP], DIR_MMP);
 	  distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1+DX1[DIR_MPP], x2+DX2[DIR_MPP], x3+DX3[DIR_MPP], DIR_MPP);
+
+	  h2[DIR_P00] = h2temp[DIR_P00] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_P00];
+      h2[DIR_PP0] = h2temp[DIR_PP0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_PP0];
+      h2[DIR_PM0] = h2temp[DIR_PM0] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_PM0];
+      h2[DIR_P0P] = h2temp[DIR_P0P] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_P0P];
+      h2[DIR_P0M] = h2temp[DIR_P0M] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_P0M];
+      h2[DIR_PPP] = h2temp[DIR_PPP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_PPP];
+      h2[DIR_PMP] = h2temp[DIR_PMP] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_PMP];
+      h2[DIR_PPM] = h2temp[DIR_PPM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_PPM];
+      h2[DIR_PMM] = h2temp[DIR_PMM] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1) * h2[DIR_PMM];
+
+      distributionsH2->setDistributionInvForDirection(h2[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
 	  
 	  break;
    case DIR_M00:
-      f[DIR_M00]   = ftemp[DIR_M00]   * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_M00]  ;
-      f[DIR_MP0]  = ftemp[DIR_MP0]  * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_MP0] ;
-      f[DIR_MM0]  = ftemp[DIR_MM0]  * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_MM0] ;
-      f[DIR_M0P]  = ftemp[DIR_M0P]  * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_M0P] ;
-      f[DIR_M0M]  = ftemp[DIR_M0M]  * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_M0M] ;
-      f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_MPP];
-      f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_MMP];
-      f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_MPM];
-      f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[DIR_MMM];
-
-      distributions->setDistributionInvForDirection(f[DIR_M00],   x1+DX1[DIR_P00],   x2+DX2[DIR_P00],   x3+DX3[DIR_P00],     DIR_P00);
-      distributions->setDistributionInvForDirection(f[DIR_MP0],  x1+DX1[DIR_PM0],  x2+DX2[DIR_PM0],  x3+DX3[DIR_PM0],   DIR_PM0);
-      distributions->setDistributionInvForDirection(f[DIR_MM0],  x1+DX1[DIR_PP0],  x2+DX2[DIR_PP0],  x3+DX3[DIR_PP0],   DIR_PP0);
-      distributions->setDistributionInvForDirection(f[DIR_M0P],  x1+DX1[DIR_P0M],  x2+DX2[DIR_P0M],  x3+DX3[DIR_P0M],   DIR_P0M);
-      distributions->setDistributionInvForDirection(f[DIR_M0M],  x1+DX1[DIR_P0P],  x2+DX2[DIR_P0P],  x3+DX3[DIR_P0P],   DIR_P0P);
-      distributions->setDistributionInvForDirection(f[DIR_MPP], x1+DX1[DIR_PMM], x2+DX2[DIR_PMM], x3+DX3[DIR_PMM], DIR_PMM);
-      distributions->setDistributionInvForDirection(f[DIR_MMP], x1+DX1[DIR_PPM], x2+DX2[DIR_PPM], x3+DX3[DIR_PPM], DIR_PPM);
-      distributions->setDistributionInvForDirection(f[DIR_MPM], x1+DX1[DIR_PMP], x2+DX2[DIR_PMP], x3+DX3[DIR_PMP], DIR_PMP);
-      distributions->setDistributionInvForDirection(f[DIR_MMM], x1+DX1[DIR_PPP], x2+DX2[DIR_PPP], x3+DX3[DIR_PPP], DIR_PPP);
+      if (false /* vx1 >= 0*/) {
 
-	  h[DIR_M00]   = htemp[DIR_M00]  * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_M00]  ;
-	  h[DIR_MP0]  = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_MP0] ;
-	  h[DIR_MM0]  = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_MM0] ;
-	  h[DIR_M0P]  = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_M0P] ;
-	  h[DIR_M0M]  = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_M0M] ;
-	  h[DIR_MPP] = htemp[DIR_MPP]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_MPP];
-	  h[DIR_MMP] = htemp[DIR_MMP]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_MMP];
-	  h[DIR_MPM] = htemp[DIR_MPM]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_MPM];
-	  h[DIR_MMM] = htemp[DIR_MMM]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[DIR_MMM];
-
-	  distributionsH->setDistributionInvForDirection(h[DIR_M00],   x1+DX1[DIR_P00],   x2+DX2[DIR_P00],   x3+DX3[DIR_P00],     DIR_P00);
-	  distributionsH->setDistributionInvForDirection(h[DIR_MP0],  x1+DX1[DIR_PM0],  x2+DX2[DIR_PM0],  x3+DX3[DIR_PM0],   DIR_PM0);
-	  distributionsH->setDistributionInvForDirection(h[DIR_MM0],  x1+DX1[DIR_PP0],  x2+DX2[DIR_PP0],  x3+DX3[DIR_PP0],   DIR_PP0);
-	  distributionsH->setDistributionInvForDirection(h[DIR_M0P],  x1+DX1[DIR_P0M],  x2+DX2[DIR_P0M],  x3+DX3[DIR_P0M],   DIR_P0M);
-	  distributionsH->setDistributionInvForDirection(h[DIR_M0M],  x1+DX1[DIR_P0P],  x2+DX2[DIR_P0P],  x3+DX3[DIR_P0P],   DIR_P0P);
-	  distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1+DX1[DIR_PMM], x2+DX2[DIR_PMM], x3+DX3[DIR_PMM], DIR_PMM);
-	  distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1+DX1[DIR_PPM], x2+DX2[DIR_PPM], x3+DX3[DIR_PPM], DIR_PPM);
-	  distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1+DX1[DIR_PMP], x2+DX2[DIR_PMP], x3+DX3[DIR_PMP], DIR_PMP);
-	  distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1+DX1[DIR_PPP], x2+DX2[DIR_PPP], x3+DX3[DIR_PPP], DIR_PPP);
+          f[DIR_M00] = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_M00];
+          f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MP0];
+          f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MM0];
+          f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_M0P];
+          f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_M0M];
+          f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MPP];
+          f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MMP];
+          f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MPM];
+          f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MMM];
+
+          distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
+          distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+          distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+          distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+          distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+          distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+          distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+          distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+          distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+
+          h[DIR_M00] = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_M00];
+          h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MP0];
+          h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MM0];
+          h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_M0P];
+          h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_M0M];
+          h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MPP];
+          h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MMP];
+          h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MPM];
+          h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MMM];
+
+          distributionsH->setDistributionInvForDirection(h[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
+          distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+          distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+          distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+          distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+          distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+          distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+          distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+          distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+
+          h2[DIR_M00] = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_M00];
+          h2[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MP0];
+          h2[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MM0];
+          h2[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_M0P];
+          h2[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_M0M];
+          h2[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MPP];
+          h2[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MMP];
+          h2[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MPM];
+          h2[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MMM];
+
+          distributionsH2->setDistributionInvForDirection(h2[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+      } else {
+
+          f[DIR_M00]   = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_M00];
+          f[DIR_MP0]  = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MP0];
+          f[DIR_MM0]  = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MM0];
+          f[DIR_M0P]  = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_M0P];
+          f[DIR_M0M]  = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_M0M];
+          f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MPP];
+          f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MMP];
+          f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MPM];
+          f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * f[DIR_MMM];
+
+          distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
+          distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+          distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+          distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+          distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+          distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+          distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+          distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+          distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+
+          h[DIR_M00]   = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_M00];
+          h[DIR_MP0]  = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MP0];
+          h[DIR_MM0]  = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MM0];
+          h[DIR_M0P]  = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_M0P];
+          h[DIR_M0M]  = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_M0M];
+          h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MPP];
+          h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MMP];
+          h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MPM];
+          h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h[DIR_MMM];
 
+          distributionsH->setDistributionInvForDirection(h[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
+          distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+          distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+          distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+          distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+          distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+          distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+          distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+          distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+
+          h2[DIR_M00]   = 0.5 * (htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)   * h2[DIR_M00]);
+          h2[DIR_MP0]  = 0.5 * (htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)  * h2[DIR_MP0]);
+          h2[DIR_MM0]  = 0.5 * (htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)  * h2[DIR_MM0]);
+          h2[DIR_M0P]  = 0.5 * (htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)  * h2[DIR_M0P]);
+          h2[DIR_M0M]  = 0.5 * (htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)  * h2[DIR_M0M]);
+          h2[DIR_MPP] = 0.5 * (htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MPP]);
+          h2[DIR_MMP] = 0.5 * (htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MMP]);
+          h2[DIR_MPM] = 0.5 * (htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MPM]);
+          h2[DIR_MMM] = 0.5 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1) * h2[DIR_MMM]);
+
+          distributionsH2->setDistributionInvForDirection(h2[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+          distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);      
+      }
       break;
    case DIR_0P0:
       f[DIR_0P0]   = ftemp[DIR_0P0]   * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[DIR_0P0]   ;
@@ -223,6 +335,26 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1+DX1[DIR_MMP], x2+DX2[DIR_MMP], x3+DX3[DIR_MMP], DIR_MMP);
 	  distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1+DX1[DIR_PMP], x2+DX2[DIR_PMP], x3+DX3[DIR_PMP], DIR_PMP);
 
+	  h2[DIR_0P0] = htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_0P0];
+      h2[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_PP0];
+      h2[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_MP0];
+      h2[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_0PP];
+      h2[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_0PM];
+      h2[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_PPP];
+      h2[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_MPP];
+      h2[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_PPM];
+      h2[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2) * h2[DIR_MPM];
+
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+
       break;
    case DIR_0M0:
       f[DIR_0M0]   = ftemp[DIR_0M0]   * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[DIR_0M0]   ;
@@ -235,7 +367,7 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
       f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[DIR_PMM] ;
       f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[DIR_MMM] ;
 
-      distributions->setDistributionInvForDirection(f[DIR_0M0],   x1+DX1[DIR_0P0],   x2+DX2[DIR_0P0],   x3+DX3[DIR_0P0], DIR_0P0);
+      distributions->setDistributionInvForDirection(f[DIR_0M0],   x1+DX1[DIR_0P0],   x2+DX2[DIR_0P0],   x3+DX3[DIR_0P0],     DIR_0P0);
       distributions->setDistributionInvForDirection(f[DIR_PM0],  x1+DX1[DIR_MP0],  x2+DX2[DIR_MP0],  x3+DX3[DIR_MP0],   DIR_MP0);
       distributions->setDistributionInvForDirection(f[DIR_MM0],  x1+DX1[DIR_PP0],  x2+DX2[DIR_PP0],  x3+DX3[DIR_PP0],   DIR_PP0);
       distributions->setDistributionInvForDirection(f[DIR_0MP],  x1+DX1[DIR_0PM],  x2+DX2[DIR_0PM],  x3+DX3[DIR_0PM],   DIR_0PM);
@@ -255,7 +387,7 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[DIR_PMM] ;
 	  h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[DIR_MMM] ;
 
-	  distributionsH->setDistributionInvForDirection(h[DIR_0M0],   x1+DX1[DIR_0P0],   x2+DX2[DIR_0P0],   x3+DX3[DIR_0P0], DIR_0P0);
+	  distributionsH->setDistributionInvForDirection(h[DIR_0M0],   x1+DX1[DIR_0P0],   x2+DX2[DIR_0P0],   x3+DX3[DIR_0P0],     DIR_0P0);
 	  distributionsH->setDistributionInvForDirection(h[DIR_PM0],  x1+DX1[DIR_MP0],  x2+DX2[DIR_MP0],  x3+DX3[DIR_MP0],   DIR_MP0);
 	  distributionsH->setDistributionInvForDirection(h[DIR_MM0],  x1+DX1[DIR_PP0],  x2+DX2[DIR_PP0],  x3+DX3[DIR_PP0],   DIR_PP0);
 	  distributionsH->setDistributionInvForDirection(h[DIR_0MP],  x1+DX1[DIR_0PM],  x2+DX2[DIR_0PM],  x3+DX3[DIR_0PM],   DIR_0PM);
@@ -265,6 +397,26 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1+DX1[DIR_MPP], x2+DX2[DIR_MPP], x3+DX3[DIR_MPP], DIR_MPP);
 	  distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1+DX1[DIR_PPP], x2+DX2[DIR_PPP], x3+DX3[DIR_PPP], DIR_PPP);
 
+	  h2[DIR_0M0] = htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_0M0];
+      h2[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_PM0];
+      h2[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_MM0];
+      h2[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_0MP];
+      h2[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_0MM];
+      h2[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_PMP];
+      h2[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_MMP];
+      h2[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_PMM];
+      h2[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2) * h2[DIR_MMM];
+
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+
       break;
    case DIR_00P:
       f[DIR_00P]   = ftemp[DIR_00P]   * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[DIR_00P]   ;
@@ -277,7 +429,7 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
       f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[DIR_PMP] ;
       f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[DIR_MMP] ;
 
-      distributions->setDistributionInvForDirection(f[DIR_00P],   x1+DX1[DIR_00M],   x2+DX2[DIR_00M],   x3+DX3[DIR_00M], DIR_00M);
+      distributions->setDistributionInvForDirection(f[DIR_00P],   x1+DX1[DIR_00M],   x2+DX2[DIR_00M],   x3+DX3[DIR_00M],     DIR_00M);
       distributions->setDistributionInvForDirection(f[DIR_P0P],  x1+DX1[DIR_M0M],  x2+DX2[DIR_M0M],  x3+DX3[DIR_M0M],   DIR_M0M);
       distributions->setDistributionInvForDirection(f[DIR_M0P],  x1+DX1[DIR_P0M],  x2+DX2[DIR_P0M],  x3+DX3[DIR_P0M],   DIR_P0M);
       distributions->setDistributionInvForDirection(f[DIR_0PP],  x1+DX1[DIR_0MM],  x2+DX2[DIR_0MM],  x3+DX3[DIR_0MM],   DIR_0MM);
@@ -297,7 +449,7 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[DIR_PMP] ;
 	  h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[DIR_MMP] ;
 
-	  distributionsH->setDistributionInvForDirection(h[DIR_00P],   x1+DX1[DIR_00M],   x2+DX2[DIR_00M],   x3+DX3[DIR_00M], DIR_00M);
+	  distributionsH->setDistributionInvForDirection(h[DIR_00P],   x1+DX1[DIR_00M],   x2+DX2[DIR_00M],   x3+DX3[DIR_00M],     DIR_00M);
 	  distributionsH->setDistributionInvForDirection(h[DIR_P0P],  x1+DX1[DIR_M0M],  x2+DX2[DIR_M0M],  x3+DX3[DIR_M0M],   DIR_M0M);
 	  distributionsH->setDistributionInvForDirection(h[DIR_M0P],  x1+DX1[DIR_P0M],  x2+DX2[DIR_P0M],  x3+DX3[DIR_P0M],   DIR_P0M);
 	  distributionsH->setDistributionInvForDirection(h[DIR_0PP],  x1+DX1[DIR_0MM],  x2+DX2[DIR_0MM],  x3+DX3[DIR_0MM],   DIR_0MM);
@@ -307,6 +459,26 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1+DX1[DIR_MPM], x2+DX2[DIR_MPM], x3+DX3[DIR_MPM], DIR_MPM);
 	  distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1+DX1[DIR_PPM], x2+DX2[DIR_PPM], x3+DX3[DIR_PPM], DIR_PPM);
 
+	  h2[DIR_00P] = htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_00P];
+      h2[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_P0P];
+      h2[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_M0P];
+      h2[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_0PP];
+      h2[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_0MP];
+      h2[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_PPP];
+      h2[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_MPP];
+      h2[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_PMP];
+      h2[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3) * h2[DIR_MMP];
+
+      distributionsH2->setDistributionInvForDirection(h2[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM);
+
       break;
    case DIR_00M:
       f[DIR_00M]   = ftemp[DIR_00M]   * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[DIR_00M]   ;
@@ -349,6 +521,26 @@ void MultiphaseNonReflectingOutflowBCAlgorithm::applyBC()
 	  distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1+DX1[DIR_MPP], x2+DX2[DIR_MPP], x3+DX3[DIR_MPP], DIR_MPP);
 	  distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1+DX1[DIR_PPP], x2+DX2[DIR_PPP], x3+DX3[DIR_PPP], DIR_PPP);
 
+	  h2[DIR_00M] = htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_00M];
+      h2[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_P0M];
+      h2[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_M0M];
+      h2[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_0PM];
+      h2[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_0MM];
+      h2[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_PPM];
+      h2[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_MPM];
+      h2[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_PMM];
+      h2[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3) * h2[DIR_MMM];
+
+      distributionsH2->setDistributionInvForDirection(h2[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP);
+      distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP);
+
       break;
    default:
       UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!"));
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.h
index ee472e166..3fa67b276 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.h
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseNonReflectingOutflowBCAlgorithm.h
@@ -39,11 +39,12 @@
 class MultiphaseNonReflectingOutflowBCAlgorithm : public BCAlgorithm
 {
 public:
-   MultiphaseNonReflectingOutflowBCAlgorithm();
-   ~MultiphaseNonReflectingOutflowBCAlgorithm();
-   SPtr<BCAlgorithm> clone();
-   void addDistributions(SPtr<DistributionArray3D> distributions);
-   void addDistributionsH(SPtr<DistributionArray3D> distributionsH);
-   void applyBC();
+    MultiphaseNonReflectingOutflowBCAlgorithm();
+    ~MultiphaseNonReflectingOutflowBCAlgorithm();
+    SPtr<BCAlgorithm> clone();
+    void addDistributions(SPtr<DistributionArray3D> distributions);
+    void addDistributionsH(SPtr<DistributionArray3D> distributionsH);
+    void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2);
+    void applyBC();
 };
 #endif // MultiphaseNonReflectingOutflowBCAlgorithm_h__
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp
index d43d1c534..e4aaeeeb2 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp
@@ -37,7 +37,7 @@
 
 MultiphaseVelocityBCAlgorithm::MultiphaseVelocityBCAlgorithm()
 {
-   BCAlgorithm::type = BCAlgorithm::VelocityBCAlgorithm;
+   BCAlgorithm::type = BCAlgorithm::MultiphaseVelocityBCAlgorithm;
    BCAlgorithm::preCollision = false;
 }
 //////////////////////////////////////////////////////////////////////////
@@ -84,6 +84,10 @@ void MultiphaseVelocityBCAlgorithm::applyBC()
    D3Q27System::calcDensity(h, phi);
 
    calcMacrosFct(f, p1, vx1, vx2, vx3);
+   vx1=bcPtr->getBoundaryVelocityX1();
+   vx2 = bcPtr->getBoundaryVelocityX2();
+   vx3 = bcPtr->getBoundaryVelocityX3();
+   p1 = 0.0;
    D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
    D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3);
 
@@ -106,18 +110,18 @@ void MultiphaseVelocityBCAlgorithm::applyBC()
    
    D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3);
    //D3Q27System::calcMultiphaseHeq(htemp, phiBC, bcPtr->getBoundaryVelocityX1(), bcPtr->getBoundaryVelocityX2(), bcPtr->getBoundaryVelocityX2());//30.03.2021 EQ phase field BC!
-   for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
-   {
-	   if (bcPtr->hasVelocityBoundaryFlag(fdir))
-	   {
-		   LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir];
-           //17.03.2021 Let us just set the plain eq
-           //LBMReal hReturn = htemp[fdir];
-		   distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
-           if (distributionsH2)
-               distributionsH2->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
-	   }
-   }
+   //for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
+   //{
+	  // if (bcPtr->hasVelocityBoundaryFlag(fdir))
+	  // {
+		 //  LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir];
+   //        //17.03.2021 Let us just set the plain eq
+   //        //LBMReal hReturn = htemp[fdir];
+		 //  distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
+   //      //  if (distributionsH2)
+   //      //      distributionsH2->setDistributionForDirection(0, nx1, nx2, nx3, fdir);
+	  // }
+   //}
    
    for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
    {
@@ -129,7 +133,17 @@ void MultiphaseVelocityBCAlgorithm::applyBC()
 		 //16.03.2021 quick fix for velocity BC
          LBMReal fReturn = f[invDir] - velocity;
          //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q));
-         distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);
+        // distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB
+         distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB  
+
+         LBMReal hReturn = htemp[invDir]+h[invDir] - heq[invDir];
+         distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
+         if (distributionsH2) {
+             fReturn = h2[invDir] ;
+            // distributionsH2->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+             distributionsH2->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
+         }
+
       }
    }
 
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp.new b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp.new
new file mode 100644
index 000000000..7c21b30c8
--- /dev/null
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp.new
@@ -0,0 +1,151 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 MultiphaseVelocityBCAlgorithm.cpp
+//! \ingroup BoundarConditions
+//! \author Hesameddin Safari
+//=======================================================================================
+
+#include "MultiphaseVelocityBCAlgorithm.h"
+#include "DistributionArray3D.h"
+#include "BoundaryConditions.h"
+
+MultiphaseVelocityBCAlgorithm::MultiphaseVelocityBCAlgorithm()
+{
+    BCAlgorithm::type = BCAlgorithm::MultiphaseVelocityBCAlgorithm;
+   BCAlgorithm::preCollision = false;
+}
+//////////////////////////////////////////////////////////////////////////
+MultiphaseVelocityBCAlgorithm::~MultiphaseVelocityBCAlgorithm()
+{
+}
+//////////////////////////////////////////////////////////////////////////
+SPtr<BCAlgorithm> MultiphaseVelocityBCAlgorithm::clone()
+{
+   SPtr<BCAlgorithm> bc(new MultiphaseVelocityBCAlgorithm());
+   return bc;
+}
+//////////////////////////////////////////////////////////////////////////
+void MultiphaseVelocityBCAlgorithm::addDistributions(SPtr<DistributionArray3D> distributions)
+{
+   this->distributions = distributions;
+}
+//////////////////////////////////////////////////////////////////////////
+void MultiphaseVelocityBCAlgorithm::addDistributionsH(SPtr<DistributionArray3D> distributionsH)
+{
+	this->distributionsH = distributionsH;
+}
+//////////////////////////////////////////////////////////////////////////
+void MultiphaseVelocityBCAlgorithm::addDistributionsH2(SPtr<DistributionArray3D> distributionsH)
+{
+    this->distributionsH2 = distributionsH;
+}
+//////////////////////////////////////////////////////////////////////////
+void MultiphaseVelocityBCAlgorithm::applyBC()
+{
+   LBMReal f[D3Q27System::ENDF+1];
+   LBMReal h[D3Q27System::ENDF+1];
+   LBMReal h2[D3Q27System::ENDF + 1];
+   LBMReal feq[D3Q27System::ENDF+1];
+   LBMReal heq[D3Q27System::ENDF+1];
+   LBMReal htemp[D3Q27System::ENDF+1];
+   
+   distributions->getDistributionInv(f, x1, x2, x3);
+   distributionsH->getDistributionInv(h, x1, x2, x3);
+   if (distributionsH2)
+       distributionsH2->getDistributionInv(h2, x1, x2, x3);
+   LBMReal phi, vx1, vx2, vx3, p1, phiBC;
+   
+   D3Q27System::calcDensity(h, phi);
+
+   calcMacrosFct(f, p1, vx1, vx2, vx3);
+   vx1=bcPtr->getBoundaryVelocityX1();
+   vx2 = bcPtr->getBoundaryVelocityX2();
+   vx3 = bcPtr->getBoundaryVelocityX3();
+   p1 = 0.0;
+   D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3);
+   D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3);
+
+   ///// added for phase field //////
+
+   int nx1 = x1;
+   int nx2 = x2;
+   int nx3 = x3;
+
+   //flag points in direction of fluid
+   if      (bcPtr->hasVelocityBoundaryFlag(D3Q27System::E)) { nx1 -= 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::W)) { nx1 += 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::N)) { nx2 -= 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::S)) { nx2 += 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::T)) { nx3 -= 1; }
+   else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::B)) { nx3 += 1; }
+   //else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary..."));
+   
+   phiBC = bcPtr->getBoundaryPhaseField();
+   
+   D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3);
+   //D3Q27System::calcMultiphaseHeq(htemp, phiBC, bcPtr->getBoundaryVelocityX1(), bcPtr->getBoundaryVelocityX2(), bcPtr->getBoundaryVelocityX2());//30.03.2021 EQ phase field BC!
+   //for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++)
+   //{
+	  // if (bcPtr->hasVelocityBoundaryFlag(fdir))
+	  // {
+		 //  LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir];
+   //        //17.03.2021 Let us just set the plain eq
+   //        //LBMReal hReturn = htemp[fdir];
+		 //  distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
+   //      //  if (distributionsH2)
+   //      //      distributionsH2->setDistributionForDirection(0, nx1, nx2, nx3, fdir);
+	  // }
+   //}
+   
+   for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++)
+   {
+      if (bcPtr->hasVelocityBoundaryFlag(fdir))
+      {
+         const int invDir = D3Q27System::INVDIR[fdir];
+         //LBMReal q = bcPtr->getQ(invDir);// m+m q=0 stabiler
+         LBMReal velocity = bcPtr->getBoundaryVelocity(invDir);
+		 //16.03.2021 quick fix for velocity BC
+         LBMReal fReturn = f[invDir] - velocity;
+         //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q));
+        // distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB
+         distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB  
+
+         LBMReal hReturn = htemp[invDir]+h[invDir] - heq[invDir];
+         distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB  
+         if (distributionsH2) {
+             fReturn = h2[invDir] ;
+            // distributionsH2->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir);
+             distributionsH2->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB 
+         }
+
+      }
+   }
+
+}
+
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
index 4bf2b3037..b886271b7 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMacroscopicQuantitiesCoProcessor.cpp
@@ -182,13 +182,13 @@ void WriteMacroscopicQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
     int maxX2 = (int)(distributions->getNX2());
     int maxX3 = (int)(distributions->getNX3());
 
-    // int minX1 = 1;
-    // int minX2 = 1;
-    // int minX3 = 1;
+     //int minX1 = 1;
+     //int minX2 = 1;
+     //int minX3 = 1;
 
-    // int maxX1 = (int)(distributions->getNX1());
-    // int maxX2 = (int)(distributions->getNX2());
-    // int maxX3 = (int)(distributions->getNX3());
+     //int maxX1 = (int)(distributions->getNX1());
+     //int maxX2 = (int)(distributions->getNX2());
+     //int maxX3 = (int)(distributions->getNX3());
 
     // nummern vergeben und node vector erstellen + daten sammeln
     CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1);
@@ -202,7 +202,7 @@ void WriteMacroscopicQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
     for (int ix3 = minX3; ix3 <= maxX3; ix3++) {
         for (int ix2 = minX2; ix2 <= maxX2; ix2++) {
             for (int ix1 = minX1; ix1 <= maxX1; ix1++) {
-                if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
+                if (/* !bcArray->isUndefined(ix1, ix2, ix3) &&*/ !bcArray->isSolid(ix1, ix2, ix3)) {
                     int index                  = 0;
                     nodeNumbers(ix1, ix2, ix3) = nr++;
                     Vector3D worldCoordinates  = grid->getNodeCoordinates(block, ix1, ix2, ix3);
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
index c8e5c24d5..5dced5e47 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
@@ -632,7 +632,6 @@ SPtr<Block3D> Grid3D::getNeighborBlock(int dir, SPtr<Block3D> block) const
 void Grid3D::getAllNeighbors(int ix1, int ix2, int ix3, int level, int levelDepth, std::vector<SPtr<Block3D>> &blocks)
 {
     for (int dir = D3Q27System::STARTDIR; dir <= D3Q27System::ENDDIR; dir++)
-    // for (int dir = D3Q27System::STARTDIR; dir<=D3Q27System::DIR_0MP; dir++)
     {
         this->getNeighborBlocksForDirection(dir, ix1, ix2, ix3, level, levelDepth, blocks);
     }
diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp
index 3df8aa6bb..e6883626c 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp
@@ -785,33 +785,33 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeCF(LBM
    mfccc = m2;
    ////////////////////////////////////////////////////////////////////////////////////
 
-   f[DIR_P00]    = mfcbb;
-   f[DIR_M00]    = mfabb;
-   f[DIR_0P0]    = mfbcb;
-   f[DIR_0M0]    = mfbab;
-   f[DIR_00P]    = mfbbc;
-   f[DIR_00M]    = mfbba;
-   f[DIR_PP0]   = mfccb;
-   f[DIR_MM0]   = mfaab;
-   f[DIR_PM0]   = mfcab;
-   f[DIR_MP0]   = mfacb;
-   f[DIR_P0P]   = mfcbc;
-   f[DIR_M0M]   = mfaba;
-   f[DIR_P0M]   = mfcba;
-   f[DIR_M0P]   = mfabc;
-   f[DIR_0PP]   = mfbcc;
-   f[DIR_0MM]   = mfbaa;
-   f[DIR_0PM]   = mfbca;
-   f[DIR_0MP]   = mfbac;
+   f[DIR_P00] = mfcbb;
+   f[DIR_M00] = mfabb;
+   f[DIR_0P0] = mfbcb;
+   f[DIR_0M0] = mfbab;
+   f[DIR_00P] = mfbbc;
+   f[DIR_00M] = mfbba;
+   f[DIR_PP0] = mfccb;
+   f[DIR_MM0] = mfaab;
+   f[DIR_PM0] = mfcab;
+   f[DIR_MP0] = mfacb;
+   f[DIR_P0P] = mfcbc;
+   f[DIR_M0M] = mfaba;
+   f[DIR_P0M] = mfcba;
+   f[DIR_M0P] = mfabc;
+   f[DIR_0PP] = mfbcc;
+   f[DIR_0MM] = mfbaa;
+   f[DIR_0PM] = mfbca;
+   f[DIR_0MP] = mfbac;
    f[DIR_000] = mfbbb;
-   f[DIR_PPP]  = mfccc;
-   f[DIR_PMP]  = mfcac;
-   f[DIR_PPM]  = mfcca;
-   f[DIR_PMM]  = mfcaa;
-   f[DIR_MPP]  = mfacc;
-   f[DIR_MMP]  = mfaac;
-   f[DIR_MPM]  = mfaca;
-   f[DIR_MMM]  = mfaaa;
+   f[DIR_PPP] = mfccc;
+   f[DIR_PMP] = mfcac;
+   f[DIR_PPM] = mfcca;
+   f[DIR_PMM] = mfcaa;
+   f[DIR_MPP] = mfacc;
+   f[DIR_MMP] = mfaac;
+   f[DIR_MPM] = mfaca;
+   f[DIR_MMM] = mfaaa;
 }
 //////////////////////////////////////////////////////////////////////////
 //Position SWB -0.25, -0.25, -0.25
@@ -1004,7 +1004,7 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeFC(LBM
    LBMReal mxxyMyzz = zeroReal;
    LBMReal mxxzPyyz = zeroReal;
    LBMReal mxxzMyyz = zeroReal;
-   LBMReal mxyyPxzz =  zeroReal;
+   LBMReal mxyyPxzz = zeroReal;
    LBMReal mxyyMxzz = zeroReal;
 
    // linear combinations back
@@ -1233,33 +1233,33 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeFC(LBM
    mfccc = m2;
    ////////////////////////////////////////////////////////////////////////////////////
 
-   f[DIR_P00]    = mfcbb;
-   f[DIR_M00]    = mfabb;
-   f[DIR_0P0]    = mfbcb;
-   f[DIR_0M0]    = mfbab;
-   f[DIR_00P]    = mfbbc;
-   f[DIR_00M]    = mfbba;
-   f[DIR_PP0]   = mfccb;
-   f[DIR_MM0]   = mfaab;
-   f[DIR_PM0]   = mfcab;
-   f[DIR_MP0]   = mfacb;
-   f[DIR_P0P]   = mfcbc;
-   f[DIR_M0M]   = mfaba;
-   f[DIR_P0M]   = mfcba;
-   f[DIR_M0P]   = mfabc;
-   f[DIR_0PP]   = mfbcc;
-   f[DIR_0MM]   = mfbaa;
-   f[DIR_0PM]   = mfbca;
-   f[DIR_0MP]   = mfbac;
+   f[DIR_P00] = mfcbb;
+   f[DIR_M00] = mfabb;
+   f[DIR_0P0] = mfbcb;
+   f[DIR_0M0] = mfbab;
+   f[DIR_00P] = mfbbc;
+   f[DIR_00M] = mfbba;
+   f[DIR_PP0] = mfccb;
+   f[DIR_MM0] = mfaab;
+   f[DIR_PM0] = mfcab;
+   f[DIR_MP0] = mfacb;
+   f[DIR_P0P] = mfcbc;
+   f[DIR_M0M] = mfaba;
+   f[DIR_P0M] = mfcba;
+   f[DIR_M0P] = mfabc;
+   f[DIR_0PP] = mfbcc;
+   f[DIR_0MM] = mfbaa;
+   f[DIR_0PM] = mfbca;
+   f[DIR_0MP] = mfbac;
    f[DIR_000] = mfbbb;
-   f[DIR_PPP]  = mfccc;
-   f[DIR_PMP]  = mfcac;
-   f[DIR_PPM]  = mfcca;
-   f[DIR_PMM]  = mfcaa;
-   f[DIR_MPP]  = mfacc;
-   f[DIR_MMP]  = mfaac;
-   f[DIR_MPM]  = mfaca;
-   f[DIR_MMM]  = mfaaa;
+   f[DIR_PPP] = mfccc;
+   f[DIR_PMP] = mfcac;
+   f[DIR_PPM] = mfcca;
+   f[DIR_PMM] = mfcaa;
+   f[DIR_MPP] = mfacc;
+   f[DIR_MMP] = mfaac;
+   f[DIR_MPM] = mfaca;
+   f[DIR_MMM] = mfaaa;
 }
 //////////////////////////////////////////////////////////////////////////
 void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3)
diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
index 773e8b695..9d743195c 100644
--- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
+++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h
@@ -55,7 +55,7 @@ static const int STARTF = 0;
 static const int ENDF   = 26; // D3Q27
 
 static const int STARTDIR = 1; //0
-static const int ENDDIR   = 27;//26 // all geometric directions
+static const int ENDDIR   = 26;//26 // all geometric directions
 
 extern const int DX1[ENDDIR + 1];
 extern const int DX2[ENDDIR + 1];
@@ -851,15 +851,15 @@ static std::vector<int> getEX(const int &exn)
     ex.resize(ENDDIR + 1);
     switch (exn) {
         case 1:
-            for (int dir = STARTDIR; dir < ENDDIR; ++dir)
+            for (int dir = STARTDIR; dir <= ENDDIR; ++dir)
                 ex[dir] = DX1[dir];
             break;
         case 2:
-            for (int dir = STARTDIR; dir < ENDDIR; ++dir)
+            for (int dir = STARTDIR; dir <= ENDDIR; ++dir)
                 ex[dir] = DX2[dir];
             break;
         case 3:
-            for (int dir = STARTDIR; dir < ENDDIR; ++dir)
+            for (int dir = STARTDIR; dir <= ENDDIR; ++dir)
                 ex[dir] = DX3[dir];
             break;
     }
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp
index 10f1e395d..ad80b3722 100644
--- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp
@@ -293,7 +293,7 @@ void MultiphaseCumulantLBMKernel::calculate(int step)
                         LBMReal uz2 = uz * uz;
 
                         //----------- Calculating Forcing Terms * -------------
-                        for (int dir = STARTF; dir <= (FENDDIR); dir++) {
+                        for (int dir = FSTARTDIR; 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));
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
index c1c2010e1..7424fdcbe 100644
--- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
@@ -610,7 +610,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   uy2 = vvyF * vvyF;
 			   uz2 = vvzF * vvzF;
 			   LBMReal forcingTerm[D3Q27System::ENDF + 1];
-			   for (int dir = STARTF; dir <= (FENDDIR); dir++) {
+			   for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) {
 				   LBMReal velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF;
 				   LBMReal velSq1 = velProd * velProd;
 				   LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)));
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
new file mode 100644
index 000000000..673ea2927
--- /dev/null
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
@@ -0,0 +1,3024 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
+//! \ingroup LBMKernel
+//! \author M. Geier, K. Kutscher, Hesameddin Safari
+//=======================================================================================
+
+#include "MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h"
+#include "BCArray3D.h"
+#include "Block3D.h"
+#include "D3Q27EsoTwist3DSplittedVector.h"
+#include "D3Q27System.h"
+#include "DataSet3D.h"
+#include "LBMKernel.h"
+#include <cmath>
+#include <iostream>
+#include <string>
+
+#define PROOF_CORRECTNESS
+
+//////////////////////////////////////////////////////////////////////////
+MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::MultiphaseSimpleVelocityBaseExternalPressureLBMKernel() { this->compressible = false; }
+//////////////////////////////////////////////////////////////////////////
+void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initDataSet()
+{
+	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
+	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
+	SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
+	SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+	CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<LBMReal, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+	pressureOld = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+	p1Old = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+	dataSet->setFdistributions(f);
+	dataSet->setHdistributions(h); // For phase-field
+	dataSet->setH2distributions(h2);
+	dataSet->setPhaseField(divU1);
+	dataSet->setPressureField(pressure);
+
+	phaseField = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
+	phaseFieldOld = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0));
+
+	divU = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+}
+//////////////////////////////////////////////////////////////////////////
+SPtr<LBMKernel> MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::clone()
+{
+	SPtr<LBMKernel> kernel(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
+	kernel->setNX(nx);
+	dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(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->setInterfaceWidth(this->interfaceWidth);
+
+	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);
+	kernel->setGhostLayerWidth(2);
+	dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(kernel)->initForcing();
+
+	return kernel;
+}
+//////////////////////////////////////////////////////////////////////////
+void  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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 MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
+{
+	using namespace D3Q27System;
+	using namespace UbMath;
+
+	forcingX1 = 0.0;
+	forcingX2 = 0.0;
+	forcingX3 = 0.0;
+
+	LBMReal oneOverInterfaceScale = c4 / interfaceWidth; //1.0;//1.5;
+														 /////////////////////////////////////
+
+	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
+	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
+	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+
+	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
+	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
+	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
+
+	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
+	nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
+	zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
+
+
+	CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
+
+	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;
+	LBMReal omegaDRho = 1.0;// 1.25;// 1.3;
+
+	for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
+		for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
+			for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; 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->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					LBMReal mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					LBMReal mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					LBMReal mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					LBMReal mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					LBMReal mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					LBMReal mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					LBMReal mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					LBMReal mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					LBMReal mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					LBMReal mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					LBMReal mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					LBMReal mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+					LBMReal mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					LBMReal mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					LBMReal mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					LBMReal mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					LBMReal mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					LBMReal mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					LBMReal mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					LBMReal mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					LBMReal mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					LBMReal mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					LBMReal mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					LBMReal mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					LBMReal mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					LBMReal mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
+					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
+						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
+							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
+								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
+					if ((*phaseField)(x1, x2, x3) > 1 ) {
+						(*phaseField)(x1, x2, x3) = c1;
+					}
+
+					if ((*phaseField)(x1, x2, x3) < 0) {
+						(*phaseField)(x1, x2, x3) = 0;
+					}
+					////// read F-distributions for velocity formalism
+
+					mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
+					mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
+					mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
+					mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
+					mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, 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 rhoH = 1.0;
+					//LBMReal rhoL = 1.0 / densityRatio;
+
+					LBMReal rhoH = 1.0*densityRatio;
+					LBMReal rhoL = 1.0;
+
+					LBMReal rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
+
+					LBMReal drho = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))   )
+						+ (((mfaab + mfccb) + (mfacb + mfcab) ) + ((mfaba + mfcbc) + (mfabc + mfcba) ) + ((mfbaa + mfbcc) + (mfbac + mfbca) )))
+						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
+				
+					omegaDRho = 2.0;// 1.5;
+					drho *= omegaDRho;
+					LBMReal keepDrho = drho;
+					drho = ((*p1Old)(x1, x2, x3) + drho) * c1o2;
+				//	drho = ((*p1Old)(x1, x2, x3)*c2o3 + drho*c1o3) ;
+					(*p1Old)(x1, x2, x3) = keepDrho;
+					
+					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); //Incompressible
+///Density correction
+					//LBMReal dX1_phi = gradX1_phi();
+					//LBMReal dX2_phi = gradX2_phi();
+					//LBMReal dX3_phi = gradX3_phi();
+					//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)) ;
+					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressure)(x1, x2, x3); //explicit Compressible
+					//(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho-(rhoH-rhoL)*(vvx*dX1_phi+vvy*dX2_phi+vvz*dX3_phi)*c1o3)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
+					
+					//(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) - c1o3 * drho * ((*phaseField)(x1, x2, x3) * (rhoH - rhoL) + rhoL)) / (c1 - ((*phaseField)(x1, x2, x3) - c1) * drho);
+					//LBMReal rho=rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3);
+					//LBMReal tempDrho = drho;
+					//drho = (drho*0.9 + (*pressureOld)(x1, x2, x3)*0.1) ;
+					//(*pressureOld)(x1, x2, x3) = tempDrho;
+
+					//Mathematica
+
+					LBMReal rho = ((*pressure)(x1, x2, x3) - (*phaseField)(x1, x2, x3) * (*pressure)(x1, x2, x3) + c1o3 * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (c1o3 + c1o3 * drho * (-1 + (*phaseField)(x1, x2, x3)));
+					(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) + c1o3 * drho * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (1 + drho * (-1 + (*phaseField)(x1, x2, x3)));
+/////Full Filter
+					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH)+(one- (*phaseField)(x1, x2, x3))*three* (*pressure)(x1, x2, x3); //explicit Compressible
+					//(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
+//// reduced Filter
+					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3); //explicit Compressible
+					//(*pressure)(x1, x2, x3) = (((*pressureOld)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
+
+					//rho = (rho)/(one- (one - (*phaseField)(x1, x2, x3)) * drho); // now implicit Compressible
+					
+					//(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3;
+					////!!!!!! relplace by pointer swap!
+					//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3);
+				}
+			}
+		}
+	}
+
+	LBMReal collFactorM;
+
+	////Periodic Filter
+	//for (int x3 = minX3-1; x3 <= maxX3; x3++) {
+	//	for (int x2 = minX2-1; x2 <= maxX2; x2++) {
+	//		for (int x1 = minX1-1; x1 <= maxX1; x1++) {
+	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
+
+	//				LBMReal sum = 0.;
+
+	//				///Version for boundaries
+	//				for (int xx = -1; xx <= 1; xx++) {
+	//					//int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
+	//					int xxx = xx + x1;
+
+	//					for (int yy = -1; yy <= 1; yy++) {
+	//						//int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0;
+	//						int yyy = yy + x2;
+
+	//						for (int zz = -1; zz <= 1; zz++) {
+	//							//int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
+	//							int zzz = zz + x3;
+
+	//							if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
+	//								sum+= 64.0/(216.0*(c1+c3*abs(xx))* (c1 + c3 * abs(yy))* (c1 + c3 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz);
+	//							}
+	//							else{ sum+= 64.0 / (216.0 * (c1 + c3 * abs(xx)) * (c1 + c3 * abs(yy)) * (c1 + c3 * abs(zz))) * (*pressureOld)(x1, x2, x3);
+	//							}
+
+
+	//						}
+	//					}
+	//				}
+	//				(*pressure)(x1, x2, x3) = sum;
+	//			}
+	//		}
+	//	}
+	//}
+
+	////!filter
+
+	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 mfhcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
+					LBMReal mfhbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
+					LBMReal mfhbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
+					LBMReal mfhccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
+					LBMReal mfhacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
+					LBMReal mfhcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
+					LBMReal mfhabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
+					LBMReal mfhbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
+					LBMReal mfhbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
+					LBMReal mfhccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
+					LBMReal mfhacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
+					LBMReal mfhcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
+					LBMReal mfhaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
+					LBMReal mfhabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
+					LBMReal mfhbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
+					LBMReal mfhbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
+					LBMReal mfhaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
+					LBMReal mfhcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
+					LBMReal mfhaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
+					LBMReal mfhcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
+					LBMReal mfhbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
+					LBMReal mfhbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
+					LBMReal mfhaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					LBMReal mfhcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					LBMReal mfhaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					LBMReal mfhcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					LBMReal mfhbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
+
+					//LBMReal rhoH = 1.0;
+					//LBMReal rhoL = 1.0 / densityRatio;
+
+					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+1e-3;
+					// 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase?
+					LBMReal normX1 = dX1_phi / denom;
+					LBMReal normX2 = dX2_phi / denom;
+					LBMReal normX3 = dX3_phi / denom;
+
+
+
+					collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL);
+
+
+					LBMReal mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi();
+
+					//----------- Calculating Macroscopic Values -------------
+					LBMReal rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible
+
+																		///scaled phase field
+					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1 - (*phaseField)(x1, x2, x3)) * (c1 - (*phaseField)(x1, x2, x3))) - phiH);
+					///!scaled phase field
+					
+					//LBMReal rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH)+(one-phi[DIR_000])* (*pressure)(x1, x2, x3)*three; //compressible
+					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[DIR_000] + (one - phi[DIR_000]) * (*pressure)(x1, x2, x3) * three; //compressible
+
+					LBMReal m0, m1, m2;
+					LBMReal rhoRef=c1;
+
+					LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+						(mfcbb - mfabb))/rhoRef;
+					LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+						(mfbcb - mfbab))/rhoRef;
+					LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+						(mfbbc - mfbba))/rhoRef;
+					////Filter&Gradient merged
+					LBMReal pressureHere = (*pressureOld)(x1, x2, x3);
+					//LBMReal pressureHere = (*pressure)(x1, x2, x3);
+
+					LBMReal arrayP[3][3][3] = { {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
+												{{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
+												{ {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} };
+					//LBMReal LaplaceP = 0.0;
+					//LaplaceP += WEIGTH[DIR_PPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
+					//	+ ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere))));
+					//LaplaceP += WEIGTH[DIR_0PP] * (
+					//	((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere)))
+					//	+ ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere)))
+					//	+ ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere)))
+					//	);
+					//LaplaceP += WEIGTH[DIR_00P] * (
+					//	(((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere))
+					//	+ (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere))
+					//	+ (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere))
+					//	);
+
+					//LaplaceP= 6.0 * LaplaceP;
+					
+					//LBMReal sum = 0.0;
+
+					for (int dir1 = -1; dir1 <= 1; dir1++) {
+						for (int dir2 = -1; dir2 <= 1; dir2++) {
+							for (int dir3 = -1; dir3 <= 1; dir3++){
+								int xxx = x1 + dir1;
+								int yyy = x2 + dir2;
+								int zzz = x3 + dir3;
+								if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressureOld)(xxx, yyy, zzz);
+								//if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressure)(xxx, yyy, zzz);
+							//	sum += 64.0 / (216.0 * (c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)) * (c1 + c3 * abs(dir3))) * arrayP[dir1 + 1][dir2 + 1][dir3 + 1];
+							}
+						}
+					}
+//					(*pressure)(x1, x2, x3) = sum;// *0.1 + (1.0 - 0.1) * (*pressureOld)(x1, x2, x3);
+
+
+					(*pressure)(x1, x2, x3) = (((((arrayP[0][0][0] + arrayP[2][2][2]) + (arrayP[0][2][0] + arrayP[2][0][2])) + ((arrayP[2][0][0] + arrayP[0][2][2]) + (arrayP[2][2][0] + arrayP[0][0][2]))) * c1o216
+						+ (((arrayP[0][0][1] + arrayP[2][2][1]) + (arrayP[0][1][0] + arrayP[2][1][2])) + ((arrayP[1][0][0] + arrayP[1][2][2]) + (arrayP[0][1][2] + arrayP[2][1][0])) + ((arrayP[1][0][2] + arrayP[1][2][0]) + (arrayP[0][2][1] + arrayP[2][0][1]))) * c1o54)
+						+ ((arrayP[0][1][1] + arrayP[2][1][1]) + (arrayP[1][0][1] + arrayP[1][2][1]) + (arrayP[1][1][0] + arrayP[1][1][2])) * c2o27)
+						+ arrayP[1][1][1] * c8o27;
+					//LBMReal gradPx = 0.0;
+					//LBMReal gradPy = 0.0;
+					//LBMReal gradPz = 0.0;
+					//for (int dir1 = -1; dir1 <= 1; dir1++) {
+					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
+					//		gradPx -= arrayP[0][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		gradPx += arrayP[2][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+
+
+
+					//		gradPy -= arrayP[dir1+1][0][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		gradPy += arrayP[dir1+1][2][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		
+
+					//		gradPz -= arrayP[dir1+1][dir2+1][0] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		gradPz += arrayP[dir1+1][dir2+1][2] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//	}
+					//}
+
+					LBMReal gradPx = ((((arrayP[2][0][0] - arrayP[0][2][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
+						+ (((arrayP[2][1][0] - arrayP[0][1][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[2][0][1] - arrayP[0][2][1]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
+						+ (arrayP[2][1][1] - arrayP[0][1][1]) * c2o9;
+					LBMReal gradPy = ((((arrayP[0][2][0] - arrayP[2][0][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[0][2][2] - arrayP[2][0][0]))) * c1o72
+						+ (((arrayP[1][2][0] - arrayP[1][0][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[0][2][1] - arrayP[2][0][1]) + (arrayP[1][2][2] - arrayP[1][0][0]))) * c1o18)
+						+ (arrayP[1][2][1] - arrayP[1][0][1]) * c2o9;
+					LBMReal gradPz = ((((arrayP[0][0][2] - arrayP[2][2][0]) + (arrayP[0][2][2] - arrayP[2][0][0])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
+						+ (((arrayP[0][1][2] - arrayP[2][1][0]) + (arrayP[1][2][2] - arrayP[1][0][0])) + ((arrayP[1][0][2] - arrayP[1][2][0]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
+						+ (arrayP[1][1][2] - arrayP[1][1][0]) * c2o9;
+
+					//gradPx *=c1 - (*pressure)(x1, x2, x3)+pressureHere;
+					//gradPy *=c1 - (*pressure)(x1, x2, x3) + pressureHere;
+					//gradPz *=c1 - (*pressure)(x1, x2, x3) + pressureHere;
+
+					////!Filter&Gradient merged
+					//LBMReal gradPx = 0.0;
+					//LBMReal gradPy = 0.0;
+					//LBMReal gradPz = 0.0;
+					//for (int dir1 = -1; dir1 <= 1; dir1++) {
+					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
+					//		int yyy = x2 + dir1;
+					//		int zzz = x3 + dir2;
+					//		if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
+					//			gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		else {
+					//			gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
+					//			gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		else {
+					//			gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+
+					//		int xxx = x1 + dir1;
+					//		if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
+					//			gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		else {
+					//			gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
+					//			gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		else {
+					//			gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+
+					//		yyy = x2 + dir2;
+					//		if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
+					//			gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		else {
+					//			gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
+					//			gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+					//		else {
+					//			gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+					//		}
+
+					//	}
+					//}
+
+					//Viscosity increase by phase field residuum
+					//LBMReal errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom);
+					//LBMReal limVis = 0.01;// 0.0000001 * 10;//0.01;
+					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
+					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
+					//errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
+					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
+
+					//3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
+					//+WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
+					//+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+
+					muRho = rho;
+
+					////external pressure
+					//forcingX1 =/* muForcingX1.Eval()/rho */- gradPx/rho;
+					//forcingX2 =/* muForcingX2.Eval()/rho */- gradPy/rho;
+					//forcingX3 =/* muForcingX3.Eval()/rho */- gradPz/rho;
+
+					///////////////////////////////////////////////
+
+					//LBMReal pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) );
+					////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) {
+					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P00] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0P0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PP0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MP0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0P] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMP] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M00] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0M0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MM0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PM0] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0M] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPM] * (rhoH - rhoL) / (phiH - phiL)));
+					//	mfbbb -= pBefore * 8.0 / 9.0;
+					//}
+
+					///////////////////////////////////////////////
+
+					LBMReal pStarStart = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+
+					/////////////////////
+					//LBMReal vvxh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
+					//	(((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
+					//	(mfhcbb - mfhabb)) / rhoRef;
+					//LBMReal vvyh = ((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
+					//	(((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
+					//	(mfhbcb - mfhbab)) / rhoRef;
+					//LBMReal vvzh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
+					//	(((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
+					//	(mfhbbc - mfhbba)) / rhoRef;
+
+					//LBMReal deltaPP = 0*(vvxh * dX1_phi + vvyh * dX2_phi + vvzh * dX3_phi) * rhoToPhi / (rho);
+					//mfhbcb += c1o6* c2o9  * deltaPP;
+					//mfhbbc += c1o6* c2o9  * deltaPP;
+					//mfhcbb += c1o6* c2o9  * deltaPP;
+					//mfhccb += c1o6* c1o18 * deltaPP;
+					//mfhacb += c1o6* c1o18 * deltaPP;
+					//mfhcbc += c1o6* c1o18 * deltaPP;
+					//mfhabc += c1o6* c1o18 * deltaPP;
+					//mfhbcc += c1o6* c1o18 * deltaPP;
+					//mfhbac += c1o6* c1o18 * deltaPP;
+					//mfhccc += c1o6* c1o72 * deltaPP;
+					//mfhacc += c1o6* c1o72 * deltaPP;
+					//mfhcac += c1o6* c1o72 * deltaPP;
+					//mfhaac += c1o6* c1o72 * deltaPP;
+					//mfhabb += c1o6* c2o9  * deltaPP;
+					//mfhbab += c1o6* c2o9  * deltaPP;
+					//mfhbba += c1o6* c2o9  * deltaPP;
+					//mfhaab += c1o6* c1o18 * deltaPP;
+					//mfhcab += c1o6* c1o18 * deltaPP;
+					//mfhaba += c1o6* c1o18 * deltaPP;
+					//mfhcba += c1o6* c1o18 * deltaPP;
+					//mfhbaa += c1o6* c1o18 * deltaPP;
+					//mfhbca += c1o6* c1o18 * deltaPP;
+					//mfhaaa += c1o6* c1o72 * deltaPP;
+					//mfhcaa += c1o6* c1o72 * deltaPP;
+					//mfhaca += c1o6* c1o72 * deltaPP;
+					//mfhcca += c1o6* c1o72 * deltaPP;
+					//mfhbbb += c1o6* c4 * c2o9 * deltaPP;
+
+					//////////////////////
+
+					/////Recovering the origin distributions
+					//LBMReal mfStartcbb = mfcbb ;
+					//LBMReal mfStartbcb = mfbcb ;
+					//LBMReal mfStartbbc = mfbbc ;
+					//LBMReal mfStartccb = mfccb ;
+					//LBMReal mfStartacb = mfacb ;
+					//LBMReal mfStartcbc = mfcbc ;
+					//LBMReal mfStartabc = mfabc ;
+					//LBMReal mfStartbcc = mfbcc ;
+					//LBMReal mfStartbac = mfbac ;
+					//LBMReal mfStartccc = mfccc ;
+					//LBMReal mfStartacc = mfacc ;
+					//LBMReal mfStartcac = mfcac ;
+					//LBMReal mfStartaac = mfaac ;
+					//LBMReal mfStartabb = mfabb ;
+					//LBMReal mfStartbab = mfbab ;
+					//LBMReal mfStartbba = mfbba ;
+					//LBMReal mfStartaab = mfaab ;
+					//LBMReal mfStartcab = mfcab ;
+					//LBMReal mfStartaba = mfaba ;
+					//LBMReal mfStartcba = mfcba ;
+					//LBMReal mfStartbaa = mfbaa ;
+					//LBMReal mfStartbca = mfbca ;
+					//LBMReal mfStartaaa = mfaaa ;
+					//LBMReal mfStartcaa = mfcaa ;
+					//LBMReal mfStartaca = mfaca ;
+					//LBMReal mfStartcca = mfcca ;
+					//LBMReal mfStartbbb = mfbbb ;
+
+
+						mfcbb += mfhcbb /rho;
+						mfbcb += mfhbcb /rho;
+						mfbbc += mfhbbc /rho;
+						mfccb += mfhccb /rho;
+						mfacb += mfhacb /rho;
+						mfcbc += mfhcbc /rho;
+						mfabc += mfhabc /rho;
+						mfbcc += mfhbcc /rho;
+						mfbac += mfhbac /rho;
+						mfccc += mfhccc /rho;
+						mfacc += mfhacc /rho;
+						mfcac += mfhcac /rho;
+						mfaac += mfhaac /rho;
+						mfabb += mfhabb /rho;
+						mfbab += mfhbab /rho;
+						mfbba += mfhbba /rho;
+						mfaab += mfhaab /rho;
+						mfcab += mfhcab /rho;
+						mfaba += mfhaba /rho;
+						mfcba += mfhcba /rho;
+						mfbaa += mfhbaa /rho;
+						mfbca += mfhbca /rho;
+						mfaaa += mfhaaa /rho;
+						mfcaa += mfhcaa /rho;
+						mfaca += mfhaca /rho;
+						mfcca += mfhcca /rho;
+						mfbbb += mfhbbb /rho;
+
+
+
+					//Abbas
+					LBMReal pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+					//22.09.22 not yet in balance, repaire here
+					LBMReal ppStar = ((((((mfhaaa + mfhccc) + (mfhaac + mfhcca)) + ((mfhcac + mfhaca) + (mfhcaa + mfhacc)))*c3
+						+ (((mfhaab + mfhccb) + (mfhacb + mfhcab)) + ((mfhaba + mfhcbc) + (mfhabc + mfhcba)) + ((mfhbaa + mfhbcc) + (mfhbac + mfhbca))))*c2
+						+ ((mfhabb + mfhcbb) + (mfhbab + mfhbcb) + (mfhbba + mfhbbc))) ) * c1o3/rho;
+	
+					ppStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) * c3
+						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) * c2
+						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)))) * c1o3 ;
+
+					//(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[DIR_000] : (*phaseFieldOld)(x1, x2, x3);
+					//LBMReal dtPhi = phi[DIR_000] - (*phaseFieldOld)(x1, x2, x3);
+					//LBMReal deltaP = -pStar * (c1 - rho / (rho + c1o2 * rhoToPhi * dtPhi));// -pStar * pStar * pStar * 1.0e-4 * rho * rho * rho;
+					//LBMReal deltaP = pStar * (c1 - mfhbbb*rho) * c1o2;//Explicit
+					//LBMReal deltaP = pStar * (c1 - mfhbbb * rho) / (c1 + mfhbbb * rho);//Semi-Implicit
+					//(*phaseFieldOld)(x1, x2, x3) = phi[DIR_000];
+
+					//mfabb += c2o9 *deltaP;
+					//mfbab += c2o9 *deltaP;
+					//mfbba += c2o9 *deltaP;
+					//mfaab += c1o18*deltaP;
+					//mfcab += c1o18*deltaP;
+					//mfaba += c1o18*deltaP;
+					//mfcba += c1o18*deltaP;
+					//mfbaa += c1o18*deltaP;
+					//mfbca += c1o18*deltaP;
+					//mfaaa += c1o72*deltaP;
+					//mfcaa += c1o72*deltaP;
+					//mfaca += c1o72*deltaP;
+					//mfcca += c1o72*deltaP;
+					//mfcbb += c2o9 *deltaP;
+					//mfbcb += c2o9 *deltaP;
+					//mfbbc += c2o9 *deltaP;
+					//mfccb += c1o18*deltaP;
+					//mfacb += c1o18*deltaP;
+					//mfcbc += c1o18*deltaP;
+					//mfabc += c1o18*deltaP;
+					//mfbcc += c1o18*deltaP;
+					//mfbac += c1o18*deltaP;
+					//mfccc += c1o72*deltaP;
+					//mfacc += c1o72*deltaP;
+					//mfcac += c1o72*deltaP;
+					//mfaac += c1o72*deltaP;
+
+					//pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+
+
+
+
+					//mfabb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_P00])*rhoToPhi/rho;
+					//mfbab -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_0P0])*rhoToPhi/rho;
+					//mfbba -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_00P])*rhoToPhi/rho;
+					//mfaab -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_PP0])*rhoToPhi/rho;
+					//mfcab -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_MP0])*rhoToPhi/rho;
+					//mfaba -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_P0P])*rhoToPhi/rho;
+					//mfcba -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_M0P])*rhoToPhi/rho;
+					//mfbaa -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0PP])*rhoToPhi/rho;
+					//mfbca -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0MP])*rhoToPhi/rho;
+					//mfaaa -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PPP])*rhoToPhi/rho;
+					//mfcaa -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MPP])*rhoToPhi/rho;
+					//mfaca -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PMP])*rhoToPhi/rho;
+					//mfcca -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MMP])*rhoToPhi/rho;
+					//mfcbb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_M00])*rhoToPhi/rho;
+					//mfbcb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_0M0])*rhoToPhi/rho;
+					//mfbbc -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_00M])*rhoToPhi/rho;
+					//mfccb -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_MM0])*rhoToPhi/rho;
+					//mfacb -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_PM0])*rhoToPhi/rho;
+					//mfcbc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_M0M])*rhoToPhi/rho;
+					//mfabc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_P0M])*rhoToPhi/rho;
+					//mfbcc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0MM])*rhoToPhi/rho;
+					//mfbac -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0PM])*rhoToPhi/rho;
+					//mfccc -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MMM])*rhoToPhi/rho;
+					//mfacc -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PMM])*rhoToPhi/rho;
+					//mfcac -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MPM])*rhoToPhi/rho;
+					//mfaac -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PPM])*rhoToPhi/rho;
+
+
+					//forcingX1 =/* muForcingX1.Eval() / rho*/ - pStar * dX1_phi * rhoToPhi / rho;
+					//forcingX2 =/* muForcingX2.Eval() / rho*/ - pStar * dX2_phi * rhoToPhi / rho;
+					//forcingX3 =/* muForcingX3.Eval() / rho*/ - pStar * dX3_phi * rhoToPhi / rho;
+
+
+					//mfabb += (-forcingX1) * c2o9;
+					//mfbab += (-forcingX2) * c2o9;
+					//mfbba += (-forcingX3) * c2o9;
+					//mfaab += (-forcingX1 - forcingX2) * c1o16;
+					//mfcab += (forcingX1 - forcingX2) * c1o16;
+					//mfaba += (-forcingX1 - forcingX3) * c1o16;
+					//mfcba += (forcingX1 - forcingX3) * c1o16;
+					//mfbaa += (-forcingX2 - forcingX3) * c1o16;
+					//mfbca += (forcingX2 - forcingX3) * c1o16;
+					//mfaaa += (-forcingX1 - forcingX2 - forcingX3) * c1o72;
+					//mfcaa += (forcingX1 - forcingX2 - forcingX3) * c1o72;
+					//mfaca += (-forcingX1 + forcingX2 - forcingX3) * c1o72;
+					//mfcca += (forcingX1 + forcingX2 - forcingX3) * c1o72;
+					//mfcbb += (forcingX1)*c2o9;
+					//mfbcb += (forcingX2)*c2o9;
+					//mfbbc += (forcingX3)*c2o9;
+					//mfccb += (forcingX1 + forcingX2) * c1o16;
+					//mfacb += (-forcingX1 + forcingX2) * c1o16;
+					//mfcbc += (forcingX1 + forcingX3) * c1o16;
+					//mfabc += (-forcingX1 + forcingX3) * c1o16;
+					//mfbcc += (forcingX2 + forcingX3) * c1o16;
+					//mfbac += (-forcingX2 + forcingX3) * c1o16;
+					//mfccc += (forcingX1 + forcingX2 + forcingX3) * c1o72;
+					//mfacc += (-forcingX1 + forcingX2 + forcingX3) * c1o72;
+					//mfcac += (forcingX1 - forcingX2 + forcingX3) * c1o72;
+					//mfaac += (-forcingX1 - forcingX2 + forcingX3) * c1o72;
+
+					LBMReal saveForceX1 = forcingX1;
+					LBMReal saveForceX2 = forcingX2;
+					LBMReal saveForceX3 = forcingX3;
+
+					 vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+						(mfcbb - mfabb)) / rhoRef;
+					 vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+						(mfbcb - mfbab)) / rhoRef;
+					 vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+						(mfbbc - mfbba)) / rhoRef;
+
+
+					 LBMReal dRhoInvX = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
+						 (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
+						 (mfhcbb - mfhabb)));
+					 LBMReal dRhoInvY = -(((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
+						 (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
+						 (mfhbcb - mfhbab)));
+					 LBMReal dRhoInvZ = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
+						 (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
+						 (mfhbbc - mfhbba)));
+
+
+					 forcingX1 = 0.0;
+					 forcingX2 = 0.0;
+					 forcingX3 = 0.0;
+					//!Abbas
+					//LBMReal dX1_rhoInv = gradX1_rhoInv(rhoL, rhoH - rhoL);
+					//LBMReal dX2_rhoInv = gradX2_rhoInv(rhoL, rhoH - rhoL);
+					//LBMReal dX3_rhoInv = gradX3_rhoInv(rhoL, rhoH - rhoL);
+					//forcingX1 =/* muForcingX1.Eval() / rho*/ +pStar * dX1_rhoInv * rho;
+					//forcingX2 =/* muForcingX2.Eval() / rho*/ +pStar * dX2_rhoInv * rho;
+					//forcingX3 =/* muForcingX3.Eval() / rho*/ +pStar * dX3_rhoInv * rho;
+
+					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2;
+					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2;
+					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2;
+					 LBMReal FdX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					 LBMReal FdX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					 LBMReal FdX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+
+
+					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ;
+					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho ) ;
+					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho ) ;
+
+					//forcingX1 = (pStar * dRhoInvX* rho *c3) ;
+					//forcingX2 = (pStar * dRhoInvY* rho *c3) ;
+					//forcingX3 = (pStar * dRhoInvZ* rho *c3) ;
+					//if (phi[DIR_000] > 0.1 && phi[DIR_000] < 0.9) std::cout << phi[DIR_000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
+					//LBMReal forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ;
+					//LBMReal forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ;
+					//LBMReal forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ;
+
+					//forcingX1 = (fabs(vvx + c1o2 * forcingX1) < fabs(vvx + c1o2 * forcingX1ALTERNAT)) ? forcingX1 : forcingX1ALTERNAT;
+					//forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT;
+					//forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT;
+
+					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale;
+
+					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX1_rhoInv * rho*(phi[DIR_000]));
+					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX2_rhoInv * rho*(phi[DIR_000]));
+					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX3_rhoInv * rho*(phi[DIR_000]));
+						 //if (phi[DIR_000] > 0.3 && phi[DIR_000] < 0.7)
+						 //{
+							// int test = 1;
+							// std::cout << phi[DIR_000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
+						 //}
+
+
+
+					 //LBMReal scaleGrad = c2 * phi[DIR_000] * (1.0 - phi[DIR_000]) / ((phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])) * (phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])));
+					 //dX1_phi *= scaleGrad;
+					 //dX2_phi *= scaleGrad;
+					 //dX3_phi *= scaleGrad;
+
+					 ///Experimental interface sharpening force 20.06.2022
+
+					 LBMReal scaleSharpener = 1.0;
+					 //forcingX1 += scaleSharpener * (FdX1_phi - dX1_phi) * fabsf(FdX1_phi - dX1_phi)  / rho;
+					 //forcingX2 += scaleSharpener * (FdX2_phi - dX2_phi) * fabsf(FdX2_phi - dX2_phi)  / rho;
+					 //forcingX3 += scaleSharpener * (FdX3_phi - dX3_phi) * fabsf(FdX3_phi - dX3_phi)  / rho;
+					///surface tension force
+					forcingX1 += mu * dX1_phi/rho;
+					forcingX2 += mu * dX2_phi/rho;
+					forcingX3 += mu * dX3_phi/rho;
+
+					LBMReal forcingBIAS = 0.5;
+					forcingX1 += muForcingX1.Eval() / rho;//*phi[DIR_000];
+					forcingX2 += muForcingX2.Eval() / rho;// * phi[DIR_000];
+					forcingX3 += muForcingX3.Eval() / rho;// * phi[DIR_000];
+
+				//	//19.08.2022
+					//vvx += vvxh / rho * c1o2;
+					//vvy += vvyh / rho * c1o2;
+					//vvz += vvzh / rho * c1o2;
+				//	//
+
+
+					vvx += (forcingX1) * deltaT * c1o2;
+					vvy += (forcingX2) * deltaT * c1o2;
+					vvz += (forcingX3) * deltaT * c1o2;
+
+					//vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT *  c1o2; // X
+					//vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT *  c1o2; // Y
+					//vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT *  c1o2; // Z
+
+
+
+				//	vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * forcingBIAS; // X
+				//	vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * forcingBIAS; // Y
+				//	vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * forcingBIAS; // Z
+
+
+
+					//Abbas
+					LBMReal M200 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) ))
+						+ ((mfabb + mfcbb))) );
+					LBMReal M020 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+						+ (((mfaab + mfccb) + (mfacb + mfcab))  + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+						+ ( (mfbab + mfbcb) )) );
+					LBMReal M002 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+						+ ( + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+						+ ( (mfbba + mfbbc))));
+
+					LBMReal M110 = ((((((mfaaa + mfccc) + (-mfcac - mfaca)) + ((mfaac + mfcca) + (-mfcaa -mfacc)))
+						+ (((mfaab + mfccb) + (-mfacb - mfcab))   ))
+						) );
+					LBMReal M101 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcac + mfaca) - (mfcaa + mfacc)))
+						+ (((mfaba + mfcbc) + (-mfabc - mfcba))))
+						));
+					LBMReal M011 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ( (mfcaa + mfacc)- (mfcac + mfaca)))
+						+ (((mfbaa + mfbcc) + (-mfbac - mfbca))))
+						));
+					LBMReal vvxI = vvx;
+					LBMReal vvyI = vvy;
+					LBMReal vvzI = vvz;
+
+					LBMReal collFactorStore=collFactorM;
+					LBMReal stress;
+					//for(int iter=0;iter<5;iter++)
+				 //{
+					//	LBMReal OxxPyyPzz = 1.0;
+					//	LBMReal mxxPyyPzz = (M200-vvxI*vvxI) + (M020-vvyI*vvyI) + (M002-vvzI*vvzI);
+					//	//pStar = mxxPyyPzz * c1o3;
+					//mxxPyyPzz -= c3 *pStar;
+
+					//LBMReal mxxMyy = (M200-vvxI*vvxI) - (M020-vvyI*vvyI);
+					//LBMReal mxxMzz = (M200-vvxI*vvxI) - (M002-vvzI*vvzI);
+					//LBMReal mxy = M110 - vvxI * vvyI;
+					//LBMReal mxz = M101 - vvxI * vvzI;
+					//LBMReal myz = M011 - vvyI * vvzI;
+
+
+					//mxxMyy *= c1 - collFactorM * c1o2;
+					//mxxMzz *= c1 - collFactorM * c1o2;
+					//mxy *= c1 - collFactorM * c1o2;
+					//mxz *= c1 - collFactorM * c1o2;
+					//myz *= c1 - collFactorM * c1o2;
+					//mxxPyyPzz *= c1 - OxxPyyPzz * c1o2;
+					////mxxPyyPzz = mxxPyyPzz*fabs(mxxPyyPzz)/(1.0e-6+fabs(mxxPyyPzz));
+					////mxxPyyPzz += c3 * pStar;
+					//LBMReal mxx = (mxxMyy + mxxMzz + mxxPyyPzz)*c1o3;
+					//LBMReal myy = (-c2*mxxMyy + mxxMzz + mxxPyyPzz)*c1o3;
+					//LBMReal mzz = (mxxMyy -c2* mxxMzz + mxxPyyPzz) * c1o3;
+					//vvxI = vvx - (mxx * dX1_phi + mxy * dX2_phi + mxz * dX3_phi) * rhoToPhi / (rho);
+					//vvyI = vvy - (mxy * dX1_phi + myy * dX2_phi + myz * dX3_phi) * rhoToPhi / (rho);
+					//vvzI = vvz - (mxz * dX1_phi + myz * dX2_phi + mzz * dX3_phi) * rhoToPhi / (rho);
+
+
+				////	vvzI = vvz + (mxz * dRhoInvX + myz * dRhoInvY + mzz * dRhoInvZ) *  (rho)*c3;
+				////	vvxI = vvx + (mxx * dRhoInvX + mxy * dRhoInvY + mxz * dRhoInvZ) *  (rho)*c3;
+				////	vvyI = vvy + (mxy * dRhoInvX + myy * dRhoInvY + myz * dRhoInvZ) *  (rho)*c3;
+
+
+				//	//LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
+				//	//
+				//	//LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
+				//	//LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
+				//	//LBMReal Dxy = -three * collFactorM * mxy;
+				//	//LBMReal Dxz = -three * collFactorM * mxz;
+				//	//LBMReal Dyz = -three * collFactorM * myz;
+				//	////LBMReal stress = sqrt(sqrt((dyuy+dxux+dzuz)* (dyuy + dxux + dzuz))) * sqrt(forcingX1 * forcingX1 + forcingX2 * forcingX2 + forcingX3 * forcingX3);
+				//	// stress = sqrt(dyuy * dyuy + dxux * dxux + dzuz*dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz)*sqrt(forcingX1*forcingX1+forcingX2*forcingX2+forcingX3*forcingX3);
+				//	////collFactorM = collFactorStore + (1.75 - collFactorStore) * stress / (stress + 1.0e-8);
+				//	//
+				//	//LBMReal dX2_rho = (rhoToPhi)*dX2_phi;
+				//	//LBMReal dX1_rho = (rhoToPhi)*dX1_phi;
+				//	//LBMReal dX3_rho = (rhoToPhi)*dX3_phi;
+				//	////vvxI= vvx+ c1o6 * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+				//	////vvyI= vvy+ c1o6 * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+				//	////vvzI= vvz+ c1o6 * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+
+				//	//vvxI = vvx + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+				//	//vvyI = vvy + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+				//	//vvzI = vvz + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+
+				//	////vvxI = vvx - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rhoInv + Dxy * dX2_rhoInv + Dxz * dX3_rhoInv);
+				//	////vvyI = vvy - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rhoInv + 2 * dyuy * dX2_rhoInv + Dyz * dX3_rhoInv);
+				//	////vvzI = vvz - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rhoInv + Dyz * dX2_rhoInv + 2 * dyuy * dX3_rhoInv);
+
+
+					//}
+				//	//forcingX1+=(vvxI-vvx)/(deltaT* forcingBIAS) + muForcingX1.Eval() / rho;
+				//	//forcingX2 += (vvyI - vvy) / (deltaT * forcingBIAS) + muForcingX2.Eval() / rho;
+				//	//forcingX3 += (vvzI - vvz) / (deltaT * forcingBIAS) + muForcingX3.Eval() / rho;
+
+
+				////	forcingX1 += c2 * (vvxI - vvx);
+				////	forcingX2 += c2 * (vvyI - vvy);
+				////	forcingX3 += c2 * (vvzI - vvz);
+
+
+					//mfabb += c1o2*(-forcingX1) * c2o9;
+					//mfbab += c1o2*(-forcingX2) * c2o9;
+					//mfbba += c1o2*(-forcingX3) * c2o9;
+					//mfaab += c1o2*(-forcingX1 - forcingX2) * c1o18;
+					//mfcab += c1o2*( forcingX1 - forcingX2) * c1o18;
+					//mfaba += c1o2*(-forcingX1 - forcingX3) * c1o18;
+					//mfcba += c1o2*( forcingX1 - forcingX3) * c1o18;
+					//mfbaa += c1o2*(-forcingX2 - forcingX3) * c1o18;
+					//mfbca += c1o2*( forcingX2 - forcingX3) * c1o18;
+					//mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72;
+					//mfcaa += c1o2*(forcingX1 - forcingX2 - forcingX3) * c1o72;
+					//mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72;
+					//mfcca += c1o2*(forcingX1 + forcingX2 - forcingX3) * c1o72;
+					//mfcbb += c1o2*(forcingX1)*c2o9;
+					//mfbcb += c1o2*(forcingX2)*c2o9;
+					//mfbbc += c1o2*(forcingX3)*c2o9;
+					//mfccb += c1o2*( forcingX1 + forcingX2) * c1o18;
+					//mfacb += c1o2*(-forcingX1 + forcingX2) * c1o18;
+					//mfcbc += c1o2*( forcingX1 + forcingX3) * c1o18;
+					//mfabc += c1o2*(-forcingX1 + forcingX3) * c1o18;
+					//mfbcc += c1o2*( forcingX2 + forcingX3) * c1o18;
+					//mfbac += c1o2*(-forcingX2 + forcingX3) * c1o18;
+					//mfccc += c1o2*(forcingX1 + forcingX2 + forcingX3) * c1o72;
+					//mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72;
+					//mfcac += c1o2*(forcingX1 - forcingX2 + forcingX3) * c1o72;
+					//mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72;
+
+
+					//forcingX1 = saveForceX1;
+					//forcingX2 = saveForceX2;
+					//forcingX3 = saveForceX3;
+					vvx = vvxI;
+					vvy = vvyI;
+					vvz = vvzI;
+
+
+
+					//!Abbas
+
+					LBMReal vx2;
+					LBMReal vy2;
+					LBMReal vz2;
+					vx2 = vvx * vvx;
+					vy2 = vvy * vvy;
+					vz2 = vvz * vvz;
+					//pStar =ppStar- (vx2 + vy2 + vz2)*pStar;
+				//	pStar = (pStar + ppStar)*c1o2;
+					///////////////////////////////////////////////////////////////////////////////////////////               
+					LBMReal oMdrho;
+					///////////////
+						//mfabb -= pStar * c2o9;
+						//mfbab -= pStar * c2o9;
+						//mfbba -= pStar * c2o9;
+						//mfaab -= pStar * c1o16;
+						//mfcab -= pStar * c1o16;
+						//mfaba -= pStar * c1o16;
+						//mfcba -= pStar * c1o16;
+						//mfbaa -= pStar * c1o16;
+						//mfbca -= pStar * c1o16;
+						//mfaaa -= pStar * c1o72;
+						//mfcaa -= pStar * c1o72;
+						//mfaca -= pStar * c1o72;
+						//mfcca -= pStar * c1o72;
+						//mfcbb -= pStar * c2o9;
+						//mfbcb -= pStar * c2o9;
+						//mfbbc -= pStar * c2o9;
+						//mfccb -= pStar * c1o16;
+						//mfacb -= pStar * c1o16;
+						//mfcbc -= pStar * c1o16;
+						//mfabc -= pStar * c1o16;
+						//mfbcc -= pStar * c1o16;
+						//mfbac -= pStar * c1o16;
+						//mfccc -= pStar * c1o72;
+						//mfacc -= pStar * c1o72;
+						//mfcac -= pStar * c1o72;
+						//mfaac -= pStar * c1o72;
+						//mfbbb -= pStar * 8.0/9.0;
+					///////////////////
+
+					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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
+
+															 ////////////////////////////////////////////////////////////////////////////////////
+					LBMReal wadjust;
+					LBMReal qudricLimit = 0.01 / (c1 + 1.0e4 * phi[DIR_000] * (c1 - phi[DIR_000])); //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
+					////////////////////////////////////////////////////////////////////////////////////
+
+					// mfaaa = 0.0;
+					LBMReal OxxPyyPzz = 1.0; //omega2 or bulk viscosity
+											//  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
+											//  LBMReal OxyyMxzz  = 1.;//2+s9;//
+					LBMReal O4 = 1.;
+					LBMReal O5 = 1.;
+					LBMReal O6 = 1.;
+
+					//collFactorM+= (1.7 - collFactorM) * fabs(mfaaa) / (fabs(mfaaa) + 0.001f);
+
+
+					/////fourth order parameters; here only for test. Move out of loop!
+
+					LBMReal OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
+					LBMReal OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
+				    LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
+					LBMReal A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
+					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' )
+					LBMReal BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
+					//LBMReal stress = 1.0;// stress / (stress + 1.0e-10);
+					stress = 1.0;
+					//OxyyPxzz += stress*(1.0-OxyyPxzz);
+					//OxyyPxzz = c3 * (collFactorM - c2) / (collFactorM - c3);
+					//OxyyMxzz += stress*(1.0-OxyyMxzz);
+					//Oxyz +=  stress*(1.0-Oxyz);
+					//A *= 1.0-stress;
+					//BB *= 1.0-stress;
+
+					//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 - c1) * oMdrho);
+					LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1) * oMdrho);
+					LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1) * 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;
+					//pStar = (mxxPyyPzz+vx2+vy2+vz2) * c1o3;//does not work
+					//pStar = (mxxPyyPzz) * c1o3;
+					//pStar = pStar + 1.5 * (mxxPyyPzz * c1o3 - pStar);
+					//mfaaa = mxxPyyPzz;
+					//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
+					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
+										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
+					LBMReal mxxMyy = mfcaa - mfaca;
+					LBMReal mxxMzz = mfcaa - mfaac;
+
+					///
+					LBMReal mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
+					LBMReal mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
+					LBMReal mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
+					LBMReal mmfabb = mfabb;
+					LBMReal mmfbab = mfbab;
+					LBMReal mmfbba = mfbba;
+					///
+
+					LBMReal dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz)*0;
+					//LBMReal dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho;
+					LBMReal dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
+					LBMReal dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
+					LBMReal Dxy = -three * collFactorM * mfbba;
+					LBMReal Dxz = -three * collFactorM * mfbab;
+					LBMReal Dyz = -three * collFactorM * mfabb;
+//					// attempt to improve implicit  stress computation by fixed iteration
+//					LBMReal dX2_rho = (rhoToPhi)*dX2_phi;
+//					LBMReal dX1_rho = (rhoToPhi)*dX1_phi;
+//					LBMReal dX3_rho = (rhoToPhi)*dX3_phi;
+//
+//						LBMReal dfx= c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+//						LBMReal dfy = c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+//						LBMReal dfz = c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+//
+//						for (int iteration = 0; iteration < 5; iteration++) {
+//							mxxMyy = (mfcaa - dfx * dfx * c1o2) - (mfaca - dfy * dfy * c1o2);
+//							mxxMzz = (mfcaa - dfx * dfx * c1o2) - (mfaac - dfz * dfz * c1o2);
+//						}
+/////end fixed iteration
+//
+
+
+					//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);
+
+					//if (fabsf(mfaaa + (dxux + dyuy + dzuz) > 1e-9)){
+					//	std::cout << mfaaa <<" "<< (dxux + dyuy + dzuz)<< std::endl;
+					//}
+
+
+					////updated pressure
+					//mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
+					//mfaaa *= (one-omegaDRho);// (mfaaa + (dxux + dyuy + dzuz)) * .5; // Pressure elimination as in standard velocity model
+								 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
+				
+					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
+
+										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
+										//mfaaa = mfaaaS;
+										// 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;
+
+					 mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
+					 mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
+					 mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa);
+					 mmfabb += mfabb;
+					 mmfbab += mfbab;
+					 mmfbba += mfbba;
+
+					//relax
+					wadjust = Oxyz + (1. - Oxyz) * 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 * (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (one - O4) * (CUMacc);
+					CUMcac = -O4 * (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (one - O4) * (CUMcac);
+					CUMcca = -O4 * (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (one - O4) * (CUMcca);
+					CUMbbc = -O4 * (one / collFactorM - c1o2) * Dxy * c1o3 * BB + (one - O4) * (CUMbbc);
+					CUMbcb = -O4 * (one / collFactorM - c1o2) * Dxz * c1o3 * BB + (one - O4) * (CUMbcb);
+					CUMcbb = -O4 * (one / collFactorM - c1o2) * Dyz * c1o3 * BB + (one - 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 - c1) * oMdrho;
+					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1) * oMdrho;
+					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1) * 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;// *(c1 - forcingBIAS) / forcingBIAS;
+					mfaba = -mfaba;// *(c1 - forcingBIAS) / forcingBIAS;
+					mfaab = -mfaab;// *(c1 - forcingBIAS) / forcingBIAS;
+
+					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho);
+					//mfaba += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho);
+					//mfaab += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho);
+
+					mfbaa -= c1o2 * rhoToPhi * (mmfcaa* dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho);
+					mfaba -= c1o2 * rhoToPhi * (mmfbba* dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho);
+					mfaab -= c1o2 * rhoToPhi * (mmfbab* dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho);
+					
+					vvx -= c1o4 * rhoToPhi * (mmfcaa * dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho);
+					vvy -= c1o4 * rhoToPhi * (mmfbba * dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho);
+					vvz -= c1o4 * rhoToPhi * (mmfbab * dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho);
+
+					vx2 = vvx * vvx;
+					vy2 = vvy * vvy;
+					vz2 = vvz * vvz;
+
+					//mmfcaa =0;// c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
+					//mmfaca =0;// c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
+					//mmfaac =0;// c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz - mfaaa);
+					//mmfabb =0;// mfabb;
+					//mmfbab =0;// mfbab;
+					//mmfbba =0;// mfbba;
+
+
+					//////////////////////////////////////////////////////////////////////////////////////
+					//grad Rho
+					//LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[DIR_000] * three * gradPx;
+					//LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[DIR_000] * three * gradPy;
+					//LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[DIR_000] * three * gradPz;
+
+					//LBMReal dX2_rho = (rhoToPhi ) * dX2_phi ;
+					//LBMReal dX1_rho = (rhoToPhi ) * dX1_phi ;
+					//LBMReal dX3_rho = (rhoToPhi ) * dX3_phi ;
+					///////////////////////////////////////////////////////////////////////////////////////
+					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+					//mfaba += c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+					//mfaab += c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+					
+					///////Fakhari pressure correction
+					//mfbaa -= mfaaa / rho * dX1_rho*c1o3;
+					//mfaba -= mfaaa / rho * dX2_rho*c1o3;
+					//mfaab -= mfaaa / rho * dX3_rho*c1o3;
+					////////////////////////////////////////////////////////////////////////////////////
+					//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;
+					/////SimpleForce
+
+					//mfabb += c2o9 * deltaP;
+					//mfbab += c2o9 * deltaP;
+					//mfbba += c2o9 * deltaP;
+					//mfaab += c1o18 * deltaP;
+					//mfcab += c1o18 * deltaP;
+					//mfaba += c1o18 * deltaP;
+					//mfcba += c1o18 * deltaP;
+					//mfbaa += c1o18 * deltaP;
+					//mfbca += c1o18 * deltaP;
+					//mfaaa += c1o72 * deltaP;
+					//mfcaa += c1o72 * deltaP;
+					//mfaca += c1o72 * deltaP;
+					//mfcca += c1o72 * deltaP;
+					//mfcbb += c2o9 * deltaP;
+					//mfbcb += c2o9 * deltaP;
+					//mfbbc += c2o9 * deltaP;
+					//mfccb += c1o18 * deltaP;
+					//mfacb += c1o18 * deltaP;
+					//mfcbc += c1o18 * deltaP;
+					//mfabc += c1o18 * deltaP;
+					//mfbcc += c1o18 * deltaP;
+					//mfbac += c1o18 * deltaP;
+					//mfccc += c1o72 * deltaP;
+					//mfacc += c1o72 * deltaP;
+					//mfcac += c1o72 * deltaP;
+					//mfaac += c1o72 * deltaP;
+
+					//mfabb += c1o2*(-forcingX1                        ) * c2o9;
+					//mfbab += c1o2*(           - forcingX2            ) * c2o9;
+					//mfbba += c1o2*(                       - forcingX3) * c2o9;
+					//mfaab += c1o2*(-forcingX1 - forcingX2            ) * c1o18;
+					//mfcab += c1o2*( forcingX1 - forcingX2            ) * c1o18;
+					//mfaba += c1o2*(-forcingX1             - forcingX3) * c1o18;
+					//mfcba += c1o2*( forcingX1             - forcingX3) * c1o18;
+					//mfbaa += c1o2*(           - forcingX2 - forcingX3) * c1o18;
+					//mfbca += c1o2*(             forcingX2 - forcingX3) * c1o18;
+					//mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72;
+					//mfcaa += c1o2*( forcingX1 - forcingX2 - forcingX3) * c1o72;
+					//mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72;
+					//mfcca += c1o2*( forcingX1 + forcingX2 - forcingX3) * c1o72;
+					//mfcbb += c1o2*( forcingX1                        ) * c2o9;
+					//mfbcb += c1o2*(             forcingX2            ) * c2o9;
+					//mfbbc += c1o2*(                         forcingX3) * c2o9;
+					//mfccb += c1o2*( forcingX1 + forcingX2            ) * c1o18;
+					//mfacb += c1o2*(-forcingX1 + forcingX2            ) * c1o18;
+					//mfcbc += c1o2*( forcingX1             + forcingX3) * c1o18;
+					//mfabc += c1o2*(-forcingX1             + forcingX3) * c1o18;
+					//mfbcc += c1o2*(             forcingX2 + forcingX3) * c1o18;
+					//mfbac += c1o2*(           - forcingX2 + forcingX3) * c1o18;
+					//mfccc += c1o2*( forcingX1 + forcingX2 + forcingX3) * c1o72;
+					//mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72;
+					//mfcac += c1o2*( forcingX1 - forcingX2 + forcingX3) * c1o72;
+					//mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72;
+					//pStarStart -= (vx2 + vy2 + vz2) * c1o3;
+
+					///Take the diffusion part with out
+
+					//mfStartcbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::E  , zeroReal, vvx, vvy, vvz);
+					//mfStartbcb -= D3Q27System::getIncompFeqForDirection(D3Q27System::N  , zeroReal, vvx, vvy, vvz);
+					//mfStartbbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::T  , zeroReal, vvx, vvy, vvz);
+					//mfStartccb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NE , zeroReal, vvx, vvy, vvz);
+					//mfStartacb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NW , zeroReal, vvx, vvy, vvz);
+					//mfStartcbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TE , zeroReal, vvx, vvy, vvz);
+					//mfStartabc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TW , zeroReal, vvx, vvy, vvz);
+					//mfStartbcc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TN , zeroReal, vvx, vvy, vvz);
+					//mfStartbac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TS , zeroReal, vvx, vvy, vvz);
+					//mfStartccc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNE, zeroReal, vvx, vvy, vvz);
+					//mfStartacc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNW, zeroReal, vvx, vvy, vvz);
+					//mfStartcac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSE, zeroReal, vvx, vvy, vvz);
+					//mfStartaac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSW, zeroReal, vvx, vvy, vvz);
+					//mfStartabb -= D3Q27System::getIncompFeqForDirection(D3Q27System::W  , zeroReal, vvx, vvy, vvz);
+					//mfStartbab -= D3Q27System::getIncompFeqForDirection(D3Q27System::S  , zeroReal, vvx, vvy, vvz);
+					//mfStartbba -= D3Q27System::getIncompFeqForDirection(D3Q27System::B  , zeroReal, vvx, vvy, vvz);
+					//mfStartaab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SW , zeroReal, vvx, vvy, vvz);
+					//mfStartcab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SE , zeroReal, vvx, vvy, vvz);
+					//mfStartaba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BW , zeroReal, vvx, vvy, vvz);
+					//mfStartcba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BE , zeroReal, vvx, vvy, vvz);
+					//mfStartbaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BS , zeroReal, vvx, vvy, vvz);
+					//mfStartbca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BN , zeroReal, vvx, vvy, vvz);
+					//mfStartaaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSW, zeroReal, vvx, vvy, vvz);
+					//mfStartcaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSE, zeroReal, vvx, vvy, vvz);
+					//mfStartaca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNW, zeroReal, vvx, vvy, vvz);
+					//mfStartcca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNE, zeroReal, vvx, vvy, vvz);
+					//mfStartbbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::REST, zeroReal, vvx, vvy, vvz);
+					//
+					//pStar += pStarStart*(omegaDRho-c1);
+
+					//mfStartcbb = c2o9 * pStar;
+					//	mfStartbcb= c2o9 * pStar;
+					//	mfStartbbc= c2o9 * pStar;
+					//	mfStartccb= c1o18 * pStar;
+					//	mfStartacb= c1o18 * pStar;
+					//	mfStartcbc= c1o18 * pStar;
+					//	mfStartabc= c1o18 * pStar;
+					//	mfStartbcc= c1o18 * pStar;
+					//	mfStartbac= c1o18 * pStar;
+					//	mfStartccc= c1o72 * pStar;
+					//	mfStartacc= c1o72 * pStar;
+					//	mfStartcac= c1o72 * pStar;
+					//	mfStartaac= c1o72 * pStar;
+					//	mfStartabb= c2o9 * pStar;
+					//	mfStartbab= c2o9 * pStar;
+					//	mfStartbba= c2o9 * pStar;
+					//	mfStartaab= c1o18 * pStar;
+					//	mfStartcab= c1o18 * pStar;
+					//	mfStartaba= c1o18 * pStar;
+					//	mfStartcba= c1o18 * pStar;
+					//	mfStartbaa= c1o18 * pStar;
+					//	mfStartbca= c1o18 * pStar;
+					//	mfStartaaa= c1o72 * pStar;
+					//	mfStartcaa= c1o72 * pStar;
+					//	mfStartaca= c1o72 * pStar;
+					//	mfStartcca= c1o72 * pStar;
+					//	mfStartbbb= c4 * c2o9 * pStar;
+
+					//mfaaa -= c1o2 * (mfStartaaa + mfStartccc)+ c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa);
+					//mfaab -= c1o2 * (mfStartaab + mfStartccb)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa));
+					//mfaac -= c1o2 * (mfStartaac + mfStartcca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa);
+					//mfaba -= c1o2 * (mfStartaba + mfStartcbc)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa);
+					//mfabb -= c1o2 * (mfStartabb + mfStartcbb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa);
+					//mfabc -= c1o2 * (mfStartabc + mfStartcba)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa);
+					//mfaca -= c1o2 * (mfStartaca + mfStartcac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa);
+					//mfacb -= c1o2 * (mfStartacb + mfStartcab)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa));
+					//mfacc -= c1o2 * (mfStartacc + mfStartcaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa);
+					//mfbaa -= c1o2 * (mfStartbaa + mfStartbcc)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa);
+					//mfbab -= c1o2 * (mfStartbab + mfStartbcb)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa);
+					//mfbac -= c1o2 * (mfStartbac + mfStartbca)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa);
+					//mfbba -= c1o2 * (mfStartbba + mfStartbbc)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa);
+					//mfbbb -=  (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa));
+					//mfbbc -= c1o2 * (mfStartbbc + mfStartbba)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa);
+					//mfbca -= c1o2 * (mfStartbca + mfStartbac)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa);
+					//mfbcb -= c1o2 * (mfStartbcb + mfStartbab)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa);
+					//mfbcc -= c1o2 * (mfStartbcc + mfStartbaa)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa);
+					//mfcaa -= c1o2 * (mfStartcaa + mfStartacc)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa);
+					//mfcab -= c1o2 * (mfStartcab + mfStartacb)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa));
+					//mfcac -= c1o2 * (mfStartcac + mfStartaca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa);
+					//mfcba -= c1o2 * (mfStartcba + mfStartabc)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa);
+					//mfcbb -= c1o2 * (mfStartcbb + mfStartabb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa);
+					//mfcbc -= c1o2 * (mfStartcbc + mfStartaba)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa);
+					//mfcca -= c1o2 * (mfStartcca + mfStartaac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa);
+					//mfccb -= c1o2 * (mfStartccb + mfStartaab)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa));
+					//mfccc -= c1o2 * (mfStartccc + mfStartaaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa);
+
+					//mfhaaa =rho*( c1o2 * (mfStartaaa + mfStartccc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa));
+					//mfhaab =rho*( c1o2 * (mfStartaab + mfStartccb) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)));
+					//mfhaac =rho*( c1o2 * (mfStartaac + mfStartcca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa));
+					//mfhaba =rho*( c1o2 * (mfStartaba + mfStartcbc) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa));
+					//mfhabb =rho*( c1o2 * (mfStartabb + mfStartcbb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa));
+					//mfhabc =rho*( c1o2 * (mfStartabc + mfStartcba) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa));
+					//mfhaca =rho*( c1o2 * (mfStartaca + mfStartcac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa));
+					//mfhacb =rho*( c1o2 * (mfStartacb + mfStartcab) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)));
+					//mfhacc =rho*( c1o2 * (mfStartacc + mfStartcaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa));
+					//mfhbaa =rho*( c1o2 * (mfStartbaa + mfStartbcc) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa));
+					//mfhbab =rho*( c1o2 * (mfStartbab + mfStartbcb) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa));
+					//mfhbac =rho*( c1o2 * (mfStartbac + mfStartbca) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa));
+					//mfhbba =rho*( c1o2 * (mfStartbba + mfStartbbc) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa));
+					//mfhbbb =rho*( (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa)));
+					//mfhbbc =rho*( c1o2 * (mfStartbbc + mfStartbba) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa));
+					//mfhbca =rho*( c1o2 * (mfStartbca + mfStartbac) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa));
+					//mfhbcb =rho*( c1o2 * (mfStartbcb + mfStartbab) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa));
+					//mfhbcc =rho*( c1o2 * (mfStartbcc + mfStartbaa) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa));
+					//mfhcaa =rho*( c1o2 * (mfStartcaa + mfStartacc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa));
+					//mfhcab =rho*( c1o2 * (mfStartcab + mfStartacb) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)));
+					//mfhcac =rho*( c1o2 * (mfStartcac + mfStartaca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa));
+					//mfhcba =rho*( c1o2 * (mfStartcba + mfStartabc) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa));
+					//mfhcbb =rho*( c1o2 * (mfStartcbb + mfStartabb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa));
+					//mfhcbc =rho*( c1o2 * (mfStartcbc + mfStartaba) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa));
+					//mfhcca =rho*( c1o2 * (mfStartcca + mfStartaac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa));
+					//mfhccb =rho*( c1o2 * (mfStartccb + mfStartaab) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)));
+					//mfhccc =rho*( c1o2 * (mfStartccc + mfStartaaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa));
+
+
+
+
+					pStar += pStarStart*(omegaDRho-c1);
+
+					mfcbb -= c2o9*pStar;
+					mfbcb -= c2o9*pStar;
+					mfbbc -= c2o9*pStar;
+					mfccb -= c1o18*pStar;
+					mfacb -= c1o18*pStar;
+					mfcbc -= c1o18*pStar;
+					mfabc -= c1o18*pStar;
+					mfbcc -= c1o18*pStar;
+					mfbac -= c1o18*pStar;
+					mfccc -= c1o72*pStar;
+					mfacc -= c1o72*pStar;
+					mfcac -= c1o72*pStar;
+					mfaac -= c1o72*pStar;
+					mfabb -= c2o9*pStar;
+					mfbab -= c2o9*pStar;
+					mfbba -= c2o9*pStar;
+					mfaab -= c1o18*pStar;
+					mfcab -= c1o18*pStar;
+					mfaba -= c1o18*pStar;
+					mfcba -= c1o18*pStar;
+					mfbaa -= c1o18*pStar;
+					mfbca -= c1o18*pStar;
+					mfaaa -= c1o72*pStar;
+					mfcaa -= c1o72*pStar;
+					mfaca -= c1o72*pStar;
+					mfcca -= c1o72*pStar;
+					mfbbb -= c4*c2o9*pStar;
+
+					mfhbcb = rho*c2o9 * pStar;
+					mfhbbc = rho*c2o9 * pStar;
+					mfhcbb = rho*c2o9 * pStar;
+					mfhccb = rho*c1o18 * pStar;
+					mfhacb = rho*c1o18 * pStar;
+					mfhcbc = rho*c1o18 * pStar;
+					mfhabc = rho*c1o18 * pStar;
+					mfhbcc = rho*c1o18 * pStar;
+					mfhbac = rho*c1o18 * pStar;
+					mfhccc = rho*c1o72 * pStar;
+					mfhacc = rho*c1o72 * pStar;
+					mfhcac = rho*c1o72 * pStar;
+					mfhaac = rho*c1o72 * pStar;
+					mfhabb = rho*c2o9 * pStar;
+					mfhbab = rho*c2o9 * pStar;
+					mfhbba = rho*c2o9 * pStar;
+					mfhaab = rho*c1o18 * pStar;
+					mfhcab = rho*c1o18 * pStar;
+					mfhaba = rho*c1o18 * pStar;
+					mfhcba = rho*c1o18 * pStar;
+					mfhbaa = rho*c1o18 * pStar;
+					mfhbca = rho*c1o18 * pStar;
+					mfhaaa = rho*c1o72 * pStar;
+					mfhcaa = rho*c1o72 * pStar;
+					mfhaca = rho*c1o72 * pStar;
+					mfhcca = rho*c1o72 * pStar;
+					mfhbbb = rho*c4 * c2o9 * pStar;
+
+					//mfStartbcb =  c2o9  * pStarStart;
+					//mfStartbbc =  c2o9  * pStarStart;
+					//mfStartcbb =  c2o9  * pStarStart;
+					//mfStartccb =  c1o18 * pStarStart;
+					//mfStartacb =  c1o18 * pStarStart;
+					//mfStartcbc =  c1o18 * pStarStart;
+					//mfStartabc =  c1o18 * pStarStart;
+					//mfStartbcc =  c1o18 * pStarStart;
+					//mfStartbac =  c1o18 * pStarStart;
+					//mfStartccc =  c1o72 * pStarStart;
+					//mfStartacc =  c1o72 * pStarStart;
+					//mfStartcac =  c1o72 * pStarStart;
+					//mfStartaac =  c1o72 * pStarStart;
+					//mfStartabb =  c2o9  * pStarStart;
+					//mfStartbab =  c2o9  * pStarStart;
+					//mfStartbba =  c2o9  * pStarStart;
+					//mfStartaab =  c1o18 * pStarStart;
+					//mfStartcab =  c1o18 * pStarStart;
+					//mfStartaba =  c1o18 * pStarStart;
+					//mfStartcba =  c1o18 * pStarStart;
+					//mfStartbaa =  c1o18 * pStarStart;
+					//mfStartbca =  c1o18 * pStarStart;
+					//mfStartaaa =  c1o72 * pStarStart;
+					//mfStartcaa =  c1o72 * pStarStart;
+					//mfStartaca =  c1o72 * pStarStart;
+					//mfStartcca =  c1o72 * pStarStart;
+					//mfStartbbb =  c4 * c2o9 * pStarStart;
+
+					//LBMReal scaleSplit = 0.5;
+					//mfStartbcb = mfStartbcb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+					//mfStartbbc = mfStartbbc*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+					//mfStartcbb = mfStartcbb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+					//mfStartccb = mfStartccb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartacb = mfStartacb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartcbc = mfStartcbc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartabc = mfStartabc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartbcc = mfStartbcc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartbac = mfStartbac*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartccc = mfStartccc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartacc = mfStartacc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartcac = mfStartcac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartaac = mfStartaac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartabb = mfStartabb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+					//mfStartbab = mfStartbab*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+					//mfStartbba = mfStartbba*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+					//mfStartaab = mfStartaab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartcab = mfStartcab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartaba = mfStartaba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartcba = mfStartcba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartbaa = mfStartbaa*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartbca = mfStartbca*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+					//mfStartaaa = mfStartaaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartcaa = mfStartcaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartaca = mfStartaca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartcca = mfStartcca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+					//mfStartbbb = mfStartbbb*scaleSplit+(c1-scaleSplit)* c4 * c2o9 * pStarStart;
+
+
+					//mfaaa -= c1o2 * (mfStartaaa + mfStartccc);
+     //               mfaab -= c1o2 * (mfStartaab + mfStartccb);
+     //               mfaac -= c1o2 * (mfStartaac + mfStartcca);
+     //               mfaba -= c1o2 * (mfStartaba + mfStartcbc);
+     //               mfabb -= c1o2 * (mfStartabb + mfStartcbb);
+     //               mfabc -= c1o2 * (mfStartabc + mfStartcba);
+     //               mfaca -= c1o2 * (mfStartaca + mfStartcac);
+     //               mfacb -= c1o2 * (mfStartacb + mfStartcab);
+     //               mfacc -= c1o2 * (mfStartacc + mfStartcaa);
+     //               mfbaa -= c1o2 * (mfStartbaa + mfStartbcc);
+     //               mfbab -= c1o2 * (mfStartbab + mfStartbcb);
+     //               mfbac -= c1o2 * (mfStartbac + mfStartbca);
+     //               mfbba -= c1o2 * (mfStartbba + mfStartbbc);
+					//mfbbb -= (mfStartbbb);
+     //               mfbbc -= c1o2 * (mfStartbbc + mfStartbba);
+     //               mfbca -= c1o2 * (mfStartbca + mfStartbac);
+     //               mfbcb -= c1o2 * (mfStartbcb + mfStartbab);
+     //               mfbcc -= c1o2 * (mfStartbcc + mfStartbaa);
+     //               mfcaa -= c1o2 * (mfStartcaa + mfStartacc);
+     //               mfcab -= c1o2 * (mfStartcab + mfStartacb);
+     //               mfcac -= c1o2 * (mfStartcac + mfStartaca);
+     //               mfcba -= c1o2 * (mfStartcba + mfStartabc);
+     //               mfcbb -= c1o2 * (mfStartcbb + mfStartabb);
+     //               mfcbc -= c1o2 * (mfStartcbc + mfStartaba);
+     //               mfcca -= c1o2 * (mfStartcca + mfStartaac);
+     //               mfccb -= c1o2 * (mfStartccb + mfStartaab);
+     //               mfccc -= c1o2 * (mfStartccc + mfStartaaa);
+					//												
+					//mfhaaa += rho*c1o2 * (mfStartaaa + mfStartccc);
+					//mfhaab += rho*c1o2 * (mfStartaab + mfStartccb);
+					//mfhaac += rho*c1o2 * (mfStartaac + mfStartcca);
+					//mfhaba += rho*c1o2 * (mfStartaba + mfStartcbc);
+					//mfhabb += rho*c1o2 * (mfStartabb + mfStartcbb);
+					//mfhabc += rho*c1o2 * (mfStartabc + mfStartcba);
+					//mfhaca += rho*c1o2 * (mfStartaca + mfStartcac);
+					//mfhacb += rho*c1o2 * (mfStartacb + mfStartcab);
+					//mfhacc += rho*c1o2 * (mfStartacc + mfStartcaa);
+					//mfhbaa += rho*c1o2 * (mfStartbaa + mfStartbcc);
+					//mfhbab += rho*c1o2 * (mfStartbab + mfStartbcb);
+					//mfhbac += rho*c1o2 * (mfStartbac + mfStartbca);
+					//mfhbba += rho*c1o2 * (mfStartbba + mfStartbbc);
+					//mfhbbb += rho*(mfStartbbb);
+					//mfhbbc += rho*c1o2 * (mfStartbbc + mfStartbba);
+					//mfhbca += rho*c1o2 * (mfStartbca + mfStartbac);
+					//mfhbcb += rho*c1o2 * (mfStartbcb + mfStartbab);
+					//mfhbcc += rho*c1o2 * (mfStartbcc + mfStartbaa);
+					//mfhcaa += rho*c1o2 * (mfStartcaa + mfStartacc);
+					//mfhcab += rho*c1o2 * (mfStartcab + mfStartacb);
+					//mfhcac += rho*c1o2 * (mfStartcac + mfStartaca);
+					//mfhcba += rho*c1o2 * (mfStartcba + mfStartabc);
+					//mfhcbb += rho*c1o2 * (mfStartcbb + mfStartabb);
+					//mfhcbc += rho*c1o2 * (mfStartcbc + mfStartaba);
+					//mfhcca += rho*c1o2 * (mfStartcca + mfStartaac);
+					//mfhccb += rho*c1o2 * (mfStartccb + mfStartaab);
+					//mfhccc += rho*c1o2 * (mfStartccc + mfStartaaa);
+					//mfhbcb += c1o6 * c2o9 * deltaPP;
+					//mfhbbc += c1o6 * c2o9 * deltaPP;
+					//mfhcbb += c1o6 * c2o9 * deltaPP;
+					//mfhccb += c1o6 * c1o18 * deltaPP;
+					//mfhacb += c1o6 * c1o18 * deltaPP;
+					//mfhcbc += c1o6 * c1o18 * deltaPP;
+					//mfhabc += c1o6 * c1o18 * deltaPP;
+					//mfhbcc += c1o6 * c1o18 * deltaPP;
+					//mfhbac += c1o6 * c1o18 * deltaPP;
+					//mfhccc += c1o6 * c1o72 * deltaPP;
+					//mfhacc += c1o6 * c1o72 * deltaPP;
+					//mfhcac += c1o6 * c1o72 * deltaPP;
+					//mfhaac += c1o6 * c1o72 * deltaPP;
+					//mfhabb += c1o6 * c2o9 * deltaPP;
+					//mfhbab += c1o6 * c2o9 * deltaPP;
+					//mfhbba += c1o6 * c2o9 * deltaPP;
+					//mfhaab += c1o6 * c1o18 * deltaPP;
+					//mfhcab += c1o6 * c1o18 * deltaPP;
+					//mfhaba += c1o6 * c1o18 * deltaPP;
+					//mfhcba += c1o6 * c1o18 * deltaPP;
+					//mfhbaa += c1o6 * c1o18 * deltaPP;
+					//mfhbca += c1o6 * c1o18 * deltaPP;
+					//mfhaaa += c1o6 * c1o72 * deltaPP;
+					//mfhcaa += c1o6 * c1o72 * deltaPP;
+					//mfhaca += c1o6 * c1o72 * deltaPP;
+					//mfhcca += c1o6 * c1o72 * deltaPP;
+					//mfhbbb += c1o6 * c4 * c2o9 * deltaPP;
+
+
+					//mfhbcb = c1o3/rho * c2o9 ;
+					//mfhbbc = c1o3/rho * c2o9 ;
+					//mfhcbb = c1o3/rho * c2o9 ;
+					//mfhccb = c1o3/rho * c1o18 ;
+					//mfhacb = c1o3/rho * c1o18 ;
+					//mfhcbc = c1o3/rho * c1o18 ;
+					//mfhabc = c1o3/rho * c1o18 ;
+					//mfhbcc = c1o3/rho * c1o18 ;
+					//mfhbac = c1o3/rho * c1o18 ;
+					//mfhccc = c1o3/rho * c1o72 ;
+					//mfhacc = c1o3/rho * c1o72 ;
+					//mfhcac = c1o3/rho * c1o72 ;
+					//mfhaac = c1o3/rho * c1o72 ;
+					//mfhabb = c1o3/rho * c2o9 ;
+					//mfhbab = c1o3/rho * c2o9 ;
+					//mfhbba = c1o3/rho * c2o9 ;
+					//mfhaab = c1o3/rho * c1o18 ;
+					//mfhcab = c1o3/rho * c1o18 ;
+					//mfhaba = c1o3/rho * c1o18 ;
+					//mfhcba = c1o3/rho * c1o18 ;
+					//mfhbaa = c1o3/rho * c1o18 ;
+					//mfhbca = c1o3/rho * c1o18 ;
+					//mfhaaa = c1o3/rho * c1o72 ;
+					//mfhcaa = c1o3/rho * c1o72 ;
+					//mfhaca = c1o3/rho * c1o72 ;
+					//mfhcca = c1o3/rho * c1o72 ;
+					//mfhbbb = c1/rho;//c1o3/rho * c4 * c2o9 ;
+
+
+					
+					//mfabb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_M00]) * rhoToPhi / rho;
+					//mfbab += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_0M0]) * rhoToPhi / rho;
+					//mfbba += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_00M]) * rhoToPhi / rho;
+					//mfaab += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_MM0]) * rhoToPhi / rho;
+					//mfcab += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_PM0]) * rhoToPhi / rho;
+					//mfaba += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_M0M]) * rhoToPhi / rho;
+					//mfcba += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_P0M]) * rhoToPhi / rho;
+					//mfbaa += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0MM]) * rhoToPhi / rho;
+					//mfbca += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0PM]) * rhoToPhi / rho;
+					//mfaaa += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MMM]) * rhoToPhi / rho;
+					//mfcaa += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PMM]) * rhoToPhi / rho;
+					//mfaca += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MPM]) * rhoToPhi / rho;
+					//mfcca += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PPM]) * rhoToPhi / rho;
+					//mfcbb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_P00]) * rhoToPhi / rho;
+					//mfbcb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_0P0]) * rhoToPhi / rho;
+					//mfbbc += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_00P]) * rhoToPhi / rho;
+					//mfccb += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_PP0]) * rhoToPhi / rho;
+					//mfacb += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_MP0]) * rhoToPhi / rho;
+					//mfcbc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_P0P]) * rhoToPhi / rho;
+					//mfabc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_M0P]) * rhoToPhi / rho;
+					//mfbcc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0PP]) * rhoToPhi / rho;
+					//mfbac += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0MP]) * rhoToPhi / rho;
+					//mfccc += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PPP]) * rhoToPhi / rho;
+					//mfacc += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MPP]) * rhoToPhi / rho;
+					//mfcac += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PMP]) * rhoToPhi / rho;
+					//mfaac += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MMP]) * rhoToPhi / rho;
+					
+					///////////////
+					//mfabb += (pBefore-pStar) * c2o9  ;
+					//mfbab += (pBefore-pStar) * c2o9  ;
+					//mfbba += (pBefore-pStar) * c2o9  ;
+					//mfaab += (pBefore-pStar) * c1o18 ;
+					//mfcab += (pBefore-pStar) * c1o18 ;
+					//mfaba += (pBefore-pStar) * c1o18 ;
+					//mfcba += (pBefore-pStar) * c1o18 ;
+					//mfbaa += (pBefore-pStar) * c1o18 ;
+					//mfbca += (pBefore-pStar) * c1o18 ;
+					//mfaaa += (pBefore-pStar) * c1o72 ;
+					//mfcaa += (pBefore-pStar) * c1o72 ;
+					//mfaca += (pBefore-pStar) * c1o72 ;
+					//mfcca += (pBefore-pStar) * c1o72 ;
+					//mfcbb += (pBefore-pStar) * c2o9  ;
+					//mfbcb += (pBefore-pStar) * c2o9  ;
+					//mfbbc += (pBefore-pStar) * c2o9  ;
+					//mfccb += (pBefore-pStar) * c1o18 ;
+					//mfacb += (pBefore-pStar) * c1o18 ;
+					//mfcbc += (pBefore-pStar) * c1o18 ;
+					//mfabc += (pBefore-pStar) * c1o18 ;
+					//mfbcc += (pBefore-pStar) * c1o18 ;
+					//mfbac += (pBefore-pStar) * c1o18 ;
+					//mfccc += (pBefore-pStar) * c1o72 ;
+					//mfacc += (pBefore-pStar) * c1o72 ;
+					//mfcac += (pBefore-pStar) * c1o72 ;
+					//mfaac += (pBefore-pStar) * c1o72 ;
+					//mfbbb += (pBefore-pStar) * 8.0 / 9.0;
+
+					//mfabb = (pBefore ) * c2o9;
+					//mfbab = (pBefore ) * c2o9;
+					//mfbba = (pBefore ) * c2o9;
+					//mfaab = (pBefore ) * c1o16;
+					//mfcab = (pBefore ) * c1o16;
+					//mfaba = (pBefore ) * c1o16;
+					//mfcba = (pBefore ) * c1o16;
+					//mfbaa = (pBefore ) * c1o16;
+					//mfbca = (pBefore ) * c1o16;
+					//mfaaa = (pBefore ) * c1o72;
+					//mfcaa = (pBefore ) * c1o72;
+					//mfaca = (pBefore ) * c1o72;
+					//mfcca = (pBefore ) * c1o72;
+					//mfcbb = (pBefore ) * c2o9;
+					//mfbcb = (pBefore ) * c2o9;
+					//mfbbc = (pBefore ) * c2o9;
+					//mfccb = (pBefore ) * c1o16;
+					//mfacb = (pBefore ) * c1o16;
+					//mfcbc = (pBefore ) * c1o16;
+					//mfabc = (pBefore ) * c1o16;
+					//mfbcc = (pBefore ) * c1o16;
+					//mfbac = (pBefore ) * c1o16;
+					//mfccc = (pBefore ) * c1o72;
+					//mfacc = (pBefore ) * c1o72;
+					//mfcac = (pBefore ) * c1o72;
+					//mfaac = (pBefore ) * c1o72;
+					//mfbbb = (pBefore ) * 8.0 / 9.0;
+					///////////////////
+
+					//////////////////////////////////////////////////////////////////////////
+					//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(drho - rho_post);
+					//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - 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, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
+					//					   + " dif=" + UbSystem::toString(dif)
+					//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
+					//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
+					//				   //exit(EXIT_FAILURE);
+					//			   }
+					//#endif
+
+					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
+						UB_THROW(UbException(
+							UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
+							UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
+
+					//////////////////////////////////////////////////////////////////////////
+					//write distribution
+					//////////////////////////////////////////////////////////////////////////
+					(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)         = mfabb         ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)         = mfbab         ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)         = mfbba         ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)        = mfaab        ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)       = mfcab       ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)        = mfaba        ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)       = mfcba       ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)        = mfbaa        ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)       = mfbca       ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)       = mfaaa       ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfcaa      ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfaca      ;//* rho * c1o3;
+					(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfcca     ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb     ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb     ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc     ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb   ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb    ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc   ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc    ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc   ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac    ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc  ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac  ;//* rho * c1o3;
+					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac   ;//* rho * c1o3;
+
+					(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
+
+			
+					(*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3)         = mfhabb;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3)         = mfhbab;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3)         = mfhbba;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3)        = mfhaab;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3)       = mfhcab;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3)        = mfhaba;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3)       = mfhcba;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3)        = mfhbaa;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3)       = mfhbca;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3)       = mfhaaa;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfhcaa;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfhaca;//* rho * c1o3;
+					(*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfhcca;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3)     = mfhcbb;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3)     = mfhbcb;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p)     = mfhbbc;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfhccb;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3)    = mfhacb;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfhcbc;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p)    = mfhabc;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfhbcc;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p)    = mfhbac;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfhacc;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfhcac;//* rho * c1o3;
+					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfhaac;//* rho * c1o3;
+
+					(*this->zeroDistributionsH2)(x1, x2, x3) = mfhbbb;// *rho* c1o3;
+
+																	// !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->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+						mfbbb = (*this->zeroDistributionsH1)(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>
+						//!
+						////////////////////////////////////////////////////////////////////////////////////
+						// 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;
+						////////////////////////////////////////////////////////////////////////////////////
+						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;
+
+						//31.05.2022 addaptive mobility
+						//omegaD = c1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200);
+						//omegaD = c2 * (concentration * (concentration - c1)) / (-c6 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1))+1.0e-200);
+						// collision of 1st order moments
+						cx = cx * (c1 - omegaD) + omegaD * vvx * concentration +
+							normX1 * (c1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
+						cy = cy * (c1 - omegaD) + omegaD * vvy * concentration +
+							normX2 * (c1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
+						cz = cz * (c1 - omegaD) + omegaD * vvz * concentration +
+							normX3 * (c1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
+
+						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;
+
+						// 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->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
+						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
+						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
+						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
+						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
+						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
+						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
+						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
+						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
+						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
+						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
+						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
+						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
+
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
+						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
+
+						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
+
+
+
+
+					}
+				}
+			}
+		}
+	}
+}
+//////////////////////////////////////////////////////////////////////////
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi()
+{
+	using namespace D3Q27System;
+	return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP])))
+		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) +
+		+WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00]));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi()
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM])))
+		+ WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) +
+		+WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0]));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi()
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP])))
+		+ WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) +
+		+WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M]));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(LBMReal rhoL,LBMReal rhoDIV)
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
+		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) +
+		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00])));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(LBMReal rhoL,LBMReal rhoDIV)
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM]))))
+		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) +
+		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0])));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(LBMReal rhoL, LBMReal rhoDIV)
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP]))))
+		+ WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) +
+		+WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M])));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2()
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP])))
+		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) +
+		+WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00]));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2()
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM])))
+		+ WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) +
+		+WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0]));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2()
+{
+	using namespace D3Q27System;
+	return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP])))
+		+ WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) +
+		+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M]));
+}
+
+LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi()
+{
+	using namespace D3Q27System;
+	LBMReal sum = 0.0;
+	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
+		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
+	sum += WEIGTH[DIR_0PP] * (
+			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
+		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
+		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+		);
+	sum += WEIGTH[DIR_00P] * (
+			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
+		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
+		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+		);
+
+
+	return 6.0 * sum;
+}
+
+void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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[DIR_P00]   = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+					h[DIR_0P0]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+					h[DIR_00P]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+					h[DIR_PP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+					h[DIR_MP0]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+					h[DIR_P0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+					h[DIR_M0P]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+					h[DIR_0PP]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+					h[DIR_0MP]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+					h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+					h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+					h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+					h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+					h[DIR_M00]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+					h[DIR_0M0]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+					h[DIR_00M]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+					h[DIR_MM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+					h[DIR_PM0]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+					h[DIR_M0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+					h[DIR_P0M]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+					h[DIR_0MM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+					h[DIR_0PM]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+					h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+					h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+					h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+					h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+					h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3);
+				}
+			}
+		}
+	}
+}
+
+void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
+	int x3)
+{
+	using namespace D3Q27System;
+
+	SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
+
+	phi[DIR_000] = (*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 {
+			//phi[k] = (*ph)(x1 , x2, x3 );// neutral wetting
+			phi[k] = 0.0;//unwetting
+		}
+	}
+}
+
+void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors2(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
+	int x3)
+{
+	using namespace D3Q27System;
+
+	SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
+
+	phi2[DIR_000] = (*ph)(x1, x2, x3);
+
+
+	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+
+		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
+			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
+		}
+		else {
+			phi2[k] = 0.05;
+		}
+	}
+}
+
+void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::swapDistributions()
+{
+	LBMKernel::swapDistributions();
+	dataSet->getHdistributions()->swap();
+	dataSet->getH2distributions()->swap();
+}
+
+void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initForcing()
+{
+	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
+	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
+	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
+
+	muDeltaT = deltaT;
+
+	muForcingX1.DefineVar("dt", &muDeltaT);
+	muForcingX2.DefineVar("dt", &muDeltaT);
+	muForcingX3.DefineVar("dt", &muDeltaT);
+
+	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
+
+	muForcingX1.DefineVar("nu", &muNu);
+	muForcingX2.DefineVar("nu", &muNu);
+	muForcingX3.DefineVar("nu", &muNu);
+
+	muForcingX1.DefineVar("rho",&muRho); 
+	muForcingX2.DefineVar("rho",&muRho); 
+	muForcingX3.DefineVar("rho",&muRho); 
+
+}
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp.old b/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp.old
new file mode 100644
index 000000000..2ab0e9df7
--- /dev/null
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp.old
@@ -0,0 +1,3024 @@
+////=======================================================================================
+//// ____          ____    __    ______     __________   __      __       __        __
+//// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+////  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+////   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+////    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+////     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+////      \    \  |    |   ________________________________________________________________
+////       \    \ |    |  |  ______________________________________________________________|
+////        \    \|    |  |  |         __          __     __     __     ______      _______
+////         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+////          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+////           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+////            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+////
+////  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 MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp
+////! \ingroup LBMKernel
+////! \author M. Geier, K. Kutscher, Hesameddin Safari
+////=======================================================================================
+//
+//#include "MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h"
+//#include "BCArray3D.h"
+//#include "Block3D.h"
+//#include "D3Q27EsoTwist3DSplittedVector.h"
+//#include "D3Q27System.h"
+//#include "DataSet3D.h"
+//#include "LBMKernel.h"
+//#include <cmath>
+//#include <iostream>
+//#include <string>
+//
+//#define PROOF_CORRECTNESS
+//
+////////////////////////////////////////////////////////////////////////////
+//MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::MultiphaseSimpleVelocityBaseExternalPressureLBMKernel() { this->compressible = false; }
+////////////////////////////////////////////////////////////////////////////
+//void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initDataSet()
+//{
+//	SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
+//	SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field
+//	SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9));
+//	SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D(            nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+//	CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure(new  CbArray3D<LBMReal, IndexerX3X2X1>(    nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+//	pressureOld = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+//	p1Old = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new  CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+//	dataSet->setFdistributions(f);
+//	dataSet->setHdistributions(h); // For phase-field
+//	dataSet->setH2distributions(h2);
+//	dataSet->setPhaseField(divU1);
+//	dataSet->setPressureField(pressure);
+//
+//	phaseField = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0));
+//	phaseFieldOld = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0));
+//
+//	divU = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0));
+//}
+////////////////////////////////////////////////////////////////////////////
+//SPtr<LBMKernel> MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::clone()
+//{
+//	SPtr<LBMKernel> kernel(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel());
+//	kernel->setNX(nx);
+//	dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(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->setInterfaceWidth(this->interfaceWidth);
+//
+//	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);
+//	kernel->setGhostLayerWidth(2);
+//	dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(kernel)->initForcing();
+//
+//	return kernel;
+//}
+////////////////////////////////////////////////////////////////////////////
+//void  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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  MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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 MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step)
+//{
+//	using namespace D3Q27System;
+//	using namespace UbMath;
+//
+//	forcingX1 = 0.0;
+//	forcingX2 = 0.0;
+//	forcingX3 = 0.0;
+//
+//	LBMReal oneOverInterfaceScale = c4 / interfaceWidth; //1.0;//1.5;
+//														 /////////////////////////////////////
+//
+//	localDistributionsF    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions();
+//	nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions();
+//	zeroDistributionsF     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions();
+//
+//	localDistributionsH1    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions();
+//	nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions();
+//	zeroDistributionsH1     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions();
+//
+//	localDistributionsH2    = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions();
+//	nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions();
+//	zeroDistributionsH2     = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions();
+//
+//
+//	CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField();
+//
+//	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;
+//	LBMReal omegaDRho = 1.0;// 1.25;// 1.3;
+//
+//	for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) {
+//		for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) {
+//			for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; 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->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+//					LBMReal mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+//					LBMReal mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+//					LBMReal mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+//					LBMReal mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+//					LBMReal mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+//					LBMReal mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+//					LBMReal mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+//					LBMReal mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+//					LBMReal mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+//					LBMReal mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+//					LBMReal mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+//					LBMReal mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+//					LBMReal mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+//					LBMReal mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+//					LBMReal mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+//					LBMReal mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+//					LBMReal mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+//					LBMReal mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+//					LBMReal mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+//					LBMReal mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+//					LBMReal mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+//					LBMReal mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+//					LBMReal mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+//					LBMReal mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+//					LBMReal mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+//
+//					LBMReal mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3);
+//					(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca)  + (mfcaa + mfacc))  ) +
+//						(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) +
+//							((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) +
+//								(mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb;
+//					if ((*phaseField)(x1, x2, x3) > 1 ) {
+//						(*phaseField)(x1, x2, x3) = c1;
+//					}
+//
+//					if ((*phaseField)(x1, x2, x3) < 0) {
+//						(*phaseField)(x1, x2, x3) = 0;
+//					}
+//					////// read F-distributions for velocity formalism
+//
+//					mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);
+//					mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);
+//					mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);
+//					mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);
+//					mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, 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 rhoH = 1.0;
+//					//LBMReal rhoL = 1.0 / densityRatio;
+//
+//					LBMReal rhoH = 1.0*densityRatio;
+//					LBMReal rhoL = 1.0;
+//
+//					LBMReal rhoToPhi = (rhoH - rhoL) / (phiH - phiL);
+//
+//					LBMReal drho = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))   )
+//						+ (((mfaab + mfccb) + (mfacb + mfcab) ) + ((mfaba + mfcbc) + (mfabc + mfcba) ) + ((mfbaa + mfbcc) + (mfbac + mfbca) )))
+//						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
+//				
+//					omegaDRho = 2.0;// 1.5;
+//					drho *= omegaDRho;
+//					LBMReal keepDrho = drho;
+//					drho = ((*p1Old)(x1, x2, x3) + drho) * c1o2;
+//				//	drho = ((*p1Old)(x1, x2, x3)*c2o3 + drho*c1o3) ;
+//					(*p1Old)(x1, x2, x3) = keepDrho;
+//					
+//					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); //Incompressible
+/////Density correction
+//					//LBMReal dX1_phi = gradX1_phi();
+//					//LBMReal dX2_phi = gradX2_phi();
+//					//LBMReal dX3_phi = gradX3_phi();
+//					//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)) ;
+//					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressure)(x1, x2, x3); //explicit Compressible
+//					//(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho-(rhoH-rhoL)*(vvx*dX1_phi+vvy*dX2_phi+vvz*dX3_phi)*c1o3)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
+//					
+//					//(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) - c1o3 * drho * ((*phaseField)(x1, x2, x3) * (rhoH - rhoL) + rhoL)) / (c1 - ((*phaseField)(x1, x2, x3) - c1) * drho);
+//					//LBMReal rho=rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3);
+//					//LBMReal tempDrho = drho;
+//					//drho = (drho*0.9 + (*pressureOld)(x1, x2, x3)*0.1) ;
+//					//(*pressureOld)(x1, x2, x3) = tempDrho;
+//
+//					//Mathematica
+//
+//					LBMReal rho = ((*pressure)(x1, x2, x3) - (*phaseField)(x1, x2, x3) * (*pressure)(x1, x2, x3) + c1o3 * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (c1o3 + c1o3 * drho * (-1 + (*phaseField)(x1, x2, x3)));
+//					(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) + c1o3 * drho * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (1 + drho * (-1 + (*phaseField)(x1, x2, x3)));
+///////Full Filter
+//					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH)+(one- (*phaseField)(x1, x2, x3))*three* (*pressure)(x1, x2, x3); //explicit Compressible
+//					//(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
+////// reduced Filter
+//					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3); //explicit Compressible
+//					//(*pressure)(x1, x2, x3) = (((*pressureOld)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho);
+//
+//					//rho = (rho)/(one- (one - (*phaseField)(x1, x2, x3)) * drho); // now implicit Compressible
+//					
+//					//(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3;
+//					////!!!!!! relplace by pointer swap!
+//					//(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3);
+//				}
+//			}
+//		}
+//	}
+//
+//	LBMReal collFactorM;
+//
+//	////Periodic Filter
+//	//for (int x3 = minX3-1; x3 <= maxX3; x3++) {
+//	//	for (int x2 = minX2-1; x2 <= maxX2; x2++) {
+//	//		for (int x1 = minX1-1; x1 <= maxX1; x1++) {
+//	//			if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) {
+//
+//	//				LBMReal sum = 0.;
+//
+//	//				///Version for boundaries
+//	//				for (int xx = -1; xx <= 1; xx++) {
+//	//					//int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0;
+//	//					int xxx = xx + x1;
+//
+//	//					for (int yy = -1; yy <= 1; yy++) {
+//	//						//int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0;
+//	//						int yyy = yy + x2;
+//
+//	//						for (int zz = -1; zz <= 1; zz++) {
+//	//							//int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0;
+//	//							int zzz = zz + x3;
+//
+//	//							if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) {
+//	//								sum+= 64.0/(216.0*(c1+c3*abs(xx))* (c1 + c3 * abs(yy))* (c1 + c3 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz);
+//	//							}
+//	//							else{ sum+= 64.0 / (216.0 * (c1 + c3 * abs(xx)) * (c1 + c3 * abs(yy)) * (c1 + c3 * abs(zz))) * (*pressureOld)(x1, x2, x3);
+//	//							}
+//
+//
+//	//						}
+//	//					}
+//	//				}
+//	//				(*pressure)(x1, x2, x3) = sum;
+//	//			}
+//	//		}
+//	//	}
+//	//}
+//
+//	////!filter
+//
+//	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 mfhcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3);
+//					LBMReal mfhbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3);
+//					LBMReal mfhbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3);
+//					LBMReal mfhccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3);
+//					LBMReal mfhacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3);
+//					LBMReal mfhcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3);
+//					LBMReal mfhabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3);
+//					LBMReal mfhbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3);
+//					LBMReal mfhbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3);
+//					LBMReal mfhccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3);
+//					LBMReal mfhacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3);
+//					LBMReal mfhcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3);
+//					LBMReal mfhaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3);
+//					LBMReal mfhabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3);
+//					LBMReal mfhbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3);
+//					LBMReal mfhbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p);
+//					LBMReal mfhaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3);
+//					LBMReal mfhcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3);
+//					LBMReal mfhaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p);
+//					LBMReal mfhcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p);
+//					LBMReal mfhbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p);
+//					LBMReal mfhbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p);
+//					LBMReal mfhaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+//					LBMReal mfhcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p);
+//					LBMReal mfhaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p);
+//					LBMReal mfhcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p);
+//
+//					LBMReal mfhbbb = (*this->zeroDistributionsH2)(x1, x2, x3);
+//
+//					//LBMReal rhoH = 1.0;
+//					//LBMReal rhoL = 1.0 / densityRatio;
+//
+//					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+1e-3;
+//					// 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase?
+//					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); //Incompressible
+//
+//																		///scaled phase field
+//					//LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1 - (*phaseField)(x1, x2, x3)) * (c1 - (*phaseField)(x1, x2, x3))) - phiH);
+//					///!scaled phase field
+//					
+//					//LBMReal rho = rhoH + rhoToPhi * (phi[REST] - phiH)+(one-phi[REST])* (*pressure)(x1, x2, x3)*three; //compressible
+//					//LBMReal rho = rhoL + (rhoH - rhoL) * phi[REST] + (one - phi[REST]) * (*pressure)(x1, x2, x3) * three; //compressible
+//
+//					LBMReal m0, m1, m2;
+//					LBMReal rhoRef=c1;
+//
+//					LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+//						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+//						(mfcbb - mfabb))/rhoRef;
+//					LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+//						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+//						(mfbcb - mfbab))/rhoRef;
+//					LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+//						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+//						(mfbbc - mfbba))/rhoRef;
+//					////Filter&Gradient merged
+//					LBMReal pressureHere = (*pressureOld)(x1, x2, x3);
+//					//LBMReal pressureHere = (*pressure)(x1, x2, x3);
+//
+//					LBMReal arrayP[3][3][3] = { {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
+//												{{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}},
+//												{ {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} };
+//					//LBMReal LaplaceP = 0.0;
+//					//LaplaceP += WEIGTH[TNE] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere)))
+//					//	+ ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere))));
+//					//LaplaceP += WEIGTH[TN] * (
+//					//	((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere)))
+//					//	+ ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere)))
+//					//	+ ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere)))
+//					//	);
+//					//LaplaceP += WEIGTH[T] * (
+//					//	(((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere))
+//					//	+ (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere))
+//					//	+ (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere))
+//					//	);
+//
+//					//LaplaceP= 6.0 * LaplaceP;
+//					
+//					//LBMReal sum = 0.0;
+//
+//					for (int dir1 = -1; dir1 <= 1; dir1++) {
+//						for (int dir2 = -1; dir2 <= 1; dir2++) {
+//							for (int dir3 = -1; dir3 <= 1; dir3++){
+//								int xxx = x1 + dir1;
+//								int yyy = x2 + dir2;
+//								int zzz = x3 + dir3;
+//								if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressureOld)(xxx, yyy, zzz);
+//								//if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressure)(xxx, yyy, zzz);
+//							//	sum += 64.0 / (216.0 * (c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)) * (c1 + c3 * abs(dir3))) * arrayP[dir1 + 1][dir2 + 1][dir3 + 1];
+//							}
+//						}
+//					}
+////					(*pressure)(x1, x2, x3) = sum;// *0.1 + (1.0 - 0.1) * (*pressureOld)(x1, x2, x3);
+//
+//
+//					(*pressure)(x1, x2, x3) = (((((arrayP[0][0][0] + arrayP[2][2][2]) + (arrayP[0][2][0] + arrayP[2][0][2])) + ((arrayP[2][0][0] + arrayP[0][2][2]) + (arrayP[2][2][0] + arrayP[0][0][2]))) * c1o216
+//						+ (((arrayP[0][0][1] + arrayP[2][2][1]) + (arrayP[0][1][0] + arrayP[2][1][2])) + ((arrayP[1][0][0] + arrayP[1][2][2]) + (arrayP[0][1][2] + arrayP[2][1][0])) + ((arrayP[1][0][2] + arrayP[1][2][0]) + (arrayP[0][2][1] + arrayP[2][0][1]))) * c1o54)
+//						+ ((arrayP[0][1][1] + arrayP[2][1][1]) + (arrayP[1][0][1] + arrayP[1][2][1]) + (arrayP[1][1][0] + arrayP[1][1][2])) * c2o27)
+//						+ arrayP[1][1][1] * c8o27;
+//					//LBMReal gradPx = 0.0;
+//					//LBMReal gradPy = 0.0;
+//					//LBMReal gradPz = 0.0;
+//					//for (int dir1 = -1; dir1 <= 1; dir1++) {
+//					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
+//					//		gradPx -= arrayP[0][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		gradPx += arrayP[2][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//
+//
+//
+//					//		gradPy -= arrayP[dir1+1][0][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		gradPy += arrayP[dir1+1][2][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		
+//
+//					//		gradPz -= arrayP[dir1+1][dir2+1][0] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		gradPz += arrayP[dir1+1][dir2+1][2] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//	}
+//					//}
+//
+//					LBMReal gradPx = ((((arrayP[2][0][0] - arrayP[0][2][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
+//						+ (((arrayP[2][1][0] - arrayP[0][1][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[2][0][1] - arrayP[0][2][1]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
+//						+ (arrayP[2][1][1] - arrayP[0][1][1]) * c2o9;
+//					LBMReal gradPy = ((((arrayP[0][2][0] - arrayP[2][0][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[0][2][2] - arrayP[2][0][0]))) * c1o72
+//						+ (((arrayP[1][2][0] - arrayP[1][0][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[0][2][1] - arrayP[2][0][1]) + (arrayP[1][2][2] - arrayP[1][0][0]))) * c1o18)
+//						+ (arrayP[1][2][1] - arrayP[1][0][1]) * c2o9;
+//					LBMReal gradPz = ((((arrayP[0][0][2] - arrayP[2][2][0]) + (arrayP[0][2][2] - arrayP[2][0][0])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72
+//						+ (((arrayP[0][1][2] - arrayP[2][1][0]) + (arrayP[1][2][2] - arrayP[1][0][0])) + ((arrayP[1][0][2] - arrayP[1][2][0]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18)
+//						+ (arrayP[1][1][2] - arrayP[1][1][0]) * c2o9;
+//
+//					//gradPx *=c1 - (*pressure)(x1, x2, x3)+pressureHere;
+//					//gradPy *=c1 - (*pressure)(x1, x2, x3) + pressureHere;
+//					//gradPz *=c1 - (*pressure)(x1, x2, x3) + pressureHere;
+//
+//					////!Filter&Gradient merged
+//					//LBMReal gradPx = 0.0;
+//					//LBMReal gradPy = 0.0;
+//					//LBMReal gradPz = 0.0;
+//					//for (int dir1 = -1; dir1 <= 1; dir1++) {
+//					//	for (int dir2 = -1; dir2 <= 1; dir2++) {
+//					//		int yyy = x2 + dir1;
+//					//		int zzz = x3 + dir2;
+//					//		if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) {
+//					//			gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		else {
+//					//			gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) {
+//					//			gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		else {
+//					//			gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//
+//					//		int xxx = x1 + dir1;
+//					//		if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) {
+//					//			gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		else {
+//					//			gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) {
+//					//			gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		else {
+//					//			gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//
+//					//		yyy = x2 + dir2;
+//					//		if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) {
+//					//			gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		else {
+//					//			gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) {
+//					//			gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//					//		else {
+//					//			gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)));
+//					//		}
+//
+//					//	}
+//					//}
+//
+//					//Viscosity increase by phase field residuum
+//					//LBMReal errPhi = (((1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale)- denom);
+//					//LBMReal limVis = 0.01;// 0.0000001 * 10;//0.01;
+//					// collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM);
+//					// collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM;
+//					//errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi;
+//					//collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis);
+//
+//					//3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW])))
+//					//+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) +
+//					//+WEIGTH[N] * (phi2[T] - phi2[B]));
+//
+//					muRho = rho;
+//
+//					////external pressure
+//					//forcingX1 =/* muForcingX1.Eval()/rho */- gradPx/rho;
+//					//forcingX2 =/* muForcingX2.Eval()/rho */- gradPy/rho;
+//					//forcingX3 =/* muForcingX3.Eval()/rho */- gradPz/rho;
+//
+//					///////////////////////////////////////////////
+//
+//					//LBMReal pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+//					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+//					//pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) );
+//					////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) {
+//					//	mfabb -= pBefore * c2o9 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[E] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbab -= pBefore * c2o9 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[N] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbba -= pBefore * c2o9 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[T] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfaab -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[NE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcab -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[NW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfaba -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcba -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbaa -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TN] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbca -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TS] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfaaa -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TNE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcaa -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TNW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfaca -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TSE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcca -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[TSW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcbb -= pBefore * c2o9 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[W] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbcb -= pBefore * c2o9 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[S] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbbc -= pBefore * c2o9 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[B] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfccb -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[SW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfacb -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[SE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcbc -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfabc -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbcc -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BS] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbac -= pBefore * c1o18 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BN] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfccc -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BSW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfacc -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BSE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfcac -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BNW] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfaac -= pBefore * c1o72 * ((rhoL + phi[REST] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[BNE] * (rhoH - rhoL) / (phiH - phiL)));
+//					//	mfbbb -= pBefore * 8.0 / 9.0;
+//					//}
+//
+//					///////////////////////////////////////////////
+//
+//					LBMReal pStarStart = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+//						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+//
+//					/////////////////////
+//					//LBMReal vvxh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
+//					//	(((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
+//					//	(mfhcbb - mfhabb)) / rhoRef;
+//					//LBMReal vvyh = ((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
+//					//	(((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
+//					//	(mfhbcb - mfhbab)) / rhoRef;
+//					//LBMReal vvzh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
+//					//	(((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
+//					//	(mfhbbc - mfhbba)) / rhoRef;
+//
+//					//LBMReal deltaPP = 0*(vvxh * dX1_phi + vvyh * dX2_phi + vvzh * dX3_phi) * rhoToPhi / (rho);
+//					//mfhbcb += c1o6* c2o9  * deltaPP;
+//					//mfhbbc += c1o6* c2o9  * deltaPP;
+//					//mfhcbb += c1o6* c2o9  * deltaPP;
+//					//mfhccb += c1o6* c1o18 * deltaPP;
+//					//mfhacb += c1o6* c1o18 * deltaPP;
+//					//mfhcbc += c1o6* c1o18 * deltaPP;
+//					//mfhabc += c1o6* c1o18 * deltaPP;
+//					//mfhbcc += c1o6* c1o18 * deltaPP;
+//					//mfhbac += c1o6* c1o18 * deltaPP;
+//					//mfhccc += c1o6* c1o72 * deltaPP;
+//					//mfhacc += c1o6* c1o72 * deltaPP;
+//					//mfhcac += c1o6* c1o72 * deltaPP;
+//					//mfhaac += c1o6* c1o72 * deltaPP;
+//					//mfhabb += c1o6* c2o9  * deltaPP;
+//					//mfhbab += c1o6* c2o9  * deltaPP;
+//					//mfhbba += c1o6* c2o9  * deltaPP;
+//					//mfhaab += c1o6* c1o18 * deltaPP;
+//					//mfhcab += c1o6* c1o18 * deltaPP;
+//					//mfhaba += c1o6* c1o18 * deltaPP;
+//					//mfhcba += c1o6* c1o18 * deltaPP;
+//					//mfhbaa += c1o6* c1o18 * deltaPP;
+//					//mfhbca += c1o6* c1o18 * deltaPP;
+//					//mfhaaa += c1o6* c1o72 * deltaPP;
+//					//mfhcaa += c1o6* c1o72 * deltaPP;
+//					//mfhaca += c1o6* c1o72 * deltaPP;
+//					//mfhcca += c1o6* c1o72 * deltaPP;
+//					//mfhbbb += c1o6* c4 * c2o9 * deltaPP;
+//
+//					//////////////////////
+//
+//					/////Recovering the origin distributions
+//					//LBMReal mfStartcbb = mfcbb ;
+//					//LBMReal mfStartbcb = mfbcb ;
+//					//LBMReal mfStartbbc = mfbbc ;
+//					//LBMReal mfStartccb = mfccb ;
+//					//LBMReal mfStartacb = mfacb ;
+//					//LBMReal mfStartcbc = mfcbc ;
+//					//LBMReal mfStartabc = mfabc ;
+//					//LBMReal mfStartbcc = mfbcc ;
+//					//LBMReal mfStartbac = mfbac ;
+//					//LBMReal mfStartccc = mfccc ;
+//					//LBMReal mfStartacc = mfacc ;
+//					//LBMReal mfStartcac = mfcac ;
+//					//LBMReal mfStartaac = mfaac ;
+//					//LBMReal mfStartabb = mfabb ;
+//					//LBMReal mfStartbab = mfbab ;
+//					//LBMReal mfStartbba = mfbba ;
+//					//LBMReal mfStartaab = mfaab ;
+//					//LBMReal mfStartcab = mfcab ;
+//					//LBMReal mfStartaba = mfaba ;
+//					//LBMReal mfStartcba = mfcba ;
+//					//LBMReal mfStartbaa = mfbaa ;
+//					//LBMReal mfStartbca = mfbca ;
+//					//LBMReal mfStartaaa = mfaaa ;
+//					//LBMReal mfStartcaa = mfcaa ;
+//					//LBMReal mfStartaca = mfaca ;
+//					//LBMReal mfStartcca = mfcca ;
+//					//LBMReal mfStartbbb = mfbbb ;
+//
+//
+//						mfcbb += mfhcbb /rho;
+//						mfbcb += mfhbcb /rho;
+//						mfbbc += mfhbbc /rho;
+//						mfccb += mfhccb /rho;
+//						mfacb += mfhacb /rho;
+//						mfcbc += mfhcbc /rho;
+//						mfabc += mfhabc /rho;
+//						mfbcc += mfhbcc /rho;
+//						mfbac += mfhbac /rho;
+//						mfccc += mfhccc /rho;
+//						mfacc += mfhacc /rho;
+//						mfcac += mfhcac /rho;
+//						mfaac += mfhaac /rho;
+//						mfabb += mfhabb /rho;
+//						mfbab += mfhbab /rho;
+//						mfbba += mfhbba /rho;
+//						mfaab += mfhaab /rho;
+//						mfcab += mfhcab /rho;
+//						mfaba += mfhaba /rho;
+//						mfcba += mfhcba /rho;
+//						mfbaa += mfhbaa /rho;
+//						mfbca += mfhbca /rho;
+//						mfaaa += mfhaaa /rho;
+//						mfcaa += mfhcaa /rho;
+//						mfaca += mfhaca /rho;
+//						mfcca += mfhcca /rho;
+//						mfbbb += mfhbbb /rho;
+//
+//
+//
+//					//Abbas
+//					LBMReal pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+//						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+//					//22.09.22 not yet in balance, repaire here
+//					LBMReal ppStar = ((((((mfhaaa + mfhccc) + (mfhaac + mfhcca)) + ((mfhcac + mfhaca) + (mfhcaa + mfhacc)))*c3
+//						+ (((mfhaab + mfhccb) + (mfhacb + mfhcab)) + ((mfhaba + mfhcbc) + (mfhabc + mfhcba)) + ((mfhbaa + mfhbcc) + (mfhbac + mfhbca))))*c2
+//						+ ((mfhabb + mfhcbb) + (mfhbab + mfhbcb) + (mfhbba + mfhbbc))) ) * c1o3/rho;
+//	
+//					ppStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) * c3
+//						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) * c2
+//						+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)))) * c1o3 ;
+//
+//					//(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[REST] : (*phaseFieldOld)(x1, x2, x3);
+//					//LBMReal dtPhi = phi[REST] - (*phaseFieldOld)(x1, x2, x3);
+//					//LBMReal deltaP = -pStar * (c1 - rho / (rho + c1o2 * rhoToPhi * dtPhi));// -pStar * pStar * pStar * 1.0e-4 * rho * rho * rho;
+//					//LBMReal deltaP = pStar * (c1 - mfhbbb*rho) * c1o2;//Explicit
+//					//LBMReal deltaP = pStar * (c1 - mfhbbb * rho) / (c1 + mfhbbb * rho);//Semi-Implicit
+//					//(*phaseFieldOld)(x1, x2, x3) = phi[REST];
+//
+//					//mfabb += c2o9 *deltaP;
+//					//mfbab += c2o9 *deltaP;
+//					//mfbba += c2o9 *deltaP;
+//					//mfaab += c1o18*deltaP;
+//					//mfcab += c1o18*deltaP;
+//					//mfaba += c1o18*deltaP;
+//					//mfcba += c1o18*deltaP;
+//					//mfbaa += c1o18*deltaP;
+//					//mfbca += c1o18*deltaP;
+//					//mfaaa += c1o72*deltaP;
+//					//mfcaa += c1o72*deltaP;
+//					//mfaca += c1o72*deltaP;
+//					//mfcca += c1o72*deltaP;
+//					//mfcbb += c2o9 *deltaP;
+//					//mfbcb += c2o9 *deltaP;
+//					//mfbbc += c2o9 *deltaP;
+//					//mfccb += c1o18*deltaP;
+//					//mfacb += c1o18*deltaP;
+//					//mfcbc += c1o18*deltaP;
+//					//mfabc += c1o18*deltaP;
+//					//mfbcc += c1o18*deltaP;
+//					//mfbac += c1o18*deltaP;
+//					//mfccc += c1o72*deltaP;
+//					//mfacc += c1o72*deltaP;
+//					//mfcac += c1o72*deltaP;
+//					//mfaac += c1o72*deltaP;
+//
+//					//pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//					//	+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+//					//	+ ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3;
+//
+//
+//
+//
+//					//mfabb -= c1o2 * c2o9 *pStar*(phi[REST]-phi[E  ])*rhoToPhi/rho;
+//					//mfbab -= c1o2 * c2o9 *pStar*(phi[REST]-phi[N  ])*rhoToPhi/rho;
+//					//mfbba -= c1o2 * c2o9 *pStar*(phi[REST]-phi[T  ])*rhoToPhi/rho;
+//					//mfaab -= c1o2 * c1o18*pStar*(phi[REST]-phi[NE ])*rhoToPhi/rho;
+//					//mfcab -= c1o2 * c1o18*pStar*(phi[REST]-phi[NW ])*rhoToPhi/rho;
+//					//mfaba -= c1o2 * c1o18*pStar*(phi[REST]-phi[TE ])*rhoToPhi/rho;
+//					//mfcba -= c1o2 * c1o18*pStar*(phi[REST]-phi[TW ])*rhoToPhi/rho;
+//					//mfbaa -= c1o2 * c1o18*pStar*(phi[REST]-phi[TN ])*rhoToPhi/rho;
+//					//mfbca -= c1o2 * c1o18*pStar*(phi[REST]-phi[TS ])*rhoToPhi/rho;
+//					//mfaaa -= c1o2 * c1o72*pStar*(phi[REST]-phi[TNE])*rhoToPhi/rho;
+//					//mfcaa -= c1o2 * c1o72*pStar*(phi[REST]-phi[TNW])*rhoToPhi/rho;
+//					//mfaca -= c1o2 * c1o72*pStar*(phi[REST]-phi[TSE])*rhoToPhi/rho;
+//					//mfcca -= c1o2 * c1o72*pStar*(phi[REST]-phi[TSW])*rhoToPhi/rho;
+//					//mfcbb -= c1o2 * c2o9 *pStar*(phi[REST]-phi[W  ])*rhoToPhi/rho;
+//					//mfbcb -= c1o2 * c2o9 *pStar*(phi[REST]-phi[S  ])*rhoToPhi/rho;
+//					//mfbbc -= c1o2 * c2o9 *pStar*(phi[REST]-phi[B  ])*rhoToPhi/rho;
+//					//mfccb -= c1o2 * c1o18*pStar*(phi[REST]-phi[SW ])*rhoToPhi/rho;
+//					//mfacb -= c1o2 * c1o18*pStar*(phi[REST]-phi[SE ])*rhoToPhi/rho;
+//					//mfcbc -= c1o2 * c1o18*pStar*(phi[REST]-phi[BW ])*rhoToPhi/rho;
+//					//mfabc -= c1o2 * c1o18*pStar*(phi[REST]-phi[BE ])*rhoToPhi/rho;
+//					//mfbcc -= c1o2 * c1o18*pStar*(phi[REST]-phi[BS ])*rhoToPhi/rho;
+//					//mfbac -= c1o2 * c1o18*pStar*(phi[REST]-phi[BN ])*rhoToPhi/rho;
+//					//mfccc -= c1o2 * c1o72*pStar*(phi[REST]-phi[BSW])*rhoToPhi/rho;
+//					//mfacc -= c1o2 * c1o72*pStar*(phi[REST]-phi[BSE])*rhoToPhi/rho;
+//					//mfcac -= c1o2 * c1o72*pStar*(phi[REST]-phi[BNW])*rhoToPhi/rho;
+//					//mfaac -= c1o2 * c1o72*pStar*(phi[REST]-phi[BNE])*rhoToPhi/rho;
+//
+//
+//					//forcingX1 =/* muForcingX1.Eval() / rho*/ - pStar * dX1_phi * rhoToPhi / rho;
+//					//forcingX2 =/* muForcingX2.Eval() / rho*/ - pStar * dX2_phi * rhoToPhi / rho;
+//					//forcingX3 =/* muForcingX3.Eval() / rho*/ - pStar * dX3_phi * rhoToPhi / rho;
+//
+//
+//					//mfabb += (-forcingX1) * c2o9;
+//					//mfbab += (-forcingX2) * c2o9;
+//					//mfbba += (-forcingX3) * c2o9;
+//					//mfaab += (-forcingX1 - forcingX2) * c1o16;
+//					//mfcab += (forcingX1 - forcingX2) * c1o16;
+//					//mfaba += (-forcingX1 - forcingX3) * c1o16;
+//					//mfcba += (forcingX1 - forcingX3) * c1o16;
+//					//mfbaa += (-forcingX2 - forcingX3) * c1o16;
+//					//mfbca += (forcingX2 - forcingX3) * c1o16;
+//					//mfaaa += (-forcingX1 - forcingX2 - forcingX3) * c1o72;
+//					//mfcaa += (forcingX1 - forcingX2 - forcingX3) * c1o72;
+//					//mfaca += (-forcingX1 + forcingX2 - forcingX3) * c1o72;
+//					//mfcca += (forcingX1 + forcingX2 - forcingX3) * c1o72;
+//					//mfcbb += (forcingX1)*c2o9;
+//					//mfbcb += (forcingX2)*c2o9;
+//					//mfbbc += (forcingX3)*c2o9;
+//					//mfccb += (forcingX1 + forcingX2) * c1o16;
+//					//mfacb += (-forcingX1 + forcingX2) * c1o16;
+//					//mfcbc += (forcingX1 + forcingX3) * c1o16;
+//					//mfabc += (-forcingX1 + forcingX3) * c1o16;
+//					//mfbcc += (forcingX2 + forcingX3) * c1o16;
+//					//mfbac += (-forcingX2 + forcingX3) * c1o16;
+//					//mfccc += (forcingX1 + forcingX2 + forcingX3) * c1o72;
+//					//mfacc += (-forcingX1 + forcingX2 + forcingX3) * c1o72;
+//					//mfcac += (forcingX1 - forcingX2 + forcingX3) * c1o72;
+//					//mfaac += (-forcingX1 - forcingX2 + forcingX3) * c1o72;
+//
+//					LBMReal saveForceX1 = forcingX1;
+//					LBMReal saveForceX2 = forcingX2;
+//					LBMReal saveForceX3 = forcingX3;
+//
+//					 vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) +
+//						(((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) +
+//						(mfcbb - mfabb)) / rhoRef;
+//					 vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) +
+//						(((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) +
+//						(mfbcb - mfbab)) / rhoRef;
+//					 vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) +
+//						(((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) +
+//						(mfbbc - mfbba)) / rhoRef;
+//
+//
+//					 LBMReal dRhoInvX = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) +
+//						 (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) +
+//						 (mfhcbb - mfhabb)));
+//					 LBMReal dRhoInvY = -(((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) +
+//						 (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) +
+//						 (mfhbcb - mfhbab)));
+//					 LBMReal dRhoInvZ = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) +
+//						 (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) +
+//						 (mfhbbc - mfhbba)));
+//
+//
+//					 forcingX1 = 0.0;
+//					 forcingX2 = 0.0;
+//					 forcingX3 = 0.0;
+//					//!Abbas
+//					//LBMReal dX1_rhoInv = gradX1_rhoInv(rhoL, rhoH - rhoL);
+//					//LBMReal dX2_rhoInv = gradX2_rhoInv(rhoL, rhoH - rhoL);
+//					//LBMReal dX3_rhoInv = gradX3_rhoInv(rhoL, rhoH - rhoL);
+//					//forcingX1 =/* muForcingX1.Eval() / rho*/ +pStar * dX1_rhoInv * rho;
+//					//forcingX2 =/* muForcingX2.Eval() / rho*/ +pStar * dX2_rhoInv * rho;
+//					//forcingX3 =/* muForcingX3.Eval() / rho*/ +pStar * dX3_rhoInv * rho;
+//
+//					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2;
+//					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2;
+//					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2;
+//					 LBMReal FdX1_phi = normX1 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale;
+//					 LBMReal FdX2_phi = normX2 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale;
+//					 LBMReal FdX3_phi = normX3 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale;
+//
+//
+//					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ;
+//					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho ) ;
+//					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho ) ;
+//
+//					//forcingX1 = (pStar * dRhoInvX* rho *c3) ;
+//					//forcingX2 = (pStar * dRhoInvY* rho *c3) ;
+//					//forcingX3 = (pStar * dRhoInvZ* rho *c3) ;
+//					//if (phi[REST] > 0.1 && phi[REST] < 0.9) std::cout << phi[REST] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl;
+//					//LBMReal forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ;
+//					//LBMReal forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ;
+//					//LBMReal forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ;
+//
+//					//forcingX1 = (fabs(vvx + c1o2 * forcingX1) < fabs(vvx + c1o2 * forcingX1ALTERNAT)) ? forcingX1 : forcingX1ALTERNAT;
+//					//forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT;
+//					//forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT;
+//
+//					//	 forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale;
+//					//	 forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale;
+//					//	 forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale;
+//
+//					//forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[REST]) + pStar * dX1_rhoInv * rho*(phi[REST]));
+//					//forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[REST]) + pStar * dX2_rhoInv * rho*(phi[REST]));
+//					//forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[REST]) + pStar * dX3_rhoInv * rho*(phi[REST]));
+//						 //if (phi[REST] > 0.3 && phi[REST] < 0.7)
+//						 //{
+//							// int test = 1;
+//							// std::cout << phi[REST] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[REST]) * (phi[REST]) * oneOverInterfaceScale/ dX1_phi<< std::endl;
+//						 //}
+//
+//
+//
+//					 //LBMReal scaleGrad = c2 * phi[REST] * (1.0 - phi[REST]) / ((phi[REST] * phi[REST] + (1.0 - phi[REST]) * (1.0 - phi[REST])) * (phi[REST] * phi[REST] + (1.0 - phi[REST]) * (1.0 - phi[REST])));
+//					 //dX1_phi *= scaleGrad;
+//					 //dX2_phi *= scaleGrad;
+//					 //dX3_phi *= scaleGrad;
+//
+//					 ///Experimental interface sharpening force 20.06.2022
+//
+//					 LBMReal scaleSharpener = 1.0;
+//					 //forcingX1 += scaleSharpener * (FdX1_phi - dX1_phi) * fabsf(FdX1_phi - dX1_phi)  / rho;
+//					 //forcingX2 += scaleSharpener * (FdX2_phi - dX2_phi) * fabsf(FdX2_phi - dX2_phi)  / rho;
+//					 //forcingX3 += scaleSharpener * (FdX3_phi - dX3_phi) * fabsf(FdX3_phi - dX3_phi)  / rho;
+//					///surface tension force
+//					forcingX1 += mu * dX1_phi/rho;
+//					forcingX2 += mu * dX2_phi/rho;
+//					forcingX3 += mu * dX3_phi/rho;
+//
+//					LBMReal forcingBIAS = 0.5;
+//					forcingX1 += muForcingX1.Eval() / rho;//*phi[REST];
+//					forcingX2 += muForcingX2.Eval() / rho;// * phi[REST];
+//					forcingX3 += muForcingX3.Eval() / rho;// * phi[REST];
+//
+//				//	//19.08.2022
+//					//vvx += vvxh / rho * c1o2;
+//					//vvy += vvyh / rho * c1o2;
+//					//vvz += vvzh / rho * c1o2;
+//				//	//
+//
+//
+//					vvx += (forcingX1) * deltaT * c1o2;
+//					vvy += (forcingX2) * deltaT * c1o2;
+//					vvz += (forcingX3) * deltaT * c1o2;
+//
+//					//vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT *  c1o2; // X
+//					//vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT *  c1o2; // Y
+//					//vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT *  c1o2; // Z
+//
+//
+//
+//				//	vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * forcingBIAS; // X
+//				//	vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * forcingBIAS; // Y
+//				//	vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * forcingBIAS; // Z
+//
+//
+//
+//					//Abbas
+//					LBMReal M200 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//						+ (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) ))
+//						+ ((mfabb + mfcbb))) );
+//					LBMReal M020 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//						+ (((mfaab + mfccb) + (mfacb + mfcab))  + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+//						+ ( (mfbab + mfbcb) )) );
+//					LBMReal M002 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)))
+//						+ ( + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca))))
+//						+ ( (mfbba + mfbbc))));
+//
+//					LBMReal M110 = ((((((mfaaa + mfccc) + (-mfcac - mfaca)) + ((mfaac + mfcca) + (-mfcaa -mfacc)))
+//						+ (((mfaab + mfccb) + (-mfacb - mfcab))   ))
+//						) );
+//					LBMReal M101 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcac + mfaca) - (mfcaa + mfacc)))
+//						+ (((mfaba + mfcbc) + (-mfabc - mfcba))))
+//						));
+//					LBMReal M011 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ( (mfcaa + mfacc)- (mfcac + mfaca)))
+//						+ (((mfbaa + mfbcc) + (-mfbac - mfbca))))
+//						));
+//					LBMReal vvxI = vvx;
+//					LBMReal vvyI = vvy;
+//					LBMReal vvzI = vvz;
+//
+//					LBMReal collFactorStore=collFactorM;
+//					LBMReal stress;
+//					//for(int iter=0;iter<5;iter++)
+//				 //{
+//					//	LBMReal OxxPyyPzz = 1.0;
+//					//	LBMReal mxxPyyPzz = (M200-vvxI*vvxI) + (M020-vvyI*vvyI) + (M002-vvzI*vvzI);
+//					//	//pStar = mxxPyyPzz * c1o3;
+//					//mxxPyyPzz -= c3 *pStar;
+//
+//					//LBMReal mxxMyy = (M200-vvxI*vvxI) - (M020-vvyI*vvyI);
+//					//LBMReal mxxMzz = (M200-vvxI*vvxI) - (M002-vvzI*vvzI);
+//					//LBMReal mxy = M110 - vvxI * vvyI;
+//					//LBMReal mxz = M101 - vvxI * vvzI;
+//					//LBMReal myz = M011 - vvyI * vvzI;
+//
+//
+//					//mxxMyy *= c1 - collFactorM * c1o2;
+//					//mxxMzz *= c1 - collFactorM * c1o2;
+//					//mxy *= c1 - collFactorM * c1o2;
+//					//mxz *= c1 - collFactorM * c1o2;
+//					//myz *= c1 - collFactorM * c1o2;
+//					//mxxPyyPzz *= c1 - OxxPyyPzz * c1o2;
+//					////mxxPyyPzz = mxxPyyPzz*fabs(mxxPyyPzz)/(1.0e-6+fabs(mxxPyyPzz));
+//					////mxxPyyPzz += c3 * pStar;
+//					//LBMReal mxx = (mxxMyy + mxxMzz + mxxPyyPzz)*c1o3;
+//					//LBMReal myy = (-c2*mxxMyy + mxxMzz + mxxPyyPzz)*c1o3;
+//					//LBMReal mzz = (mxxMyy -c2* mxxMzz + mxxPyyPzz) * c1o3;
+//					//vvxI = vvx - (mxx * dX1_phi + mxy * dX2_phi + mxz * dX3_phi) * rhoToPhi / (rho);
+//					//vvyI = vvy - (mxy * dX1_phi + myy * dX2_phi + myz * dX3_phi) * rhoToPhi / (rho);
+//					//vvzI = vvz - (mxz * dX1_phi + myz * dX2_phi + mzz * dX3_phi) * rhoToPhi / (rho);
+//
+//
+//				////	vvzI = vvz + (mxz * dRhoInvX + myz * dRhoInvY + mzz * dRhoInvZ) *  (rho)*c3;
+//				////	vvxI = vvx + (mxx * dRhoInvX + mxy * dRhoInvY + mxz * dRhoInvZ) *  (rho)*c3;
+//				////	vvyI = vvy + (mxy * dRhoInvX + myy * dRhoInvY + myz * dRhoInvZ) *  (rho)*c3;
+//
+//
+//				//	//LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
+//				//	//
+//				//	//LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy;
+//				//	//LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz;
+//				//	//LBMReal Dxy = -three * collFactorM * mxy;
+//				//	//LBMReal Dxz = -three * collFactorM * mxz;
+//				//	//LBMReal Dyz = -three * collFactorM * myz;
+//				//	////LBMReal stress = sqrt(sqrt((dyuy+dxux+dzuz)* (dyuy + dxux + dzuz))) * sqrt(forcingX1 * forcingX1 + forcingX2 * forcingX2 + forcingX3 * forcingX3);
+//				//	// stress = sqrt(dyuy * dyuy + dxux * dxux + dzuz*dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz)*sqrt(forcingX1*forcingX1+forcingX2*forcingX2+forcingX3*forcingX3);
+//				//	////collFactorM = collFactorStore + (1.75 - collFactorStore) * stress / (stress + 1.0e-8);
+//				//	//
+//				//	//LBMReal dX2_rho = (rhoToPhi)*dX2_phi;
+//				//	//LBMReal dX1_rho = (rhoToPhi)*dX1_phi;
+//				//	//LBMReal dX3_rho = (rhoToPhi)*dX3_phi;
+//				//	////vvxI= vvx+ c1o6 * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+//				//	////vvyI= vvy+ c1o6 * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+//				//	////vvzI= vvz+ c1o6 * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+//
+//				//	//vvxI = vvx + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+//				//	//vvyI = vvy + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+//				//	//vvzI = vvz + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+//
+//				//	////vvxI = vvx - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rhoInv + Dxy * dX2_rhoInv + Dxz * dX3_rhoInv);
+//				//	////vvyI = vvy - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rhoInv + 2 * dyuy * dX2_rhoInv + Dyz * dX3_rhoInv);
+//				//	////vvzI = vvz - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rhoInv + Dyz * dX2_rhoInv + 2 * dyuy * dX3_rhoInv);
+//
+//
+//					//}
+//				//	//forcingX1+=(vvxI-vvx)/(deltaT* forcingBIAS) + muForcingX1.Eval() / rho;
+//				//	//forcingX2 += (vvyI - vvy) / (deltaT * forcingBIAS) + muForcingX2.Eval() / rho;
+//				//	//forcingX3 += (vvzI - vvz) / (deltaT * forcingBIAS) + muForcingX3.Eval() / rho;
+//
+//
+//				////	forcingX1 += c2 * (vvxI - vvx);
+//				////	forcingX2 += c2 * (vvyI - vvy);
+//				////	forcingX3 += c2 * (vvzI - vvz);
+//
+//
+//					//mfabb += c1o2*(-forcingX1) * c2o9;
+//					//mfbab += c1o2*(-forcingX2) * c2o9;
+//					//mfbba += c1o2*(-forcingX3) * c2o9;
+//					//mfaab += c1o2*(-forcingX1 - forcingX2) * c1o18;
+//					//mfcab += c1o2*( forcingX1 - forcingX2) * c1o18;
+//					//mfaba += c1o2*(-forcingX1 - forcingX3) * c1o18;
+//					//mfcba += c1o2*( forcingX1 - forcingX3) * c1o18;
+//					//mfbaa += c1o2*(-forcingX2 - forcingX3) * c1o18;
+//					//mfbca += c1o2*( forcingX2 - forcingX3) * c1o18;
+//					//mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72;
+//					//mfcaa += c1o2*(forcingX1 - forcingX2 - forcingX3) * c1o72;
+//					//mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72;
+//					//mfcca += c1o2*(forcingX1 + forcingX2 - forcingX3) * c1o72;
+//					//mfcbb += c1o2*(forcingX1)*c2o9;
+//					//mfbcb += c1o2*(forcingX2)*c2o9;
+//					//mfbbc += c1o2*(forcingX3)*c2o9;
+//					//mfccb += c1o2*( forcingX1 + forcingX2) * c1o18;
+//					//mfacb += c1o2*(-forcingX1 + forcingX2) * c1o18;
+//					//mfcbc += c1o2*( forcingX1 + forcingX3) * c1o18;
+//					//mfabc += c1o2*(-forcingX1 + forcingX3) * c1o18;
+//					//mfbcc += c1o2*( forcingX2 + forcingX3) * c1o18;
+//					//mfbac += c1o2*(-forcingX2 + forcingX3) * c1o18;
+//					//mfccc += c1o2*(forcingX1 + forcingX2 + forcingX3) * c1o72;
+//					//mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72;
+//					//mfcac += c1o2*(forcingX1 - forcingX2 + forcingX3) * c1o72;
+//					//mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72;
+//
+//
+//					//forcingX1 = saveForceX1;
+//					//forcingX2 = saveForceX2;
+//					//forcingX3 = saveForceX3;
+//					vvx = vvxI;
+//					vvy = vvyI;
+//					vvz = vvzI;
+//
+//
+//
+//					//!Abbas
+//
+//					LBMReal vx2;
+//					LBMReal vy2;
+//					LBMReal vz2;
+//					vx2 = vvx * vvx;
+//					vy2 = vvy * vvy;
+//					vz2 = vvz * vvz;
+//					//pStar =ppStar- (vx2 + vy2 + vz2)*pStar;
+//				//	pStar = (pStar + ppStar)*c1o2;
+//					///////////////////////////////////////////////////////////////////////////////////////////               
+//					LBMReal oMdrho;
+//					///////////////
+//						//mfabb -= pStar * c2o9;
+//						//mfbab -= pStar * c2o9;
+//						//mfbba -= pStar * c2o9;
+//						//mfaab -= pStar * c1o16;
+//						//mfcab -= pStar * c1o16;
+//						//mfaba -= pStar * c1o16;
+//						//mfcba -= pStar * c1o16;
+//						//mfbaa -= pStar * c1o16;
+//						//mfbca -= pStar * c1o16;
+//						//mfaaa -= pStar * c1o72;
+//						//mfcaa -= pStar * c1o72;
+//						//mfaca -= pStar * c1o72;
+//						//mfcca -= pStar * c1o72;
+//						//mfcbb -= pStar * c2o9;
+//						//mfbcb -= pStar * c2o9;
+//						//mfbbc -= pStar * c2o9;
+//						//mfccb -= pStar * c1o16;
+//						//mfacb -= pStar * c1o16;
+//						//mfcbc -= pStar * c1o16;
+//						//mfabc -= pStar * c1o16;
+//						//mfbcc -= pStar * c1o16;
+//						//mfbac -= pStar * c1o16;
+//						//mfccc -= pStar * c1o72;
+//						//mfacc -= pStar * c1o72;
+//						//mfcac -= pStar * c1o72;
+//						//mfaac -= pStar * c1o72;
+//						//mfbbb -= pStar * 8.0/9.0;
+//					///////////////////
+//
+//					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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!!
+//
+//															 ////////////////////////////////////////////////////////////////////////////////////
+//					LBMReal wadjust;
+//					LBMReal qudricLimit = 0.01 / (c1 + 1.0e4 * phi[REST] * (c1 - phi[REST])); //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
+//					////////////////////////////////////////////////////////////////////////////////////
+//
+//					// mfaaa = 0.0;
+//					LBMReal OxxPyyPzz = 1.0; //omega2 or bulk viscosity
+//											//  LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
+//											//  LBMReal OxyyMxzz  = 1.;//2+s9;//
+//					LBMReal O4 = 1.;
+//					LBMReal O5 = 1.;
+//					LBMReal O6 = 1.;
+//
+//					//collFactorM+= (1.7 - collFactorM) * fabs(mfaaa) / (fabs(mfaaa) + 0.001f);
+//
+//
+//					/////fourth order parameters; here only for test. Move out of loop!
+//
+//					LBMReal OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0)));
+//					LBMReal OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM);
+//				    LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0));
+//					LBMReal A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
+//					//FIXME:  warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' )
+//					LBMReal BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM));
+//					//LBMReal stress = 1.0;// stress / (stress + 1.0e-10);
+//					stress = 1.0;
+//					//OxyyPxzz += stress*(1.0-OxyyPxzz);
+//					//OxyyPxzz = c3 * (collFactorM - c2) / (collFactorM - c3);
+//					//OxyyMxzz += stress*(1.0-OxyyMxzz);
+//					//Oxyz +=  stress*(1.0-Oxyz);
+//					//A *= 1.0-stress;
+//					//BB *= 1.0-stress;
+//
+//					//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 - c1) * oMdrho);
+//					LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1) * oMdrho);
+//					LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1) * 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;
+//					//pStar = (mxxPyyPzz+vx2+vy2+vz2) * c1o3;//does not work
+//					//pStar = (mxxPyyPzz) * c1o3;
+//					//pStar = pStar + 1.5 * (mxxPyyPzz * c1o3 - pStar);
+//					//mfaaa = mxxPyyPzz;
+//					//  LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho));
+//					mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa
+//										//mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa
+//					LBMReal mxxMyy = mfcaa - mfaca;
+//					LBMReal mxxMzz = mfcaa - mfaac;
+//
+//					///
+//					LBMReal mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz);
+//					LBMReal mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz);
+//					LBMReal mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz);
+//					LBMReal mmfabb = mfabb;
+//					LBMReal mmfbab = mfbab;
+//					LBMReal mmfbba = mfbba;
+//					///
+//
+//					LBMReal dxux =  -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz)*0;
+//					//LBMReal dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho;
+//					LBMReal dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
+//					LBMReal dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
+//					LBMReal Dxy = -three * collFactorM * mfbba;
+//					LBMReal Dxz = -three * collFactorM * mfbab;
+//					LBMReal Dyz = -three * collFactorM * mfabb;
+////					// attempt to improve implicit  stress computation by fixed iteration
+////					LBMReal dX2_rho = (rhoToPhi)*dX2_phi;
+////					LBMReal dX1_rho = (rhoToPhi)*dX1_phi;
+////					LBMReal dX3_rho = (rhoToPhi)*dX3_phi;
+////
+////						LBMReal dfx= c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+////						LBMReal dfy = c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+////						LBMReal dfz = c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+////
+////						for (int iteration = 0; iteration < 5; iteration++) {
+////							mxxMyy = (mfcaa - dfx * dfx * c1o2) - (mfaca - dfy * dfy * c1o2);
+////							mxxMzz = (mfcaa - dfx * dfx * c1o2) - (mfaac - dfz * dfz * c1o2);
+////						}
+///////end fixed iteration
+////
+//
+//
+//					//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);
+//
+//					//if (fabsf(mfaaa + (dxux + dyuy + dzuz) > 1e-9)){
+//					//	std::cout << mfaaa <<" "<< (dxux + dyuy + dzuz)<< std::endl;
+//					//}
+//
+//
+//					////updated pressure
+//					//mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling;
+//					//mfaaa *= (one-omegaDRho);// (mfaaa + (dxux + dyuy + dzuz)) * .5; // Pressure elimination as in standard velocity model
+//								 //  mfaaa += (rho - c1) * (dxux + dyuy + dzuz);
+//				
+//					mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa
+//
+//										// mxxPyyPzz += (mfaaa + mfaaaS) * c1o2;
+//										//mfaaa = mfaaaS;
+//										// 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;
+//
+//					 mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
+//					 mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa);
+//					 mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa);
+//					 mmfabb += mfabb;
+//					 mmfbab += mfbab;
+//					 mmfbba += mfbba;
+//
+//					//relax
+//					wadjust = Oxyz + (1. - Oxyz) * 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 * (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (one - O4) * (CUMacc);
+//					CUMcac = -O4 * (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (one - O4) * (CUMcac);
+//					CUMcca = -O4 * (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (one - O4) * (CUMcca);
+//					CUMbbc = -O4 * (one / collFactorM - c1o2) * Dxy * c1o3 * BB + (one - O4) * (CUMbbc);
+//					CUMbcb = -O4 * (one / collFactorM - c1o2) * Dxz * c1o3 * BB + (one - O4) * (CUMbcb);
+//					CUMcbb = -O4 * (one / collFactorM - c1o2) * Dyz * c1o3 * BB + (one - 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 - c1) * oMdrho;
+//					mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1) * oMdrho;
+//					mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1) * 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;// *(c1 - forcingBIAS) / forcingBIAS;
+//					mfaba = -mfaba;// *(c1 - forcingBIAS) / forcingBIAS;
+//					mfaab = -mfaab;// *(c1 - forcingBIAS) / forcingBIAS;
+//
+//					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho);
+//					//mfaba += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho);
+//					//mfaab += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho);
+//
+//					mfbaa -= c1o2 * rhoToPhi * (mmfcaa* dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho);
+//					mfaba -= c1o2 * rhoToPhi * (mmfbba* dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho);
+//					mfaab -= c1o2 * rhoToPhi * (mmfbab* dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho);
+//					
+//					vvx -= c1o4 * rhoToPhi * (mmfcaa * dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho);
+//					vvy -= c1o4 * rhoToPhi * (mmfbba * dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho);
+//					vvz -= c1o4 * rhoToPhi * (mmfbab * dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho);
+//
+//					vx2 = vvx * vvx;
+//					vy2 = vvy * vvy;
+//					vz2 = vvz * vvz;
+//
+//					//mmfcaa =0;// c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
+//					//mmfaca =0;// c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz - mfaaa);
+//					//mmfaac =0;// c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz - mfaaa);
+//					//mmfabb =0;// mfabb;
+//					//mmfbab =0;// mfbab;
+//					//mmfbba =0;// mfbba;
+//
+//
+//					//////////////////////////////////////////////////////////////////////////////////////
+//					//grad Rho
+//					//LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[REST] * three * gradPx;
+//					//LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[REST] * three * gradPy;
+//					//LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[REST] * three * gradPz;
+//
+//					//LBMReal dX2_rho = (rhoToPhi ) * dX2_phi ;
+//					//LBMReal dX1_rho = (rhoToPhi ) * dX1_phi ;
+//					//LBMReal dX3_rho = (rhoToPhi ) * dX3_phi ;
+//					///////////////////////////////////////////////////////////////////////////////////////
+//					//mfbaa += c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho);
+//					//mfaba += c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho);
+//					//mfaab += c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho);
+//					
+//					///////Fakhari pressure correction
+//					//mfbaa -= mfaaa / rho * dX1_rho*c1o3;
+//					//mfaba -= mfaaa / rho * dX2_rho*c1o3;
+//					//mfaab -= mfaaa / rho * dX3_rho*c1o3;
+//					////////////////////////////////////////////////////////////////////////////////////
+//					//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;
+//					/////SimpleForce
+//
+//					//mfabb += c2o9 * deltaP;
+//					//mfbab += c2o9 * deltaP;
+//					//mfbba += c2o9 * deltaP;
+//					//mfaab += c1o18 * deltaP;
+//					//mfcab += c1o18 * deltaP;
+//					//mfaba += c1o18 * deltaP;
+//					//mfcba += c1o18 * deltaP;
+//					//mfbaa += c1o18 * deltaP;
+//					//mfbca += c1o18 * deltaP;
+//					//mfaaa += c1o72 * deltaP;
+//					//mfcaa += c1o72 * deltaP;
+//					//mfaca += c1o72 * deltaP;
+//					//mfcca += c1o72 * deltaP;
+//					//mfcbb += c2o9 * deltaP;
+//					//mfbcb += c2o9 * deltaP;
+//					//mfbbc += c2o9 * deltaP;
+//					//mfccb += c1o18 * deltaP;
+//					//mfacb += c1o18 * deltaP;
+//					//mfcbc += c1o18 * deltaP;
+//					//mfabc += c1o18 * deltaP;
+//					//mfbcc += c1o18 * deltaP;
+//					//mfbac += c1o18 * deltaP;
+//					//mfccc += c1o72 * deltaP;
+//					//mfacc += c1o72 * deltaP;
+//					//mfcac += c1o72 * deltaP;
+//					//mfaac += c1o72 * deltaP;
+//
+//					//mfabb += c1o2*(-forcingX1                        ) * c2o9;
+//					//mfbab += c1o2*(           - forcingX2            ) * c2o9;
+//					//mfbba += c1o2*(                       - forcingX3) * c2o9;
+//					//mfaab += c1o2*(-forcingX1 - forcingX2            ) * c1o18;
+//					//mfcab += c1o2*( forcingX1 - forcingX2            ) * c1o18;
+//					//mfaba += c1o2*(-forcingX1             - forcingX3) * c1o18;
+//					//mfcba += c1o2*( forcingX1             - forcingX3) * c1o18;
+//					//mfbaa += c1o2*(           - forcingX2 - forcingX3) * c1o18;
+//					//mfbca += c1o2*(             forcingX2 - forcingX3) * c1o18;
+//					//mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72;
+//					//mfcaa += c1o2*( forcingX1 - forcingX2 - forcingX3) * c1o72;
+//					//mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72;
+//					//mfcca += c1o2*( forcingX1 + forcingX2 - forcingX3) * c1o72;
+//					//mfcbb += c1o2*( forcingX1                        ) * c2o9;
+//					//mfbcb += c1o2*(             forcingX2            ) * c2o9;
+//					//mfbbc += c1o2*(                         forcingX3) * c2o9;
+//					//mfccb += c1o2*( forcingX1 + forcingX2            ) * c1o18;
+//					//mfacb += c1o2*(-forcingX1 + forcingX2            ) * c1o18;
+//					//mfcbc += c1o2*( forcingX1             + forcingX3) * c1o18;
+//					//mfabc += c1o2*(-forcingX1             + forcingX3) * c1o18;
+//					//mfbcc += c1o2*(             forcingX2 + forcingX3) * c1o18;
+//					//mfbac += c1o2*(           - forcingX2 + forcingX3) * c1o18;
+//					//mfccc += c1o2*( forcingX1 + forcingX2 + forcingX3) * c1o72;
+//					//mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72;
+//					//mfcac += c1o2*( forcingX1 - forcingX2 + forcingX3) * c1o72;
+//					//mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72;
+//					//pStarStart -= (vx2 + vy2 + vz2) * c1o3;
+//
+//					///Take the diffusion part with out
+//
+//					//mfStartcbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::E  , zeroReal, vvx, vvy, vvz);
+//					//mfStartbcb -= D3Q27System::getIncompFeqForDirection(D3Q27System::N  , zeroReal, vvx, vvy, vvz);
+//					//mfStartbbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::T  , zeroReal, vvx, vvy, vvz);
+//					//mfStartccb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NE , zeroReal, vvx, vvy, vvz);
+//					//mfStartacb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NW , zeroReal, vvx, vvy, vvz);
+//					//mfStartcbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TE , zeroReal, vvx, vvy, vvz);
+//					//mfStartabc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TW , zeroReal, vvx, vvy, vvz);
+//					//mfStartbcc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TN , zeroReal, vvx, vvy, vvz);
+//					//mfStartbac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TS , zeroReal, vvx, vvy, vvz);
+//					//mfStartccc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNE, zeroReal, vvx, vvy, vvz);
+//					//mfStartacc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNW, zeroReal, vvx, vvy, vvz);
+//					//mfStartcac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSE, zeroReal, vvx, vvy, vvz);
+//					//mfStartaac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSW, zeroReal, vvx, vvy, vvz);
+//					//mfStartabb -= D3Q27System::getIncompFeqForDirection(D3Q27System::W  , zeroReal, vvx, vvy, vvz);
+//					//mfStartbab -= D3Q27System::getIncompFeqForDirection(D3Q27System::S  , zeroReal, vvx, vvy, vvz);
+//					//mfStartbba -= D3Q27System::getIncompFeqForDirection(D3Q27System::B  , zeroReal, vvx, vvy, vvz);
+//					//mfStartaab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SW , zeroReal, vvx, vvy, vvz);
+//					//mfStartcab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SE , zeroReal, vvx, vvy, vvz);
+//					//mfStartaba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BW , zeroReal, vvx, vvy, vvz);
+//					//mfStartcba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BE , zeroReal, vvx, vvy, vvz);
+//					//mfStartbaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BS , zeroReal, vvx, vvy, vvz);
+//					//mfStartbca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BN , zeroReal, vvx, vvy, vvz);
+//					//mfStartaaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSW, zeroReal, vvx, vvy, vvz);
+//					//mfStartcaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSE, zeroReal, vvx, vvy, vvz);
+//					//mfStartaca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNW, zeroReal, vvx, vvy, vvz);
+//					//mfStartcca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNE, zeroReal, vvx, vvy, vvz);
+//					//mfStartbbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::REST, zeroReal, vvx, vvy, vvz);
+//					//
+//					//pStar += pStarStart*(omegaDRho-c1);
+//
+//					//mfStartcbb = c2o9 * pStar;
+//					//	mfStartbcb= c2o9 * pStar;
+//					//	mfStartbbc= c2o9 * pStar;
+//					//	mfStartccb= c1o18 * pStar;
+//					//	mfStartacb= c1o18 * pStar;
+//					//	mfStartcbc= c1o18 * pStar;
+//					//	mfStartabc= c1o18 * pStar;
+//					//	mfStartbcc= c1o18 * pStar;
+//					//	mfStartbac= c1o18 * pStar;
+//					//	mfStartccc= c1o72 * pStar;
+//					//	mfStartacc= c1o72 * pStar;
+//					//	mfStartcac= c1o72 * pStar;
+//					//	mfStartaac= c1o72 * pStar;
+//					//	mfStartabb= c2o9 * pStar;
+//					//	mfStartbab= c2o9 * pStar;
+//					//	mfStartbba= c2o9 * pStar;
+//					//	mfStartaab= c1o18 * pStar;
+//					//	mfStartcab= c1o18 * pStar;
+//					//	mfStartaba= c1o18 * pStar;
+//					//	mfStartcba= c1o18 * pStar;
+//					//	mfStartbaa= c1o18 * pStar;
+//					//	mfStartbca= c1o18 * pStar;
+//					//	mfStartaaa= c1o72 * pStar;
+//					//	mfStartcaa= c1o72 * pStar;
+//					//	mfStartaca= c1o72 * pStar;
+//					//	mfStartcca= c1o72 * pStar;
+//					//	mfStartbbb= c4 * c2o9 * pStar;
+//
+//					//mfaaa -= c1o2 * (mfStartaaa + mfStartccc)+ c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa);
+//					//mfaab -= c1o2 * (mfStartaab + mfStartccb)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa));
+//					//mfaac -= c1o2 * (mfStartaac + mfStartcca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa);
+//					//mfaba -= c1o2 * (mfStartaba + mfStartcbc)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa);
+//					//mfabb -= c1o2 * (mfStartabb + mfStartcbb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa);
+//					//mfabc -= c1o2 * (mfStartabc + mfStartcba)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa);
+//					//mfaca -= c1o2 * (mfStartaca + mfStartcac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa);
+//					//mfacb -= c1o2 * (mfStartacb + mfStartcab)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa));
+//					//mfacc -= c1o2 * (mfStartacc + mfStartcaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa);
+//					//mfbaa -= c1o2 * (mfStartbaa + mfStartbcc)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa);
+//					//mfbab -= c1o2 * (mfStartbab + mfStartbcb)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa);
+//					//mfbac -= c1o2 * (mfStartbac + mfStartbca)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa);
+//					//mfbba -= c1o2 * (mfStartbba + mfStartbbc)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa);
+//					//mfbbb -=  (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa));
+//					//mfbbc -= c1o2 * (mfStartbbc + mfStartbba)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa);
+//					//mfbca -= c1o2 * (mfStartbca + mfStartbac)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa);
+//					//mfbcb -= c1o2 * (mfStartbcb + mfStartbab)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa);
+//					//mfbcc -= c1o2 * (mfStartbcc + mfStartbaa)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa);
+//					//mfcaa -= c1o2 * (mfStartcaa + mfStartacc)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa);
+//					//mfcab -= c1o2 * (mfStartcab + mfStartacb)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa));
+//					//mfcac -= c1o2 * (mfStartcac + mfStartaca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa);
+//					//mfcba -= c1o2 * (mfStartcba + mfStartabc)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa);
+//					//mfcbb -= c1o2 * (mfStartcbb + mfStartabb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa);
+//					//mfcbc -= c1o2 * (mfStartcbc + mfStartaba)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa);
+//					//mfcca -= c1o2 * (mfStartcca + mfStartaac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa);
+//					//mfccb -= c1o2 * (mfStartccb + mfStartaab)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa));
+//					//mfccc -= c1o2 * (mfStartccc + mfStartaaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa);
+//
+//					//mfhaaa =rho*( c1o2 * (mfStartaaa + mfStartccc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa));
+//					//mfhaab =rho*( c1o2 * (mfStartaab + mfStartccb) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)));
+//					//mfhaac =rho*( c1o2 * (mfStartaac + mfStartcca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa));
+//					//mfhaba =rho*( c1o2 * (mfStartaba + mfStartcbc) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa));
+//					//mfhabb =rho*( c1o2 * (mfStartabb + mfStartcbb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa));
+//					//mfhabc =rho*( c1o2 * (mfStartabc + mfStartcba) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa));
+//					//mfhaca =rho*( c1o2 * (mfStartaca + mfStartcac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa));
+//					//mfhacb =rho*( c1o2 * (mfStartacb + mfStartcab) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)));
+//					//mfhacc =rho*( c1o2 * (mfStartacc + mfStartcaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa));
+//					//mfhbaa =rho*( c1o2 * (mfStartbaa + mfStartbcc) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa));
+//					//mfhbab =rho*( c1o2 * (mfStartbab + mfStartbcb) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa));
+//					//mfhbac =rho*( c1o2 * (mfStartbac + mfStartbca) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa));
+//					//mfhbba =rho*( c1o2 * (mfStartbba + mfStartbbc) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa));
+//					//mfhbbb =rho*( (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa)));
+//					//mfhbbc =rho*( c1o2 * (mfStartbbc + mfStartbba) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa));
+//					//mfhbca =rho*( c1o2 * (mfStartbca + mfStartbac) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa));
+//					//mfhbcb =rho*( c1o2 * (mfStartbcb + mfStartbab) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa));
+//					//mfhbcc =rho*( c1o2 * (mfStartbcc + mfStartbaa) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa));
+//					//mfhcaa =rho*( c1o2 * (mfStartcaa + mfStartacc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa));
+//					//mfhcab =rho*( c1o2 * (mfStartcab + mfStartacb) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)));
+//					//mfhcac =rho*( c1o2 * (mfStartcac + mfStartaca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa));
+//					//mfhcba =rho*( c1o2 * (mfStartcba + mfStartabc) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa));
+//					//mfhcbb =rho*( c1o2 * (mfStartcbb + mfStartabb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa));
+//					//mfhcbc =rho*( c1o2 * (mfStartcbc + mfStartaba) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa));
+//					//mfhcca =rho*( c1o2 * (mfStartcca + mfStartaac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa));
+//					//mfhccb =rho*( c1o2 * (mfStartccb + mfStartaab) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)));
+//					//mfhccc =rho*( c1o2 * (mfStartccc + mfStartaaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa));
+//
+//
+//
+//
+//					pStar += pStarStart*(omegaDRho-c1);
+//
+//					mfcbb -= c2o9*pStar;
+//					mfbcb -= c2o9*pStar;
+//					mfbbc -= c2o9*pStar;
+//					mfccb -= c1o18*pStar;
+//					mfacb -= c1o18*pStar;
+//					mfcbc -= c1o18*pStar;
+//					mfabc -= c1o18*pStar;
+//					mfbcc -= c1o18*pStar;
+//					mfbac -= c1o18*pStar;
+//					mfccc -= c1o72*pStar;
+//					mfacc -= c1o72*pStar;
+//					mfcac -= c1o72*pStar;
+//					mfaac -= c1o72*pStar;
+//					mfabb -= c2o9*pStar;
+//					mfbab -= c2o9*pStar;
+//					mfbba -= c2o9*pStar;
+//					mfaab -= c1o18*pStar;
+//					mfcab -= c1o18*pStar;
+//					mfaba -= c1o18*pStar;
+//					mfcba -= c1o18*pStar;
+//					mfbaa -= c1o18*pStar;
+//					mfbca -= c1o18*pStar;
+//					mfaaa -= c1o72*pStar;
+//					mfcaa -= c1o72*pStar;
+//					mfaca -= c1o72*pStar;
+//					mfcca -= c1o72*pStar;
+//					mfbbb -= c4*c2o9*pStar;
+//
+//					mfhbcb = rho*c2o9 * pStar;
+//					mfhbbc = rho*c2o9 * pStar;
+//					mfhcbb = rho*c2o9 * pStar;
+//					mfhccb = rho*c1o18 * pStar;
+//					mfhacb = rho*c1o18 * pStar;
+//					mfhcbc = rho*c1o18 * pStar;
+//					mfhabc = rho*c1o18 * pStar;
+//					mfhbcc = rho*c1o18 * pStar;
+//					mfhbac = rho*c1o18 * pStar;
+//					mfhccc = rho*c1o72 * pStar;
+//					mfhacc = rho*c1o72 * pStar;
+//					mfhcac = rho*c1o72 * pStar;
+//					mfhaac = rho*c1o72 * pStar;
+//					mfhabb = rho*c2o9 * pStar;
+//					mfhbab = rho*c2o9 * pStar;
+//					mfhbba = rho*c2o9 * pStar;
+//					mfhaab = rho*c1o18 * pStar;
+//					mfhcab = rho*c1o18 * pStar;
+//					mfhaba = rho*c1o18 * pStar;
+//					mfhcba = rho*c1o18 * pStar;
+//					mfhbaa = rho*c1o18 * pStar;
+//					mfhbca = rho*c1o18 * pStar;
+//					mfhaaa = rho*c1o72 * pStar;
+//					mfhcaa = rho*c1o72 * pStar;
+//					mfhaca = rho*c1o72 * pStar;
+//					mfhcca = rho*c1o72 * pStar;
+//					mfhbbb = rho*c4 * c2o9 * pStar;
+//
+//					//mfStartbcb =  c2o9  * pStarStart;
+//					//mfStartbbc =  c2o9  * pStarStart;
+//					//mfStartcbb =  c2o9  * pStarStart;
+//					//mfStartccb =  c1o18 * pStarStart;
+//					//mfStartacb =  c1o18 * pStarStart;
+//					//mfStartcbc =  c1o18 * pStarStart;
+//					//mfStartabc =  c1o18 * pStarStart;
+//					//mfStartbcc =  c1o18 * pStarStart;
+//					//mfStartbac =  c1o18 * pStarStart;
+//					//mfStartccc =  c1o72 * pStarStart;
+//					//mfStartacc =  c1o72 * pStarStart;
+//					//mfStartcac =  c1o72 * pStarStart;
+//					//mfStartaac =  c1o72 * pStarStart;
+//					//mfStartabb =  c2o9  * pStarStart;
+//					//mfStartbab =  c2o9  * pStarStart;
+//					//mfStartbba =  c2o9  * pStarStart;
+//					//mfStartaab =  c1o18 * pStarStart;
+//					//mfStartcab =  c1o18 * pStarStart;
+//					//mfStartaba =  c1o18 * pStarStart;
+//					//mfStartcba =  c1o18 * pStarStart;
+//					//mfStartbaa =  c1o18 * pStarStart;
+//					//mfStartbca =  c1o18 * pStarStart;
+//					//mfStartaaa =  c1o72 * pStarStart;
+//					//mfStartcaa =  c1o72 * pStarStart;
+//					//mfStartaca =  c1o72 * pStarStart;
+//					//mfStartcca =  c1o72 * pStarStart;
+//					//mfStartbbb =  c4 * c2o9 * pStarStart;
+//
+//					//LBMReal scaleSplit = 0.5;
+//					//mfStartbcb = mfStartbcb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+//					//mfStartbbc = mfStartbbc*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+//					//mfStartcbb = mfStartcbb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+//					//mfStartccb = mfStartccb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartacb = mfStartacb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartcbc = mfStartcbc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartabc = mfStartabc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartbcc = mfStartbcc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartbac = mfStartbac*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartccc = mfStartccc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartacc = mfStartacc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartcac = mfStartcac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartaac = mfStartaac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartabb = mfStartabb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+//					//mfStartbab = mfStartbab*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+//					//mfStartbba = mfStartbba*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart;
+//					//mfStartaab = mfStartaab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartcab = mfStartcab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartaba = mfStartaba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartcba = mfStartcba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartbaa = mfStartbaa*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartbca = mfStartbca*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart;
+//					//mfStartaaa = mfStartaaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartcaa = mfStartcaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartaca = mfStartaca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartcca = mfStartcca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart;
+//					//mfStartbbb = mfStartbbb*scaleSplit+(c1-scaleSplit)* c4 * c2o9 * pStarStart;
+//
+//
+//					//mfaaa -= c1o2 * (mfStartaaa + mfStartccc);
+//     //               mfaab -= c1o2 * (mfStartaab + mfStartccb);
+//     //               mfaac -= c1o2 * (mfStartaac + mfStartcca);
+//     //               mfaba -= c1o2 * (mfStartaba + mfStartcbc);
+//     //               mfabb -= c1o2 * (mfStartabb + mfStartcbb);
+//     //               mfabc -= c1o2 * (mfStartabc + mfStartcba);
+//     //               mfaca -= c1o2 * (mfStartaca + mfStartcac);
+//     //               mfacb -= c1o2 * (mfStartacb + mfStartcab);
+//     //               mfacc -= c1o2 * (mfStartacc + mfStartcaa);
+//     //               mfbaa -= c1o2 * (mfStartbaa + mfStartbcc);
+//     //               mfbab -= c1o2 * (mfStartbab + mfStartbcb);
+//     //               mfbac -= c1o2 * (mfStartbac + mfStartbca);
+//     //               mfbba -= c1o2 * (mfStartbba + mfStartbbc);
+//					//mfbbb -= (mfStartbbb);
+//     //               mfbbc -= c1o2 * (mfStartbbc + mfStartbba);
+//     //               mfbca -= c1o2 * (mfStartbca + mfStartbac);
+//     //               mfbcb -= c1o2 * (mfStartbcb + mfStartbab);
+//     //               mfbcc -= c1o2 * (mfStartbcc + mfStartbaa);
+//     //               mfcaa -= c1o2 * (mfStartcaa + mfStartacc);
+//     //               mfcab -= c1o2 * (mfStartcab + mfStartacb);
+//     //               mfcac -= c1o2 * (mfStartcac + mfStartaca);
+//     //               mfcba -= c1o2 * (mfStartcba + mfStartabc);
+//     //               mfcbb -= c1o2 * (mfStartcbb + mfStartabb);
+//     //               mfcbc -= c1o2 * (mfStartcbc + mfStartaba);
+//     //               mfcca -= c1o2 * (mfStartcca + mfStartaac);
+//     //               mfccb -= c1o2 * (mfStartccb + mfStartaab);
+//     //               mfccc -= c1o2 * (mfStartccc + mfStartaaa);
+//					//												
+//					//mfhaaa += rho*c1o2 * (mfStartaaa + mfStartccc);
+//					//mfhaab += rho*c1o2 * (mfStartaab + mfStartccb);
+//					//mfhaac += rho*c1o2 * (mfStartaac + mfStartcca);
+//					//mfhaba += rho*c1o2 * (mfStartaba + mfStartcbc);
+//					//mfhabb += rho*c1o2 * (mfStartabb + mfStartcbb);
+//					//mfhabc += rho*c1o2 * (mfStartabc + mfStartcba);
+//					//mfhaca += rho*c1o2 * (mfStartaca + mfStartcac);
+//					//mfhacb += rho*c1o2 * (mfStartacb + mfStartcab);
+//					//mfhacc += rho*c1o2 * (mfStartacc + mfStartcaa);
+//					//mfhbaa += rho*c1o2 * (mfStartbaa + mfStartbcc);
+//					//mfhbab += rho*c1o2 * (mfStartbab + mfStartbcb);
+//					//mfhbac += rho*c1o2 * (mfStartbac + mfStartbca);
+//					//mfhbba += rho*c1o2 * (mfStartbba + mfStartbbc);
+//					//mfhbbb += rho*(mfStartbbb);
+//					//mfhbbc += rho*c1o2 * (mfStartbbc + mfStartbba);
+//					//mfhbca += rho*c1o2 * (mfStartbca + mfStartbac);
+//					//mfhbcb += rho*c1o2 * (mfStartbcb + mfStartbab);
+//					//mfhbcc += rho*c1o2 * (mfStartbcc + mfStartbaa);
+//					//mfhcaa += rho*c1o2 * (mfStartcaa + mfStartacc);
+//					//mfhcab += rho*c1o2 * (mfStartcab + mfStartacb);
+//					//mfhcac += rho*c1o2 * (mfStartcac + mfStartaca);
+//					//mfhcba += rho*c1o2 * (mfStartcba + mfStartabc);
+//					//mfhcbb += rho*c1o2 * (mfStartcbb + mfStartabb);
+//					//mfhcbc += rho*c1o2 * (mfStartcbc + mfStartaba);
+//					//mfhcca += rho*c1o2 * (mfStartcca + mfStartaac);
+//					//mfhccb += rho*c1o2 * (mfStartccb + mfStartaab);
+//					//mfhccc += rho*c1o2 * (mfStartccc + mfStartaaa);
+//					//mfhbcb += c1o6 * c2o9 * deltaPP;
+//					//mfhbbc += c1o6 * c2o9 * deltaPP;
+//					//mfhcbb += c1o6 * c2o9 * deltaPP;
+//					//mfhccb += c1o6 * c1o18 * deltaPP;
+//					//mfhacb += c1o6 * c1o18 * deltaPP;
+//					//mfhcbc += c1o6 * c1o18 * deltaPP;
+//					//mfhabc += c1o6 * c1o18 * deltaPP;
+//					//mfhbcc += c1o6 * c1o18 * deltaPP;
+//					//mfhbac += c1o6 * c1o18 * deltaPP;
+//					//mfhccc += c1o6 * c1o72 * deltaPP;
+//					//mfhacc += c1o6 * c1o72 * deltaPP;
+//					//mfhcac += c1o6 * c1o72 * deltaPP;
+//					//mfhaac += c1o6 * c1o72 * deltaPP;
+//					//mfhabb += c1o6 * c2o9 * deltaPP;
+//					//mfhbab += c1o6 * c2o9 * deltaPP;
+//					//mfhbba += c1o6 * c2o9 * deltaPP;
+//					//mfhaab += c1o6 * c1o18 * deltaPP;
+//					//mfhcab += c1o6 * c1o18 * deltaPP;
+//					//mfhaba += c1o6 * c1o18 * deltaPP;
+//					//mfhcba += c1o6 * c1o18 * deltaPP;
+//					//mfhbaa += c1o6 * c1o18 * deltaPP;
+//					//mfhbca += c1o6 * c1o18 * deltaPP;
+//					//mfhaaa += c1o6 * c1o72 * deltaPP;
+//					//mfhcaa += c1o6 * c1o72 * deltaPP;
+//					//mfhaca += c1o6 * c1o72 * deltaPP;
+//					//mfhcca += c1o6 * c1o72 * deltaPP;
+//					//mfhbbb += c1o6 * c4 * c2o9 * deltaPP;
+//
+//
+//					//mfhbcb = c1o3/rho * c2o9 ;
+//					//mfhbbc = c1o3/rho * c2o9 ;
+//					//mfhcbb = c1o3/rho * c2o9 ;
+//					//mfhccb = c1o3/rho * c1o18 ;
+//					//mfhacb = c1o3/rho * c1o18 ;
+//					//mfhcbc = c1o3/rho * c1o18 ;
+//					//mfhabc = c1o3/rho * c1o18 ;
+//					//mfhbcc = c1o3/rho * c1o18 ;
+//					//mfhbac = c1o3/rho * c1o18 ;
+//					//mfhccc = c1o3/rho * c1o72 ;
+//					//mfhacc = c1o3/rho * c1o72 ;
+//					//mfhcac = c1o3/rho * c1o72 ;
+//					//mfhaac = c1o3/rho * c1o72 ;
+//					//mfhabb = c1o3/rho * c2o9 ;
+//					//mfhbab = c1o3/rho * c2o9 ;
+//					//mfhbba = c1o3/rho * c2o9 ;
+//					//mfhaab = c1o3/rho * c1o18 ;
+//					//mfhcab = c1o3/rho * c1o18 ;
+//					//mfhaba = c1o3/rho * c1o18 ;
+//					//mfhcba = c1o3/rho * c1o18 ;
+//					//mfhbaa = c1o3/rho * c1o18 ;
+//					//mfhbca = c1o3/rho * c1o18 ;
+//					//mfhaaa = c1o3/rho * c1o72 ;
+//					//mfhcaa = c1o3/rho * c1o72 ;
+//					//mfhaca = c1o3/rho * c1o72 ;
+//					//mfhcca = c1o3/rho * c1o72 ;
+//					//mfhbbb = c1/rho;//c1o3/rho * c4 * c2o9 ;
+//
+//
+//					
+//					//mfabb += c1o2 * c2o9 * pStar * (phi[REST] - phi[W]) * rhoToPhi / rho;
+//					//mfbab += c1o2 * c2o9 * pStar * (phi[REST] - phi[S]) * rhoToPhi / rho;
+//					//mfbba += c1o2 * c2o9 * pStar * (phi[REST] - phi[B]) * rhoToPhi / rho;
+//					//mfaab += c1o2 * c1o18 * pStar * (phi[REST] - phi[SW]) * rhoToPhi / rho;
+//					//mfcab += c1o2 * c1o18 * pStar * (phi[REST] - phi[SE]) * rhoToPhi / rho;
+//					//mfaba += c1o2 * c1o18 * pStar * (phi[REST] - phi[BW]) * rhoToPhi / rho;
+//					//mfcba += c1o2 * c1o18 * pStar * (phi[REST] - phi[BE]) * rhoToPhi / rho;
+//					//mfbaa += c1o2 * c1o18 * pStar * (phi[REST] - phi[BS]) * rhoToPhi / rho;
+//					//mfbca += c1o2 * c1o18 * pStar * (phi[REST] - phi[BN]) * rhoToPhi / rho;
+//					//mfaaa += c1o2 * c1o72 * pStar * (phi[REST] - phi[BSW]) * rhoToPhi / rho;
+//					//mfcaa += c1o2 * c1o72 * pStar * (phi[REST] - phi[BSE]) * rhoToPhi / rho;
+//					//mfaca += c1o2 * c1o72 * pStar * (phi[REST] - phi[BNW]) * rhoToPhi / rho;
+//					//mfcca += c1o2 * c1o72 * pStar * (phi[REST] - phi[BNE]) * rhoToPhi / rho;
+//					//mfcbb += c1o2 * c2o9 * pStar * (phi[REST] - phi[E]) * rhoToPhi / rho;
+//					//mfbcb += c1o2 * c2o9 * pStar * (phi[REST] - phi[N]) * rhoToPhi / rho;
+//					//mfbbc += c1o2 * c2o9 * pStar * (phi[REST] - phi[T]) * rhoToPhi / rho;
+//					//mfccb += c1o2 * c1o18 * pStar * (phi[REST] - phi[NE]) * rhoToPhi / rho;
+//					//mfacb += c1o2 * c1o18 * pStar * (phi[REST] - phi[NW]) * rhoToPhi / rho;
+//					//mfcbc += c1o2 * c1o18 * pStar * (phi[REST] - phi[TE]) * rhoToPhi / rho;
+//					//mfabc += c1o2 * c1o18 * pStar * (phi[REST] - phi[TW]) * rhoToPhi / rho;
+//					//mfbcc += c1o2 * c1o18 * pStar * (phi[REST] - phi[TN]) * rhoToPhi / rho;
+//					//mfbac += c1o2 * c1o18 * pStar * (phi[REST] - phi[TS]) * rhoToPhi / rho;
+//					//mfccc += c1o2 * c1o72 * pStar * (phi[REST] - phi[TNE]) * rhoToPhi / rho;
+//					//mfacc += c1o2 * c1o72 * pStar * (phi[REST] - phi[TNW]) * rhoToPhi / rho;
+//					//mfcac += c1o2 * c1o72 * pStar * (phi[REST] - phi[TSE]) * rhoToPhi / rho;
+//					//mfaac += c1o2 * c1o72 * pStar * (phi[REST] - phi[TSW]) * rhoToPhi / rho;
+//					
+//					///////////////
+//					//mfabb += (pBefore-pStar) * c2o9  ;
+//					//mfbab += (pBefore-pStar) * c2o9  ;
+//					//mfbba += (pBefore-pStar) * c2o9  ;
+//					//mfaab += (pBefore-pStar) * c1o18 ;
+//					//mfcab += (pBefore-pStar) * c1o18 ;
+//					//mfaba += (pBefore-pStar) * c1o18 ;
+//					//mfcba += (pBefore-pStar) * c1o18 ;
+//					//mfbaa += (pBefore-pStar) * c1o18 ;
+//					//mfbca += (pBefore-pStar) * c1o18 ;
+//					//mfaaa += (pBefore-pStar) * c1o72 ;
+//					//mfcaa += (pBefore-pStar) * c1o72 ;
+//					//mfaca += (pBefore-pStar) * c1o72 ;
+//					//mfcca += (pBefore-pStar) * c1o72 ;
+//					//mfcbb += (pBefore-pStar) * c2o9  ;
+//					//mfbcb += (pBefore-pStar) * c2o9  ;
+//					//mfbbc += (pBefore-pStar) * c2o9  ;
+//					//mfccb += (pBefore-pStar) * c1o18 ;
+//					//mfacb += (pBefore-pStar) * c1o18 ;
+//					//mfcbc += (pBefore-pStar) * c1o18 ;
+//					//mfabc += (pBefore-pStar) * c1o18 ;
+//					//mfbcc += (pBefore-pStar) * c1o18 ;
+//					//mfbac += (pBefore-pStar) * c1o18 ;
+//					//mfccc += (pBefore-pStar) * c1o72 ;
+//					//mfacc += (pBefore-pStar) * c1o72 ;
+//					//mfcac += (pBefore-pStar) * c1o72 ;
+//					//mfaac += (pBefore-pStar) * c1o72 ;
+//					//mfbbb += (pBefore-pStar) * 8.0 / 9.0;
+//
+//					//mfabb = (pBefore ) * c2o9;
+//					//mfbab = (pBefore ) * c2o9;
+//					//mfbba = (pBefore ) * c2o9;
+//					//mfaab = (pBefore ) * c1o16;
+//					//mfcab = (pBefore ) * c1o16;
+//					//mfaba = (pBefore ) * c1o16;
+//					//mfcba = (pBefore ) * c1o16;
+//					//mfbaa = (pBefore ) * c1o16;
+//					//mfbca = (pBefore ) * c1o16;
+//					//mfaaa = (pBefore ) * c1o72;
+//					//mfcaa = (pBefore ) * c1o72;
+//					//mfaca = (pBefore ) * c1o72;
+//					//mfcca = (pBefore ) * c1o72;
+//					//mfcbb = (pBefore ) * c2o9;
+//					//mfbcb = (pBefore ) * c2o9;
+//					//mfbbc = (pBefore ) * c2o9;
+//					//mfccb = (pBefore ) * c1o16;
+//					//mfacb = (pBefore ) * c1o16;
+//					//mfcbc = (pBefore ) * c1o16;
+//					//mfabc = (pBefore ) * c1o16;
+//					//mfbcc = (pBefore ) * c1o16;
+//					//mfbac = (pBefore ) * c1o16;
+//					//mfccc = (pBefore ) * c1o72;
+//					//mfacc = (pBefore ) * c1o72;
+//					//mfcac = (pBefore ) * c1o72;
+//					//mfaac = (pBefore ) * c1o72;
+//					//mfbbb = (pBefore ) * 8.0 / 9.0;
+//					///////////////////
+//
+//					//////////////////////////////////////////////////////////////////////////
+//					//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(drho - rho_post);
+//					//               LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - 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, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post)
+//					//					   + " dif=" + UbSystem::toString(dif)
+//					//					   + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
+//					//				   //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3));
+//					//				   //exit(EXIT_FAILURE);
+//					//			   }
+//					//#endif
+//
+//					if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post))
+//						UB_THROW(UbException(
+//							UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," +
+//							UbSystem::toString(x2) + "," + UbSystem::toString(x3)));
+//
+//					//////////////////////////////////////////////////////////////////////////
+//					//write distribution
+//					//////////////////////////////////////////////////////////////////////////
+//					(*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3)         = mfabb         ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3)         = mfbab         ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)         = mfbba         ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3)        = mfaab        ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3)       = mfcab       ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3)        = mfaba        ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3)       = mfcba       ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3)        = mfbaa        ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3)       = mfbca       ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3)       = mfaaa       ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfcaa      ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfaca      ;//* rho * c1o3;
+//					(*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfcca     ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)     = mfcbb     ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3)     = mfbcb     ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p)     = mfbbc     ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfccb   ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3)    = mfacb    ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfcbc   ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p)    = mfabc    ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfbcc   ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p)    = mfbac    ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfacc  ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfcac  ;//* rho * c1o3;
+//					(*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfaac   ;//* rho * c1o3;
+//
+//					(*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3;
+//
+//			
+//					(*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3)         = mfhabb;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3)         = mfhbab;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3)         = mfhbba;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3)        = mfhaab;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3)       = mfhcab;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3)        = mfhaba;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3)       = mfhcba;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3)        = mfhbaa;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3)       = mfhbca;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3)       = mfhaaa;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3)      = mfhcaa;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3)      = mfhaca;//* rho * c1o3;
+//					(*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3)     = mfhcca;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3)     = mfhcbb;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3)     = mfhbcb;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p)     = mfhbbc;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3)   = mfhccb;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3)    = mfhacb;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p)   = mfhcbc;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p)    = mfhabc;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p)   = mfhbcc;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p)    = mfhbac;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p)  = mfhacc;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p)  = mfhcac;//* rho * c1o3;
+//					(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p)   = mfhaac;//* rho * c1o3;
+//
+//					(*this->zeroDistributionsH2)(x1, x2, x3) = mfhbbb;// *rho* c1o3;
+//
+//																	// !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->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+//						mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+//						mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+//						mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+//						mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+//						mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+//						mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+//						mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+//						mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+//						mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+//						mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+//						mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+//						mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+//						mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+//						mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+//						mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+//						mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+//						mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+//						mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+//						mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+//						mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+//						mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+//						mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+//						mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+//						mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+//						mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+//						mfbbb = (*this->zeroDistributionsH1)(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>
+//						//!
+//						////////////////////////////////////////////////////////////////////////////////////
+//						// 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;
+//						////////////////////////////////////////////////////////////////////////////////////
+//						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;
+//
+//						//31.05.2022 addaptive mobility
+//						//omegaD = c1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200);
+//						//omegaD = c2 * (concentration * (concentration - c1)) / (-c6 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1))+1.0e-200);
+//						// collision of 1st order moments
+//						cx = cx * (c1 - omegaD) + omegaD * vvx * concentration +
+//							normX1 * (c1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
+//						cy = cy * (c1 - omegaD) + omegaD * vvy * concentration +
+//							normX2 * (c1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
+//						cz = cz * (c1 - omegaD) + omegaD * vvz * concentration +
+//							normX3 * (c1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale;
+//
+//						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;
+//
+//						// 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->localDistributionsH1)(D3Q27System::ET_E,   x1,  x2,  x3) = mfabb;
+//						(*this->localDistributionsH1)(D3Q27System::ET_N,   x1,  x2,  x3) = mfbab;
+//						(*this->localDistributionsH1)(D3Q27System::ET_T,   x1,  x2,  x3) = mfbba;
+//						(*this->localDistributionsH1)(D3Q27System::ET_NE,  x1,  x2,  x3) = mfaab;
+//						(*this->localDistributionsH1)(D3Q27System::ET_NW,  x1p, x2,  x3) = mfcab;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TE,  x1,  x2,  x3) = mfaba;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TW,  x1p, x2,  x3) = mfcba;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TN,  x1,  x2,  x3) = mfbaa;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TS,  x1,  x2p, x3) = mfbca;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TNE, x1,  x2,  x3) = mfaaa;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2,  x3) = mfcaa;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TSE, x1,  x2p, x3) = mfaca;
+//						(*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;
+//
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_W,   x1p, x2,  x3 ) = mfcbb;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_S,   x1,  x2p, x3 ) = mfbcb;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_B,   x1,  x2,  x3p) = mfbbc;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SW,  x1p, x2p, x3 ) = mfccb;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_SE,  x1,  x2p, x3 ) = mfacb;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BW,  x1p, x2,  x3p) = mfcbc;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BE,  x1,  x2,  x3p) = mfabc;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BS,  x1,  x2p, x3p) = mfbcc;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BN,  x1,  x2,  x3p) = mfbac;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1,  x2p, x3p) = mfacc;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2,  x3p) = mfcac;
+//						(*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1,  x2,  x3p) = mfaac;
+//
+//						(*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb;
+//
+//
+//
+//
+//					}
+//				}
+//			}
+//		}
+//	}
+//}
+////////////////////////////////////////////////////////////////////////////
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi()
+//{
+//	using namespace D3Q27System;
+//	return 3.0* ((WEIGTH[TNE] * (((phi[TNE] - phi[BSW]) + (phi[BSE] - phi[TNW])) + ((phi[TSE] - phi[BNW]) + (phi[BNE] - phi[TSW])))
+//		+ WEIGTH[NE] * (((phi[TE] - phi[BW]) + (phi[BE] - phi[TW])) + ((phi[SE] - phi[NW]) + (phi[NE] - phi[SW])))) +
+//		+WEIGTH[N] * (phi[E] - phi[W]));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi()
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((phi[TNE] - phi[BSW]) - (phi[BSE] - phi[TNW])) + ((phi[BNE] - phi[TSW])- (phi[TSE] - phi[BNW])))
+//		+ WEIGTH[NE] * (((phi[TN] - phi[BS]) + (phi[BN] - phi[TS])) + ((phi[NE] - phi[SW])- (phi[SE] - phi[NW])))) +
+//		+WEIGTH[N] * (phi[N] - phi[S]));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi()
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((phi[TNE] - phi[BSW]) - (phi[BSE] - phi[TNW])) + ((phi[TSE] - phi[BNW]) - (phi[BNE] - phi[TSW])))
+//		+ WEIGTH[NE] * (((phi[TE] - phi[BW]) - (phi[BE] - phi[TW])) + ((phi[TS] - phi[BN]) + (phi[TN] - phi[BS])))) +
+//		+WEIGTH[N] * (phi[T] - phi[B]));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(LBMReal rhoL,LBMReal rhoDIV)
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((1.0/(rhoL+rhoDIV*phi[TNE]) - 1.0 / (rhoL + rhoDIV * phi[BSW])) + (1.0 / (rhoL + rhoDIV * phi[BSE]) - 1.0 / (rhoL + rhoDIV * phi[TNW]))) + ((1.0 / (rhoL + rhoDIV * phi[TSE]) - 1.0 / (rhoL + rhoDIV * phi[BNW])) + (1.0 / (rhoL + rhoDIV * phi[BNE]) - 1.0 / (rhoL + rhoDIV * phi[TSW]))))
+//		+ WEIGTH[NE] * (((1.0 / (rhoL + rhoDIV * phi[TE]) - 1.0 / (rhoL + rhoDIV * phi[BW])) + (1.0 / (rhoL + rhoDIV * phi[BE]) - 1.0 / (rhoL + rhoDIV * phi[TW]))) + ((1.0 / (rhoL + rhoDIV * phi[SE]) - 1.0 / (rhoL + rhoDIV * phi[NW])) + (1.0 / (rhoL + rhoDIV * phi[NE]) - 1.0 / (rhoL + rhoDIV * phi[SW]))))) +
+//		+WEIGTH[N] * (1.0 / (rhoL + rhoDIV * phi[E]) - 1.0 / (rhoL + rhoDIV * phi[W])));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(LBMReal rhoL,LBMReal rhoDIV)
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((1.0 / (rhoL + rhoDIV * phi[TNE]) - 1.0 / (rhoL + rhoDIV * phi[BSW])) - (1.0 / (rhoL + rhoDIV * phi[BSE]) - 1.0 / (rhoL + rhoDIV * phi[TNW]))) + ((1.0 / (rhoL + rhoDIV * phi[BNE]) - 1.0 / (rhoL + rhoDIV * phi[TSW])) - (1.0 / (rhoL + rhoDIV * phi[TSE]) - 1.0 / (rhoL + rhoDIV * phi[BNW]))))
+//		+ WEIGTH[NE] * (((1.0 / (rhoL + rhoDIV * phi[TN]) - 1.0 / (rhoL + rhoDIV * phi[BS])) + (1.0 / (rhoL + rhoDIV * phi[BN]) - 1.0 / (rhoL + rhoDIV * phi[TS]))) + ((1.0 / (rhoL + rhoDIV * phi[NE]) - 1.0 / (rhoL + rhoDIV * phi[SW])) - (1.0 / (rhoL + rhoDIV * phi[SE]) - 1.0 / (rhoL + rhoDIV * phi[NW]))))) +
+//		+WEIGTH[N] * (1.0 / (rhoL + rhoDIV * phi[N]) - 1.0 / (rhoL + rhoDIV * phi[S])));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(LBMReal rhoL, LBMReal rhoDIV)
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((1.0 / (rhoL + rhoDIV * phi[TNE]) - 1.0 / (rhoL + rhoDIV * phi[BSW])) - (1.0 / (rhoL + rhoDIV * phi[BSE]) - 1.0 / (rhoL + rhoDIV * phi[TNW]))) + ((1.0 / (rhoL + rhoDIV * phi[TSE]) - 1.0 / (rhoL + rhoDIV * phi[BNW])) - (1.0 / (rhoL + rhoDIV * phi[BNE]) - 1.0 / (rhoL + rhoDIV * phi[TSW]))))
+//		+ WEIGTH[NE] * (((1.0 / (rhoL + rhoDIV * phi[TE]) - 1.0 / (rhoL + rhoDIV * phi[BW])) - (1.0 / (rhoL + rhoDIV * phi[BE]) - 1.0 / (rhoL + rhoDIV * phi[TW]))) + ((1.0 / (rhoL + rhoDIV * phi[TS]) - 1.0 / (rhoL + rhoDIV * phi[BN])) + (1.0 / (rhoL + rhoDIV * phi[TN]) - 1.0 / (rhoL + rhoDIV * phi[BS]))))) +
+//		+WEIGTH[N] * (1.0 / (rhoL + rhoDIV * phi[T]) - 1.0 / (rhoL + rhoDIV * phi[B])));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2()
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) + (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) + (phi2[BNE] - phi2[TSW])))
+//		+ WEIGTH[NE] * (((phi2[TE] - phi2[BW]) + (phi2[BE] - phi2[TW])) + ((phi2[SE] - phi2[NW]) + (phi2[NE] - phi2[SW])))) +
+//		+WEIGTH[N] * (phi2[E] - phi2[W]));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2()
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[BNE] - phi2[TSW]) - (phi2[TSE] - phi2[BNW])))
+//		+ WEIGTH[NE] * (((phi2[TN] - phi2[BS]) + (phi2[BN] - phi2[TS])) + ((phi2[NE] - phi2[SW]) - (phi2[SE] - phi2[NW])))) +
+//		+WEIGTH[N] * (phi2[N] - phi2[S]));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2()
+//{
+//	using namespace D3Q27System;
+//	return 3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW])))
+//		+ WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) +
+//		+WEIGTH[N] * (phi2[T] - phi2[B]));
+//}
+//
+//LBMReal MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi()
+//{
+//	using namespace D3Q27System;
+//	LBMReal sum = 0.0;
+//	sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000])))
+//		+ (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000]))));
+//	sum += WEIGTH[DIR_0PP] * (
+//			(((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000])))
+//		+	(((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000])))
+//		+	(((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))
+//		);
+//	sum += WEIGTH[DIR_00P] * (
+//			((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000]))
+//		+	((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000]))
+//		+	((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))
+//		);
+//
+//
+//	return 6.0 * sum;
+//}
+//
+//void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);
+//					h[N]   = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);
+//					h[T]   = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);
+//					h[NE]  = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);
+//					h[NW]  = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);
+//					h[TE]  = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);
+//					h[TW]  = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);
+//					h[TN]  = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);
+//					h[TS]  = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);
+//					h[TNE] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);
+//					h[TNW] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);
+//					h[TSE] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);
+//					h[TSW] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);
+//
+//					h[W]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);
+//					h[S]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);
+//					h[B]   = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);
+//					h[SW]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);
+//					h[SE]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);
+//					h[BW]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);
+//					h[BE]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);
+//					h[BS]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);
+//					h[BN]  = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);
+//					h[BSW] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+//					h[BSE] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);
+//					h[BNW] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);
+//					h[BNE] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);
+//
+//					h[REST] = (*this->zeroDistributionsH1)(x1, x2, x3);
+//				}
+//			}
+//		}
+//	}
+//}
+//
+//void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::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 {
+//			//phi[k] = (*ph)(x1 , x2, x3 );// neutral wetting
+//			phi[k] = 0.0;//unwetting
+//		}
+//	}
+//}
+//
+//void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors2(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2,
+//	int x3)
+//{
+//	using namespace D3Q27System;
+//
+//	SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray();
+//
+//	phi2[REST] = (*ph)(x1, x2, x3);
+//
+//
+//	for (int k = FSTARTDIR; k <= FENDDIR; k++) {
+//
+//		if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) {
+//			phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]);
+//		}
+//		else {
+//			phi2[k] = 0.05;
+//		}
+//	}
+//}
+//
+//void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::swapDistributions()
+//{
+//	LBMKernel::swapDistributions();
+//	dataSet->getHdistributions()->swap();
+//	dataSet->getH2distributions()->swap();
+//}
+//
+//void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initForcing()
+//{
+//	muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3);
+//	muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3);
+//	muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3);
+//
+//	muDeltaT = deltaT;
+//
+//	muForcingX1.DefineVar("dt", &muDeltaT);
+//	muForcingX2.DefineVar("dt", &muDeltaT);
+//	muForcingX3.DefineVar("dt", &muDeltaT);
+//
+//	muNu = (1.0 / 3.0) * (1.0 / collFactor - 1.0 / 2.0);
+//
+//	muForcingX1.DefineVar("nu", &muNu);
+//	muForcingX2.DefineVar("nu", &muNu);
+//	muForcingX3.DefineVar("nu", &muNu);
+//
+//	muForcingX1.DefineVar("rho",&muRho); 
+//	muForcingX2.DefineVar("rho",&muRho); 
+//	muForcingX3.DefineVar("rho",&muRho); 
+//
+//}
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
new file mode 100644
index 000000000..c5bc35604
--- /dev/null
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
@@ -0,0 +1,125 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h
+//! \ingroup LBMKernel
+//! \author M. Geier, K. Kutscher, Hesameddin Safari
+//=======================================================================================
+
+#ifndef MultiphaseSimpleVelocityBaseExternalPressureLBMKernel_H
+#define MultiphaseSimpleVelocityBaseExternalPressureLBMKernel_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  M. Geier, K. Kutscher, Hesameddin Safari
+class MultiphaseSimpleVelocityBaseExternalPressureLBMKernel : public LBMKernel
+{
+public:
+    MultiphaseSimpleVelocityBaseExternalPressureLBMKernel();
+    virtual ~MultiphaseSimpleVelocityBaseExternalPressureLBMKernel(void) = default;
+    void calculate(int step) override;
+    SPtr<LBMKernel> clone() override;
+
+
+    ///refactor
+    //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure;
+
+
+    double getCalculationTime() override { return .0; }
+protected:
+    virtual void initDataSet();
+    void swapDistributions() override;
+
+    void initForcing();
+
+    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);
+
+    LBMReal f1[D3Q27System::ENDF+1];
+
+    CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF;
+    CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF;
+    CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsF;
+
+    CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1;
+    CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1;
+    CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH1;
+
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr   zeroDistributionsH2;
+
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressureOld;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr p1Old;
+
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr divU; 
+
+    LBMReal h  [D3Q27System::ENDF+1];
+    LBMReal h2[D3Q27System::ENDF + 1];
+    LBMReal g  [D3Q27System::ENDF+1];
+    LBMReal phi[D3Q27System::ENDF+1];
+    LBMReal phi2[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_rhoInv(LBMReal rhoL, LBMReal rhoDIV);
+	LBMReal gradX2_rhoInv(LBMReal rhoL, LBMReal rhoDIV);
+	LBMReal gradX3_rhoInv(LBMReal rhoL, LBMReal rhoDIV);
+    LBMReal gradX1_phi2();
+    LBMReal gradX2_phi2();
+    LBMReal gradX3_phi2();
+    void computePhasefield();
+    void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3);
+    void findNeighbors2(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3);
+
+    LBMReal nabla2_phi();
+
+    mu::value_type muX1,muX2,muX3;
+    mu::value_type muDeltaT;
+    mu::value_type muNu;
+    mu::value_type muRho;
+    LBMReal forcingX1;
+    LBMReal forcingX2;
+    LBMReal forcingX3;
+};
+
+#endif
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
index 229ff921a..db1397374 100644
--- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp
@@ -468,7 +468,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step)
 			   uy2 = vvyF * vvyF;
 			   uz2 = vvzF * vvzF;
 			   LBMReal forcingTerm[D3Q27System::ENDF + 1];
-			   for (int dir = STARTF; dir <= (FENDDIR); dir++) {
+			   for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) {
 				   LBMReal velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF;
 				   LBMReal velSq1 = velProd * velProd;
 				   LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)));
diff --git a/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
index 623fcade6..28b035f71 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp
@@ -48,6 +48,7 @@ MultiphaseVelocityFormInitDistributionsBlockVisitor::MultiphaseVelocityFormInitD
 	this->setVx2(0.0);
 	this->setVx3(0.0);
 	this->setRho(0.0);
+	this->setPressure(0.0);
 }
 //////////////////////////////////////////////////////////////////////////
 void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( const mu::Parser& parser)  
@@ -79,6 +80,11 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( const mu::Pars
 	this->checkFunction(parser); 
 	this->muPhi = parser;  
 }
+void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(const mu::Parser& parser)
+{
+	this->checkFunction(parser);
+	this->muPressure = parser;
+}
 //////////////////////////////////////////////////////////////////////////
 void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( const std::string& muParserString)  
 { 
@@ -109,6 +115,11 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( const std::str
 	this->muPhi.SetExpr(muParserString); 
 	this->checkFunction(muPhi); 
 }
+void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(const std::string& muParserString)
+{
+	this->muPressure.SetExpr(muParserString);
+	this->checkFunction(muPressure);
+}
 //////////////////////////////////////////////////////////////////////////
 void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( LBMReal vx1 ) 
 { 
@@ -153,6 +164,7 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3
 	this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3);
 	this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3);
 	this->muPhi.DefineVar("x1",&x1); this->muPhi.DefineVar("x2",&x2); this->muPhi.DefineVar("x3",&x3);
+	this->muPressure.DefineVar("x1", &x1); this->muPressure.DefineVar("x2", &x2); this->muPressure.DefineVar("x3", &x3);
 
 	
 
@@ -169,6 +181,8 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3
         SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); 
 		SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions());
         SPtr<EsoTwist3D> distributionsH2 = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getH2distributions());
+		SPtr<PhaseFieldArray3D> pressure = dynamicPointerCast<PhaseFieldArray3D>(kernel->getDataSet()->getPressureField());
+
 
 		//LBMReal phiL = kernel->getPhiL();
 		//LBMReal phiH = kernel->getPhiH();
@@ -184,13 +198,16 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3
                     x2              = coords[1];
                     x3              = coords[2];
 
-					LBMReal vx1 = 0, vx2 = 0, vx3 = 0, p1 = 0, phi = 0;
-					p1  = 0.0;
-					//p1 = muRho.Eval();
+					LBMReal vx1 = 0, vx2 = 0, vx3 = 0, p1 = 0, phi = 0,pres=0;
+					//p1  = 0.0;
+					p1 = muRho.Eval();
 					vx1 = muVx1.Eval();
 					vx2 = muVx2.Eval();
 					vx3 = muVx3.Eval();
 					phi = muPhi.Eval();
+					pres = muPressure.Eval();
+					(*pressure)(ix1, ix2, ix3) = pres;
+
 					
 					//rho = phi*1.0 + (1.0-phi)/densityRatio;
 					//LBMReal rhoH = 1.0;
@@ -250,66 +267,68 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3
 					distributionsF->setDistribution(f, ix1, ix2, ix3);
 					distributionsF->setDistributionInv(f, ix1, ix2, ix3);
 
-					f[DIR_P00]    =  phi * feq[DIR_P00]    ;// / rho;
-					f[DIR_M00]    =  phi * feq[DIR_M00]    ;// / rho;
-					f[DIR_0P0]    =  phi * feq[DIR_0P0]    ;// / rho;
-					f[DIR_0M0]    =  phi * feq[DIR_0M0]    ;// / rho;
-					f[DIR_00P]    =  phi * feq[DIR_00P]    ;// / rho;
-					f[DIR_00M]    =  phi * feq[DIR_00M]    ;// / rho;
-					f[DIR_PP0]   =  phi * feq[DIR_PP0]   ;// / rho;
-					f[DIR_MM0]   =  phi * feq[DIR_MM0]   ;// / rho;
-					f[DIR_PM0]   =  phi * feq[DIR_PM0]   ;// / rho;
-					f[DIR_MP0]   =  phi * feq[DIR_MP0]   ;// / rho;
-					f[DIR_P0P]   =  phi * feq[DIR_P0P]   ;// / rho;
-					f[DIR_M0M]   =  phi * feq[DIR_M0M]   ;// / rho;
-					f[DIR_P0M]   =  phi * feq[DIR_P0M]   ;// / rho;
-					f[DIR_M0P]   =  phi * feq[DIR_M0P]   ;// / rho;
-					f[DIR_0PP]   =  phi * feq[DIR_0PP]   ;// / rho;
-					f[DIR_0MM]   =  phi * feq[DIR_0MM]   ;// / rho;
-					f[DIR_0PM]   =  phi * feq[DIR_0PM]   ;// / rho;
-					f[DIR_0MP]   =  phi * feq[DIR_0MP]   ;// / rho;
-					f[DIR_PPP]  =  phi * feq[DIR_PPP]  ;// / rho;
-					f[DIR_MPP]  =  phi * feq[DIR_MPP]  ;// / rho;
-					f[DIR_PMP]  =  phi * feq[DIR_PMP]  ;// / rho;
-					f[DIR_MMP]  =  phi * feq[DIR_MMP]  ;// / rho;
-					f[DIR_PPM]  =  phi * feq[DIR_PPM]  ;// / rho;
-					f[DIR_MPM]  =  phi * feq[DIR_MPM]  ;// / rho;
-					f[DIR_PMM]  =  phi * feq[DIR_PMM]  ;// / rho;
-					f[DIR_MMM]  =  phi * feq[DIR_MMM]  ;// / rho;
-					f[DIR_000] =  phi * feq[DIR_000] ;// / rho;
+					f[DIR_000] = phi * feq[DIR_000];        // / rho;
+					f[DIR_P00] = phi * feq[DIR_P00]    ;// / rho;
+					f[DIR_M00] = phi * feq[DIR_M00]    ;// / rho;
+					f[DIR_0P0] = phi * feq[DIR_0P0]    ;// / rho;
+					f[DIR_0M0] = phi * feq[DIR_0M0]    ;// / rho;
+					f[DIR_00P] = phi * feq[DIR_00P]    ;// / rho;
+					f[DIR_00M] = phi * feq[DIR_00M]    ;// / rho;
+					f[DIR_PP0] = phi * feq[DIR_PP0]   ;// / rho;
+					f[DIR_MM0] = phi * feq[DIR_MM0]   ;// / rho;
+					f[DIR_PM0] = phi * feq[DIR_PM0]   ;// / rho;
+					f[DIR_MP0] = phi * feq[DIR_MP0]   ;// / rho;
+					f[DIR_P0P] = phi * feq[DIR_P0P]   ;// / rho;
+					f[DIR_M0M] = phi * feq[DIR_M0M]   ;// / rho;
+					f[DIR_P0M] = phi * feq[DIR_P0M]   ;// / rho;
+					f[DIR_M0P] = phi * feq[DIR_M0P]   ;// / rho;
+					f[DIR_0PP] = phi * feq[DIR_0PP]   ;// / rho;
+					f[DIR_0MM] = phi * feq[DIR_0MM]   ;// / rho;
+					f[DIR_0PM] = phi * feq[DIR_0PM]   ;// / rho;
+					f[DIR_0MP] = phi * feq[DIR_0MP]   ;// / rho;
+					f[DIR_PPP] = phi * feq[DIR_PPP]  ;// / rho;
+					f[DIR_MPP] = phi * feq[DIR_MPP]  ;// / rho;
+					f[DIR_PMP] = phi * feq[DIR_PMP]  ;// / rho;
+					f[DIR_MMP] = phi * feq[DIR_MMP]  ;// / rho;
+					f[DIR_PPM] = phi * feq[DIR_PPM]  ;// / rho;
+					f[DIR_MPM] = phi * feq[DIR_MPM]  ;// / rho;
+					f[DIR_PMM] = phi * feq[DIR_PMM]  ;// / rho;
+					f[DIR_MMM] =  phi * feq[DIR_MMM]  ;// / rho;
+					
 
 					distributionsH->setDistribution(f, ix1, ix2, ix3);
 					distributionsH->setDistributionInv(f, ix1, ix2, ix3);
 
 					if (distributionsH2) {
 
-						f[DIR_P00]    = (1.-phi) * feq[DIR_P00]   ;// / rho;
-						f[DIR_M00]    = (1.-phi) * feq[DIR_M00]   ;// / rho;
-						f[DIR_0P0]    = (1.-phi) * feq[DIR_0P0]   ;// / rho;
-						f[DIR_0M0]    = (1.-phi) * feq[DIR_0M0]   ;// / rho;
-						f[DIR_00P]    = (1.-phi) * feq[DIR_00P]   ;// / rho;
-						f[DIR_00M]    = (1.-phi) * feq[DIR_00M]   ;// / rho;
-						f[DIR_PP0]   = (1.-phi) * feq[DIR_PP0]  ;// / rho;
-						f[DIR_MM0]   = (1.-phi) * feq[DIR_MM0]  ;// / rho;
-						f[DIR_PM0]   = (1.-phi) * feq[DIR_PM0]  ;// / rho;
-						f[DIR_MP0]   = (1.-phi) * feq[DIR_MP0]  ;// / rho;
-						f[DIR_P0P]   = (1.-phi) * feq[DIR_P0P]  ;// / rho;
-						f[DIR_M0M]   = (1.-phi) * feq[DIR_M0M]  ;// / rho;
-						f[DIR_P0M]   = (1.-phi) * feq[DIR_P0M]  ;// / rho;
-						f[DIR_M0P]   = (1.-phi) * feq[DIR_M0P]  ;// / rho;
-						f[DIR_0PP]   = (1.-phi) * feq[DIR_0PP]  ;// / rho;
-						f[DIR_0MM]   = (1.-phi) * feq[DIR_0MM]  ;// / rho;
-						f[DIR_0PM]   = (1.-phi) * feq[DIR_0PM]  ;// / rho;
-						f[DIR_0MP]   = (1.-phi) * feq[DIR_0MP]  ;// / rho;
-						f[DIR_PPP]  = (1.-phi) * feq[DIR_PPP] ;// / rho;
-						f[DIR_MPP]  = (1.-phi) * feq[DIR_MPP] ;// / rho;
-						f[DIR_PMP]  = (1.-phi) * feq[DIR_PMP] ;// / rho;
-						f[DIR_MMP]  = (1.-phi) * feq[DIR_MMP] ;// / rho;
-						f[DIR_PPM]  = (1.-phi) * feq[DIR_PPM] ;// / rho;
-						f[DIR_MPM]  = (1.-phi) * feq[DIR_MPM] ;// / rho;
-						f[DIR_PMM]  = (1.-phi) * feq[DIR_PMM] ;// / rho;
-						f[DIR_MMM]  = (1.-phi) * feq[DIR_MMM] ;// / rho;
-						f[DIR_000] = (1.-phi) * feq[DIR_000];//  / rho;
+						f[DIR_000] = 0;//(1. - phi) * feq[DIR_000]; //  / rho;
+						f[DIR_P00] = 0;//(1.-phi) * feq[DIR_P00]   ;// / rho;
+						f[DIR_M00] = 0;//(1.-phi) * feq[DIR_M00]   ;// / rho;
+						f[DIR_0P0] = 0;//(1.-phi) * feq[DIR_0P0]   ;// / rho;
+						f[DIR_0M0] = 0;//(1.-phi) * feq[DIR_0M0]   ;// / rho;
+						f[DIR_00P] = 0;//(1.-phi) * feq[DIR_00P]   ;// / rho;
+						f[DIR_00M] = 0;//(1.-phi) * feq[DIR_00M]   ;// / rho;
+						f[DIR_PP0] = 0;//(1.-phi) * feq[DIR_PP0]  ;// / rho;
+						f[DIR_MM0] = 0;//(1.-phi) * feq[DIR_MM0]  ;// / rho;
+						f[DIR_PM0] = 0;//(1.-phi) * feq[DIR_PM0]  ;// / rho;
+						f[DIR_MP0] = 0;//(1.-phi) * feq[DIR_MP0]  ;// / rho;
+						f[DIR_P0P] = 0;//(1.-phi) * feq[DIR_P0P]  ;// / rho;
+						f[DIR_M0M] = 0;//(1.-phi) * feq[DIR_M0M]  ;// / rho;
+						f[DIR_P0M] = 0;//(1.-phi) * feq[DIR_P0M]  ;// / rho;
+						f[DIR_M0P] = 0;//(1.-phi) * feq[DIR_M0P]  ;// / rho;
+						f[DIR_0PP] = 0;//(1.-phi) * feq[DIR_0PP]  ;// / rho;
+						f[DIR_0MM] = 0;//(1.-phi) * feq[DIR_0MM]  ;// / rho;
+						f[DIR_0PM] = 0;//(1.-phi) * feq[DIR_0PM]  ;// / rho;
+						f[DIR_0MP] = 0;//(1.-phi) * feq[DIR_0MP]  ;// / rho;
+						f[DIR_PPP] = 0;//(1.-phi) * feq[DIR_PPP] ;// / rho;
+						f[DIR_MPP] = 0;//(1.-phi) * feq[DIR_MPP] ;// / rho;
+						f[DIR_PMP] = 0;//(1.-phi) * feq[DIR_PMP] ;// / rho;
+						f[DIR_MMP] = 0;//(1.-phi) * feq[DIR_MMP] ;// / rho;
+						f[DIR_PPM] = 0;//(1.-phi) * feq[DIR_PPM] ;// / rho;
+						f[DIR_MPM] = 0;//(1.-phi) * feq[DIR_MPM] ;// / rho;
+						f[DIR_PMM] = 0;//(1.-phi) * feq[DIR_PMM] ;// / rho;
+						f[DIR_MMM] = 0;//(1.-phi) * feq[DIR_MMM] ;// / rho;
+						
 
                         distributionsH2->setDistribution(f, ix1, ix2, ix3);
                         distributionsH2->setDistributionInv(f, ix1, ix2, ix3);                    
@@ -349,3 +368,10 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::setNu( LBMReal nu )
 	this->nu = nu;
 }
 
+void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(LBMReal pres)
+{
+	this->muPressure.SetExpr(UbSystem::toString(pres, D3Q27RealLim::digits10));
+	this->checkFunction(muPressure);
+
+}
+
diff --git a/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h
index 72841a7c5..553cfe75b 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h
@@ -65,12 +65,14 @@ public:
 	void setVx3( const mu::Parser& parser);
 	void setRho( const mu::Parser& parser);
 	void setPhi( const mu::Parser& parser);
+	void setPressure(const mu::Parser& parser);
 
 	void setVx1( const std::string& muParserString);
 	void setVx2( const std::string& muParserString);
 	void setVx3( const std::string& muParserString);
 	void setRho( const std::string& muParserString);
 	void setPhi( const std::string& muParserString);
+	void setPressure(const std::string& muParserString);
 
 	//////////////////////////////////////////////////////////////////////////
 	void setVx1( LBMReal vx1 );
@@ -79,6 +81,7 @@ public:
 	void setRho( LBMReal rho );
 	void setPhi( LBMReal rho );
 	void setNu( LBMReal nu );
+	void setPressure(LBMReal pres);
 
 	void visit(SPtr<Grid3D> grid, SPtr<Block3D> block);
 
@@ -91,6 +94,7 @@ private:
 	mu::Parser muVx3;
 	mu::Parser muRho;
 	mu::Parser muPhi;
+	mu::Parser muPressure;
 
 	LBMReal nu;
 };
diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp b/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp
index 0b8b631e6..3bb154689 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp
+++ b/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp
@@ -55,7 +55,7 @@ void RefineCrossAndInsideGbObjectHelper::refine()
 
     std::vector<int> dirs;
 
-    for (int i = D3Q27System::DIR_P00; i < D3Q27System::ENDDIR; i++) {
+    for (int i = D3Q27System::STARTDIR; i <= D3Q27System::ENDDIR; i++) {
         dirs.push_back(i);
     }
     SetInterpolationDirsBlockVisitor interDirsVisitor(dirs);
diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h b/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
index 53068df96..793021945 100644
--- a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
+++ b/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h
@@ -114,7 +114,7 @@ void SetConnectorsBlockVisitor<T1, T2>::setSameLevelConnectors(SPtr<Grid3D> grid
         int ix3   = block->getX3();
         int level = block->getLevel();
 
-        for (int dir = D3Q27System::STARTDIR; dir < D3Q27System::ENDDIR; dir++) {
+        for (int dir = D3Q27System::STARTDIR; dir <= D3Q27System::ENDDIR; dir++) {
             SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level);
 
             if (neighBlock) {
diff --git a/utilities/DirRename.py b/utilities/DirRename.py
new file mode 100644
index 000000000..3f01e630a
--- /dev/null
+++ b/utilities/DirRename.py
@@ -0,0 +1,181 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Dec  6 13:21:27 2022
+
+@author: kutscher
+"""
+
+filename = "d:/temp/MultiphaseNonReflectingOutflowBCAlgorithm.cpp"
+
+#read input file
+fin = open(filename, "rt")
+#read file contents to string
+data = fin.read()
+#replace all occurrences of the required string
+data = data.replace('[REST]','[DIR_000]')
+data = data.replace('[TNE]', '[DIR_PPP]')
+data = data.replace('[TNW]', '[DIR_MPP]')
+data = data.replace('[TSE]', '[DIR_PMP]')
+data = data.replace('[TSW]', '[DIR_MMP]')
+data = data.replace('[BNE]', '[DIR_PPM]')
+data = data.replace('[BNW]', '[DIR_MPM]')
+data = data.replace('[BSE]', '[DIR_PMM]')
+data = data.replace('[BSW]', '[DIR_MMM]')
+data = data.replace('[NE]',  '[DIR_PP0]')
+data = data.replace('[SW]',  '[DIR_MM0]')
+data = data.replace('[SE]',  '[DIR_PM0]')
+data = data.replace('[NW]',  '[DIR_MP0]')
+data = data.replace('[TE]',  '[DIR_P0P]')
+data = data.replace('[BW]',  '[DIR_M0M]')
+data = data.replace('[BE]',  '[DIR_P0M]')
+data = data.replace('[TW]',  '[DIR_M0P]')
+data = data.replace('[TN]',  '[DIR_0PP]')
+data = data.replace('[BS]',  '[DIR_0MM]')
+data = data.replace('[BN]',  '[DIR_0PM]')
+data = data.replace('[TS]',  '[DIR_0MP]')
+data = data.replace('[NE ]', '[DIR_PP0]')
+data = data.replace('[SW ]', '[DIR_MM0]')
+data = data.replace('[SE ]', '[DIR_PM0]')
+data = data.replace('[NW ]', '[DIR_MP0]')
+data = data.replace('[TE ]', '[DIR_P0P]')
+data = data.replace('[BW ]', '[DIR_M0M]')
+data = data.replace('[BE ]', '[DIR_P0M]')
+data = data.replace('[TW ]', '[DIR_M0P]')
+data = data.replace('[TN ]', '[DIR_0PP]')
+data = data.replace('[BS ]', '[DIR_0MM]')
+data = data.replace('[BN ]', '[DIR_0PM]')
+data = data.replace('[TS ]', '[DIR_0MP]')
+data = data.replace('[E]',   '[DIR_P00]')
+data = data.replace('[W]',   '[DIR_M00]')
+data = data.replace('[N]',   '[DIR_0P0]')
+data = data.replace('[S]',   '[DIR_0M0]')
+data = data.replace('[T]',   '[DIR_00P]')
+data = data.replace('[B]',   '[DIR_00M]')
+
+# data = data.replace('[REST]','[DIR_000]')
+# data = data.replace('[E  ]', '[DIR_P00]')
+# data = data.replace('[W  ]', '[DIR_M00]')
+# data = data.replace('[N  ]', '[DIR_0P0]')
+# data = data.replace('[S  ]', '[DIR_0M0]')
+# data = data.replace('[T  ]', '[DIR_00P]')
+# data = data.replace('[B  ]', '[DIR_00M]')
+# data = data.replace('[NE ]', '[DIR_PP0]')
+# data = data.replace('[SW ]', '[DIR_MM0]')
+# data = data.replace('[SE ]', '[DIR_PM0]')
+# data = data.replace('[NW ]', '[DIR_MP0]')
+# data = data.replace('[TE ]', '[DIR_P0P]')
+# data = data.replace('[BW ]', '[DIR_M0M]')
+# data = data.replace('[BE ]', '[DIR_P0M]')
+# data = data.replace('[TW ]', '[DIR_M0P]')
+# data = data.replace('[TN ]', '[DIR_0PP]')
+# data = data.replace('[BS ]', '[DIR_0MM]')
+# data = data.replace('[BN ]', '[DIR_0PM]')
+# data = data.replace('[TS ]', '[DIR_0MP]')
+# data = data.replace('[TNE]', '[DIR_PPP]')
+# data = data.replace('[TNW]', '[DIR_MPP]')
+# data = data.replace('[TSE]', '[DIR_PMP]')
+# data = data.replace('[TSW]', '[DIR_MMP]')
+# data = data.replace('[BNE]', '[DIR_PPM]')
+# data = data.replace('[BNW]', '[DIR_MPM]')
+# data = data.replace('[BSE]', '[DIR_PMM]')
+# data = data.replace('[BSW]', '[DIR_MMM]')
+
+# data = data.replace('D3Q27System::REST','[DIR_000]')
+# data = data.replace('D3Q27System::E', '[DIR_P00]')
+# data = data.replace('D3Q27System::W', '[DIR_M00]')
+# data = data.replace('D3Q27System::N', '[DIR_0P0]')
+# data = data.replace('D3Q27System::S', '[DIR_0M0]')
+# data = data.replace('D3Q27System::T', '[DIR_00P]')
+# data = data.replace('D3Q27System::B', '[DIR_00M]')
+# data = data.replace('D3Q27System::NE', '[DIR_PP0]')
+# data = data.replace('D3Q27System::SW', '[DIR_MM0]')
+# data = data.replace('D3Q27System::SE', '[DIR_PM0]')
+# data = data.replace('D3Q27System::NW', '[DIR_MP0]')
+# data = data.replace('D3Q27System::TE', '[DIR_P0P]')
+# data = data.replace('D3Q27System::BW', '[DIR_M0M]')
+# data = data.replace('D3Q27System::BE', '[DIR_P0M]')
+# data = data.replace('D3Q27System::TW', '[DIR_M0P]')
+# data = data.replace('D3Q27System::TN', '[DIR_0PP]')
+# data = data.replace('D3Q27System::BS', '[DIR_0MM]')
+# data = data.replace('D3Q27System::BN', '[DIR_0PM]')
+# data = data.replace('D3Q27System::TS', '[DIR_0MP]')
+# data = data.replace('D3Q27System::TNE', '[DIR_PPP]')
+# data = data.replace('D3Q27System::TNW', '[DIR_MPP]')
+# data = data.replace('D3Q27System::TSE', '[DIR_PMP]')
+# data = data.replace('D3Q27System::TSW', '[DIR_MMP]')
+# data = data.replace('D3Q27System::BNE', '[DIR_PPM]')
+# data = data.replace('D3Q27System::BNW', '[DIR_MPM]')
+# data = data.replace('D3Q27System::BSE', '[DIR_PMM]')
+# data = data.replace('D3Q27System::BSW', '[DIR_MMM]')
+
+data = data.replace('REST)','DIR_000)')
+data = data.replace('TNE)', 'DIR_PPP)')
+data = data.replace('TNW)', 'DIR_MPP)')
+data = data.replace('TSE)', 'DIR_PMP)')
+data = data.replace('TSW)', 'DIR_MMP)')
+data = data.replace('BNE)', 'DIR_PPM)')
+data = data.replace('BNW)', 'DIR_MPM)')
+data = data.replace('BSE)', 'DIR_PMM)')
+data = data.replace('BSW)', 'DIR_MMM)')
+data = data.replace('NE)',  'DIR_PP0)')
+data = data.replace('SW)',  'DIR_MM0)')
+data = data.replace('SE)',  'DIR_PM0)')
+data = data.replace('NW)',  'DIR_MP0)')
+data = data.replace('TE)',  'DIR_P0P)')
+data = data.replace('BW)',  'DIR_M0M)')
+data = data.replace('BE)',  'DIR_P0M)')
+data = data.replace('TW)',  'DIR_M0P)')
+data = data.replace('TN)',  'DIR_0PP)')
+data = data.replace('BS)',  'DIR_0MM)')
+data = data.replace('BN)',  'DIR_0PM)')
+data = data.replace('TS)',  'DIR_0MP)')
+data = data.replace('E)',   'DIR_P00)')
+data = data.replace('W)',   'DIR_M00)')
+data = data.replace('N)',   'DIR_0P0)')
+data = data.replace('S)',   'DIR_0M0)')
+data = data.replace('T)',   'DIR_00P)')
+data = data.replace('B)',   'DIR_00M)')
+
+# data = data.replace('REST','DIR_000')
+# data = data.replace('TNE', 'DIR_PPP')
+# data = data.replace('TNW', 'DIR_MPP')
+# data = data.replace('TSE', 'DIR_PMP')
+# data = data.replace('TSW', 'DIR_MMP')
+# data = data.replace('BNE', 'DIR_PPM')
+# data = data.replace('BNW', 'DIR_MPM')
+# data = data.replace('BSE', 'DIR_PMM')
+# data = data.replace('BSW', 'DIR_MMM')
+# data = data.replace('NE',  'DIR_PP0')
+# data = data.replace('SW',  'DIR_MM0')
+# data = data.replace('SE',  'DIR_PM0')
+# data = data.replace('NW',  'DIR_MP0')
+# data = data.replace('TE',  'DIR_P0P')
+# data = data.replace('BW',  'DIR_M0M')
+# data = data.replace('BE',  'DIR_P0M')
+# data = data.replace('TW',  'DIR_M0P')
+# data = data.replace('TN',  'DIR_0PP')
+# data = data.replace('BS',  'DIR_0MM')
+# data = data.replace('BN',  'DIR_0PM')
+# data = data.replace('TS',  'DIR_0MP')
+# data = data.replace('E',   'DIR_P00')
+# data = data.replace('W',   'DIR_M00')
+# data = data.replace('N',   'DIR_0P0')
+# data = data.replace('S',   'DIR_0M0')
+# data = data.replace('T',   'DIR_00P')
+# data = data.replace('B',   'DIR_00M')
+
+# text = 'bat::ball'
+
+# # replace b with c
+# replaced_text = text.replace('b', 'c')
+# print(replaced_text)
+
+
+#close the input file
+fin.close()
+#open the input file in write mode
+fin = open(filename, "wt")
+#overrite the input file with the resulting data
+fin.write(data)
+#close the file
+fin.close()
\ No newline at end of file
-- 
GitLab