diff --git a/apps/cpu/Multiphase/Multiphase.cfg b/apps/cpu/Multiphase/Multiphase.cfg
index cb5a072c321e63d0a69739520c1d020fe34d81e6..d52694ac838c8ae029ebf85476ab6db68de11223 100644
--- a/apps/cpu/Multiphase/Multiphase.cfg
+++ b/apps/cpu/Multiphase/Multiphase.cfg
@@ -1,7 +1,11 @@
-pathname = d:/temp/MultiphaseNew3
-pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup
-geoFile = JetBreakup2.ASCII.stl
-numOfThreads = 4
+pathname = d:/temp/MultiphaseNew4
+#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 = 1
 availMem = 10e9
 
 #Grid
@@ -10,21 +14,28 @@ availMem = 10e9
 #boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
 #blocknx = 22 20 22
 
-boundingBox = -60.5 60.5 -1.0 -21.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
-blocknx = 22 20 22
+#boundingBox = -60.5 60.5 -1.0 -101.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length)
+#blocknx = 22 20 22
+
+#boundingBox = -40 40 -1.0 -21.0 -40 40 #(Jet Breakup2) (Original without inlet length)
+#boundingBox = -40 40 1.0 11.0 -40 40 #(Jet Breakup2) (Original without inlet length)
+#boundingBox = -40e-3 40e-3 1.0e-3 11.0e-3 -403-3 40e-3 #(Jet Breakup2) (Original without inlet length)
+blocknx = 20 20 20
 
+boundingBox = 6.0e-3 16.0e-3 -40e-3 40e-3 -40e-3 40e-3
+blocknx = 20 20 20
 
-dx = 0.5
+dx = 0.5e-3
 refineLevel = 0
 
 #Simulation
 uLB = 0.0005 #inlet velocity
-uF2 = 0.0001
+#uF2 = 0.0001
 Re = 10
 nuL =1e-2# 1.0e-5 #!1e-2
 nuG =1e-2# 1.16e-4 #!1e-2
-densityRatio = 1 #30
-sigma = 4.66e-3 #surface tension 1e-4 ./. 1e-5
+densityRatio = 30
+sigma = 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5
 interfaceThickness = 5
 radius = 615.0 (Jet Breakup)
 contactAngle = 110.0
@@ -44,5 +55,5 @@ restartStep = 100000
 cpStart = 100000
 cpStep = 100000
 
-outTime = 1
-endTime = 10
\ No newline at end of file
+outTime = 100
+endTime = 10000
\ No newline at end of file
diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp
index 03b5334f0fb4bf84eb588f484c4c93537a4df257..10ff2b39618c64ef09edd902471387e7ebc90c70 100644
--- a/apps/cpu/Multiphase/Multiphase.cpp
+++ b/apps/cpu/Multiphase/Multiphase.cpp
@@ -9,6 +9,9 @@ using namespace std;
 void run(string configname)
 {
     try {
+
+        //Sleep(20000);
+
         ConfigurationFile config;
         config.load(configname);
 
@@ -82,9 +85,9 @@ void run(string configname)
 
         SPtr<LBMKernel> kernel;
 
-        //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
+        kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel());
         //kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel());
-        kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
+        //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel());
 
         kernel->setWithForcing(true);
         kernel->setForcingX1(0.0);
@@ -108,10 +111,10 @@ void run(string configname)
         //////////////////////////////////////////////////////////////////////////
         // restart
         SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart));
-        // RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT);
-        MPIIORestartCoProcessor rcp(grid, rSch, pathname, comm);
-        rcp.setLBMKernel(kernel);
-        rcp.setBCProcessor(bcProc);
+        SPtr<MPIIOMigrationBECoProcessor> rcp = make_shared<MPIIOMigrationBECoProcessor>(grid, rSch, pathname, comm);
+        rcp->setLBMKernel(kernel);
+        rcp->setBCProcessor(bcProc);
+        rcp->setNu(nuLB);
         //////////////////////////////////////////////////////////////////////////
 
         mu::Parser fctF1;
@@ -122,17 +125,19 @@ void run(string configname)
         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");
-        fctF2.DefineConst("vy1", -uLB);
+        fctF2.DefineConst("vy1", uLB);
 
-        double startTime = 5;
-        SPtr<BCAdapter> velBCAdapterF1(new MultiphaseVelocityBCAdapter(false, true, false, fctF1, phiH, 0.0, startTime));
-        SPtr<BCAdapter> velBCAdapterF2(new MultiphaseVelocityBCAdapter(false, true, false, fctF2, phiH, startTime, endTime));
+        double startTime = 500;
+        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<D3Q27Interactor> inflowF1Int;
-
+        SPtr<D3Q27Interactor> cylInt;
         if (newStart) {
 
       //  if (newStart) {
@@ -155,52 +160,36 @@ void run(string configname)
             double g_maxX3 = boundingBox[5];
 
             // geometry
-
-            // GbObject3DPtr innerCube(new GbCuboid3D(g_minX1+2, g_minX2+2, g_minX3+2, g_maxX1-2, g_maxX2-2,
-            // g_maxX3-2));
-
-            // GbObject3DPtr cylinder1(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_minX1 + 12.0*dx,
-            // g_maxX2/2, g_maxX3/2, radius)); GbObject3DPtr cylinder2(new GbCylinder3D(g_minX1 + 12.0*dx, g_maxX2/2,
-            // g_maxX3/2, g_maxX1 + 2.0*dx, g_maxX2/2, g_maxX3/2, dLB / 2.0));
-
-            // GbObject3DPtr cylinder(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2/2, g_maxX3/2, g_maxX1 + 2.0*dx,
-            // g_maxX2/2, g_maxX3/2, dLB / 2.0)); GbObject3DPtr cylinders(new GbObject3DManager()); GbObject3DPtr
-            // cylinders1(new GbObjectGroup3D());
-
             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->readMeshFromSTLFileASCII(pathGeo + "/" + geoFile, false);
+            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(40.0, 628.0, 40.0, 80, 631.0, 80.0));  // For JetBreakup
-            // (Original) GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-2.0*dx, g_minX2-2.0*dx, g_minX3-2.0*dx,
-            // g_maxX1+2.0*dx, g_minX2+2.0*dx, g_maxX3+2.0*dx)); if (myid == 0)
-            // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",
-            // 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-2.0*dx, g_maxX2, g_minX3-2.0*dx, g_maxX1+2.0*dx,
-            // g_maxX2+2.0*dx, g_maxX3+2.0*dx)); if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname +
-            // "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance());
-
+            //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, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * dx, g_maxX3));
+                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 cylinder1(new GbCylinder3D(g_minX1-dx, 0.0, 0.0, cylinder->getX1Maximum(), 0.0, 0.0, 3e-3));
             if (myid == 0)
-                GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1",
+                GbSystem3D::writeGeoObject(cylinder1.get(), pathname + "/geo/cylinder1",
                                            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 - 1 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3));
+            //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());
@@ -234,11 +223,6 @@ void run(string configname)
             SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB));
             denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNonReflectingOutflowBCAlgorithm()));
 
-            // double r = 5.0; //boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius();
-            // double cx1 = g_minX1;
-            // double cx2 = 0.0; //cylinder->getX2Centroid();
-            // double cx3 = 0.0; //cylinder->getX3Centroid();
-
             mu::Parser fctPhi_F1;
             fctPhi_F1.SetExpr("phiH");
             fctPhi_F1.DefineConst("phiH", phiH);
@@ -251,74 +235,70 @@ void run(string configname)
             fctvel_F2_init.SetExpr("U");
             fctvel_F2_init.DefineConst("U", 0);
 
-            // fct.SetExpr("U");
-            // fct.DefineConst("U", uLB);
-            // BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-
-
-
-
-
-            // BCAdapterPtr velBCAdapterF2_1_init(new MultiphaseVelocityBCAdapter(false, false, true, fctF2_1, phiH,
-            // 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new MultiphaseVelocityBCAdapter(false, false, true,
-            // fctF2_2, phiH, 0.0, endTime));
-
-            // BCAdapterPtr velBCAdapterF2_1_init(new MultiphaseVelocityBCAdapter(false, false, true, fctvel_F2_init,
-            // phiL, 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new MultiphaseVelocityBCAdapter(false, false,
-            // true, fctvel_F2_init, phiL, 0.0, endTime));
-
-            //velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm()));
-            velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
-            // velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new MultiphaseVelocityBCAlgorithm()));
-            // velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new MultiphaseVelocityBCAlgorithm()));
-
-            // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-            // mu::Parser fct;
-            // fct.SetExpr("U");
-            // fct.DefineConst("U", uLB);
-            // BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST));
-            // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingVelocityBCAlgorithm()));
-
+            velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm()));
             //////////////////////////////////////////////////////////////////////////////////
             // BC visitor
             MultiphaseBoundaryConditionsBlockVisitor bcVisitor;
             bcVisitor.addBC(noSlipBCAdapter);
-           // bcVisitor.addBC(denBCAdapter); //Ohne das BB?
+            bcVisitor.addBC(denBCAdapter); //Ohne das BB?
             bcVisitor.addBC(velBCAdapterF1);
-            // bcVisitor.addBC(velBCAdapterF2_1_init);
-            // bcVisitor.addBC(velBCAdapterF2_2_init);
 
             SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor(
                 grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm));
 
-            //ppblocks->process(0);
-
-            SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID));
-
-            inflowF1Int = SPtr<D3Q27Interactor> (new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID));
-            inflowF1Int->addBCAdapter(velBCAdapterF2);
+            SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::POINTS));
 
-           // inflowF1Int->addBCAdapter(velBCAdapterFStart);
-
-            // D3Q27InteractorPtr inflowF2_1Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid,
-            // velBCAdapterF2_1_init, Interactor3D::SOLID));
-
-            // D3Q27InteractorPtr inflowF2_2Int_init = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid,
-            // velBCAdapterF2_2_init, Interactor3D::SOLID));
+            //inflowF1Int =
+            //    SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBCAdapter, Interactor3D::SOLID));
+            //inflowF1Int->addBCAdapter(velBCAdapterF2);
 
             SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID));
 
-            // SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC);
-            // grid->accept(visitor1);
-            // SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC);
-            // grid->accept(visitor2);
+      // Create boundary conditions geometry
+      GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2 + dx, g_maxX3));
+      GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance());
+      GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3));
+      GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance());
+      GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_minX3));
+      GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance());
+      GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_maxX3, g_maxX1 + dx, g_maxX2 + dx, g_maxX3 + dx));
+      GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance());
+      GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_minX2, g_maxX3));
+      GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance());
+      GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx, g_maxX2, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + 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));
 
             SPtr<Grid3DVisitor> metisVisitor(
                 new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW));
-            InteractorsHelper intHelper(grid, metisVisitor);
+            InteractorsHelper intHelper(grid, metisVisitor, true);
+            intHelper.addInteractor(cylInt);
             intHelper.addInteractor(tubes);
-            intHelper.addInteractor(inflowF1Int);
-            intHelper.addInteractor(outflowInt);
+            //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(inflowF1Int);
+            
+
             intHelper.selectBlocks();
 
             ppblocks->process(0);
@@ -350,26 +330,6 @@ void run(string configname)
                 UBLOG(logINFO, "Available memory per process = " << availMem << " bytes");
             }
 
-            // LBMKernelPtr kernel;
-
-            // kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2],
-            // MultiphaseCumulantLBMKernel::NORMAL));
-
-            // kernel->setWithForcing(true);
-            // kernel->setForcingX1(0.0);
-            // kernel->setForcingX2(gr);
-            // kernel->setForcingX3(0.0);
-
-            // kernel->setPhiL(phiL);
-            // kernel->setPhiH(phiH);
-            // kernel->setPhaseFieldRelaxation(tauH);
-            // kernel->setMobility(mob);
-
-            // BCProcessorPtr bcProc(new BCProcessor());
-            // //BCProcessorPtr bcProc(new ThinWallBCProcessor());
-
-            // kernel->setBCProcessor(bcProc);
-
             MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem,
                                                           needMem);
 
@@ -380,68 +340,18 @@ void run(string configname)
                 grid->accept(undefNodesVisitor);
             }
 
-            // inflowF2_1Int->initInteractor();
-            // inflowF2_2Int->initInteractor();
-
             intHelper.setBC();
 
             grid->accept(bcVisitor);
 
             // initialization of distributions
-            LBMReal x1c = radius;                  // g_minX1; //radius; //19; //(g_maxX1+g_minX1)/2;
-            LBMReal x2c = (g_maxX2 + g_minX2) / 2; // g_minX2 + 2;
-            LBMReal x3c = (g_maxX3 + g_minX3) / 2;
             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("phiM-phiM*tanh((sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/(interfaceThickness*phiM))");
-
-            // fct1.SetExpr("0.5*(phiH + phiL)-0.5*(phiH -
-            // phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-
-            // fct1.SetExpr("0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*((x2-radius))/interfaceThickness)");
             fct1.SetExpr("phiL");
-            fct1.DefineConst("x1c", x1c);
-            fct1.DefineConst("x2c", x2c);
-            fct1.DefineConst("x3c", x3c);
             fct1.DefineConst("phiL", phiL);
-            fct1.DefineConst("phiH", phiH);
-            fct1.DefineConst("radius", radius);
-            fct1.DefineConst("interfaceThickness", interfaceThickness);
-
-            mu::Parser fct2;
-            // fct2.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))");
-            fct2.SetExpr("vx1");
-            fct2.DefineConst("R", 10.0);
-            fct2.DefineConst("vx1", uLB);
-            fct2.DefineConst("y0", 1.0);
-            fct2.DefineConst("z0", 31.0);
-            /*fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)");
-            fct2.DefineConst("uLB", uLB);
-            fct2.DefineConst("x1c", x1c);
-            fct2.DefineConst("x2c", x2c);
-            fct2.DefineConst("x3c", x3c);
-            fct2.DefineConst("radius", radius);
-            fct2.DefineConst("interfaceThickness", interfaceThickness);*/
-
             MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio, interfaceThickness, radius);
             initVisitor.setPhi(fct1);
-            // initVisitor.setVx1(fct2);
             grid->accept(initVisitor);
 
-            // set connectors
-            //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor());
-            // InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor());
-            //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-            // ConnectorFactoryPtr factory(new Block3DConnectorFactory());
-            // ConnectorBlockVisitor setConnsVisitor(comm, nuLB, iProcessor, factory);
-            ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
-            grid->accept(setConnsVisitor);
-
-            // domain decomposition for threads
-            // PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads);
-            // grid->accept(pqPartVisitor);
-
             // boundary conditions grid
             {
                 SPtr<UbScheduler> geoSch(new UbScheduler(1));
@@ -466,44 +376,42 @@ void run(string configname)
                 UBLOG(logINFO, "path = " << pathname);
             }
 
-            rcp.restart((int)restartStep);
+            rcp->restart((int)restartStep);
             grid->setTimeStep(restartStep);
 
-            // BCAdapterPtr velBCAdapter(new VelocityBCAdapter());
-            // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithm()));
-            // velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityWithDensityBCAlgorithm()));
-            // bcVisitor.addBC(velBCAdapter);
-            // grid->accept(bcVisitor);
-
-            // set connectors
-            // InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolationProcessor());
-            //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolationProcessor());
-            //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor);
-            //grid->accept(setConnsVisitor);
-
             if (myid == 0)
                 UBLOG(logINFO, "Restart - end");
         }
         
         TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
         grid->accept(setConnsVisitor);
+        
+        //ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm);
+        //grid->accept(setConnsVisitor);
 
         SPtr<UbScheduler> visSch(new UbScheduler(outTime));
         SPtr<WriteMultiphaseQuantitiesCoProcessor> pp(new WriteMultiphaseQuantitiesCoProcessor(
+        //SPtr<WriteMacroscopicQuantitiesCoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor(
             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(inflowF1Int);
+        timeDepBC->addInteractor(cylInt);
+
+#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);
 
 
         
diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl
new file mode 100644
index 0000000000000000000000000000000000000000..b54ebccc96d8e38114cb34ce13a2d3daccd8cb45
--- /dev/null
+++ b/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl
@@ -0,0 +1,1584 @@
+solid Visualization Toolkit generated SLA File
+ facet normal 0 1 0
+  outer loop
+   vertex -61 610 61
+   vertex -60 610 -60
+   vertex -61 610 -61
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex -60 610 60
+   vertex -60 610 -60
+   vertex -61 610 61
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -61 610 61
+   vertex 61 610 61
+   vertex -60 610 60
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 61 610 61
+   vertex 60 610 60
+   vertex -60 610 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 60 610 -60
+   vertex 61 610 -61
+   vertex -60 610 -60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -60 610 -60
+   vertex 61 610 -61
+   vertex -61 610 -61
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 61 610 61
+   vertex 61 610 -61
+   vertex 60 610 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 60 610 60
+   vertex 61 610 -61
+   vertex 60 610 -60
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 61 3 -61
+   vertex -61 610 -61
+   vertex 61 610 -61
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 61 3 -61
+   vertex -61 3 -61
+   vertex -61 610 -61
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 61 3 61
+   vertex 61 610 -61
+   vertex 61 610 61
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 61 3 61
+   vertex 61 3 -61
+   vertex 61 610 -61
+  endloop
+ endfacet
+ facet normal 0 0 1
+  outer loop
+   vertex -61 3 61
+   vertex 61 610 61
+   vertex -61 610 61
+  endloop
+ endfacet
+ facet normal 0 -0 1
+  outer loop
+   vertex -61 3 61
+   vertex 61 3 61
+   vertex 61 610 61
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -61 3 -61
+   vertex -61 610 61
+   vertex -61 610 -61
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -61 3 -61
+   vertex -61 3 61
+   vertex -61 610 61
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex -60 610 60
+   vertex -60 3 60
+   vertex -60 610 -60
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex -60 3 60
+   vertex -60 3 -60
+   vertex -60 610 -60
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 60 610 60
+   vertex 60 3 60
+   vertex -60 610 60
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 60 3 60
+   vertex -60 3 60
+   vertex -60 610 60
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex 60 610 -60
+   vertex 60 3 60
+   vertex 60 610 60
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex 60 3 -60
+   vertex 60 3 60
+   vertex 60 610 -60
+  endloop
+ endfacet
+ facet normal 0 0 1
+  outer loop
+   vertex -60 610 -60
+   vertex -60 3 -60
+   vertex 60 610 -60
+  endloop
+ endfacet
+ facet normal 0 -0 1
+  outer loop
+   vertex -60 3 -60
+   vertex 60 3 -60
+   vertex 60 610 -60
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 61 3 -61
+   vertex -61 1 -61
+   vertex -61 3 -61
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 61 1 -61
+   vertex -61 1 -61
+   vertex 61 3 -61
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 61 1 61
+   vertex 61 3 -61
+   vertex 61 3 61
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 61 1 61
+   vertex 61 1 -61
+   vertex 61 3 -61
+  endloop
+ endfacet
+ facet normal 0 0 1
+  outer loop
+   vertex -61 1 61
+   vertex 61 3 61
+   vertex -61 3 61
+  endloop
+ endfacet
+ facet normal 0 -0 1
+  outer loop
+   vertex -61 1 61
+   vertex 61 1 61
+   vertex 61 3 61
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -61 1 -61
+   vertex -61 3 61
+   vertex -61 3 -61
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -61 1 -61
+   vertex -61 1 61
+   vertex -61 3 61
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -60 3 60
+   vertex -4.489497184753418 3 6.6215119361877441
+   vertex -5.8079638481140137 3 5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex -5.8079638481140137 3 5.5015950202941895
+   vertex -6.8548569679260254 3 4.1244311332702637
+   vertex -60 3 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -60 3 60
+   vertex -2.9611051082611084 3 7.4318141937255859
+   vertex -4.489497184753418 3 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex -6.8548569679260254 3 4.1244311332702637
+   vertex -7.5812249183654785 3 2.5544118881225586
+   vertex -60 3 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -60 3 60
+   vertex -1.2942559719085693 3 7.8946118354797363
+   vertex -2.9611051082611084 3 7.4318141937255859
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex -7.5812249183654785 3 2.5544118881225586
+   vertex -7.9531040191650391 3 0.86495202779769897
+   vertex -60 3 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -60 3 60
+   vertex 0.43311101198196411 3 7.9882669448852539
+   vertex -1.2942559719085693 3 7.8946118354797363
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex -7.9531040191650391 3 0.86495202779769897
+   vertex -7.9531040191650391 3 -0.86495202779769897
+   vertex -60 3 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -5.8079638481140137 3 -5.5015950202941895
+   vertex -60 3 -60
+   vertex -6.8548569679260254 3 -4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -6.8548569679260254 3 -4.1244311332702637
+   vertex -60 3 -60
+   vertex -7.5812249183654785 3 -2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -7.5812249183654785 3 -2.5544118881225586
+   vertex -60 3 -60
+   vertex -7.9531040191650391 3 -0.86495202779769897
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -7.9531040191650391 3 -0.86495202779769897
+   vertex -60 3 -60
+   vertex -60 3 60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 0.43311101198196411 3 7.9882669448852539
+   vertex 60 3 60
+   vertex 2.1402270793914795 3 7.708399772644043
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 2.1402270793914795 3 7.708399772644043
+   vertex 60 3 60
+   vertex 3.7472670078277588 3 7.0680961608886719
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 3.7472670078277588 3 7.0680961608886719
+   vertex 60 3 60
+   vertex 5.1790900230407715 3 6.0972962379455566
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -60 3 60
+   vertex 60 3 60
+   vertex 0.43311101198196411 3 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 60 3 60
+   vertex 6.368743896484375 3 4.8413939476013184
+   vertex 5.1790900230407715 3 6.0972962379455566
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -5.8079638481140137 3 -5.5015950202941895
+   vertex -4.489497184753418 3 -6.6215119361877441
+   vertex -60 3 -60
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 60 3 60
+   vertex 7.2606029510498047 3 3.3591129779815674
+   vertex 6.368743896484375 3 4.8413939476013184
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -4.489497184753418 3 -6.6215119361877441
+   vertex -2.9611051082611084 3 -7.4318141937255859
+   vertex -60 3 -60
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 60 3 60
+   vertex 7.8129639625549316 3 1.7197639942169189
+   vertex 7.2606029510498047 3 3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -2.9611051082611084 3 -7.4318141937255859
+   vertex -1.2942559719085693 3 -7.8946118354797363
+   vertex -60 3 -60
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 60 3 60
+   vertex 8 3 -3.6739402930577075e-16
+   vertex 7.8129639625549316 3 1.7197639942169189
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -1.2942559719085693 3 -7.8946118354797363
+   vertex 0.43311101198196411 3 -7.9882669448852539
+   vertex -60 3 -60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 8 3 -3.6739402930577075e-16
+   vertex 60 3 -60
+   vertex 7.8129639625549316 3 -1.7197639942169189
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 7.8129639625549316 3 -1.7197639942169189
+   vertex 60 3 -60
+   vertex 7.2606029510498047 3 -3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 7.2606029510498047 3 -3.3591129779815674
+   vertex 60 3 -60
+   vertex 6.368743896484375 3 -4.8413939476013184
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 6.368743896484375 3 -4.8413939476013184
+   vertex 60 3 -60
+   vertex 5.1790900230407715 3 -6.0972962379455566
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 5.1790900230407715 3 -6.0972962379455566
+   vertex 60 3 -60
+   vertex 3.7472670078277588 3 -7.0680961608886719
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 3.7472670078277588 3 -7.0680961608886719
+   vertex 60 3 -60
+   vertex 2.1402270793914795 3 -7.708399772644043
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 2.1402270793914795 3 -7.708399772644043
+   vertex 60 3 -60
+   vertex 0.43311101198196411 3 -7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 60 3 60
+   vertex 60 3 -60
+   vertex 8 3 -3.6739402930577075e-16
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 0.43311101198196411 3 -7.9882669448852539
+   vertex 60 3 -60
+   vertex -60 3 -60
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 61 1 -61
+   vertex -61 -7.4703452449041523e-15 -61
+   vertex -61 1 -61
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex 61 -7.4703452449041523e-15 -61
+   vertex -61 -7.4703452449041523e-15 -61
+   vertex 61 1 -61
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 61 1 61
+   vertex 61 -7.4703452449041523e-15 -61
+   vertex 61 1 -61
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 61 7.4703452449041523e-15 61
+   vertex 61 -7.4703452449041523e-15 -61
+   vertex 61 1 61
+  endloop
+ endfacet
+ facet normal 0 -0 1
+  outer loop
+   vertex -61 1 61
+   vertex 61 7.4703452449041523e-15 61
+   vertex 61 1 61
+  endloop
+ endfacet
+ facet normal 0 0 1
+  outer loop
+   vertex -61 7.4703452449041523e-15 61
+   vertex 61 7.4703452449041523e-15 61
+   vertex -61 1 61
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -61 1 -61
+   vertex -61 7.4703452449041523e-15 61
+   vertex -61 1 61
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -61 -7.4703452449041523e-15 -61
+   vertex -61 7.4703452449041523e-15 61
+   vertex -61 1 -61
+  endloop
+ endfacet
+ facet normal 0.64738670042007573 0 -0.76216170208113132
+  outer loop
+   vertex -4.489497184753418 1 6.6215119361877441
+   vertex -5.8079638481140137 1 5.5015950202941895
+   vertex -5.8079638481140137 3 5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0.64738670042007573 0 -0.76216170208113132
+  outer loop
+   vertex -4.489497184753418 1 6.6215119361877441
+   vertex -5.8079638481140137 3 5.5015950202941895
+   vertex -4.489497184753418 3 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0.46840846871264458 0 -0.88351202959454689
+  outer loop
+   vertex -2.9611051082611084 1 7.4318141937255859
+   vertex -4.489497184753418 1 6.6215119361877441
+   vertex -4.489497184753418 3 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0.46840846871264458 0 -0.88351202959454689
+  outer loop
+   vertex -2.9611051082611084 1 7.4318141937255859
+   vertex -4.489497184753418 3 6.6215119361877441
+   vertex -2.9611051082611084 3 7.4318141937255859
+  endloop
+ endfacet
+ facet normal 0.26752793984402756 0 -0.96355010321353307
+  outer loop
+   vertex -1.2942559719085693 1 7.8946118354797363
+   vertex -2.9611051082611084 1 7.4318141937255859
+   vertex -2.9611051082611084 3 7.4318141937255859
+  endloop
+ endfacet
+ facet normal -0.99413793032906728 0 0.10811926507814602
+  outer loop
+   vertex 7.8129639625549316 1 -1.7197639942169189
+   vertex 8 3 -3.6739402930577075e-16
+   vertex 7.8129639625549316 3 -1.7197639942169189
+  endloop
+ endfacet
+ facet normal 0.26752793984402756 0 -0.96355010321353307
+  outer loop
+   vertex -1.2942559719085693 1 7.8946118354797363
+   vertex -2.9611051082611084 3 7.4318141937255859
+   vertex -1.2942559719085693 3 7.8946118354797363
+  endloop
+ endfacet
+ facet normal -0.99413793032906739 1.3240790337230738e-17 0.10811926507814602
+  outer loop
+   vertex 7.8129639625549316 1 -1.7197639942169189
+   vertex 8 1 -1.2246468525851679e-16
+   vertex 8 3 -3.6739402930577075e-16
+  endloop
+ endfacet
+ facet normal 0.054138904478489597 0 -0.99853341407379503
+  outer loop
+   vertex 0.43311101198196411 1 7.9882669448852539
+   vertex -1.2942559719085693 1 7.8946118354797363
+   vertex -1.2942559719085693 3 7.8946118354797363
+  endloop
+ endfacet
+ facet normal -0.94765316652265008 0 0.31930154396681876
+  outer loop
+   vertex 7.2606029510498047 1 -3.3591129779815674
+   vertex 7.8129639625549316 3 -1.7197639942169189
+   vertex 7.2606029510498047 3 -3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0.054138904478489597 0 -0.99853341407379503
+  outer loop
+   vertex 0.43311101198196411 1 7.9882669448852539
+   vertex -1.2942559719085693 3 7.8946118354797363
+   vertex 0.43311101198196411 3 7.9882669448852539
+  endloop
+ endfacet
+ facet normal -0.94765316652265008 0 0.31930154396681876
+  outer loop
+   vertex 7.2606029510498047 1 -3.3591129779815674
+   vertex 7.8129639625549316 1 -1.7197639942169189
+   vertex 7.8129639625549316 3 -1.7197639942169189
+  endloop
+ endfacet
+ facet normal -0.16178182691395071 0 -0.98682655035238309
+  outer loop
+   vertex 2.1402270793914795 1 7.708399772644043
+   vertex 0.43311101198196411 1 7.9882669448852539
+   vertex 0.43311101198196411 3 7.9882669448852539
+  endloop
+ endfacet
+ facet normal -0.16178182691395071 0 -0.98682655035238309
+  outer loop
+   vertex 2.1402270793914795 1 7.708399772644043
+   vertex 0.43311101198196411 3 7.9882669448852539
+   vertex 2.1402270793914795 3 7.708399772644043
+  endloop
+ endfacet
+ facet normal -0.85685712856506968 0 0.51555393629301649
+  outer loop
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 7.2606029510498047 3 -3.3591129779815674
+   vertex 6.368743896484375 3 -4.8413939476013184
+  endloop
+ endfacet
+ facet normal -0.85685712856506968 0 0.51555393629301649
+  outer loop
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 7.2606029510498047 1 -3.3591129779815674
+   vertex 7.2606029510498047 3 -3.3591129779815674
+  endloop
+ endfacet
+ facet normal -0.37013834558473929 0 -0.92897664401630264
+  outer loop
+   vertex 3.7472670078277588 1 7.0680961608886719
+   vertex 2.1402270793914795 3 7.708399772644043
+   vertex 3.7472670078277588 3 7.0680961608886719
+  endloop
+ endfacet
+ facet normal -0.7259954825307644 0 0.68769946876882393
+  outer loop
+   vertex 5.1790900230407715 1 -6.0972962379455566
+   vertex 6.368743896484375 3 -4.8413939476013184
+   vertex 5.1790900230407715 3 -6.0972962379455566
+  endloop
+ endfacet
+ facet normal -0.37013834558473929 0 -0.92897664401630264
+  outer loop
+   vertex 3.7472670078277588 1 7.0680961608886719
+   vertex 2.1402270793914795 1 7.708399772644043
+   vertex 2.1402270793914795 3 7.708399772644043
+  endloop
+ endfacet
+ facet normal -0.7259954825307644 0 0.68769946876882393
+  outer loop
+   vertex 5.1790900230407715 1 -6.0972962379455566
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 6.368743896484375 3 -4.8413939476013184
+  endloop
+ endfacet
+ facet normal -0.56118699818949347 0 -0.82768904370123542
+  outer loop
+   vertex 5.1790900230407715 1 6.0972962379455566
+   vertex 3.7472670078277588 3 7.0680961608886719
+   vertex 5.1790900230407715 3 6.0972962379455566
+  endloop
+ endfacet
+ facet normal -0.56118699818949347 0 0.82768904370123542
+  outer loop
+   vertex 3.7472670078277588 1 -7.0680961608886719
+   vertex 5.1790900230407715 3 -6.0972962379455566
+   vertex 3.7472670078277588 3 -7.0680961608886719
+  endloop
+ endfacet
+ facet normal -0.56118699818949347 0 -0.82768904370123542
+  outer loop
+   vertex 5.1790900230407715 1 6.0972962379455566
+   vertex 3.7472670078277588 1 7.0680961608886719
+   vertex 3.7472670078277588 3 7.0680961608886719
+  endloop
+ endfacet
+ facet normal -0.56118699818949347 0 0.82768904370123542
+  outer loop
+   vertex 3.7472670078277588 1 -7.0680961608886719
+   vertex 5.1790900230407715 1 -6.0972962379455566
+   vertex 5.1790900230407715 3 -6.0972962379455566
+  endloop
+ endfacet
+ facet normal -0.7259954825307644 0 -0.68769946876882393
+  outer loop
+   vertex 6.368743896484375 1 4.8413939476013184
+   vertex 5.1790900230407715 3 6.0972962379455566
+   vertex 6.368743896484375 3 4.8413939476013184
+  endloop
+ endfacet
+ facet normal -0.37013834558473929 0 0.92897664401630264
+  outer loop
+   vertex 2.1402270793914795 1 -7.708399772644043
+   vertex 3.7472670078277588 3 -7.0680961608886719
+   vertex 2.1402270793914795 3 -7.708399772644043
+  endloop
+ endfacet
+ facet normal -0.7259954825307644 0 -0.68769946876882393
+  outer loop
+   vertex 6.368743896484375 1 4.8413939476013184
+   vertex 5.1790900230407715 1 6.0972962379455566
+   vertex 5.1790900230407715 3 6.0972962379455566
+  endloop
+ endfacet
+ facet normal -0.37013834558473929 0 0.92897664401630264
+  outer loop
+   vertex 2.1402270793914795 1 -7.708399772644043
+   vertex 3.7472670078277588 1 -7.0680961608886719
+   vertex 3.7472670078277588 3 -7.0680961608886719
+  endloop
+ endfacet
+ facet normal -0.85685712856506968 0 -0.51555393629301649
+  outer loop
+   vertex 7.2606029510498047 1 3.3591129779815674
+   vertex 6.368743896484375 3 4.8413939476013184
+   vertex 7.2606029510498047 3 3.3591129779815674
+  endloop
+ endfacet
+ facet normal -0.16178182691395071 0 0.98682655035238309
+  outer loop
+   vertex 0.43311101198196411 1 -7.9882669448852539
+   vertex 2.1402270793914795 3 -7.708399772644043
+   vertex 0.43311101198196411 3 -7.9882669448852539
+  endloop
+ endfacet
+ facet normal -0.85685712856506968 0 -0.51555393629301649
+  outer loop
+   vertex 7.2606029510498047 1 3.3591129779815674
+   vertex 6.368743896484375 1 4.8413939476013184
+   vertex 6.368743896484375 3 4.8413939476013184
+  endloop
+ endfacet
+ facet normal -0.16178182691395071 0 0.98682655035238309
+  outer loop
+   vertex 0.43311101198196411 1 -7.9882669448852539
+   vertex 2.1402270793914795 1 -7.708399772644043
+   vertex 2.1402270793914795 3 -7.708399772644043
+  endloop
+ endfacet
+ facet normal -0.94765316652265008 0 -0.31930154396681876
+  outer loop
+   vertex 7.8129639625549316 1 1.7197639942169189
+   vertex 7.2606029510498047 3 3.3591129779815674
+   vertex 7.8129639625549316 3 1.7197639942169189
+  endloop
+ endfacet
+ facet normal -0.94765316652265008 0 -0.31930154396681876
+  outer loop
+   vertex 7.8129639625549316 1 1.7197639942169189
+   vertex 7.2606029510498047 1 3.3591129779815674
+   vertex 7.2606029510498047 3 3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0.054138904478489597 0 0.99853341407379503
+  outer loop
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex 0.43311101198196411 3 -7.9882669448852539
+   vertex -1.2942559719085693 3 -7.8946118354797363
+  endloop
+ endfacet
+ facet normal 0.054138904478489597 -0 0.99853341407379503
+  outer loop
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex 0.43311101198196411 1 -7.9882669448852539
+   vertex 0.43311101198196411 3 -7.9882669448852539
+  endloop
+ endfacet
+ facet normal -0.99413793032906739 0 -0.10811926507814598
+  outer loop
+   vertex 8 1 -1.2246468525851679e-16
+   vertex 7.8129639625549316 3 1.7197639942169189
+   vertex 8 3 -3.6739402930577075e-16
+  endloop
+ endfacet
+ facet normal -0.99413793032906739 0 -0.108119265078146
+  outer loop
+   vertex 8 1 -1.2246468525851679e-16
+   vertex 7.8129639625549316 1 1.7197639942169189
+   vertex 7.8129639625549316 3 1.7197639942169189
+  endloop
+ endfacet
+ facet normal 0.26752793984402756 0 0.96355010321353307
+  outer loop
+   vertex -2.9611051082611084 1 -7.4318141937255859
+   vertex -1.2942559719085693 3 -7.8946118354797363
+   vertex -2.9611051082611084 3 -7.4318141937255859
+  endloop
+ endfacet
+ facet normal 0.26752793984402756 -0 0.96355010321353307
+  outer loop
+   vertex -2.9611051082611084 1 -7.4318141937255859
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex -1.2942559719085693 3 -7.8946118354797363
+  endloop
+ endfacet
+ facet normal 0.46840846871264458 -0 0.88351202959454689
+  outer loop
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -2.9611051082611084 1 -7.4318141937255859
+   vertex -2.9611051082611084 3 -7.4318141937255859
+  endloop
+ endfacet
+ facet normal 0.46840846871264458 0 0.88351202959454689
+  outer loop
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -2.9611051082611084 3 -7.4318141937255859
+   vertex -4.489497184753418 3 -6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0.64738670042007573 -0 0.76216170208113132
+  outer loop
+   vertex -5.8079638481140137 1 -5.5015950202941895
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -4.489497184753418 3 -6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0.64738670042007573 0 0.76216170208113132
+  outer loop
+   vertex -5.8079638481140137 1 -5.5015950202941895
+   vertex -4.489497184753418 3 -6.6215119361877441
+   vertex -5.8079638481140137 3 -5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0.79609296820963171 -0 0.60517434344755416
+  outer loop
+   vertex -6.8548569679260254 1 -4.1244311332702637
+   vertex -5.8079638481140137 1 -5.5015950202941895
+   vertex -5.8079638481140137 3 -5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0.79609296820963171 0 0.60517434344755416
+  outer loop
+   vertex -6.8548569679260254 1 -4.1244311332702637
+   vertex -5.8079638481140137 3 -5.5015950202941895
+   vertex -6.8548569679260254 3 -4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0.90757548589128689 -0 0.4198889584273377
+  outer loop
+   vertex -7.5812249183654785 1 -2.5544118881225586
+   vertex -6.8548569679260254 1 -4.1244311332702637
+   vertex -6.8548569679260254 3 -4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0.90757548589128689 0 0.4198889584273377
+  outer loop
+   vertex -7.5812249183654785 1 -2.5544118881225586
+   vertex -6.8548569679260254 3 -4.1244311332702637
+   vertex -7.5812249183654785 3 -2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0.97662045080518167 -0 0.21497091679825825
+  outer loop
+   vertex -7.9531040191650391 1 -0.86495202779769897
+   vertex -7.5812249183654785 1 -2.5544118881225586
+   vertex -7.5812249183654785 3 -2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0.97662045080518167 0 0.21497091679825825
+  outer loop
+   vertex -7.9531040191650391 1 -0.86495202779769897
+   vertex -7.5812249183654785 3 -2.5544118881225586
+   vertex -7.9531040191650391 3 -0.86495202779769897
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex -7.9531040191650391 1 0.86495202779769897
+   vertex -7.9531040191650391 1 -0.86495202779769897
+   vertex -7.9531040191650391 3 -0.86495202779769897
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex -7.9531040191650391 1 0.86495202779769897
+   vertex -7.9531040191650391 3 -0.86495202779769897
+   vertex -7.9531040191650391 3 0.86495202779769897
+  endloop
+ endfacet
+ facet normal 0.97662045080518167 0 -0.21497091679825825
+  outer loop
+   vertex -7.5812249183654785 1 2.5544118881225586
+   vertex -7.9531040191650391 1 0.86495202779769897
+   vertex -7.9531040191650391 3 0.86495202779769897
+  endloop
+ endfacet
+ facet normal 0.97662045080518167 0 -0.21497091679825825
+  outer loop
+   vertex -7.5812249183654785 1 2.5544118881225586
+   vertex -7.9531040191650391 3 0.86495202779769897
+   vertex -7.5812249183654785 3 2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0.90757548589128689 0 -0.4198889584273377
+  outer loop
+   vertex -6.8548569679260254 1 4.1244311332702637
+   vertex -7.5812249183654785 1 2.5544118881225586
+   vertex -7.5812249183654785 3 2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0.90757548589128689 0 -0.4198889584273377
+  outer loop
+   vertex -6.8548569679260254 1 4.1244311332702637
+   vertex -7.5812249183654785 3 2.5544118881225586
+   vertex -6.8548569679260254 3 4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0.79609296820963171 0 -0.60517434344755416
+  outer loop
+   vertex -5.8079638481140137 1 5.5015950202941895
+   vertex -6.8548569679260254 1 4.1244311332702637
+   vertex -6.8548569679260254 3 4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0.79609296820963171 0 -0.60517434344755416
+  outer loop
+   vertex -5.8079638481140137 1 5.5015950202941895
+   vertex -6.8548569679260254 3 4.1244311332702637
+   vertex -5.8079638481140137 3 5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0 -1 1.22464870546974e-16
+  outer loop
+   vertex 61 7.4703452449041523e-15 61
+   vertex -61 7.4703452449041523e-15 61
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal 0 -1 1.22464870546974e-16
+  outer loop
+   vertex 60 7.3478803743571783e-15 60
+   vertex 61 7.4703452449041523e-15 61
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal -1.9440100428787221e-22 -1 1.224646761459697e-16
+  outer loop
+   vertex -61 -7.4703452449041523e-15 -61
+   vertex -60 7.3478803743571783e-15 60
+   vertex -61 7.4703452449041523e-15 61
+  endloop
+ endfacet
+ facet normal 1.9764102102600342e-22 -1 1.2246467290595297e-16
+  outer loop
+   vertex -60 -7.3478803743571783e-15 -60
+   vertex -60 7.3478803743571783e-15 60
+   vertex -61 -7.4703452449041523e-15 -61
+  endloop
+ endfacet
+ facet normal 0 -1 1.22464870546974e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex -60 -7.3478803743571783e-15 -60
+   vertex -61 -7.4703452449041523e-15 -61
+  endloop
+ endfacet
+ facet normal 0 -1 1.22464870546974e-16
+  outer loop
+   vertex 61 -7.4703452449041523e-15 -61
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex -61 -7.4703452449041523e-15 -61
+  endloop
+ endfacet
+ facet normal 1.9440100428787221e-22 -1 1.224646761459697e-16
+  outer loop
+   vertex 61 -7.4703452449041523e-15 -61
+   vertex 61 7.4703452449041523e-15 61
+   vertex 60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal -1.9764102102600342e-22 -1 1.2246467290595297e-16
+  outer loop
+   vertex 61 -7.4703452449041523e-15 -61
+   vertex 60 7.3478803743571783e-15 60
+   vertex 60 -7.3478803743571783e-15 -60
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -4.489497184753418 1 6.6215119361877441
+   vertex -6.8548569679260254 1 4.1244311332702637
+   vertex -5.8079638481140137 1 5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -2.9611051082611084 1 7.4318141937255859
+   vertex -1.2942559719085693 1 7.8946118354797363
+   vertex -4.489497184753418 1 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -1.2942559719085693 1 7.8946118354797363
+   vertex 0.43311101198196411 1 7.9882669448852539
+   vertex -4.489497184753418 1 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -7.5812249183654785 1 2.5544118881225586
+   vertex -7.9531040191650391 1 -0.86495202779769897
+   vertex -7.9531040191650391 1 0.86495202779769897
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 2.1402270793914795 1 7.708399772644043
+   vertex 3.7472670078277588 1 7.0680961608886719
+   vertex 0.43311101198196411 1 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -7.9531040191650391 1 -0.86495202779769897
+   vertex -6.8548569679260254 1 -4.1244311332702637
+   vertex -7.5812249183654785 1 -2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -7.5812249183654785 1 2.5544118881225586
+   vertex -6.8548569679260254 1 -4.1244311332702637
+   vertex -7.9531040191650391 1 -0.86495202779769897
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 3.7472670078277588 1 7.0680961608886719
+   vertex 5.1790900230407715 1 6.0972962379455566
+   vertex 0.43311101198196411 1 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -6.8548569679260254 1 4.1244311332702637
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -7.5812249183654785 1 2.5544118881225586
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -6.8548569679260254 1 -4.1244311332702637
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -5.8079638481140137 1 -5.5015950202941895
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex -4.489497184753418 1 6.6215119361877441
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -6.8548569679260254 1 4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -7.5812249183654785 1 2.5544118881225586
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -6.8548569679260254 1 -4.1244311332702637
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 6.368743896484375 1 4.8413939476013184
+   vertex 7.2606029510498047 1 3.3591129779815674
+   vertex 5.1790900230407715 1 6.0972962379455566
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 5.1790900230407715 1 6.0972962379455566
+   vertex 7.2606029510498047 1 3.3591129779815674
+   vertex 0.43311101198196411 1 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -4.489497184753418 1 -6.6215119361877441
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex -2.9611051082611084 1 -7.4318141937255859
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 0.43311101198196411 1 7.9882669448852539
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex -4.489497184753418 1 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -4.489497184753418 1 6.6215119361877441
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex -4.489497184753418 1 -6.6215119361877441
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 8 1 -1.2246468525851679e-16
+   vertex 7.8129639625549316 1 -1.7197639942169189
+   vertex 7.8129639625549316 1 1.7197639942169189
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 7.8129639625549316 1 1.7197639942169189
+   vertex 7.8129639625549316 1 -1.7197639942169189
+   vertex 7.2606029510498047 1 3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex 2.1402270793914795 1 -7.708399772644043
+   vertex 0.43311101198196411 1 -7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex 3.7472670078277588 1 -7.0680961608886719
+   vertex 2.1402270793914795 1 -7.708399772644043
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 7.2606029510498047 1 -3.3591129779815674
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 7.8129639625549316 1 -1.7197639942169189
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 7.2606029510498047 1 3.3591129779815674
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 0.43311101198196411 1 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 7.8129639625549316 1 -1.7197639942169189
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 7.2606029510498047 1 3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0 1 -0
+  outer loop
+   vertex 6.368743896484375 1 -4.8413939476013184
+   vertex 5.1790900230407715 1 -6.0972962379455566
+   vertex 0.43311101198196411 1 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex 0.43311101198196411 1 7.9882669448852539
+   vertex 5.1790900230407715 1 -6.0972962379455566
+   vertex -1.2942559719085693 1 -7.8946118354797363
+  endloop
+ endfacet
+ facet normal 0 1 0
+  outer loop
+   vertex -1.2942559719085693 1 -7.8946118354797363
+   vertex 5.1790900230407715 1 -6.0972962379455566
+   vertex 3.7472670078277588 1 -7.0680961608886719
+  endloop
+ endfacet
+ facet normal -2.7145736657710727e-24 -1 1.2246466944387791e-16
+  outer loop
+   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
+   vertex -60 7.3478803743571783e-15 60
+   vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895
+  endloop
+ endfacet
+ facet normal 9.8604014504559914e-24 -1 1.2246468194816157e-16
+  outer loop
+   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
+   vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal 2.3750917541729913e-23 -1 1.2246469696643964e-16
+  outer loop
+   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
+   vertex -60 7.3478803743571783e-15 60
+   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
+  endloop
+ endfacet
+ facet normal 3.140053166932519e-24 -1 1.2246467555621105e-16
+  outer loop
+   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
+   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal -4.6556805959120687e-24 -1 1.2246466614397647e-16
+  outer loop
+   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
+   vertex -60 7.3478803743571783e-15 60
+   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
+  endloop
+ endfacet
+ facet normal 2.1338697076538101e-24 -1 1.2246467463807433e-16
+  outer loop
+   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
+   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal 1.0466145348730118e-23 -1 1.2246468318133267e-16
+  outer loop
+   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
+   vertex -60 7.3478803743571783e-15 60
+   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
+  endloop
+ endfacet
+ facet normal 1.1505000566059115e-23 -1 1.2246468288594578e-16
+  outer loop
+   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
+   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal -9.8604014504559914e-24 -1 1.2246468194816157e-16
+  outer loop
+   vertex -60 -7.3478803743571783e-15 -60
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
+  endloop
+ endfacet
+ facet normal -3.140053166932519e-24 -1 1.2246467555621105e-16
+  outer loop
+   vertex -60 -7.3478803743571783e-15 -60
+   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
+   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
+  endloop
+ endfacet
+ facet normal -2.1338697076538101e-24 -1 1.2246467463807433e-16
+  outer loop
+   vertex -60 -7.3478803743571783e-15 -60
+   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
+   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
+  endloop
+ endfacet
+ facet normal -1.6585455949044178e-25 -1 1.2246467290595297e-16
+  outer loop
+   vertex -60 -7.3478803743571783e-15 -60
+   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
+   vertex -60 7.3478803743571783e-15 60
+  endloop
+ endfacet
+ facet normal -3.7720394482795526e-23 -1 1.2246471422019109e-16
+  outer loop
+   vertex 60 7.3478803743571783e-15 60
+   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
+   vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043
+  endloop
+ endfacet
+ facet normal 8.8771827388911874e-24 -1 1.2246466266075848e-16
+  outer loop
+   vertex 60 7.3478803743571783e-15 60
+   vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+  endloop
+ endfacet
+ facet normal -1.3032959457950054e-24 -1 1.2246467347993763e-16
+  outer loop
+   vertex 60 7.3478803743571783e-15 60
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+   vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566
+  endloop
+ endfacet
+ facet normal 0 -1 1.2246467102058172e-16
+  outer loop
+   vertex 60 7.3478803743571783e-15 60
+   vertex -60 7.3478803743571783e-15 60
+   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 8.1790643130613495e-25 -1 1.2246467132260199e-16
+  outer loop
+   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
+   vertex 60 7.3478803743571783e-15 60
+   vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566
+  endloop
+ endfacet
+ facet normal 2.7145738562238688e-24 -1 1.2246466944387788e-16
+  outer loop
+   vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+   vertex -60 -7.3478803743571783e-15 -60
+  endloop
+ endfacet
+ facet normal -9.4851118116718549e-24 -1 1.2246468134032765e-16
+  outer loop
+   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
+   vertex 60 7.3478803743571783e-15 60
+   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
+  endloop
+ endfacet
+ facet normal -2.3750917541729936e-23 -1 1.2246469696643964e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441
+   vertex -60 -7.3478803743571783e-15 -60
+  endloop
+ endfacet
+ facet normal -4.7315581860572422e-24 -1 1.2246467691420446e-16
+  outer loop
+   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
+   vertex 60 7.3478803743571783e-15 60
+   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
+  endloop
+ endfacet
+ facet normal 4.6556805959120643e-24 -1 1.2246466614397657e-16
+  outer loop
+   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -60 -7.3478803743571783e-15 -60
+  endloop
+ endfacet
+ facet normal -7.942874688939922e-24 -1 1.2246467978977771e-16
+  outer loop
+   vertex 8 0 0
+   vertex 60 7.3478803743571783e-15 60
+   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
+  endloop
+ endfacet
+ facet normal -1.0466145348730109e-23 -1 1.224646831813325e-16
+  outer loop
+   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
+   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
+   vertex -60 -7.3478803743571783e-15 -60
+  endloop
+ endfacet
+ facet normal 7.942874688939922e-24 -1 1.2246467978977771e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 8 0 0
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+  endloop
+ endfacet
+ facet normal 4.7315582396553985e-24 -1 1.2246467691420446e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674
+  endloop
+ endfacet
+ facet normal 9.4851117135931716e-24 -1 1.2246468134032765e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674
+   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
+  endloop
+ endfacet
+ facet normal -8.1790624146971067e-25 -1 1.224646713226018e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
+   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
+  endloop
+ endfacet
+ facet normal 1.3032959457950054e-24 -1 1.2246467347993763e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
+   vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719
+  endloop
+ endfacet
+ facet normal -8.8771827388911874e-24 -1 1.2246466266075848e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719
+   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
+  endloop
+ endfacet
+ facet normal 3.7720394482795526e-23 -1 1.2246471422019109e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
+   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
+  endloop
+ endfacet
+ facet normal 0 -1 1.2246467102058172e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
+   vertex -60 -7.3478803743571783e-15 -60
+  endloop
+ endfacet
+ facet normal 0 -1 1.2246467290595297e-16
+  outer loop
+   vertex 60 -7.3478803743571783e-15 -60
+   vertex 60 7.3478803743571783e-15 60
+   vertex 8 0 0
+  endloop
+ endfacet
+ facet normal -5.5610874107037022e-23 -1 1.2246473171814796e-16
+  outer loop
+   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
+   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
+   vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895
+  endloop
+ endfacet
+ facet normal 3.5336500887342006e-23 -1 1.2246468288594578e-16
+  outer loop
+   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
+   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
+   vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897
+  endloop
+ endfacet
+ facet normal -6.92615645630674e-24 -1 1.224646743215047e-16
+  outer loop
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
+   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
+  endloop
+ endfacet
+ facet normal 6.5046913229555174e-24 -1 1.2246475624605834e-16
+  outer loop
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
+   vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363
+  endloop
+ endfacet
+ facet normal -8.4660190461211364e-23 -1 1.2246442789979388e-16
+  outer loop
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+   vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043
+   vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539
+  endloop
+ endfacet
+ facet normal 5.747249094393101e-24 -1 1.2246467966791322e-16
+  outer loop
+   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
+   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
+   vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586
+  endloop
+ endfacet
+ facet normal -1.0202516191171447e-23 -1 1.2246467735352452e-16
+  outer loop
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
+   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
+  endloop
+ endfacet
+ facet normal -3.7938552191334051e-24 -1 1.2246467876417735e-16
+  outer loop
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
+   vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586
+  endloop
+ endfacet
+ facet normal -2.0443883565058697e-23 -1 1.2246467390280494e-16
+  outer loop
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+   vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897
+   vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637
+  endloop
+ endfacet
+ facet normal -9.2000602155814685e-24 -1 1.2246466183307963e-16
+  outer loop
+   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
+   vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+  endloop
+ endfacet
+ facet normal -1.0652601301104021e-22 -1 1.2246454083605884e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+   vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441
+  endloop
+ endfacet
+ facet normal 3.0093036565001882e-23 -1 1.2246468500393508e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
+   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
+  endloop
+ endfacet
+ facet normal -2.4039170381415668e-24 -1 1.2246468560094203e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
+   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
+  endloop
+ endfacet
+ facet normal -2.547683748911312e-24 -1 1.2246468145404106e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441
+   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
+  endloop
+ endfacet
+ facet normal -6.3469708514441707e-24 -1 1.2246468500393508e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+   vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859
+  endloop
+ endfacet
+ facet normal 5.7339184803149965e-24 -1 1.2246467941472114e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184
+   vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719
+  endloop
+ endfacet
+ facet normal -1.3741936668902775e-23 -1 1.2246467768225861e-16
+  outer loop
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637
+   vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895
+  endloop
+ endfacet
+ facet normal 6.7308336531038825e-24 -1 1.2246467361801442e-16
+  outer loop
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
+  endloop
+ endfacet
+ facet normal 6.3666292080684972e-24 -1 1.2246468065361937e-16
+  outer loop
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
+   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
+  endloop
+ endfacet
+ facet normal 0 -1 1.2246468065361937e-16
+  outer loop
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex 8 0 0
+   vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189
+  endloop
+ endfacet
+ facet normal 3.1842828908146993e-24 -1 1.2246468030751846e-16
+  outer loop
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674
+   vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859
+  endloop
+ endfacet
+ facet normal 2.774103235630015e-24 -1 1.2246492738336706e-16
+  outer loop
+   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
+   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
+   vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539
+  endloop
+ endfacet
+ facet normal 1.7384802803360558e-23 -1 1.2246465790458427e-16
+  outer loop
+   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363
+  endloop
+ endfacet
+ facet normal 3.2253718924354727e-23 -1 1.2246466764090838e-16
+  outer loop
+   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
+   vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+  endloop
+ endfacet
+ facet normal -3.383977019878155e-23 -1 1.2246472531209143e-16
+  outer loop
+   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
+   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
+   vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719
+  endloop
+ endfacet
+ facet normal -1.3726847622115549e-23 -1 1.2246468737510366e-16
+  outer loop
+   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+   vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043
+  endloop
+ endfacet
+ facet normal -2.4794069352434339e-23 -1 1.2246469403403049e-16
+  outer loop
+   vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566
+   vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184
+   vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189
+  endloop
+ endfacet
+endsolid
diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl b/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl
new file mode 100644
index 0000000000000000000000000000000000000000..164487a33a2bf6c3b0d783229fa13bbae5522820
Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl differ
diff --git a/apps/cpu/Multiphase/backup/inlet1.stl b/apps/cpu/Multiphase/backup/inlet1.stl
new file mode 100644
index 0000000000000000000000000000000000000000..e3339340584bb199967b3f7fc4b2571c5cc64a75
--- /dev/null
+++ b/apps/cpu/Multiphase/backup/inlet1.stl
@@ -0,0 +1,1710 @@
+solid Visualization Toolkit generated SLA File
+ facet normal 0 -0.85844862044487247 -0.51289956722178598
+  outer loop
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex 8 -4.8490467071533203 -3.5230386257171631
+  endloop
+ endfacet
+ facet normal 0 -0.85844862044487247 -0.51289956722178598
+  outer loop
+   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+  endloop
+ endfacet
+ facet normal 0 -0.75307168647452871 -0.65793847359035706
+  outer loop
+   vertex 8 -4.8490467071533203 -3.5230386257171631
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex 8 -4.1420578956604004 -4.3322529792785645
+  endloop
+ endfacet
+ facet normal -3.483186817680354e-17 0.99597429384365632 0.089639310587654369
+  outer loop
+   vertex 8 5.9937515258789062 2.5014704053256086e-15
+   vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15
+   vertex 8 5.8974294662475586 1.070225715637207
+  endloop
+ endfacet
+ facet normal 0 -0.75307168647452871 -0.65793847359035706
+  outer loop
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
+   vertex 8 -4.1420578956604004 -4.3322529792785645
+  endloop
+ endfacet
+ facet normal 0 -0.62348983541065761 -0.78183145571126211
+  outer loop
+   vertex 8 -4.1420578956604004 -4.3322529792785645
+   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
+   vertex 8 -3.3019397258758545 -5.0022249221801758
+  endloop
+ endfacet
+ facet normal -0 0.96396290563681286 0.26603668272671144
+  outer loop
+   vertex 8 5.8974294662475586 1.070225715637207
+   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
+   vertex 8 5.6115593910217285 2.106053352355957
+  endloop
+ endfacet
+ facet normal -0 0.99597429384365654 0.089639310587653898
+  outer loop
+   vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15
+   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
+   vertex 8 5.8974294662475586 1.070225715637207
+  endloop
+ endfacet
+ facet normal 0 -0.47386859124399539 -0.88059557018669543
+  outer loop
+   vertex 8 -3.3019397258758545 -5.0022249221801758
+   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+  endloop
+ endfacet
+ facet normal 0 -0.62348983541065761 -0.78183145571126211
+  outer loop
+   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
+   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
+   vertex 8 -3.3019397258758545 -5.0022249221801758
+  endloop
+ endfacet
+ facet normal -0 0.90096871492997632 0.43388405676796565
+  outer loop
+   vertex 8 5.6115593910217285 2.106053352355957
+   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
+   vertex 8 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+ facet normal -0 0.96396290563681286 0.26603668272671144
+  outer loop
+   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
+   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
+   vertex 8 5.6115593910217285 2.106053352355957
+  endloop
+ endfacet
+ facet normal 0 -0.47386859124399539 -0.88059557018669543
+  outer loop
+   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
+   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+  endloop
+ endfacet
+ facet normal -0 0.90096871492997632 0.43388405676796565
+  outer loop
+   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
+   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
+   vertex 8 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+ facet normal 0 -0.30901698225917551 -0.95105652023180642
+  outer loop
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+   vertex 8 -1.3337352275848389 -5.8434758186340332
+  endloop
+ endfacet
+ facet normal 0 -0.13423310024304191 -0.99094978419652602
+  outer loop
+   vertex 8 -1.3337352275848389 -5.8434758186340332
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+   vertex 8 -0.26890864968299866 -5.9877161979675293
+  endloop
+ endfacet
+ facet normal 0 -0.30901698225917551 -0.95105652023180642
+  outer loop
+   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+  endloop
+ endfacet
+ facet normal -0 0.80901707821253466 0.58778513689991641
+  outer loop
+   vertex 8 5.1453285217285156 3.0741908550262451
+   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
+   vertex 8 4.5137233734130859 3.9435210227966309
+  endloop
+ endfacet
+ facet normal 0 0.80901707821253466 0.58778513689991641
+  outer loop
+   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
+   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
+   vertex 8 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+ facet normal 0 0.044864920280647716 -0.99899306250254383
+  outer loop
+   vertex 8 -0.26890864968299866 -5.9877161979675293
+   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
+   vertex 8 0.80456084012985229 -5.9395065307617188
+  endloop
+ endfacet
+ facet normal 0 -0.13423310024304191 -0.99094978419652602
+  outer loop
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
+   vertex 8 -0.26890864968299866 -5.9877161979675293
+  endloop
+ endfacet
+ facet normal -0 0.69106276312575432 0.72279475469942178
+  outer loop
+   vertex 8 4.5137233734130859 3.9435210227966309
+   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
+   vertex 8 3.7370429039001465 4.6861038208007812
+  endloop
+ endfacet
+ facet normal 0 0.69106276312575432 0.72279475469942178
+  outer loop
+   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
+   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
+   vertex 8 4.5137233734130859 3.9435210227966309
+  endloop
+ endfacet
+ facet normal 0 0.22252075334182159 -0.97492795340588534
+  outer loop
+   vertex 8 0.80456084012985229 -5.9395065307617188
+   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
+   vertex 8 1.8521710634231567 -5.7003965377807617
+  endloop
+ endfacet
+ facet normal 0 0.044864920280647716 -0.99899306250254383
+  outer loop
+   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
+   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
+   vertex 8 0.80456084012985229 -5.9395065307617188
+  endloop
+ endfacet
+ facet normal -0 0.55089693770547221 0.83457328259819885
+  outer loop
+   vertex 8 3.7370429039001465 4.6861038208007812
+   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
+   vertex 8 2.8402509689331055 5.2780709266662598
+  endloop
+ endfacet
+ facet normal 0 0.39302502509892845 -0.91952777535319008
+  outer loop
+   vertex 8 1.8521710634231567 -5.7003965377807617
+   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
+   vertex 8 2.8402509689331055 -5.2780709266662598
+  endloop
+ endfacet
+ facet normal 0 0.55089693770547221 0.83457328259819885
+  outer loop
+   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
+   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
+   vertex 8 3.7370429039001465 4.6861038208007812
+  endloop
+ endfacet
+ facet normal 0 0.22252075334182159 -0.97492795340588534
+  outer loop
+   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
+   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
+   vertex 8 1.8521710634231567 -5.7003965377807617
+  endloop
+ endfacet
+ facet normal 0 0.39302502509892845 0.91952777535319008
+  outer loop
+   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+   vertex 8 2.8402509689331055 5.2780709266662598
+  endloop
+ endfacet
+ facet normal -0 0.39302502509892845 0.91952777535319008
+  outer loop
+   vertex 8 2.8402509689331055 5.2780709266662598
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+   vertex 8 1.8521710634231567 5.7003965377807617
+  endloop
+ endfacet
+ facet normal 0 0.55089693770547221 -0.83457328259819885
+  outer loop
+   vertex 8 2.8402509689331055 -5.2780709266662598
+   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
+   vertex 8 3.7370429039001465 -4.6861038208007812
+  endloop
+ endfacet
+ facet normal -0 0.22252075334182159 0.97492795340588534
+  outer loop
+   vertex 8 1.8521710634231567 5.7003965377807617
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+   vertex 8 0.80456084012985229 5.9395065307617188
+  endloop
+ endfacet
+ facet normal 0 0.39302502509892845 -0.91952777535319008
+  outer loop
+   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
+   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
+   vertex 8 2.8402509689331055 -5.2780709266662598
+  endloop
+ endfacet
+ facet normal -0 0.22252075334182159 0.97492795340588534
+  outer loop
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
+   vertex 8 0.80456084012985229 5.9395065307617188
+  endloop
+ endfacet
+ facet normal 0 0.69106276312575432 -0.72279475469942178
+  outer loop
+   vertex 8 3.7370429039001465 -4.6861038208007812
+   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
+   vertex 8 4.5137233734130859 -3.9435210227966309
+  endloop
+ endfacet
+ facet normal 0 0.55089693770547221 -0.83457328259819885
+  outer loop
+   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
+   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
+   vertex 8 3.7370429039001465 -4.6861038208007812
+  endloop
+ endfacet
+ facet normal 0 0.044864920280647716 0.99899306250254383
+  outer loop
+   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+   vertex 8 0.80456084012985229 5.9395065307617188
+  endloop
+ endfacet
+ facet normal -0 0.044864920280647716 0.99899306250254383
+  outer loop
+   vertex 8 0.80456084012985229 5.9395065307617188
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+   vertex 8 -0.26890864968299866 5.9877161979675293
+  endloop
+ endfacet
+ facet normal 0 0.80901707821253466 -0.58778513689991641
+  outer loop
+   vertex 8 4.5137233734130859 -3.9435210227966309
+   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
+   vertex 8 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal 0 -0.13423310024304191 0.99094978419652602
+  outer loop
+   vertex 8 -0.26890864968299866 5.9877161979675293
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+   vertex 8 -1.3337352275848389 5.8434758186340332
+  endloop
+ endfacet
+ facet normal 0 0.69106276312575432 -0.72279475469942178
+  outer loop
+   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
+   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
+   vertex 8 4.5137233734130859 -3.9435210227966309
+  endloop
+ endfacet
+ facet normal 0 -0.13423310024304191 0.99094978419652602
+  outer loop
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
+   vertex 8 -1.3337352275848389 5.8434758186340332
+  endloop
+ endfacet
+ facet normal 0 0.80901707821253466 -0.58778513689991641
+  outer loop
+   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
+   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
+   vertex 8 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal 0 0.90096871492997632 -0.43388405676796565
+  outer loop
+   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+   vertex 8 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal 0 -0.30901698225917551 0.95105652023180642
+  outer loop
+   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+   vertex 8 -1.3337352275848389 5.8434758186340332
+  endloop
+ endfacet
+ facet normal 0 0.90096871492997632 -0.43388405676796565
+  outer loop
+   vertex 8 5.1453285217285156 -3.0741908550262451
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+   vertex 8 5.6115593910217285 -2.106053352355957
+  endloop
+ endfacet
+ facet normal 0 -0.30901698225917551 0.95105652023180642
+  outer loop
+   vertex 8 -1.3337352275848389 5.8434758186340332
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+   vertex 8 -2.3556942939758301 5.5114212036132812
+  endloop
+ endfacet
+ facet normal 0 0.96396290563681286 -0.26603668272671144
+  outer loop
+   vertex 8 5.6115593910217285 -2.106053352355957
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+   vertex 8 5.8974294662475586 -1.070225715637207
+  endloop
+ endfacet
+ facet normal 0 -0.47386859124399539 0.88059557018669543
+  outer loop
+   vertex 8 -2.3556942939758301 5.5114212036132812
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+   vertex 8 -3.3019397258758545 5.0022249221801758
+  endloop
+ endfacet
+ facet normal 0 0.96396290563681286 -0.26603668272671144
+  outer loop
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
+   vertex 8 5.8974294662475586 -1.070225715637207
+  endloop
+ endfacet
+ facet normal 0 -0.47386859124399539 0.88059557018669543
+  outer loop
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
+   vertex 8 -3.3019397258758545 5.0022249221801758
+  endloop
+ endfacet
+ facet normal 0 0.99597429384365654 -0.089639310587653981
+  outer loop
+   vertex 8 5.8974294662475586 -1.070225715637207
+   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
+   vertex 8 5.9937515258789062 2.5014704053256086e-15
+  endloop
+ endfacet
+ facet normal 3.4831868176803565e-17 0.99597429384365632 -0.089639310587654439
+  outer loop
+   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
+   vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15
+   vertex 8 5.9937515258789062 2.5014704053256086e-15
+  endloop
+ endfacet
+ facet normal 0 -0.62348983541065761 0.78183145571126211
+  outer loop
+   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex 8 -3.3019397258758545 5.0022249221801758
+  endloop
+ endfacet
+ facet normal 0 -0.62348983541065761 0.78183145571126211
+  outer loop
+   vertex 8 -3.3019397258758545 5.0022249221801758
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex 8 -4.1420578956604004 4.3322529792785645
+  endloop
+ endfacet
+ facet normal 0 -0.75307168647452871 0.65793847359035706
+  outer loop
+   vertex 8 -4.1420578956604004 4.3322529792785645
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex 8 -4.8490467071533203 3.5230386257171631
+  endloop
+ endfacet
+ facet normal 0 -0.75307168647452871 0.65793847359035706
+  outer loop
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
+   vertex 8 -4.8490467071533203 3.5230386257171631
+  endloop
+ endfacet
+ facet normal 0 -0.85844862044487247 0.51289956722178598
+  outer loop
+   vertex 8 -4.8490467071533203 3.5230386257171631
+   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
+   vertex 8 -5.4001836776733398 2.6005914211273193
+  endloop
+ endfacet
+ facet normal 0 -0.85844862044487247 0.51289956722178598
+  outer loop
+   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
+   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
+   vertex 8 -5.4001836776733398 2.6005914211273193
+  endloop
+ endfacet
+ facet normal 0 -0.93623494328775736 0.35137463051132423
+  outer loop
+   vertex 8 -5.4001836776733398 2.6005914211273193
+   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
+   vertex 8 -5.7777538299560547 1.5945587158203125
+  endloop
+ endfacet
+ facet normal 0 -0.93623494328775736 0.35137463051132423
+  outer loop
+   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
+   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
+   vertex 8 -5.7777538299560547 1.5945587158203125
+  endloop
+ endfacet
+ facet normal 0 -0.98392955450267261 0.17855708268274328
+  outer loop
+   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex 8 -5.7777538299560547 1.5945587158203125
+  endloop
+ endfacet
+ facet normal 0 -0.98392955450267261 0.17855708268274328
+  outer loop
+   vertex 8 -5.7777538299560547 1.5945587158203125
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex 8 -5.9696226119995117 0.53727573156356812
+  endloop
+ endfacet
+ facet normal 0 -1 0
+  outer loop
+   vertex 8 -5.9696226119995117 0.53727573156356812
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex 8 -5.9696226119995117 -0.53727573156356812
+  endloop
+ endfacet
+ facet normal 0 -1 0
+  outer loop
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
+   vertex 8 -5.9696226119995117 -0.53727573156356812
+  endloop
+ endfacet
+ facet normal 0 -0.98392955450267261 -0.17855708268274328
+  outer loop
+   vertex 8 -5.9696226119995117 -0.53727573156356812
+   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
+   vertex 8 -5.7777538299560547 -1.5945587158203125
+  endloop
+ endfacet
+ facet normal 0 -0.98392955450267261 -0.17855708268274328
+  outer loop
+   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
+   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
+   vertex 8 -5.7777538299560547 -1.5945587158203125
+  endloop
+ endfacet
+ facet normal 0 -0.93623494328775736 -0.35137463051132423
+  outer loop
+   vertex 8 -5.7777538299560547 -1.5945587158203125
+   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+  endloop
+ endfacet
+ facet normal 0 -0.93623494328775736 -0.35137463051132423
+  outer loop
+   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
+   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+  endloop
+ endfacet
+ facet normal -0 0.23931571466750717 0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
+   vertex 8 -0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 0.23931571466750717 0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
+   vertex 8 -0.89344334602355957 -2.3558163642883301
+   vertex 8 -0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 0 1
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
+   vertex 8 -0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 -0 1
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+   vertex 8 -0.30369770526885986 -2.5011756420135498
+   vertex 8 0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal 4.6838001325319123e-17 -0.99270884511338364 -0.12053691896532001
+  outer loop
+   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
+   vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15
+   vertex 8 2.5195460319519043 4.4300420299627722e-15
+  endloop
+ endfacet
+ facet normal 0 -0.23931571466750717 0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+   vertex 8 0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 -0.99270884511338353 -0.12053691896532118
+  outer loop
+   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
+   vertex 8 2.5195460319519043 4.4300420299627722e-15
+   vertex 8 2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal 0 -0.23931571466750717 0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
+   vertex 8 0.30369770526885986 -2.5011756420135498
+   vertex 8 0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 -0.93501633902348258 -0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
+   vertex 8 2.4463324546813965 0.60296684503555298
+   vertex 8 2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 -0.46472313027195961 0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
+   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
+   vertex 8 0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 -0.93501633902348258 -0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
+   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
+   vertex 8 2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal 0 -0.46472313027195961 0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
+   vertex 8 0.89344334602355957 -2.3558163642883301
+   vertex 8 1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal 0 -0.66312261734283129 0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+   vertex 8 1.4312652349472046 -2.0735456943511963
+   vertex 8 1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 -0.82298382978185469 -0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+   vertex 8 2.2309472560882568 1.1708914041519165
+   vertex 8 1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 -0.66312261734283129 0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
+   vertex 8 1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal 0 -0.82298382978185469 -0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
+   vertex 8 2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 -0.82298382978185469 0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+   vertex 8 1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 -0.82298382978185469 0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
+   vertex 8 1.8859072923660278 -1.6707680225372314
+   vertex 8 2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 -0.66312261734283129 -0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
+   vertex 8 1.8859072923660278 1.6707680225372314
+   vertex 8 1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal 0 -0.66312261734283129 -0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+   vertex 8 1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 -0.93501633902348258 0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
+   vertex 8 2.2309472560882568 -1.1708914041519165
+   vertex 8 2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal 0 -0.93501633902348258 0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
+   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
+   vertex 8 2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 -0.46472313027195961 -0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
+   vertex 8 1.4312652349472046 2.0735456943511963
+   vertex 8 0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 -0.46472313027195961 -0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
+   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
+   vertex 8 1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal -4.721925413423835e-17 -0.99270884511338364 0.1205369189653194
+  outer loop
+   vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15
+   vertex 8 2.4463324546813965 -0.60296684503555298
+   vertex 8 2.5195460319519043 4.4300420299627722e-15
+  endloop
+ endfacet
+ facet normal 0 -0.99270884511338364 0.12053691896532057
+  outer loop
+   vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15
+   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
+   vertex 8 2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal 0 -0.23931571466750717 -0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+   vertex 8 0.89344334602355957 2.3558163642883301
+   vertex 8 0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 -0.23931571466750717 -0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
+   vertex 8 0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 -0 -1
+  outer loop
+   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
+   vertex 8 0.30369770526885986 2.5011756420135498
+   vertex 8 -0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 0 -1
+  outer loop
+   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+   vertex 8 0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 0.23931571466750717 -0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
+   vertex 8 -0.30369770526885986 2.5011756420135498
+   vertex 8 -0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 0.23931571466750717 -0.97094180500850835
+  outer loop
+   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
+   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
+   vertex 8 -0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal 0 0.46472313027195961 -0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+   vertex 8 -0.89344334602355957 2.3558163642883301
+   vertex 8 -1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal 0 0.46472313027195961 -0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
+   vertex 8 -0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal 0 0.66312261734283129 -0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
+   vertex 8 -1.4312652349472046 2.0735456943511963
+   vertex 8 -1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 0.66312261734283129 -0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+   vertex 8 -1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal 0 0.82298382978185469 -0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
+   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
+   vertex 8 -1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 0.82298382978185469 -0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
+   vertex 8 -1.8859072923660278 1.6707680225372314
+   vertex 8 -2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 0.93501633902348258 -0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
+   vertex 8 -2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 0.93501633902348258 -0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+   vertex 8 -2.2309472560882568 1.1708914041519165
+   vertex 8 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal 0 0.99270884511338353 -0.12053691896532118
+  outer loop
+   vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+   vertex 8 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal -2.208642532085365e-17 0.99270884511338364 -0.12053691896532064
+  outer loop
+   vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15
+   vertex 8 -2.4463324546813965 0.60296684503555298
+   vertex 8 -2.5195460319519043 1.7763568394002505e-15
+  endloop
+ endfacet
+ facet normal 2.192233482989147e-17 0.99270884511338364 0.1205369189653194
+  outer loop
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+   vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15
+   vertex 8 -2.5195460319519043 1.7763568394002505e-15
+  endloop
+ endfacet
+ facet normal 0 0.99270884511338364 0.12053691896531993
+  outer loop
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+   vertex 8 -2.5195460319519043 1.7763568394002505e-15
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal -0 0.93501633902348258 0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal 0 0.93501633902348258 0.35460463301982359
+  outer loop
+   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+   vertex 8 -2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal -0 0.82298382978185469 0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
+   vertex 8 -2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal 0 0.82298382978185469 0.56806479904812901
+  outer loop
+   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
+   vertex 8 -2.2309472560882568 -1.1708914041519165
+   vertex 8 -1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal -0 0.66312261734283129 0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
+   vertex 8 -1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal 0 0.66312261734283129 0.74851078440353358
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+   vertex 8 -1.8859072923660278 -1.6707680225372314
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal -0 0.46472313027195961 0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal 0 0.46472313027195961 0.88545604757674512
+  outer loop
+   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+   vertex 8 -0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
+   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
+   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
+   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
+   vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
+   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
+   vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631
+   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
+   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165
+   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
+   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
+   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812
+   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
+   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314
+   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
+   vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
+   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
+   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598
+   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
+   vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+   vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+   vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
+   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165
+   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
+   vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193
+   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
+   vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15
+   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
+   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
+   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
+   vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
+   vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125
+   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
+   vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298
+   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
+   vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+   vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293
+   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
+   vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
+   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
+   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
+   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
+   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15
+   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
+   vertex -7.0000004768371582 5.8974294662475586 1.070225715637207
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498
+   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
+   vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812
+   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
+   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332
+   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
+   vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
+   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
+   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298
+   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
+   vertex -7.0000004768371582 5.6115593910217285 2.106053352355957
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+   vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
+   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125
+   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
+   vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+   vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758
+   vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963
+   vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+   vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758
+   vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193
+   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
+   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165
+   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
+   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+   vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal -1 0 -0
+  outer loop
+   vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631
+   vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645
+   vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal -1 0 0
+  outer loop
+   vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165
+   vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314
+   vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -4.1420578956604004 -4.3322529792785645
+   vertex 8 -3.3019397258758545 -5.0022249221801758
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -1.8859072923660278 -1.6707680225372314
+   vertex 8 -4.1420578956604004 -4.3322529792785645
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 3.7370429039001465 4.6861038208007812
+   vertex 8 1.8859072923660278 1.6707680225372314
+   vertex 8 4.5137233734130859 3.9435210227966309
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 3.7370429039001465 4.6861038208007812
+   vertex 8 1.4312652349472046 2.0735456943511963
+   vertex 8 1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -4.8490467071533203 -3.5230386257171631
+   vertex 8 -4.1420578956604004 -4.3322529792785645
+   vertex 8 -1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -4.8490467071533203 -3.5230386257171631
+   vertex 8 -1.8859072923660278 -1.6707680225372314
+   vertex 8 -2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 2.8402509689331055 5.2780709266662598
+   vertex 8 1.4312652349472046 2.0735456943511963
+   vertex 8 3.7370429039001465 4.6861038208007812
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 2.8402509689331055 5.2780709266662598
+   vertex 8 0.89344334602355957 2.3558163642883301
+   vertex 8 1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+   vertex 8 -4.8490467071533203 -3.5230386257171631
+   vertex 8 -2.2309472560882568 -1.1708914041519165
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+   vertex 8 -2.2309472560882568 -1.1708914041519165
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 1.8859072923660278 -1.6707680225372314
+   vertex 8 3.7370429039001465 -4.6861038208007812
+   vertex 8 4.5137233734130859 -3.9435210227966309
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 1.8859072923660278 -1.6707680225372314
+   vertex 8 4.5137233734130859 -3.9435210227966309
+   vertex 8 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 1.4312652349472046 -2.0735456943511963
+   vertex 8 2.8402509689331055 -5.2780709266662598
+   vertex 8 3.7370429039001465 -4.6861038208007812
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 1.4312652349472046 -2.0735456943511963
+   vertex 8 3.7370429039001465 -4.6861038208007812
+   vertex 8 1.8859072923660278 -1.6707680225372314
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 2.2309472560882568 -1.1708914041519165
+   vertex 8 5.1453285217285156 -3.0741908550262451
+   vertex 8 5.6115593910217285 -2.106053352355957
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 2.2309472560882568 -1.1708914041519165
+   vertex 8 1.8859072923660278 -1.6707680225372314
+   vertex 8 5.1453285217285156 -3.0741908550262451
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 0.89344334602355957 -2.3558163642883301
+   vertex 8 1.8521710634231567 -5.7003965377807617
+   vertex 8 2.8402509689331055 -5.2780709266662598
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 1.8521710634231567 5.7003965377807617
+   vertex 8 0.30369770526885986 2.5011756420135498
+   vertex 8 0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 0.89344334602355957 -2.3558163642883301
+   vertex 8 2.8402509689331055 -5.2780709266662598
+   vertex 8 1.4312652349472046 -2.0735456943511963
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 1.8521710634231567 5.7003965377807617
+   vertex 8 0.89344334602355957 2.3558163642883301
+   vertex 8 2.8402509689331055 5.2780709266662598
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 2.4463324546813965 -0.60296684503555298
+   vertex 8 5.6115593910217285 -2.106053352355957
+   vertex 8 5.8974294662475586 -1.070225715637207
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -5.7777538299560547 -1.5945587158203125
+   vertex 8 -5.4001836776733398 -2.6005914211273193
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 2.4463324546813965 -0.60296684503555298
+   vertex 8 2.2309472560882568 -1.1708914041519165
+   vertex 8 5.6115593910217285 -2.106053352355957
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 0.80456084012985229 5.9395065307617188
+   vertex 8 0.30369770526885986 2.5011756420135498
+   vertex 8 1.8521710634231567 5.7003965377807617
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 0.30369770526885986 -2.5011756420135498
+   vertex 8 -0.26890864968299866 -5.9877161979675293
+   vertex 8 0.80456084012985229 -5.9395065307617188
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 0.30369770526885986 -2.5011756420135498
+   vertex 8 0.80456084012985229 -5.9395065307617188
+   vertex 8 1.8521710634231567 -5.7003965377807617
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 0.30369770526885986 -2.5011756420135498
+   vertex 8 1.8521710634231567 -5.7003965377807617
+   vertex 8 0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -5.9696226119995117 -0.53727573156356812
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+   vertex 8 -2.5195460319519043 -8.8817841970012523e-15
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 2.5195460319519043 -5.3290705182007514e-15
+   vertex 8 5.9937515258789062 -8.8817841970012523e-15
+   vertex 8 5.8974294662475586 1.070225715637207
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -5.9696226119995117 -0.53727573156356812
+   vertex 8 -5.7777538299560547 -1.5945587158203125
+   vertex 8 -2.4463324546813965 -0.60296684503555298
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -0.26890864968299866 5.9877161979675293
+   vertex 8 -0.30369770526885986 2.5011756420135498
+   vertex 8 0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 2.5195460319519043 -5.3290705182007514e-15
+   vertex 8 5.8974294662475586 -1.070225715637207
+   vertex 8 5.9937515258789062 -8.8817841970012523e-15
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 2.5195460319519043 -5.3290705182007514e-15
+   vertex 8 2.4463324546813965 -0.60296684503555298
+   vertex 8 5.8974294662475586 -1.070225715637207
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 -0.30369770526885986 -2.5011756420135498
+   vertex 8 -1.3337352275848389 -5.8434758186340332
+   vertex 8 -0.26890864968299866 -5.9877161979675293
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -0.30369770526885986 -2.5011756420135498
+   vertex 8 -0.26890864968299866 -5.9877161979675293
+   vertex 8 0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -0.26890864968299866 5.9877161979675293
+   vertex 8 0.30369770526885986 2.5011756420135498
+   vertex 8 0.80456084012985229 5.9395065307617188
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -5.9696226119995117 0.53727573156356812
+   vertex 8 -2.5195460319519043 -8.8817841970012523e-15
+   vertex 8 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -5.9696226119995117 0.53727573156356812
+   vertex 8 -5.9696226119995117 -0.53727573156356812
+   vertex 8 -2.5195460319519043 -8.8817841970012523e-15
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 2.4463324546813965 0.60296684503555298
+   vertex 8 5.8974294662475586 1.070225715637207
+   vertex 8 5.6115593910217285 2.106053352355957
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -1.3337352275848389 5.8434758186340332
+   vertex 8 -0.89344334602355957 2.3558163642883301
+   vertex 8 -0.30369770526885986 2.5011756420135498
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -1.3337352275848389 5.8434758186340332
+   vertex 8 -0.30369770526885986 2.5011756420135498
+   vertex 8 -0.26890864968299866 5.9877161979675293
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 2.4463324546813965 0.60296684503555298
+   vertex 8 2.5195460319519043 -5.3290705182007514e-15
+   vertex 8 5.8974294662475586 1.070225715637207
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -5.7777538299560547 1.5945587158203125
+   vertex 8 -5.9696226119995117 0.53727573156356812
+   vertex 8 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -0.89344334602355957 -2.3558163642883301
+   vertex 8 -1.3337352275848389 -5.8434758186340332
+   vertex 8 -0.30369770526885986 -2.5011756420135498
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -2.3556942939758301 5.5114212036132812
+   vertex 8 -1.4312652349472046 2.0735456943511963
+   vertex 8 -0.89344334602355957 2.3558163642883301
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 -0.89344334602355957 -2.3558163642883301
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+   vertex 8 -1.3337352275848389 -5.8434758186340332
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -2.3556942939758301 5.5114212036132812
+   vertex 8 -0.89344334602355957 2.3558163642883301
+   vertex 8 -1.3337352275848389 5.8434758186340332
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 2.2309472560882568 1.1708914041519165
+   vertex 8 5.6115593910217285 2.106053352355957
+   vertex 8 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -5.4001836776733398 2.6005914211273193
+   vertex 8 -2.4463324546813965 0.60296684503555298
+   vertex 8 -2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 -5.4001836776733398 2.6005914211273193
+   vertex 8 -5.7777538299560547 1.5945587158203125
+   vertex 8 -2.4463324546813965 0.60296684503555298
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 2.2309472560882568 1.1708914041519165
+   vertex 8 2.4463324546813965 0.60296684503555298
+   vertex 8 5.6115593910217285 2.106053352355957
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+   vertex 8 -0.89344334602355957 -2.3558163642883301
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -3.3019397258758545 5.0022249221801758
+   vertex 8 -1.4312652349472046 2.0735456943511963
+   vertex 8 -2.3556942939758301 5.5114212036132812
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 -1.4312652349472046 -2.0735456943511963
+   vertex 8 -3.3019397258758545 -5.0022249221801758
+   vertex 8 -2.3556942939758301 -5.5114212036132812
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -4.8490467071533203 3.5230386257171631
+   vertex 8 -2.2309472560882568 1.1708914041519165
+   vertex 8 -1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 -4.8490467071533203 3.5230386257171631
+   vertex 8 -5.4001836776733398 2.6005914211273193
+   vertex 8 -2.2309472560882568 1.1708914041519165
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 -4.1420578956604004 4.3322529792785645
+   vertex 8 -1.8859072923660278 1.6707680225372314
+   vertex 8 -1.4312652349472046 2.0735456943511963
+  endloop
+ endfacet
+ facet normal 1 -0 0
+  outer loop
+   vertex 8 -4.1420578956604004 4.3322529792785645
+   vertex 8 -4.8490467071533203 3.5230386257171631
+   vertex 8 -1.8859072923660278 1.6707680225372314
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 -4.1420578956604004 4.3322529792785645
+   vertex 8 -1.4312652349472046 2.0735456943511963
+   vertex 8 -3.3019397258758545 5.0022249221801758
+  endloop
+ endfacet
+ facet normal 1 0 0
+  outer loop
+   vertex 8 1.8859072923660278 1.6707680225372314
+   vertex 8 5.1453285217285156 3.0741908550262451
+   vertex 8 4.5137233734130859 3.9435210227966309
+  endloop
+ endfacet
+ facet normal 1 0 -0
+  outer loop
+   vertex 8 1.8859072923660278 1.6707680225372314
+   vertex 8 2.2309472560882568 1.1708914041519165
+   vertex 8 5.1453285217285156 3.0741908550262451
+  endloop
+ endfacet
+endsolid
diff --git a/apps/cpu/Multiphase/backup/tubeTransformed.stl b/apps/cpu/Multiphase/backup/tubeTransformed.stl
new file mode 100644
index 0000000000000000000000000000000000000000..f918dac8b84944d8e46c93df2e0cadec0738b647
Binary files /dev/null and b/apps/cpu/Multiphase/backup/tubeTransformed.stl differ
diff --git a/apps/cpu/ViskomatXL/viskomat.cfg b/apps/cpu/ViskomatXL/viskomat.cfg
index e178a8b27bfd353835f3f5728b8d1256a4bd81cb..71228231e36810fca21ebe752be2488b5c56264d 100644
--- a/apps/cpu/ViskomatXL/viskomat.cfg
+++ b/apps/cpu/ViskomatXL/viskomat.cfg
@@ -7,13 +7,14 @@ availMem = 8e9
 logToFile = false
 
 blocknx = 16 16 16
-boundingBox = -4 171 -9.5 155.5 -76.5 82.5
+#boundingBox = -4 171 -9.5 155.5 -76.5 82.5
+boundingBox = -4 166 -9.5 155.5 -76.5 82.5
 deltax = 1
 
 refineLevel = 0
 
-nuLB = 1.5e-3
-OmegaLB = 4e-5
+#nuLB = 1.5e-4
+OmegaLB = 1e-5
 tau0 = 20e-7
 
 resolution = 32
@@ -25,5 +26,5 @@ restartStep = 100000
 cpStart = 10000
 cpStep = 10000
 
-outTime = 100
+outTime = 10000
 endTime = 100000
\ No newline at end of file
diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp
index 7c73fe35fbd929b9684378618b42ccd0054baa9e..113d9c6da16bff21267bb723d48adb2a3c9d5619 100644
--- a/apps/cpu/ViskomatXL/viskomat.cpp
+++ b/apps/cpu/ViskomatXL/viskomat.cpp
@@ -19,7 +19,7 @@ void bflow(string configname)
       int             numOfThreads = config.getValue<int>("numOfThreads");
       vector<int>     blocknx = config.getVector<int>("blocknx");
       vector<double>  boundingBox = config.getVector<double>("boundingBox");
-      double          nuLB = config.getValue<double>("nuLB");
+      //double          nuLB = config.getValue<double>("nuLB");
       double          endTime = config.getValue<double>("endTime");
       double          outTime = config.getValue<double>("outTime");
       double          availMem = config.getValue<double>("availMem");
@@ -65,12 +65,12 @@ void bflow(string configname)
       LBMReal rhoLB = 0.0;
 
       //akoustic
-       OmegaLB /= scaleFactor;
-       nuLB *=scaleFactor;
-       endTime *= scaleFactor;
-       //outTime = endTime;
-       cpStart = endTime;
-       cpStep  = endTime;
+       //OmegaLB /= scaleFactor;
+       //nuLB *=scaleFactor;
+       //endTime *= scaleFactor;
+       ////outTime = endTime;
+       //cpStart = endTime;
+       //cpStep  = endTime;
 
 //diffusive
       //OmegaLB /= scaleFactor * scaleFactor;
@@ -80,6 +80,16 @@ void bflow(string configname)
       //cpStart = endTime;
       //cpStep = endTime;
 
+      //double Re = 1.38230076758;
+      double N  = 80;
+      double Omega = 2 * UbMath::PI / 60.0 * N;
+      double mu    = 1;
+      double R     = 0.165 / 2.0;
+      double rho   = 970;
+      double Re    = Omega * R * R * rho / mu;
+
+      double nuLB = OmegaLB * R * 1e3 * R * 1e3 / Re;
+
       SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter());
       // double uWorld = (N * PI) / 30.0; //0.0037699111843
       // double rhoWorld = 2350.0; //kg/m^3
@@ -134,9 +144,9 @@ void bflow(string configname)
       //thix->setOmegaMin(omegaMin);
 
       SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter());
-      //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
+      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm()));
       //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyHerschelBulkleyModelNoSlipBCAlgorithm()));
-      noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelNoSlipBCAlgorithm()));
+      //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelNoSlipBCAlgorithm()));
 
       SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter());
       slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SimpleSlipBCAlgorithm()));
@@ -158,10 +168,10 @@ void bflow(string configname)
       fctVz.SetExpr("0.0");
 
       SPtr<BCAdapter> velocityBCAdapter(new VelocityBCAdapter(true, true, true, fctVx, fctVy, fctVz, 0, BCFunction::INFCONST));
-      //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
+      velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm()));
       //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SimpleVelocityBCAlgorithm()));
       //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm()));
-      velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelVelocityBCAlgorithm()));
+      //velocityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new RheologyBinghamModelVelocityBCAlgorithm()));
 
       //SPtr<BCAdapter> densityBCAdapter(new DensityBCAdapter());
       //densityBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm()));
@@ -179,8 +189,8 @@ void bflow(string configname)
       bcProc = SPtr<BCProcessor>(new BCProcessor());
 
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel());
-      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
-      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
+      SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel());
+      //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel());
       //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel());
       kernel->setBCProcessor(bcProc);
@@ -228,6 +238,9 @@ void bflow(string configname)
       {
          UBLOG(logINFO, "Parameters:");
          //UBLOG(logINFO, "forcing = " << forcing);
+         UBLOG(logINFO, "N = " << N << " rpm");
+         UBLOG(logINFO, "Omega = " << Omega << " rad/s");
+         UBLOG(logINFO, "Re = " << Re);
          UBLOG(logINFO, "rho = " << rhoLB);
          UBLOG(logINFO, "uLB = " << OmegaLB);
          UBLOG(logINFO, "nuLB = " << nuLB);
@@ -384,18 +397,18 @@ void bflow(string configname)
       SPtr<UbScheduler> forceSch(new UbScheduler(100));
       SPtr<CalculateTorqueCoProcessor> fp = make_shared<CalculateTorqueCoProcessor>(grid, forceSch, outputPath + "/torque/TorqueRotor.txt", comm);
       fp->addInteractor(rotorInt);
-      SPtr<CalculateTorqueCoProcessor> fp2 = make_shared<CalculateTorqueCoProcessor>(grid, forceSch, outputPath + "/torque/TorqueStator.txt", comm);
-      fp2->addInteractor(statorInt);
+      //SPtr<CalculateTorqueCoProcessor> fp2 = make_shared<CalculateTorqueCoProcessor>(grid, forceSch, outputPath + "/torque/TorqueStator.txt", comm);
+      //fp2->addInteractor(statorInt);
 
-      SPtr<WriteThixotropyQuantitiesCoProcessor> writeThixotropicMQCoProcessor(new WriteThixotropyQuantitiesCoProcessor(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
+      //SPtr<WriteThixotropyQuantitiesCoProcessor> writeThixotropicMQCoProcessor(new WriteThixotropyQuantitiesCoProcessor(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm));
 
       SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1));
       SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime));
       calculator->addCoProcessor(npr);
       calculator->addCoProcessor(fp);
-      calculator->addCoProcessor(fp2);
+      //calculator->addCoProcessor(fp2);
       calculator->addCoProcessor(writeMQCoProcessor);
-      calculator->addCoProcessor(writeThixotropicMQCoProcessor);
+      //calculator->addCoProcessor(writeThixotropicMQCoProcessor);
       calculator->addCoProcessor(restartCoProcessor);
 
       if (myid == 0) UBLOG(logINFO, "Simulation-start");
diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.cpp b/src/basics/geometry3d/GbTriFaceMesh3D.cpp
index 0c13ce378b3a3459aaa21949d5b1b778a43a59a3..92442dd542840595d1ddf07f86e9add0a083c965 100644
--- a/src/basics/geometry3d/GbTriFaceMesh3D.cpp
+++ b/src/basics/geometry3d/GbTriFaceMesh3D.cpp
@@ -1054,6 +1054,51 @@ void GbTriFaceMesh3D::readMeshFromSTLFileASCII(string filename, bool removeRedun
     } else {
         this->calculateValues();
     }
+    //UBLOG(logDEBUG1, "GbTriFaceMesh3DCreator::readMeshFromSTLFile !!! Dieses Format hat leider redundante Knoten ...");
+
+    //string dummy;
+
+    //double x, y, z;
+    //int nr = 0;
+
+    //UbFileInputASCII in(filename);
+    //in.readLine();
+    //while (dummy != "endsolid") {
+    //    in.readLine();
+    //    in.readLine();
+    //    dummy = in.readString();
+    //    if (dummy != "vertex")
+    //        throw UbException(UB_EXARGS, "no vertex format");
+    //    x = in.readDouble();
+    //    y = in.readDouble();
+    //    z = in.readDouble();
+    //    nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z));
+    //    in.readLine();
+    //    in.readString();
+    //    x = in.readDouble();
+    //    y = in.readDouble();
+    //    z = in.readDouble();
+    //    nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z));
+    //    in.readLine();
+    //    in.readString();
+    //    x = in.readDouble();
+    //    y = in.readDouble();
+    //    z = in.readDouble();
+    //    nodes->push_back(GbTriFaceMesh3D::Vertex((float)x, (float)y, (float)z));
+    //    triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2));
+    //    in.readLine();
+    //    in.readLine();
+    //    in.readLine();
+    //    dummy = in.readString();
+    //    nr += 3;
+    //    // std::cout<<"read mesh "<< nr <<" \n";
+    //}
+
+    //if (removeRedundantNodes) {
+    //    this->deleteRedundantNodes(); // dort wird autoamtisch calculateValues() aufgerufen
+    //} else {
+    //    this->calculateValues();
+    //}
 }
 /*======================================================================*/
 void GbTriFaceMesh3D::readMeshFromSTLFileBinary(string filename, bool removeRedundantNodes)
diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp
index 80fe197007a35120c624730d84da071021ea67b6..58c359887fe8b4263d8140038dc03754aeab74bb 100644
--- a/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp
+++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/MultiphaseVelocityBCAlgorithm.cpp
@@ -104,15 +104,15 @@ void MultiphaseVelocityBCAlgorithm::applyBC()
    
    phiBC = bcPtr->getBoundaryPhaseField();
    
-   //D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3);
-   D3Q27System::calcMultiphaseHeq(htemp, phiBC, 0.0, 0.0, 0.0);//16.03.2021 dirty hack!
+   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];
+		   LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir];
            //17.03.2021 Let us just set the plain eq
-           LBMReal hReturn = htemp[fdir];
+           //LBMReal hReturn = htemp[fdir];
 		   distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
            if (distributionsH2)
                distributionsH2->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir);
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp
index 8de4b7becb9d73ca8b0cba0c060d37afa505fd97..028cb68ca562771b263b801c48c5f3b3791c723f 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOCoProcessor.cpp
@@ -70,7 +70,7 @@ MPIIOCoProcessor::MPIIOCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const
 
     //---------------------------------------
 
-    MPI_Type_contiguous(6, MPI_CHAR, &arrayPresenceType);
+    MPI_Type_contiguous(7, MPI_CHAR, &arrayPresenceType);
     MPI_Type_commit(&arrayPresenceType);
 }
 
@@ -441,6 +441,14 @@ void MPIIOCoProcessor::clearAllFiles(int step)
     MPI_File_set_size(file_handler, new_size);
     MPI_File_close(&file_handler);
 
+    std::string filename10 = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpPhaseField.bin";
+    int rc10 = MPI_File_open(MPI_COMM_WORLD, filename10.c_str(), MPI_MODE_CREATE | MPI_MODE_WRONLY, info, &file_handler);
+    if (rc10 != MPI_SUCCESS)
+        throw UbException(UB_EXARGS, "couldn't open file " + filename10);
+    MPI_File_set_size(file_handler, new_size);
+    MPI_File_close(&file_handler);
+
+
     /*std::string filename10 = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpBC1.bin";
     int rc10 = MPI_File_open(MPI_COMM_WORLD, filename10.c_str(), MPI_MODE_CREATE | MPI_MODE_WRONLY, info,
     &file_handler); if (rc10 != MPI_SUCCESS) throw UbException(UB_EXARGS, "couldn't open file " + filename10);
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp
index 315608fc32549d2dd03524d0bd709df4fb18cd9d..39b32b6aac7110eb873a52351d46560f8843820e 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.cpp
@@ -126,41 +126,47 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step)
     bool firstBlock        = true;
     int doubleCountInBlock = 0;
     int ic                 = 0;
-    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtr;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributions;
-
+    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH;
+    
     for (int level = minInitLevel; level <= maxInitLevel; level++) {
         for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
         {
-            D3Q27EsoTwist3DSplittedVectorPtr = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
+            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
                 block->getKernel()->getDataSet()->getFdistributions());
-            localDistributions    = D3Q27EsoTwist3DSplittedVectorPtr->getLocalDistributions();
-            nonLocalDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getNonLocalDistributions();
-            zeroDistributions     = D3Q27EsoTwist3DSplittedVectorPtr->getZeroDistributions();
+            localDistributionsF    = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions();
+            nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions();
+            zeroDistributionsF     = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions();
+ 
+            D3Q27EsoTwist3DSplittedVectorPtrH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
+                block->getKernel()->getDataSet()->getHdistributions());
+            localDistributionsH    = D3Q27EsoTwist3DSplittedVectorPtrH->getLocalDistributions();
+            nonLocalDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getNonLocalDistributions();
+            zeroDistributionsH     = D3Q27EsoTwist3DSplittedVectorPtrH->getZeroDistributions();
 
             if (firstBlock) // && block->getKernel()) // when first (any) valid block...
             {
                 firstGlobalID = block->getGlobalID(); // id of the block needed to find it while regenerating the grid
 
-                if (localDistributions) {
-                    dataSetParamStr1.nx[0] = static_cast<int>(localDistributions->getNX1());
-                    dataSetParamStr1.nx[1] = static_cast<int>(localDistributions->getNX2());
-                    dataSetParamStr1.nx[2] = static_cast<int>(localDistributions->getNX3());
-                    dataSetParamStr1.nx[3] = static_cast<int>(localDistributions->getNX4());
+                if (localDistributionsF) {
+                    dataSetParamStr1.nx[0] = static_cast<int>(localDistributionsF->getNX1());
+                    dataSetParamStr1.nx[1] = static_cast<int>(localDistributionsF->getNX2());
+                    dataSetParamStr1.nx[2] = static_cast<int>(localDistributionsF->getNX3());
+                    dataSetParamStr1.nx[3] = static_cast<int>(localDistributionsF->getNX4());
                 }
 
-                if (nonLocalDistributions) {
-                    dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributions->getNX1());
-                    dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributions->getNX2());
-                    dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributions->getNX3());
-                    dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributions->getNX4());
+                if (nonLocalDistributionsF) {
+                    dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributionsF->getNX1());
+                    dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributionsF->getNX2());
+                    dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributionsF->getNX3());
+                    dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributionsF->getNX4());
                 }
-                if (zeroDistributions) {
-                    dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributions->getNX1());
-                    dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributions->getNX2());
-                    dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributions->getNX3());
+                if (zeroDistributionsF) {
+                    dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributionsF->getNX1());
+                    dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributionsF->getNX2());
+                    dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributionsF->getNX3());
                     dataSetParamStr3.nx[3] = 1;
                 }
 
@@ -172,10 +178,11 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step)
                 dataSetParamStr1.nx3 = dataSetParamStr2.nx3 = dataSetParamStr3.nx3 =
                     static_cast<int>(block->getKernel()->getDataSet()->getFdistributions()->getNX3());
 
+             //  Fdistributions + Hdistributions
                 doubleCountInBlock =
-                    dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
+                    (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
                     dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
-                    dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
+                    dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2;
 
                 SPtr<CbArray4D<LBMReal, IndexerX4X3X2X1>> averageDensityArray =
                     block->getKernel()->getDataSet()->getAverageDensity();
@@ -219,27 +226,45 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step)
                 else
                     arrPresence.isRelaxationFactorPresent = false;
 
+                SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> phaseField3DPtr =
+                    block->getKernel()->getDataSet()->getPhaseField();
+                if (phaseField3DPtr)
+                    arrPresence.isPhaseFieldPresent = true;
+                else
+                    arrPresence.isPhaseFieldPresent = false;
+
                 firstBlock = false;
             }
 
-            if (localDistributions && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
+            if (localDistributionsF && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
                 (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), localDistributions->getDataVector().begin(),
-                                         localDistributions->getDataVector().end());
-            if (nonLocalDistributions && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
+                doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsF->getDataVector().begin(),
+                                         localDistributionsF->getDataVector().end());
+            if (nonLocalDistributionsF && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
                 (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributions->getDataVector().begin(),
-                                         nonLocalDistributions->getDataVector().end());
-            if (zeroDistributions && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) &&
-                (dataSetParamStr3.nx[2] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributions->getDataVector().begin(),
-                                         zeroDistributions->getDataVector().end());
+                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsF->getDataVector().begin(),
+                                         nonLocalDistributionsF->getDataVector().end());
+            if (zeroDistributionsF && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsF->getDataVector().begin(),
+                                         zeroDistributionsF->getDataVector().end());
+
+            if (localDistributionsH && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
+                (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsH->getDataVector().begin(),
+                                         localDistributionsH->getDataVector().end());
+            if (nonLocalDistributionsH && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
+                (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsH->getDataVector().begin(),
+                                         nonLocalDistributionsH->getDataVector().end());
+            if (zeroDistributionsH && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsH->getDataVector().begin(),
+                                         zeroDistributionsH->getDataVector().end());
 
             ic++;
         }
     }
 
-    MPI_Type_contiguous(doubleCountInBlock, MPI_DOUBLE, &dataSetDoubleType);
+    MPI_Type_contiguous(doubleCountInBlock , MPI_DOUBLE, &dataSetDoubleType);
     MPI_Type_commit(&dataSetDoubleType);
 
     if (comm->isRoot()) {
@@ -320,6 +345,9 @@ void MPIIOMigrationBECoProcessor::writeDataSet(int step)
     if (arrPresence.isRelaxationFactorPresent)
         write3DArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin"));
     // writeRelaxationFactor(step);
+
+    if (arrPresence.isPhaseFieldPresent)
+        write3DArray(step, PhaseField, std::string("/cpPhaseField.bin"));
 }
 
 void MPIIOMigrationBECoProcessor::write4DArray(int step, Arrays arrayType, std::string fname)
@@ -479,6 +507,9 @@ void MPIIOMigrationBECoProcessor::write3DArray(int step, Arrays arrayType, std::
                 case RelaxationFactor:
                     ___Array = block->getKernel()->getDataSet()->getRelaxationFactor();
                     break;
+                case PhaseField:
+                    ___Array = block->getKernel()->getDataSet()->getPhaseField();
+                    break;
                 default:
                     UB_THROW(UbException(UB_EXARGS,
                                          "MPIIOMigrationBECoProcessor::write3DArray : 3D array type does not exist!"));
@@ -490,12 +521,11 @@ void MPIIOMigrationBECoProcessor::write3DArray(int step, Arrays arrayType, std::
                 firstGlobalID = block->getGlobalID();
 
                 dataSetParamStr.nx1 = dataSetParamStr.nx2 = dataSetParamStr.nx3 = 0;
-                dataSetParamStr.nx[0]                                           = static_cast<int>(___Array->getNX1());
-                dataSetParamStr.nx[1]                                           = static_cast<int>(___Array->getNX2());
-                dataSetParamStr.nx[2]                                           = static_cast<int>(___Array->getNX3());
-                dataSetParamStr.nx[3]                                           = 1;
-                doubleCountInBlock =
-                    dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3];
+                dataSetParamStr.nx[0] = static_cast<int>(___Array->getNX1());
+                dataSetParamStr.nx[1] = static_cast<int>(___Array->getNX2());
+                dataSetParamStr.nx[2] = static_cast<int>(___Array->getNX3());
+                dataSetParamStr.nx[3] = 1;
+                doubleCountInBlock = dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3];
 
                 firstBlock = false;
             }
@@ -950,9 +980,9 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step)
                      MPI_STATUS_IGNORE);
 
     size_t doubleCountInBlock =
-        dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
+        (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
         dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
-        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
+        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2;
     std::vector<double> doubleValuesArray(myBlocksCount * doubleCountInBlock); // double-values in all blocks
 
     MPI_Type_contiguous(int(doubleCountInBlock), MPI_DOUBLE, &dataSetDoubleType);
@@ -990,7 +1020,8 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step)
 
     //-------------------------------------- restore blocks ---------------------------------
     int blockID;
-    std::vector<double> vectorsOfValues1, vectorsOfValues2, vectorsOfValues3;
+    std::vector<double> vectorsOfValuesF1, vectorsOfValuesF2, vectorsOfValuesF3;
+    std::vector<double> vectorsOfValuesH1, vectorsOfValuesH2, vectorsOfValuesH3;
 
     size_t vectorSize1 =
         dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3];
@@ -1006,35 +1037,62 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step)
             blockID = (int)(rawDataReceive[r][index]);
             index += 1;
 
-            vectorsOfValues1.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize1);
+            vectorsOfValuesF1.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize1);
+            index += vectorSize1;
+
+            vectorsOfValuesF2.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize2);
+            index += vectorSize2;
+
+            vectorsOfValuesF3.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize3);
+            index += vectorSize3;
+
+            vectorsOfValuesH1.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize1);
             index += vectorSize1;
 
-            vectorsOfValues2.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize2);
+            vectorsOfValuesH2.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize2);
             index += vectorSize2;
 
-            vectorsOfValues3.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize3);
+            vectorsOfValuesH3.assign(rawDataReceive[r].data() + index, rawDataReceive[r].data() + index + vectorSize3);
             index += vectorSize3;
 
             SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
             dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
                 ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
-                    new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues1, dataSetParamStr1.nx[0],
+                    new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0],
                                                             dataSetParamStr1.nx[1], dataSetParamStr1.nx[2],
                                                             dataSetParamStr1.nx[3])));
             dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
                 ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
-                    new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues2, dataSetParamStr2.nx[0],
+                    new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0],
                                                             dataSetParamStr2.nx[1], dataSetParamStr2.nx[2],
                                                             dataSetParamStr2.nx[3])));
             dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
-                ->setZeroDistributions(
-                    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
-                        vectorsOfValues3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
+                ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                        vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
             dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
             dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
             dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
 
+            SPtr<DistributionArray3D> mHdistributions(new D3Q27EsoTwist3DSplittedVector());
+            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+                ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
+                    new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH1, dataSetParamStr1.nx[0],
+                                                            dataSetParamStr1.nx[1], dataSetParamStr1.nx[2],
+                                                            dataSetParamStr1.nx[3])));
+            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+                ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
+                    new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH2, dataSetParamStr2.nx[0],
+                                                            dataSetParamStr2.nx[1], dataSetParamStr2.nx[2],
+                                                            dataSetParamStr2.nx[3])));
+            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+                ->setZeroDistributions( CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                        vectorsOfValuesH3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
+
+            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX1(dataSetParamStr1.nx1);
+            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX2(dataSetParamStr1.nx2);
+            dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX3(dataSetParamStr1.nx3);
+
             // find the nesessary block and fill it
             SPtr<Block3D> block = grid->getBlock(blockID);
             this->lbmKernel->setBlock(block);
@@ -1045,6 +1103,7 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step)
             kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel()));
             SPtr<DataSet3D> dataSetPtr = SPtr<DataSet3D>(new DataSet3D());
             dataSetPtr->setFdistributions(mFdistributions);
+            dataSetPtr->setHdistributions(mHdistributions);
             kernel->setDataSet(dataSetPtr);
             block->setKernel(kernel);
         }
@@ -1091,6 +1150,9 @@ void MPIIOMigrationBECoProcessor::readDataSet(int step)
         readArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin"));
     //   readRelaxationFactor(step);
 
+    if (arrPresence.isPhaseFieldPresent)
+        readArray(step, PhaseField, std::string("/cpPhaseField.bin"));
+
     delete[] rawDataReceive;
 }
 
@@ -1233,11 +1295,16 @@ void MPIIOMigrationBECoProcessor::readArray(int step, Arrays arrType, std::strin
                         vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2]));
                     block->getKernel()->getDataSet()->setRelaxationFactor(___3DArray);
                     break;
+                case PhaseField:
+                    ___3DArray = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                        vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2]));
+                    block->getKernel()->getDataSet()->setPhaseField(___3DArray);
+                    break;
                 default:
                     UB_THROW(
                         UbException(UB_EXARGS, "MPIIOMigrationBECoProcessor::readArray : array type does not exist!"));
                     break;
-            }
+            } 
         }
     }
 
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h
index 5eb83b27aa49960501f5fd302a450f2b21f937d8..4d825fde3956dcbe711f49b18b57cd929ba986d9 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationBECoProcessor.h
@@ -24,7 +24,8 @@ class MPIIOMigrationBECoProcessor : public MPIIOCoProcessor
         AverageFluktuations = 3,
         AverageTriple       = 4,
         ShearStressVal      = 5,
-        RelaxationFactor    = 6
+        RelaxationFactor    = 6,
+        PhaseField          = 7
     };
 
 public:
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp
index dc894e9a5056633fdc1e4fb29f391b2f11be7f7f..b4314e0162a21f8cb5af48399f9efb04abb2ecfa 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.cpp
@@ -144,10 +144,10 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step)
     bool firstBlock           = true;
     size_t doubleCountInBlock = 0;
     int ic                    = 0;
-    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtr;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributions;
+    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH;
 
     for (int level = minInitLevel; level <= maxInitLevel; level++) {
         for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
@@ -160,31 +160,37 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step)
             dataSetArray[ic].compressible    = block->getKernel()->getCompressible();
             dataSetArray[ic].withForcing     = block->getKernel()->getWithForcing();
 
-            D3Q27EsoTwist3DSplittedVectorPtr = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
+            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
                 block->getKernel()->getDataSet()->getFdistributions());
-            localDistributions    = D3Q27EsoTwist3DSplittedVectorPtr->getLocalDistributions();
-            nonLocalDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getNonLocalDistributions();
-            zeroDistributions     = D3Q27EsoTwist3DSplittedVectorPtr->getZeroDistributions();
+            localDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions();
+            nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions();
+            zeroDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions();
+
+            D3Q27EsoTwist3DSplittedVectorPtrH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
+                block->getKernel()->getDataSet()->getHdistributions());
+            localDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getLocalDistributions();
+            nonLocalDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getNonLocalDistributions();
+            zeroDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getZeroDistributions();
 
             if (firstBlock) // && block->getKernel()) // when first (any) valid block...
             {
-                if (localDistributions) {
-                    dataSetParamStr1.nx[0] = static_cast<int>(localDistributions->getNX1());
-                    dataSetParamStr1.nx[1] = static_cast<int>(localDistributions->getNX2());
-                    dataSetParamStr1.nx[2] = static_cast<int>(localDistributions->getNX3());
-                    dataSetParamStr1.nx[3] = static_cast<int>(localDistributions->getNX4());
+                if (localDistributionsF) {
+                    dataSetParamStr1.nx[0] = static_cast<int>(localDistributionsF->getNX1());
+                    dataSetParamStr1.nx[1] = static_cast<int>(localDistributionsF->getNX2());
+                    dataSetParamStr1.nx[2] = static_cast<int>(localDistributionsF->getNX3());
+                    dataSetParamStr1.nx[3] = static_cast<int>(localDistributionsF->getNX4());
                 }
 
-                if (nonLocalDistributions) {
-                    dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributions->getNX1());
-                    dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributions->getNX2());
-                    dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributions->getNX3());
-                    dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributions->getNX4());
+                if (nonLocalDistributionsF) {
+                    dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributionsF->getNX1());
+                    dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributionsF->getNX2());
+                    dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributionsF->getNX3());
+                    dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributionsF->getNX4());
                 }
-                if (zeroDistributions) {
-                    dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributions->getNX1());
-                    dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributions->getNX2());
-                    dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributions->getNX3());
+                if (zeroDistributionsF) {
+                    dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributionsF->getNX1());
+                    dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributionsF->getNX2());
+                    dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributionsF->getNX3());
                     dataSetParamStr3.nx[3] = 1;
                 }
 
@@ -196,10 +202,11 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step)
                 dataSetParamStr1.nx3 = dataSetParamStr2.nx3 = dataSetParamStr3.nx3 =
                     static_cast<int>(block->getKernel()->getDataSet()->getFdistributions()->getNX3());
 
+                //  Fdistributions + Hdistributions
                 doubleCountInBlock =
-                    dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
-                    dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
-                    dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
+                    (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
+                        dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
+                        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2;
 
                 SPtr<CbArray4D<LBMReal, IndexerX4X3X2X1>> averageDensityArray =
                     block->getKernel()->getDataSet()->getAverageDensity();
@@ -243,21 +250,39 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step)
                 else
                     arrPresence.isRelaxationFactorPresent = false;
 
+                SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> phaseField3DPtr =
+                    block->getKernel()->getDataSet()->getPhaseField();
+                if (phaseField3DPtr)
+                    arrPresence.isPhaseFieldPresent = true;
+                else
+                    arrPresence.isPhaseFieldPresent = false;
+
                 firstBlock = false;
             }
 
-            if (localDistributions && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
+            if (localDistributionsF && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
+                (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsF->getDataVector().begin(),
+                    localDistributionsF->getDataVector().end());
+            if (nonLocalDistributionsF && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
+                (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsF->getDataVector().begin(),
+                    nonLocalDistributionsF->getDataVector().end());
+            if (zeroDistributionsF && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsF->getDataVector().begin(),
+                    zeroDistributionsF->getDataVector().end());
+
+            if (localDistributionsH && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
                 (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), localDistributions->getDataVector().begin(),
-                                         localDistributions->getDataVector().end());
-            if (nonLocalDistributions && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
+                doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsH->getDataVector().begin(),
+                    localDistributionsH->getDataVector().end());
+            if (nonLocalDistributionsH && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
                 (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributions->getDataVector().begin(),
-                                         nonLocalDistributions->getDataVector().end());
-            if (zeroDistributions && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) &&
-                (dataSetParamStr3.nx[2] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributions->getDataVector().begin(),
-                                         zeroDistributions->getDataVector().end());
+                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsH->getDataVector().begin(),
+                    nonLocalDistributionsH->getDataVector().end());
+            if (zeroDistributionsH && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) && (dataSetParamStr3.nx[2] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsH->getDataVector().begin(),
+                    zeroDistributionsH->getDataVector().end());
 
             ic++;
         }
@@ -349,6 +374,10 @@ void MPIIOMigrationCoProcessor::writeDataSet(int step)
 
     if (arrPresence.isRelaxationFactorPresent)
         write3DArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin"));
+
+    if (arrPresence.isPhaseFieldPresent)
+        write3DArray(step, PhaseField, std::string("/cpPhaseField.bin"));
+
 }
 
 void MPIIOMigrationCoProcessor::write4DArray(int step, Arrays arrayType, std::string fname)
@@ -520,6 +549,9 @@ void MPIIOMigrationCoProcessor::write3DArray(int step, Arrays arrayType, std::st
                 case RelaxationFactor:
                     ___Array = block->getKernel()->getDataSet()->getRelaxationFactor();
                     break;
+                case PhaseField:
+                    ___Array = block->getKernel()->getDataSet()->getPhaseField();
+                    break;
                 default:
                     UB_THROW(UbException(UB_EXARGS,
                                          "MPIIOMigrationCoProcessor::write3DArray : 3D array type does not exist!"));
@@ -1572,9 +1604,9 @@ void MPIIOMigrationCoProcessor::readDataSet(int step)
                      MPI_STATUS_IGNORE);
 
     size_t doubleCountInBlock =
-        dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
+        (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
         dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
-        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
+        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3] * 2);
     std::vector<double> doubleValuesArray(blocksCount * doubleCountInBlock); // double-values in all blocks
 
     // define MPI_types depending on the block-specific information
@@ -1608,42 +1640,73 @@ void MPIIOMigrationCoProcessor::readDataSet(int step)
     }
 
     size_t index = 0, vectorSize = 0;
-    std::vector<double> vectorsOfValues1, vectorsOfValues2, vectorsOfValues3;
+    std::vector<double> vectorsOfValuesF1, vectorsOfValuesF2, vectorsOfValuesF3;
+    std::vector<double> vectorsOfValuesH1, vectorsOfValuesH2, vectorsOfValuesH3;
+
+    size_t vectorSize1 =
+        dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3];
+    size_t vectorSize2 =
+        dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3];
+    size_t vectorSize3 =
+        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
 
     for (std::size_t n = 0; n < blocksCount; n++) {
-        vectorSize = dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3];
-        vectorsOfValues1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize);
-        index += vectorSize;
+        vectorsOfValuesF1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1);
+        index += vectorSize1;
 
-        vectorSize = dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3];
-        vectorsOfValues2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize);
-        index += vectorSize;
+        vectorsOfValuesF2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2);
+        index += vectorSize2;
 
-        vectorSize = dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
-        vectorsOfValues3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize);
-        index += vectorSize;
+        vectorsOfValuesF3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3);
+        index += vectorSize3;
 
-        SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
+        vectorsOfValuesH1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1);
+        index += vectorSize1;
+
+        vectorsOfValuesH2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2);
+        index += vectorSize2;
+
+        vectorsOfValuesH3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3);
+        index += vectorSize3;
 
+        SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
             ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
-                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues1, dataSetParamStr1.nx[0],
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0],
                                                         dataSetParamStr1.nx[1], dataSetParamStr1.nx[2],
                                                         dataSetParamStr1.nx[3])));
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
             ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
-                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues2, dataSetParamStr2.nx[0],
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0],
                                                         dataSetParamStr2.nx[1], dataSetParamStr2.nx[2],
                                                         dataSetParamStr2.nx[3])));
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
-            ->setZeroDistributions(
-                CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
-                    vectorsOfValues3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
+            ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                    vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
 
+        SPtr<DistributionArray3D> mHdistributions(new D3Q27EsoTwist3DSplittedVector());
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+            ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH1, dataSetParamStr1.nx[0],
+                    dataSetParamStr1.nx[1], dataSetParamStr1.nx[2],
+                    dataSetParamStr1.nx[3])));
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+            ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH2, dataSetParamStr2.nx[0],
+                    dataSetParamStr2.nx[1], dataSetParamStr2.nx[2],
+                    dataSetParamStr2.nx[3])));
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+            ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                vectorsOfValuesH3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
+
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX1(dataSetParamStr1.nx1);
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX2(dataSetParamStr1.nx2);
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX3(dataSetParamStr1.nx3);
+
         // find the nesessary block and fill it
         SPtr<Block3D> block = grid->getBlock(dataSetArray[n].globalID);
         this->lbmKernel->setBlock(block);
@@ -1655,6 +1718,7 @@ void MPIIOMigrationCoProcessor::readDataSet(int step)
         kernel->setWithForcing(dataSetArray[n].withForcing);
         SPtr<DataSet3D> dataSetPtr = SPtr<DataSet3D>(new DataSet3D());
         dataSetPtr->setFdistributions(mFdistributions);
+        dataSetPtr->setHdistributions(mHdistributions);
         kernel->setDataSet(dataSetPtr);
         block->setKernel(kernel);
     }
@@ -1701,6 +1765,9 @@ void MPIIOMigrationCoProcessor::readDataSet(int step)
     if (arrPresence.isRelaxationFactorPresent)
         readArray(step, RelaxationFactor, std::string("/cpRelaxationFactor.bin"));
     //   readRelaxationFactor(step);
+ 
+    if (arrPresence.isPhaseFieldPresent)
+        readArray(step, PhaseField, std::string("/cpPhaseField.bin"));
 }
 
 void MPIIOMigrationCoProcessor::readArray(int step, Arrays arrType, std::string fname)
@@ -1825,6 +1892,11 @@ void MPIIOMigrationCoProcessor::readArray(int step, Arrays arrType, std::string
                     vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2]));
                 block->getKernel()->getDataSet()->setRelaxationFactor(___3DArray);
                 break;
+            case PhaseField:
+                ___3DArray = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                    vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2]));
+                block->getKernel()->getDataSet()->setPhaseField(___3DArray);
+                break;
             default:
                 UB_THROW(UbException(UB_EXARGS, "MPIIOMigrationCoProcessor::readArray : array type does not exist!"));
                 break;
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h
index 428407d37268043837d029fce6ae0ba2f365960b..ad7a93086afa379822fc7909a68fd39748dd607f 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIOMigrationCoProcessor.h
@@ -24,7 +24,8 @@ public:
         AverageFluktuations = 3,
         AverageTriple       = 4,
         ShearStressVal      = 5,
-        RelaxationFactor    = 6
+        RelaxationFactor = 6,
+        PhaseField = 7
     };
 
     MPIIOMigrationCoProcessor(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path, SPtr<Communicator> comm);
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp
index 28253ed99af66d1fad0aa409b11bcba5c904ec04..ed5d3b275c006700d29c43f16928d2ddc08827f0 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.cpp
@@ -149,11 +149,12 @@ void MPIIORestartCoProcessor::writeDataSet(int step)
     bool firstBlock        = true;
     int doubleCountInBlock = 0;
     int ic                 = 0;
-    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtr;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributions;
-    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions;
-    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributions;
 
+    SPtr<D3Q27EsoTwist3DSplittedVector> D3Q27EsoTwist3DSplittedVectorPtrF, D3Q27EsoTwist3DSplittedVectorPtrH;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF, localDistributionsH;
+    CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF, nonLocalDistributionsH;
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF, zeroDistributionsH;
+ 
     for (int level = minInitLevel; level <= maxInitLevel; level++) {
         for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
         {
@@ -168,30 +169,37 @@ void MPIIORestartCoProcessor::writeDataSet(int step)
             dataSetArray[ic].compressible    = block->getKernel()->getCompressible();
             dataSetArray[ic].withForcing     = block->getKernel()->getWithForcing();
 
-            D3Q27EsoTwist3DSplittedVectorPtr = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
+            D3Q27EsoTwist3DSplittedVectorPtrF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
                 block->getKernel()->getDataSet()->getFdistributions());
-            localDistributions    = D3Q27EsoTwist3DSplittedVectorPtr->getLocalDistributions();
-            nonLocalDistributions = D3Q27EsoTwist3DSplittedVectorPtr->getNonLocalDistributions();
-            zeroDistributions     = D3Q27EsoTwist3DSplittedVectorPtr->getZeroDistributions();
+            localDistributionsF    = D3Q27EsoTwist3DSplittedVectorPtrF->getLocalDistributions();
+            nonLocalDistributionsF = D3Q27EsoTwist3DSplittedVectorPtrF->getNonLocalDistributions();
+            zeroDistributionsF     = D3Q27EsoTwist3DSplittedVectorPtrF->getZeroDistributions();
+
+            D3Q27EsoTwist3DSplittedVectorPtrH = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(
+                block->getKernel()->getDataSet()->getHdistributions());
+            localDistributionsH    = D3Q27EsoTwist3DSplittedVectorPtrH->getLocalDistributions();
+            nonLocalDistributionsH = D3Q27EsoTwist3DSplittedVectorPtrH->getNonLocalDistributions();
+            zeroDistributionsH     = D3Q27EsoTwist3DSplittedVectorPtrH->getZeroDistributions();
 
             if (firstBlock) // when first (any) valid block...
             {
-                if (localDistributions) {
-                    dataSetParamStr1.nx[0] = static_cast<int>(localDistributions->getNX1());
-                    dataSetParamStr1.nx[1] = static_cast<int>(localDistributions->getNX2());
-                    dataSetParamStr1.nx[2] = static_cast<int>(localDistributions->getNX3());
-                    dataSetParamStr1.nx[3] = static_cast<int>(localDistributions->getNX4());
+                if (localDistributionsF) {
+                    dataSetParamStr1.nx[0] = static_cast<int>(localDistributionsF->getNX1());
+                    dataSetParamStr1.nx[1] = static_cast<int>(localDistributionsF->getNX2());
+                    dataSetParamStr1.nx[2] = static_cast<int>(localDistributionsF->getNX3());
+                    dataSetParamStr1.nx[3] = static_cast<int>(localDistributionsF->getNX4());
                 }
-                if (nonLocalDistributions) {
-                    dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributions->getNX1());
-                    dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributions->getNX2());
-                    dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributions->getNX3());
-                    dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributions->getNX4());
+
+                if (nonLocalDistributionsF) {
+                    dataSetParamStr2.nx[0] = static_cast<int>(nonLocalDistributionsF->getNX1());
+                    dataSetParamStr2.nx[1] = static_cast<int>(nonLocalDistributionsF->getNX2());
+                    dataSetParamStr2.nx[2] = static_cast<int>(nonLocalDistributionsF->getNX3());
+                    dataSetParamStr2.nx[3] = static_cast<int>(nonLocalDistributionsF->getNX4());
                 }
-                if (zeroDistributions) {
-                    dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributions->getNX1());
-                    dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributions->getNX2());
-                    dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributions->getNX3());
+                if (zeroDistributionsF) {
+                    dataSetParamStr3.nx[0] = static_cast<int>(zeroDistributionsF->getNX1());
+                    dataSetParamStr3.nx[1] = static_cast<int>(zeroDistributionsF->getNX2());
+                    dataSetParamStr3.nx[2] = static_cast<int>(zeroDistributionsF->getNX3());
                     dataSetParamStr3.nx[3] = 1;
                 }
 
@@ -203,10 +211,11 @@ void MPIIORestartCoProcessor::writeDataSet(int step)
                 dataSetParamStr1.nx3 = dataSetParamStr2.nx3 = dataSetParamStr3.nx3 =
                     static_cast<int>(block->getKernel()->getDataSet()->getFdistributions()->getNX3());
 
+             //  Fdistributions + Hdistributions
                 doubleCountInBlock =
-                    dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
-                    dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
-                    dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
+                    (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
+                     dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
+                     dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2;
 
                 SPtr<CbArray4D<LBMReal, IndexerX4X3X2X1>> averageDensityArray =
                     block->getKernel()->getDataSet()->getAverageDensity();
@@ -250,21 +259,41 @@ void MPIIORestartCoProcessor::writeDataSet(int step)
                 else
                     arrPresence.isRelaxationFactorPresent = false;
 
+                SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> phaseField3DPtr =
+                    block->getKernel()->getDataSet()->getPhaseField();
+                if (phaseField3DPtr)
+                    arrPresence.isPhaseFieldPresent = true;
+                else
+                    arrPresence.isPhaseFieldPresent = false;
+
                 firstBlock = false;
             }
 
-            if (localDistributions && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
+            if (localDistributionsF && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
+                (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsF->getDataVector().begin(),
+                                         localDistributionsF->getDataVector().end());
+            if (nonLocalDistributionsF && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
+                (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsF->getDataVector().begin(),
+                                         nonLocalDistributionsF->getDataVector().end());
+            if (zeroDistributionsF && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) &&
+                (dataSetParamStr3.nx[2] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsF->getDataVector().begin(),
+                                         zeroDistributionsF->getDataVector().end());
+
+            if (localDistributionsH && (dataSetParamStr1.nx[0] > 0) && (dataSetParamStr1.nx[1] > 0) &&
                 (dataSetParamStr1.nx[2] > 0) && (dataSetParamStr1.nx[3] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), localDistributions->getDataVector().begin(),
-                                         localDistributions->getDataVector().end());
-            if (nonLocalDistributions && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
+                doubleValuesArray.insert(doubleValuesArray.end(), localDistributionsH->getDataVector().begin(),
+                                         localDistributionsH->getDataVector().end());
+            if (nonLocalDistributionsH && (dataSetParamStr2.nx[0] > 0) && (dataSetParamStr2.nx[1] > 0) &&
                 (dataSetParamStr2.nx[2] > 0) && (dataSetParamStr2.nx[3] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributions->getDataVector().begin(),
-                                         nonLocalDistributions->getDataVector().end());
-            if (zeroDistributions && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) &&
+                doubleValuesArray.insert(doubleValuesArray.end(), nonLocalDistributionsH->getDataVector().begin(),
+                                         nonLocalDistributionsH->getDataVector().end());
+            if (zeroDistributionsH && (dataSetParamStr3.nx[0] > 0) && (dataSetParamStr3.nx[1] > 0) &&
                 (dataSetParamStr3.nx[2] > 0))
-                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributions->getDataVector().begin(),
-                                         zeroDistributions->getDataVector().end());
+                doubleValuesArray.insert(doubleValuesArray.end(), zeroDistributionsH->getDataVector().begin(),
+                                         zeroDistributionsH->getDataVector().end());
 
             ic++;
         }
@@ -373,6 +402,9 @@ void MPIIORestartCoProcessor::writeDataSet(int step)
 
     if (arrPresence.isRelaxationFactorPresent)
         writeRelaxationFactor(step);
+
+    if (arrPresence.isPhaseFieldPresent)
+        writePhaseField(step);
 }
 
 void MPIIORestartCoProcessor::writeAverageDensityArray(int step)
@@ -1197,6 +1229,141 @@ void MPIIORestartCoProcessor::writeRelaxationFactor(int step)
     delete[] dataSetSmallArray;
 }
 
+void MPIIORestartCoProcessor::writePhaseField(int step)
+{
+    int rank, size;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+    int blocksCount = 0; // quantity of blocks in the grid, max 2147483648 blocks!
+
+    std::vector<SPtr<Block3D>> blocksVector[25];
+    int minInitLevel = this->grid->getCoarsestInitializedLevel();
+    int maxInitLevel = this->grid->getFinestInitializedLevel();
+    for (int level = minInitLevel; level <= maxInitLevel; level++) {
+        grid->getBlocks(level, rank, blocksVector[level]);
+        blocksCount += static_cast<int>(blocksVector[level].size());
+    }
+
+    DataSetSmallRestart *dataSetSmallArray = new DataSetSmallRestart[blocksCount];
+    std::vector<double> doubleValuesArray; // double-values (arrays of f's) in all blocks
+    dataSetParam dataSetParamStr;
+
+    if (comm->isRoot()) {
+        UBLOG(logINFO, "MPIIORestartCoProcessor::writePhaseField start collect data rank = " << rank);
+        UBLOG(logINFO, "Physical Memory currently used by current process: "
+                           << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
+    }
+
+    bool firstBlock        = true;
+    int doubleCountInBlock = 0;
+    int ic                 = 0;
+    SPtr<CbArray3D<LBMReal, IndexerX3X2X1>> PhaseField3DPtr;
+
+    for (int level = minInitLevel; level <= maxInitLevel; level++) {
+        for (SPtr<Block3D> block : blocksVector[level]) //	blocks of the current level
+        {
+            dataSetSmallArray[ic].x1 = block->getX1(); // coordinates of the block needed to find it while regenerating the grid
+            dataSetSmallArray[ic].x2 = block->getX2();
+            dataSetSmallArray[ic].x3 = block->getX3();
+            dataSetSmallArray[ic].level = block->getLevel();
+
+            PhaseField3DPtr = block->getKernel()->getDataSet()->getPhaseField();
+
+            if (firstBlock) // when first (any) valid block...
+            {
+                dataSetParamStr.nx1 = dataSetParamStr.nx2 = dataSetParamStr.nx3 = 0;
+                dataSetParamStr.nx[0] = static_cast<int>(PhaseField3DPtr->getNX1());
+                dataSetParamStr.nx[1] = static_cast<int>(PhaseField3DPtr->getNX2());
+                dataSetParamStr.nx[2] = static_cast<int>(PhaseField3DPtr->getNX3());
+                dataSetParamStr.nx[3] = 1;
+                doubleCountInBlock =
+                    dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3];
+
+                firstBlock = false;
+            }
+
+            if ((dataSetParamStr.nx[0] > 0) && (dataSetParamStr.nx[1] > 0) && (dataSetParamStr.nx[2] > 0))
+                doubleValuesArray.insert(doubleValuesArray.end(), PhaseField3DPtr->getDataVector().begin(),
+                                         PhaseField3DPtr->getDataVector().end());
+
+            ic++;
+        }
+    }
+
+    // register new MPI-types depending on the block-specific information
+    MPI_Type_contiguous(doubleCountInBlock, MPI_DOUBLE, &dataSetDoubleType);
+    MPI_Type_commit(&dataSetDoubleType);
+
+    if (comm->isRoot()) {
+        UBLOG(logINFO, "MPIIORestartCoProcessor::writePhaseField start MPI IO rank = " << rank);
+        UBLOG(logINFO, "Physical Memory currently used by current process: "
+                           << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
+    }
+
+    // write to the file
+    // all processes calculate their offsets (quantity of bytes that the process is going to write)
+    // and notify the next process (with the rank = rank + 1)
+    MPI_Offset write_offset  = (MPI_Offset)(size * sizeof(int));
+    size_t next_write_offset = 0;
+
+    if (size > 1) {
+        if (rank == 0) {
+            next_write_offset = write_offset + sizeof(dataSetParam) +
+                                blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double));
+            MPI_Send(&next_write_offset, 1, MPI_LONG_LONG_INT, 1, 5, MPI_COMM_WORLD);
+        } else {
+            MPI_Recv(&write_offset, 1, MPI_LONG_LONG_INT, rank - 1, 5, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+            next_write_offset = write_offset + sizeof(dataSetParam) +
+                                blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double));
+            if (rank < size - 1)
+                MPI_Send(&next_write_offset, 1, MPI_LONG_LONG_INT, rank + 1, 5, MPI_COMM_WORLD);
+        }
+    }
+
+    double start, finish;
+    if (comm->isRoot())
+        start = MPI_Wtime();
+
+    MPI_Info info = MPI_INFO_NULL;
+
+#ifdef HLRN_LUSTRE
+    MPI_Info_create(&info);
+    MPI_Info_set(info, "striping_factor", "40");
+    MPI_Info_set(info, "striping_unit", "4M");
+#endif
+
+    MPI_File file_handler;
+    std::string filename = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpPhaseField.bin";
+    int rc = MPI_File_open(MPI_COMM_WORLD, filename.c_str(), MPI_MODE_CREATE | MPI_MODE_WRONLY, info, &file_handler);
+    if (rc != MPI_SUCCESS)
+        throw UbException(UB_EXARGS, "couldn't open file " + filename);
+
+    // each process writes the quantity of it's blocks
+    MPI_File_write_at(file_handler, (MPI_Offset)(rank * sizeof(int)), &blocksCount, 1, MPI_INT, MPI_STATUS_IGNORE);
+    // each process writes common parameters of a dataSet
+    MPI_File_write_at(file_handler, write_offset, &dataSetParamStr, 1, dataSetParamType, MPI_STATUS_IGNORE);
+    // each process writes data identifying blocks
+    MPI_File_write_at(file_handler, (MPI_Offset)(write_offset + sizeof(dataSetParam)), dataSetSmallArray, blocksCount,
+                      dataSetSmallType, MPI_STATUS_IGNORE);
+    // each process writes the dataSet arrays
+    if (doubleValuesArray.size() > 0)
+        MPI_File_write_at(file_handler,
+                          (MPI_Offset)(write_offset + sizeof(dataSetParam) + blocksCount * sizeof(DataSetSmallRestart)),
+                          &doubleValuesArray[0], blocksCount, dataSetDoubleType, MPI_STATUS_IGNORE);
+
+    MPI_File_sync(file_handler);
+    MPI_File_close(&file_handler);
+    MPI_Type_free(&dataSetDoubleType);
+
+    if (comm->isRoot()) {
+        finish = MPI_Wtime();
+        UBLOG(logINFO, "MPIIORestartCoProcessor::writePhaseField time: " << finish - start << " s");
+    }
+
+    delete[] dataSetSmallArray;
+}
+
 void MPIIORestartCoProcessor::writeBoundaryConds(int step)
 {
     int rank, size;
@@ -1458,9 +1625,9 @@ void MPIIORestartCoProcessor::readDataSet(int step)
 
     DataSetRestart *dataSetArray = new DataSetRestart[blocksCount];
     double doubleCountInBlock =
-        dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
+        (dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3] +
         dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3] +
-        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
+        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3]) * 2;
     std::vector<double> doubleValuesArray(size_t(blocksCount * doubleCountInBlock)); // double-values in all blocks
 
     //   define MPI_types depending on the block-specific information
@@ -1497,43 +1664,73 @@ void MPIIORestartCoProcessor::readDataSet(int step)
                            << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
     }
 
-    size_t index = 0, vectorSize = 0;
-    std::vector<double> vectorsOfValues1, vectorsOfValues2, vectorsOfValues3;
+    size_t index = 0;
+    std::vector<double> vectorsOfValuesF1, vectorsOfValuesF2, vectorsOfValuesF3;
+    std::vector<double> vectorsOfValuesH1, vectorsOfValuesH2, vectorsOfValuesH3;
+    size_t vectorSize1 =
+        dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3];
+    size_t vectorSize2 =
+        dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3];
+    size_t vectorSize3 =
+        dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
 
     for (int n = 0; n < blocksCount; n++) {
-        vectorSize = dataSetParamStr1.nx[0] * dataSetParamStr1.nx[1] * dataSetParamStr1.nx[2] * dataSetParamStr1.nx[3];
-        vectorsOfValues1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize);
-        index += vectorSize;
+        vectorsOfValuesF1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1);
+        index += vectorSize1;
 
-        vectorSize = dataSetParamStr2.nx[0] * dataSetParamStr2.nx[1] * dataSetParamStr2.nx[2] * dataSetParamStr2.nx[3];
-        vectorsOfValues2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize);
-        index += vectorSize;
+        vectorsOfValuesF2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2);
+        index += vectorSize2;
 
-        vectorSize = dataSetParamStr3.nx[0] * dataSetParamStr3.nx[1] * dataSetParamStr3.nx[2] * dataSetParamStr3.nx[3];
-        vectorsOfValues3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize);
-        index += vectorSize;
+        vectorsOfValuesF3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3);
+        index += vectorSize3;
 
-        SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
+        vectorsOfValuesH1.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize1);
+        index += vectorSize1;
 
+        vectorsOfValuesH2.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize2);
+        index += vectorSize2;
+
+        vectorsOfValuesH3.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + vectorSize3);
+        index += vectorSize3;
+
+        SPtr<DistributionArray3D> mFdistributions(new D3Q27EsoTwist3DSplittedVector());
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
             ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
-                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues1, dataSetParamStr1.nx[0],
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF1, dataSetParamStr1.nx[0],
                                                         dataSetParamStr1.nx[1], dataSetParamStr1.nx[2],
                                                         dataSetParamStr1.nx[3])));
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
             ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
-                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValues2, dataSetParamStr2.nx[0],
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesF2, dataSetParamStr2.nx[0],
                                                         dataSetParamStr2.nx[1], dataSetParamStr2.nx[2],
                                                         dataSetParamStr2.nx[3])));
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)
-            ->setZeroDistributions(
-                CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
-                    vectorsOfValues3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
+            ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                    vectorsOfValuesF3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
 
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX1(dataSetParamStr1.nx1);
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX2(dataSetParamStr1.nx2);
         dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mFdistributions)->setNX3(dataSetParamStr1.nx3);
 
+        SPtr<DistributionArray3D> mHdistributions(new D3Q27EsoTwist3DSplittedVector());
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+            ->setLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH1, dataSetParamStr1.nx[0],
+                                                        dataSetParamStr1.nx[1], dataSetParamStr1.nx[2],
+                                                        dataSetParamStr1.nx[3])));
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+            ->setNonLocalDistributions(CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr(
+                new CbArray4D<LBMReal, IndexerX4X3X2X1>(vectorsOfValuesH2, dataSetParamStr2.nx[0],
+                                                        dataSetParamStr2.nx[1], dataSetParamStr2.nx[2],
+                                                        dataSetParamStr2.nx[3])));
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)
+            ->setZeroDistributions(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+                    vectorsOfValuesH3, dataSetParamStr3.nx[0], dataSetParamStr3.nx[1], dataSetParamStr3.nx[2])));
+
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX1(dataSetParamStr1.nx1);
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX2(dataSetParamStr1.nx2);
+        dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(mHdistributions)->setNX3(dataSetParamStr1.nx3);
+
         // find the nesessary block and fill it
         SPtr<Block3D> block =
             grid->getBlock(dataSetArray[n].x1, dataSetArray[n].x2, dataSetArray[n].x3, dataSetArray[n].level);
@@ -1546,6 +1743,7 @@ void MPIIORestartCoProcessor::readDataSet(int step)
         kernel->setWithForcing(dataSetArray[n].withForcing);
         SPtr<DataSet3D> dataSetPtr = SPtr<DataSet3D>(new DataSet3D());
         dataSetPtr->setFdistributions(mFdistributions);
+        dataSetPtr->setHdistributions(mHdistributions);
         kernel->setDataSet(dataSetPtr);
         block->setKernel(kernel);
     }
@@ -1586,6 +1784,9 @@ void MPIIORestartCoProcessor::readDataSet(int step)
 
     if (arrPresence.isRelaxationFactorPresent)
         readRelaxationFactor(step);
+
+    if (arrPresence.isPhaseFieldPresent)
+        readPhaseField(step);
 }
 
 void MPIIORestartCoProcessor::readAverageDensityArray(int step)
@@ -2197,6 +2398,106 @@ void MPIIORestartCoProcessor::readRelaxationFactor(int step)
     delete[] dataSetSmallArray;
 }
 
+void MPIIORestartCoProcessor::readPhaseField(int step)
+{
+    int rank, size;
+    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+    if (comm->isRoot()) {
+        UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField start MPI IO rank = " << rank);
+        UBLOG(logINFO, "Physical Memory currently used by current process: "
+                           << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
+    }
+    double start, finish;
+    if (comm->isRoot())
+        start = MPI_Wtime();
+
+    MPI_File file_handler;
+    std::string filename = path + "/mpi_io_cp/mpi_io_cp_" + UbSystem::toString(step) + "/cpPhaseField.bin";
+    int rc = MPI_File_open(MPI_COMM_WORLD, filename.c_str(), MPI_MODE_RDONLY, MPI_INFO_NULL, &file_handler);
+    if (rc != MPI_SUCCESS)
+        throw UbException(UB_EXARGS, "couldn't open file " + filename);
+
+    // read count of blocks
+    int blocksCount = 0;
+    dataSetParam dataSetParamStr;
+    MPI_File_read_at(file_handler, (MPI_Offset)(rank * sizeof(int)), &blocksCount, 1, MPI_INT, MPI_STATUS_IGNORE);
+    MPI_File_read_at(file_handler, (MPI_Offset)(size * sizeof(int)), &dataSetParamStr, 1, dataSetParamType,
+                     MPI_STATUS_IGNORE);
+
+    DataSetSmallRestart *dataSetSmallArray = new DataSetSmallRestart[blocksCount];
+    int doubleCountInBlock =
+        dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3];
+    std::vector<double> doubleValuesArray(blocksCount * doubleCountInBlock); // double-values in all blocks
+
+    // define MPI_types depending on the block-specific information
+    MPI_Type_contiguous(doubleCountInBlock, MPI_DOUBLE, &dataSetDoubleType);
+    MPI_Type_commit(&dataSetDoubleType);
+
+    // calculate the read offset
+    MPI_Offset read_offset  = (MPI_Offset)(size * sizeof(int));
+    size_t next_read_offset = 0;
+
+    if (size > 1) {
+        if (rank == 0) {
+            next_read_offset = read_offset + sizeof(dataSetParam) +
+                               blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double));
+            MPI_Send(&next_read_offset, 1, MPI_LONG_LONG_INT, 1, 5, MPI_COMM_WORLD);
+        } else {
+            MPI_Recv(&read_offset, 1, MPI_LONG_LONG_INT, rank - 1, 5, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+            next_read_offset = read_offset + sizeof(dataSetParam) +
+                               blocksCount * (sizeof(DataSetSmallRestart) + doubleCountInBlock * sizeof(double));
+            if (rank < size - 1)
+                MPI_Send(&next_read_offset, 1, MPI_LONG_LONG_INT, rank + 1, 5, MPI_COMM_WORLD);
+        }
+    }
+
+    MPI_File_read_at(file_handler, (MPI_Offset)(read_offset + sizeof(dataSetParam)), dataSetSmallArray, blocksCount,
+                     dataSetSmallType, MPI_STATUS_IGNORE);
+    if (doubleCountInBlock > 0)
+        MPI_File_read_at(file_handler,
+                         (MPI_Offset)(read_offset + sizeof(dataSetParam) + blocksCount * sizeof(DataSetSmallRestart)),
+                         &doubleValuesArray[0], blocksCount, dataSetDoubleType, MPI_STATUS_IGNORE);
+    MPI_File_close(&file_handler);
+    MPI_Type_free(&dataSetDoubleType);
+
+    if (comm->isRoot()) {
+        finish = MPI_Wtime();
+        UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField time: " << finish - start << " s");
+        UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField start of restore of data, rank = " << rank);
+        UBLOG(logINFO, "Physical Memory currently used by current process: "
+                           << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
+    }
+
+    size_t index = 0;
+    size_t nextVectorSize =
+        dataSetParamStr.nx[0] * dataSetParamStr.nx[1] * dataSetParamStr.nx[2] * dataSetParamStr.nx[3];
+    std::vector<double> vectorsOfValues;
+    for (int n = 0; n < blocksCount; n++) {
+        vectorsOfValues.assign(doubleValuesArray.data() + index, doubleValuesArray.data() + index + nextVectorSize);
+        index += nextVectorSize;
+
+        // fill PhaseField array
+        SPtr<PhaseFieldArray3D> mPhaseField;
+        mPhaseField = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(
+            vectorsOfValues, dataSetParamStr.nx[0], dataSetParamStr.nx[1], dataSetParamStr.nx[2]));
+
+        // find the nesessary block and fill it
+        SPtr<Block3D> block = grid->getBlock(dataSetSmallArray[n].x1, dataSetSmallArray[n].x2, dataSetSmallArray[n].x3,
+                                             dataSetSmallArray[n].level);
+        block->getKernel()->getDataSet()->setPhaseField(mPhaseField);
+    }
+
+    if (comm->isRoot()) {
+        UBLOG(logINFO, "MPIIORestartCoProcessor::readPhaseField end of restore of data, rank = " << rank);
+        UBLOG(logINFO, "Physical Memory currently used by current process: "
+                           << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB");
+    }
+
+    delete[] dataSetSmallArray;
+}
+
 void MPIIORestartCoProcessor::readBoundaryConds(int step)
 {
     int rank, size;
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h
index a5d65c206cef7f6be00ae955ded6b90247983cc7..cbcf8c553943aa325f415cd123ae1fbe0bf4dcf3 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/MPIIORestartCoProcessor.h
@@ -35,7 +35,8 @@ public:
     void writeAverageTripleArray(int step);
     void writeShearStressValArray(int step);
     void writeRelaxationFactor(int step);
-    //! Writes the boundary conditions of the blocks into the file cpBC.bin
+    void writePhaseField(int step);
+   //! Writes the boundary conditions of the blocks into the file cpBC.bin
     void writeBoundaryConds(int step);
 
     //! Reads the blocks of the grid from the file cpBlocks.bin
@@ -48,6 +49,7 @@ public:
     void readAverageTripleArray(int step);
     void readShearStressValArray(int step);
     void readRelaxationFactor(int step);
+    void readPhaseField(int step);
     //! Reads the boundary conditions of the blocks from the file cpBC.bin
     void readBoundaryConds(int step);
     //! The function sets LBMKernel
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp
index 312ed01adf39ff6eb4aaf0965d8df6763ad3e8d1..73034d88996a3c22d8a3aa9e86517c5cbe92ffc3 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteMultiphaseQuantitiesCoProcessor.cpp
@@ -200,7 +200,7 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
 
     // nummern vergeben und node vector erstellen + daten sammeln
     CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1);
-    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField1(
+    CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField(
         new CbArray3D<LBMReal, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0));
 
     for (int ix3 = minX3; ix3 < maxX3; ix3++) {
@@ -208,7 +208,7 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
             for (int ix1 = minX1; ix1 < maxX1; ix1++) {
                 if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) {
                     distributionsH->getDistribution(f, ix1, ix2, ix3);
-                    (*phaseField1)(ix1, ix2, ix3) =
+                    (*phaseField)(ix1, ix2, ix3) =
                         ((f[TNE] + f[BSW]) + (f[TSE] + f[BNW])) + ((f[BSE] + f[TNW]) + (f[TSW] + f[BNE])) +
                         (((f[NE] + f[SW]) + (f[SE] + f[NW])) + ((f[TE] + f[BW]) + (f[BE] + f[TW])) +
                          ((f[BN] + f[TS]) + (f[TN] + f[BS]))) +
@@ -243,7 +243,7 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
                     nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]),
                                                   float(worldCoordinates[2])));
 
-                    phi[REST] = (*phaseField1)(ix1, ix2, ix3);
+                    phi[REST] = (*phaseField)(ix1, ix2, ix3);
 
                     if ((ix1 == 0) || (ix2 == 0) || (ix3 == 0)) {
                         dX1_phi = 0.0;
@@ -254,32 +254,32 @@ void WriteMultiphaseQuantitiesCoProcessor::addDataMQ(SPtr<Block3D> block)
                         // vx2 = 0.0;
                         // vx3 = 0.0;
                     } else {
-                        phi[E]   = (*phaseField1)(ix1 + DX1[E], ix2 + DX2[E], ix3 + DX3[E]);
-                        phi[N]   = (*phaseField1)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]);
-                        phi[T]   = (*phaseField1)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]);
-                        phi[W]   = (*phaseField1)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]);
-                        phi[S]   = (*phaseField1)(ix1 + DX1[S], ix2 + DX2[S], ix3 + DX3[S]);
-                        phi[B]   = (*phaseField1)(ix1 + DX1[B], ix2 + DX2[B], ix3 + DX3[B]);
-                        phi[NE]  = (*phaseField1)(ix1 + DX1[NE], ix2 + DX2[NE], ix3 + DX3[NE]);
-                        phi[NW]  = (*phaseField1)(ix1 + DX1[NW], ix2 + DX2[NW], ix3 + DX3[NW]);
-                        phi[TE]  = (*phaseField1)(ix1 + DX1[TE], ix2 + DX2[TE], ix3 + DX3[TE]);
-                        phi[TW]  = (*phaseField1)(ix1 + DX1[TW], ix2 + DX2[TW], ix3 + DX3[TW]);
-                        phi[TN]  = (*phaseField1)(ix1 + DX1[TN], ix2 + DX2[TN], ix3 + DX3[TN]);
-                        phi[TS]  = (*phaseField1)(ix1 + DX1[TS], ix2 + DX2[TS], ix3 + DX3[TS]);
-                        phi[SW]  = (*phaseField1)(ix1 + DX1[SW], ix2 + DX2[SW], ix3 + DX3[SW]);
-                        phi[SE]  = (*phaseField1)(ix1 + DX1[SE], ix2 + DX2[SE], ix3 + DX3[SE]);
-                        phi[BW]  = (*phaseField1)(ix1 + DX1[BW], ix2 + DX2[BW], ix3 + DX3[BW]);
-                        phi[BE]  = (*phaseField1)(ix1 + DX1[BE], ix2 + DX2[BE], ix3 + DX3[BE]);
-                        phi[BS]  = (*phaseField1)(ix1 + DX1[BS], ix2 + DX2[BS], ix3 + DX3[BS]);
-                        phi[BN]  = (*phaseField1)(ix1 + DX1[BN], ix2 + DX2[BN], ix3 + DX3[BN]);
-                        phi[BSW] = (*phaseField1)(ix1 + DX1[BSW], ix2 + DX2[BSW], ix3 + DX3[BSW]);
-                        phi[BSE] = (*phaseField1)(ix1 + DX1[BSE], ix2 + DX2[BSE], ix3 + DX3[BSE]);
-                        phi[BNW] = (*phaseField1)(ix1 + DX1[BNW], ix2 + DX2[BNW], ix3 + DX3[BNW]);
-                        phi[BNE] = (*phaseField1)(ix1 + DX1[BNE], ix2 + DX2[BNE], ix3 + DX3[BNE]);
-                        phi[TNE] = (*phaseField1)(ix1 + DX1[TNE], ix2 + DX2[TNE], ix3 + DX3[TNE]);
-                        phi[TNW] = (*phaseField1)(ix1 + DX1[TNW], ix2 + DX2[TNW], ix3 + DX3[TNW]);
-                        phi[TSE] = (*phaseField1)(ix1 + DX1[TSE], ix2 + DX2[TSE], ix3 + DX3[TSE]);
-                        phi[TSW] = (*phaseField1)(ix1 + DX1[TSW], ix2 + DX2[TSW], ix3 + DX3[TSW]);
+                        phi[E]   = (*phaseField)(ix1 + DX1[E], ix2 + DX2[E], ix3 + DX3[E]);
+                        phi[N]   = (*phaseField)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]);
+                        phi[T]   = (*phaseField)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]);
+                        phi[W]   = (*phaseField)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]);
+                        phi[S]   = (*phaseField)(ix1 + DX1[S], ix2 + DX2[S], ix3 + DX3[S]);
+                        phi[B]   = (*phaseField)(ix1 + DX1[B], ix2 + DX2[B], ix3 + DX3[B]);
+                        phi[NE]  = (*phaseField)(ix1 + DX1[NE], ix2 + DX2[NE], ix3 + DX3[NE]);
+                        phi[NW]  = (*phaseField)(ix1 + DX1[NW], ix2 + DX2[NW], ix3 + DX3[NW]);
+                        phi[TE]  = (*phaseField)(ix1 + DX1[TE], ix2 + DX2[TE], ix3 + DX3[TE]);
+                        phi[TW]  = (*phaseField)(ix1 + DX1[TW], ix2 + DX2[TW], ix3 + DX3[TW]);
+                        phi[TN]  = (*phaseField)(ix1 + DX1[TN], ix2 + DX2[TN], ix3 + DX3[TN]);
+                        phi[TS]  = (*phaseField)(ix1 + DX1[TS], ix2 + DX2[TS], ix3 + DX3[TS]);
+                        phi[SW]  = (*phaseField)(ix1 + DX1[SW], ix2 + DX2[SW], ix3 + DX3[SW]);
+                        phi[SE]  = (*phaseField)(ix1 + DX1[SE], ix2 + DX2[SE], ix3 + DX3[SE]);
+                        phi[BW]  = (*phaseField)(ix1 + DX1[BW], ix2 + DX2[BW], ix3 + DX3[BW]);
+                        phi[BE]  = (*phaseField)(ix1 + DX1[BE], ix2 + DX2[BE], ix3 + DX3[BE]);
+                        phi[BS]  = (*phaseField)(ix1 + DX1[BS], ix2 + DX2[BS], ix3 + DX3[BS]);
+                        phi[BN]  = (*phaseField)(ix1 + DX1[BN], ix2 + DX2[BN], ix3 + DX3[BN]);
+                        phi[BSW] = (*phaseField)(ix1 + DX1[BSW], ix2 + DX2[BSW], ix3 + DX3[BSW]);
+                        phi[BSE] = (*phaseField)(ix1 + DX1[BSE], ix2 + DX2[BSE], ix3 + DX3[BSE]);
+                        phi[BNW] = (*phaseField)(ix1 + DX1[BNW], ix2 + DX2[BNW], ix3 + DX3[BNW]);
+                        phi[BNE] = (*phaseField)(ix1 + DX1[BNE], ix2 + DX2[BNE], ix3 + DX3[BNE]);
+                        phi[TNE] = (*phaseField)(ix1 + DX1[TNE], ix2 + DX2[TNE], ix3 + DX3[TNE]);
+                        phi[TNW] = (*phaseField)(ix1 + DX1[TNW], ix2 + DX2[TNW], ix3 + DX3[TNW]);
+                        phi[TSE] = (*phaseField)(ix1 + DX1[TSE], ix2 + DX2[TSE], ix3 + DX3[TSE]);
+                        phi[TSW] = (*phaseField)(ix1 + DX1[TSW], ix2 + DX2[TSW], ix3 + DX3[TSW]);
                         dX1_phi  = 0.0 * gradX1_phi(phi);
                         dX2_phi  = 0.0 * gradX2_phi(phi);
                         dX3_phi  = 0.0 * gradX3_phi(phi);
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp
index 8c4462066705154bad61846f5e9c147c303a3ba3..f2edcd551b8a08ff00792a7daea4ee70d0fa17af 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.cpp
@@ -1,3 +1,35 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 WriteMultiphaseQuantitiesCoProcessor.h
+//! \ingroup CoProcessors
+//! \author Konstantin Kutscher
+//=======================================================================================
 #include "WriteThixotropyQuantitiesCoProcessor.h"
 #include "LBMKernel.h"
 #include "BCProcessor.h"
diff --git a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h
index 269bb4a3b9be8072f33793e6ce105481ebd3b243..b14e7f9f54c0e8e444a5f00804fee5cbc1ff6e21 100644
--- a/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h
+++ b/src/cpu/VirtualFluidsCore/CoProcessors/WriteThixotropyQuantitiesCoProcessor.h
@@ -1,3 +1,36 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 WriteMultiphaseQuantitiesCoProcessor.h
+//! \ingroup CoProcessors
+//! \author Konstantin Kutscher
+//=======================================================================================
+
 #ifndef WriteThixotropyQuantitiesCoProcessor_H
 #define WriteThixotropyQuantitiesCoProcessor_H
 
diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h b/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h
index e7bfaa2c325301177826dac671c37f9cf59ad63e..6d8877ee909183dcb4088ccb77f6726e83447ba8 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h
+++ b/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h
@@ -49,7 +49,7 @@ public:
 
 protected:
     virtual inline void updatePointers() = 0;
-    virtual void exchangeData();
+    void exchangeData();
     virtual inline void exchangeData(int x1From, int x2From, int x3From, int x1To, int x2To, int x3To) = 0;
 
     int maxX1;
diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp
index adda86a09e81075af093211561d7f0ee023e94f5..739efcddb9ceea5c0951df83833d64ad90bb02c5 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp
+++ b/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp
@@ -12,6 +12,8 @@ OneDistributionFullVectorConnector::OneDistributionFullVectorConnector(SPtr<Bloc
 //////////////////////////////////////////////////////////////////////////
 void OneDistributionFullVectorConnector::init()
 {
+    FullVectorConnector::init();
+    
     fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions());
 
     int anz = 27;
diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp
index af6c20d3229a77b00b4d79df9197f8ad9f11f84d..2e726fc7b88c9ef229e503924eadcf53a9b06dfd 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp
+++ b/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp
@@ -50,6 +50,8 @@ ThreeDistributionsFullVectorConnector::ThreeDistributionsFullVectorConnector(SPt
 //////////////////////////////////////////////////////////////////////////
 void ThreeDistributionsFullVectorConnector::init()
 {
+   FullVectorConnector::init();
+
    fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions());
    hDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getHdistributions());
    h2Dis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getH2distributions());
diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp
index a37bff3fc3b34667555ce02200fd2296b7514032..7fe8bc3643c337323ef25ee35c260597744e6191 100644
--- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp
+++ b/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp
@@ -50,6 +50,8 @@ TwoDistributionsFullVectorConnector::TwoDistributionsFullVectorConnector(SPtr<Bl
 //////////////////////////////////////////////////////////////////////////
 void TwoDistributionsFullVectorConnector::init()
 {
+   FullVectorConnector::init();
+
    fDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getFdistributions());
    hDis = dynamicPointerCast<EsoTwist3D>(block.lock()->getKernel()->getDataSet()->getHdistributions());
 
diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
index 1563f415a5c4043fdd7249362bbc2b053acb6137..b8b541546f3c2cccb49ff09c859b8c97c2e22f63 100644
--- a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
+++ b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h
@@ -55,8 +55,8 @@ public:
     SPtr<DistributionArray3D> getHdistributions() const;
     void setHdistributions(SPtr<DistributionArray3D> distributions);
 
-    SPtr<DistributionArray3D> getH1distributions() const;
-    void setH1distributions(SPtr<DistributionArray3D> distributions);
+    //SPtr<DistributionArray3D> getH1distributions() const;
+    //void setH1distributions(SPtr<DistributionArray3D> distributions);
 
     SPtr<DistributionArray3D> getH2distributions() const;
     void setH2distributions(SPtr<DistributionArray3D> distributions);
@@ -94,7 +94,7 @@ private:
 
     SPtr<DistributionArray3D> hdistributions;
 
-    SPtr<DistributionArray3D> h1distributions;
+    //SPtr<DistributionArray3D> h1distributions;
     SPtr<DistributionArray3D> h2distributions;
 
     SPtr<AverageValuesArray3D> averageValues;
@@ -120,9 +120,9 @@ inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const { return h
 
 inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions) { hdistributions = distributions; }
 
-inline SPtr<DistributionArray3D> DataSet3D::getH1distributions() const { return h1distributions; }
-
-inline void DataSet3D::setH1distributions(SPtr<DistributionArray3D> distributions) { h1distributions = distributions; }
+//inline SPtr<DistributionArray3D> DataSet3D::getH1distributions() const { return h1distributions; }
+//
+//inline void DataSet3D::setH1distributions(SPtr<DistributionArray3D> distributions) { h1distributions = distributions; }
 
 inline SPtr<DistributionArray3D> DataSet3D::getH2distributions() const { return h2distributions; }
 
diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
index a62fef298fc0c18eb053c1138949ab1fb8e58ead..ce8b66cb5ad2873fbf04fe1ed5a2499259903acb 100644
--- a/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseScratchCumulantLBMKernel.cpp
@@ -284,13 +284,28 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
                         LBMReal dX2_phi = gradX2_phi();
                         LBMReal dX3_phi = gradX3_phi();
 
+
                         LBMReal denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9;
                         LBMReal normX1 = dX1_phi/denom;
 						LBMReal normX2 = dX2_phi/denom;
-						LBMReal normX3 = dX3_phi/denom;
+						LBMReal normX3 = dX3_phi/denom; 
 
-						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL);
 
+						///test for magnitude of gradient from phase indicator directly
+						//if (fabs((1.0 - phi[REST]) * (phi[REST]) */* c4*/ - (denom- 1e-9)) / denom > 1e-3 &&phi[REST]>0.4 &&phi[REST]<0.6) {
+						//	std::cout << (1.0 - phi[REST]) * (phi[REST])  // *c4 
+						//		<< " " << denom <<" "<< ((1.0 - phi[REST]) * (phi[REST]) * c4 ) / denom << std::endl;
+						//}
+						//dX1_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX1;
+						//dX2_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX2;
+						//dX3_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX3;
+
+						//denom = 1.0;
+
+						///!test
+
+						collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL);
+						//collFactorM = phi[REST] - phiL < (phiH - phiL) * 0.05 ? collFactorG : collFactorL;
 
                         LBMReal mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi();
 
@@ -313,35 +328,35 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
                             			   ////Incompressible Kernal
 
-			    mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)/rho;
-			    mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho;
-			    mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho;
-			    mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho;
-			    mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho;
-			    mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho;
-			    mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho;
-			    mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho;
-			    mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho;
-			    mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho;
-			    mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho;
-			    mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho;
-			    mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho;
+			    mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)/rho*c3;
+			    mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3;
+			    mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3;
+			    mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3;
+			    mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3;
+			    mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3;
+			    mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3;
+			    mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3;
+			    mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3;
+			    mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3;
+			    mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3;
+			    mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3;
+			    mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3;
 
-			    mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho;
-			    mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho;
-			    mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho;
-			    mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho;
-			    mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho;
-			    mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho;
-			    mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho;
-			    mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho;
-			    mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho;
-			    mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho;
-			    mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho;
-			    mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho;
-			    mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho;
+			    mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3;
+			    mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3;
+			    mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3;
+			    mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3;
+			    mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3;
+			    mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3;
+			    mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3;
+			    mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3;
+			    mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3;
+			    mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3;
+			    mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3;
+			    mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3;
+			    mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3;
 
-			    mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho;
+			    mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3;
 
 
 
@@ -369,6 +384,70 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   vvx += mu * dX1_phi*c1o2;
 			   vvy += mu * dX2_phi * c1o2;
 			   vvz += mu * dX3_phi * c1o2;
+			  
+
+			   ///----Classic source term 8.4.2021
+
+			   LBMReal ux2;
+			   LBMReal uy2;
+			   LBMReal uz2;
+			   ux2 = vvx * vvx;
+			   uy2 = vvy * vvy;
+			   uz2 = vvz * vvz;
+			   LBMReal forcingTerm[D3Q27System::ENDF + 1];
+			   for (int dir = STARTF; dir <= (FENDDIR); dir++) {
+				   LBMReal velProd = DX1[dir] * vvx + DX2[dir] * vvy + DX3[dir] * vvz;
+				   LBMReal velSq1 = velProd * velProd;
+				   LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2));
+
+				   LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi;
+
+				   forcingTerm[dir] = 
+					   (-vvx) * (fac1 * dX1_phi ) +
+					   (-vvy) * (fac1 * dX2_phi ) +
+					   (-vvz) * (fac1 * dX3_phi ) +
+					   (DX1[dir]) * (fac1 * dX1_phi ) +
+					   (DX2[dir]) * (fac1 * dX2_phi ) +
+					   (DX3[dir]) * (fac1 * dX3_phi );
+			   }
+
+			   LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
+			   LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi;
+			   forcingTerm[REST] = (-vvx) * (fac1 * dX1_phi ) +
+				   (-vvy) * (fac1 * dX2_phi ) +
+				   (-vvz) * (fac1 * dX3_phi );
+
+			   mfcbb += 3.0 * ( 0.5 * forcingTerm[E]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   mfbcb += 3.0 * ( 0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+			   mfbbc += 3.0 * ( 0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+			   mfccb += 3.0 * ( 0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+			   mfacb += 3.0 * ( 0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+			   mfcbc += 3.0 * ( 0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+			   mfabc += 3.0 * ( 0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+			   mfbcc += 3.0 * ( 0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+			   mfbac += 3.0 * ( 0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+			   mfccc += 3.0 * ( 0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+			   mfacc += 3.0 * ( 0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+			   mfcac += 3.0 * ( 0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+			   mfaac += 3.0 * ( 0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+			   mfabb += 3.0 * ( 0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+			   mfbab += 3.0 * ( 0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+			   mfbba += 3.0 * ( 0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+			   mfaab += 3.0 * ( 0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+			   mfcab += 3.0 * ( 0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+			   mfaba += 3.0 * ( 0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+			   mfcba += 3.0 * ( 0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+			   mfbaa += 3.0 * ( 0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+			   mfbca += 3.0 * ( 0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+			   mfaaa += 3.0 * ( 0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+			   mfcaa += 3.0 * ( 0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+			   mfaca += 3.0 * ( 0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+			   mfcca += 3.0 * ( 0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+			   mfbbb += 3.0 * ( 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
+
+			   //--------------------------------------------------------
+
+
 
 			   //forcing 
 			   ///////////////////////////////////////////////////////////////////////////////////////////
@@ -663,12 +742,23 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   // Cumulants
 			   ////////////////////////////////////////////////////////////////////////////////////
 			   LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity
-			   LBMReal OxyyPxzz = 1.;//-s9;//2+s9;//
-			   LBMReal OxyyMxzz  = 1.;//2+s9;//
-			   LBMReal O4 = 1.;
+			   //LBMReal OxyyPxzz = 2.0 - collFactorM;// 1.;//-s9;//2+s9;//
+			   //LBMReal OxyyMxzz  = 2.0 - collFactorM;// 1.;//2+s9;//
+			   LBMReal O4 = 1.0;//collFactorM;// 1.;
 			   LBMReal O5 = 1.;
 			   LBMReal O6 = 1.;
 
+
+			   /////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));
+
+
 			   //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
@@ -711,19 +801,23 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			  // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
 
 			   //17.03.2021 attempt for statililization by assymptotically vanishing bias
-			   LBMReal correctionScaling = rhoToPhi /rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
-			   mxxPyyPzz += (1.0/6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* correctionScaling; // As in Hesam's code
+			   LBMReal correctionScaling =0.0* rhoToPhi /rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000;
+			   mxxPyyPzz += (1.0/3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* correctionScaling; // As in Hesam's code
 			   mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy)* correctionScaling;
 			   mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
 			   mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
 			   mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling;
 			   mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling;
 
-			   LBMReal dxux = 0.0;// -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
-			   LBMReal dyuy = 0.0;// dxux + collFactorM * c3o2 * mxxMyy;
-			   LBMReal dzuz = 0.0;// dxux + collFactorM * c3o2 * mxxMzz;
+			   LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);
+			   LBMReal dyuy =  dxux + collFactorM * c3o2 * mxxMyy;
+			   LBMReal dzuz =  dxux + collFactorM * c3o2 * mxxMzz;
 
-			   //relax
+			   LBMReal Dxy = -three * collFactorM * mfbba;
+			   LBMReal Dxz = -three * collFactorM * mfbab;
+			   LBMReal Dyz = -three * collFactorM * mfabb;
+
+			   ////relax unfiltered
 			   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);
@@ -732,9 +826,28 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   mfbab += collFactorM * (-mfbab);
 			   mfbba += collFactorM * (-mfbba);
 
+
+			   //relax filtered
+			   //LBMReal interfaceFilter=0.001;
+			   //LBMReal interfaceFactor = c1;// (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi);
+
+			   //mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);
+			   //
+			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMyy) / (fabs(mxxMyy) * interfaceFactor + interfaceFilter)* interfaceFactor;
+			   //mxxMyy += wadjust * (-mxxMyy);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy);
+			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMzz) / (fabs(mxxMzz) * interfaceFactor + interfaceFilter) * interfaceFactor;
+			   //mxxMzz += wadjust * (-mxxMzz);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz);
+
+			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mfabb) / (fabs(mfabb) * interfaceFactor + interfaceFilter) * interfaceFactor;
+			   //mfabb += wadjust * (-mfabb);
+			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbab) / (fabs(mfbab) * interfaceFactor + interfaceFilter) * interfaceFactor;
+			   //mfbab += wadjust * (-mfbab);
+			   //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbba) / (fabs(mfbba) * interfaceFactor + interfaceFilter) * interfaceFactor;
+			   //mfbba += wadjust * (-mfbba);
+
 			   //applying phase field gradients second part:
 			   //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz);
-			   mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; // As in Hesam's code
+			   mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; // As in Hesam's code
 			   mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling;
 			   mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling;
 			   mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling;
@@ -763,7 +876,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   LBMReal mxyyMxzz = mfbca - mfbac;
 
 			   //relax
-			   wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
+			   wadjust = Oxyz + (1. - Oxyz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit);
 			   mfbbb += wadjust * (-mfbbb);
 			   wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit);
 			   mxxyPyzz += wadjust * (-mxxyPyzz);
@@ -787,19 +900,71 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2;
 
 			   //4.
-			   CUMacc += O4 * (-CUMacc);
-			   CUMcac += O4 * (-CUMcac);
-			   CUMcca += O4 * (-CUMcca);
+			   //CUMacc += O4 * (-CUMacc);
+			   //CUMcac += O4 * (-CUMcac);
+			   //CUMcca += O4 * (-CUMcca);
+
+			   //CUMbbc += O4 * (-CUMbbc);
+			   //CUMbcb += O4 * (-CUMbcb);
+			   //CUMcbb += O4 * (-CUMcbb);
+
+
+			   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);
 
-			   CUMbbc += O4 * (-CUMbbc);
-			   CUMbcb += O4 * (-CUMbcb);
-			   CUMcbb += O4 * (-CUMcbb);
+
+
+
+			   //CUMacc -= (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A ;
+			   //CUMcac -= (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A ;
+			   //CUMcca -= (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A ;
+			   //CUMbbc -= (one / collFactorM - c1o2) * Dxy * c1o3 * B ;
+			   //CUMbcb -= (one / collFactorM - c1o2) * Dxz * c1o3 * B ;
+			   //CUMcbb -= (one / collFactorM - c1o2) * Dyz * c1o3 * B ;
+
+			   //wadjust = O4 + (1. - O4) * fabs(CUMacc) / (fabs(CUMacc) + qudricLimit);
+			   //CUMacc += wadjust * (-CUMacc);
+			   //wadjust = O4 + (1. - O4) * fabs(CUMcac) / (fabs(CUMcac) + qudricLimit);
+			   //CUMcac += wadjust * (-CUMcac);
+			   //wadjust = O4 + (1. - O4) * fabs(CUMcca) / (fabs(CUMcca) + qudricLimit);
+			   //CUMcca += wadjust * (-CUMcca);
+			   //wadjust = O4 + (1. - O4) * fabs(CUMbbc) / (fabs(CUMbbc) + qudricLimit);
+			   //CUMbbc += wadjust * (-CUMbbc);
+			   //wadjust = O4 + (1. - O4) * fabs(CUMbcb) / (fabs(CUMbcb) + qudricLimit);
+			   //CUMbcb += wadjust * (-CUMbcb);
+			   //wadjust = O4 + (1. - O4) * fabs(CUMcbb) / (fabs(CUMcbb) + qudricLimit);
+			   //CUMcbb += wadjust * (-CUMcbb);
+
+
+
+
+
+
+			   //CUMacc += (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A;
+			   //CUMcac += (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A;
+			   //CUMcca += (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A;
+			   //CUMbbc += (one / collFactorM - c1o2) * Dxy * c1o3 * B;
+			   //CUMbcb += (one / collFactorM - c1o2) * Dxz * c1o3 * B;
+			   //CUMcbb += (one / collFactorM - c1o2) * Dyz * c1o3 * B;
 
 			   //5.
 			   CUMbcc += O5 * (-CUMbcc);
 			   CUMcbc += O5 * (-CUMcbc);
 			   CUMccb += O5 * (-CUMccb);
 
+
+			   //wadjust = O5 + (1. - O5) * fabs(CUMbcc) / (fabs(CUMbcc) + qudricLimit);
+			   //CUMbcc += wadjust * (-CUMbcc);
+			   //wadjust = O5 + (1. - O5) * fabs(CUMcbc) / (fabs(CUMcbc) + qudricLimit);
+			   //CUMbcc += wadjust * (-CUMcbc);
+			   //wadjust = O5 + (1. - O5) * fabs(CUMccb) / (fabs(CUMccb) + qudricLimit);
+			   //CUMbcc += wadjust * (-CUMccb);
+
+
 			   //6.
 			   CUMccc += O6 * (-CUMccc);
 
@@ -1058,57 +1223,93 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 			   //////////////////////////////////////////////////////////////////////////
 			   //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
+//#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
 			   //////////////////////////////////////////////////////////////////////////
 			   //write distribution
 			   //////////////////////////////////////////////////////////////////////////
-			   (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho;
-			   (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho;
-
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho;
-			   (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho;
-
-			   (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho;
+
+			   /////classical source term 8.4.2021
+
+			   mfcbb += 3.0 * (0.5 * forcingTerm[E]) / rho;    //-(3.0*p1 - rho)*WEIGTH[E  ];
+			   mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho;    //-(3.0*p1 - rho)*WEIGTH[N  ];
+			   mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho;    //-(3.0*p1 - rho)*WEIGTH[T  ];
+			   mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NE ];
+			   mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[NW ];
+			   mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TE ];
+			   mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TW ];
+			   mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TN ];
+			   mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[TS ];
+			   mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNE];
+			   mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TNW];
+			   mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSE];
+			   mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[TSW];
+			   mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho;    //-(3.0*p1 - rho)*WEIGTH[W  ];
+			   mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho;    //-(3.0*p1 - rho)*WEIGTH[S  ];
+			   mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho;    //-(3.0*p1 - rho)*WEIGTH[B  ];
+			   mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SW ];
+			   mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[SE ];
+			   mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BW ];
+			   mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BE ];
+			   mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BS ];
+			   mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho;   //-(3.0*p1 - rho)*WEIGTH[BN ];
+			   mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSW];
+			   mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BSE];
+			   mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNW];
+			   mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho;  //-(3.0*p1 - rho)*WEIGTH[BNE];
+			   mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]
+
+
+
+			   ////////////////////
+
+
+			   (*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;
 			   //////////////////////////////////////////////////////////////////////////
 
 			   ////!Incompressible Kernal
@@ -2248,88 +2449,95 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step)
 
 
 
-                        /////////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
-
-                        //h[E]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
-                        //h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
-                        //h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
-                        //h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
-                        //h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
-                        //h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
-                        //h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
-                        //h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
-                        //h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
-                        //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
-                        //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
-                        //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
-                        //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
-
-                        //h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
-                        //h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
-                        //h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
-                        //h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
-                        //h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
-                        //h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
-                        //h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
-                        //h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
-                        //h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
-                        //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
-                        //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
-                        //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
-                        //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
-
-                        //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
-
-                        //for (int dir = STARTF; dir < (ENDF + 1); dir++) {
-                        //    LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz;
-                        //    LBMReal velSq1  = velProd * velProd;
-                        //    LBMReal hEq; //, gEq;
-
-                        //    if (dir != REST) {
-                        //        LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
-                        //        LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
-                        //        hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) +                                 hSource * WEIGTH[dir];
-
-                        //        // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
-                        //        h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
-
-                        //    } else {
-                        //        hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2));
-                        //        h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
-                        //    }
-                        //}
-
-                        //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
-                        //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
-                        //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
-                        //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
-
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
-                        //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
-
-                        //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
-
-                        /////////////////////   END OF OLD BGK SOLVER ///////////////////////////////
+                        ///////////////////   PHASE-FIELD BGK SOLVER ///////////////////////////////
+//using namespace D3Q27System;
+
+      //                  h[E]   = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3);
+      //                  h[N]   = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3);
+      //                  h[T]   = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3);
+      //                  h[NE]  = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3);
+      //                  h[NW]  = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3);
+      //                  h[TE]  = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3);
+      //                  h[TW]  = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3);
+      //                  h[TN]  = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3);
+      //                  h[TS]  = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3);
+      //                  h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3);
+      //                  h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3);
+      //                  h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3);
+      //                  h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3);
+
+      //                  h[W]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3);
+      //                  h[S]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3);
+      //                  h[B]   = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p);
+      //                  h[SW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3);
+      //                  h[SE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3);
+      //                  h[BW]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p);
+      //                  h[BE]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p);
+      //                  h[BS]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p);
+      //                  h[BN]  = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p);
+      //                  h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p);
+      //                  h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p);
+      //                  h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p);
+      //                  h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p);
+
+      //                  h[REST] = (*this->zeroDistributionsH)(x1, x2, x3);
+						////vvx *= 3;
+						////vvy *= 3;
+						////vvz *= 3;
+						////vx2 = vvx * vvx;
+						////vy2 = vvy * vvy;
+						////vz2 = vvz * vvz;
+
+      //                  for (int dir = STARTF; dir < (ENDF + 1); dir++) {
+      //                      LBMReal velProd = DX1[dir] * vvx + DX2[dir] * vvy + DX3[dir] * vvz;
+      //                      LBMReal velSq1  = velProd * velProd;
+      //                      LBMReal hEq; //, gEq;
+
+      //                      if (dir != REST) {
+      //                          LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0;
+      //                          LBMReal hSource     = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; 
+      //                          hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (vx2 + vy2 + vz2)) +                                 hSource * WEIGTH[dir];
+
+      //                          // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5).
+      //                          h[dir] = h[dir] - (h[dir] - hEq) / (tauH); 
+
+      //                      } else {
+      //                          hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (vx2 + vy2 + vz2));
+      //                          h[REST] = h[REST] - (h[REST] - hEq) / (tauH); 
+      //                      }
+      //                  }
+
+      //                  (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3)     = h[D3Q27System::INV_E];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3)     = h[D3Q27System::INV_N];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3)     = h[D3Q27System::INV_T];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3)    = h[D3Q27System::INV_NE];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3)   = h[D3Q27System::INV_NW];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3)    = h[D3Q27System::INV_TE];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3)   = h[D3Q27System::INV_TW];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3)    = h[D3Q27System::INV_TN];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3)   = h[D3Q27System::INV_TS];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3)   = h[D3Q27System::INV_TNE];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3)  = h[D3Q27System::INV_TNW];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3)  = h[D3Q27System::INV_TSE];
+      //                  (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW];
+
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3)     = h[D3Q27System::INV_W];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3)     = h[D3Q27System::INV_S];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p)     = h[D3Q27System::INV_B];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3)   = h[D3Q27System::INV_SW];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3)    = h[D3Q27System::INV_SE];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p)   = h[D3Q27System::INV_BW];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p)    = h[D3Q27System::INV_BE];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p)   = h[D3Q27System::INV_BS];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p)    = h[D3Q27System::INV_BN];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p)  = h[D3Q27System::INV_BSE];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p)  = h[D3Q27System::INV_BNW];
+      //                  (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p)   = h[D3Q27System::INV_BNE];
+
+      //                  (*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST];
+
+                        ///////////////////   END OF OLD BGK SOLVER ///////////////////////////////
                     }
                 }
             }
diff --git a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h b/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h
index 2d79817cc0d85a65e3d20d9736f8bf8e55c1a6c6..8b284fc2f768472a4115c61cd567ce0b37b7f4e9 100644
--- a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h
+++ b/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h
@@ -164,6 +164,7 @@ struct DSArraysPresence {
     bool isAverageTripleArrayPresent;
     bool isShearStressValArrayPresent;
     bool isRelaxationFactorPresent;
+    bool isPhaseFieldPresent;
 };
 } // namespace MPIIODataStructures
 #endif
\ No newline at end of file