diff --git a/.clang-tidy b/.clang-tidy
index 2747454ca09d19d0af59207f587a0b3afe36b033..e7d5a5e58c66b679eb607560b1c4073abb0f6d97 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -18,6 +18,7 @@ modernize-*,
 -modernize-use-auto,
 -modernize-use-nullptr,
 -modernize-pass-by-value,
+-modernize-use-nodiscard,
 
 mpi-*,
 
diff --git a/.gitignore b/.gitignore
index d16238c4ac7d45440117af9bc7ac0479a90dae2d..ae19800aa7dd8a859144426e8280eb3718add848 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,11 +16,16 @@ __pycache__/
 .vscode-server/
 .sync/
 .idea/
+.ccache/
+.cache/
 
 # simulation results
 output/
 logs/
 
+# grid
+grid/
+
 # scripts
 scripts/
 
@@ -29,3 +34,6 @@ stl/
 
 # MacOS
 .DS_Store
+
+# Settings
+.gitconfig
\ No newline at end of file
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2c6c35332b372379891de0c1ecc14640b48cbca8..bab479082aa0927a86eb8224fdcd83031cf792f9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -102,11 +102,6 @@ msvc_16:
     - cmake .. --preset=all_msvc -DCMAKE_CUDA_ARCHITECTURES=61 -DBUILD_WARNINGS_AS_ERRORS=ON
     - MSBuild.exe VirtualFluids.sln /property:Configuration=$env:BUILD_CONFIGURATION /verbosity:minimal /maxcpucount:4
 
-  cache:
-    key: "$CI_JOB_NAME-$CI_COMMIT_REF_SLUG"
-    paths:
-      - $CI_PROJECT_DIR/$env:BUILD_FOLDER/
-
   artifacts:
     expire_in: 1 hrs
     paths:
diff --git a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
index 735c67f0ff8f5694154645a4fbfd0beea43f0921..900bc51870091e34b5f1ebae0980f783310d18b3 100644
--- a/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
+++ b/apps/gpu/LBM/ActuatorLine/ActuatorLine.cpp
@@ -47,6 +47,7 @@
 #include "VirtualFluids_GPU/PreCollisionInteractor/ActuatorLine.h"
 #include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h"
 #include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 #include "VirtualFluids_GPU/PreCollisionInteractor/VelocitySetter.h"
@@ -120,7 +121,7 @@ void multipleLevel(const std::string& configPath)
     config.load(configPath);
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////^
     SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
-
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     const real dt = dx * mach / (sqrt(3) * velocity);
@@ -172,6 +173,9 @@ void multipleLevel(const std::string& configPath)
     gridBuilder->setVelocityBoundaryCondition(SideType::MZ,  velocityLB,  0.0, 0.0);
     gridBuilder->setVelocityBoundaryCondition(SideType::PZ,  velocityLB,  0.0, 0.0);
     gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
+    
+    bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+    bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -206,7 +210,7 @@ void multipleLevel(const std::string& configPath)
 
     auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
 
-    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
 }
 
diff --git a/apps/gpu/LBM/Basel/main.cpp b/apps/gpu/LBM/Basel/main.cpp
index 949b986ab28619deb3b5a9cf51ba6cf642921b1b..6a0c9b2169115613376c73f8bf5b2ddf8d8fc94d 100644
--- a/apps/gpu/LBM/Basel/main.cpp
+++ b/apps/gpu/LBM/Basel/main.cpp
@@ -29,6 +29,7 @@
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
@@ -86,6 +87,7 @@ void multipleLevel(const std::string& configPath)
 	Communicator* comm = Communicator::getInstanz();
 
 	SPtr<Parameter> para = Parameter::make(configData, comm);
+	BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 	SPtr<CudaMemoryManager> cudaMemManager = CudaMemoryManager::make(para);
 	SPtr<GridProvider> gridGenerator;
 
@@ -138,12 +140,14 @@ void multipleLevel(const std::string& configPath)
 		gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
 
 		//no forcing
-		gridBuilder->setPressureBoundaryCondition(SideType::PY, 0.0);
-		gridBuilder->setPressureBoundaryCondition(SideType::MY, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::PY, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::MY, 0.0);
 
-		gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
-		gridBuilder->setPressureBoundaryCondition(SideType::MX, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::MX, 0.0);
 
+		bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+		bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
 		//////////////////////////////////////////////////////////////////////////
 		//Merged for Wind in X Direction
 		//gridBuilder->writeGridsToVtk(gridpath + "/grids/BaselUni/Basel_Grid");
diff --git a/apps/gpu/LBM/BaselMultiGPU/main.cpp b/apps/gpu/LBM/BaselMultiGPU/main.cpp
index 8134fffbacf337db3c8e8668146ae81c4ab2128d..3af40dd321199e692929dd4a5414a51680f3378c 100644
--- a/apps/gpu/LBM/BaselMultiGPU/main.cpp
+++ b/apps/gpu/LBM/BaselMultiGPU/main.cpp
@@ -29,6 +29,7 @@
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
@@ -83,6 +84,7 @@ void multipleLevel(const std::string& configPath)
 	Communicator* comm = Communicator::getInstanz();
 
     SPtr<Parameter> para = Parameter::make(configData, comm);
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 	SPtr<CudaMemoryManager> cudaMemManager = CudaMemoryManager::make(para);
 	SPtr<GridProvider> gridGenerator;
 
@@ -168,6 +170,8 @@ void multipleLevel(const std::string& configPath)
 
         gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
 
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+
 		if (generatePart == 0 || generatePart == 3) gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
 		if (generatePart == 1 || generatePart == 2)	gridBuilder->setPressureBoundaryCondition(SideType::MX, 0.0);
 		if (generatePart == 2 || generatePart == 3) gridBuilder->setPressureBoundaryCondition(SideType::PY, 0.0);
diff --git a/apps/gpu/LBM/BaselNU/main.cpp b/apps/gpu/LBM/BaselNU/main.cpp
index cdf61e80f597c8a55b13fe073419ca52b434d44a..7f9bfcfca3637701fd28c1ca381639ba4b2298ed 100644
--- a/apps/gpu/LBM/BaselNU/main.cpp
+++ b/apps/gpu/LBM/BaselNU/main.cpp
@@ -29,6 +29,7 @@
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
@@ -82,6 +83,7 @@ void multipleLevel(const std::string& configPath)
 	Communicator* comm = Communicator::getInstanz();
 
 	SPtr<Parameter> para = Parameter::make(configData, comm);
+	BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 	SPtr<CudaMemoryManager> cudaMemManager = CudaMemoryManager::make(para);
 	SPtr<GridProvider> gridGenerator;
 
@@ -141,11 +143,13 @@ void multipleLevel(const std::string& configPath)
 		gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
 
 		//no forcing
-		gridBuilder->setPressureBoundaryCondition(SideType::PY, 0.0);
-		gridBuilder->setPressureBoundaryCondition(SideType::MY, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::PY, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::MY, 0.0);
 
-		gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
-		gridBuilder->setPressureBoundaryCondition(SideType::MX, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
+		// gridBuilder->setPressureBoundaryCondition(SideType::MX, 0.0);
+
+		bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
 
 		//////////////////////////////////////////////////////////////////////////
 		//Merged for Wind in X Direction
diff --git a/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp b/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp
index 8987e4f934f9e1318d833145913141f103bc759e..2983cddc6ac2a3f6767f7b53427eff8fb1baefb1 100644
--- a/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp
+++ b/apps/gpu/LBM/BoundaryLayer/BoundaryLayer.cpp
@@ -51,6 +51,7 @@
 #include "VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h"
 #include "VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h"
 #include "VirtualFluids_GPU/PreCollisionInteractor/VelocitySetter.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 
@@ -87,6 +88,7 @@ void multipleLevel(const std::string& configPath)
     config.load(configPath);
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////^
     SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -221,13 +223,16 @@ void multipleLevel(const std::string& configPath)
     gridBuilder->setStressBoundaryCondition(SideType::MZ,
                                             0.0, 0.0, 1.0,              // wall normals
                                             samplingOffset, z0/dx);     // wall model settinng
-    // gridBuilder->setSlipBoundaryCondition(SideType::MZ,  0.0,  0.0, 0.0);
+    para->setHasWallModelMonitor(true);
+    bcFactory.setStressBoundaryCondition(BoundaryConditionFactory::StressBC::StressBounceBack);
 
     // para->setHasWallModelMonitor(true);
 
     
     // gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, 0.0);
     // gridBuilder->setVelocityBoundaryCondition(SideType::PZ, 0.0, 0.0, 0.0);
+    gridBuilder->setSlipBoundaryCondition(SideType::PZ,  0.0,  0.0, 0.0);
+    bcFactory.setSlipBoundaryCondition(BoundaryConditionFactory::SlipBC::SlipCompressible);
 
 
 
@@ -264,7 +269,7 @@ void multipleLevel(const std::string& configPath)
     auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
     auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
 
-    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
 }
 
diff --git a/apps/gpu/LBM/DrivenCavity/DrivenCavity.cpp b/apps/gpu/LBM/DrivenCavity/DrivenCavity.cpp
index a4e322ad6d6e383072f28ac34ca25799a73a2ff4..c02c3b41e633aa6ae63917c6e9e12c2e1a6f2235 100644
--- a/apps/gpu/LBM/DrivenCavity/DrivenCavity.cpp
+++ b/apps/gpu/LBM/DrivenCavity/DrivenCavity.cpp
@@ -1,6 +1,5 @@
 
 #define _USE_MATH_DEFINES
-#include <math.h>
 #include <string>
 #include <sstream>
 #include <iostream>
@@ -19,9 +18,9 @@
 
 #include "Core/VectorTypes.h"
 
-#include <basics/config/ConfigurationFile.h>
+#include "basics/config/ConfigurationFile.h"
 
-#include <logger/Logger.h>
+#include "logger/Logger.h"
 
 //////////////////////////////////////////////////////////////////////////
 
@@ -44,6 +43,7 @@
 #include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 
@@ -80,21 +80,22 @@
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 //LbmOrGks lbmOrGks = GKS;
-LbmOrGks lbmOrGks = LBM;
+const LbmOrGks lbmOrGks = LBM;
 
 const real L  = 1.0;
 
-const real Re = 500.0;// 1000.0;
+const real Re = 1000.0;
 
 const real velocity  = 1.0;
 
-const real dt = (real)1.0e-3; //0.5e-3;
+const real dt = (real)0.5e-3;
 
 const uint nx = 64;
 
-std::string path("output/");
+const std::string path("output/");
+const std::string gridPath("grid/");
 
-std::string simulationName("DrivenCavityChim");
+const std::string simulationName("DrivenCavityChim");
 
 const uint timeStepOut = 10000;
 const uint timeStepEnd = 250000;
@@ -120,13 +121,13 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-	real dx = L / real(nx);
+    real dx = L / real(nx);
 
-	//gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -0.5 * L,
-	//							0.5 * L,  0.5 * L,  0.5 * L, dx);
+    gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -0.5 * L,
+                                0.5 * L,  0.5 * L,  0.5 * L, dx);
 
-	gridBuilder->addCoarseGrid(-2.0 * dx, -0.5 * L, -0.5 * L,
-								2.0 * dx,  0.5 * L,  0.5 * L, dx);
+    // gridBuilder->addCoarseGrid(-2.0 * dx, -0.5 * L, -0.5 * L,
+    //                             2.0 * dx,  0.5 * L,  0.5 * L, dx);
 
     auto refBox = new Cuboid(-0.1 * L, -0.1 * L, -0.1 * L,
                               0.1 * L,  0.1 * L,  0.1 * L);
@@ -135,18 +136,18 @@ void multipleLevel(const std::string& configPath)
 
     gridBuilder->setNumberOfLayers(0, 0);
 
-	gridBuilder->setPeriodicBoundaryCondition(false, false, false);
+    gridBuilder->setPeriodicBoundaryCondition(false, false, false);
 
-	gridBuilder->buildGrids(lbmOrGks, false); // buildGrids() has to be called before setting the BCs!!!!
+    gridBuilder->buildGrids(lbmOrGks, false); // buildGrids() has to be called before setting the BCs!!!!
 
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     if( lbmOrGks == LBM )
     {
@@ -156,13 +157,14 @@ void multipleLevel(const std::string& configPath)
         config.load(configPath);
 
         SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+        BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
         const real velocityLB = velocity * dt / dx; // LB units
 
-	    const real vx = velocityLB / (real)sqrt(2.0); // LB units
-	    const real vy = velocityLB / (real)sqrt(2.0); // LB units
+        const real vx = velocityLB / (real)sqrt(2.0); // LB units
+        const real vy = velocityLB / (real)sqrt(2.0); // LB units
 
         const real viscosityLB = nx * velocityLB / Re; // LB units
 
@@ -171,14 +173,13 @@ void multipleLevel(const std::string& configPath)
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-		para->setDevices(std::vector<uint>{(uint)0});
+        para->setDevices(std::vector<uint>{(uint)0});
 
-        para->setOutputPath( path );
+        para->setOutputPath( path ); // optional, default is output/
+        para ->setGridPath( gridPath );  // optional, default is grid/
 
         para->setOutputPrefix( simulationName );
 
-        para->setFName(para->getOutputPath() + "/" + para->getOutputPrefix());
-
         para->setPrintFiles(true);
 
         para->setMaxLevel(2);
@@ -186,11 +187,11 @@ void multipleLevel(const std::string& configPath)
         para->setVelocity(velocityLB);
         para->setViscosity(viscosityLB);
 
-        para->setVelocityRatio(velocity/ velocityLB);
+        para->setVelocityRatio(velocity / velocityLB);
 
-		//para->setMainKernel("CumulantK17CompChim");
+        //para->setMainKernel("CumulantK17CompChim");
 
-		para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) {
+        para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) {
             rho = (real)0.0;
             vx  = (real)0.0; //(6 * velocityLB * coordZ * (L - coordZ) / (L * L));
             vy  = (real)0.0;
@@ -202,16 +203,19 @@ void multipleLevel(const std::string& configPath)
 
         /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-		//gridBuilder->setVelocityBoundaryCondition(SideType::PX, 0.0, 0.0, 0.0);
-		//gridBuilder->setVelocityBoundaryCondition(SideType::MX, 0.0, 0.0, 0.0);
-		//gridBuilder->setVelocityBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0);
-	    //gridBuilder->setVelocityBoundaryCondition(SideType::MY, 0.0, 0.0, 0.0);
-	    gridBuilder->setVelocityBoundaryCondition(SideType::PZ,  vx,  vx, 0.0);
-	    //gridBuilder->setVelocityBoundaryCondition(SideType::MZ, 0.0, 0.0, 0.0);
+        gridBuilder->setNoSlipBoundaryCondition(SideType::PX);
+        gridBuilder->setNoSlipBoundaryCondition(SideType::MX);
+        gridBuilder->setNoSlipBoundaryCondition(SideType::PY);
+        gridBuilder->setNoSlipBoundaryCondition(SideType::MY);
+        gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vx, vx, 0.0);
+        gridBuilder->setNoSlipBoundaryCondition(SideType::MZ);
+
+        bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipBounceBack);
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocitySimpleBounceBackCompressible);
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-        gridBuilder->writeGridsToVtk(path + "/grid/");
+        gridBuilder->writeGridsToVtk(para->getGridPath());
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -219,7 +223,7 @@ void multipleLevel(const std::string& configPath)
 
         auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
 
-        Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator);
+        Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
         sim.run();
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -232,8 +236,8 @@ void multipleLevel(const std::string& configPath)
 
      //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-	    //const real vx = velocity / sqrt(2.0);
-	    //const real vy = velocity / sqrt(2.0);
+        //const real vx = velocity / sqrt(2.0);
+        //const real vy = velocity / sqrt(2.0);
 
      //   parameters.K  = 2.0;
      //   parameters.Pr = 1.0;
diff --git a/apps/gpu/LBM/DrivenCavity/configDrivenCavity.txt b/apps/gpu/LBM/DrivenCavity/configDrivenCavity.txt
index 246e6f72841c23957e85bb5d69a449af8d178822..458346a67c7f001580494af1dc9262034613be68 100644
--- a/apps/gpu/LBM/DrivenCavity/configDrivenCavity.txt
+++ b/apps/gpu/LBM/DrivenCavity/configDrivenCavity.txt
@@ -7,16 +7,13 @@
 ##################################################
 #informations for Writing
 ##################################################
-#Path="E:/DrivenCavity/results"
-#Path="F:/Work/Computations/out/DrivenCavity/"
-Path = C:/out/
+#Path = "output/"
 #Prefix="DrivenCavity" 
 #WriteGrid=true
 ##################################################
 #informations for reading
 ##################################################
-#GridPath="E:/DrivenCavity/dummy"
-GridPath="C:"
+#GridPath="grid/"
 
 ##################################################
 #number of grid levels
diff --git a/apps/gpu/LBM/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp b/apps/gpu/LBM/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
index a46d09a9f7560546cd55c2d5780ac4f98ef66d0e..0376e376b365c8c8282cc3cd79a5c365b416193f 100644
--- a/apps/gpu/LBM/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
+++ b/apps/gpu/LBM/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp
@@ -1,9 +1,7 @@
-
 #define _USE_MATH_DEFINES
 #include <exception>
 #include <fstream>
 #include <iostream>
-#include <math.h>
 #include <memory>
 #include <sstream>
 #include <stdexcept>
@@ -49,6 +47,7 @@
 
 #include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
 #include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 
@@ -67,19 +66,19 @@
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 //  Tesla 03
-// std::string outPath("E:/temp/DrivenCavityMultiGPUResults/");
-// std::string gridPath = "D:/STLs/DrivenCavity";
-// std::string simulationName("DrivenCavityMultiGPU");
+// const std::string outPath("E:/temp/DrivenCavityMultiGPUResults/");
+// const std::string gridPath = "D:/STLs/DrivenCavity";
+// const std::string simulationName("DrivenCavityMultiGPU");
 
 // Phoenix
-// std::string outPath("/work/y0078217/Results/DrivenCavityMultiGPUResults/");
-// std::string gridPath = "/work/y0078217/Grids/GridDrivenCavityMultiGPU/";
-// std::string simulationName("DrivenCavityMultiGPU");
+// const std::string outPath("/work/y0078217/Results/DrivenCavityMultiGPUResults/");
+// const std::string gridPath = "/work/y0078217/Grids/GridDrivenCavityMultiGPU/";
+// const std::string simulationName("DrivenCavityMultiGPU");
 
 //  Aragorn
-std::string outPath("/workspaces/VirtualFluids_dev/output/DrivenCavity_Results/");
-std::string gridPath = "/workspaces/VirtualFluids_dev/output/DrivenCavity_Results/grid/";
-std::string simulationName("DrivenCavity");
+const std::string outPath("output/DrivenCavity_Results/");
+const std::string gridPath = "output/DrivenCavity_Results/grid/";
+const std::string simulationName("DrivenCavity");
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -102,6 +101,8 @@ void multipleLevel(const std::string &configPath)
     std::cout << configPath << std::endl;
     config.load(configPath);
     SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
+
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -535,6 +536,7 @@ void multipleLevel(const std::string &configPath)
 
             SimulationFileWriter::write(gridPath, gridBuilder, FILEFORMAT::BINARY);
         }
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
     }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -547,7 +549,7 @@ void multipleLevel(const std::string &configPath)
         gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager);
     }
 
-    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/LBM/DrivenCavityMultiGPU/configDrivenCavityMultiGPU.txt b/apps/gpu/LBM/DrivenCavityMultiGPU/configDrivenCavityMultiGPU.txt
index 97f5b5d8079e6b937863cca09e6076e0a753af23..f37aac7034140d6d288852f42583c8cce7b840e9 100644
--- a/apps/gpu/LBM/DrivenCavityMultiGPU/configDrivenCavityMultiGPU.txt
+++ b/apps/gpu/LBM/DrivenCavityMultiGPU/configDrivenCavityMultiGPU.txt
@@ -31,6 +31,6 @@ GridPath=/workspaces/VirtualFluids_dev/output/DrivenCavity_Results/grid/  # Arag
 ##################################################
 #simulation parameter
 ##################################################
-TimeEnd=1000
-TimeOut=100
+TimeEnd=100000
+TimeOut=10000
 #TimeStartOut=0
\ No newline at end of file
diff --git a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
index 550a33dd4f40dc9f60d8a963787a2d7e1dac9b7d..0bef3e75ff93e42f84477431bf78e7cbf7702b17 100644
--- a/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
+++ b/apps/gpu/LBM/MusselOyster/MusselOyster.cpp
@@ -45,8 +45,8 @@
 #include "VirtualFluids_GPU/LBM/Simulation.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
-
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 //////////////////////////////////////////////////////////////////////////
 
@@ -63,22 +63,22 @@
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 // Tesla 03
-// std::string outPath("E:/temp/MusselOysterResults/");
-// std::string gridPathParent = "E:/temp/GridMussel/";
-// std::string stlPath("C:/Users/Master/Documents/MasterAnna/STL/");
-// std::string simulationName("MusselOyster");
+// const std::string outPath("E:/temp/MusselOysterResults/");
+// const std::string gridPathParent = "E:/temp/GridMussel/";
+// const std::string stlPath("C:/Users/Master/Documents/MasterAnna/STL/");
+// const std::string simulationName("MusselOyster");
 
 // Aragorn
-// std::string outPath("/workspaces/VirtualFluids_dev/output/MusselOysterResults/");
-// std::string gridPathParent = "/workspaces/VirtualFluids_dev/output/MusselOysterResults/grid/";
-// std::string stlPath("/workspaces/VirtualFluids_dev/stl/MusselOyster/");
-// std::string simulationName("MusselOyster");
+const std::string outPath("./output/MusselOysterResults/");
+const std::string gridPathParent = "./output/MusselOysterResults/grid/";
+const std::string stlPath("./stl/MusselOyster/");
+const std::string simulationName("MusselOyster");
 
 // Phoenix
-std::string outPath("/work/y0078217/Results/MusselOysterResults/");
-std::string gridPathParent = "/work/y0078217/Grids/GridMusselOyster/";
-std::string stlPath("/home/y0078217/STL/MusselOyster/");
-std::string simulationName("MusselOyster");
+// const std::string outPath("/work/y0078217/Results/MusselOysterResults/");
+// const std::string gridPathParent = "/work/y0078217/Grids/GridMusselOyster/";
+// const std::string stlPath("/home/y0078217/STL/MusselOyster/");
+// const std::string simulationName("MusselOyster");
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -101,6 +101,7 @@ void multipleLevel(const std::string &configPath)
     std::cout << configPath << std::endl;
     config.load(configPath);
     SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -130,8 +131,8 @@ void multipleLevel(const std::string &configPath)
         gridPathParent +
         bivalveType); // only for GridGenerator, for GridReader the gridPath needs to be set in the config file
 
-    // real dxGrid = (real)2.0; // 2.0
-    real dxGrid = (real)1.0; // 1.0
+    real dxGrid = (real)2.0; // 2.0
+    // real dxGrid = (real)1.0; // 1.0
     if (para->getNumprocs() == 8)
         dxGrid = 0.5;
     real vxLB            = (real)0.051; // LB units
@@ -565,6 +566,11 @@ void multipleLevel(const std::string &configPath)
 
             SimulationFileWriter::write(gridPath, gridBuilder, FILEFORMAT::BINARY);
         }
+
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+        bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+        bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+
     }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
@@ -577,7 +583,7 @@ void multipleLevel(const std::string &configPath)
         gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager);
     }
 
-    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/apps/gpu/LBM/MusselOyster/configMusselOyster.txt b/apps/gpu/LBM/MusselOyster/configMusselOyster.txt
index 0978e65f0500371a54af99e319ae6c53572d93c0..3d64ef74215db49adfdee6ba569fccb462b98d73 100644
--- a/apps/gpu/LBM/MusselOyster/configMusselOyster.txt
+++ b/apps/gpu/LBM/MusselOyster/configMusselOyster.txt
@@ -21,14 +21,14 @@ NumberOfDevices=2
 #informations for Writing
 ##################################################
 #Path=/work/y0078217/Results/MusselOysterResults/
-Path=/workspaces/VirtualFluids_dev/output/MusselOysterResults/
+Path=./output/MusselOysterResults/
 #Prefix="MusselOyster" 
 #WriteGrid=true
 ##################################################
 #informations for reading
 ##################################################
 #GridPath=E:/work/y0078217/Grids/GridMusselOyster/
-GridPath=/workspaces/VirtualFluids_dev/output/MusselOysterResults/grid/
+GridPath=./output/MusselOysterResults/grid/
 #GridPath="C:"
 
 ##################################################
@@ -45,6 +45,6 @@ GridPath=/workspaces/VirtualFluids_dev/output/MusselOysterResults/grid/
 ##################################################
 #simulation parameter
 ##################################################
-TimeEnd=10000
+TimeEnd=200000
 TimeOut=10000 
 #TimeStartOut=0
\ No newline at end of file
diff --git a/apps/gpu/LBM/SphereGPU/CMakeLists.txt b/apps/gpu/LBM/SphereGPU/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6a8f3cb1b86b149852abf4365e15fd4df9e8c0cf
--- /dev/null
+++ b/apps/gpu/LBM/SphereGPU/CMakeLists.txt
@@ -0,0 +1,7 @@
+PROJECT(SphereGPU LANGUAGES CUDA CXX)
+
+vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator MPI::MPI_CXX FILES Sphere.cpp)
+
+set_source_files_properties(Sphere.cpp PROPERTIES LANGUAGE CUDA)
+
+set_target_properties(SphereGPU PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
diff --git a/apps/gpu/LBM/SphereGPU/Sphere.cpp b/apps/gpu/LBM/SphereGPU/Sphere.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..f0d629afecca44f917d002543af7689e0889f42b
--- /dev/null
+++ b/apps/gpu/LBM/SphereGPU/Sphere.cpp
@@ -0,0 +1,217 @@
+
+#define _USE_MATH_DEFINES
+#include <exception>
+#include <filesystem>
+#include <fstream>
+#include <iostream>
+#include <math.h>
+#include <memory>
+#include <sstream>
+#include <stdexcept>
+#include <string>
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "Core/DataTypes.h"
+#include "PointerDefinitions.h"
+
+#include "Core/StringUtilities/StringUtil.h"
+
+#include "Core/VectorTypes.h"
+
+#include <basics/config/ConfigurationFile.h>
+
+#include <logger/Logger.h>
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "GridGenerator/grid/BoundaryConditions/Side.h"
+#include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h"
+#include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h"
+#include "GridGenerator/grid/GridFactory.h"
+
+#include "GridGenerator/io/GridVTKWriter/GridVTKWriter.h"
+#include "GridGenerator/io/STLReaderWriter/STLReader.h"
+#include "GridGenerator/io/STLReaderWriter/STLWriter.h"
+#include "GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h"
+
+#include "GridGenerator/geometries/Sphere/Sphere.h"
+
+//////////////////////////////////////////////////////////////////////////
+
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
+#include "VirtualFluids_GPU/Communication/Communicator.h"
+#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h"
+#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
+#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h"
+#include "VirtualFluids_GPU/LBM/Simulation.h"
+#include "VirtualFluids_GPU/Output/FileWriter.h"
+#include "VirtualFluids_GPU/Parameter/Parameter.h"
+
+#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+//
+//          U s e r    s e t t i n g s
+//
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+const real L = 1.0;
+const real dSphere = 0.2;
+const real Re = 1000.0; // related to the sphere's diameter
+const real velocity = 1.0;
+const real dt = (real)0.5e-3;
+const uint nx = 64;
+
+const uint timeStepOut = 10000;
+const uint timeStepEnd = 100000;
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+void multipleLevel(const std::string &configPath)
+{
+    logging::Logger::addStream(&std::cout);
+    logging::Logger::setDebugLevel(logging::Logger::Level::INFO_LOW);
+    logging::Logger::timeStamp(logging::Logger::ENABLE);
+    logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE);
+
+    vf::gpu::Communicator &communicator = vf::gpu::Communicator::getInstance();
+
+    auto gridFactory = GridFactory::make();
+    gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_IN_OBJECT);
+    auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    real dx = L / real(nx);
+
+    gridBuilder->addCoarseGrid(-1.0 * L, -0.5 * L, -0.5 * L, 
+                                6.0 * L,  0.5 * L,  0.5 * L, dx);
+
+    Object *sphere = new Sphere(0.0, 0.0, 0.0, dSphere / 2.0);
+    gridBuilder->addGeometry(sphere);
+
+    gridBuilder->setPeriodicBoundaryCondition(false, false, false);
+
+    gridBuilder->buildGrids(LBM, false); // buildGrids() has to be called before setting the BCs!!!!
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    vf::basics::ConfigurationFile config;
+    config.load(configPath);
+
+    SPtr<Parameter> para =
+        std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    const real velocityLB = velocity * dt / dx; // LB units
+
+    const real viscosityLB = (dSphere / dx) * velocityLB / Re; // LB units
+
+    VF_LOG_INFO("velocity  [dx/dt] = {}", velocityLB);
+    VF_LOG_INFO("viscosity [dx^2/dt] = {}", viscosityLB);
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    para->setDevices(std::vector<uint>{ (uint)0 });
+
+    para->setFName(para->getOutputPath() + "/" + para->getOutputPrefix());
+
+    para->setPrintFiles(true);
+
+    para->setMaxLevel(2);
+
+    para->setVelocity(velocityLB);
+    para->setViscosity(viscosityLB);
+
+    para->setVelocityRatio(velocity / velocityLB);
+    para->setDensityRatio((real)1.0);
+
+    // para->setMainKernel("CumulantK17CompChim");
+
+    // para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) {
+    //     rho = (real)0.0;
+    //     vx =  (real)velocityLB;
+    //     vy =  (real)0.0;
+    //     vz =  (real)0.0;
+    // });
+
+    para->setTOut(timeStepOut);
+    para->setTEnd(timeStepEnd);
+
+    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    gridBuilder->setVelocityBoundaryCondition(SideType::MX, velocityLB, 0.0, 0.0);
+
+    gridBuilder->setSlipBoundaryCondition(SideType::PY, 0.0, 0.0, 0.0);
+    gridBuilder->setSlipBoundaryCondition(SideType::MY, 0.0, 0.0, 0.0);
+    gridBuilder->setSlipBoundaryCondition(SideType::PZ, 0.0, 0.0, 0.0);
+    gridBuilder->setSlipBoundaryCondition(SideType::MZ, 0.0, 0.0, 0.0);
+
+    // gridBuilder->setNoSlipBoundaryCondition(SideType::GEOMETRY); // not working yet, use veloBC
+    gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, velocityLB * 2.0, 0.0);
+    gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); // set pressure boundary condition last
+
+    bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+    bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+    bcFactory.setSlipBoundaryCondition(BoundaryConditionFactory::SlipBC::SlipCompressible);
+    bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
+    bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+    // bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    // gridBuilder->writeGridsToVtk("grid/");
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+    auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
+
+    auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
+
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
+    sim.run();
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+}
+
+int main(int argc, char *argv[])
+{
+    try {
+        vf::logging::Logger::initalizeLogger();
+
+        // assuming that the config files is stored parallel to this file.
+        std::filesystem::path filePath = __FILE__;
+        filePath.replace_filename("config.txt");
+
+        multipleLevel(filePath.string());
+    } catch (const spdlog::spdlog_ex &ex) {
+        std::cout << "Log initialization failed: " << ex.what() << std::endl;
+    } catch (const std::bad_alloc &e) {
+        VF_LOG_CRITICAL("Bad Alloc: {}", e.what());
+    } catch (const std::exception &e) {
+        VF_LOG_CRITICAL("exception: {}", e.what());
+    } catch (...) {
+        VF_LOG_CRITICAL("Unknown exception!");
+    }
+
+    return 0;
+}
diff --git a/apps/gpu/LBM/SphereGPU/config.txt b/apps/gpu/LBM/SphereGPU/config.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7d8b3831490ff828a3d5eaaa047aefeadcd6269e
--- /dev/null
+++ b/apps/gpu/LBM/SphereGPU/config.txt
@@ -0,0 +1,34 @@
+##################################################
+#GPU Mapping
+##################################################
+#Devices="0 1 2 3"
+#NumberOfDevices=4
+
+##################################################
+#informations for Writing
+##################################################
+Path=output/Sphere/
+Prefix=Sphere
+#WriteGrid=true
+##################################################
+#informations for reading
+##################################################
+GridPath="grid/"
+
+##################################################
+#number of grid levels
+##################################################
+#NOGL=1
+
+##################################################
+#LBM Version
+##################################################
+#D3Qxx=27
+#MainKernelName=CumulantAA2016CompSP27
+
+##################################################
+#simulation parameter
+##################################################
+#TimeEnd=100000
+#TimeOut=1000 
+#TimeStartOut=0
\ No newline at end of file
diff --git a/apps/gpu/LBM/SphereScaling/SphereScaling.cpp b/apps/gpu/LBM/SphereScaling/SphereScaling.cpp
index 6362e52eef9a2c80c7655133f654fe3f726be5ce..e9058e455e9d41173e3c4d500a456cb4f71d6502 100644
--- a/apps/gpu/LBM/SphereScaling/SphereScaling.cpp
+++ b/apps/gpu/LBM/SphereScaling/SphereScaling.cpp
@@ -51,6 +51,7 @@
 
 #include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
 #include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 
@@ -68,17 +69,17 @@
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-//  Tesla 03
-//  std::string outPath("E:/temp/SphereScalingResults/");
-//  std::string gridPathParent = "E:/temp/GridSphereScaling/";
-//  std::string simulationName("SphereScaling");
-// std::string stlPath("C:/Users/Master/Documents/MasterAnna/STL/Sphere/");
-
 // Phoenix
-std::string outPath("/work/y0078217/Results/SphereScalingResults/");
-std::string gridPathParent = "/work/y0078217/Grids/GridSphereScaling/";
-std::string simulationName("SphereScaling");
-std::string stlPath("/home/y0078217/STL/Sphere/");
+// const std::string outPath("/work/y0078217/Results/SphereScalingResults/");
+// const std::string gridPathParent = "/work/y0078217/Grids/GridSphereScaling/";
+// const std::string simulationName("SphereScaling");
+// const std::string stlPath("/home/y0078217/STL/Sphere/");
+
+// Relative Paths
+const std::string outPath("./output/SphereScalingResults/");
+const std::string gridPathParent = "./output/grids/SphereScalingResults/";
+const std::string simulationName("SphereScaling");
+const std::string stlPath("./stl/SphereScaling/");
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -101,6 +102,7 @@ void multipleLevel(const std::string &configPath)
     std::cout << configPath << std::endl;
     config.load(configPath);
     SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -125,10 +127,9 @@ void multipleLevel(const std::string &configPath)
     if (scalingType != "weak" && scalingType != "strong")
         std::cerr << "unknown scaling type" << std::endl;
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    std::string gridPath(
-        gridPathParent); // only for GridGenerator, for GridReader the gridPath needs to be set in the config file
+    std::string gridPath(gridPathParent); // only for GridGenerator, for GridReader the gridPath needs to be set in the config file
 
-    real dxGrid      = (real)0.2;
+    real dxGrid      = (real)0.4;
     real vxLB        = (real)0.0005; // LB units
     real viscosityLB = 0.001;        //(vxLB * dxGrid) / Re;
 
@@ -174,16 +175,6 @@ void multipleLevel(const std::string &configPath)
     para->setMainKernel("CumulantK17CompChimStream");
     *logging::out << logging::Logger::INFO_HIGH << "Kernel: " << para->getMainKernel() << "\n";
 
-    // if (para->getNumprocs() == 4) {
-    //     para->setDevices(std::vector<uint>{ 0u, 1u, 2u, 3u });
-    //     para->setMaxDev(4);
-    // } else if (para->getNumprocs() == 2) {
-    //     para->setDevices(std::vector<uint>{ 2u, 3u });
-    //     para->setMaxDev(2);
-    // } else
-    //     para->setDevices(std::vector<uint>{ 0u });
-    //     para->setMaxDev(1);
-
     //////////////////////////////////////////////////////////////////////////
 
     if (useGridGenerator) {
@@ -668,10 +659,14 @@ void multipleLevel(const std::string &configPath)
 
             SimulationFileWriter::write(gridPath, gridBuilder, FILEFORMAT::BINARY);
         }
+
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+        bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
+
     }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-    SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
+    auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
 
     SPtr<GridProvider> gridGenerator;
     if (useGridGenerator)
@@ -680,15 +675,8 @@ void multipleLevel(const std::string &configPath)
         gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager);
     }
 
-    Simulation sim(communicator);
-    SPtr<FileWriter> fileWriter                      = SPtr<FileWriter>(new FileWriter());
-    SPtr<KernelFactoryImp> kernelFactory             = KernelFactoryImp::getInstance();
-    SPtr<PreProcessorFactoryImp> preProcessorFactory = PreProcessorFactoryImp::getInstance();
-    sim.setFactories(kernelFactory, preProcessorFactory);
-    sim.init(para, gridGenerator, fileWriter, cudaMemoryManager);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
-    sim.free();
-
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 }
 
diff --git a/apps/gpu/LBM/SphereScaling/config.txt b/apps/gpu/LBM/SphereScaling/config.txt
index 44c5fedb297cc62f8b1b5d26c075bd5172cac081..b18bd77b5f79f65b80554da3370881b02efacfeb 100644
--- a/apps/gpu/LBM/SphereScaling/config.txt
+++ b/apps/gpu/LBM/SphereScaling/config.txt
@@ -17,15 +17,13 @@
 ##################################################
 #informations for Writing
 ##################################################
-#Path="E:/temp/SphereScalingResults/"
-Path=/work/y0078217/Results/SphereScalingResults/
+Path=./output/SphereScalingResults/
 #Prefix="SphereScaling" 
 #WriteGrid=true
 ##################################################
 #informations for reading
 ##################################################
-GridPath=/work/y0078217/Grids/GridSphereScaling/
-#GridPath=E:/temp/GridSphereScaling/
+GridPath=/output/grids/SphereScalingResults/
 
 ##################################################
 #number of grid levels
@@ -41,6 +39,12 @@ GridPath=/work/y0078217/Grids/GridSphereScaling/
 ##################################################
 #simulation parameter
 ##################################################
-#TimeEnd=10
-#TimeOut=10 
-#TimeStartOut=0
\ No newline at end of file
+TimeEnd=100000
+TimeOut=10000
+TimeStartOut=0
+
+##################################################
+# CUDA Streams and optimized communication (only used for multiple GPUs)
+##################################################
+useStreams = false
+useReducedCommunicationInInterpolation = false
\ No newline at end of file
diff --git a/apps/gpu/LBM/TGV_3D/CMakeLists.txt b/apps/gpu/LBM/TGV_3D/CMakeLists.txt
index 82e62a2e35dc7be39b52d164baa6c1fc0f081daa..6a06a92891ac8b7c9714f0a6c98dd918dc08f682 100644
--- a/apps/gpu/LBM/TGV_3D/CMakeLists.txt
+++ b/apps/gpu/LBM/TGV_3D/CMakeLists.txt
@@ -1,7 +1,7 @@
-PROJECT(TGV_3D)
+PROJECT(TGV_3D LANGUAGES CUDA CXX)
 
 vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D.cpp)
 
 set_source_files_properties(TGV_3D.cpp PROPERTIES LANGUAGE CUDA)
 
-linkCUDA()
+set_target_properties(TGV_3D PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
\ No newline at end of file
diff --git a/apps/gpu/LBM/TGV_3D/TGV_3D.cpp b/apps/gpu/LBM/TGV_3D/TGV_3D.cpp
index db51215de1e4b5c0060171191ef68a0d3817b88d..34793f04d901ac9a412c8085f169e9e79c61c3e4 100644
--- a/apps/gpu/LBM/TGV_3D/TGV_3D.cpp
+++ b/apps/gpu/LBM/TGV_3D/TGV_3D.cpp
@@ -17,10 +17,9 @@
 
 //#include "metis.h"
 
-#include "Core/LbmOrGks.h"
-#include "Core/Input/Input.h"
-#include "Core/StringUtilities/StringUtil.h"
-#include "Core/Input/ConfigFileReader/ConfigFileReader.h"
+#include "basics/Core/LbmOrGks.h"
+#include "basics/Core/StringUtilities/StringUtil.h"
+#include <basics/config/ConfigurationFile.h>
 
 #include "VirtualFluids_GPU/LBM/Simulation.h"
 #include "VirtualFluids_GPU/Communication/Communicator.h"
@@ -32,9 +31,9 @@
 
 #include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
 #include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h"
 
 #include "global.h"
 
@@ -112,22 +111,21 @@ void multipleLevel(const std::string& configPath)
     logging::Logger::timeStamp(logging::Logger::ENABLE);
     logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE);
 
+    vf::gpu::Communicator& communicator = vf::gpu::Communicator::getInstance();
+
     //UbLog::reportingLevel() = UbLog::logLevelFromString("DEBUG5");
 
     auto gridFactory = GridFactory::make();
-    gridFactory->setGridStrategy(Device::CPU);
     //gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::RAYCASTING);
     gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_IN_OBJECT);
     //gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_UNDER_TRIANGLE);
 
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
     
-	SPtr<ConfigFileReader> configReader = ConfigFileReader::getNewInstance();
-	SPtr<ConfigData> configData = configReader->readConfigFile(configPath);
-	Communicator* comm = Communicator::getInstanz();
-    SPtr<Parameter> para = Parameter::make(configData, comm);
-
-    std::shared_ptr<KernelMapper> kernelMapper = KernelMapper::getInstance();
+    vf::basics::ConfigurationFile config;
+    config.load(configPath);
+    SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -238,7 +236,7 @@ void multipleLevel(const std::string& configPath)
 
     } );
 
-    para->setMainKernel(kernelMapper->getEnum( kernel ));
+    para->setMainKernel( kernel );
 
     if( !useLimiter )
         para->setQuadricLimiters( 1000000.0, 1000000.0, 1000000.0 );
@@ -252,22 +250,18 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
-    SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
+    auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
     SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
     //SPtr<GridProvider> gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager);
 
-    Simulation sim;
     SPtr<FileWriter> fileWriter = SPtr<FileWriter>(new FileWriter());
-    SPtr<KernelFactoryImp> kernelFactory = KernelFactoryImp::getInstance();
-    SPtr<PreProcessorFactoryImp> preProcessorFactory = PreProcessorFactoryImp::getInstance();
-    sim.setFactories(kernelFactory, preProcessorFactory);
-    sim.init(para, gridGenerator, fileWriter, cudaMemoryManager);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
+    sim.run();
     
     sim.addKineticEnergyAnalyzer( 10 );
     sim.addEnstrophyAnalyzer( 10 );
 
     sim.run();
-    sim.free();
 }
 
 
@@ -317,17 +311,17 @@ int main( int argc, char* argv[])
 
             //////////////////////////////////////////////////////////////////////////
 		}
-        catch (const std::exception& e)
+        catch (const std::bad_alloc& e)
         {
                 
-            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
+            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
             //std::cout << e.what() << std::flush;
             //MPI_Abort(MPI_COMM_WORLD, -1);
         }
-        catch (const std::bad_alloc e)
+        catch (const std::exception& e)
         {
                 
-            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
+            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
             //std::cout << e.what() << std::flush;
             //MPI_Abort(MPI_COMM_WORLD, -1);
         }
diff --git a/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt b/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt
index ef91ada689729ae3b74d7e0ef9536ac7aed2bb9a..cc25432a3151ce0805242f720d58794e8bc7feed 100644
--- a/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt
+++ b/apps/gpu/LBM/TGV_3D_MultiGPU/CMakeLists.txt
@@ -1,7 +1,7 @@
-PROJECT(TGV_3D_MultiGPU)
+PROJECT(TGV_3D_MultiGPU LANGUAGES CUDA CXX)
 
 vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D_MultiGPU.cpp)
 
 set_source_files_properties(TGV_3D_MultiGPU.cpp PROPERTIES LANGUAGE CUDA)
 
-linkCUDA()
+set_target_properties(TGV_3D_MultiGPU PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
diff --git a/apps/gpu/LBM/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp b/apps/gpu/LBM/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
index 8f1c208124459186c92908c04a00dbabb059f03f..3c2362c1c997ab7eb226d7aa9c51b40b1e7e5605 100644
--- a/apps/gpu/LBM/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
+++ b/apps/gpu/LBM/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp
@@ -20,9 +20,8 @@
 //#include "metis.h"
 
 #include "Core/LbmOrGks.h"
-#include "Core/Input/Input.h"
 #include "Core/StringUtilities/StringUtil.h"
-#include "Core/Input/ConfigFileReader/ConfigFileReader.h"
+#include "basics/config/ConfigurationFile.h"
 
 #include "VirtualFluids_GPU/LBM/Simulation.h"
 #include "VirtualFluids_GPU/Communication/Communicator.h"
@@ -34,9 +33,9 @@
 
 #include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
 #include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
-#include "VirtualFluids_GPU/Kernel/Utilities/Mapper/KernelMapper/KernelMapper.h"
 
 #include "global.h"
 
@@ -138,22 +137,21 @@ void multipleLevel(const std::string& configPath)
     logging::Logger::timeStamp(logging::Logger::ENABLE);
     logging::Logger::enablePrintedRankNumbers(logging::Logger::ENABLE);
 
+    vf::gpu::Communicator& communicator = vf::gpu::Communicator::getInstance();
+
     //UbLog::reportingLevel() = UbLog::logLevelFromString("DEBUG5");
 
     auto gridFactory = GridFactory::make();
-    gridFactory->setGridStrategy(Device::CPU);
     //gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::RAYCASTING);
     gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_IN_OBJECT);
     //gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_UNDER_TRIANGLE);
 
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
     
-	SPtr<ConfigFileReader> configReader = ConfigFileReader::getNewInstance();
-	SPtr<ConfigData> configData = configReader->readConfigFile(configPath);
-	Communicator* comm = Communicator::getInstanz();
-    SPtr<Parameter> para = Parameter::make(configData, comm);
-
-    std::shared_ptr<KernelMapper> kernelMapper = KernelMapper::getInstance();
+    vf::basics::ConfigurationFile config;
+    config.load(configPath);
+    SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
     *logging::out << logging::Logger::INFO_HIGH << "SideLength = " << sideLengthX << " " << sideLengthY << " " << sideLengthZ << "\n";
     *logging::out << logging::Logger::INFO_HIGH << "rank       = " << rankX << " " << rankY << " " << rankZ << "\n";
@@ -228,9 +226,9 @@ void multipleLevel(const std::string& configPath)
         if( sideLengthY > 1 && rankMY != rankPY ) gridBuilder->setCommunicationProcess ( CommunicationDirections::PY, rankPY);
         if( sideLengthZ > 1 && rankMZ != rankPZ ) gridBuilder->setCommunicationProcess ( CommunicationDirections::PZ, rankPZ);
 
-        if( rankMX == rankPX ) gridBuilder->getGrid(0)->repairCommunicationInices(CommunicationDirections::MX);
-        if( rankMY == rankPY ) gridBuilder->getGrid(0)->repairCommunicationInices(CommunicationDirections::MY);
-        if( rankMZ == rankPZ ) gridBuilder->getGrid(0)->repairCommunicationInices(CommunicationDirections::MZ);
+        if( rankMX == rankPX ) gridBuilder->getGrid(0)->repairCommunicationIndices(CommunicationDirections::MX);
+        if( rankMY == rankPY ) gridBuilder->getGrid(0)->repairCommunicationIndices(CommunicationDirections::MY);
+        if( rankMZ == rankPZ ) gridBuilder->getGrid(0)->repairCommunicationIndices(CommunicationDirections::MZ);
 
         *logging::out << logging::Logger::INFO_HIGH << "neighborRanks = " << rankPX << " " << rankMX << " " << rankPY << " " << rankMY << " " << rankPZ << " " << rankMZ << "\n";
     }
@@ -294,7 +292,7 @@ void multipleLevel(const std::string& configPath)
 
     } );
 
-    para->setMainKernel(kernelMapper->getEnum( kernel ));
+    para->setMainKernel(kernel);
 
     if( !useLimiter )
         para->setQuadricLimiters( 1000000.0, 1000000.0, 1000000.0 );
@@ -313,22 +311,18 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     
-    SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
+    auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
     SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
     //SPtr<GridProvider> gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager);
 
-    Simulation sim;
     SPtr<FileWriter> fileWriter = SPtr<FileWriter>(new FileWriter());
-    SPtr<KernelFactoryImp> kernelFactory = KernelFactoryImp::getInstance();
-    SPtr<PreProcessorFactoryImp> preProcessorFactory = PreProcessorFactoryImp::getInstance();
-    sim.setFactories(kernelFactory, preProcessorFactory);
-    sim.init(para, gridGenerator, fileWriter, cudaMemoryManager);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
+    sim.run();
     
     sim.addKineticEnergyAnalyzer( 10 );
     sim.addEnstrophyAnalyzer( 10 );
 
     sim.run();
-    sim.free();
 
     logFile.close();
 }
@@ -411,17 +405,17 @@ int main( int argc, char* argv[])
 
             //////////////////////////////////////////////////////////////////////////
 		}
-        catch (const std::exception& e)
+        catch (const std::bad_alloc& e)
         {
                 
-            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
+            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
             //std::cout << e.what() << std::flush;
             //MPI_Abort(MPI_COMM_WORLD, -1);
         }
-        catch (const std::bad_alloc e)
+        catch (const std::exception& e)
         {
                 
-            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
+            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
             //std::cout << e.what() << std::flush;
             //MPI_Abort(MPI_COMM_WORLD, -1);
         }
diff --git a/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp b/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp
index 48b4ca3372a876433a9412601d972f796da86728..72577799763e607d1cc5bea0d48e807594b9a5f8 100644
--- a/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp
+++ b/apps/gpu/LBM/WTG_RUB/WTG_RUB.cpp
@@ -49,6 +49,7 @@
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include <logger/Logger.h>
 
@@ -200,6 +201,7 @@ void multipleLevel(const std::string& configPath)
     config.load(configPath);
 
     SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     const real velocityLB = (real)0.0844; // LB units
@@ -251,6 +253,10 @@ void multipleLevel(const std::string& configPath)
 
     gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
 
+    bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+    bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+    bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     readVelocityProfile();
@@ -330,7 +336,7 @@ void multipleLevel(const std::string& configPath)
 
     auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
 
-    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator);
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
 }
 
diff --git a/apps/gpu/LBM/gridGeneratorTest/gridGenerator.cpp b/apps/gpu/LBM/gridGeneratorTest/gridGenerator.cpp
index aba4752df9796c422302fdd4c37deb3c01dcb0c3..ecb43f56c79c25fc3aed6f404d717b8181fb0de1 100644
--- a/apps/gpu/LBM/gridGeneratorTest/gridGenerator.cpp
+++ b/apps/gpu/LBM/gridGeneratorTest/gridGenerator.cpp
@@ -15,9 +15,8 @@
 #include <math.h>
 
 #include "Core/LbmOrGks.h"
-#include "Core/Input/Input.h"
 #include "Core/StringUtilities/StringUtil.h"
-#include "Core/Input/ConfigFileReader/ConfigFileReader.h"
+#include "basics/config/ConfigurationFile.h"
 
 #include "VirtualFluids_GPU/LBM/Simulation.h"
 #include "VirtualFluids_GPU/Communication/Communicator.h"
@@ -29,6 +28,7 @@
 
 #include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h"
 #include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
 
@@ -71,18 +71,17 @@ void multipleLevel(const std::string& configPath)
     //UbLog::reportingLevel() = UbLog::logLevelFromString("DEBUG5");
 
     auto gridFactory = GridFactory::make();
-    gridFactory->setGridStrategy(Device::CPU);
     //gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::RAYCASTING);
     gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_IN_OBJECT);
     //gridFactory->setTriangularMeshDiscretizationMethod(TriangularMeshDiscretizationMethod::POINT_UNDER_TRIANGLE);
 
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
     
-	vf::gpu::Communicator *comm         = vf::gpu::Communicator::getInstanz();
-	SPtr<ConfigFileReader> configReader = ConfigFileReader::getNewInstance();
-    SPtr<ConfigData> configData         = configReader->readConfigFile(configPath.c_str());
-
-    SPtr<Parameter> para = Parameter::make(configData, comm);
+    vf::gpu::Communicator& communicator = vf::gpu::Communicator::getInstance();
+    vf::basics::ConfigurationFile config;
+    config.load(configPath);
+    SPtr<Parameter> para = std::make_shared<Parameter>(config, communicator.getNummberOfProcess(), communicator.getPID());
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
 
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -111,7 +110,7 @@ void multipleLevel(const std::string& configPath)
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		{
 			real dx = 1.0;
-			real vx = 0.049;
+			// real vx = 0.049;
 			//////////////////////////////////////////////////////////////////////////
 			//32
 			gridBuilder->addCoarseGrid(-24, -2, -16,
@@ -141,7 +140,7 @@ void multipleLevel(const std::string& configPath)
 			//real dx = 2.0 * PI / 64.0; // 64^3 nodes
 			//real dx = 2.0 * PI / 128.0; // 128^3 nodes
 			//real dx = 2.0 * PI / 256.0; // 128^3 nodes
-			real vx = 0.049;
+			// real vx = 0.049;
 
 			gridBuilder->addCoarseGrid(-PI, -PI, -PI,
 										PI,  PI,  PI, dx);
@@ -149,16 +148,6 @@ void multipleLevel(const std::string& configPath)
 			gridBuilder->setPeriodicBoundaryCondition(true, true, true);
 
 			gridBuilder->buildGrids(LBM, true); // buildGrids() has to be called before setting the BCs!!!!
-			////////////////////////////////////////////////////////////////////////////
-			//gridBuilder->setVelocityBoundaryCondition(SideType::PY, vx, 0.0, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::MY, vx, 0.0, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vx, 0.0, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::MZ, vx, 0.0, 0.0);
-
-			//gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
-
-			//gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
 
 			//////////////////////////////////////////////////////////////////////////
 			SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
@@ -209,11 +198,11 @@ void multipleLevel(const std::string& configPath)
 
             //////////////////////////////////////////////////////////////////////////
 
-            TriangularMesh* sphereSTL = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Sphere/SphereNotOptimal.stl");
+            // TriangularMesh* sphereSTL = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Sphere/SphereNotOptimal.stl");
 
             TriangularMesh* sphereRef_1_STL = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Sphere/SphereRef_1.stl");
 
-            TriangularMesh* sphereRef_2_STL = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Sphere/SphereRef_2.stl");
+            // TriangularMesh* sphereRef_2_STL = TriangularMesh::make("F:/Work/Computations/gridGenerator/stl/Sphere/SphereRef_2.stl");
 
             Object* sphere = new Sphere( 0, 0, 0, 0.5*D );
 
@@ -249,6 +238,10 @@ void multipleLevel(const std::string& configPath)
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
             
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
+
             //////////////////////////////////////////////////////////////////////////
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
             //////////////////////////////////////////////////////////////////////////
@@ -337,7 +330,11 @@ void multipleLevel(const std::string& configPath)
             gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-            
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+
             //////////////////////////////////////////////////////////////////////////
 
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
@@ -423,6 +420,10 @@ void multipleLevel(const std::string& configPath)
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
 
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+
             //////////////////////////////////////////////////////////////////////////
 
             gridBuilder->writeGridsToVtk("F:/Work/Computations/out/PaperPlane/PaperPlane_Grid_");
@@ -493,6 +494,10 @@ void multipleLevel(const std::string& configPath)
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
 
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
+
             //////////////////////////////////////////////////////////////////////////
 
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
@@ -579,7 +584,11 @@ void multipleLevel(const std::string& configPath)
             gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-            
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+ 
             //////////////////////////////////////////////////////////////////////////
 
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
@@ -662,7 +671,7 @@ void multipleLevel(const std::string& configPath)
             para->setMaxDev(2);
 
             //const uint generatePart = 1;
-            const uint generatePart = vf::gpu::Communicator::getInstanz()->getPID();
+            const uint generatePart = communicator.getPID();
             
             std::ofstream logFile2;
             
@@ -738,7 +747,11 @@ void multipleLevel(const std::string& configPath)
             }
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-        
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
+
             //////////////////////////////////////////////////////////////////////////
 
             if (generatePart == 0) {
@@ -777,27 +790,15 @@ void multipleLevel(const std::string& configPath)
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
-    SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
+    auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para);
 
     SPtr<GridProvider> gridGenerator;
     if( useGridGenerator ) gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
     else                   gridGenerator = GridProvider::makeGridReader(FILEFORMAT::BINARY, para, cudaMemoryManager);
 
-    Simulation sim;
-
     SPtr<FileWriter> fileWriter = SPtr<FileWriter>(new FileWriter());
-
-    SPtr<KernelFactoryImp> kernelFactory = KernelFactoryImp::getInstance();
-
-    SPtr<PreProcessorFactoryImp> preProcessorFactory = PreProcessorFactoryImp::getInstance();
-
-    sim.setFactories(kernelFactory, preProcessorFactory);
-
-    sim.init(para, gridGenerator, fileWriter, cudaMemoryManager);
-    
-
+    Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory);
     sim.run();
-    sim.free();
 }
 
 int main( int argc, char* argv[])
@@ -828,15 +829,15 @@ int main( int argc, char* argv[])
 
             //////////////////////////////////////////////////////////////////////////
 		}
-        catch (const std::exception& e)
+        catch (const std::bad_alloc& e)
         {
                 
-            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
+            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
         }
-        catch (const std::bad_alloc e)
+        catch (const std::exception& e)
         {
                 
-            *logging::out << logging::Logger::LOGGER_ERROR << "Bad Alloc:" << e.what() << "\n";
+            *logging::out << logging::Logger::LOGGER_ERROR << e.what() << "\n";
         }
         catch (...)
         {
diff --git a/apps/gpu/LBM/lbmTest/main.cpp b/apps/gpu/LBM/lbmTest/main.cpp
index a2590255465d4db0724ce0c6e04e466ad14c2463..bd33f7c987934b73f41e2057da5e42655c406687 100644
--- a/apps/gpu/LBM/lbmTest/main.cpp
+++ b/apps/gpu/LBM/lbmTest/main.cpp
@@ -27,6 +27,7 @@
 #include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h"
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 #include "global.h"
 
@@ -282,6 +283,7 @@ void multipleLevel(const std::string& configPath)
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
     
     SPtr<Parameter> para = Parameter::make();
+    BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
     SPtr<GridProvider> gridGenerator;
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -347,17 +349,6 @@ void multipleLevel(const std::string& configPath)
 			gridBuilder->setPeriodicBoundaryCondition(true, true, true);
 
 			gridBuilder->buildGrids(LBM, true); // buildGrids() has to be called before setting the BCs!!!!
-			////////////////////////////////////////////////////////////////////////////
-			//gridBuilder->setVelocityBoundaryCondition(SideType::PY, vx, 0.0, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::MY, vx, 0.0, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::PZ, vx, 0.0, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::MZ, vx, 0.0, 0.0);
-
-			//gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
-			//gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
-
-			//gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-
 			//////////////////////////////////////////////////////////////////////////
 			SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
 			//////////////////////////////////////////////////////////////////////////
@@ -405,7 +396,10 @@ void multipleLevel(const std::string& configPath)
             gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-            
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
             //////////////////////////////////////////////////////////////////////////
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
             //////////////////////////////////////////////////////////////////////////
@@ -472,7 +466,11 @@ void multipleLevel(const std::string& configPath)
             gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-            
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+
             //////////////////////////////////////////////////////////////////////////
 
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
@@ -567,7 +565,11 @@ void multipleLevel(const std::string& configPath)
             gridBuilder->setVelocityBoundaryCondition(SideType::MX, vx, 0.0, 0.0);
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-            
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective);
+
             //////////////////////////////////////////////////////////////////////////
 
             SPtr<Grid> grid = gridBuilder->getGrid(gridBuilder->getNumberOfLevels() - 1);
@@ -698,7 +700,10 @@ void multipleLevel(const std::string& configPath)
             }
 
             gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-        
+
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+            bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+            bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
             //////////////////////////////////////////////////////////////////////////
 
             if (generatePart == 0) {
diff --git a/apps/gpu/LBM/metisTest/main.cpp b/apps/gpu/LBM/metisTest/main.cpp
index b5e2aa40a315004130bd5eed24b438e318d16ab7..679119509d66737f3db132b676c73de5a146b779 100644
--- a/apps/gpu/LBM/metisTest/main.cpp
+++ b/apps/gpu/LBM/metisTest/main.cpp
@@ -332,9 +332,12 @@ void multipleLevel(const std::string& configPath)
         gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0);
 
         gridBuilder->setVelocityBoundaryCondition(SideType::GEOMETRY, 0.0, 0.0, 0.0);
-        
-        //////////////////////////////////////////////////////////////////////////
 
+        bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityCompressible);
+        bcFactory.setGeometryBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipCompressible);
+        bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::PressureNonEquilibriumCompressible);
+
+        //////////////////////////////////////////////////////////////////////////
         gridBuilder->writeGridsToVtk("F:/Work/Computations/gridGenerator/grid/Test_");
         //gridBuilder->writeArrows    ("F:/Work/Computations/gridGenerator/grid/Test_Arrow");
 
diff --git a/apps/gpu/LidDrivenCavity/LidDrivenCavity.cpp b/apps/gpu/LidDrivenCavity/LidDrivenCavity.cpp
index 2c63892ffb0bc0ead8d18c69b597aa3760fb3d53..e92a6c0dd4032fa8aa4c1ad519e18975976cdcbd 100644
--- a/apps/gpu/LidDrivenCavity/LidDrivenCavity.cpp
+++ b/apps/gpu/LidDrivenCavity/LidDrivenCavity.cpp
@@ -63,6 +63,7 @@
 #include "VirtualFluids_GPU/Parameter/Parameter.h"
 #include "VirtualFluids_GPU/Output/FileWriter.h"
 #include "VirtualFluids_GPU/GPU/CudaMemoryManager.h"
+#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h"
 
 //////////////////////////////////////////////////////////////////////////
 
@@ -132,14 +133,14 @@ int main( int argc, char* argv[])
         // create grid
         //////////////////////////////////////////////////////////////////////////
 
-	    real dx = L / real(nx);
+        real dx = L / real(nx);
 
-	    gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -0.5 * L,
-								    0.5 * L,  0.5 * L,  0.5 * L, dx);
+        gridBuilder->addCoarseGrid(-0.5 * L, -0.5 * L, -0.5 * L,
+                                    0.5 * L,  0.5 * L,  0.5 * L, dx);
 
-	    gridBuilder->setPeriodicBoundaryCondition(false, false, false);
+        gridBuilder->setPeriodicBoundaryCondition(false, false, false);
 
-	    gridBuilder->buildGrids(lbmOrGks, false);
+        gridBuilder->buildGrids(lbmOrGks, false);
     
         //////////////////////////////////////////////////////////////////////////
         // branch between LBM and GKS
@@ -147,16 +148,17 @@ int main( int argc, char* argv[])
 
         if( lbmOrGks == LBM )
         {
-		    SPtr<Parameter> para = Parameter::make();
-    
+            SPtr<Parameter> para = Parameter::make();
+            BoundaryConditionFactory bcFactory = BoundaryConditionFactory();
+
             //////////////////////////////////////////////////////////////////////////
             // compute parameters in lattice units
             //////////////////////////////////////////////////////////////////////////
 
             const real velocityLB = velocity * dt / dx; // LB units
 
-	        const real vx = velocityLB / sqrt(2.0); // LB units
-	        const real vy = velocityLB / sqrt(2.0); // LB units
+            const real vx = velocityLB / sqrt(2.0); // LB units
+            const real vy = velocityLB / sqrt(2.0); // LB units
 
             const real viscosityLB = nx * velocityLB / Re; // LB units
 
@@ -186,18 +188,21 @@ int main( int argc, char* argv[])
             // set boundary conditions
             //////////////////////////////////////////////////////////////////////////
 
-		    gridBuilder->setNoSlipBoundaryCondition  (SideType::PX);
-		    gridBuilder->setNoSlipBoundaryCondition  (SideType::MX);
-		    gridBuilder->setNoSlipBoundaryCondition  (SideType::PY);
-		    gridBuilder->setNoSlipBoundaryCondition  (SideType::MY);
-	        gridBuilder->setVelocityBoundaryCondition(SideType::PZ,  vx,  vy, 0.0);
-		    gridBuilder->setNoSlipBoundaryCondition  (SideType::MZ);
-    
+            gridBuilder->setNoSlipBoundaryCondition  (SideType::PX);
+            gridBuilder->setNoSlipBoundaryCondition  (SideType::MX);
+            gridBuilder->setNoSlipBoundaryCondition  (SideType::PY);
+            gridBuilder->setNoSlipBoundaryCondition  (SideType::MY);
+            gridBuilder->setVelocityBoundaryCondition(SideType::PZ,  vx,  vy, 0.0);
+            gridBuilder->setNoSlipBoundaryCondition  (SideType::MZ);
+
+            bcFactory.setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC::NoSlipBounceBack);
+            bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocitySimpleBounceBackCompressible);
+
             //////////////////////////////////////////////////////////////////////////
             // set copy mesh to simulation
             //////////////////////////////////////////////////////////////////////////
 
-		    SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
+            SPtr<CudaMemoryManager> cudaMemoryManager = CudaMemoryManager::make(para);
 
             SPtr<GridProvider> gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator);
     
@@ -221,8 +226,8 @@ int main( int argc, char* argv[])
             // compute remaining parameters
             //////////////////////////////////////////////////////////////////////////
 
-	        const real vx = velocity / sqrt(2.0);
-	        const real vy = velocity / sqrt(2.0);
+            const real vx = velocity / sqrt(2.0);
+            const real vy = velocity / sqrt(2.0);
     
             parameters.K  = 2.0;
             parameters.Pr = 1.0;
@@ -342,7 +347,7 @@ int main( int argc, char* argv[])
                 convergenceAnalyzer.run( iter );
             }
         }
-	}
+    }
     catch (const std::bad_alloc e)
     {
                 
diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp
index bfcb8aca231c14f601a3a0148c02b02f24026c4c..a53f552702c50aed8640ac1ef47ed69b3d2f1d50 100644
--- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp
+++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp
@@ -10,7 +10,7 @@
 #include "Parameter/Parameter.h"
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 
 #include <basics/writer/WbWriterVtkXmlBinary.h>
 
diff --git a/gpu.cmake b/gpu.cmake
index 5b70ed9da9cb5f0ac56d09a0f91f0a6b6d13b89a..8b98763d8fdb4e1687bcfccbacd722ddd001a53e 100644
--- a/gpu.cmake
+++ b/gpu.cmake
@@ -32,13 +32,14 @@ IF (BUILD_VF_GPU)
     #add_subdirectory(targets/apps/LBM/BaselMultiGPU)
 
     add_subdirectory(apps/gpu/LBM/DrivenCavity)
+    add_subdirectory(apps/gpu/LBM/SphereGPU)
     #add_subdirectory(apps/gpu/LBM/WTG_RUB)
     #add_subdirectory(apps/gpu/LBM/gridGeneratorTest)
     #add_subdirectory(apps/gpu/LBM/TGV_3D)
     #add_subdirectory(apps/gpu/LBM/TGV_3D_MultiGPU)
-	#add_subdirectory(apps/gpu/LBM/SphereScaling)
+    #add_subdirectory(apps/gpu/LBM/SphereScaling)
     #add_subdirectory(apps/gpu/LBM/DrivenCavityMultiGPU)
-	#add_subdirectory(apps/gpu/LBM/MusselOyster)
+    #add_subdirectory(apps/gpu/LBM/MusselOyster)
     #add_subdirectory(apps/gpu/LBM/Poiseuille)
     #add_subdirectory(apps/gpu/LBM/ActuatorLine)
     #add_subdirectory(apps/gpu/LBM/BoundaryLayer)
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
index c1036c62ac09fbb27284faa0b27825bfee3220ac..9965b511d615a2cd7764a07cd234012a442fa675 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp
@@ -1259,7 +1259,7 @@ void Grid3D::getSubBlocksZero(int ix1, int ix2, int ix3, int level, vector<SPtr<
         this->getSubBlocksEast(x1W, x2N, x3T, l, blockVector, levelDepth);
 }
 //////////////////////////////////////////////////////////////////////////
-void Grid3D::getNeighborBlocksForDirectionWithDirZero(int dir, int ix1, int ix2, int ix3, int level, int levelDepth,
+void Grid3D::getNeighborBlocksForDirectionWithREST(int dir, int ix1, int ix2, int ix3, int level, int levelDepth,
                                                       std::vector<SPtr<Block3D>> &blocks)
 {
     switch (dir) {
diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.h b/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
index 3607a3f99d8593f3a4c73e5393b1eb1250655883..7527880cd5360d3006af2edcce2d5b56131d6e37 100644
--- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
+++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.h
@@ -109,7 +109,7 @@ public:
     void getAllNeighbors(SPtr<Block3D> block, int level, int levelDepth, std::vector<SPtr<Block3D>> &blocks);
     void getNeighborBlocksForDirection(int dir, int ix1, int ix2, int ix3, int level, int levelDepth,
                                        std::vector<SPtr<Block3D>> &blocks);
-    void getNeighborBlocksForDirectionWithDirZero(int dir, int ix1, int ix2, int ix3, int level, int levelDepth,
+    void getNeighborBlocksForDirectionWithREST(int dir, int ix1, int ix2, int ix3, int level, int levelDepth,
                                                   std::vector<SPtr<Block3D>> &blocks);
 
     void getNeighborsZero(int ix1, int ix2, int ix3, int level, int levelDepth, std::vector<SPtr<Block3D>> &blocks);
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
index daed493b9cc1afddbd92acabcd551da0f463ea26..2a895950a79cf011c25b0d352689216f53e96d41 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp
@@ -84,7 +84,7 @@ void CumulantK17LBMKernel::calculate(int step)
     //! The cumulant kernel is executed in the following steps
     //!
     ////////////////////////////////////////////////////////////////////////////////
-    //! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+    //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
     //!
 
     using namespace std;
@@ -321,7 +321,7 @@ void CumulantK17LBMKernel::calculate(int step)
                     LBMReal O6 = c1;
 
                     ////////////////////////////////////////////////////////////////////////////////////
-                    //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
+                    //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
                     //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
                     //! with simplifications assuming \f$\omega_2 = 1.0\f$ (modify for different bulk viscosity).
                     //!
diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp
index 2bdc7ce97be90a45b2bebb3dca53f3eb609bec3b..e001cbf970d59f6f847589810eeaacb86a3e22a2 100644
--- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp
+++ b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp
@@ -89,7 +89,7 @@ void CumulantK17LBMKernelUnified::calculate(int step)
     //! The cumulant kernel is executed in the following steps
     //!
     ////////////////////////////////////////////////////////////////////////////////
-    //! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+    //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
     //!
 
     using namespace std;
diff --git a/src/cuda/CudaGrid.cpp b/src/cuda/CudaGrid.cpp
index c7267972859f04931d9a69cfca073c7ac3267b9f..9590452e107d17e69dd77b7159c20ca009f01a4c 100644
--- a/src/cuda/CudaGrid.cpp
+++ b/src/cuda/CudaGrid.cpp
@@ -27,4 +27,22 @@ void CudaGrid::print() const
 }
 
 
+dim3 getCudaGrid(const unsigned int numberOfThreads, const unsigned int numberOfEntities){
+   int Grid = (numberOfEntities / numberOfThreads) + 1;
+   int Grid1, Grid2;
+   if (Grid > 512)
+   {
+      Grid1 = 512;
+      Grid2 = (Grid/Grid1)+1;
+   }
+   else
+   {
+      Grid1 = 1;
+      Grid2 = Grid;
+   }
+   dim3 cudaGrid(Grid1, Grid2);
+   return cudaGrid;
+}
+
+
 }
diff --git a/src/cuda/CudaGrid.h b/src/cuda/CudaGrid.h
index a9926c3861749f648da529f2b45554d13599a302..bf82077fdf6c9a5494a35950a917d9aaf1047b56 100644
--- a/src/cuda/CudaGrid.h
+++ b/src/cuda/CudaGrid.h
@@ -18,6 +18,7 @@ struct CudaGrid
     void print() const;
 };
 
+dim3 getCudaGrid(const unsigned int numberOfThreads, const unsigned int numberOfEntities);
 
 }
 
diff --git a/src/gpu/GksMeshAdapter/GksMeshAdapter.cpp b/src/gpu/GksMeshAdapter/GksMeshAdapter.cpp
index 8d032dfeead2f582c5af2426c45b09ead33883cc..ca6b223c90859656231360142b08d543b019b7ad 100644
--- a/src/gpu/GksMeshAdapter/GksMeshAdapter.cpp
+++ b/src/gpu/GksMeshAdapter/GksMeshAdapter.cpp
@@ -186,7 +186,7 @@ void GksMeshAdapter::findCellToCellConnectivity()
 
         for( uint idx = 0; idx < 27; idx++ )
         {
-            if( idx == DIR_27_ZERO ) continue;
+            if( idx == DIR_27_REST ) continue;
 
             int xSign = dirs.directions[idx][0];
             int ySign = dirs.directions[idx][1];
diff --git a/src/gpu/GridGenerator/CMakeLists.txt b/src/gpu/GridGenerator/CMakeLists.txt
index 07b6125d6ecd83dca59e20e7c286ebc2b8d14715..7483d276d08bb66b8c6948689f1dbb13f8846cb6 100644
--- a/src/gpu/GridGenerator/CMakeLists.txt
+++ b/src/gpu/GridGenerator/CMakeLists.txt
@@ -1,6 +1,7 @@
 project(GridGenerator LANGUAGES CXX)
 
 vf_add_library(PRIVATE_LINK basics OpenMP::OpenMP_CXX)
+vf_add_tests()
 
 if(NOT MSVC) 
    target_compile_options(GridGenerator PRIVATE "-Wno-strict-aliasing")
diff --git a/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
index f982b2fa5d5c614ded87ba2a03f6e71d72bf130c..67ac560b91f0ae712dfbc67d22676d8af8fc9afe 100644
--- a/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
+++ b/src/gpu/GridGenerator/geometries/BoundingBox/BoundingBoxTest.cpp
@@ -1,13 +1,19 @@
 #include "gmock/gmock.h"
 
-#include <GridGenerator/geometries/Triangle/Triangle.h>
-#include <GridGenerator/geometries/BoundingBox/BoundingBox.h>
-#include <GridGenerator/geometries/Vertex/Vertex.h>
-
+#include "geometries/Triangle/Triangle.h"
+#include "geometries/BoundingBox/BoundingBox.h"
+#include "geometries/Vertex/Vertex.h"
+
+auto RealEq = [](auto value) { 
+#ifdef VF_DOUBLE_ACCURACY
+    return testing::DoubleEq(value); 
+#else 
+    return testing::FloatEq(value);
+#endif
+};
 
 using namespace testing;
 
-
 TEST(BoundingBoxExactTest, findMinMaxFromTriangle)
 {
     BoundingBox box = BoundingBox::makeInvalidMinMaxBox();
@@ -19,7 +25,11 @@ TEST(BoundingBoxExactTest, findMinMaxFromTriangle)
     real maxX = 110.0f;
     real maxY = 50.0f;
     real maxZ = 12122.23f;
-    Triangle t = Triangle(Vertex(maxX, maxY - 10, minZ + 2), Vertex(minX, maxY, maxZ), Vertex(minX + 3, minY, minZ), Vertex(0.0f, 0.0f, 0.0f));
+    Vertex v1 = Vertex(maxX, maxY - 10, minZ + 2);
+    Vertex v2 =  Vertex(minX, maxY, maxZ);
+    Vertex v3 = Vertex(minX + 3, minY, minZ);
+    Vertex normal = Vertex(0.0f, 0.0f, 0.0f);
+    Triangle t = Triangle(v1, v2, v3, normal);
 
 	box.setMinMax(t);
 
@@ -44,7 +54,11 @@ TEST(BoundingBoxTest, isInside_true)
     box.maxY = 10.0f;
     box.maxZ = 10.0f;
 
-    Triangle t = Triangle(Vertex(1,1,1), Vertex(2,2,2), Vertex(3,3,3), Vertex(0.0f, 0.0f, 0.0f));
+    Vertex v1 = Vertex(1,1,1);
+    Vertex v2 =  Vertex(2,2,2);
+    Vertex v3 = Vertex(3,3,3);
+    Vertex normal = Vertex(0.0f, 0.0f, 0.0f);
+    Triangle t = Triangle(v1, v2, v3, normal);
 
     EXPECT_TRUE(box.isInside(t));
 }
@@ -61,7 +75,11 @@ TEST(BoundingBoxTest, isInside_false)
     box.maxY = 10.0f;
     box.maxZ = 10.0f;
 
-    Triangle t = Triangle(Vertex(1, 1, 1), Vertex(2, 2, 2), Vertex(3, 3, 11), Vertex(0.0f, 0.0f, 0.0f));
+    Vertex v1 = Vertex(1,1,1);
+    Vertex v2 =  Vertex(2,2,2);
+    Vertex v3 = Vertex(3,3,11);
+    Vertex normal = Vertex(0.0f, 0.0f, 0.0f);
+    Triangle t = Triangle(v1, v2, v3, normal);
 
     EXPECT_FALSE(box.isInside(t));
 }
diff --git a/src/gpu/GridGenerator/global.h b/src/gpu/GridGenerator/global.h
index 19bedc95b9a767f30761279500c6b8c036509eba..04f7e71e84d2c287493c18565bd39501aa031d72 100644
--- a/src/gpu/GridGenerator/global.h
+++ b/src/gpu/GridGenerator/global.h
@@ -43,9 +43,9 @@
 
 #include "GridGenerator_export.h"
 
-#include "PointerDefinitions.h"
-#include "Core/DataTypes.h"
+#include "basics/PointerDefinitions.h"
+#include "basics/Core/DataTypes.h"
 
-#include "Core/Logger/Logger.h"
+#include "basics/Core/Logger/Logger.h"
 
 #endif 
diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
index 497c4dc4a9e687f4ccd1790c781e9364d5ddd34d..31303f55f2422312155580f14c1c53b02b97f3c1 100644
--- a/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
+++ b/src/gpu/GridGenerator/grid/BoundaryConditions/BoundaryCondition.h
@@ -256,7 +256,8 @@ public:
 
 //////////////////////////////////////////////////////////////////////////
 
-class GeometryBoundaryCondition : public VelocityBoundaryCondition
+
+class GeometryBoundaryCondition : public gg::BoundaryCondition
 {
 public:
     static SPtr<GeometryBoundaryCondition> make()
@@ -264,8 +265,15 @@ public:
         return SPtr<GeometryBoundaryCondition>(new GeometryBoundaryCondition());
     }
 
+    real normalX, normalY, normalZ;
+    std::vector<real> normalXList, normalYList, normalZList;
+
+    real vx, vy, vz;
+    std::vector<real> vxList, vyList, vzList;
+
 private:
-    GeometryBoundaryCondition() : VelocityBoundaryCondition(0.0, 0.0, 0.0) { }
+    GeometryBoundaryCondition(real vx = 0.0, real vy = 0.0, real vz = 0.0, real normalX = 0.0, real normalY = 0.0, real normalZ = 0.0) :
+        vx(vx), vy(vy), vz(vz), normalX(normalX), normalY(normalY), normalZ(normalZ) { }
 
 public:
     char getType() const override
@@ -287,6 +295,43 @@ public:
                                                   real p1x, real p1y, real p1z, 
                                                   real p2x, real p2y, real p2z, 
                                                   real v, real r );
+
+    void fillVelocityLists()
+    {
+        for( uint index : this->indices ) {
+            (void) index;
+            this->vxList.push_back(vx);
+            this->vyList.push_back(vy);
+            this->vzList.push_back(vz);
+        }
+    }
+
+    real getVx() { return this->vx; }
+    real getVy() { return this->vy; }
+    real getVz() { return this->vz; }
+
+    real getVx(uint index) { return this->vxList[index]; }
+    real getVy(uint index) { return this->vyList[index]; }
+    real getVz(uint index) { return this->vzList[index]; }
+
+
+    void fillSlipNormalLists()
+    {   
+        for (uint index : this->indices) {
+            (void)index;
+            this->normalXList.push_back(normalX);
+            this->normalYList.push_back(normalY);
+            this->normalZList.push_back(normalZ);
+        }
+    }
+
+    real getNormalx() { return this->normalX; }
+    real getNormaly() { return this->normalY; }
+    real getNormalz() { return this->normalZ; }
+
+    real getNormalx(uint index) { return this->normalXList[index]; }
+    real getNormaly(uint index) { return this->normalYList[index]; }
+    real getNormalz(uint index) { return this->normalZList[index]; }
 };
 
 class PrecursorBoundaryCondition : public gg::BoundaryCondition
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
index b7e77d59490ef8ecc43b7b247f46ab2926d7082b..b67e5bbb21080f0a2bbc3f6a16ee7aa55b6c925e 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.cpp
@@ -76,19 +76,43 @@ std::shared_ptr<LevelGridBuilder> LevelGridBuilder::makeShared()
     return SPtr<LevelGridBuilder>(new LevelGridBuilder());
 }
 
-void LevelGridBuilder::setSlipBoundaryCondition(SideType sideType, real nomalX, real normalY, real normalZ)
+void LevelGridBuilder::setSlipBoundaryCondition(SideType sideType, real normalX, real normalY, real normalZ)
 {
-    SPtr<SlipBoundaryCondition> slipBoundaryCondition = SlipBoundaryCondition::make(nomalX, normalY, normalZ);
+    if(sideType == SideType::GEOMETRY){
+        setSlipGeometryBoundaryCondition(normalX, normalY, normalZ);
+    }else{
+        SPtr<SlipBoundaryCondition> slipBoundaryCondition = SlipBoundaryCondition::make(normalX, normalY, normalZ);
 
-    auto side = SideFactory::make(sideType);
+        auto side = SideFactory::make(sideType);
+
+        slipBoundaryCondition->side = side;
+        slipBoundaryCondition->side->addIndices(grids, 0, slipBoundaryCondition);
+
+        slipBoundaryCondition->fillSlipNormalLists();
+        boundaryConditions[0]->slipBoundaryConditions.push_back(slipBoundaryCondition);
+
+        *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Slip BC on level " << 0 << " with " << (int)slipBoundaryCondition->indices.size() << "\n";
+    }
+}
+
+void LevelGridBuilder::setSlipGeometryBoundaryCondition(real normalX, real normalY, real normalZ)
+{
+    geometryHasValues = true;
 
-    slipBoundaryCondition->side = side;
-    slipBoundaryCondition->side->addIndices(grids, 0, slipBoundaryCondition);
+    for (uint level = 0; level < getNumberOfGridLevels(); level++)
+    {
+		if (boundaryConditions[level]->geometryBoundaryCondition != nullptr)
+		{
+			boundaryConditions[level]->geometryBoundaryCondition->normalX = normalX;
+			boundaryConditions[level]->geometryBoundaryCondition->normalY = normalY;
+			boundaryConditions[level]->geometryBoundaryCondition->normalZ = normalZ;
+			boundaryConditions[level]->geometryBoundaryCondition->side->addIndices(grids, level, boundaryConditions[level]->geometryBoundaryCondition);
 
-    slipBoundaryCondition->fillSlipNormalLists();
-    boundaryConditions[0]->slipBoundaryConditions.push_back(slipBoundaryCondition);
+            boundaryConditions[level]->geometryBoundaryCondition->fillSlipNormalLists();
 
-    *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Slip BC on level " << 0 << " with " << (int)slipBoundaryCondition->indices.size() << "\n";
+            *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Geometry Slip BC on level " << level << " with " << (int)boundaryConditions[level]->geometryBoundaryCondition->indices.size() <<"\n";
+		}
+    }
 }
 
 void LevelGridBuilder::setStressBoundaryCondition(  SideType sideType, 
@@ -180,18 +204,37 @@ void LevelGridBuilder::setPeriodicBoundaryCondition(bool periodic_X, bool period
 
 void LevelGridBuilder::setNoSlipBoundaryCondition(SideType sideType)
 {
-    for (uint level = 0; level < getNumberOfGridLevels(); level++)
-    {
-        SPtr<VelocityBoundaryCondition> noSlipBoundaryCondition = VelocityBoundaryCondition::make(0.0, 0.0, 0.0);
+    if (sideType == SideType::GEOMETRY)
+        setNoSlipGeometryBoundaryCondition();
+    else {
+        for (uint level = 0; level < getNumberOfGridLevels(); level++) {
+            SPtr<VelocityBoundaryCondition> noSlipBoundaryCondition = VelocityBoundaryCondition::make(0.0, 0.0, 0.0);
 
-        auto side = SideFactory::make(sideType);
+            auto side = SideFactory::make(sideType);
+
+            noSlipBoundaryCondition->side = side;
+            noSlipBoundaryCondition->side->addIndices(grids, level, noSlipBoundaryCondition);
+
+            noSlipBoundaryCondition->fillVelocityLists();
+
+            // now effectively just a wrapper for velocityBC with zero velocity. No distinction in Gridgenerator.
+            boundaryConditions[level]->velocityBoundaryConditions.push_back(noSlipBoundaryCondition); 
+        }
+    }
+}
 
-        noSlipBoundaryCondition->side = side;
-        noSlipBoundaryCondition->side->addIndices(grids, level, noSlipBoundaryCondition);
+void LevelGridBuilder::setNoSlipGeometryBoundaryCondition()
+{
+    geometryHasValues = true;
 
-        noSlipBoundaryCondition->fillVelocityLists();
+    for (uint level = 0; level < getNumberOfGridLevels(); level++)
+    {
+		if (boundaryConditions[level]->geometryBoundaryCondition != nullptr)
+		{
+			boundaryConditions[level]->geometryBoundaryCondition->side->addIndices(grids, level, boundaryConditions[level]->geometryBoundaryCondition);
 
-        boundaryConditions[level]->velocityBoundaryConditions.push_back(noSlipBoundaryCondition); //now effectively just a wrapper for velocityBC with zero velocity. No distinction in Gridgenerator.
+            *logging::out << logging::Logger::INFO_INTERMEDIATE << "Set Geometry No-Slip BC on level " << level << " with " << (int)boundaryConditions[level]->geometryBoundaryCondition->indices.size() <<"\n";
+		}
     }
 }
 
diff --git a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
index 50d1c410274b769846ce231ed9e40da1dcc9bc1b..97fc60f84bde89405fc244cf5e9bf40f44145da3 100644
--- a/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
+++ b/src/gpu/GridGenerator/grid/GridBuilder/LevelGridBuilder.h
@@ -176,6 +176,8 @@ protected:
 
 protected:
     void setVelocityGeometryBoundaryCondition(real vx, real vy, real vz);
+    void setNoSlipGeometryBoundaryCondition();
+    void setSlipGeometryBoundaryCondition(real normalX, real normalY, real normalZ);
 
     void createBCVectors();
     void addShortQsToVector(int index);
diff --git a/src/gpu/GridGenerator/grid/GridInterface.cpp b/src/gpu/GridGenerator/grid/GridInterface.cpp
index 47cb8ef9dd7c4704e420ca68888ce0d56c48a59e..9194f12824e2a95b4880647586eeba70be9984b1 100644
--- a/src/gpu/GridGenerator/grid/GridInterface.cpp
+++ b/src/gpu/GridGenerator/grid/GridInterface.cpp
@@ -40,6 +40,9 @@
 #include "grid/Field.h"
 #include "grid/NodeValues.h"
 
+#include "lbm/constants/D3Q27.h"
+
+using namespace vf::lbm;
 using namespace vf::gpu;
 
 GridInterface::GridInterface()
@@ -373,7 +376,7 @@ uint GridInterface::findOffsetCF(const uint& indexOnCoarseGrid, GridImp* coarseG
     Cell cell(x, y, z, coarseGrid->getDelta());
 
     if( coarseGrid->cellContainsOnly( cell, FLUID, FLUID_CFC ) ){
-        this->cf.offset[ interfaceIndex ] = DIR_27_ZERO;
+        this->cf.offset[ interfaceIndex ] = dir::REST;
         return indexOnCoarseGrid;
     }
 
@@ -408,7 +411,7 @@ uint GridInterface::findOffsetFC(const uint& indexOnFineGrid, GridImp* fineGrid,
     Cell cell(x, y, z, fineGrid->getDelta());
 
     if( fineGrid->cellContainsOnly( cell, FLUID, FLUID_FCF ) ){
-        this->fc.offset[ interfaceIndex ] = DIR_27_ZERO;
+        this->fc.offset[ interfaceIndex ] = dir::REST;
         return indexOnFineGrid;
     }
 
diff --git a/src/gpu/GridGenerator/grid/distributions/D3Q27.h b/src/gpu/GridGenerator/grid/distributions/D3Q27.h
index 680fa88305b793934747d09113f284bfe96b4988..4ef041a13678516f116c13c9b9996d6f378ef854 100644
--- a/src/gpu/GridGenerator/grid/distributions/D3Q27.h
+++ b/src/gpu/GridGenerator/grid/distributions/D3Q27.h
@@ -33,41 +33,6 @@
 #ifndef D3Q27_H_
 #define D3Q27_H_
 
-#define DIR_27_E    0
-#define DIR_27_W    1
-#define DIR_27_N    2
-#define DIR_27_S    3
-#define DIR_27_T    4
-#define DIR_27_B    5
-
-#define DIR_27_NE   6
-#define DIR_27_SW   7
-#define DIR_27_SE   8
-#define DIR_27_NW   9
-#define DIR_27_TE   10
-#define DIR_27_BW   11
-#define DIR_27_BE   12
-#define DIR_27_TW   13
-#define DIR_27_TN   14
-#define DIR_27_BS   15
-#define DIR_27_BN   16
-#define DIR_27_TS   17
-#define DIR_27_ZERO 18
-
-#define DIR_27_TNE  19
-#define DIR_27_BNE  20
-#define DIR_27_TSE  21
-#define DIR_27_BSE  22
-
-#define DIR_27_TNW  23
-#define DIR_27_BNW  24
-#define DIR_27_TSW  25
-#define DIR_27_BSW  26
-
-#define DIR_27_START  0
-#define DIR_27_END   26
-
-
 #define DIR_27_E_X  1
 #define DIR_27_E_Y  0
 #define DIR_27_E_Z  0
@@ -159,7 +124,6 @@
 #define DIR_27_BSE_Y  -1
 #define DIR_27_BSE_Z  -1
 
-
 #define DIR_27_TNW_X  -1
 #define DIR_27_TNW_Y  1
 #define DIR_27_TNW_Z  1
@@ -176,4 +140,8 @@
 #define DIR_27_BSW_Y  -1
 #define DIR_27_BSW_Z  -1
 
+#define DIR_27_REST_X  0
+#define DIR_27_REST_Y  0
+#define DIR_27_REST_Z  0
+
 #endif
diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
index b0200812631aeff1947a56f78cae4232bd4d3ee7..8192c114413dfdf32492717b57870cadd35130cb 100644
--- a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
+++ b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp
@@ -35,168 +35,162 @@
 #include <stdio.h>
 
 #include "grid/distributions/D3Q27.h"
-
+#include "lbm/constants/D3Q27.h"
 #include "grid/Grid.h"
+using namespace vf::lbm::dir;
 
 Distribution DistributionHelper::getDistribution27() 
 {
     Distribution d27;
     d27.name = "D3Q27";
-    d27.dir_start = DIR_27_START;
-    d27.dir_end = DIR_27_END;
-
-    d27.dirs = new int[(DIR_27_END + 1) * DIMENSION];
-
-    d27.directions = new Direction[DIR_27_END + 1];
-    d27.directions[0] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z);
-    d27.directions[1] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z);
-    d27.directions[2] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z);
-    d27.directions[3] = Direction(DIR_27_S_X, DIR_27_S_Y, DIR_27_S_Z);
-
-    d27.directions[4] = Direction(DIR_27_T_X, DIR_27_T_Y, DIR_27_T_Z);
-    d27.directions[5] = Direction(DIR_27_B_X, DIR_27_B_Y, DIR_27_B_Z);
-
-    d27.directions[6] = Direction(DIR_27_NE_X, DIR_27_NE_Y, DIR_27_NE_Z);
-    d27.directions[7] = Direction(DIR_27_SW_X, DIR_27_SW_Y, DIR_27_SW_Z);
-    d27.directions[8] = Direction(DIR_27_SE_X, DIR_27_SE_Y, DIR_27_SE_Z);
-    d27.directions[9] = Direction(DIR_27_NW_X, DIR_27_NW_Y, DIR_27_NW_Z);
-
-    d27.directions[10] = Direction(DIR_27_TE_X, DIR_27_TE_Y, DIR_27_TE_Z);
-    d27.directions[11] = Direction(DIR_27_BW_X, DIR_27_BW_Y, DIR_27_BW_Z);
-    d27.directions[12] = Direction(DIR_27_BE_X, DIR_27_BE_Y, DIR_27_BE_Z);
-    d27.directions[13] = Direction(DIR_27_TW_X, DIR_27_TW_Y, DIR_27_TW_Z);
-
-    d27.directions[14] = Direction(DIR_27_TN_X, DIR_27_TN_Y, DIR_27_TN_Z);
-    d27.directions[15] = Direction(DIR_27_BS_X, DIR_27_BS_Y, DIR_27_BS_Z);
-    d27.directions[16] = Direction(DIR_27_BN_X, DIR_27_BN_Y, DIR_27_BN_Z);
-    d27.directions[17] = Direction(DIR_27_TS_X, DIR_27_TS_Y, DIR_27_TS_Z);
-
-    d27.directions[18] = Direction(0, 0, 0);
-
-    d27.directions[19] = Direction(DIR_27_TNE_X, DIR_27_TNE_Y, DIR_27_TNE_Z);
-    d27.directions[20] = Direction(DIR_27_BNE_X, DIR_27_BNE_Y, DIR_27_BNE_Z);
-
-    d27.directions[21] = Direction(DIR_27_TSE_X, DIR_27_TSE_Y, DIR_27_TSE_Z);
-    d27.directions[22] = Direction(DIR_27_BSE_X, DIR_27_BSE_Y, DIR_27_BSE_Z);
+    d27.dir_start = STARTDIR;
+    d27.dir_end = ENDDIR;
+
+    d27.dirs = new int[(ENDDIR + 1) * DIMENSION];
+
+    d27.directions = new Direction[ENDDIR + 1];
+    d27.directions[E] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z);
+    d27.directions[W] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z);
+    d27.directions[N] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z);
+    d27.directions[S] = Direction(DIR_27_S_X, DIR_27_S_Y, DIR_27_S_Z);
+    d27.directions[T] = Direction(DIR_27_T_X, DIR_27_T_Y, DIR_27_T_Z);
+    d27.directions[B] = Direction(DIR_27_B_X, DIR_27_B_Y, DIR_27_B_Z);
+
+    d27.directions[NE] = Direction(DIR_27_NE_X, DIR_27_NE_Y, DIR_27_NE_Z);
+    d27.directions[SW] = Direction(DIR_27_SW_X, DIR_27_SW_Y, DIR_27_SW_Z);
+    d27.directions[SE] = Direction(DIR_27_SE_X, DIR_27_SE_Y, DIR_27_SE_Z);
+    d27.directions[NW] = Direction(DIR_27_NW_X, DIR_27_NW_Y, DIR_27_NW_Z);
+
+    d27.directions[TE] = Direction(DIR_27_TE_X, DIR_27_TE_Y, DIR_27_TE_Z);
+    d27.directions[BW] = Direction(DIR_27_BW_X, DIR_27_BW_Y, DIR_27_BW_Z);
+    d27.directions[BE] = Direction(DIR_27_BE_X, DIR_27_BE_Y, DIR_27_BE_Z);
+    d27.directions[TW] = Direction(DIR_27_TW_X, DIR_27_TW_Y, DIR_27_TW_Z);
+
+    d27.directions[TN] = Direction(DIR_27_TN_X, DIR_27_TN_Y, DIR_27_TN_Z);
+    d27.directions[BS] = Direction(DIR_27_BS_X, DIR_27_BS_Y, DIR_27_BS_Z);
+    d27.directions[BN] = Direction(DIR_27_BN_X, DIR_27_BN_Y, DIR_27_BN_Z);
+    d27.directions[TS] = Direction(DIR_27_TS_X, DIR_27_TS_Y, DIR_27_TS_Z);
+
+    d27.directions[REST] = Direction(DIR_27_REST_X, DIR_27_REST_Y, DIR_27_REST_Z);
+
+    d27.directions[TNE] = Direction(DIR_27_TNE_X, DIR_27_TNE_Y, DIR_27_TNE_Z);
+    d27.directions[TNW] = Direction(DIR_27_TNW_X, DIR_27_TNW_Y, DIR_27_TNW_Z);
+    d27.directions[TSE] = Direction(DIR_27_TSE_X, DIR_27_TSE_Y, DIR_27_TSE_Z);
+    d27.directions[TSW] = Direction(DIR_27_TSW_X, DIR_27_TSW_Y, DIR_27_TSW_Z);
+
+    d27.directions[BNE] = Direction(DIR_27_BNE_X, DIR_27_BNE_Y, DIR_27_BNE_Z);
+    d27.directions[BNW] = Direction(DIR_27_BNW_X, DIR_27_BNW_Y, DIR_27_BNW_Z);
+    d27.directions[BSE] = Direction(DIR_27_BSE_X, DIR_27_BSE_Y, DIR_27_BSE_Z);
+    d27.directions[BSW] = Direction(DIR_27_BSW_X, DIR_27_BSW_Y, DIR_27_BSW_Z);
+
+
+    d27.dirs[E * 3    ] = DIR_27_E_X;
+    d27.dirs[E * 3 + 1] = DIR_27_E_Y;
+    d27.dirs[E * 3 + 2] = DIR_27_E_Z;
+
+    d27.dirs[W * 3    ] = DIR_27_W_X;
+    d27.dirs[W * 3 + 1] = DIR_27_W_Y;
+    d27.dirs[W * 3 + 2] = DIR_27_W_Z;
+    
+    d27.dirs[N * 3    ] = DIR_27_N_X;
+    d27.dirs[N * 3 + 1] = DIR_27_N_Y;
+    d27.dirs[N * 3 + 2] = DIR_27_N_Z;
 
-    d27.directions[23] = Direction(DIR_27_TNW_X, DIR_27_TNW_Y, DIR_27_TNW_Z);
-    d27.directions[24] = Direction(DIR_27_BNW_X, DIR_27_BNW_Y, DIR_27_BNW_Z);
+    d27.dirs[S * 3    ] = DIR_27_S_X;
+    d27.dirs[S * 3 + 1] = DIR_27_S_Y;
+    d27.dirs[S * 3 + 2] = DIR_27_S_Z;
+    
+    d27.dirs[T * 3    ] = DIR_27_T_X;
+    d27.dirs[T * 3 + 1] = DIR_27_T_Y;
+    d27.dirs[T * 3 + 2] = DIR_27_T_Z;
+    
+    d27.dirs[B * 3    ] = DIR_27_B_X;
+    d27.dirs[B * 3 + 1] = DIR_27_B_Y;
+    d27.dirs[B * 3 + 2] = DIR_27_B_Z;
 
-    d27.directions[25] = Direction(DIR_27_TSW_X, DIR_27_TSW_Y, DIR_27_TSW_Z);
-    d27.directions[26] = Direction(DIR_27_BSW_X, DIR_27_BSW_Y, DIR_27_BSW_Z);
+    d27.dirs[NE * 3    ] = DIR_27_NE_X;
+    d27.dirs[NE * 3 + 1] = DIR_27_NE_Y;
+    d27.dirs[NE * 3 + 2] = DIR_27_NE_Z;
+    
+    d27.dirs[SW * 3    ] = DIR_27_SW_X;
+    d27.dirs[SW * 3 + 1] = DIR_27_SW_Y;
+    d27.dirs[SW * 3 + 2] = DIR_27_SW_Z;
 
+    d27.dirs[SE * 3    ] = DIR_27_SE_X;
+    d27.dirs[SE * 3 + 1] = DIR_27_SE_Y;
+    d27.dirs[SE * 3 + 2] = DIR_27_SE_Z;
 
-    int dir_num = 0;
-    d27.dirs[dir_num++] = DIR_27_E_X;
-    d27.dirs[dir_num++] = DIR_27_E_Y;
-    d27.dirs[dir_num++] = DIR_27_E_Z;
+    d27.dirs[NW * 3    ] = DIR_27_NW_X;
+    d27.dirs[NW * 3 + 1] = DIR_27_NW_Y;
+    d27.dirs[NW * 3 + 2] = DIR_27_NW_Z;
 
-    d27.dirs[dir_num++] = DIR_27_W_X;
-    d27.dirs[dir_num++] = DIR_27_W_Y;
-    d27.dirs[dir_num++] = DIR_27_W_Z;
-    
-    d27.dirs[dir_num++] = DIR_27_N_X;
-    d27.dirs[dir_num++] = DIR_27_N_Y;
-    d27.dirs[dir_num++] = DIR_27_N_Z;
-    
-    d27.dirs[dir_num++] = DIR_27_S_X;
-    d27.dirs[dir_num++] = DIR_27_S_Y;
-    d27.dirs[dir_num++] = DIR_27_S_Z;
-    
-    d27.dirs[dir_num++] = DIR_27_T_X;
-    d27.dirs[dir_num++] = DIR_27_T_Y;
-    d27.dirs[dir_num++] = DIR_27_T_Z;
-    
-    d27.dirs[dir_num++] = DIR_27_B_X;
-    d27.dirs[dir_num++] = DIR_27_B_Y;
-    d27.dirs[dir_num++] = DIR_27_B_Z;
-    
-    d27.dirs[dir_num++] = DIR_27_NE_X;
-    d27.dirs[dir_num++] = DIR_27_NE_Y;
-    d27.dirs[dir_num++] = DIR_27_NE_Z;
-    
-    d27.dirs[dir_num++] = DIR_27_SW_X;
-    d27.dirs[dir_num++] = DIR_27_SW_Y;
-    d27.dirs[dir_num++] = DIR_27_SW_Z;
+    d27.dirs[TE * 3    ] = DIR_27_TE_X;
+    d27.dirs[TE * 3 + 1] = DIR_27_TE_Y;
+    d27.dirs[TE * 3 + 2] = DIR_27_TE_Z;
 
-    d27.dirs[dir_num++] = DIR_27_SE_X;
-    d27.dirs[dir_num++] = DIR_27_SE_Y;
-    d27.dirs[dir_num++] = DIR_27_SE_Z;
+    d27.dirs[BW * 3    ] = DIR_27_BW_X;
+    d27.dirs[BW * 3 + 1] = DIR_27_BW_Y;
+    d27.dirs[BW * 3 + 2] = DIR_27_BW_Z;
                               
-    d27.dirs[dir_num++] = DIR_27_NW_X;
-    d27.dirs[dir_num++] = DIR_27_NW_Y;
-    d27.dirs[dir_num++] = DIR_27_NW_Z;
+    d27.dirs[BE * 3    ] = DIR_27_BE_X;
+    d27.dirs[BE * 3 + 1] = DIR_27_BE_Y;
+    d27.dirs[BE * 3 + 2] = DIR_27_BE_Z;
                               
-    d27.dirs[dir_num++] = DIR_27_TE_X;
-    d27.dirs[dir_num++] = DIR_27_TE_Y;
-    d27.dirs[dir_num++] = DIR_27_TE_Z;
+    d27.dirs[TW * 3    ] = DIR_27_TW_X;
+    d27.dirs[TW * 3 + 1] = DIR_27_TW_Y;
+    d27.dirs[TW * 3 + 2] = DIR_27_TW_Z;
                               
-    d27.dirs[dir_num++] = DIR_27_BW_X;
-    d27.dirs[dir_num++] = DIR_27_BW_Y;
-    d27.dirs[dir_num++] = DIR_27_BW_Z;
+    d27.dirs[TN * 3    ] = DIR_27_TN_X;
+    d27.dirs[TN * 3 + 1] = DIR_27_TN_Y;
+    d27.dirs[TN * 3 + 2] = DIR_27_TN_Z;
                               
-    d27.dirs[dir_num++] = DIR_27_BE_X;
-    d27.dirs[dir_num++] = DIR_27_BE_Y;
-    d27.dirs[dir_num++] = DIR_27_BE_Z;
+    d27.dirs[BS * 3    ] = DIR_27_BS_X;
+    d27.dirs[BS * 3 + 1] = DIR_27_BS_Y;
+    d27.dirs[BS * 3 + 2] = DIR_27_BS_Z;
                               
-    d27.dirs[dir_num++] = DIR_27_TW_X;
-    d27.dirs[dir_num++] = DIR_27_TW_Y;
-    d27.dirs[dir_num++] = DIR_27_TW_Z;
-                              
-    d27.dirs[dir_num++] = DIR_27_TN_X;
-    d27.dirs[dir_num++] = DIR_27_TN_Y;
-    d27.dirs[dir_num++] = DIR_27_TN_Z;
-                              
-    d27.dirs[dir_num++] = DIR_27_BS_X;
-    d27.dirs[dir_num++] = DIR_27_BS_Y;
-    d27.dirs[dir_num++] = DIR_27_BS_Z;
-                              
-    d27.dirs[dir_num++] = DIR_27_BN_X;
-    d27.dirs[dir_num++] = DIR_27_BN_Y;
-    d27.dirs[dir_num++] = DIR_27_BN_Z;
-
-    d27.dirs[dir_num++] = DIR_27_TS_X;
-    d27.dirs[dir_num++] = DIR_27_TS_Y;
-    d27.dirs[dir_num++] = DIR_27_TS_Z;
-
-
-    d27.dirs[dir_num++] = 0;   //
-    d27.dirs[dir_num++] = 0;   //  ZERO ELEMENT
-    d27.dirs[dir_num++] = 0;   //
+    d27.dirs[BN * 3    ] = DIR_27_BN_X;
+    d27.dirs[BN * 3 + 1] = DIR_27_BN_Y;
+    d27.dirs[BN * 3 + 2] = DIR_27_BN_Z;
 
+    d27.dirs[TS * 3    ] = DIR_27_TS_X;
+    d27.dirs[TS * 3 + 1] = DIR_27_TS_Y;
+    d27.dirs[TS * 3 + 2] = DIR_27_TS_Z;
 
-    d27.dirs[dir_num++] = DIR_27_TNE_X;
-    d27.dirs[dir_num++] = DIR_27_TNE_Y;
-    d27.dirs[dir_num++] = DIR_27_TNE_Z;
+    d27.dirs[REST * 3    ] = DIR_27_REST_X;   //
+    d27.dirs[REST * 3 + 1] = DIR_27_REST_Y;   //  ZERO ELEMENT
+    d27.dirs[REST * 3 + 2] = DIR_27_REST_Z;   //
 
-    d27.dirs[dir_num++] = DIR_27_BNE_X;
-    d27.dirs[dir_num++] = DIR_27_BNE_Y;
-    d27.dirs[dir_num++] = DIR_27_BNE_Z;
+    d27.dirs[TNE * 3    ] = DIR_27_TNE_X;
+    d27.dirs[TNE * 3 + 1] = DIR_27_TNE_Y;
+    d27.dirs[TNE * 3 + 2] = DIR_27_TNE_Z;
 
-    d27.dirs[dir_num++] = DIR_27_TSE_X;
-    d27.dirs[dir_num++] = DIR_27_TSE_Y;
-    d27.dirs[dir_num++] = DIR_27_TSE_Z;
+    d27.dirs[BNE * 3    ] = DIR_27_BNE_X;
+    d27.dirs[BNE * 3 + 1] = DIR_27_BNE_Y;
+    d27.dirs[BNE * 3 + 2] = DIR_27_BNE_Z;
 
-    d27.dirs[dir_num++] = DIR_27_BSE_X;
-    d27.dirs[dir_num++] = DIR_27_BSE_Y;
-    d27.dirs[dir_num++] = DIR_27_BSE_Z;
+    d27.dirs[TSE * 3    ] = DIR_27_TSE_X;
+    d27.dirs[TSE * 3 + 1] = DIR_27_TSE_Y;
+    d27.dirs[TSE * 3 + 2] = DIR_27_TSE_Z;
 
+    d27.dirs[BSE * 3    ] = DIR_27_BSE_X;
+    d27.dirs[BSE * 3 + 1] = DIR_27_BSE_Y;
+    d27.dirs[BSE * 3 + 2] = DIR_27_BSE_Z;
 
-    d27.dirs[dir_num++] = DIR_27_TNW_X;
-    d27.dirs[dir_num++] = DIR_27_TNW_Y;
-    d27.dirs[dir_num++] = DIR_27_TNW_Z;
+    d27.dirs[TNW * 3    ] = DIR_27_TNW_X;
+    d27.dirs[TNW * 3 + 1] = DIR_27_TNW_Y;
+    d27.dirs[TNW * 3 + 2] = DIR_27_TNW_Z;
 
-    d27.dirs[dir_num++] = DIR_27_BNW_X;
-    d27.dirs[dir_num++] = DIR_27_BNW_Y;
-    d27.dirs[dir_num++] = DIR_27_BNW_Z;
+    d27.dirs[BNW * 3    ] = DIR_27_BNW_X;
+    d27.dirs[BNW * 3 + 1] = DIR_27_BNW_Y;
+    d27.dirs[BNW * 3 + 2] = DIR_27_BNW_Z;
 
-    d27.dirs[dir_num++] = DIR_27_TSW_X;
-    d27.dirs[dir_num++] = DIR_27_TSW_Y;
-    d27.dirs[dir_num++] = DIR_27_TSW_Z;
+    d27.dirs[TSW * 3    ] = DIR_27_TSW_X;
+    d27.dirs[TSW * 3 + 1] = DIR_27_TSW_Y;
+    d27.dirs[TSW * 3 + 2] = DIR_27_TSW_Z;
 
-    d27.dirs[dir_num++] = DIR_27_BSW_X;
-    d27.dirs[dir_num++] = DIR_27_BSW_Y;
-    d27.dirs[dir_num++] = DIR_27_BSW_Z;
+    d27.dirs[BSW * 3    ] = DIR_27_BSW_X;
+    d27.dirs[BSW * 3 + 1] = DIR_27_BSW_Y;
+    d27.dirs[BSW * 3 + 2] = DIR_27_BSW_Z;
 
     return d27;
 }
diff --git a/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp b/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..86b2f3b5139482d2be92788ea646cea1069a6052
--- /dev/null
+++ b/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp
@@ -0,0 +1,61 @@
+# include <gmock/gmock.h>
+#include <string>
+# include "Distribution.h"
+
+#include "grid/distributions/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
+using namespace vf::lbm::dir;
+
+TEST(DistributionTest, DistributionReturnsCorrectDirections)
+{
+    Distribution dist = DistributionHelper::getDistribution27();
+
+    EXPECT_THAT(dist.directions[E][0], testing::Eq(DIR_27_E_X));
+    EXPECT_THAT(dist.directions[E][1], testing::Eq(DIR_27_E_Y));
+    EXPECT_THAT(dist.directions[E][2], testing::Eq(DIR_27_E_Z));
+    EXPECT_THAT(dist.dirs[E * 3    ], testing::Eq(DIR_27_E_X));
+    EXPECT_THAT(dist.dirs[E * 3 + 1], testing::Eq(DIR_27_E_Y));
+    EXPECT_THAT(dist.dirs[E * 3 + 2], testing::Eq(DIR_27_E_Z));
+
+    EXPECT_THAT(dist.directions[B][0], testing::Eq(DIR_27_B_X));
+    EXPECT_THAT(dist.directions[B][1], testing::Eq(DIR_27_B_Y));
+    EXPECT_THAT(dist.directions[B][2], testing::Eq(DIR_27_B_Z));
+    EXPECT_THAT(dist.dirs[B * 3    ], testing::Eq(DIR_27_B_X));
+    EXPECT_THAT(dist.dirs[B * 3 + 1], testing::Eq(DIR_27_B_Y));
+    EXPECT_THAT(dist.dirs[B * 3 + 2], testing::Eq(DIR_27_B_Z));
+    
+    EXPECT_THAT(dist.directions[REST][0], testing::Eq(0));
+    EXPECT_THAT(dist.directions[REST][1], testing::Eq(0));
+    EXPECT_THAT(dist.directions[REST][2], testing::Eq(0));
+    EXPECT_THAT(dist.dirs[REST * 3    ], testing::Eq(0));
+    EXPECT_THAT(dist.dirs[REST * 3 + 1], testing::Eq(0));
+    EXPECT_THAT(dist.dirs[REST * 3 + 2], testing::Eq(0));
+
+    EXPECT_THAT(dist.directions[NE][0], testing::Eq(DIR_27_NE_X));
+    EXPECT_THAT(dist.directions[NE][1], testing::Eq(DIR_27_NE_Y));
+    EXPECT_THAT(dist.directions[NE][2], testing::Eq(DIR_27_NE_Z));
+    EXPECT_THAT(dist.dirs[NE * 3    ], testing::Eq(DIR_27_NE_X));
+    EXPECT_THAT(dist.dirs[NE * 3 + 1], testing::Eq(DIR_27_NE_Y));
+    EXPECT_THAT(dist.dirs[NE * 3 + 2], testing::Eq(DIR_27_NE_Z));
+
+    EXPECT_THAT(dist.directions[TS][0], testing::Eq(DIR_27_TS_X));
+    EXPECT_THAT(dist.directions[TS][1], testing::Eq(DIR_27_TS_Y));
+    EXPECT_THAT(dist.directions[TS][2], testing::Eq(DIR_27_TS_Z));
+    EXPECT_THAT(dist.dirs[TS * 3    ], testing::Eq(DIR_27_TS_X));
+    EXPECT_THAT(dist.dirs[TS * 3 + 1], testing::Eq(DIR_27_TS_Y));
+    EXPECT_THAT(dist.dirs[TS * 3 + 2], testing::Eq(DIR_27_TS_Z));
+
+    EXPECT_THAT(dist.directions[TNE][0], testing::Eq(DIR_27_TNE_X));
+    EXPECT_THAT(dist.directions[TNE][1], testing::Eq(DIR_27_TNE_Y));
+    EXPECT_THAT(dist.directions[TNE][2], testing::Eq(DIR_27_TNE_Z));
+    EXPECT_THAT(dist.dirs[TNE * 3    ], testing::Eq(DIR_27_TNE_X));
+    EXPECT_THAT(dist.dirs[TNE * 3 + 1], testing::Eq(DIR_27_TNE_Y));
+    EXPECT_THAT(dist.dirs[TNE * 3 + 2], testing::Eq(DIR_27_TNE_Z));
+
+    EXPECT_THAT(dist.directions[BSW][0], testing::Eq(DIR_27_BSW_X));
+    EXPECT_THAT(dist.directions[BSW][1], testing::Eq(DIR_27_BSW_Y));
+    EXPECT_THAT(dist.directions[BSW][2], testing::Eq(DIR_27_BSW_Z));
+    EXPECT_THAT(dist.dirs[BSW * 3    ], testing::Eq(DIR_27_BSW_X));
+    EXPECT_THAT(dist.dirs[BSW * 3 + 1], testing::Eq(DIR_27_BSW_Y));
+    EXPECT_THAT(dist.dirs[BSW * 3 + 2], testing::Eq(DIR_27_BSW_Z));
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.cpp b/src/gpu/VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..c4e42d765ba42833501ce66ee2ee53d016102d08
--- /dev/null
+++ b/src/gpu/VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.cpp
@@ -0,0 +1,157 @@
+#include "BoundaryConditionFactory.h"
+#include "GPU/GPU_Interface.h"
+#include "Parameter/Parameter.h"
+#include "grid/BoundaryConditions/BoundaryCondition.h"
+#include <variant>
+
+void BoundaryConditionFactory::setVelocityBoundaryCondition(VelocityBC boundaryConditionType)
+{
+    this->velocityBoundaryCondition = boundaryConditionType;
+}
+
+void BoundaryConditionFactory::setNoSlipBoundaryCondition(const NoSlipBC boundaryConditionType)
+{
+    this->noSlipBoundaryCondition = boundaryConditionType;
+}
+
+void BoundaryConditionFactory::setSlipBoundaryCondition(const SlipBC boundaryConditionType)
+{
+    this->slipBoundaryCondition = boundaryConditionType;
+}
+
+void BoundaryConditionFactory::setPressureBoundaryCondition(const PressureBC boundaryConditionType)
+{
+    this->pressureBoundaryCondition = boundaryConditionType;
+}
+
+void BoundaryConditionFactory::setGeometryBoundaryCondition(
+    const std::variant<VelocityBC, NoSlipBC, SlipBC> boundaryConditionType)
+{
+    this->geometryBoundaryCondition = boundaryConditionType;
+}
+
+void BoundaryConditionFactory::setStressBoundaryCondition(const StressBC boundaryConditionType)
+{
+    this->stressBoundaryCondition = boundaryConditionType;
+}
+
+boundaryCondition BoundaryConditionFactory::getVelocityBoundaryConditionPost(bool isGeometryBC) const
+{
+    const VelocityBC &boundaryCondition =
+        isGeometryBC ? std::get<VelocityBC>(this->geometryBoundaryCondition) : this->velocityBoundaryCondition;
+
+    // for descriptions of the boundary conditions refer to the header
+    switch (boundaryCondition) {
+        case VelocityBC::VelocitySimpleBounceBackCompressible:
+            return QVelDevicePlainBB27;
+            break;
+        case VelocityBC::VelocityIncompressible:
+            return QVelDev27;
+            break;
+        case VelocityBC::VelocityCompressible:
+            return QVelDevComp27;
+            break;
+        case VelocityBC::VelocityAndPressureCompressible:
+            return QVelDevCompZeroPress27;
+            break;
+        default:
+            return nullptr;
+    }
+}
+
+boundaryCondition BoundaryConditionFactory::getNoSlipBoundaryConditionPost(bool isGeometryBC) const
+{
+    const NoSlipBC &boundaryCondition =
+        isGeometryBC ? std::get<NoSlipBC>(this->geometryBoundaryCondition) : this->noSlipBoundaryCondition;
+
+    // for descriptions of the boundary conditions refer to the header
+    switch (boundaryCondition) {
+        case NoSlipBC::NoSlipImplicitBounceBack:
+            return [](LBMSimulationParameter *, QforBoundaryConditions *) {};
+            break;
+        case NoSlipBC::NoSlipBounceBack:
+            return BBDev27;
+            break;
+        case NoSlipBC::NoSlipIncompressible:
+            return QDev27;
+            break;
+        case NoSlipBC::NoSlipCompressible:
+            return QDevComp27;
+            break;
+        case NoSlipBC::NoSlip3rdMomentsCompressible:
+            return QDev3rdMomentsComp27;
+            break;
+        default:
+            return nullptr;
+    }
+}
+
+boundaryCondition BoundaryConditionFactory::getSlipBoundaryConditionPost(bool isGeometryBC) const
+{
+    const SlipBC &boundaryCondition =
+        isGeometryBC ? std::get<SlipBC>(this->geometryBoundaryCondition) : this->slipBoundaryCondition;
+
+    // for descriptions of the boundary conditions refer to the header
+    switch (boundaryCondition) {
+        case SlipBC::SlipIncompressible:
+            return QSlipDev27;
+            break;
+        case SlipBC::SlipCompressible:
+            return QSlipDevComp27;
+            break;
+        case SlipBC::SlipCompressibleTurbulentViscosity:
+            return QSlipDevCompTurbulentViscosity27;
+            break;
+        default:
+            return nullptr;
+    }
+}
+
+boundaryCondition BoundaryConditionFactory::getPressureBoundaryConditionPre() const
+{
+    // for descriptions of the boundary conditions refer to the header
+    switch (this->pressureBoundaryCondition) {
+        case PressureBC::PressureEquilibrium:
+            return QPressDev27;
+            break;
+        case PressureBC::PressureEquilibrium2:
+            return QPressDevEQZ27;
+            break;
+        case PressureBC::PressureNonEquilibriumIncompressible:
+            return QPressDevIncompNEQ27;
+            break;
+        case PressureBC::PressureNonEquilibriumCompressible:
+            return QPressDevNEQ27;
+            break;
+        case PressureBC::OutflowNonReflective:
+            return QPressNoRhoDev27;
+            break;
+        default:
+            return nullptr;
+    }
+}
+
+boundaryConditionPara BoundaryConditionFactory::getStressBoundaryConditionPost() const
+{
+    switch (this->stressBoundaryCondition) {
+        case StressBC::StressBounceBack:
+            return BBStressDev27;
+            break;
+        case StressBC::StressCompressible:
+            return QStressDevComp27;
+            break;
+        default:
+            return nullptr;
+    }
+}
+
+boundaryCondition BoundaryConditionFactory::getGeometryBoundaryConditionPost() const
+{
+    if (std::holds_alternative<VelocityBC>(this->geometryBoundaryCondition))
+        return this->getVelocityBoundaryConditionPost(true);
+    else if (std::holds_alternative<NoSlipBC>(this->geometryBoundaryCondition))
+        return this->getNoSlipBoundaryConditionPost(true);
+    else if (std::holds_alternative<SlipBC>(this->geometryBoundaryCondition))
+        return this->getSlipBoundaryConditionPost(true);
+    return nullptr;
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h b/src/gpu/VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h
new file mode 100644
index 0000000000000000000000000000000000000000..c2d374c7df97eb83d363417dc4a13b42b7312cab
--- /dev/null
+++ b/src/gpu/VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h
@@ -0,0 +1,124 @@
+#ifndef BC_FACTORY
+#define BC_FACTORY
+
+#include <functional>
+#include <map>
+#include <string>
+#include <variant>
+
+#include "LBM/LB.h"
+#include "Parameter/Parameter.h"
+#include "grid/BoundaryConditions/Side.h"
+
+struct LBMSimulationParameter;
+class Parameter;
+
+using boundaryCondition = std::function<void(LBMSimulationParameter *, QforBoundaryConditions *)>;
+using boundaryConditionPara = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
+
+class BoundaryConditionFactory
+{
+public:
+    //! \brief An enumeration for selecting a velocity boundary condition
+    enum class VelocityBC {
+        //! - VelocitySimpleBounceBackCompressible = plain bounce back velocity boundary condition
+        VelocitySimpleBounceBackCompressible,
+        //! - VelocityIncompressible = interpolated velocity boundary condition, based on subgrid distances
+        VelocityIncompressible,
+        //! - VelocityCompressible = interpolated velocity boundary condition, based on subgrid distances
+        VelocityCompressible,
+        //! - VelocityAndPressureCompressible = interpolated velocity boundary condition, based on subgrid distances.
+        //! Also sets the pressure to the bulk pressure. Can be combined with OutflowNonReflective
+        VelocityAndPressureCompressible
+    };
+
+    //! \brief An enumeration for selecting a no-slip boundary condition
+    enum class NoSlipBC {
+        //! - NoSlipImplicitBounceBack = implicit bounce back by Esoteric Twist
+        NoSlipImplicitBounceBack,
+        //! - NoSlipBounceBack = bounce back no-slip boundary condition
+        NoSlipBounceBack,
+        //! - NoSlipIncompressible = interpolated no-slip boundary condition, based on subgrid distances
+        NoSlipIncompressible,
+        //! - NoSlipCompressible = interpolated no-slip boundary condition, based on subgrid distances
+        NoSlipCompressible,
+        //! - NoSlipCompressible = interpolated no-slip boundary condition, based on subgrid distances
+        //! Also uses the third order moments.
+        NoSlip3rdMomentsCompressible
+    };
+
+    //! \brief An enumeration for selecting a slip boundary condition
+    enum class SlipBC {
+        //! - SlipIncompressible = interpolated slip boundary condition, based on subgrid distances
+        SlipIncompressible,
+        //! - SlipCompressible = interpolated slip boundary condition, based on subgrid distances
+        SlipCompressible,
+        //! - SlipCompressible = interpolated slip boundary condition, based on subgrid distances.
+        //! With turbulent viscosity -> para->setUseTurbulentViscosity(true) has to be set to true
+        SlipCompressibleTurbulentViscosity
+    };
+
+    //! \brief An enumeration for selecting a pressure boundary condition
+    enum class PressureBC {
+        //! - PressureEquilibrium = pressure boundary condition based on equilibrium
+        PressureEquilibrium, // incorrect pressure :(
+        //! - PressureEquilibrium2 = pressure boundary condition based on equilibrium (potentially better?! than PressureEquilibrium)
+        PressureEquilibrium2, // is broken --> nan :(
+        //! - PressureNonEquilibriumIncompressible = pressure boundary condition based on non-equilibrium
+        PressureNonEquilibriumIncompressible,
+        //! - PressureNonEquilibriumCompressible = pressure boundary condition based on non-equilibrium
+        PressureNonEquilibriumCompressible,
+        //! - OutflowNonReflective = outflow boundary condition, should be combined with VelocityAndPressureCompressible
+        OutflowNonReflective
+    };
+
+    //! \brief An enumeration for selecting a stress boundary condition
+    enum class StressBC {
+        //! - StressCompressible
+        StressCompressible,
+        //! - StressBounceBack
+        StressBounceBack
+    };
+
+    // enum class OutflowBoundaryCondition {};  // TODO:
+    // https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16
+
+    void setVelocityBoundaryCondition(const BoundaryConditionFactory::VelocityBC boundaryConditionType);
+    void setNoSlipBoundaryCondition(const BoundaryConditionFactory::NoSlipBC boundaryConditionType);
+    void setSlipBoundaryCondition(const BoundaryConditionFactory::SlipBC boundaryConditionType);
+    void setPressureBoundaryCondition(const BoundaryConditionFactory::PressureBC boundaryConditionType);
+    void setStressBoundaryCondition(const BoundaryConditionFactory::StressBC boundaryConditionType);
+    //!param boundaryConditionType: a velocity, no-slip or slip boundary condition
+    //! \details suggestions for boundaryConditionType:
+    //!
+    //! - velocity: VelocityIncompressible, VelocityCompressible, VelocityAndPressureCompressible
+    //!
+    //! - no-slip:  NoSlipBounceBack, NoSlipIncompressible, NoSlipCompressible, NoSlip3rdMomentsCompressible
+    //!
+    //! - slip:     SlipIncompressible
+    void setGeometryBoundaryCondition(const std::variant<VelocityBC, NoSlipBC, SlipBC> boundaryConditionType);
+
+    // void setOutflowBoundaryCondition(...); // TODO:
+    // https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16
+
+    boundaryCondition getVelocityBoundaryConditionPost(bool isGeometryBC = false) const;
+    boundaryCondition getNoSlipBoundaryConditionPost(bool isGeometryBC = false) const;
+    boundaryCondition getSlipBoundaryConditionPost(bool isGeometryBC = false) const;
+    boundaryCondition getPressureBoundaryConditionPre() const;
+    boundaryCondition getGeometryBoundaryConditionPost() const;
+
+    boundaryConditionPara getStressBoundaryConditionPost() const;
+
+private:
+    VelocityBC velocityBoundaryCondition;
+    NoSlipBC noSlipBoundaryCondition = NoSlipBC::NoSlipImplicitBounceBack;
+    SlipBC slipBoundaryCondition;
+    PressureBC pressureBoundaryCondition;
+    std::variant<VelocityBC, NoSlipBC, SlipBC> geometryBoundaryCondition  = NoSlipBC::NoSlipImplicitBounceBack;
+    StressBC stressBoundaryCondition;
+
+
+    // OutflowBoundaryConditon outflowBC // TODO: https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16
+};
+
+#endif
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp b/src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp
index d90ad6474da28194526feb2b4203f5e42eb313c9..648fe6cc9c8fffc7574bc60c89e194937a7974e1 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp
@@ -55,7 +55,7 @@ void calcDragLift(Parameter* para, CudaMemoryManager* cudaMemoryManager, int lev
 	//double LBtoSI = 1.204 * (pow(delta_x, 4))/(pow(delta_t,2));//rho_SI * delta_x^4 / delta_t^2 = 1.204 kg/m^3 * (0.0045m)^4 / (0.00000757s)^2 ... LB to kg*m/s^2
 	//double LBtoSI = 1000 * (pow(delta_x, 4))/(pow(delta_t,2));//rho_SI * delta_x^4 / delta_t^2 = 1000 kg/m^3 * (0.1m)^4 / (0.00187s)^2 ... LB to kg*m/s^2
 
-	for (int it = 0; it < para->getParH(lev)->geometryBC.numberOfBCnodes; it++)
+	for (unsigned int it = 0; it < para->getParH(lev)->geometryBC.numberOfBCnodes; it++)
 	{
 		dragX += (double) (para->getParH(lev)->DragPreX[it] - para->getParH(lev)->DragPostX[it]); //Kraft da Impuls pro Zeitschritt merke: andere nennen es FD
 		dragY += (double) (para->getParH(lev)->DragPreY[it] - para->getParH(lev)->DragPostY[it]); //Kraft da Impuls pro Zeitschritt merke: andere nennen es FD
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp b/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp
index e1f686cc5b22849fd1853fc3f8edf970ab9ff82b..be90565d71a11054a05d663291f5353f9d61f624 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp
@@ -353,7 +353,7 @@ void printRE(Parameter* para, CudaMemoryManager* cudaMemoryManager, int timestep
 	//////////////////////////////////////////////////////////////////////////
 	//fill file with data
 	bool doNothing = false;
-	for (int i = 0; i < para->getParH(lev)->pressureBC.numberOfBCnodes; i++)
+	for (unsigned int i = 0; i < para->getParH(lev)->pressureBC.numberOfBCnodes; i++)
 	{
 		doNothing = false;
 		for (std::size_t j = 0; j < 27; j++)
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
index f87190257db7745dc33753ecb3b92cc6d58c9591..ab341c781c853a8f3c25e3cfbb0233b26ac95e49 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
+++ b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp
@@ -5,7 +5,7 @@
 #include "Communication/ExchangeData27.h"
 #include "Parameter/CudaStreamManager.h"
 #include "GPU/TurbulentViscosity.h"
-#include "KernelManager/LBKernelManager.h"
+#include "KernelManager/BCKernelManager.h"
 #include "KernelManager/ADKernelManager.h"
 #include "KernelManager/GridScalingKernelManager.h"
 #include "Kernel/Kernel.h"
@@ -356,35 +356,35 @@ void UpdateGrid27::postCollisionBC(int level, uint t) // TODO add t here so it c
     //////////////////////////////////////////////////////////////////////////
     // G E O M E T R Y
     // V E L O C I T Y (I N F L O W)
-    this->lbKernelManager->runVelocityBCKernelPost(level);
+    this->bcKernelManager->runVelocityBCKernelPost(level);
 
     //////////////////////////////////////////////////////////////////////////
     // N O - S L I P
-    this->lbKernelManager->runNoSlipBCKernel(level);
+    this->bcKernelManager->runNoSlipBCKernelPost(level);
 
     //////////////////////////////////////////////////////////////////////////
     // S L I P
-    this->lbKernelManager->runSlipBCKernel(level);
+    this->bcKernelManager->runSlipBCKernelPost(level);
 
     //////////////////////////////////////////////////////////////////////////
     // S T R E S S (wall model)
-    this->lbKernelManager->runStressWallModelKernel(level);
+    this->bcKernelManager->runStressWallModelKernelPost(level);
 
     //////////////////////////////////////////////////////////////////////////
     // G E O M E T R Y
-    this->lbKernelManager->runGeoBCKernelPost(level);
+    this->bcKernelManager->runGeoBCKernelPost(level);
 
     //////////////////////////////////////////////////////////////////////////
     // O U T F L O W
-    this->lbKernelManager->runOutflowBCKernelPre(level);
+    this->bcKernelManager->runOutflowBCKernelPre(level);
 
     //////////////////////////////////////////////////////////////////////////
     // P R E S S U R E
-    this->lbKernelManager->runPressureBCKernelPost(level);
+    this->bcKernelManager->runPressureBCKernelPost(level);
 
     //////////////////////////////////////////////////////////////////////////
     // P R E C U R S O R
-    this->lbKernelManager->runPrecursorBCKernelPost(level, t, cudaMemoryManager.get());
+    this->bcKernelManager->runPrecursorBCKernelPost(level, t, cudaMemoryManager.get());
 
     //////////////////////////////////////////////////////////////////////////
     // A D V E C T I O N    D I F F U S I O N
@@ -425,19 +425,19 @@ void UpdateGrid27::preCollisionBC(int level, unsigned int t)
 {
     //////////////////////////////////////////////////////////////////////////
     // V E L O C I T Y (I N F L O W)
-    this->lbKernelManager->runVelocityBCKernelPre(level);
+    this->bcKernelManager->runVelocityBCKernelPre(level);
 
     //////////////////////////////////////////////////////////////////////////
     // G E O M E T R Y
-    this->lbKernelManager->runGeoBCKernelPre(level, t, cudaMemoryManager.get());
+    this->bcKernelManager->runGeoBCKernelPre(level, t, cudaMemoryManager.get());
 
     //////////////////////////////////////////////////////////////////////////
     // P R E S S U R E
-    this->lbKernelManager->runPressureBCKernelPre(level);
+    this->bcKernelManager->runPressureBCKernelPre(level);
 
     //////////////////////////////////////////////////////////////////////////
     // O U T F L O W
-    this->lbKernelManager->runOutflowBCKernelPre(level);
+    this->bcKernelManager->runOutflowBCKernelPre(level);
 
     //////////////////////////////////////////////////////////////////////////////////
     ////only for a round off error test
@@ -498,17 +498,16 @@ void calcTurbulentViscosity(Parameter* para, int level)
 
 
 UpdateGrid27::UpdateGrid27(SPtr<Parameter> para, vf::gpu::Communicator &comm, SPtr<CudaMemoryManager> cudaManager,
-                           std::vector<std::shared_ptr<PorousMedia>> &pm, std::vector<SPtr<Kernel>> &kernels)
+                           std::vector<std::shared_ptr<PorousMedia>> &pm, std::vector<SPtr<Kernel>> &kernels , BoundaryConditionFactory* bcFactory)
     : para(para), comm(comm), cudaMemoryManager(cudaManager), pm(pm), kernels(kernels)
 {
     chooseFunctionForCollisionAndExchange();
     chooseFunctionForRefinementAndExchange();
-    this->lbKernelManager = LBKernelManager::make(para);
-    this->adKernelManager = ADKernelManager::make(para);
-    this->gridScalingKernelManager = GridScalingKernelManager::make(para);
+    this->bcKernelManager = std::make_shared<BCKernelManager>(para, bcFactory);
+    this->adKernelManager = std::make_shared<ADKernelManager>(para);
+    this->gridScalingKernelManager =  std::make_shared<GridScalingKernelManager>(para);
 }
 
-
 void UpdateGrid27::chooseFunctionForCollisionAndExchange()
 {
     std::cout << "Function used for collisionAndExchange: ";
diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
index 4648ad79dc9073408c8a2f84129f2e6a13021fbb..d8014c63b770c5886930073bdc06fa261add3922 100644
--- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
+++ b/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h
@@ -8,19 +8,19 @@
 #include "Communication/Communicator.h"
 #include "Calculation/PorousMedia.h"
 
-class LBKernelManager;
+class BCKernelManager;
 class ADKernelManager;
 class GridScalingKernelManager;
 class Kernel;
+class BoundaryConditionFactory;
 
 class UpdateGrid27
 {
 public:
     UpdateGrid27(SPtr<Parameter> para, vf::gpu::Communicator &comm, SPtr<CudaMemoryManager> cudaManager,
-                 std::vector<std::shared_ptr<PorousMedia>> &pm, std::vector<SPtr<Kernel>> &kernels);
+                 std::vector<std::shared_ptr<PorousMedia>> &pm, std::vector<SPtr<Kernel>> &kernels, BoundaryConditionFactory* bcFactory);
     void updateGrid(int level, unsigned int t);
 
-
 private:
     void postCollisionBC(int level, unsigned int t);
     void preCollisionBC(int level, unsigned int t);
@@ -62,7 +62,7 @@ private:
     std::vector<std::shared_ptr<PorousMedia>> pm;
     std::vector<SPtr<Kernel>> kernels;
     //! \property lbKernelManager is a shared pointer to an object of LBKernelManager
-    std::shared_ptr<LBKernelManager> lbKernelManager;
+    std::shared_ptr<BCKernelManager> bcKernelManager;
     //! \property adKernelManager is a shared pointer to an object of ADKernelManager
     std::shared_ptr<ADKernelManager> adKernelManager;
     //! \property gridScalingKernelManager is a shared pointer to an object of GridScalingKernelManager
diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp
index d39b67c428cd36cf2fa4a7ee4bf60c804f6b51fd..8986837b502dd6a8b1ec6d8be06318eb4c4d6cc8 100644
--- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp
+++ b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp
@@ -1,7 +1,10 @@
+#include <helper_cuda.h>
+#include <cuda_runtime.h>
+
 #include "Communication/ExchangeData27.h"
 #include "Parameter/CudaStreamManager.h"
-#include <cuda_runtime.h>
-#include <helper_cuda.h>
+
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 // 3D domain decomposition
@@ -90,7 +93,7 @@ void copyEdgeNodes(std::vector<LBMSimulationParameter::EdgeNodePositions> &edgeN
         }
 
         // copy fs for all directions
-        for (int direction = 0; direction <= (int)dirEND; direction++) {
+        for (int direction = 0; direction <= (int)ENDDIR; direction++) {
             (sendProcessNeighborHost[indexInSubdomainSend].f[0] +
              (direction * numNodesInBufferSend))[edgeNodes[i].indexInSendBuffer] =
                 (recvProcessNeighborHost[indexInSubdomainRecv].f[0] +
diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cfg b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cfg
deleted file mode 100644
index e414d4f3173e555b8944fa9637ebbd2023ce393c..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-# these two parameters need to be defined in each config file
-Path = /output/path
-GridPath = /path/to/grid
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
index 3afedfb061211a15b74573d4e6043e8c3e59671b..473e8c1a5424cf7ddd05f6ed0a534814a3971dc6 100644
--- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
+++ b/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp
@@ -7,18 +7,9 @@
 
 #include <basics/config/ConfigurationFile.h>
 
-SPtr<Parameter> initParameterClass()
-{
-    std::filesystem::path filePath = __FILE__; //  assuming that the config file is stored parallel to this file.
-    filePath.replace_filename("ExchangeData27Test.cfg");
-    vf::basics::ConfigurationFile config;
-    config.load(filePath.string());
-    return std::make_shared<Parameter>(config, 1, 0);
-}
-
 void setUpFsByCopyingF0(std::vector<real> &distributionVector, int numberOfNodes)
 {
-    for (uint direction = 0; direction < dirEND; direction++) {
+    for (uint direction = 0; direction < vf::lbm::dir::ENDDIR; direction++) {
         distributionVector.insert(distributionVector.end(), distributionVector.begin(),
                                   distributionVector.begin() + numberOfNodes);
     }
@@ -37,7 +28,7 @@ protected:
 
     void SetUp() override
     {
-        para = initParameterClass();
+        para = std::make_shared<Parameter>();
         para->setMaxLevel(level + 1);       // setMaxLevel resizes parH
         para->initLBMSimulationParameter(); // init parH
 
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
index 69fc2f70f6d8ca89f36b9a1fb731a1302df0681d..559abf12377f8e0b587753f1d225da8944d843fd 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp
@@ -117,8 +117,6 @@ void GridProvider::setVelocitySizePerLevel(int level, int sizePerLevel) const
 {
     para->getParH(level)->velocityBC.numberOfBCnodes = sizePerLevel;
     para->getParD(level)->velocityBC.numberOfBCnodes = sizePerLevel;
-    para->getParH(level)->numberOfVeloBCnodes = sizePerLevel;
-    para->getParD(level)->numberOfVeloBCnodes = sizePerLevel;
     para->getParH(level)->numberOfVeloBCnodesRead = sizePerLevel * para->getD3Qxx();
     para->getParD(level)->numberOfVeloBCnodesRead = sizePerLevel * para->getD3Qxx();
 }
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
index 6cd1040807249bf24bb472da81e26ba5bf23064b..da4ba9d8b4ad094437ec17b17e7ea653842bf83e 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp
@@ -11,6 +11,8 @@
 #include <GPU/CudaMemoryManager.h>
 #include "OffsetScale.h"
 
+using namespace vf::lbm::dir;
+
 GridReader::GridReader(FILEFORMAT format, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager)
 {
     this->para = para;
@@ -658,9 +660,9 @@ void GridReader::modifyQElement(std::shared_ptr<BoundaryQs> boundaryQ, unsigned
 {
 	QforBoundaryConditions Q;
 	real* QQ = para->getParH(level)->geometryBC.q27[0];
-	Q.q27[dirZERO] = &QQ[dirZERO * para->getParH(level)->geometryBC.numberOfBCnodes];
+	Q.q27[vf::lbm::dir::REST] = &QQ[vf::lbm::dir::REST * para->getParH(level)->geometryBC.numberOfBCnodes];
 	for (unsigned int i = 0; i < boundaryQ->getSize(level); i++)
-		Q.q27[dirZERO][i] = 0.0f;
+		Q.q27[vf::lbm::dir::REST][i] = 0.0f;
 }
 
 /*------------------------------------------------------------------------------------------------*/
@@ -731,41 +733,39 @@ void GridReader::initalGridInformations()
 
 void GridReader::setQ27Size(QforBoundaryConditions &Q, real* QQ, unsigned int sizeQ) const
 {
-	Q.q27[dirE] = &QQ[dirE   *sizeQ];
-	Q.q27[dirW] = &QQ[dirW   *sizeQ];
-	Q.q27[dirN] = &QQ[dirN   *sizeQ];
-	Q.q27[dirS] = &QQ[dirS   *sizeQ];
-	Q.q27[dirT] = &QQ[dirT   *sizeQ];
-	Q.q27[dirB] = &QQ[dirB   *sizeQ];
-	Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-	Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-	Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-	Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-	Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-	Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-	Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-	Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-	Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-	Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-	Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-	Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-	Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-	Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-	Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-	Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-	Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-	Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-	Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-	Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-	Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+	Q.q27[E] = &QQ[E   *sizeQ];
+	Q.q27[W] = &QQ[W   *sizeQ];
+	Q.q27[N] = &QQ[N   *sizeQ];
+	Q.q27[S] = &QQ[S   *sizeQ];
+	Q.q27[T] = &QQ[T   *sizeQ];
+	Q.q27[B] = &QQ[B   *sizeQ];
+	Q.q27[NE] = &QQ[NE  *sizeQ];
+	Q.q27[SW] = &QQ[SW  *sizeQ];
+	Q.q27[SE] = &QQ[SE  *sizeQ];
+	Q.q27[NW] = &QQ[NW  *sizeQ];
+	Q.q27[TE] = &QQ[TE  *sizeQ];
+	Q.q27[BW] = &QQ[BW  *sizeQ];
+	Q.q27[BE] = &QQ[BE  *sizeQ];
+	Q.q27[TW] = &QQ[TW  *sizeQ];
+	Q.q27[TN] = &QQ[TN  *sizeQ];
+	Q.q27[BS] = &QQ[BS  *sizeQ];
+	Q.q27[BN] = &QQ[BN  *sizeQ];
+	Q.q27[TS] = &QQ[TS  *sizeQ];
+	Q.q27[REST] = &QQ[REST*sizeQ];
+	Q.q27[TNE] = &QQ[TNE *sizeQ];
+	Q.q27[TSW] = &QQ[TSW *sizeQ];
+	Q.q27[TSE] = &QQ[TSE *sizeQ];
+	Q.q27[TNW] = &QQ[TNW *sizeQ];
+	Q.q27[BNE] = &QQ[BNE *sizeQ];
+	Q.q27[BSW] = &QQ[BSW *sizeQ];
+	Q.q27[BSE] = &QQ[BSE *sizeQ];
+	Q.q27[BNW] = &QQ[BNW *sizeQ];
 }
 
 void GridReader::setSizeNoSlip(std::shared_ptr<BoundaryQs> boundaryQ, unsigned int level) const
 {
 	para->getParH(level)->noSlipBC.numberOfBCnodes = boundaryQ->getSize(level);
 	para->getParD(level)->noSlipBC.numberOfBCnodes = para->getParH(level)->noSlipBC.numberOfBCnodes;
-	para->getParH(level)->numberOfNoSlipBCnodes = para->getParH(level)->noSlipBC.numberOfBCnodes;
-	para->getParD(level)->numberOfNoSlipBCnodes = para->getParH(level)->noSlipBC.numberOfBCnodes;
     cudaMemoryManager->cudaAllocWallBC(level);
 }
 
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
index cc5a188e0f7ce1e3704bd4328958ff6e9591ef3d..d2d04e8c84f55f60f476e753959ab5a9002b3c84 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp
@@ -1,8 +1,8 @@
 #include "GridGenerator.h"
 
 #include "Parameter/Parameter.h"
-#include <GridGenerator/grid/GridBuilder/GridBuilder.h>
-#include <GPU/CudaMemoryManager.h>
+#include "GridGenerator/grid/GridBuilder/GridBuilder.h"
+#include "GPU/CudaMemoryManager.h"
 #include "IndexRearrangementForStreams.h"
 
 #include <sstream>
@@ -14,6 +14,7 @@
 
 #include "utilities/communication.h"
 
+using namespace vf::lbm::dir;
 
 GridGenerator::GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::gpu::Communicator& communicator)
 {
@@ -140,8 +141,6 @@ void GridGenerator::allocArrays_BoundaryValues()
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         para->getParH(level)->slipBC.numberOfBCnodes = numberOfSlipValues;
         para->getParD(level)->slipBC.numberOfBCnodes = numberOfSlipValues;
-        para->getParH(level)->numberOfSlipBCnodes   = numberOfSlipValues;
-        para->getParD(level)->numberOfSlipBCnodes   = numberOfSlipValues;
         para->getParH(level)->numberOfSlipBCnodesRead = numberOfSlipValues * para->getD3Qxx();
         para->getParD(level)->numberOfSlipBCnodesRead = numberOfSlipValues * para->getD3Qxx();
         if (numberOfSlipValues > 1)
@@ -159,8 +158,6 @@ void GridGenerator::allocArrays_BoundaryValues()
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         para->getParH(level)->stressBC.numberOfBCnodes = numberOfStressValues;
         para->getParD(level)->stressBC.numberOfBCnodes = numberOfStressValues;
-        para->getParH(level)->numberOfStressBCnodes   = numberOfStressValues;
-        para->getParD(level)->numberOfStressBCnodes   = numberOfStressValues;
         para->getParH(level)->numberOfStressBCnodesRead = numberOfStressValues * para->getD3Qxx();
         para->getParD(level)->numberOfStressBCnodesRead = numberOfStressValues * para->getD3Qxx();
 
@@ -191,8 +188,6 @@ void GridGenerator::allocArrays_BoundaryValues()
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         para->getParH(level)->velocityBC.numberOfBCnodes = numberOfVelocityValues;
         para->getParD(level)->velocityBC.numberOfBCnodes = numberOfVelocityValues;
-        para->getParH(level)->numberOfVeloBCnodes = numberOfVelocityValues;
-        para->getParD(level)->numberOfVeloBCnodes = numberOfVelocityValues;
         para->getParH(level)->numberOfVeloBCnodesRead = numberOfVelocityValues * para->getD3Qxx();
         para->getParD(level)->numberOfVeloBCnodesRead = numberOfVelocityValues * para->getD3Qxx();
 
@@ -247,8 +242,6 @@ void GridGenerator::allocArrays_BoundaryValues()
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         para->getParH(level)->precursorBC.numberOfBCnodes = numberOfPrecursorValues;
         para->getParD(level)->precursorBC.numberOfBCnodes = numberOfPrecursorValues;
-        para->getParH(level)->numberOfPrecursorBCnodes = numberOfPrecursorValues;
-        para->getParD(level)->numberOfPrecursorBCnodes = numberOfPrecursorValues;
         para->getParH(level)->numberOfPrecursorBCnodesRead = numberOfPrecursorValues * para->getD3Qxx();
         para->getParD(level)->numberOfPrecursorBCnodesRead = numberOfPrecursorValues * para->getD3Qxx();
 
@@ -858,33 +851,33 @@ void GridGenerator::allocArrays_BoundaryQs()
             real* QQ = para->getParH(i)->pressureBC.q27[0];
             unsigned int sizeQ = para->getParH(i)->pressureBC.numberOfBCnodes;
             QforBoundaryConditions Q;
-            Q.q27[dirE] = &QQ[dirE   *sizeQ];
-            Q.q27[dirW] = &QQ[dirW   *sizeQ];
-            Q.q27[dirN] = &QQ[dirN   *sizeQ];
-            Q.q27[dirS] = &QQ[dirS   *sizeQ];
-            Q.q27[dirT] = &QQ[dirT   *sizeQ];
-            Q.q27[dirB] = &QQ[dirB   *sizeQ];
-            Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-            Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-            Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-            Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-            Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-            Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-            Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-            Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-            Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-            Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-            Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-            Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-            Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-            Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-            Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-            Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-            Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-            Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-            Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-            Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-            Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+            Q.q27[E] = &QQ[E   *sizeQ];
+            Q.q27[W] = &QQ[W   *sizeQ];
+            Q.q27[N] = &QQ[N   *sizeQ];
+            Q.q27[S] = &QQ[S   *sizeQ];
+            Q.q27[T] = &QQ[T   *sizeQ];
+            Q.q27[B] = &QQ[B   *sizeQ];
+            Q.q27[NE] = &QQ[NE  *sizeQ];
+            Q.q27[SW] = &QQ[SW  *sizeQ];
+            Q.q27[SE] = &QQ[SE  *sizeQ];
+            Q.q27[NW] = &QQ[NW  *sizeQ];
+            Q.q27[TE] = &QQ[TE  *sizeQ];
+            Q.q27[BW] = &QQ[BW  *sizeQ];
+            Q.q27[BE] = &QQ[BE  *sizeQ];
+            Q.q27[TW] = &QQ[TW  *sizeQ];
+            Q.q27[TN] = &QQ[TN  *sizeQ];
+            Q.q27[BS] = &QQ[BS  *sizeQ];
+            Q.q27[BN] = &QQ[BN  *sizeQ];
+            Q.q27[TS] = &QQ[TS  *sizeQ];
+            Q.q27[REST] = &QQ[REST*sizeQ];
+            Q.q27[TNE] = &QQ[TNE *sizeQ];
+            Q.q27[TSW] = &QQ[TSW *sizeQ];
+            Q.q27[TSE] = &QQ[TSE *sizeQ];
+            Q.q27[TNW] = &QQ[TNW *sizeQ];
+            Q.q27[BNE] = &QQ[BNE *sizeQ];
+            Q.q27[BSW] = &QQ[BSW *sizeQ];
+            Q.q27[BSE] = &QQ[BSE *sizeQ];
+            Q.q27[BNW] = &QQ[BNW *sizeQ];
             
             builder->getPressureQs(Q.q27, i);
 
@@ -931,33 +924,33 @@ void GridGenerator::allocArrays_BoundaryQs()
             real* QQ = para->getParH(i)->slipBC.q27[0];
             unsigned int sizeQ = para->getParH(i)->slipBC.numberOfBCnodes;
             QforBoundaryConditions Q;
-            Q.q27[dirE] = &QQ[dirE   *sizeQ];
-            Q.q27[dirW] = &QQ[dirW   *sizeQ];
-            Q.q27[dirN] = &QQ[dirN   *sizeQ];
-            Q.q27[dirS] = &QQ[dirS   *sizeQ];
-            Q.q27[dirT] = &QQ[dirT   *sizeQ];
-            Q.q27[dirB] = &QQ[dirB   *sizeQ];
-            Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-            Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-            Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-            Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-            Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-            Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-            Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-            Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-            Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-            Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-            Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-            Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-            Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-            Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-            Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-            Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-            Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-            Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-            Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-            Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-            Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+            Q.q27[E] = &QQ[E   *sizeQ];
+            Q.q27[W] = &QQ[W   *sizeQ];
+            Q.q27[N] = &QQ[N   *sizeQ];
+            Q.q27[S] = &QQ[S   *sizeQ];
+            Q.q27[T] = &QQ[T   *sizeQ];
+            Q.q27[B] = &QQ[B   *sizeQ];
+            Q.q27[NE] = &QQ[NE  *sizeQ];
+            Q.q27[SW] = &QQ[SW  *sizeQ];
+            Q.q27[SE] = &QQ[SE  *sizeQ];
+            Q.q27[NW] = &QQ[NW  *sizeQ];
+            Q.q27[TE] = &QQ[TE  *sizeQ];
+            Q.q27[BW] = &QQ[BW  *sizeQ];
+            Q.q27[BE] = &QQ[BE  *sizeQ];
+            Q.q27[TW] = &QQ[TW  *sizeQ];
+            Q.q27[TN] = &QQ[TN  *sizeQ];
+            Q.q27[BS] = &QQ[BS  *sizeQ];
+            Q.q27[BN] = &QQ[BN  *sizeQ];
+            Q.q27[TS] = &QQ[TS  *sizeQ];
+            Q.q27[REST] = &QQ[REST*sizeQ];
+            Q.q27[TNE] = &QQ[TNE *sizeQ];
+            Q.q27[TSW] = &QQ[TSW *sizeQ];
+            Q.q27[TSE] = &QQ[TSE *sizeQ];
+            Q.q27[TNW] = &QQ[TNW *sizeQ];
+            Q.q27[BNE] = &QQ[BNE *sizeQ];
+            Q.q27[BSW] = &QQ[BSW *sizeQ];
+            Q.q27[BSE] = &QQ[BSE *sizeQ];
+            Q.q27[BNW] = &QQ[BNW *sizeQ];
             
             builder->getSlipQs(Q.q27, i);
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -977,33 +970,33 @@ void GridGenerator::allocArrays_BoundaryQs()
             real* QQ = para->getParH(i)->stressBC.q27[0];
             unsigned int sizeQ = para->getParH(i)->stressBC.numberOfBCnodes;
             QforBoundaryConditions Q;
-            Q.q27[dirE] = &QQ[dirE   *sizeQ];
-            Q.q27[dirW] = &QQ[dirW   *sizeQ];
-            Q.q27[dirN] = &QQ[dirN   *sizeQ];
-            Q.q27[dirS] = &QQ[dirS   *sizeQ];
-            Q.q27[dirT] = &QQ[dirT   *sizeQ];
-            Q.q27[dirB] = &QQ[dirB   *sizeQ];
-            Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-            Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-            Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-            Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-            Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-            Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-            Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-            Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-            Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-            Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-            Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-            Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-            Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-            Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-            Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-            Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-            Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-            Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-            Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-            Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-            Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+            Q.q27[E] = &QQ[E   *sizeQ];
+            Q.q27[W] = &QQ[W   *sizeQ];
+            Q.q27[N] = &QQ[N   *sizeQ];
+            Q.q27[S] = &QQ[S   *sizeQ];
+            Q.q27[T] = &QQ[T   *sizeQ];
+            Q.q27[B] = &QQ[B   *sizeQ];
+            Q.q27[NE] = &QQ[NE  *sizeQ];
+            Q.q27[SW] = &QQ[SW  *sizeQ];
+            Q.q27[SE] = &QQ[SE  *sizeQ];
+            Q.q27[NW] = &QQ[NW  *sizeQ];
+            Q.q27[TE] = &QQ[TE  *sizeQ];
+            Q.q27[BW] = &QQ[BW  *sizeQ];
+            Q.q27[BE] = &QQ[BE  *sizeQ];
+            Q.q27[TW] = &QQ[TW  *sizeQ];
+            Q.q27[TN] = &QQ[TN  *sizeQ];
+            Q.q27[BS] = &QQ[BS  *sizeQ];
+            Q.q27[BN] = &QQ[BN  *sizeQ];
+            Q.q27[TS] = &QQ[TS  *sizeQ];
+            Q.q27[REST] = &QQ[REST*sizeQ];
+            Q.q27[TNE] = &QQ[TNE *sizeQ];
+            Q.q27[TSW] = &QQ[TSW *sizeQ];
+            Q.q27[TSE] = &QQ[TSE *sizeQ];
+            Q.q27[TNW] = &QQ[TNW *sizeQ];
+            Q.q27[BNE] = &QQ[BNE *sizeQ];
+            Q.q27[BSW] = &QQ[BSW *sizeQ];
+            Q.q27[BSE] = &QQ[BSE *sizeQ];
+            Q.q27[BNW] = &QQ[BNW *sizeQ];
             
             builder->getStressQs(Q.q27, i);
             ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1023,33 +1016,33 @@ void GridGenerator::allocArrays_BoundaryQs()
             real* QQ = para->getParH(i)->velocityBC.q27[0];
             unsigned int sizeQ = para->getParH(i)->velocityBC.numberOfBCnodes;
             QforBoundaryConditions Q;
-            Q.q27[dirE] = &QQ[dirE   *sizeQ];
-            Q.q27[dirW] = &QQ[dirW   *sizeQ];
-            Q.q27[dirN] = &QQ[dirN   *sizeQ];
-            Q.q27[dirS] = &QQ[dirS   *sizeQ];
-            Q.q27[dirT] = &QQ[dirT   *sizeQ];
-            Q.q27[dirB] = &QQ[dirB   *sizeQ];
-            Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-            Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-            Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-            Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-            Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-            Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-            Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-            Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-            Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-            Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-            Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-            Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-            Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-            Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-            Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-            Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-            Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-            Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-            Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-            Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-            Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+            Q.q27[E] = &QQ[E   *sizeQ];
+            Q.q27[W] = &QQ[W   *sizeQ];
+            Q.q27[N] = &QQ[N   *sizeQ];
+            Q.q27[S] = &QQ[S   *sizeQ];
+            Q.q27[T] = &QQ[T   *sizeQ];
+            Q.q27[B] = &QQ[B   *sizeQ];
+            Q.q27[NE] = &QQ[NE  *sizeQ];
+            Q.q27[SW] = &QQ[SW  *sizeQ];
+            Q.q27[SE] = &QQ[SE  *sizeQ];
+            Q.q27[NW] = &QQ[NW  *sizeQ];
+            Q.q27[TE] = &QQ[TE  *sizeQ];
+            Q.q27[BW] = &QQ[BW  *sizeQ];
+            Q.q27[BE] = &QQ[BE  *sizeQ];
+            Q.q27[TW] = &QQ[TW  *sizeQ];
+            Q.q27[TN] = &QQ[TN  *sizeQ];
+            Q.q27[BS] = &QQ[BS  *sizeQ];
+            Q.q27[BN] = &QQ[BN  *sizeQ];
+            Q.q27[TS] = &QQ[TS  *sizeQ];
+            Q.q27[REST] = &QQ[REST*sizeQ];
+            Q.q27[TNE] = &QQ[TNE *sizeQ];
+            Q.q27[TSW] = &QQ[TSW *sizeQ];
+            Q.q27[TSE] = &QQ[TSE *sizeQ];
+            Q.q27[TNW] = &QQ[TNW *sizeQ];
+            Q.q27[BNE] = &QQ[BNE *sizeQ];
+            Q.q27[BSW] = &QQ[BSW *sizeQ];
+            Q.q27[BSE] = &QQ[BSE *sizeQ];
+            Q.q27[BNW] = &QQ[BNW *sizeQ];
 
             builder->getVelocityQs(Q.q27, i);
 
@@ -1091,33 +1084,33 @@ void GridGenerator::allocArrays_BoundaryQs()
             real* QQ = para->getParH(i)->precursorBC.q27[0];
             unsigned int sizeQ = para->getParH(i)->precursorBC.numberOfBCnodes;
             QforBoundaryConditions Q;
-            Q.q27[dirE] = &QQ[dirE   *sizeQ];
-            Q.q27[dirW] = &QQ[dirW   *sizeQ];
-            Q.q27[dirN] = &QQ[dirN   *sizeQ];
-            Q.q27[dirS] = &QQ[dirS   *sizeQ];
-            Q.q27[dirT] = &QQ[dirT   *sizeQ];
-            Q.q27[dirB] = &QQ[dirB   *sizeQ];
-            Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-            Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-            Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-            Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-            Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-            Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-            Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-            Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-            Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-            Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-            Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-            Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-            Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-            Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-            Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-            Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-            Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-            Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-            Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-            Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-            Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+            Q.q27[E] = &QQ[E   *sizeQ];
+            Q.q27[W] = &QQ[W   *sizeQ];
+            Q.q27[N] = &QQ[N   *sizeQ];
+            Q.q27[S] = &QQ[S   *sizeQ];
+            Q.q27[T] = &QQ[T   *sizeQ];
+            Q.q27[B] = &QQ[B   *sizeQ];
+            Q.q27[NE] = &QQ[NE  *sizeQ];
+            Q.q27[SW] = &QQ[SW  *sizeQ];
+            Q.q27[SE] = &QQ[SE  *sizeQ];
+            Q.q27[NW] = &QQ[NW  *sizeQ];
+            Q.q27[TE] = &QQ[TE  *sizeQ];
+            Q.q27[BW] = &QQ[BW  *sizeQ];
+            Q.q27[BE] = &QQ[BE  *sizeQ];
+            Q.q27[TW] = &QQ[TW  *sizeQ];
+            Q.q27[TN] = &QQ[TN  *sizeQ];
+            Q.q27[BS] = &QQ[BS  *sizeQ];
+            Q.q27[BN] = &QQ[BN  *sizeQ];
+            Q.q27[TS] = &QQ[TS  *sizeQ];
+            Q.q27[REST] = &QQ[REST*sizeQ];
+            Q.q27[TNE] = &QQ[TNE *sizeQ];
+            Q.q27[TSW] = &QQ[TSW *sizeQ];
+            Q.q27[TSE] = &QQ[TSE *sizeQ];
+            Q.q27[TNW] = &QQ[TNW *sizeQ];
+            Q.q27[BNE] = &QQ[BNE *sizeQ];
+            Q.q27[BSW] = &QQ[BSW *sizeQ];
+            Q.q27[BSE] = &QQ[BSE *sizeQ];
+            Q.q27[BNW] = &QQ[BNW *sizeQ];
 
             builder->getPrecursorQs(Q.q27, i);
 
@@ -1176,33 +1169,33 @@ void GridGenerator::allocArrays_BoundaryQs()
             real* QQ = para->getParH(i)->geometryBC.q27[0];
             unsigned int sizeQ = para->getParH(i)->geometryBC.numberOfBCnodes;
             QforBoundaryConditions Q;
-            Q.q27[dirE] = &QQ[dirE   *sizeQ];
-            Q.q27[dirW] = &QQ[dirW   *sizeQ];
-            Q.q27[dirN] = &QQ[dirN   *sizeQ];
-            Q.q27[dirS] = &QQ[dirS   *sizeQ];
-            Q.q27[dirT] = &QQ[dirT   *sizeQ];
-            Q.q27[dirB] = &QQ[dirB   *sizeQ];
-            Q.q27[dirNE] = &QQ[dirNE  *sizeQ];
-            Q.q27[dirSW] = &QQ[dirSW  *sizeQ];
-            Q.q27[dirSE] = &QQ[dirSE  *sizeQ];
-            Q.q27[dirNW] = &QQ[dirNW  *sizeQ];
-            Q.q27[dirTE] = &QQ[dirTE  *sizeQ];
-            Q.q27[dirBW] = &QQ[dirBW  *sizeQ];
-            Q.q27[dirBE] = &QQ[dirBE  *sizeQ];
-            Q.q27[dirTW] = &QQ[dirTW  *sizeQ];
-            Q.q27[dirTN] = &QQ[dirTN  *sizeQ];
-            Q.q27[dirBS] = &QQ[dirBS  *sizeQ];
-            Q.q27[dirBN] = &QQ[dirBN  *sizeQ];
-            Q.q27[dirTS] = &QQ[dirTS  *sizeQ];
-            Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-            Q.q27[dirTNE] = &QQ[dirTNE *sizeQ];
-            Q.q27[dirTSW] = &QQ[dirTSW *sizeQ];
-            Q.q27[dirTSE] = &QQ[dirTSE *sizeQ];
-            Q.q27[dirTNW] = &QQ[dirTNW *sizeQ];
-            Q.q27[dirBNE] = &QQ[dirBNE *sizeQ];
-            Q.q27[dirBSW] = &QQ[dirBSW *sizeQ];
-            Q.q27[dirBSE] = &QQ[dirBSE *sizeQ];
-            Q.q27[dirBNW] = &QQ[dirBNW *sizeQ];
+            Q.q27[E] = &QQ[E   *sizeQ];
+            Q.q27[W] = &QQ[W   *sizeQ];
+            Q.q27[N] = &QQ[N   *sizeQ];
+            Q.q27[S] = &QQ[S   *sizeQ];
+            Q.q27[T] = &QQ[T   *sizeQ];
+            Q.q27[B] = &QQ[B   *sizeQ];
+            Q.q27[NE] = &QQ[NE  *sizeQ];
+            Q.q27[SW] = &QQ[SW  *sizeQ];
+            Q.q27[SE] = &QQ[SE  *sizeQ];
+            Q.q27[NW] = &QQ[NW  *sizeQ];
+            Q.q27[TE] = &QQ[TE  *sizeQ];
+            Q.q27[BW] = &QQ[BW  *sizeQ];
+            Q.q27[BE] = &QQ[BE  *sizeQ];
+            Q.q27[TW] = &QQ[TW  *sizeQ];
+            Q.q27[TN] = &QQ[TN  *sizeQ];
+            Q.q27[BS] = &QQ[BS  *sizeQ];
+            Q.q27[BN] = &QQ[BN  *sizeQ];
+            Q.q27[TS] = &QQ[TS  *sizeQ];
+            Q.q27[REST] = &QQ[REST*sizeQ];
+            Q.q27[TNE] = &QQ[TNE *sizeQ];
+            Q.q27[TSW] = &QQ[TSW *sizeQ];
+            Q.q27[TSE] = &QQ[TSE *sizeQ];
+            Q.q27[TNW] = &QQ[TNW *sizeQ];
+            Q.q27[BNE] = &QQ[BNE *sizeQ];
+            Q.q27[BSW] = &QQ[BSW *sizeQ];
+            Q.q27[BSE] = &QQ[BSE *sizeQ];
+            Q.q27[BNW] = &QQ[BNW *sizeQ];
             //////////////////////////////////////////////////////////////////
 
             builder->getGeometryQs(Q.q27, i);
@@ -1210,7 +1203,7 @@ void GridGenerator::allocArrays_BoundaryQs()
             //////////////////////////////////////////////////////////////////
             for (int node_i = 0; node_i < numberOfGeometryNodes; node_i++)
             {
-                Q.q27[dirZERO][node_i] = 0.0f;
+                Q.q27[REST][node_i] = 0.0f;
             }
             //for(int test = 0; test < 3; test++)
             //{
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cfg b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cfg
deleted file mode 100644
index e414d4f3173e555b8944fa9637ebbd2023ce393c..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-# these two parameters need to be defined in each config file
-Path = /output/path
-GridPath = /path/to/grid
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp
index f8aa867d17624851f8beb85bf8cf564b5289531a..405370c905adc9937badde2f6e54f2d54942056b 100644
--- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp
@@ -99,15 +99,6 @@ struct CFBorderBulk {
     std::vector<real> offsetCFz_Bulk_expected   = { 1001, 1003, 1005, 1007 };
 };
 
-static SPtr<Parameter> initParameterClass()
-{
-    std::filesystem::path filePath = __FILE__; //  assuming that the config file is stored parallel to this file.
-    filePath.replace_filename("IndexRearrangementForStreamsTest.cfg");
-    vf::basics::ConfigurationFile config;
-    config.load(filePath.string());
-    return std::make_shared<Parameter>(config, 1, 0);
-}
-
 class IndexRearrangementForStreamsTest_IndicesCFBorderBulkTest : public testing::Test
 {
 protected:
@@ -141,7 +132,7 @@ private:
 
     void SetUp() override
     {
-        para        = initParameterClass();
+        para = std::make_shared<Parameter>(1, 0);
         testSubject = createTestSubjectCFBorderBulk();
     }
 };
@@ -223,7 +214,7 @@ private:
 
     void SetUp() override
     {
-        para        = initParameterClass();
+        para        = std::make_shared<Parameter>();
         testSubject = createTestSubjectFCBorderBulk();
     }
 };
@@ -322,7 +313,7 @@ private:
 
     void SetUp() override
     {
-        para        = initParameterClass();
+        para        = std::make_shared<Parameter>();
         testSubject = createTestSubjectReorderSendIndices();
     };
 };
diff --git a/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h b/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h
index 0053494d62bf13c2bf87a9f589baef42940865ae..056c25d39489abc9ae9491f771f05d345a57d02a 100644
--- a/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h
+++ b/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h
@@ -2,7 +2,7 @@
 #define FINDINTERFACE_H
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 
 
 extern "C" void interpolation(InterpolationCellCF &intCF, InterpolationCellFC &intFC, 
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp b/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp
index 7333a7fdd3427aef3ab7999b3698fa900c8fd209..a67f1d987cb9636ee447c5f5acd1410c44cb6a62 100644
--- a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp
+++ b/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp
@@ -30,20 +30,14 @@ void findQ27(Parameter* para, CudaMemoryManager* cudaMemoryManager)
    for (int lev = para->getFine(); lev >= para->getCoarse(); lev--)
    {
       findKforQ(para, lev);
-
-      para->getParH(lev)->numberOfNoSlipBCnodes       = para->getParH(lev)->noSlipBC.numberOfBCnodes;
-	  para->getParD(lev)->numberOfNoSlipBCnodes       = para->getParH(lev)->noSlipBC.numberOfBCnodes;
-	  para->getParD(lev)->noSlipBC.numberOfBCnodes = para->getParH(lev)->noSlipBC.numberOfBCnodes;
-      printf("numberOfBCnodes= %d\n", para->getParH(lev)->numberOfNoSlipBCnodes);
+	   para->getParD(lev)->noSlipBC.numberOfBCnodes = para->getParH(lev)->noSlipBC.numberOfBCnodes;
+      printf("numberOfBCnodes= %d\n", para->getParH(lev)->noSlipBC.numberOfBCnodes);
 
 	  cudaMemoryManager->cudaAllocWallBC(lev);
 
       findQ(para, lev);
-
-	  para->getParH(lev)->numberOfNoSlipBCnodes       = para->getParH(lev)->noSlipBC.numberOfBCnodes;
-	  para->getParD(lev)->numberOfNoSlipBCnodes       = para->getParH(lev)->noSlipBC.numberOfBCnodes;
-	  para->getParD(lev)->noSlipBC.numberOfBCnodes = para->getParH(lev)->noSlipBC.numberOfBCnodes;
-      printf("numberOfBCnodes= %d\n", para->getParH(lev)->numberOfNoSlipBCnodes);
+ 	  para->getParD(lev)->noSlipBC.numberOfBCnodes = para->getParH(lev)->noSlipBC.numberOfBCnodes;
+      printf("numberOfBCnodes= %d\n", para->getParH(lev)->noSlipBC.numberOfBCnodes);
 
 	  cudaMemoryManager->cudaCopyWallBC(lev);
    }
@@ -60,9 +54,7 @@ void findBC27(Parameter* para, CudaMemoryManager* cudaMemoryManager)
       //Inflow
       findKforQInflow(para);
 
-      para->getParH(para->getCoarse())->numberOfVeloBCnodes = para->getParH(para->getCoarse())->velocityBC.numberOfBCnodes;
-	  para->getParD(para->getCoarse())->numberOfVeloBCnodes = para->getParH(para->getCoarse())->velocityBC.numberOfBCnodes;
-      printf("numberOfVeloBCnodes= %d\n", para->getParH(para->getCoarse())->numberOfVeloBCnodes);
+      printf("numberOfVeloBCnodes= %d\n", para->getParH(para->getCoarse())->velocityBC.numberOfBCnodes);
 
 	  cudaMemoryManager->cudaAllocVeloBC(0); //level = 0
 
@@ -79,9 +71,7 @@ void findBC27(Parameter* para, CudaMemoryManager* cudaMemoryManager)
    //   //Outflow
 	  // findKforQOutflow(para);
 
-	  // para->getParH(para->getCoarse())->numberOfOutflowBCnodes = para->getParH(para->getCoarse())->outflowBC.numberOfBCnodes;
-	  // para->getParD(para->getCoarse())->numberOfOutflowBCnodes = para->getParH(para->getCoarse())->outflowBC.numberOfBCnodes;
-	  // printf("numberOfOutflowBCnodes= %d\n", para->getParH(para->getCoarse())->numberOfOutflowBCnodes);
+	  // printf("numberOfOutflowBCnodes= %d\n", para->getParH(para->getCoarse())->outflowBC.numberOfBCnodes);
 
 	  // para->cudaAllocPressBC();
 
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h b/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h
index c0a6f0acb9c6b3251d50e81cf505acc791e28d8c..92934f85198f9141c97e78a433049d01f3c4b075 100644
--- a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h
+++ b/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h
@@ -2,7 +2,7 @@
 #define DEFINE_BCS_H
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "Parameter/Parameter.h"
 #include "GPU/CudaMemoryManager.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp b/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp
index 3c7570f7c6e5c641f5ff0397afc5a0ba14b9372d..7932ddf948fa1d1a8941a26821ab58577ae0e70c 100644
--- a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp
+++ b/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp
@@ -1,9 +1,18 @@
 #include "FindQ/FindQ.h"
+#include "logger/Logger.h"
+#include "lbm/constants/D3Q27.h"
 
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 void findQ(Parameter* para, int lev)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+
+   VF_LOG_CRITICAL("findQ() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
    int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -19,8 +28,8 @@ void findQ(Parameter* para, int lev)
    unsigned int nnz             = para->getParH(lev)->gridNZ;
    int* geo_mat                 = para->getParH(lev)->geo;
    unsigned int* kk             = para->getParH(para->getCoarse())->k;
-   unsigned int sizeQ           = para->getParH(lev)->numberOfNoSlipBCnodes;
-   real* QQ                  = para->getParH(lev)->noSlipBC.q27[0];
+   unsigned int sizeQ           = para->getParH(lev)->noSlipBC.numberOfBCnodes;
+   real* QQ                     = para->getParH(lev)->noSlipBC.q27[0];
    QforBoundaryConditions &QIN  = para->getParH(lev)->noSlipBC;
    QIN.numberOfBCnodes = 0;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -32,33 +41,33 @@ void findQ(Parameter* para, int lev)
    //real        radius  = nny / 5.f;//2.56f;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QforBoundaryConditions Q;
-   Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-   Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-   Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-   Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-   Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-   Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-   Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-   Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-   Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-   Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-   Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-   Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-   Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-   Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-   Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-   Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-   Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-   Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-   Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-   Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-   Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-   Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-   Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-   Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-   Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-   Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-   Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+   Q.q27[E   ] = &QQ[E   *sizeQ];
+   Q.q27[W   ] = &QQ[W   *sizeQ];
+   Q.q27[N   ] = &QQ[N   *sizeQ];
+   Q.q27[S   ] = &QQ[S   *sizeQ];
+   Q.q27[T   ] = &QQ[T   *sizeQ];
+   Q.q27[B   ] = &QQ[B   *sizeQ];
+   Q.q27[NE  ] = &QQ[NE  *sizeQ];
+   Q.q27[SW  ] = &QQ[SW  *sizeQ];
+   Q.q27[SE  ] = &QQ[SE  *sizeQ];
+   Q.q27[NW  ] = &QQ[NW  *sizeQ];
+   Q.q27[TE  ] = &QQ[TE  *sizeQ];
+   Q.q27[BW  ] = &QQ[BW  *sizeQ];
+   Q.q27[BE  ] = &QQ[BE  *sizeQ];
+   Q.q27[TW  ] = &QQ[TW  *sizeQ];
+   Q.q27[TN  ] = &QQ[TN  *sizeQ];
+   Q.q27[BS  ] = &QQ[BS  *sizeQ];
+   Q.q27[BN  ] = &QQ[BN  *sizeQ];
+   Q.q27[TS  ] = &QQ[TS  *sizeQ];
+   Q.q27[REST] = &QQ[REST*sizeQ];
+   Q.q27[TNE ] = &QQ[TNE *sizeQ];
+   Q.q27[TSW ] = &QQ[TSW *sizeQ];
+   Q.q27[TSE ] = &QQ[TSE *sizeQ];
+   Q.q27[TNW ] = &QQ[TNW *sizeQ];
+   Q.q27[BNE ] = &QQ[BNE *sizeQ];
+   Q.q27[BSW ] = &QQ[BSW *sizeQ];
+   Q.q27[BSE ] = &QQ[BSE *sizeQ];
+   Q.q27[BNW ] = &QQ[BNW *sizeQ];
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    for(k=STARTOFFZ + 1 ; k<=nnz+STARTOFFZ-2 ; k++){
       for(j=STARTOFFY + 1 ; j<=nny+STARTOFFY-2 ; j++){          //j<=nny/2+STARTOFFY     //j<=STARTOFFY+1
@@ -88,89 +97,89 @@ void findQ(Parameter* para, int lev)
                {
                   QIN.k[QIN.numberOfBCnodes]          = kk[m];
 
-                  //Q.q27[dirE   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirW   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirN   ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirS   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirT   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirB   ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirNE  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirSW  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirSE  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirNW  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirTE  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirBW  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirBE  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirTW  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirTN  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirBS  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirBN  ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirTS  ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirZERO][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirTNE ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirTSW ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirTSE ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirTNW ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirBNE ][QIN.numberOfBCnodes] = 0.f;
-                  //Q.q27[dirBSW ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirBSE ][QIN.numberOfBCnodes] = -1.f;
-                  //Q.q27[dirBNW ][QIN.numberOfBCnodes] = 0.f;
-
-                  //Q.q27[dirE   ][QIN.numberOfBCnodes] = ON[dirW   ];
-                  //Q.q27[dirW   ][QIN.numberOfBCnodes] = ON[dirE   ];
-                  //Q.q27[dirN   ][QIN.numberOfBCnodes] = ON[dirS   ];
-                  //Q.q27[dirS   ][QIN.numberOfBCnodes] = ON[dirN   ];
-                  //Q.q27[dirT   ][QIN.numberOfBCnodes] = ON[dirB   ];
-                  //Q.q27[dirB   ][QIN.numberOfBCnodes] = ON[dirT   ];
-                  //Q.q27[dirNE  ][QIN.numberOfBCnodes] = ON[dirSW  ];
-                  //Q.q27[dirSW  ][QIN.numberOfBCnodes] = ON[dirNE  ];
-                  //Q.q27[dirSE  ][QIN.numberOfBCnodes] = ON[dirNW  ];
-                  //Q.q27[dirNW  ][QIN.numberOfBCnodes] = ON[dirSE  ];
-                  //Q.q27[dirTE  ][QIN.numberOfBCnodes] = ON[dirBW  ];
-                  //Q.q27[dirBW  ][QIN.numberOfBCnodes] = ON[dirTE  ];
-                  //Q.q27[dirBE  ][QIN.numberOfBCnodes] = ON[dirTW  ];
-                  //Q.q27[dirTW  ][QIN.numberOfBCnodes] = ON[dirBE  ];
-                  //Q.q27[dirTN  ][QIN.numberOfBCnodes] = ON[dirBS  ];
-                  //Q.q27[dirBS  ][QIN.numberOfBCnodes] = ON[dirTN  ];
-                  //Q.q27[dirBN  ][QIN.numberOfBCnodes] = ON[dirTS  ];
-                  //Q.q27[dirTS  ][QIN.numberOfBCnodes] = ON[dirBN  ];
-                  //Q.q27[dirZERO][QIN.numberOfBCnodes] = ON[dirZERO];
-                  //Q.q27[dirTNE ][QIN.numberOfBCnodes] = ON[dirBSW ];
-                  //Q.q27[dirTSW ][QIN.numberOfBCnodes] = ON[dirBNE ];
-                  //Q.q27[dirTSE ][QIN.numberOfBCnodes] = ON[dirBNW ];
-                  //Q.q27[dirTNW ][QIN.numberOfBCnodes] = ON[dirBSE ];
-                  //Q.q27[dirBNE ][QIN.numberOfBCnodes] = ON[dirTSW ];
-                  //Q.q27[dirBSW ][QIN.numberOfBCnodes] = ON[dirTNE ];
-                  //Q.q27[dirBSE ][QIN.numberOfBCnodes] = ON[dirTNW ];
-                  //Q.q27[dirBNW ][QIN.numberOfBCnodes] = ON[dirTSE ];
-
-                  Q.q27[dirE   ][QIN.numberOfBCnodes] = ON[dirE   ];
-                  Q.q27[dirW   ][QIN.numberOfBCnodes] = ON[dirW   ];
-                  Q.q27[dirN   ][QIN.numberOfBCnodes] = ON[dirN   ];
-                  Q.q27[dirS   ][QIN.numberOfBCnodes] = ON[dirS   ];
-                  Q.q27[dirT   ][QIN.numberOfBCnodes] = ON[dirT   ];
-                  Q.q27[dirB   ][QIN.numberOfBCnodes] = ON[dirB   ];
-                  Q.q27[dirNE  ][QIN.numberOfBCnodes] = ON[dirNE  ];
-                  Q.q27[dirSW  ][QIN.numberOfBCnodes] = ON[dirSW  ];
-                  Q.q27[dirSE  ][QIN.numberOfBCnodes] = ON[dirSE  ];
-                  Q.q27[dirNW  ][QIN.numberOfBCnodes] = ON[dirNW  ];
-                  Q.q27[dirTE  ][QIN.numberOfBCnodes] = ON[dirTE  ];
-                  Q.q27[dirBW  ][QIN.numberOfBCnodes] = ON[dirBW  ];
-                  Q.q27[dirBE  ][QIN.numberOfBCnodes] = ON[dirBE  ];
-                  Q.q27[dirTW  ][QIN.numberOfBCnodes] = ON[dirTW  ];
-                  Q.q27[dirTN  ][QIN.numberOfBCnodes] = ON[dirTN  ];
-                  Q.q27[dirBS  ][QIN.numberOfBCnodes] = ON[dirBS  ];
-                  Q.q27[dirBN  ][QIN.numberOfBCnodes] = ON[dirBN  ];
-                  Q.q27[dirTS  ][QIN.numberOfBCnodes] = ON[dirTS  ];
-                  Q.q27[dirZERO][QIN.numberOfBCnodes] = ON[dirZERO];
-                  Q.q27[dirTNE ][QIN.numberOfBCnodes] = ON[dirTNE ];
-                  Q.q27[dirTSW ][QIN.numberOfBCnodes] = ON[dirTSW ];
-                  Q.q27[dirTSE ][QIN.numberOfBCnodes] = ON[dirTSE ];
-                  Q.q27[dirTNW ][QIN.numberOfBCnodes] = ON[dirTNW ];
-                  Q.q27[dirBNE ][QIN.numberOfBCnodes] = ON[dirBNE ];
-                  Q.q27[dirBSW ][QIN.numberOfBCnodes] = ON[dirBSW ];
-                  Q.q27[dirBSE ][QIN.numberOfBCnodes] = ON[dirBSE ];
-                  Q.q27[dirBNW ][QIN.numberOfBCnodes] = ON[dirBNW ];
+                  //Q.q27[E   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[W   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[N   ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[S   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[T   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[B   ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[NE  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[SW  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[SE  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[NW  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[TE  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[BW  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[BE  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[TW  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[TN  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[BS  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[BN  ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[TS  ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[REST][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[TNE ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[TSW ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[TSE ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[TNW ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[BNE ][QIN.numberOfBCnodes] = 0.f;
+                  //Q.q27[BSW ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[BSE ][QIN.numberOfBCnodes] = -1.f;
+                  //Q.q27[BNW ][QIN.numberOfBCnodes] = 0.f;
+
+                  //Q.q27[E   ][QIN.numberOfBCnodes] = ON[W   ];
+                  //Q.q27[W   ][QIN.numberOfBCnodes] = ON[E   ];
+                  //Q.q27[N   ][QIN.numberOfBCnodes] = ON[S   ];
+                  //Q.q27[S   ][QIN.numberOfBCnodes] = ON[N   ];
+                  //Q.q27[T   ][QIN.numberOfBCnodes] = ON[B   ];
+                  //Q.q27[B   ][QIN.numberOfBCnodes] = ON[T   ];
+                  //Q.q27[NE  ][QIN.numberOfBCnodes] = ON[SW  ];
+                  //Q.q27[SW  ][QIN.numberOfBCnodes] = ON[NE  ];
+                  //Q.q27[SE  ][QIN.numberOfBCnodes] = ON[NW  ];
+                  //Q.q27[NW  ][QIN.numberOfBCnodes] = ON[SE  ];
+                  //Q.q27[TE  ][QIN.numberOfBCnodes] = ON[BW  ];
+                  //Q.q27[BW  ][QIN.numberOfBCnodes] = ON[TE  ];
+                  //Q.q27[BE  ][QIN.numberOfBCnodes] = ON[TW  ];
+                  //Q.q27[TW  ][QIN.numberOfBCnodes] = ON[BE  ];
+                  //Q.q27[TN  ][QIN.numberOfBCnodes] = ON[BS  ];
+                  //Q.q27[BS  ][QIN.numberOfBCnodes] = ON[TN  ];
+                  //Q.q27[BN  ][QIN.numberOfBCnodes] = ON[TS  ];
+                  //Q.q27[TS  ][QIN.numberOfBCnodes] = ON[BN  ];
+                  //Q.q27[REST][QIN.numberOfBCnodes] = ON[REST];
+                  //Q.q27[TNE ][QIN.numberOfBCnodes] = ON[BSW ];
+                  //Q.q27[TSW ][QIN.numberOfBCnodes] = ON[BNE ];
+                  //Q.q27[TSE ][QIN.numberOfBCnodes] = ON[BNW ];
+                  //Q.q27[TNW ][QIN.numberOfBCnodes] = ON[BSE ];
+                  //Q.q27[BNE ][QIN.numberOfBCnodes] = ON[TSW ];
+                  //Q.q27[BSW ][QIN.numberOfBCnodes] = ON[TNE ];
+                  //Q.q27[BSE ][QIN.numberOfBCnodes] = ON[TNW ];
+                  //Q.q27[BNW ][QIN.numberOfBCnodes] = ON[TSE ];
+
+                  Q.q27[E   ][QIN.numberOfBCnodes] = ON[E   ];
+                  Q.q27[W   ][QIN.numberOfBCnodes] = ON[W   ];
+                  Q.q27[N   ][QIN.numberOfBCnodes] = ON[N   ];
+                  Q.q27[S   ][QIN.numberOfBCnodes] = ON[S   ];
+                  Q.q27[T   ][QIN.numberOfBCnodes] = ON[T   ];
+                  Q.q27[B   ][QIN.numberOfBCnodes] = ON[B   ];
+                  Q.q27[NE  ][QIN.numberOfBCnodes] = ON[NE  ];
+                  Q.q27[SW  ][QIN.numberOfBCnodes] = ON[SW  ];
+                  Q.q27[SE  ][QIN.numberOfBCnodes] = ON[SE  ];
+                  Q.q27[NW  ][QIN.numberOfBCnodes] = ON[NW  ];
+                  Q.q27[TE  ][QIN.numberOfBCnodes] = ON[TE  ];
+                  Q.q27[BW  ][QIN.numberOfBCnodes] = ON[BW  ];
+                  Q.q27[BE  ][QIN.numberOfBCnodes] = ON[BE  ];
+                  Q.q27[TW  ][QIN.numberOfBCnodes] = ON[TW  ];
+                  Q.q27[TN  ][QIN.numberOfBCnodes] = ON[TN  ];
+                  Q.q27[BS  ][QIN.numberOfBCnodes] = ON[BS  ];
+                  Q.q27[BN  ][QIN.numberOfBCnodes] = ON[BN  ];
+                  Q.q27[TS  ][QIN.numberOfBCnodes] = ON[TS  ];
+                  Q.q27[REST][QIN.numberOfBCnodes] = ON[REST];
+                  Q.q27[TNE ][QIN.numberOfBCnodes] = ON[TNE ];
+                  Q.q27[TSW ][QIN.numberOfBCnodes] = ON[TSW ];
+                  Q.q27[TSE ][QIN.numberOfBCnodes] = ON[TSE ];
+                  Q.q27[TNW ][QIN.numberOfBCnodes] = ON[TNW ];
+                  Q.q27[BNE ][QIN.numberOfBCnodes] = ON[BNE ];
+                  Q.q27[BSW ][QIN.numberOfBCnodes] = ON[BSW ];
+                  Q.q27[BSE ][QIN.numberOfBCnodes] = ON[BSE ];
+                  Q.q27[BNW ][QIN.numberOfBCnodes] = ON[BNW ];
 
                   QIN.numberOfBCnodes++;
                }
@@ -183,6 +192,12 @@ void findQ(Parameter* para, int lev)
 ////////////////////////////////////////////////////////////////////////////////
 void findKforQ(Parameter* para, int lev)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+
+   VF_LOG_CRITICAL("findKforQ() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
    int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -232,33 +247,39 @@ void findKforQ(Parameter* para, int lev)
 void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int nnz, int* geo_mat, unsigned int* kk, unsigned int sizeQ, real* QQ, QforBoundaryConditions &QIN)
 {
    QforBoundaryConditions Q;
-   Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-   Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-   Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-   Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-   Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-   Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-   Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-   Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-   Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-   Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-   Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-   Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-   Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-   Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-   Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-   Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-   Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-   Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-   Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-   Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-   Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-   Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-   Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-   Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-   Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-   Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-   Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+   Q.q27[E   ] = &QQ[E   *sizeQ];
+   Q.q27[W   ] = &QQ[W   *sizeQ];
+   Q.q27[N   ] = &QQ[N   *sizeQ];
+   Q.q27[S   ] = &QQ[S   *sizeQ];
+   Q.q27[T   ] = &QQ[T   *sizeQ];
+   Q.q27[B   ] = &QQ[B   *sizeQ];
+   Q.q27[NE  ] = &QQ[NE  *sizeQ];
+   Q.q27[SW  ] = &QQ[SW  *sizeQ];
+   Q.q27[SE  ] = &QQ[SE  *sizeQ];
+   Q.q27[NW  ] = &QQ[NW  *sizeQ];
+   Q.q27[TE  ] = &QQ[TE  *sizeQ];
+   Q.q27[BW  ] = &QQ[BW  *sizeQ];
+   Q.q27[BE  ] = &QQ[BE  *sizeQ];
+   Q.q27[TW  ] = &QQ[TW  *sizeQ];
+   Q.q27[TN  ] = &QQ[TN  *sizeQ];
+   Q.q27[BS  ] = &QQ[BS  *sizeQ];
+   Q.q27[BN  ] = &QQ[BN  *sizeQ];
+   Q.q27[TS  ] = &QQ[TS  *sizeQ];
+   Q.q27[REST] = &QQ[REST*sizeQ];
+   Q.q27[TNE ] = &QQ[TNE *sizeQ];
+   Q.q27[TSW ] = &QQ[TSW *sizeQ];
+   Q.q27[TSE ] = &QQ[TSE *sizeQ];
+   Q.q27[TNW ] = &QQ[TNW *sizeQ];
+   Q.q27[BNE ] = &QQ[BNE *sizeQ];
+   Q.q27[BSW ] = &QQ[BSW *sizeQ];
+   Q.q27[BSE ] = &QQ[BSE *sizeQ];
+   Q.q27[BNW ] = &QQ[BNW *sizeQ];
+
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+
+    VF_LOG_CRITICAL("findQ_MG() is deprecated! - see comment above for more information");
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
@@ -306,33 +327,33 @@ void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int
                {
                   QIN.k[QIN.numberOfBCnodes]          = kk[m];
 
-                  Q.q27[dirE   ][QIN.numberOfBCnodes] = ON[dirE   ];
-                  Q.q27[dirW   ][QIN.numberOfBCnodes] = ON[dirW   ];
-                  Q.q27[dirN   ][QIN.numberOfBCnodes] = ON[dirN   ];
-                  Q.q27[dirS   ][QIN.numberOfBCnodes] = ON[dirS   ];
-                  Q.q27[dirT   ][QIN.numberOfBCnodes] = ON[dirT   ];
-                  Q.q27[dirB   ][QIN.numberOfBCnodes] = ON[dirB   ];
-                  Q.q27[dirNE  ][QIN.numberOfBCnodes] = ON[dirNE  ];
-                  Q.q27[dirSW  ][QIN.numberOfBCnodes] = ON[dirSW  ];
-                  Q.q27[dirSE  ][QIN.numberOfBCnodes] = ON[dirSE  ];
-                  Q.q27[dirNW  ][QIN.numberOfBCnodes] = ON[dirNW  ];
-                  Q.q27[dirTE  ][QIN.numberOfBCnodes] = ON[dirTE  ];
-                  Q.q27[dirBW  ][QIN.numberOfBCnodes] = ON[dirBW  ];
-                  Q.q27[dirBE  ][QIN.numberOfBCnodes] = ON[dirBE  ];
-                  Q.q27[dirTW  ][QIN.numberOfBCnodes] = ON[dirTW  ];
-                  Q.q27[dirTN  ][QIN.numberOfBCnodes] = ON[dirTN  ];
-                  Q.q27[dirBS  ][QIN.numberOfBCnodes] = ON[dirBS  ];
-                  Q.q27[dirBN  ][QIN.numberOfBCnodes] = ON[dirBN  ];
-                  Q.q27[dirTS  ][QIN.numberOfBCnodes] = ON[dirTS  ];
-                  Q.q27[dirZERO][QIN.numberOfBCnodes] = ON[dirZERO];
-                  Q.q27[dirTNE ][QIN.numberOfBCnodes] = ON[dirTNE ];
-                  Q.q27[dirTSW ][QIN.numberOfBCnodes] = ON[dirTSW ];
-                  Q.q27[dirTSE ][QIN.numberOfBCnodes] = ON[dirTSE ];
-                  Q.q27[dirTNW ][QIN.numberOfBCnodes] = ON[dirTNW ];
-                  Q.q27[dirBNE ][QIN.numberOfBCnodes] = ON[dirBNE ];
-                  Q.q27[dirBSW ][QIN.numberOfBCnodes] = ON[dirBSW ];
-                  Q.q27[dirBSE ][QIN.numberOfBCnodes] = ON[dirBSE ];
-                  Q.q27[dirBNW ][QIN.numberOfBCnodes] = ON[dirBNW ];
+                  Q.q27[E   ][QIN.numberOfBCnodes] = ON[E   ];
+                  Q.q27[W   ][QIN.numberOfBCnodes] = ON[W   ];
+                  Q.q27[N   ][QIN.numberOfBCnodes] = ON[N   ];
+                  Q.q27[S   ][QIN.numberOfBCnodes] = ON[S   ];
+                  Q.q27[T   ][QIN.numberOfBCnodes] = ON[T   ];
+                  Q.q27[B   ][QIN.numberOfBCnodes] = ON[B   ];
+                  Q.q27[NE  ][QIN.numberOfBCnodes] = ON[NE  ];
+                  Q.q27[SW  ][QIN.numberOfBCnodes] = ON[SW  ];
+                  Q.q27[SE  ][QIN.numberOfBCnodes] = ON[SE  ];
+                  Q.q27[NW  ][QIN.numberOfBCnodes] = ON[NW  ];
+                  Q.q27[TE  ][QIN.numberOfBCnodes] = ON[TE  ];
+                  Q.q27[BW  ][QIN.numberOfBCnodes] = ON[BW  ];
+                  Q.q27[BE  ][QIN.numberOfBCnodes] = ON[BE  ];
+                  Q.q27[TW  ][QIN.numberOfBCnodes] = ON[TW  ];
+                  Q.q27[TN  ][QIN.numberOfBCnodes] = ON[TN  ];
+                  Q.q27[BS  ][QIN.numberOfBCnodes] = ON[BS  ];
+                  Q.q27[BN  ][QIN.numberOfBCnodes] = ON[BN  ];
+                  Q.q27[TS  ][QIN.numberOfBCnodes] = ON[TS  ];
+                  Q.q27[REST][QIN.numberOfBCnodes] = ON[REST];
+                  Q.q27[TNE ][QIN.numberOfBCnodes] = ON[TNE ];
+                  Q.q27[TSW ][QIN.numberOfBCnodes] = ON[TSW ];
+                  Q.q27[TSE ][QIN.numberOfBCnodes] = ON[TSE ];
+                  Q.q27[TNW ][QIN.numberOfBCnodes] = ON[TNW ];
+                  Q.q27[BNE ][QIN.numberOfBCnodes] = ON[BNE ];
+                  Q.q27[BSW ][QIN.numberOfBCnodes] = ON[BSW ];
+                  Q.q27[BSE ][QIN.numberOfBCnodes] = ON[BSE ];
+                  Q.q27[BNW ][QIN.numberOfBCnodes] = ON[BNW ];
 
                   QIN.numberOfBCnodes++;
                }
@@ -345,6 +366,12 @@ void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int
 ////////////////////////////////////////////////////////////////////////////////
 void findKforQ_MG(int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int nnz, int* geo_mat, QforBoundaryConditions &QIN)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+
+    VF_LOG_CRITICAL("findKforQ_MG() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
    int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -387,12 +414,11 @@ void findKforQ_MG(int nx, int ny, unsigned int nnx, unsigned int nny, unsigned i
 ////////////////////////////////////////////////////////////////////////////////
 void findQInflow(Parameter* para)
 {
-   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-   //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
-   //int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
-   //int   ey[27]={  0,  0,  1, -1,  0,  0,  1, -1, -1,  1,  0,  0,  0,  0,  1, -1,  1, -1,   0,  1,  1, -1, -1,  1,  1, -1, -1};
-   //int   ez[27]={  0,  0,  0,  0,  1, -1,  0,  0,  0,  0,  1, -1, -1,  1,  1, -1, -1,  1,   0,  1, -1,  1, -1,  1, -1,  1, -1};
-   //real ON[27];
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findQInflow() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    unsigned int i, j, k, m;//, mm, l;
    //int nx                        = para->getParH(para->getFine())->nx;
@@ -409,7 +435,7 @@ void findQInflow(Parameter* para)
    unsigned int nnz              = para->getParH(para->getCoarse())->gridNZ;
    int* geo_mat                  = para->getParH(para->getCoarse())->geo;
    unsigned int* kk              = para->getParH(para->getCoarse())->k;
-   unsigned int sizeQ            = para->getParH(para->getCoarse())->numberOfVeloBCnodes;
+   unsigned int sizeQ            = para->getParH(para->getCoarse())->velocityBC.numberOfBCnodes;
    //real* rhoBC                = para->getParH(para->getCoarse())->velocityBC.RhoBC;
    real u0                    = para->getVelocity();
    real* vx                   = para->getParH(para->getCoarse())->velocityBC.Vx;
@@ -422,33 +448,33 @@ void findQInflow(Parameter* para)
    QIN.numberOfBCnodes = 0;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QforBoundaryConditions Q;
-   Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-   Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-   Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-   Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-   Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-   Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-   Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-   Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-   Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-   Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-   Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-   Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-   Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-   Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-   Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-   Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-   Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-   Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-   Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-   Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-   Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-   Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-   Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-   Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-   Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-   Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-   Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+   Q.q27[E   ] = &QQ[E   *sizeQ];
+   Q.q27[W   ] = &QQ[W   *sizeQ];
+   Q.q27[N   ] = &QQ[N   *sizeQ];
+   Q.q27[S   ] = &QQ[S   *sizeQ];
+   Q.q27[T   ] = &QQ[T   *sizeQ];
+   Q.q27[B   ] = &QQ[B   *sizeQ];
+   Q.q27[NE  ] = &QQ[NE  *sizeQ];
+   Q.q27[SW  ] = &QQ[SW  *sizeQ];
+   Q.q27[SE  ] = &QQ[SE  *sizeQ];
+   Q.q27[NW  ] = &QQ[NW  *sizeQ];
+   Q.q27[TE  ] = &QQ[TE  *sizeQ];
+   Q.q27[BW  ] = &QQ[BW  *sizeQ];
+   Q.q27[BE  ] = &QQ[BE  *sizeQ];
+   Q.q27[TW  ] = &QQ[TW  *sizeQ];
+   Q.q27[TN  ] = &QQ[TN  *sizeQ];
+   Q.q27[BS  ] = &QQ[BS  *sizeQ];
+   Q.q27[BN  ] = &QQ[BN  *sizeQ];
+   Q.q27[TS  ] = &QQ[TS  *sizeQ];
+   Q.q27[REST] = &QQ[REST*sizeQ];
+   Q.q27[TNE ] = &QQ[TNE *sizeQ];
+   Q.q27[TSW ] = &QQ[TSW *sizeQ];
+   Q.q27[TSE ] = &QQ[TSE *sizeQ];
+   Q.q27[TNW ] = &QQ[TNW *sizeQ];
+   Q.q27[BNE ] = &QQ[BNE *sizeQ];
+   Q.q27[BSW ] = &QQ[BSW *sizeQ];
+   Q.q27[BSE ] = &QQ[BSE *sizeQ];
+   Q.q27[BNW ] = &QQ[BNW *sizeQ];
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
    //unsigned int lj = ((nny+STARTOFFY-2)-(STARTOFFY+1)-1);
@@ -471,61 +497,67 @@ void findQInflow(Parameter* para)
                //vz[QIN.numberOfBCnodes]             = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny);
                deltaVz[QIN.numberOfBCnodes]        = (real)0.f;
 			   //////////////////////////////////////////////////////////////////////////
-               //Q.q27[dirE   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirW   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirN   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirS   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirT   ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirB   ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirNE  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirSW  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirSE  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirNW  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirTE  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirBW  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirBE  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirTW  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirTN  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirBS  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirBN  ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirTS  ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirZERO][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirTNE ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirTSW ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirTSE ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirTNW ][QIN.numberOfBCnodes] = (real)-1.f;
-               //Q.q27[dirBNE ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirBSW ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirBSE ][QIN.numberOfBCnodes] = (real)1.f;
-               //Q.q27[dirBNW ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[E   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[W   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[N   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[S   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[T   ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[B   ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[NE  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[SW  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[SE  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[NW  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[TE  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[BW  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[BE  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[TW  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[TN  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[BS  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[BN  ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[TS  ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[REST][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[TNE ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[TSW ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[TSE ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[TNW ][QIN.numberOfBCnodes] = (real)-1.f;
+               //Q.q27[BNE ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[BSW ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[BSE ][QIN.numberOfBCnodes] = (real)1.f;
+               //Q.q27[BNW ][QIN.numberOfBCnodes] = (real)1.f;
 			   //////////////////////////////////////////////////////////////////////////
-			   Q.q27[dirE   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirW   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirN   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirS   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirT   ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirB   ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirNE  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirSW  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirSE  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirNW  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirTE  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirBW  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirBE  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirTW  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirTN  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirBS  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirBN  ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirTS  ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirZERO][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirTNE ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirTSW ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirTSE ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirTNW ][QIN.numberOfBCnodes] = (real)1.f;
-			   Q.q27[dirBNE ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirBSW ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirBSE ][QIN.numberOfBCnodes] = (real)-1.f;
-			   Q.q27[dirBNW ][QIN.numberOfBCnodes] = (real)-1.f;
+
+
+               // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+
+			   Q.q27[E   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[W   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[N   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[S   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[T   ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[B   ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[NE  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[SW  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[SE  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[NW  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[TE  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[BW  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[BE  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[TW  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[TN  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[BS  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[BN  ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[TS  ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[REST][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[TNE ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[TSW ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[TSE ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[TNW ][QIN.numberOfBCnodes] = (real)1.f;
+			   Q.q27[BNE ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[BSW ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[BSE ][QIN.numberOfBCnodes] = (real)-1.f;
+			   Q.q27[BNW ][QIN.numberOfBCnodes] = (real)-1.f;
 			   //////////////////////////////////////////////////////////////////////////
 			   QIN.numberOfBCnodes++;
             }
@@ -556,33 +588,33 @@ void findQInflow(Parameter* para)
    //               vy[QIN.numberOfBCnodes]             = 0.f;
    //               vz[QIN.numberOfBCnodes]             = u0;
 
-   //               Q.q27[dirE   ][QIN.numberOfBCnodes] = ON[dirE   ];
-   //               Q.q27[dirW   ][QIN.numberOfBCnodes] = ON[dirW   ];
-   //               Q.q27[dirN   ][QIN.numberOfBCnodes] = ON[dirN   ];
-   //               Q.q27[dirS   ][QIN.numberOfBCnodes] = ON[dirS   ];
-   //               Q.q27[dirT   ][QIN.numberOfBCnodes] = ON[dirT   ];
-   //               Q.q27[dirB   ][QIN.numberOfBCnodes] = ON[dirB   ];
-   //               Q.q27[dirNE  ][QIN.numberOfBCnodes] = ON[dirNE  ];
-   //               Q.q27[dirSW  ][QIN.numberOfBCnodes] = ON[dirSW  ];
-   //               Q.q27[dirSE  ][QIN.numberOfBCnodes] = ON[dirSE  ];
-   //               Q.q27[dirNW  ][QIN.numberOfBCnodes] = ON[dirNW  ];
-   //               Q.q27[dirTE  ][QIN.numberOfBCnodes] = ON[dirTE  ];
-   //               Q.q27[dirBW  ][QIN.numberOfBCnodes] = ON[dirBW  ];
-   //               Q.q27[dirBE  ][QIN.numberOfBCnodes] = ON[dirBE  ];
-   //               Q.q27[dirTW  ][QIN.numberOfBCnodes] = ON[dirTW  ];
-   //               Q.q27[dirTN  ][QIN.numberOfBCnodes] = ON[dirTN  ];
-   //               Q.q27[dirBS  ][QIN.numberOfBCnodes] = ON[dirBS  ];
-   //               Q.q27[dirBN  ][QIN.numberOfBCnodes] = ON[dirBN  ];
-   //               Q.q27[dirTS  ][QIN.numberOfBCnodes] = ON[dirTS  ];
-   //               Q.q27[dirZERO][QIN.numberOfBCnodes] = ON[dirZERO];
-   //               Q.q27[dirTNE ][QIN.numberOfBCnodes] = ON[dirTNE ];
-   //               Q.q27[dirTSW ][QIN.numberOfBCnodes] = ON[dirTSW ];
-   //               Q.q27[dirTSE ][QIN.numberOfBCnodes] = ON[dirTSE ];
-   //               Q.q27[dirTNW ][QIN.numberOfBCnodes] = ON[dirTNW ];
-   //               Q.q27[dirBNE ][QIN.numberOfBCnodes] = ON[dirBNE ];
-   //               Q.q27[dirBSW ][QIN.numberOfBCnodes] = ON[dirBSW ];
-   //               Q.q27[dirBSE ][QIN.numberOfBCnodes] = ON[dirBSE ];
-   //               Q.q27[dirBNW ][QIN.numberOfBCnodes] = ON[dirBNW ];
+   //               Q.q27[E   ][QIN.numberOfBCnodes] = ON[E   ];
+   //               Q.q27[W   ][QIN.numberOfBCnodes] = ON[W   ];
+   //               Q.q27[N   ][QIN.numberOfBCnodes] = ON[N   ];
+   //               Q.q27[S   ][QIN.numberOfBCnodes] = ON[S   ];
+   //               Q.q27[T   ][QIN.numberOfBCnodes] = ON[T   ];
+   //               Q.q27[B   ][QIN.numberOfBCnodes] = ON[B   ];
+   //               Q.q27[NE  ][QIN.numberOfBCnodes] = ON[NE  ];
+   //               Q.q27[SW  ][QIN.numberOfBCnodes] = ON[SW  ];
+   //               Q.q27[SE  ][QIN.numberOfBCnodes] = ON[SE  ];
+   //               Q.q27[NW  ][QIN.numberOfBCnodes] = ON[NW  ];
+   //               Q.q27[TE  ][QIN.numberOfBCnodes] = ON[TE  ];
+   //               Q.q27[BW  ][QIN.numberOfBCnodes] = ON[BW  ];
+   //               Q.q27[BE  ][QIN.numberOfBCnodes] = ON[BE  ];
+   //               Q.q27[TW  ][QIN.numberOfBCnodes] = ON[TW  ];
+   //               Q.q27[TN  ][QIN.numberOfBCnodes] = ON[TN  ];
+   //               Q.q27[BS  ][QIN.numberOfBCnodes] = ON[BS  ];
+   //               Q.q27[BN  ][QIN.numberOfBCnodes] = ON[BN  ];
+   //               Q.q27[TS  ][QIN.numberOfBCnodes] = ON[TS  ];
+   //               Q.q27[REST][QIN.numberOfBCnodes] = ON[REST];
+   //               Q.q27[TNE ][QIN.numberOfBCnodes] = ON[TNE ];
+   //               Q.q27[TSW ][QIN.numberOfBCnodes] = ON[TSW ];
+   //               Q.q27[TSE ][QIN.numberOfBCnodes] = ON[TSE ];
+   //               Q.q27[TNW ][QIN.numberOfBCnodes] = ON[TNW ];
+   //               Q.q27[BNE ][QIN.numberOfBCnodes] = ON[BNE ];
+   //               Q.q27[BSW ][QIN.numberOfBCnodes] = ON[BSW ];
+   //               Q.q27[BSE ][QIN.numberOfBCnodes] = ON[BSE ];
+   //               Q.q27[BNW ][QIN.numberOfBCnodes] = ON[BNW ];
 
    //               QIN.numberOfBCnodes++;
    //            }
@@ -615,33 +647,33 @@ void findQInflow(Parameter* para)
    //               vy[QIN.numberOfBCnodes]             = 0.f;
    //               vz[QIN.numberOfBCnodes]             = 0.f;//u0;
 
-   //               Q.q27[dirE   ][QIN.numberOfBCnodes] = ON[dirE   ];
-   //               Q.q27[dirW   ][QIN.numberOfBCnodes] = ON[dirW   ];
-   //               Q.q27[dirN   ][QIN.numberOfBCnodes] = ON[dirN   ];
-   //               Q.q27[dirS   ][QIN.numberOfBCnodes] = ON[dirS   ];
-   //               Q.q27[dirT   ][QIN.numberOfBCnodes] = ON[dirT   ];
-   //               Q.q27[dirB   ][QIN.numberOfBCnodes] = ON[dirB   ];
-   //               Q.q27[dirNE  ][QIN.numberOfBCnodes] = ON[dirNE  ];
-   //               Q.q27[dirSW  ][QIN.numberOfBCnodes] = ON[dirSW  ];
-   //               Q.q27[dirSE  ][QIN.numberOfBCnodes] = ON[dirSE  ];
-   //               Q.q27[dirNW  ][QIN.numberOfBCnodes] = ON[dirNW  ];
-   //               Q.q27[dirTE  ][QIN.numberOfBCnodes] = ON[dirTE  ];
-   //               Q.q27[dirBW  ][QIN.numberOfBCnodes] = ON[dirBW  ];
-   //               Q.q27[dirBE  ][QIN.numberOfBCnodes] = ON[dirBE  ];
-   //               Q.q27[dirTW  ][QIN.numberOfBCnodes] = ON[dirTW  ];
-   //               Q.q27[dirTN  ][QIN.numberOfBCnodes] = ON[dirTN  ];
-   //               Q.q27[dirBS  ][QIN.numberOfBCnodes] = ON[dirBS  ];
-   //               Q.q27[dirBN  ][QIN.numberOfBCnodes] = ON[dirBN  ];
-   //               Q.q27[dirTS  ][QIN.numberOfBCnodes] = ON[dirTS  ];
-   //               Q.q27[dirZERO][QIN.numberOfBCnodes] = ON[dirZERO];
-   //               Q.q27[dirTNE ][QIN.numberOfBCnodes] = ON[dirTNE ];
-   //               Q.q27[dirTSW ][QIN.numberOfBCnodes] = ON[dirTSW ];
-   //               Q.q27[dirTSE ][QIN.numberOfBCnodes] = ON[dirTSE ];
-   //               Q.q27[dirTNW ][QIN.numberOfBCnodes] = ON[dirTNW ];
-   //               Q.q27[dirBNE ][QIN.numberOfBCnodes] = ON[dirBNE ];
-   //               Q.q27[dirBSW ][QIN.numberOfBCnodes] = ON[dirBSW ];
-   //               Q.q27[dirBSE ][QIN.numberOfBCnodes] = ON[dirBSE ];
-   //               Q.q27[dirBNW ][QIN.numberOfBCnodes] = ON[dirBNW ];
+   //               Q.q27[E   ][QIN.numberOfBCnodes] = ON[E   ];
+   //               Q.q27[W   ][QIN.numberOfBCnodes] = ON[W   ];
+   //               Q.q27[N   ][QIN.numberOfBCnodes] = ON[N   ];
+   //               Q.q27[S   ][QIN.numberOfBCnodes] = ON[S   ];
+   //               Q.q27[T   ][QIN.numberOfBCnodes] = ON[T   ];
+   //               Q.q27[B   ][QIN.numberOfBCnodes] = ON[B   ];
+   //               Q.q27[NE  ][QIN.numberOfBCnodes] = ON[NE  ];
+   //               Q.q27[SW  ][QIN.numberOfBCnodes] = ON[SW  ];
+   //               Q.q27[SE  ][QIN.numberOfBCnodes] = ON[SE  ];
+   //               Q.q27[NW  ][QIN.numberOfBCnodes] = ON[NW  ];
+   //               Q.q27[TE  ][QIN.numberOfBCnodes] = ON[TE  ];
+   //               Q.q27[BW  ][QIN.numberOfBCnodes] = ON[BW  ];
+   //               Q.q27[BE  ][QIN.numberOfBCnodes] = ON[BE  ];
+   //               Q.q27[TW  ][QIN.numberOfBCnodes] = ON[TW  ];
+   //               Q.q27[TN  ][QIN.numberOfBCnodes] = ON[TN  ];
+   //               Q.q27[BS  ][QIN.numberOfBCnodes] = ON[BS  ];
+   //               Q.q27[BN  ][QIN.numberOfBCnodes] = ON[BN  ];
+   //               Q.q27[TS  ][QIN.numberOfBCnodes] = ON[TS  ];
+   //               Q.q27[REST][QIN.numberOfBCnodes] = ON[REST];
+   //               Q.q27[TNE ][QIN.numberOfBCnodes] = ON[TNE ];
+   //               Q.q27[TSW ][QIN.numberOfBCnodes] = ON[TSW ];
+   //               Q.q27[TSE ][QIN.numberOfBCnodes] = ON[TSE ];
+   //               Q.q27[TNW ][QIN.numberOfBCnodes] = ON[TNW ];
+   //               Q.q27[BNE ][QIN.numberOfBCnodes] = ON[BNE ];
+   //               Q.q27[BSW ][QIN.numberOfBCnodes] = ON[BSW ];
+   //               Q.q27[BSE ][QIN.numberOfBCnodes] = ON[BSE ];
+   //               Q.q27[BNW ][QIN.numberOfBCnodes] = ON[BNW ];
 
    //               QIN.numberOfBCnodes++;
    //            }
@@ -654,6 +686,11 @@ void findQInflow(Parameter* para)
 ////////////////////////////////////////////////////////////////////////////////
 void findKforQInflow(Parameter* para)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findKforQInflow() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
    //int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -737,6 +774,11 @@ void findKforQInflow(Parameter* para)
 ////////////////////////////////////////////////////////////////////////////////
 void findQOutflow(Parameter* para)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findQOutflow() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
    //int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -759,7 +801,7 @@ void findQOutflow(Parameter* para)
    unsigned int nnz              = para->getParH(para->getCoarse())->gridNZ;
    int* geo_mat                  = para->getParH(para->getCoarse())->geo;
    unsigned int* kk              = para->getParH(para->getCoarse())->k;
-   unsigned int sizeQ            = para->getParH(para->getCoarse())->numberOfOutflowBCnodes;
+   unsigned int sizeQ            = para->getParH(para->getCoarse())->outflowBC.numberOfBCnodes;
    real* rhoBC                = para->getParH(para->getCoarse())->outflowBC.RhoBC;
    real u0                    = para->getVelocity();
    real* vx                   = para->getParH(para->getCoarse())->outflowBC.Vx;
@@ -772,33 +814,33 @@ void findQOutflow(Parameter* para)
    QIN.numberOfBCnodes = 0;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    QforBoundaryConditions Q;
-   Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-   Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-   Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-   Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-   Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-   Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-   Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-   Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-   Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-   Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-   Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-   Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-   Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-   Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-   Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-   Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-   Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-   Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-   Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-   Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-   Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-   Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-   Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-   Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-   Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-   Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-   Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+   Q.q27[E   ] = &QQ[E   *sizeQ];
+   Q.q27[W   ] = &QQ[W   *sizeQ];
+   Q.q27[N   ] = &QQ[N   *sizeQ];
+   Q.q27[S   ] = &QQ[S   *sizeQ];
+   Q.q27[T   ] = &QQ[T   *sizeQ];
+   Q.q27[B   ] = &QQ[B   *sizeQ];
+   Q.q27[NE  ] = &QQ[NE  *sizeQ];
+   Q.q27[SW  ] = &QQ[SW  *sizeQ];
+   Q.q27[SE  ] = &QQ[SE  *sizeQ];
+   Q.q27[NW  ] = &QQ[NW  *sizeQ];
+   Q.q27[TE  ] = &QQ[TE  *sizeQ];
+   Q.q27[BW  ] = &QQ[BW  *sizeQ];
+   Q.q27[BE  ] = &QQ[BE  *sizeQ];
+   Q.q27[TW  ] = &QQ[TW  *sizeQ];
+   Q.q27[TN  ] = &QQ[TN  *sizeQ];
+   Q.q27[BS  ] = &QQ[BS  *sizeQ];
+   Q.q27[BN  ] = &QQ[BN  *sizeQ];
+   Q.q27[TS  ] = &QQ[TS  *sizeQ];
+   Q.q27[REST] = &QQ[REST*sizeQ];
+   Q.q27[TNE ] = &QQ[TNE *sizeQ];
+   Q.q27[TSW ] = &QQ[TSW *sizeQ];
+   Q.q27[TSE ] = &QQ[TSE *sizeQ];
+   Q.q27[TNW ] = &QQ[TNW *sizeQ];
+   Q.q27[BNE ] = &QQ[BNE *sizeQ];
+   Q.q27[BSW ] = &QQ[BSW *sizeQ];
+   Q.q27[BSE ] = &QQ[BSE *sizeQ];
+   Q.q27[BNW ] = &QQ[BNW *sizeQ];
 
 
    //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
@@ -820,33 +862,33 @@ void findQOutflow(Parameter* para)
                //vz[QIN.numberOfBCnodes]             =  (real)(16.f*(u0*2.f)*(i-(STARTOFFX+1)-0.5f)*(li-1.5f-(i-(STARTOFFX+1)))*(j-(STARTOFFY+1)-0.5f)*(lj-1.5f-(j-(STARTOFFY+1))))/(li*lj*li*lj);
                //vz[QIN.numberOfBCnodes]             = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny);
                deltaVz[QIN.numberOfBCnodes]        = (real)0.f;
-               Q.q27[dirE   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirW   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirN   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirS   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirT   ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirB   ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirNE  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirSW  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirSE  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirNW  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirTE  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirBW  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirBE  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirTW  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirTN  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirBS  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirBN  ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirTS  ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirZERO][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirTNE ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirTSW ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirTSE ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirTNW ][QIN.numberOfBCnodes] = (real)1.f;
-               Q.q27[dirBNE ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirBSW ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirBSE ][QIN.numberOfBCnodes] = (real)-1.f;
-               Q.q27[dirBNW ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[E   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[W   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[N   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[S   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[T   ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[B   ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[NE  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[SW  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[SE  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[NW  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[TE  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[BW  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[BE  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[TW  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[TN  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[BS  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[BN  ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[TS  ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[REST][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[TNE ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[TSW ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[TSE ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[TNW ][QIN.numberOfBCnodes] = (real)1.f;
+               Q.q27[BNE ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[BSW ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[BSE ][QIN.numberOfBCnodes] = (real)-1.f;
+               Q.q27[BNW ][QIN.numberOfBCnodes] = (real)-1.f;
                QIN.numberOfBCnodes++;
             }
        }
@@ -864,6 +906,11 @@ void findQOutflow(Parameter* para)
 ////////////////////////////////////////////////////////////////////////////////
 void findKforQOutflow(Parameter* para)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findKforQOutflow() is deprecated! - see comment above for more information");
+
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
    //int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -929,33 +976,33 @@ void findKforQOutflow(Parameter* para)
 //                   unsigned int sizeQW, real* vxW, real* vyW, real* vzW, real*deltaVW, real* QQW, QforBoundaryConditions &QWin)
 //{
 //   QforBoundaryConditions QN;
-//   QN.q27[dirE   ] = &QQN[dirE   *sizeQN];
-//   QN.q27[dirW   ] = &QQN[dirW   *sizeQN];
-//   QN.q27[dirN   ] = &QQN[dirN   *sizeQN];
-//   QN.q27[dirS   ] = &QQN[dirS   *sizeQN];
-//   QN.q27[dirT   ] = &QQN[dirT   *sizeQN];
-//   QN.q27[dirB   ] = &QQN[dirB   *sizeQN];
-//   QN.q27[dirNE  ] = &QQN[dirNE  *sizeQN];
-//   QN.q27[dirSW  ] = &QQN[dirSW  *sizeQN];
-//   QN.q27[dirSE  ] = &QQN[dirSE  *sizeQN];
-//   QN.q27[dirNW  ] = &QQN[dirNW  *sizeQN];
-//   QN.q27[dirTE  ] = &QQN[dirTE  *sizeQN];
-//   QN.q27[dirBW  ] = &QQN[dirBW  *sizeQN];
-//   QN.q27[dirBE  ] = &QQN[dirBE  *sizeQN];
-//   QN.q27[dirTW  ] = &QQN[dirTW  *sizeQN];
-//   QN.q27[dirTN  ] = &QQN[dirTN  *sizeQN];
-//   QN.q27[dirBS  ] = &QQN[dirBS  *sizeQN];
-//   QN.q27[dirBN  ] = &QQN[dirBN  *sizeQN];
-//   QN.q27[dirTS  ] = &QQN[dirTS  *sizeQN];
-//   QN.q27[dirZERO] = &QQN[dirZERO*sizeQN];
-//   QN.q27[dirTNE ] = &QQN[dirTNE *sizeQN];
-//   QN.q27[dirTSW ] = &QQN[dirTSW *sizeQN];
-//   QN.q27[dirTSE ] = &QQN[dirTSE *sizeQN];
-//   QN.q27[dirTNW ] = &QQN[dirTNW *sizeQN];
-//   QN.q27[dirBNE ] = &QQN[dirBNE *sizeQN];
-//   QN.q27[dirBSW ] = &QQN[dirBSW *sizeQN];
-//   QN.q27[dirBSE ] = &QQN[dirBSE *sizeQN];
-//   QN.q27[dirBNW ] = &QQN[dirBNW *sizeQN];
+//   QN.q27[E   ] = &QQN[E   *sizeQN];
+//   QN.q27[W   ] = &QQN[W   *sizeQN];
+//   QN.q27[N   ] = &QQN[N   *sizeQN];
+//   QN.q27[S   ] = &QQN[S   *sizeQN];
+//   QN.q27[T   ] = &QQN[T   *sizeQN];
+//   QN.q27[B   ] = &QQN[B   *sizeQN];
+//   QN.q27[NE  ] = &QQN[NE  *sizeQN];
+//   QN.q27[SW  ] = &QQN[SW  *sizeQN];
+//   QN.q27[SE  ] = &QQN[SE  *sizeQN];
+//   QN.q27[NW  ] = &QQN[NW  *sizeQN];
+//   QN.q27[TE  ] = &QQN[TE  *sizeQN];
+//   QN.q27[BW  ] = &QQN[BW  *sizeQN];
+//   QN.q27[BE  ] = &QQN[BE  *sizeQN];
+//   QN.q27[TW  ] = &QQN[TW  *sizeQN];
+//   QN.q27[TN  ] = &QQN[TN  *sizeQN];
+//   QN.q27[BS  ] = &QQN[BS  *sizeQN];
+//   QN.q27[BN  ] = &QQN[BN  *sizeQN];
+//   QN.q27[TS  ] = &QQN[TS  *sizeQN];
+//   QN.q27[REST] = &QQN[REST*sizeQN];
+//   QN.q27[TNE ] = &QQN[TNE *sizeQN];
+//   QN.q27[TSW ] = &QQN[TSW *sizeQN];
+//   QN.q27[TSE ] = &QQN[TSE *sizeQN];
+//   QN.q27[TNW ] = &QQN[TNW *sizeQN];
+//   QN.q27[BNE ] = &QQN[BNE *sizeQN];
+//   QN.q27[BSW ] = &QQN[BSW *sizeQN];
+//   QN.q27[BSE ] = &QQN[BSE *sizeQN];
+//   QN.q27[BNW ] = &QQN[BNW *sizeQN];
 //
 //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //   //////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
@@ -1016,6 +1063,11 @@ void findKforQOutflow(Parameter* para)
 ////////////////////////////////////////////////////////////////////////////////
 void findQPressX0(Parameter* para, int lev)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findKforQPressX0() is deprecated! - see comment above for more information");
+
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	//////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
 	//int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -1030,7 +1082,7 @@ void findQPressX0(Parameter* para, int lev)
 	unsigned int nnz              = para->getParH(lev)->gridNZ;
 	int* geo_mat                  = para->getParH(lev)->geo;
 	unsigned int* kk              = para->getParH(lev)->k;
-	//unsigned int sizeQ            = para->getParH(lev)->numberOfOutflowBCnodes;
+	//unsigned int sizeQ            = para->getParH(lev)->outflowBC.numberOfBCnodes;
 	unsigned int sizeQ            = para->getParH(lev)->QpressX0.numberOfBCnodes;
 	real* rhoBC                = para->getParH(lev)->QpressX0.RhoBC;
 	real u0                    = para->getVelocity();
@@ -1044,33 +1096,33 @@ void findQPressX0(Parameter* para, int lev)
 	QIN.numberOfBCnodes = 0;
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	QforBoundaryConditions Q;
-	Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-	Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-	Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-	Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-	Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-	Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-	Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-	Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-	Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-	Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-	Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-	Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-	Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-	Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-	Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-	Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-	Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-	Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-	Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-	Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-	Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-	Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-	Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-	Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-	Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-	Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-	Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+	Q.q27[E   ] = &QQ[E   *sizeQ];
+	Q.q27[W   ] = &QQ[W   *sizeQ];
+	Q.q27[N   ] = &QQ[N   *sizeQ];
+	Q.q27[S   ] = &QQ[S   *sizeQ];
+	Q.q27[T   ] = &QQ[T   *sizeQ];
+	Q.q27[B   ] = &QQ[B   *sizeQ];
+	Q.q27[NE  ] = &QQ[NE  *sizeQ];
+	Q.q27[SW  ] = &QQ[SW  *sizeQ];
+	Q.q27[SE  ] = &QQ[SE  *sizeQ];
+	Q.q27[NW  ] = &QQ[NW  *sizeQ];
+	Q.q27[TE  ] = &QQ[TE  *sizeQ];
+	Q.q27[BW  ] = &QQ[BW  *sizeQ];
+	Q.q27[BE  ] = &QQ[BE  *sizeQ];
+	Q.q27[TW  ] = &QQ[TW  *sizeQ];
+	Q.q27[TN  ] = &QQ[TN  *sizeQ];
+	Q.q27[BS  ] = &QQ[BS  *sizeQ];
+	Q.q27[BN  ] = &QQ[BN  *sizeQ];
+	Q.q27[TS  ] = &QQ[TS  *sizeQ];
+	Q.q27[REST] = &QQ[REST*sizeQ];
+	Q.q27[TNE ] = &QQ[TNE *sizeQ];
+	Q.q27[TSW ] = &QQ[TSW *sizeQ];
+	Q.q27[TSE ] = &QQ[TSE *sizeQ];
+	Q.q27[TNW ] = &QQ[TNW *sizeQ];
+	Q.q27[BNE ] = &QQ[BNE *sizeQ];
+	Q.q27[BSW ] = &QQ[BSW *sizeQ];
+	Q.q27[BSE ] = &QQ[BSE *sizeQ];
+	Q.q27[BNW ] = &QQ[BNW *sizeQ];
 
 
 	//unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
@@ -1093,33 +1145,33 @@ void findQPressX0(Parameter* para, int lev)
 				//vz[QIN.numberOfBCnodes]             =  (real)(16.f*(u0*2.f)*(i-(STARTOFFX+1)-0.5f)*(li-1.5f-(i-(STARTOFFX+1)))*(j-(STARTOFFY+1)-0.5f)*(lj-1.5f-(j-(STARTOFFY+1))))/(li*lj*li*lj);
 				//vz[QIN.numberOfBCnodes]             = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny);
 				deltaVz[QIN.numberOfBCnodes]        = (real)0.f;
-				Q.q27[dirE   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirW   ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirN   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirS   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirT   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirB   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirNE  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirSW  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirSE  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirNW  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirTE  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBW  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirBE  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTW  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirTN  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBS  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBN  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTS  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirZERO][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTNE ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTSW ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirTSE ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTNW ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirBNE ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBSW ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirBSE ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBNW ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[E   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[W   ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[N   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[S   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[T   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[B   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[NE  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[SW  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[SE  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[NW  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[TE  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BW  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[BE  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TW  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[TN  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BS  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BN  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TS  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[REST][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TNE ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TSW ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[TSE ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TNW ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[BNE ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BSW ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[BSE ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BNW ][QIN.numberOfBCnodes] = (real)1.f;
 				QIN.numberOfBCnodes++;
 			}
 		}
@@ -1129,6 +1181,11 @@ void findQPressX0(Parameter* para, int lev)
 ////////////////////////////////////////////////////////////////////////////////
 void findKforQPressX0(Parameter* para, int lev)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findKforQPressX0() is deprecated! - see comment above for more information");
+
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	//////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
 	//int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -1182,6 +1239,11 @@ void findKforQPressX0(Parameter* para, int lev)
 ////////////////////////////////////////////////////////////////////////////////
 void findQPressX1(Parameter* para, int lev)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findQPressX1() is deprecated! - see comment above for more information");
+
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	//////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
 	//int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
@@ -1196,7 +1258,7 @@ void findQPressX1(Parameter* para, int lev)
 	unsigned int nnz              = para->getParH(lev)->gridNZ;
 	int* geo_mat                  = para->getParH(lev)->geo;
 	unsigned int* kk              = para->getParH(lev)->k;
-	//unsigned int sizeQ            = para->getParH(lev)->numberOfOutflowBCnodes;
+	//unsigned int sizeQ            = para->getParH(lev)->outflowBC.numberOfBCnodes;
 	unsigned int sizeQ            = para->getParH(lev)->QpressX1.numberOfBCnodes;
 	real* rhoBC                = para->getParH(lev)->QpressX1.RhoBC;
 	real u0                    = para->getVelocity();
@@ -1210,33 +1272,33 @@ void findQPressX1(Parameter* para, int lev)
 	QIN.numberOfBCnodes = 0;
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	QforBoundaryConditions Q;
-	Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-	Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-	Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-	Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-	Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-	Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-	Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-	Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-	Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-	Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-	Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-	Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-	Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-	Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-	Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-	Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-	Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-	Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-	Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-	Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-	Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-	Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-	Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-	Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-	Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-	Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-	Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+	Q.q27[E   ] = &QQ[E   *sizeQ];
+	Q.q27[W   ] = &QQ[W   *sizeQ];
+	Q.q27[N   ] = &QQ[N   *sizeQ];
+	Q.q27[S   ] = &QQ[S   *sizeQ];
+	Q.q27[T   ] = &QQ[T   *sizeQ];
+	Q.q27[B   ] = &QQ[B   *sizeQ];
+	Q.q27[NE  ] = &QQ[NE  *sizeQ];
+	Q.q27[SW  ] = &QQ[SW  *sizeQ];
+	Q.q27[SE  ] = &QQ[SE  *sizeQ];
+	Q.q27[NW  ] = &QQ[NW  *sizeQ];
+	Q.q27[TE  ] = &QQ[TE  *sizeQ];
+	Q.q27[BW  ] = &QQ[BW  *sizeQ];
+	Q.q27[BE  ] = &QQ[BE  *sizeQ];
+	Q.q27[TW  ] = &QQ[TW  *sizeQ];
+	Q.q27[TN  ] = &QQ[TN  *sizeQ];
+	Q.q27[BS  ] = &QQ[BS  *sizeQ];
+	Q.q27[BN  ] = &QQ[BN  *sizeQ];
+	Q.q27[TS  ] = &QQ[TS  *sizeQ];
+	Q.q27[REST] = &QQ[REST*sizeQ];
+	Q.q27[TNE ] = &QQ[TNE *sizeQ];
+	Q.q27[TSW ] = &QQ[TSW *sizeQ];
+	Q.q27[TSE ] = &QQ[TSE *sizeQ];
+	Q.q27[TNW ] = &QQ[TNW *sizeQ];
+	Q.q27[BNE ] = &QQ[BNE *sizeQ];
+	Q.q27[BSW ] = &QQ[BSW *sizeQ];
+	Q.q27[BSE ] = &QQ[BSE *sizeQ];
+	Q.q27[BNW ] = &QQ[BNW *sizeQ];
 
 
 	//unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1);
@@ -1259,33 +1321,33 @@ void findQPressX1(Parameter* para, int lev)
 				//vz[QIN.numberOfBCnodes]             =  (real)(16.f*(u0*2.f)*(i-(STARTOFFX+1)-0.5f)*(li-1.5f-(i-(STARTOFFX+1)))*(j-(STARTOFFY+1)-0.5f)*(lj-1.5f-(j-(STARTOFFY+1))))/(li*lj*li*lj);
 				//vz[QIN.numberOfBCnodes]             = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny);
 				deltaVz[QIN.numberOfBCnodes]        = (real)0.f;
-				Q.q27[dirE   ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirW   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirN   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirS   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirT   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirB   ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirNE  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirSW  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirSE  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirNW  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTE  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirBW  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBE  ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirTW  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTN  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBS  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBN  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTS  ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirZERO][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTNE ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirTSW ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirTSE ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirTNW ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBNE ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirBSW ][QIN.numberOfBCnodes] = (real)-1.f;
-				Q.q27[dirBSE ][QIN.numberOfBCnodes] = (real)1.f;
-				Q.q27[dirBNW ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[E   ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[W   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[N   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[S   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[T   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[B   ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[NE  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[SW  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[SE  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[NW  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TE  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[BW  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BE  ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[TW  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TN  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BS  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BN  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TS  ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[REST][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TNE ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[TSW ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[TSE ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[TNW ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BNE ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[BSW ][QIN.numberOfBCnodes] = (real)-1.f;
+				Q.q27[BSE ][QIN.numberOfBCnodes] = (real)1.f;
+				Q.q27[BNW ][QIN.numberOfBCnodes] = (real)-1.f;
 				QIN.numberOfBCnodes++;
 			}
 		}
@@ -1295,6 +1357,11 @@ void findQPressX1(Parameter* para, int lev)
 ////////////////////////////////////////////////////////////////////////////////
 void findKforQPressX1(Parameter* para, int lev)
 {
+   // ! CAUTION ! Do not use this function!
+   // As the order of the distributions was changed in July 2022, this does not work anymore.
+   // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14
+    VF_LOG_CRITICAL("findKforQPressX1() is deprecated! - see comment above for more information");
+
 	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	//////////////  E   W   N   S   T   B  NE  SW  SE  NW  TE  BW  BE  TW  TN  BS  BN  TS ZERO TNE BNE TSE BSE TNW BNW TSW BSW  ////////////////////////
 	//int   ex[27]={  1, -1,  0,  0,  0,  0,  1, -1,  1, -1,  1, -1,  1, -1,  0,  0,  0,  0,   0,  1,  1,  1,  1, -1, -1, -1, -1};
diff --git a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.h b/src/gpu/VirtualFluids_GPU/FindQ/FindQ.h
index 5f3531062b35ea608a024652e0a0045b65ee3993..25575bb38b5d57c40cc4c9da973b12fa4a30bd2e 100644
--- a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.h
+++ b/src/gpu/VirtualFluids_GPU/FindQ/FindQ.h
@@ -2,7 +2,7 @@
 #define FIND_Q_H
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "Parameter/Parameter.h"
 
 extern "C" void findQ(Parameter* para, int lev);
diff --git a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu
index 8b99bd07f9928aab7bb8b62b6757775b59ce2537..9dfa96e10c750b3494bc0733421cd91b9219dfb5 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu
@@ -32,12 +32,12 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
-
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 //! \brief forward chimera transformation \ref forwardChimera
@@ -87,7 +87,7 @@ extern "C" __global__ void Factorized_Central_Moments_Advection_Diffusion_Device
 	//! The cumulant kernel is executed in the following steps
 	//!
 	////////////////////////////////////////////////////////////////////////////////
-	//! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+	//! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
 	//!
 	const unsigned  x = threadIdx.x;
 	const unsigned  y = blockIdx.x;
@@ -109,125 +109,125 @@ extern "C" __global__ void Factorized_Central_Moments_Advection_Diffusion_Device
 		Distributions27 dist;
 		if (isEvenTimestep)
 		{
-			dist.f[dirE   ] = &distributions[dirE   *size_Mat];
-			dist.f[dirW   ] = &distributions[dirW   *size_Mat];
-			dist.f[dirN   ] = &distributions[dirN   *size_Mat];
-			dist.f[dirS   ] = &distributions[dirS   *size_Mat];
-			dist.f[dirT   ] = &distributions[dirT   *size_Mat];
-			dist.f[dirB   ] = &distributions[dirB   *size_Mat];
-			dist.f[dirNE  ] = &distributions[dirNE  *size_Mat];
-			dist.f[dirSW  ] = &distributions[dirSW  *size_Mat];
-			dist.f[dirSE  ] = &distributions[dirSE  *size_Mat];
-			dist.f[dirNW  ] = &distributions[dirNW  *size_Mat];
-			dist.f[dirTE  ] = &distributions[dirTE  *size_Mat];
-			dist.f[dirBW  ] = &distributions[dirBW  *size_Mat];
-			dist.f[dirBE  ] = &distributions[dirBE  *size_Mat];
-			dist.f[dirTW  ] = &distributions[dirTW  *size_Mat];
-			dist.f[dirTN  ] = &distributions[dirTN  *size_Mat];
-			dist.f[dirBS  ] = &distributions[dirBS  *size_Mat];
-			dist.f[dirBN  ] = &distributions[dirBN  *size_Mat];
-			dist.f[dirTS  ] = &distributions[dirTS  *size_Mat];
-			dist.f[dirREST] = &distributions[dirREST*size_Mat];
-			dist.f[dirTNE ] = &distributions[dirTNE *size_Mat];
-			dist.f[dirTSW ] = &distributions[dirTSW *size_Mat];
-			dist.f[dirTSE ] = &distributions[dirTSE *size_Mat];
-			dist.f[dirTNW ] = &distributions[dirTNW *size_Mat];
-			dist.f[dirBNE ] = &distributions[dirBNE *size_Mat];
-			dist.f[dirBSW ] = &distributions[dirBSW *size_Mat];
-			dist.f[dirBSE ] = &distributions[dirBSE *size_Mat];
-			dist.f[dirBNW ] = &distributions[dirBNW *size_Mat];
+			dist.f[E   ] = &distributions[E   *size_Mat];
+			dist.f[W   ] = &distributions[W   *size_Mat];
+			dist.f[N   ] = &distributions[N   *size_Mat];
+			dist.f[S   ] = &distributions[S   *size_Mat];
+			dist.f[T   ] = &distributions[T   *size_Mat];
+			dist.f[B   ] = &distributions[B   *size_Mat];
+			dist.f[NE  ] = &distributions[NE  *size_Mat];
+			dist.f[SW  ] = &distributions[SW  *size_Mat];
+			dist.f[SE  ] = &distributions[SE  *size_Mat];
+			dist.f[NW  ] = &distributions[NW  *size_Mat];
+			dist.f[TE  ] = &distributions[TE  *size_Mat];
+			dist.f[BW  ] = &distributions[BW  *size_Mat];
+			dist.f[BE  ] = &distributions[BE  *size_Mat];
+			dist.f[TW  ] = &distributions[TW  *size_Mat];
+			dist.f[TN  ] = &distributions[TN  *size_Mat];
+			dist.f[BS  ] = &distributions[BS  *size_Mat];
+			dist.f[BN  ] = &distributions[BN  *size_Mat];
+			dist.f[TS  ] = &distributions[TS  *size_Mat];
+			dist.f[REST] = &distributions[REST*size_Mat];
+			dist.f[TNE ] = &distributions[TNE *size_Mat];
+			dist.f[TSW ] = &distributions[TSW *size_Mat];
+			dist.f[TSE ] = &distributions[TSE *size_Mat];
+			dist.f[TNW ] = &distributions[TNW *size_Mat];
+			dist.f[BNE ] = &distributions[BNE *size_Mat];
+			dist.f[BSW ] = &distributions[BSW *size_Mat];
+			dist.f[BSE ] = &distributions[BSE *size_Mat];
+			dist.f[BNW ] = &distributions[BNW *size_Mat];
 		}
 		else
 		{
-			dist.f[dirW   ] = &distributions[dirE   *size_Mat];
-			dist.f[dirE   ] = &distributions[dirW   *size_Mat];
-			dist.f[dirS   ] = &distributions[dirN   *size_Mat];
-			dist.f[dirN   ] = &distributions[dirS   *size_Mat];
-			dist.f[dirB   ] = &distributions[dirT   *size_Mat];
-			dist.f[dirT   ] = &distributions[dirB   *size_Mat];
-			dist.f[dirSW  ] = &distributions[dirNE  *size_Mat];
-			dist.f[dirNE  ] = &distributions[dirSW  *size_Mat];
-			dist.f[dirNW  ] = &distributions[dirSE  *size_Mat];
-			dist.f[dirSE  ] = &distributions[dirNW  *size_Mat];
-			dist.f[dirBW  ] = &distributions[dirTE  *size_Mat];
-			dist.f[dirTE  ] = &distributions[dirBW  *size_Mat];
-			dist.f[dirTW  ] = &distributions[dirBE  *size_Mat];
-			dist.f[dirBE  ] = &distributions[dirTW  *size_Mat];
-			dist.f[dirBS  ] = &distributions[dirTN  *size_Mat];
-			dist.f[dirTN  ] = &distributions[dirBS  *size_Mat];
-			dist.f[dirTS  ] = &distributions[dirBN  *size_Mat];
-			dist.f[dirBN  ] = &distributions[dirTS  *size_Mat];
-			dist.f[dirREST] = &distributions[dirREST*size_Mat];
-			dist.f[dirBSW ] = &distributions[dirTNE *size_Mat];
-			dist.f[dirBNE ] = &distributions[dirTSW *size_Mat];
-			dist.f[dirBNW ] = &distributions[dirTSE *size_Mat];
-			dist.f[dirBSE ] = &distributions[dirTNW *size_Mat];
-			dist.f[dirTSW ] = &distributions[dirBNE *size_Mat];
-			dist.f[dirTNE ] = &distributions[dirBSW *size_Mat];
-			dist.f[dirTNW ] = &distributions[dirBSE *size_Mat];
-			dist.f[dirTSE ] = &distributions[dirBNW *size_Mat];
+			dist.f[W   ] = &distributions[E   *size_Mat];
+			dist.f[E   ] = &distributions[W   *size_Mat];
+			dist.f[S   ] = &distributions[N   *size_Mat];
+			dist.f[N   ] = &distributions[S   *size_Mat];
+			dist.f[B   ] = &distributions[T   *size_Mat];
+			dist.f[T   ] = &distributions[B   *size_Mat];
+			dist.f[SW  ] = &distributions[NE  *size_Mat];
+			dist.f[NE  ] = &distributions[SW  *size_Mat];
+			dist.f[NW  ] = &distributions[SE  *size_Mat];
+			dist.f[SE  ] = &distributions[NW  *size_Mat];
+			dist.f[BW  ] = &distributions[TE  *size_Mat];
+			dist.f[TE  ] = &distributions[BW  *size_Mat];
+			dist.f[TW  ] = &distributions[BE  *size_Mat];
+			dist.f[BE  ] = &distributions[TW  *size_Mat];
+			dist.f[BS  ] = &distributions[TN  *size_Mat];
+			dist.f[TN  ] = &distributions[BS  *size_Mat];
+			dist.f[TS  ] = &distributions[BN  *size_Mat];
+			dist.f[BN  ] = &distributions[TS  *size_Mat];
+			dist.f[REST] = &distributions[REST*size_Mat];
+			dist.f[BSW ] = &distributions[TNE *size_Mat];
+			dist.f[BNE ] = &distributions[TSW *size_Mat];
+			dist.f[BNW ] = &distributions[TSE *size_Mat];
+			dist.f[BSE ] = &distributions[TNW *size_Mat];
+			dist.f[TSW ] = &distributions[BNE *size_Mat];
+			dist.f[TNE ] = &distributions[BSW *size_Mat];
+			dist.f[TNW ] = &distributions[BSE *size_Mat];
+			dist.f[TSE ] = &distributions[BNW *size_Mat];
 		}
 		////////////////////////////////////////////////////////////////////////////////
 		Distributions27 distAD;
 		if (isEvenTimestep)
 		{
-			distAD.f[dirE   ] = &distributionsAD[dirE   *size_Mat];
-			distAD.f[dirW   ] = &distributionsAD[dirW   *size_Mat];
-			distAD.f[dirN   ] = &distributionsAD[dirN   *size_Mat];
-			distAD.f[dirS   ] = &distributionsAD[dirS   *size_Mat];
-			distAD.f[dirT   ] = &distributionsAD[dirT   *size_Mat];
-			distAD.f[dirB   ] = &distributionsAD[dirB   *size_Mat];
-			distAD.f[dirNE  ] = &distributionsAD[dirNE  *size_Mat];
-			distAD.f[dirSW  ] = &distributionsAD[dirSW  *size_Mat];
-			distAD.f[dirSE  ] = &distributionsAD[dirSE  *size_Mat];
-			distAD.f[dirNW  ] = &distributionsAD[dirNW  *size_Mat];
-			distAD.f[dirTE  ] = &distributionsAD[dirTE  *size_Mat];
-			distAD.f[dirBW  ] = &distributionsAD[dirBW  *size_Mat];
-			distAD.f[dirBE  ] = &distributionsAD[dirBE  *size_Mat];
-			distAD.f[dirTW  ] = &distributionsAD[dirTW  *size_Mat];
-			distAD.f[dirTN  ] = &distributionsAD[dirTN  *size_Mat];
-			distAD.f[dirBS  ] = &distributionsAD[dirBS  *size_Mat];
-			distAD.f[dirBN  ] = &distributionsAD[dirBN  *size_Mat];
-			distAD.f[dirTS  ] = &distributionsAD[dirTS  *size_Mat];
-			distAD.f[dirREST] = &distributionsAD[dirREST*size_Mat];
-			distAD.f[dirTNE ] = &distributionsAD[dirTNE *size_Mat];
-			distAD.f[dirTSW ] = &distributionsAD[dirTSW *size_Mat];
-			distAD.f[dirTSE ] = &distributionsAD[dirTSE *size_Mat];
-			distAD.f[dirTNW ] = &distributionsAD[dirTNW *size_Mat];
-			distAD.f[dirBNE ] = &distributionsAD[dirBNE *size_Mat];
-			distAD.f[dirBSW ] = &distributionsAD[dirBSW *size_Mat];
-			distAD.f[dirBSE ] = &distributionsAD[dirBSE *size_Mat];
-			distAD.f[dirBNW ] = &distributionsAD[dirBNW *size_Mat];
+			distAD.f[E   ] = &distributionsAD[E   *size_Mat];
+			distAD.f[W   ] = &distributionsAD[W   *size_Mat];
+			distAD.f[N   ] = &distributionsAD[N   *size_Mat];
+			distAD.f[S   ] = &distributionsAD[S   *size_Mat];
+			distAD.f[T   ] = &distributionsAD[T   *size_Mat];
+			distAD.f[B   ] = &distributionsAD[B   *size_Mat];
+			distAD.f[NE  ] = &distributionsAD[NE  *size_Mat];
+			distAD.f[SW  ] = &distributionsAD[SW  *size_Mat];
+			distAD.f[SE  ] = &distributionsAD[SE  *size_Mat];
+			distAD.f[NW  ] = &distributionsAD[NW  *size_Mat];
+			distAD.f[TE  ] = &distributionsAD[TE  *size_Mat];
+			distAD.f[BW  ] = &distributionsAD[BW  *size_Mat];
+			distAD.f[BE  ] = &distributionsAD[BE  *size_Mat];
+			distAD.f[TW  ] = &distributionsAD[TW  *size_Mat];
+			distAD.f[TN  ] = &distributionsAD[TN  *size_Mat];
+			distAD.f[BS  ] = &distributionsAD[BS  *size_Mat];
+			distAD.f[BN  ] = &distributionsAD[BN  *size_Mat];
+			distAD.f[TS  ] = &distributionsAD[TS  *size_Mat];
+			distAD.f[REST] = &distributionsAD[REST*size_Mat];
+			distAD.f[TNE ] = &distributionsAD[TNE *size_Mat];
+			distAD.f[TSW ] = &distributionsAD[TSW *size_Mat];
+			distAD.f[TSE ] = &distributionsAD[TSE *size_Mat];
+			distAD.f[TNW ] = &distributionsAD[TNW *size_Mat];
+			distAD.f[BNE ] = &distributionsAD[BNE *size_Mat];
+			distAD.f[BSW ] = &distributionsAD[BSW *size_Mat];
+			distAD.f[BSE ] = &distributionsAD[BSE *size_Mat];
+			distAD.f[BNW ] = &distributionsAD[BNW *size_Mat];
 		}
 		else
 		{
-			distAD.f[dirW   ] = &distributionsAD[dirE   *size_Mat];
-			distAD.f[dirE   ] = &distributionsAD[dirW   *size_Mat];
-			distAD.f[dirS   ] = &distributionsAD[dirN   *size_Mat];
-			distAD.f[dirN   ] = &distributionsAD[dirS   *size_Mat];
-			distAD.f[dirB   ] = &distributionsAD[dirT   *size_Mat];
-			distAD.f[dirT   ] = &distributionsAD[dirB   *size_Mat];
-			distAD.f[dirSW  ] = &distributionsAD[dirNE  *size_Mat];
-			distAD.f[dirNE  ] = &distributionsAD[dirSW  *size_Mat];
-			distAD.f[dirNW  ] = &distributionsAD[dirSE  *size_Mat];
-			distAD.f[dirSE  ] = &distributionsAD[dirNW  *size_Mat];
-			distAD.f[dirBW  ] = &distributionsAD[dirTE  *size_Mat];
-			distAD.f[dirTE  ] = &distributionsAD[dirBW  *size_Mat];
-			distAD.f[dirTW  ] = &distributionsAD[dirBE  *size_Mat];
-			distAD.f[dirBE  ] = &distributionsAD[dirTW  *size_Mat];
-			distAD.f[dirBS  ] = &distributionsAD[dirTN  *size_Mat];
-			distAD.f[dirTN  ] = &distributionsAD[dirBS  *size_Mat];
-			distAD.f[dirTS  ] = &distributionsAD[dirBN  *size_Mat];
-			distAD.f[dirBN  ] = &distributionsAD[dirTS  *size_Mat];
-			distAD.f[dirREST] = &distributionsAD[dirREST*size_Mat];
-			distAD.f[dirBSW ] = &distributionsAD[dirTNE *size_Mat];
-			distAD.f[dirBNE ] = &distributionsAD[dirTSW *size_Mat];
-			distAD.f[dirBNW ] = &distributionsAD[dirTSE *size_Mat];
-			distAD.f[dirBSE ] = &distributionsAD[dirTNW *size_Mat];
-			distAD.f[dirTSW ] = &distributionsAD[dirBNE *size_Mat];
-			distAD.f[dirTNE ] = &distributionsAD[dirBSW *size_Mat];
-			distAD.f[dirTNW ] = &distributionsAD[dirBSE *size_Mat];
-			distAD.f[dirTSE ] = &distributionsAD[dirBNW *size_Mat];
+			distAD.f[W   ] = &distributionsAD[E   *size_Mat];
+			distAD.f[E   ] = &distributionsAD[W   *size_Mat];
+			distAD.f[S   ] = &distributionsAD[N   *size_Mat];
+			distAD.f[N   ] = &distributionsAD[S   *size_Mat];
+			distAD.f[B   ] = &distributionsAD[T   *size_Mat];
+			distAD.f[T   ] = &distributionsAD[B   *size_Mat];
+			distAD.f[SW  ] = &distributionsAD[NE  *size_Mat];
+			distAD.f[NE  ] = &distributionsAD[SW  *size_Mat];
+			distAD.f[NW  ] = &distributionsAD[SE  *size_Mat];
+			distAD.f[SE  ] = &distributionsAD[NW  *size_Mat];
+			distAD.f[BW  ] = &distributionsAD[TE  *size_Mat];
+			distAD.f[TE  ] = &distributionsAD[BW  *size_Mat];
+			distAD.f[TW  ] = &distributionsAD[BE  *size_Mat];
+			distAD.f[BE  ] = &distributionsAD[TW  *size_Mat];
+			distAD.f[BS  ] = &distributionsAD[TN  *size_Mat];
+			distAD.f[TN  ] = &distributionsAD[BS  *size_Mat];
+			distAD.f[TS  ] = &distributionsAD[BN  *size_Mat];
+			distAD.f[BN  ] = &distributionsAD[TS  *size_Mat];
+			distAD.f[REST] = &distributionsAD[REST*size_Mat];
+			distAD.f[BSW ] = &distributionsAD[TNE *size_Mat];
+			distAD.f[BNE ] = &distributionsAD[TSW *size_Mat];
+			distAD.f[BNW ] = &distributionsAD[TSE *size_Mat];
+			distAD.f[BSE ] = &distributionsAD[TNW *size_Mat];
+			distAD.f[TSW ] = &distributionsAD[BNE *size_Mat];
+			distAD.f[TNE ] = &distributionsAD[BSW *size_Mat];
+			distAD.f[TNW ] = &distributionsAD[BSE *size_Mat];
+			distAD.f[TSE ] = &distributionsAD[BNW *size_Mat];
 		}
 		////////////////////////////////////////////////////////////////////////////////
 		//! - Set neighbor indices (necessary for indirect addressing)
@@ -241,63 +241,63 @@ extern "C" __global__ void Factorized_Central_Moments_Advection_Diffusion_Device
 		////////////////////////////////////////////////////////////////////////////////////
 		//! - Set local distributions Fluid
 		//!
-		real fcbb = (dist.f[dirE   ])[k];
-		real fabb = (dist.f[dirW   ])[kw];
-		real fbcb = (dist.f[dirN   ])[k];
-		real fbab = (dist.f[dirS   ])[ks];
-		real fbbc = (dist.f[dirT   ])[k];
-		real fbba = (dist.f[dirB   ])[kb];
-		real fccb = (dist.f[dirNE  ])[k];
-		real faab = (dist.f[dirSW  ])[ksw];
-		real fcab = (dist.f[dirSE  ])[ks];
-		real facb = (dist.f[dirNW  ])[kw];
-		real fcbc = (dist.f[dirTE  ])[k];
-		real faba = (dist.f[dirBW  ])[kbw];
-		real fcba = (dist.f[dirBE  ])[kb];
-		real fabc = (dist.f[dirTW  ])[kw];
-		real fbcc = (dist.f[dirTN  ])[k];
-		real fbaa = (dist.f[dirBS  ])[kbs];
-		real fbca = (dist.f[dirBN  ])[kb];
-		real fbac = (dist.f[dirTS  ])[ks];
-		real fbbb = (dist.f[dirREST])[k];
-		real fccc = (dist.f[dirTNE ])[k];
-		real faac = (dist.f[dirTSW ])[ksw];
-		real fcac = (dist.f[dirTSE ])[ks];
-		real facc = (dist.f[dirTNW ])[kw];
-		real fcca = (dist.f[dirBNE ])[kb];
-		real faaa = (dist.f[dirBSW ])[kbsw];
-		real fcaa = (dist.f[dirBSE ])[kbs];
-		real faca = (dist.f[dirBNW ])[kbw];
+		real fcbb = (dist.f[E   ])[k];
+		real fabb = (dist.f[W   ])[kw];
+		real fbcb = (dist.f[N   ])[k];
+		real fbab = (dist.f[S   ])[ks];
+		real fbbc = (dist.f[T   ])[k];
+		real fbba = (dist.f[B   ])[kb];
+		real fccb = (dist.f[NE  ])[k];
+		real faab = (dist.f[SW  ])[ksw];
+		real fcab = (dist.f[SE  ])[ks];
+		real facb = (dist.f[NW  ])[kw];
+		real fcbc = (dist.f[TE  ])[k];
+		real faba = (dist.f[BW  ])[kbw];
+		real fcba = (dist.f[BE  ])[kb];
+		real fabc = (dist.f[TW  ])[kw];
+		real fbcc = (dist.f[TN  ])[k];
+		real fbaa = (dist.f[BS  ])[kbs];
+		real fbca = (dist.f[BN  ])[kb];
+		real fbac = (dist.f[TS  ])[ks];
+		real fbbb = (dist.f[REST])[k];
+		real fccc = (dist.f[TNE ])[k];
+		real faac = (dist.f[TSW ])[ksw];
+		real fcac = (dist.f[TSE ])[ks];
+		real facc = (dist.f[TNW ])[kw];
+		real fcca = (dist.f[BNE ])[kb];
+		real faaa = (dist.f[BSW ])[kbsw];
+		real fcaa = (dist.f[BSE ])[kbs];
+		real faca = (dist.f[BNW ])[kbw];
 		////////////////////////////////////////////////////////////////////////////////////
 		//! - Set local distributions Advection Diffusion
 		//!
-		real mfcbb = (distAD.f[dirE   ])[k];
-		real mfabb = (distAD.f[dirW   ])[kw];
-		real mfbcb = (distAD.f[dirN   ])[k];
-		real mfbab = (distAD.f[dirS   ])[ks];
-		real mfbbc = (distAD.f[dirT   ])[k];
-		real mfbba = (distAD.f[dirB   ])[kb];
-		real mfccb = (distAD.f[dirNE  ])[k];
-		real mfaab = (distAD.f[dirSW  ])[ksw];
-		real mfcab = (distAD.f[dirSE  ])[ks];
-		real mfacb = (distAD.f[dirNW  ])[kw];
-		real mfcbc = (distAD.f[dirTE  ])[k];
-		real mfaba = (distAD.f[dirBW  ])[kbw];
-		real mfcba = (distAD.f[dirBE  ])[kb];
-		real mfabc = (distAD.f[dirTW  ])[kw];
-		real mfbcc = (distAD.f[dirTN  ])[k];
-		real mfbaa = (distAD.f[dirBS  ])[kbs];
-		real mfbca = (distAD.f[dirBN  ])[kb];
-		real mfbac = (distAD.f[dirTS  ])[ks];
-		real mfbbb = (distAD.f[dirREST])[k];
-		real mfccc = (distAD.f[dirTNE ])[k];
-		real mfaac = (distAD.f[dirTSW ])[ksw];
-		real mfcac = (distAD.f[dirTSE ])[ks];
-		real mfacc = (distAD.f[dirTNW ])[kw];
-		real mfcca = (distAD.f[dirBNE ])[kb];
-		real mfaaa = (distAD.f[dirBSW ])[kbsw];
-		real mfcaa = (distAD.f[dirBSE ])[kbs];
-		real mfaca = (distAD.f[dirBNW ])[kbw];
+		real mfcbb = (distAD.f[E   ])[k];
+		real mfabb = (distAD.f[W   ])[kw];
+		real mfbcb = (distAD.f[N   ])[k];
+		real mfbab = (distAD.f[S   ])[ks];
+		real mfbbc = (distAD.f[T   ])[k];
+		real mfbba = (distAD.f[B   ])[kb];
+		real mfccb = (distAD.f[NE  ])[k];
+		real mfaab = (distAD.f[SW  ])[ksw];
+		real mfcab = (distAD.f[SE  ])[ks];
+		real mfacb = (distAD.f[NW  ])[kw];
+		real mfcbc = (distAD.f[TE  ])[k];
+		real mfaba = (distAD.f[BW  ])[kbw];
+		real mfcba = (distAD.f[BE  ])[kb];
+		real mfabc = (distAD.f[TW  ])[kw];
+		real mfbcc = (distAD.f[TN  ])[k];
+		real mfbaa = (distAD.f[BS  ])[kbs];
+		real mfbca = (distAD.f[BN  ])[kb];
+		real mfbac = (distAD.f[TS  ])[ks];
+		real mfbbb = (distAD.f[REST])[k];
+		real mfccc = (distAD.f[TNE ])[k];
+		real mfaac = (distAD.f[TSW ])[ksw];
+		real mfcac = (distAD.f[TSE ])[ks];
+		real mfacc = (distAD.f[TNW ])[kw];
+		real mfcca = (distAD.f[BNE ])[kb];
+		real mfaaa = (distAD.f[BSW ])[kbsw];
+		real mfcaa = (distAD.f[BSE ])[kbs];
+		real mfaca = (distAD.f[BNW ])[kbw];
 		////////////////////////////////////////////////////////////////////////////////////
 		//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
 		//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
@@ -503,33 +503,33 @@ extern "C" __global__ void Factorized_Central_Moments_Advection_Diffusion_Device
 		//! stored arrays dependent on timestep is based on the esoteric twist algorithm
 		//! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
 		//!
-		(distAD.f[dirE   ])[k   ] = mfabb;
-		(distAD.f[dirW   ])[kw  ] = mfcbb;
-		(distAD.f[dirN   ])[k   ] = mfbab;
-		(distAD.f[dirS   ])[ks  ] = mfbcb;
-		(distAD.f[dirT   ])[k   ] = mfbba;
-		(distAD.f[dirB   ])[kb  ] = mfbbc;
-		(distAD.f[dirNE  ])[k   ] = mfaab;
-		(distAD.f[dirSW  ])[ksw ] = mfccb;
-		(distAD.f[dirSE  ])[ks  ] = mfacb;
-		(distAD.f[dirNW  ])[kw  ] = mfcab;
-		(distAD.f[dirTE  ])[k   ] = mfaba;
-		(distAD.f[dirBW  ])[kbw ] = mfcbc;
-		(distAD.f[dirBE  ])[kb  ] = mfabc;
-		(distAD.f[dirTW  ])[kw  ] = mfcba;
-		(distAD.f[dirTN  ])[k   ] = mfbaa;
-		(distAD.f[dirBS  ])[kbs ] = mfbcc;
-		(distAD.f[dirBN  ])[kb  ] = mfbac;
-		(distAD.f[dirTS  ])[ks  ] = mfbca;
-		(distAD.f[dirREST])[k   ] = mfbbb;
-		(distAD.f[dirTNE ])[k   ] = mfaaa;
-		(distAD.f[dirTSE ])[ks  ] = mfaca;
-		(distAD.f[dirBNE ])[kb  ] = mfaac;
-		(distAD.f[dirBSE ])[kbs ] = mfacc;
-		(distAD.f[dirTNW ])[kw  ] = mfcaa;
-		(distAD.f[dirTSW ])[ksw ] = mfcca;
-		(distAD.f[dirBNW ])[kbw ] = mfcac;
-		(distAD.f[dirBSW ])[kbsw] = mfccc;
+		(distAD.f[E   ])[k   ] = mfabb;
+		(distAD.f[W   ])[kw  ] = mfcbb;
+		(distAD.f[N   ])[k   ] = mfbab;
+		(distAD.f[S   ])[ks  ] = mfbcb;
+		(distAD.f[T   ])[k   ] = mfbba;
+		(distAD.f[B   ])[kb  ] = mfbbc;
+		(distAD.f[NE  ])[k   ] = mfaab;
+		(distAD.f[SW  ])[ksw ] = mfccb;
+		(distAD.f[SE  ])[ks  ] = mfacb;
+		(distAD.f[NW  ])[kw  ] = mfcab;
+		(distAD.f[TE  ])[k   ] = mfaba;
+		(distAD.f[BW  ])[kbw ] = mfcbc;
+		(distAD.f[BE  ])[kb  ] = mfabc;
+		(distAD.f[TW  ])[kw  ] = mfcba;
+		(distAD.f[TN  ])[k   ] = mfbaa;
+		(distAD.f[BS  ])[kbs ] = mfbcc;
+		(distAD.f[BN  ])[kb  ] = mfbac;
+		(distAD.f[TS  ])[ks  ] = mfbca;
+		(distAD.f[REST])[k   ] = mfbbb;
+		(distAD.f[TNE ])[k   ] = mfaaa;
+		(distAD.f[TSE ])[ks  ] = mfaca;
+		(distAD.f[BNE ])[kb  ] = mfaac;
+		(distAD.f[BSE ])[kbs ] = mfacc;
+		(distAD.f[TNW ])[kw  ] = mfcaa;
+		(distAD.f[TSW ])[ksw ] = mfcca;
+		(distAD.f[BNW ])[kbw ] = mfcac;
+		(distAD.f[BSW ])[kbsw] = mfccc;
 	}
 }
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu
index 9d7cd2169405acc94ece2d498a82aecaff8b1410..cc2b3c7c9311def9f3d94f264e68e9ff159d513f 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu
@@ -1,23 +1,21 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADPress7(  int inx,
-                                       int iny,
-                                       real* DD, 
+extern "C" __global__ void QADPress7(  real* DD, 
                                        real* DD7, 
                                        real* temp,
                                        real* velo,
                                        real diffusivity,
                                        int* k_Q, 
                                        real* QQ,
-                                       unsigned int sizeQ,
-                                       int numberOfBCnodes, 
+                                       unsigned int numberOfBCnodes, 
                                        real om1, 
                                        unsigned int* neighborX,
                                        unsigned int* neighborY,
@@ -28,63 +26,63 @@ extern "C" __global__ void QADPress7(  int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions7 D7;
@@ -130,32 +128,32 @@ extern "C" __global__ void QADPress7(  int inx,
       //         *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
       //         *q_dirBSE, *q_dirBNW;
 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      //q_dirNE  = &QQ[dirNE  *sizeQ];
-      //q_dirSW  = &QQ[dirSW  *sizeQ];
-      //q_dirSE  = &QQ[dirSE  *sizeQ];
-      //q_dirNW  = &QQ[dirNW  *sizeQ];
-      //q_dirTE  = &QQ[dirTE  *sizeQ];
-      //q_dirBW  = &QQ[dirBW  *sizeQ];
-      //q_dirBE  = &QQ[dirBE  *sizeQ];
-      //q_dirTW  = &QQ[dirTW  *sizeQ];
-      //q_dirTN  = &QQ[dirTN  *sizeQ];
-      //q_dirBS  = &QQ[dirBS  *sizeQ];
-      //q_dirBN  = &QQ[dirBN  *sizeQ];
-      //q_dirTS  = &QQ[dirTS  *sizeQ];
-      //q_dirTNE = &QQ[dirTNE *sizeQ];
-      //q_dirTSW = &QQ[dirTSW *sizeQ];
-      //q_dirTSE = &QQ[dirTSE *sizeQ];
-      //q_dirTNW = &QQ[dirTNW *sizeQ];
-      //q_dirBNE = &QQ[dirBNE *sizeQ];
-      //q_dirBSW = &QQ[dirBSW *sizeQ];
-      //q_dirBSE = &QQ[dirBSE *sizeQ];
-      //q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      //q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      //q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      //q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      //q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      //q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      //q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      //q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      //q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      //q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      //q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      //q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      //q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      //q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      //q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      //q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      //q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      //q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      //q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      //q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      //q_dirBNW = &QQ[BNW * numberOfBCnodes];
       //////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -190,32 +188,32 @@ extern "C" __global__ void QADPress7(  int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       /*real drho*/;
       //real vx1_Inflow   = zero;
@@ -228,7 +226,7 @@ extern "C" __global__ void QADPress7(  int inx,
 
       //drho   =    f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
       //            f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-      //            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      //            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       //real vx1 =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
       //               ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -242,7 +240,7 @@ extern "C" __global__ void QADPress7(  int inx,
       //               (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
       //               (f_T - f_B); 
 
-      real rho0   =  (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[dirZERO])[kzero]);
+      real rho0   =  (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[REST])[kzero]);
       real rho    =  rho0 + c1o1;
       real OORho  =  c1o1/rho;
       real vx1    =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
@@ -316,7 +314,7 @@ extern "C" __global__ void QADPress7(  int inx,
 
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=0.1f;
+      //(D.f[REST])[k]=0.1f;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //E
       //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //W
@@ -451,17 +449,14 @@ extern "C" __global__ void QADPress7(  int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADPress27( int inx,
-                                       int iny,
-                                       real* DD, 
+extern "C" __global__ void QADPress27( real* DD, 
                                        real* DD27, 
                                        real* temp,
                                        real* velo,
                                        real diffusivity,
                                        int* k_Q, 
                                        real* QQ,
-                                       unsigned int sizeQ,
-                                       int numberOfBCnodes, 
+                                       unsigned int numberOfBCnodes, 
                                        real om1, 
                                        unsigned int* neighborX,
                                        unsigned int* neighborY,
@@ -472,125 +467,125 @@ extern "C" __global__ void QADPress27( int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -611,32 +606,32 @@ extern "C" __global__ void QADPress27( int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -668,33 +663,33 @@ extern "C" __global__ void QADPress27( int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_ZERO = (D.f[REST])[kzero];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, /*drho, feq,*/ q;
       //drho   = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
@@ -720,33 +715,33 @@ extern "C" __global__ void QADPress27( int inx,
       vx2            =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       vx3            =  OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      real f27_W    = (D27.f[dirE   ])[ke   ];
-      real f27_E    = (D27.f[dirW   ])[kw   ];
-      real f27_S    = (D27.f[dirN   ])[kn   ];
-      real f27_N    = (D27.f[dirS   ])[ks   ];
-      real f27_B    = (D27.f[dirT   ])[kt   ];
-      real f27_T    = (D27.f[dirB   ])[kb   ];
-      real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      real f27_ZERO = (D27.f[dirZERO])[kzero];
-      real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      real f27_W    = (D27.f[E   ])[ke   ];
+      real f27_E    = (D27.f[W   ])[kw   ];
+      real f27_S    = (D27.f[N   ])[kn   ];
+      real f27_N    = (D27.f[S   ])[ks   ];
+      real f27_B    = (D27.f[T   ])[kt   ];
+      real f27_T    = (D27.f[B   ])[kb   ];
+      real f27_SW   = (D27.f[NE  ])[kne  ];
+      real f27_NE   = (D27.f[SW  ])[ksw  ];
+      real f27_NW   = (D27.f[SE  ])[kse  ];
+      real f27_SE   = (D27.f[NW  ])[knw  ];
+      real f27_BW   = (D27.f[TE  ])[kte  ];
+      real f27_TE   = (D27.f[BW  ])[kbw  ];
+      real f27_TW   = (D27.f[BE  ])[kbe  ];
+      real f27_BE   = (D27.f[TW  ])[ktw  ];
+      real f27_BS   = (D27.f[TN  ])[ktn  ];
+      real f27_TN   = (D27.f[BS  ])[kbs  ];
+      real f27_TS   = (D27.f[BN  ])[kbn  ];
+      real f27_BN   = (D27.f[TS  ])[kts  ];
+      real f27_ZERO = (D27.f[REST])[kzero];
+      real f27_BSW  = (D27.f[TNE ])[ktne ];
+      real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      real f27_BNW  = (D27.f[TSE ])[ktse ];
+      real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      real f27_TSW  = (D27.f[BNE ])[kbne ];
+      real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      real f27_TNW  = (D27.f[BSE ])[kbse ];
+      real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -854,94 +849,94 @@ extern "C" __global__ void QADPress27( int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]=(c2o1*feqW27_W  -(f27_E  *(q*omegaD-c1o1)-omegaD*feq27_E  *(q-c1o1))/(omegaD-c1o1)+f27_W  *q)/(q+c1o1);
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]=(c2o1*feqW27_E  -(f27_W  *(q*omegaD-c1o1)-omegaD*feq27_W  *(q-c1o1))/(omegaD-c1o1)+f27_E  *q)/(q+c1o1);
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]=(c2o1*feqW27_S  -(f27_N  *(q*omegaD-c1o1)-omegaD*feq27_N  *(q-c1o1))/(omegaD-c1o1)+f27_S  *q)/(q+c1o1);
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]=(c2o1*feqW27_N  -(f27_S  *(q*omegaD-c1o1)-omegaD*feq27_S  *(q-c1o1))/(omegaD-c1o1)+f27_N  *q)/(q+c1o1);
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]=(c2o1*feqW27_B  -(f27_T  *(q*omegaD-c1o1)-omegaD*feq27_T  *(q-c1o1))/(omegaD-c1o1)+f27_B  *q)/(q+c1o1);
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]=(c2o1*feqW27_T  -(f27_B  *(q*omegaD-c1o1)-omegaD*feq27_B  *(q-c1o1))/(omegaD-c1o1)+f27_T  *q)/(q+c1o1);
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1);
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1);
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1);
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1);
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1);
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1);
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1);
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1);
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1);
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1);
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1);
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1);
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1);
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1);
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1);
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1);
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1);
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1);
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1);
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]=(c2o1*feqW27_W  -(f27_E  *(q*omegaD-c1o1)-omegaD*feq27_E  *(q-c1o1))/(omegaD-c1o1)+f27_W  *q)/(q+c1o1);
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]=(c2o1*feqW27_E  -(f27_W  *(q*omegaD-c1o1)-omegaD*feq27_W  *(q-c1o1))/(omegaD-c1o1)+f27_E  *q)/(q+c1o1);
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]=(c2o1*feqW27_S  -(f27_N  *(q*omegaD-c1o1)-omegaD*feq27_N  *(q-c1o1))/(omegaD-c1o1)+f27_S  *q)/(q+c1o1);
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]=(c2o1*feqW27_N  -(f27_S  *(q*omegaD-c1o1)-omegaD*feq27_S  *(q-c1o1))/(omegaD-c1o1)+f27_N  *q)/(q+c1o1);
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]=(c2o1*feqW27_B  -(f27_T  *(q*omegaD-c1o1)-omegaD*feq27_T  *(q-c1o1))/(omegaD-c1o1)+f27_B  *q)/(q+c1o1);
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]=(c2o1*feqW27_T  -(f27_B  *(q*omegaD-c1o1)-omegaD*feq27_B  *(q-c1o1))/(omegaD-c1o1)+f27_T  *q)/(q+c1o1);
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1);
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1);
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1);
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1);
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1);
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1);
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1);
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1);
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1);
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1);
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1);
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1);
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1);
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1);
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1);
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1);
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1);
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1);
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1);
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1001,125 +996,125 @@ extern "C" __global__ void QADPressNEQNeighbor27(
 	Distributions27 D;
 	if (isEvenTimestep == true)
 	{
-		D.f[dirE] = &DD[dirE   *size_Mat];
-		D.f[dirW] = &DD[dirW   *size_Mat];
-		D.f[dirN] = &DD[dirN   *size_Mat];
-		D.f[dirS] = &DD[dirS   *size_Mat];
-		D.f[dirT] = &DD[dirT   *size_Mat];
-		D.f[dirB] = &DD[dirB   *size_Mat];
-		D.f[dirNE] = &DD[dirNE  *size_Mat];
-		D.f[dirSW] = &DD[dirSW  *size_Mat];
-		D.f[dirSE] = &DD[dirSE  *size_Mat];
-		D.f[dirNW] = &DD[dirNW  *size_Mat];
-		D.f[dirTE] = &DD[dirTE  *size_Mat];
-		D.f[dirBW] = &DD[dirBW  *size_Mat];
-		D.f[dirBE] = &DD[dirBE  *size_Mat];
-		D.f[dirTW] = &DD[dirTW  *size_Mat];
-		D.f[dirTN] = &DD[dirTN  *size_Mat];
-		D.f[dirBS] = &DD[dirBS  *size_Mat];
-		D.f[dirBN] = &DD[dirBN  *size_Mat];
-		D.f[dirTS] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW] = &DD[dirBNW *size_Mat];
+		D.f[E] = &DD[E   *size_Mat];
+		D.f[W] = &DD[W   *size_Mat];
+		D.f[N] = &DD[N   *size_Mat];
+		D.f[S] = &DD[S   *size_Mat];
+		D.f[T] = &DD[T   *size_Mat];
+		D.f[B] = &DD[B   *size_Mat];
+		D.f[NE] = &DD[NE  *size_Mat];
+		D.f[SW] = &DD[SW  *size_Mat];
+		D.f[SE] = &DD[SE  *size_Mat];
+		D.f[NW] = &DD[NW  *size_Mat];
+		D.f[TE] = &DD[TE  *size_Mat];
+		D.f[BW] = &DD[BW  *size_Mat];
+		D.f[BE] = &DD[BE  *size_Mat];
+		D.f[TW] = &DD[TW  *size_Mat];
+		D.f[TN] = &DD[TN  *size_Mat];
+		D.f[BS] = &DD[BS  *size_Mat];
+		D.f[BN] = &DD[BN  *size_Mat];
+		D.f[TS] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE] = &DD[TNE *size_Mat];
+		D.f[TSW] = &DD[TSW *size_Mat];
+		D.f[TSE] = &DD[TSE *size_Mat];
+		D.f[TNW] = &DD[TNW *size_Mat];
+		D.f[BNE] = &DD[BNE *size_Mat];
+		D.f[BSW] = &DD[BSW *size_Mat];
+		D.f[BSE] = &DD[BSE *size_Mat];
+		D.f[BNW] = &DD[BNW *size_Mat];
 	}
 	else
 	{
-		D.f[dirW] = &DD[dirE   *size_Mat];
-		D.f[dirE] = &DD[dirW   *size_Mat];
-		D.f[dirS] = &DD[dirN   *size_Mat];
-		D.f[dirN] = &DD[dirS   *size_Mat];
-		D.f[dirB] = &DD[dirT   *size_Mat];
-		D.f[dirT] = &DD[dirB   *size_Mat];
-		D.f[dirSW] = &DD[dirNE  *size_Mat];
-		D.f[dirNE] = &DD[dirSW  *size_Mat];
-		D.f[dirNW] = &DD[dirSE  *size_Mat];
-		D.f[dirSE] = &DD[dirNW  *size_Mat];
-		D.f[dirBW] = &DD[dirTE  *size_Mat];
-		D.f[dirTE] = &DD[dirBW  *size_Mat];
-		D.f[dirTW] = &DD[dirBE  *size_Mat];
-		D.f[dirBE] = &DD[dirTW  *size_Mat];
-		D.f[dirBS] = &DD[dirTN  *size_Mat];
-		D.f[dirTN] = &DD[dirBS  *size_Mat];
-		D.f[dirTS] = &DD[dirBN  *size_Mat];
-		D.f[dirBN] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW] = &DD[dirTSE *size_Mat];
+		D.f[W] = &DD[E   *size_Mat];
+		D.f[E] = &DD[W   *size_Mat];
+		D.f[S] = &DD[N   *size_Mat];
+		D.f[N] = &DD[S   *size_Mat];
+		D.f[B] = &DD[T   *size_Mat];
+		D.f[T] = &DD[B   *size_Mat];
+		D.f[SW] = &DD[NE  *size_Mat];
+		D.f[NE] = &DD[SW  *size_Mat];
+		D.f[NW] = &DD[SE  *size_Mat];
+		D.f[SE] = &DD[NW  *size_Mat];
+		D.f[BW] = &DD[TE  *size_Mat];
+		D.f[TE] = &DD[BW  *size_Mat];
+		D.f[TW] = &DD[BE  *size_Mat];
+		D.f[BE] = &DD[TW  *size_Mat];
+		D.f[BS] = &DD[TN  *size_Mat];
+		D.f[TN] = &DD[BS  *size_Mat];
+		D.f[TS] = &DD[BN  *size_Mat];
+		D.f[BN] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE] = &DD[BSW *size_Mat];
+		D.f[TSW] = &DD[BNE *size_Mat];
+		D.f[TSE] = &DD[BNW *size_Mat];
+		D.f[TNW] = &DD[BSE *size_Mat];
+		D.f[BNE] = &DD[TSW *size_Mat];
+		D.f[BSW] = &DD[TNE *size_Mat];
+		D.f[BSE] = &DD[TNW *size_Mat];
+		D.f[BNW] = &DD[TSE *size_Mat];
 	}
 
 	Distributions27 D27;
 	if (isEvenTimestep == true)
 	{
-		D27.f[dirE] = &DD27[dirE   *size_Mat];
-		D27.f[dirW] = &DD27[dirW   *size_Mat];
-		D27.f[dirN] = &DD27[dirN   *size_Mat];
-		D27.f[dirS] = &DD27[dirS   *size_Mat];
-		D27.f[dirT] = &DD27[dirT   *size_Mat];
-		D27.f[dirB] = &DD27[dirB   *size_Mat];
-		D27.f[dirNE] = &DD27[dirNE  *size_Mat];
-		D27.f[dirSW] = &DD27[dirSW  *size_Mat];
-		D27.f[dirSE] = &DD27[dirSE  *size_Mat];
-		D27.f[dirNW] = &DD27[dirNW  *size_Mat];
-		D27.f[dirTE] = &DD27[dirTE  *size_Mat];
-		D27.f[dirBW] = &DD27[dirBW  *size_Mat];
-		D27.f[dirBE] = &DD27[dirBE  *size_Mat];
-		D27.f[dirTW] = &DD27[dirTW  *size_Mat];
-		D27.f[dirTN] = &DD27[dirTN  *size_Mat];
-		D27.f[dirBS] = &DD27[dirBS  *size_Mat];
-		D27.f[dirBN] = &DD27[dirBN  *size_Mat];
-		D27.f[dirTS] = &DD27[dirTS  *size_Mat];
-		D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-		D27.f[dirTNE] = &DD27[dirTNE *size_Mat];
-		D27.f[dirTSW] = &DD27[dirTSW *size_Mat];
-		D27.f[dirTSE] = &DD27[dirTSE *size_Mat];
-		D27.f[dirTNW] = &DD27[dirTNW *size_Mat];
-		D27.f[dirBNE] = &DD27[dirBNE *size_Mat];
-		D27.f[dirBSW] = &DD27[dirBSW *size_Mat];
-		D27.f[dirBSE] = &DD27[dirBSE *size_Mat];
-		D27.f[dirBNW] = &DD27[dirBNW *size_Mat];
+		D27.f[E] = &DD27[E   *size_Mat];
+		D27.f[W] = &DD27[W   *size_Mat];
+		D27.f[N] = &DD27[N   *size_Mat];
+		D27.f[S] = &DD27[S   *size_Mat];
+		D27.f[T] = &DD27[T   *size_Mat];
+		D27.f[B] = &DD27[B   *size_Mat];
+		D27.f[NE] = &DD27[NE  *size_Mat];
+		D27.f[SW] = &DD27[SW  *size_Mat];
+		D27.f[SE] = &DD27[SE  *size_Mat];
+		D27.f[NW] = &DD27[NW  *size_Mat];
+		D27.f[TE] = &DD27[TE  *size_Mat];
+		D27.f[BW] = &DD27[BW  *size_Mat];
+		D27.f[BE] = &DD27[BE  *size_Mat];
+		D27.f[TW] = &DD27[TW  *size_Mat];
+		D27.f[TN] = &DD27[TN  *size_Mat];
+		D27.f[BS] = &DD27[BS  *size_Mat];
+		D27.f[BN] = &DD27[BN  *size_Mat];
+		D27.f[TS] = &DD27[TS  *size_Mat];
+		D27.f[REST] = &DD27[REST*size_Mat];
+		D27.f[TNE] = &DD27[TNE *size_Mat];
+		D27.f[TSW] = &DD27[TSW *size_Mat];
+		D27.f[TSE] = &DD27[TSE *size_Mat];
+		D27.f[TNW] = &DD27[TNW *size_Mat];
+		D27.f[BNE] = &DD27[BNE *size_Mat];
+		D27.f[BSW] = &DD27[BSW *size_Mat];
+		D27.f[BSE] = &DD27[BSE *size_Mat];
+		D27.f[BNW] = &DD27[BNW *size_Mat];
 	}
 	else
 	{
-		D27.f[dirW] = &DD27[dirE   *size_Mat];
-		D27.f[dirE] = &DD27[dirW   *size_Mat];
-		D27.f[dirS] = &DD27[dirN   *size_Mat];
-		D27.f[dirN] = &DD27[dirS   *size_Mat];
-		D27.f[dirB] = &DD27[dirT   *size_Mat];
-		D27.f[dirT] = &DD27[dirB   *size_Mat];
-		D27.f[dirSW] = &DD27[dirNE  *size_Mat];
-		D27.f[dirNE] = &DD27[dirSW  *size_Mat];
-		D27.f[dirNW] = &DD27[dirSE  *size_Mat];
-		D27.f[dirSE] = &DD27[dirNW  *size_Mat];
-		D27.f[dirBW] = &DD27[dirTE  *size_Mat];
-		D27.f[dirTE] = &DD27[dirBW  *size_Mat];
-		D27.f[dirTW] = &DD27[dirBE  *size_Mat];
-		D27.f[dirBE] = &DD27[dirTW  *size_Mat];
-		D27.f[dirBS] = &DD27[dirTN  *size_Mat];
-		D27.f[dirTN] = &DD27[dirBS  *size_Mat];
-		D27.f[dirTS] = &DD27[dirBN  *size_Mat];
-		D27.f[dirBN] = &DD27[dirTS  *size_Mat];
-		D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-		D27.f[dirTNE] = &DD27[dirBSW *size_Mat];
-		D27.f[dirTSW] = &DD27[dirBNE *size_Mat];
-		D27.f[dirTSE] = &DD27[dirBNW *size_Mat];
-		D27.f[dirTNW] = &DD27[dirBSE *size_Mat];
-		D27.f[dirBNE] = &DD27[dirTSW *size_Mat];
-		D27.f[dirBSW] = &DD27[dirTNE *size_Mat];
-		D27.f[dirBSE] = &DD27[dirTNW *size_Mat];
-		D27.f[dirBNW] = &DD27[dirTSE *size_Mat];
+		D27.f[W] = &DD27[E   *size_Mat];
+		D27.f[E] = &DD27[W   *size_Mat];
+		D27.f[S] = &DD27[N   *size_Mat];
+		D27.f[N] = &DD27[S   *size_Mat];
+		D27.f[B] = &DD27[T   *size_Mat];
+		D27.f[T] = &DD27[B   *size_Mat];
+		D27.f[SW] = &DD27[NE  *size_Mat];
+		D27.f[NE] = &DD27[SW  *size_Mat];
+		D27.f[NW] = &DD27[SE  *size_Mat];
+		D27.f[SE] = &DD27[NW  *size_Mat];
+		D27.f[BW] = &DD27[TE  *size_Mat];
+		D27.f[TE] = &DD27[BW  *size_Mat];
+		D27.f[TW] = &DD27[BE  *size_Mat];
+		D27.f[BE] = &DD27[TW  *size_Mat];
+		D27.f[BS] = &DD27[TN  *size_Mat];
+		D27.f[TN] = &DD27[BS  *size_Mat];
+		D27.f[TS] = &DD27[BN  *size_Mat];
+		D27.f[BN] = &DD27[TS  *size_Mat];
+		D27.f[REST] = &DD27[REST*size_Mat];
+		D27.f[TNE] = &DD27[BSW *size_Mat];
+		D27.f[TSW] = &DD27[BNE *size_Mat];
+		D27.f[TSE] = &DD27[BNW *size_Mat];
+		D27.f[TNW] = &DD27[BSE *size_Mat];
+		D27.f[BNE] = &DD27[TSW *size_Mat];
+		D27.f[BSW] = &DD27[TNE *size_Mat];
+		D27.f[BSE] = &DD27[TNW *size_Mat];
+		D27.f[BNW] = &DD27[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1168,33 +1163,33 @@ extern "C" __global__ void QADPressNEQNeighbor27(
 		unsigned int kbsw = neighborZ[ksw];
 		////////////////////////////////////////////////////////////////////////////////
 		//distributions
-		real f_W =    (D.f[dirE])[ke];
-		real f_E =    (D.f[dirW])[kw];
-		real f_S =    (D.f[dirN])[kn];
-		real f_N =    (D.f[dirS])[ks];
-		real f_B =    (D.f[dirT])[kt];
-		real f_T =    (D.f[dirB])[kb];
-		real f_SW =   (D.f[dirNE])[kne];
-		real f_NE =   (D.f[dirSW])[ksw];
-		real f_NW =   (D.f[dirSE])[kse];
-		real f_SE =   (D.f[dirNW])[knw];
-		real f_BW =   (D.f[dirTE])[kte];
-		real f_TE =   (D.f[dirBW])[kbw];
-		real f_TW =   (D.f[dirBE])[kbe];
-		real f_BE =   (D.f[dirTW])[ktw];
-		real f_BS =   (D.f[dirTN])[ktn];
-		real f_TN =   (D.f[dirBS])[kbs];
-		real f_TS =   (D.f[dirBN])[kbn];
-		real f_BN =   (D.f[dirTS])[kts];
-		real f_ZERO = (D.f[dirZERO])[kzero];
-		real f_BSW =  (D.f[dirTNE])[ktne];
-		real f_BNE =  (D.f[dirTSW])[ktsw];
-		real f_BNW =  (D.f[dirTSE])[ktse];
-		real f_BSE =  (D.f[dirTNW])[ktnw];
-		real f_TSW =  (D.f[dirBNE])[kbne];
-		real f_TNE =  (D.f[dirBSW])[kbsw];
-		real f_TNW =  (D.f[dirBSE])[kbse];
-		real f_TSE =  (D.f[dirBNW])[kbnw];
+		real f_W =    (D.f[E])[ke];
+		real f_E =    (D.f[W])[kw];
+		real f_S =    (D.f[N])[kn];
+		real f_N =    (D.f[S])[ks];
+		real f_B =    (D.f[T])[kt];
+		real f_T =    (D.f[B])[kb];
+		real f_SW =   (D.f[NE])[kne];
+		real f_NE =   (D.f[SW])[ksw];
+		real f_NW =   (D.f[SE])[kse];
+		real f_SE =   (D.f[NW])[knw];
+		real f_BW =   (D.f[TE])[kte];
+		real f_TE =   (D.f[BW])[kbw];
+		real f_TW =   (D.f[BE])[kbe];
+		real f_BE =   (D.f[TW])[ktw];
+		real f_BS =   (D.f[TN])[ktn];
+		real f_TN =   (D.f[BS])[kbs];
+		real f_TS =   (D.f[BN])[kbn];
+		real f_BN =   (D.f[TS])[kts];
+		real f_ZERO = (D.f[REST])[kzero];
+		real f_BSW =  (D.f[TNE])[ktne];
+		real f_BNE =  (D.f[TSW])[ktsw];
+		real f_BNW =  (D.f[TSE])[ktse];
+		real f_BSE =  (D.f[TNW])[ktnw];
+		real f_TSW =  (D.f[BNE])[kbne];
+		real f_TNE =  (D.f[BSW])[kbsw];
+		real f_TNW =  (D.f[BSE])[kbse];
+		real f_TSE =  (D.f[BNW])[kbnw];
 		////////////////////////////////////////////////////////////////////////////////
 		//macroscopic values
 		real rho0 = 
@@ -1218,33 +1213,33 @@ extern "C" __global__ void QADPressNEQNeighbor27(
 		//AD - BC Nodes
 		////////////////////////////////////////////////////////////////////////////////
 		//distributions
-		real f27_W =    (D27.f[dirE])[ke];
-		real f27_E =    (D27.f[dirW])[kw];
-		real f27_S =    (D27.f[dirN])[kn];
-		real f27_N =    (D27.f[dirS])[ks];
-		real f27_B =    (D27.f[dirT])[kt];
-		real f27_T =    (D27.f[dirB])[kb];
-		real f27_SW =   (D27.f[dirNE])[kne];
-		real f27_NE =   (D27.f[dirSW])[ksw];
-		real f27_NW =   (D27.f[dirSE])[kse];
-		real f27_SE =   (D27.f[dirNW])[knw];
-		real f27_BW =   (D27.f[dirTE])[kte];
-		real f27_TE =   (D27.f[dirBW])[kbw];
-		real f27_TW =   (D27.f[dirBE])[kbe];
-		real f27_BE =   (D27.f[dirTW])[ktw];
-		real f27_BS =   (D27.f[dirTN])[ktn];
-		real f27_TN =   (D27.f[dirBS])[kbs];
-		real f27_TS =   (D27.f[dirBN])[kbn];
-		real f27_BN =   (D27.f[dirTS])[kts];
-		real f27_ZERO = (D27.f[dirZERO])[kzero];
-		real f27_BSW =  (D27.f[dirTNE])[ktne];
-		real f27_BNE =  (D27.f[dirTSW])[ktsw];
-		real f27_BNW =  (D27.f[dirTSE])[ktse];
-		real f27_BSE =  (D27.f[dirTNW])[ktnw];
-		real f27_TSW =  (D27.f[dirBNE])[kbne];
-		real f27_TNE =  (D27.f[dirBSW])[kbsw];
-		real f27_TNW =  (D27.f[dirBSE])[kbse];
-		real f27_TSE =  (D27.f[dirBNW])[kbnw];
+		real f27_W =    (D27.f[E])[ke];
+		real f27_E =    (D27.f[W])[kw];
+		real f27_S =    (D27.f[N])[kn];
+		real f27_N =    (D27.f[S])[ks];
+		real f27_B =    (D27.f[T])[kt];
+		real f27_T =    (D27.f[B])[kb];
+		real f27_SW =   (D27.f[NE])[kne];
+		real f27_NE =   (D27.f[SW])[ksw];
+		real f27_NW =   (D27.f[SE])[kse];
+		real f27_SE =   (D27.f[NW])[knw];
+		real f27_BW =   (D27.f[TE])[kte];
+		real f27_TE =   (D27.f[BW])[kbw];
+		real f27_TW =   (D27.f[BE])[kbe];
+		real f27_BE =   (D27.f[TW])[ktw];
+		real f27_BS =   (D27.f[TN])[ktn];
+		real f27_TN =   (D27.f[BS])[kbs];
+		real f27_TS =   (D27.f[BN])[kbn];
+		real f27_BN =   (D27.f[TS])[kts];
+		real f27_ZERO = (D27.f[REST])[kzero];
+		real f27_BSW =  (D27.f[TNE])[ktne];
+		real f27_BNE =  (D27.f[TSW])[ktsw];
+		real f27_BNW =  (D27.f[TSE])[ktse];
+		real f27_BSE =  (D27.f[TNW])[ktnw];
+		real f27_TSW =  (D27.f[BNE])[kbne];
+		real f27_TNE =  (D27.f[BSW])[kbsw];
+		real f27_TNW =  (D27.f[BSE])[kbse];
+		real f27_TSE =  (D27.f[BNW])[kbnw];
 		////////////////////////////////////////////////////////////////////////////////
 		real cusq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
 		////////////////////////////////////////////////////////////////////////////////
@@ -1350,33 +1345,33 @@ extern "C" __global__ void QADPressNEQNeighbor27(
 		unsigned int kNbsw = neighborZ[kNsw];
 		////////////////////////////////////////////////////////////////////////////////
 		//update distributions at neighbor nodes
-        (D27.f[dirE   ])[kNe   ] = f27_W   ;  
-        (D27.f[dirW   ])[kNw   ] = f27_E   ;	
-        (D27.f[dirN   ])[kNn   ] = f27_S   ;	
-        (D27.f[dirS   ])[kNs   ] = f27_N   ;	
-        (D27.f[dirT   ])[kNt   ] = f27_B   ;	
-        (D27.f[dirB   ])[kNb   ] = f27_T   ;	
-        (D27.f[dirNE  ])[kNne  ] = f27_SW  ;	
-        (D27.f[dirSW  ])[kNsw  ] = f27_NE  ;	
-        (D27.f[dirSE  ])[kNse  ] = f27_NW  ;	
-        (D27.f[dirNW  ])[kNnw  ] = f27_SE  ;	
-        (D27.f[dirTE  ])[kNte  ] = f27_BW  ;	
-        (D27.f[dirBW  ])[kNbw  ] = f27_TE  ;	
-        (D27.f[dirBE  ])[kNbe  ] = f27_TW  ;	
-        (D27.f[dirTW  ])[kNtw  ] = f27_BE  ;	
-        (D27.f[dirTN  ])[kNtn  ] = f27_BS  ;	
-        (D27.f[dirBS  ])[kNbs  ] = f27_TN  ;	
-        (D27.f[dirBN  ])[kNbn  ] = f27_TS  ;	
-        (D27.f[dirTS  ])[kNts  ] = f27_BN  ;	
-        (D27.f[dirZERO])[kNzero] = f27_ZERO;	
-        (D27.f[dirTNE ])[kNtne ] = f27_BSW ;	
-        (D27.f[dirTSW ])[kNtsw ] = f27_BNE ;	
-        (D27.f[dirTSE ])[kNtse ] = f27_BNW ;	
-        (D27.f[dirTNW ])[kNtnw ] = f27_BSE ;	
-        (D27.f[dirBNE ])[kNbne ] = f27_TSW ;	
-        (D27.f[dirBSW ])[kNbsw ] = f27_TNE ;	
-        (D27.f[dirBSE ])[kNbse ] = f27_TNW ;	
-        (D27.f[dirBNW ])[kNbnw ] = f27_TSE ;       
+        (D27.f[E   ])[kNe   ] = f27_W   ;  
+        (D27.f[W   ])[kNw   ] = f27_E   ;	
+        (D27.f[N   ])[kNn   ] = f27_S   ;	
+        (D27.f[S   ])[kNs   ] = f27_N   ;	
+        (D27.f[T   ])[kNt   ] = f27_B   ;	
+        (D27.f[B   ])[kNb   ] = f27_T   ;	
+        (D27.f[NE  ])[kNne  ] = f27_SW  ;	
+        (D27.f[SW  ])[kNsw  ] = f27_NE  ;	
+        (D27.f[SE  ])[kNse  ] = f27_NW  ;	
+        (D27.f[NW  ])[kNnw  ] = f27_SE  ;	
+        (D27.f[TE  ])[kNte  ] = f27_BW  ;	
+        (D27.f[BW  ])[kNbw  ] = f27_TE  ;	
+        (D27.f[BE  ])[kNbe  ] = f27_TW  ;	
+        (D27.f[TW  ])[kNtw  ] = f27_BE  ;	
+        (D27.f[TN  ])[kNtn  ] = f27_BS  ;	
+        (D27.f[BS  ])[kNbs  ] = f27_TN  ;	
+        (D27.f[BN  ])[kNbn  ] = f27_TS  ;	
+        (D27.f[TS  ])[kNts  ] = f27_BN  ;	
+        (D27.f[REST])[kNzero] = f27_ZERO;	
+        (D27.f[TNE ])[kNtne ] = f27_BSW ;	
+        (D27.f[TSW ])[kNtsw ] = f27_BNE ;	
+        (D27.f[TSE ])[kNtse ] = f27_BNW ;	
+        (D27.f[TNW ])[kNtnw ] = f27_BSE ;	
+        (D27.f[BNE ])[kNbne ] = f27_TSW ;	
+        (D27.f[BSW ])[kNbsw ] = f27_TNE ;	
+        (D27.f[BSE ])[kNbse ] = f27_TNW ;	
+        (D27.f[BNW ])[kNbnw ] = f27_TSE ;       
 	}
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1420,17 +1415,14 @@ extern "C" __global__ void QADPressNEQNeighbor27(
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADVel7( int inx,
-                                    int iny,
-                                    real* DD, 
+extern "C" __global__ void QADVel7( real* DD, 
                                     real* DD7, 
                                     real* temp,
                                     real* velo,
                                     real diffusivity,
                                     int* k_Q, 
                                     real* QQ,
-                                    unsigned int sizeQ,
-                                    int numberOfBCnodes, 
+                                    unsigned int numberOfBCnodes, 
                                     real om1, 
                                     unsigned int* neighborX,
                                     unsigned int* neighborY,
@@ -1441,63 +1433,63 @@ extern "C" __global__ void QADVel7( int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions7 D7;
@@ -1538,37 +1530,13 @@ extern "C" __global__ void QADVel7( int inx,
    {
       //////////////////////////////////////////////////////////////////////////////////
       real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB;//, 
-      //         *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-      //         *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-      //         *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-      //         *q_dirBSE, *q_dirBNW;
 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      //q_dirNE  = &QQ[dirNE  *sizeQ];
-      //q_dirSW  = &QQ[dirSW  *sizeQ];
-      //q_dirSE  = &QQ[dirSE  *sizeQ];
-      //q_dirNW  = &QQ[dirNW  *sizeQ];
-      //q_dirTE  = &QQ[dirTE  *sizeQ];
-      //q_dirBW  = &QQ[dirBW  *sizeQ];
-      //q_dirBE  = &QQ[dirBE  *sizeQ];
-      //q_dirTW  = &QQ[dirTW  *sizeQ];
-      //q_dirTN  = &QQ[dirTN  *sizeQ];
-      //q_dirBS  = &QQ[dirBS  *sizeQ];
-      //q_dirBN  = &QQ[dirBN  *sizeQ];
-      //q_dirTS  = &QQ[dirTS  *sizeQ];
-      //q_dirTNE = &QQ[dirTNE *sizeQ];
-      //q_dirTSW = &QQ[dirTSW *sizeQ];
-      //q_dirTSE = &QQ[dirTSE *sizeQ];
-      //q_dirTNW = &QQ[dirTNW *sizeQ];
-      //q_dirBNE = &QQ[dirBNE *sizeQ];
-      //q_dirBSW = &QQ[dirBSW *sizeQ];
-      //q_dirBSE = &QQ[dirBSE *sizeQ];
-      //q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
       //////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1603,32 +1571,32 @@ extern "C" __global__ void QADVel7( int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       /*real drho*/;
       real vx1_Inflow   = c0o1;
@@ -1641,7 +1609,7 @@ extern "C" __global__ void QADVel7( int inx,
 
       ////drho   =    f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
       ////            f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-      ////            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      ////            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       //real vx1 =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
       //               ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -1655,7 +1623,7 @@ extern "C" __global__ void QADVel7( int inx,
       //               (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
       //               (f_T - f_B); 
 
-      real rho0   =  (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[dirZERO])[kzero]);
+      real rho0   =  (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[REST])[kzero]);
       real rho    =  rho0 + c1o1;
       real OORho  =  c1o1/rho;
       real vx1    =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
@@ -1729,7 +1697,7 @@ extern "C" __global__ void QADVel7( int inx,
 
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //E
       //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //W
@@ -1864,16 +1832,13 @@ extern "C" __global__ void QADVel7( int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADVel27(int inx,
-                                    int iny,
-                                    real* DD, 
+extern "C" __global__ void QADVel27(real* DD, 
                                     real* DD27, 
                                     real* temp,
                                     real* velo,
                                     real diffusivity,
                                     int* k_Q, 
                                     real* QQ,
-                                    unsigned int sizeQ,
                                     int numberOfBCnodes, 
                                     real om1, 
                                     unsigned int* neighborX,
@@ -1885,125 +1850,125 @@ extern "C" __global__ void QADVel27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2024,32 +1989,32 @@ extern "C" __global__ void QADVel27(int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -2081,33 +2046,33 @@ extern "C" __global__ void QADVel27(int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_ZERO = (D.f[REST])[kzero];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, /*drho, feq,*/ q;
       ////drho   = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
@@ -2133,33 +2098,33 @@ extern "C" __global__ void QADVel27(int inx,
       vx2     =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       vx3     =  OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      //real f27_W    = (D27.f[dirE   ])[ke   ];
-      //real f27_E    = (D27.f[dirW   ])[kw   ];
-      //real f27_S    = (D27.f[dirN   ])[kn   ];
-      //real f27_N    = (D27.f[dirS   ])[ks   ];
-      //real f27_B    = (D27.f[dirT   ])[kt   ];
-      //real f27_T    = (D27.f[dirB   ])[kb   ];
-      //real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      //real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      //real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      //real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      //real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      //real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      //real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      //real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      //real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      //real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      //real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      //real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      //real f27_ZERO = (D27.f[dirZERO])[kzero];
-      //real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      //real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      //real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      //real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      //real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      //real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      //real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      //real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      //real f27_W    = (D27.f[E   ])[ke   ];
+      //real f27_E    = (D27.f[W   ])[kw   ];
+      //real f27_S    = (D27.f[N   ])[kn   ];
+      //real f27_N    = (D27.f[S   ])[ks   ];
+      //real f27_B    = (D27.f[T   ])[kt   ];
+      //real f27_T    = (D27.f[B   ])[kb   ];
+      //real f27_SW   = (D27.f[NE  ])[kne  ];
+      //real f27_NE   = (D27.f[SW  ])[ksw  ];
+      //real f27_NW   = (D27.f[SE  ])[kse  ];
+      //real f27_SE   = (D27.f[NW  ])[knw  ];
+      //real f27_BW   = (D27.f[TE  ])[kte  ];
+      //real f27_TE   = (D27.f[BW  ])[kbw  ];
+      //real f27_TW   = (D27.f[BE  ])[kbe  ];
+      //real f27_BE   = (D27.f[TW  ])[ktw  ];
+      //real f27_BS   = (D27.f[TN  ])[ktn  ];
+      //real f27_TN   = (D27.f[BS  ])[kbs  ];
+      //real f27_TS   = (D27.f[BN  ])[kbn  ];
+      //real f27_BN   = (D27.f[TS  ])[kts  ];
+      //real f27_ZERO = (D27.f[REST])[kzero];
+      //real f27_BSW  = (D27.f[TNE ])[ktne ];
+      //real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      //real f27_BNW  = (D27.f[TSE ])[ktse ];
+      //real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      //real f27_TSW  = (D27.f[BNE ])[kbne ];
+      //real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      //real f27_TNW  = (D27.f[BSE ])[kbse ];
+      //real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -2268,150 +2233,150 @@ extern "C" __global__ void QADVel27(int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //(D27.f[dirW  ])[kw  ]= four;
-      //(D27.f[dirE  ])[ke  ]= four;
-      //(D27.f[dirS  ])[ks  ]= four;
-      //(D27.f[dirN  ])[kn  ]= four;
-      //(D27.f[dirB  ])[kb  ]= four;
-      //(D27.f[dirT  ])[kt  ]= four;
-      //(D27.f[dirSW ])[ksw ]= four;
-      //(D27.f[dirNE ])[kne ]= four;
-      //(D27.f[dirNW ])[knw ]= four;
-      //(D27.f[dirSE ])[kse ]= four;
-      //(D27.f[dirBW ])[kbw ]= four;
-      //(D27.f[dirTE ])[kte ]= four;
-      //(D27.f[dirTW ])[ktw ]= four;
-      //(D27.f[dirBE ])[kbe ]= four;
-      //(D27.f[dirBS ])[kbs ]= four;
-      //(D27.f[dirTN ])[ktn ]= four;
-      //(D27.f[dirTS ])[kts ]= four;
-      //(D27.f[dirBN ])[kbn ]= four;
-      //(D27.f[dirBSW])[kbsw]= four;
-      //(D27.f[dirTNE])[ktne]= four;
-      //(D27.f[dirTSW])[ktsw]= four;
-      //(D27.f[dirBNE])[kbne]= four;
-      //(D27.f[dirBNW])[kbnw]= four;
-      //(D27.f[dirTSE])[ktse]= four;
-      //(D27.f[dirTNW])[ktnw]= four;
-      //(D27.f[dirBSE])[kbse]= four;
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dirW  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
-      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[dirE  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
-      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[dirS  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
-      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[dirN  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
-      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[dirB  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
-      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[dirT  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
-      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[dirSW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
-      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[dirNE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
-      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[dirNW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
-      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[dirSE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
-      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[dirBW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
-      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[dirTE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
-      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[dirTW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
-      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[dirBE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
-      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[dirBS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
-      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[dirTN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
-      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[dirTS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
-      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[dirBN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
-      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dirBSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
-      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dirTNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
-      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dirTSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
-      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dirBNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
-      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dirBNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
-      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dirTSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
-      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dirTNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
-      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dirBSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+      //(D27.f[W  ])[kw  ]= four;
+      //(D27.f[E  ])[ke  ]= four;
+      //(D27.f[S  ])[ks  ]= four;
+      //(D27.f[N  ])[kn  ]= four;
+      //(D27.f[B  ])[kb  ]= four;
+      //(D27.f[T  ])[kt  ]= four;
+      //(D27.f[SW ])[ksw ]= four;
+      //(D27.f[NE ])[kne ]= four;
+      //(D27.f[NW ])[knw ]= four;
+      //(D27.f[SE ])[kse ]= four;
+      //(D27.f[BW ])[kbw ]= four;
+      //(D27.f[TE ])[kte ]= four;
+      //(D27.f[TW ])[ktw ]= four;
+      //(D27.f[BE ])[kbe ]= four;
+      //(D27.f[BS ])[kbs ]= four;
+      //(D27.f[TN ])[ktn ]= four;
+      //(D27.f[TS ])[kts ]= four;
+      //(D27.f[BN ])[kbn ]= four;
+      //(D27.f[BSW])[kbsw]= four;
+      //(D27.f[TNE])[ktne]= four;
+      //(D27.f[TSW])[ktsw]= four;
+      //(D27.f[BNE])[kbne]= four;
+      //(D27.f[BNW])[kbnw]= four;
+      //(D27.f[TSE])[ktse]= four;
+      //(D27.f[TNW])[ktnw]= four;
+      //(D27.f[BSE])[kbse]= four;
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[W  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
+      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[E  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
+      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[S  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
+      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[N  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
+      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[B  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
+      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[T  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
+      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[SW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
+      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[NE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
+      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[NW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
+      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[SE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
+      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[BW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
+      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[TE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
+      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[TW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
+      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[BE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
+      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[BS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
+      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[TN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
+      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[TS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
+      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[BN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
+      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[BSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
+      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[TNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
+      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[TSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
+      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[BNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
+      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[BNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
+      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[TSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
+      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[TNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
+      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[BSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2455,16 +2420,13 @@ extern "C" __global__ void QADVel27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QAD7( int inx,
-                                 int iny,
-                                 real* DD, 
+extern "C" __global__ void QAD7( real* DD, 
                                  real* DD7, 
                                  real* temp,
                                  real diffusivity,
                                  int* k_Q, 
                                  real* QQ,
-                                 unsigned int sizeQ,
-                                 int numberOfBCnodes, 
+                                 unsigned int numberOfBCnodes, 
                                  real om1, 
                                  unsigned int* neighborX,
                                  unsigned int* neighborY,
@@ -2475,63 +2437,63 @@ extern "C" __global__ void QAD7( int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions7 D7;
@@ -2577,32 +2539,32 @@ extern "C" __global__ void QAD7( int inx,
       //         *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
       //         *q_dirBSE, *q_dirBNW;
 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      //q_dirNE  = &QQ[dirNE  *sizeQ];
-      //q_dirSW  = &QQ[dirSW  *sizeQ];
-      //q_dirSE  = &QQ[dirSE  *sizeQ];
-      //q_dirNW  = &QQ[dirNW  *sizeQ];
-      //q_dirTE  = &QQ[dirTE  *sizeQ];
-      //q_dirBW  = &QQ[dirBW  *sizeQ];
-      //q_dirBE  = &QQ[dirBE  *sizeQ];
-      //q_dirTW  = &QQ[dirTW  *sizeQ];
-      //q_dirTN  = &QQ[dirTN  *sizeQ];
-      //q_dirBS  = &QQ[dirBS  *sizeQ];
-      //q_dirBN  = &QQ[dirBN  *sizeQ];
-      //q_dirTS  = &QQ[dirTS  *sizeQ];
-      //q_dirTNE = &QQ[dirTNE *sizeQ];
-      //q_dirTSW = &QQ[dirTSW *sizeQ];
-      //q_dirTSE = &QQ[dirTSE *sizeQ];
-      //q_dirTNW = &QQ[dirTNW *sizeQ];
-      //q_dirBNE = &QQ[dirBNE *sizeQ];
-      //q_dirBSW = &QQ[dirBSW *sizeQ];
-      //q_dirBSE = &QQ[dirBSE *sizeQ];
-      //q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      //q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      //q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      //q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      //q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      //q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      //q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      //q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      //q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      //q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      //q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      //q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      //q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      //q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      //q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      //q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      //q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      //q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      //q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      //q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      //q_dirBNW = &QQ[BNW * numberOfBCnodes];
       //////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -2637,37 +2599,37 @@ extern "C" __global__ void QAD7( int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3/*, drho*/;
       //drho   =    f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
       //            f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-      //            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      //            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       //vx1    = ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
       //         ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -2681,7 +2643,7 @@ extern "C" __global__ void QAD7( int inx,
       //vx3    = ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
       //         (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
       //         (f_T - f_B); 
-      real rho0   =  (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[dirZERO])[kzero]);
+      real rho0   =  (f_TNE+f_BSW)+(f_TSW+f_BNE)+(f_TSE+f_BNW)+(f_TNW+f_BSE)+(f_NE+f_SW)+(f_NW+f_SE)+(f_TE+f_BW)+(f_BE+f_TW)+(f_TN+f_BS)+(f_BN+f_TS)+(f_E+f_W)+(f_N+f_S)+(f_T+f_B)+ ((D.f[REST])[kzero]);
       real rho    =  rho0 + c1o1;
       real OORho  =  c1o1/rho;
       vx1     =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
@@ -2755,7 +2717,7 @@ extern "C" __global__ void QAD7( int inx,
 
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //(D7.f[1])[ke   ] = f7_E - feq7_E + feqW7_W; //E
       //(D7.f[2])[kw   ] = f7_W - feq7_W + feqW7_E; //W
@@ -2890,16 +2852,14 @@ extern "C" __global__ void QAD7( int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADDirichlet27(	 int inx,
-											 int iny,
+extern "C" __global__ void QADDirichlet27(
 											 real* DD, 
 											 real* DD27, 
 											 real* temp,
 											 real diffusivity,
 											 int* k_Q, 
 											 real* QQ,
-											 unsigned int sizeQ,
-											 int numberOfBCnodes, 
+											 unsigned int numberOfBCnodes, 
 											 real om1, 
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -2910,125 +2870,125 @@ extern "C" __global__ void QADDirichlet27(	 int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -3049,32 +3009,32 @@ extern "C" __global__ void QADDirichlet27(	 int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -3106,33 +3066,33 @@ extern "C" __global__ void QADDirichlet27(	 int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_ZERO = (D.f[REST])[kzero];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, /*drho, feq,*/ q;
       ////drho   = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
@@ -3158,33 +3118,33 @@ extern "C" __global__ void QADDirichlet27(	 int inx,
       vx2     =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       vx3     =  OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      real f27_W    = (D27.f[dirE   ])[ke   ];
-      real f27_E    = (D27.f[dirW   ])[kw   ];
-      real f27_S    = (D27.f[dirN   ])[kn   ];
-      real f27_N    = (D27.f[dirS   ])[ks   ];
-      real f27_B    = (D27.f[dirT   ])[kt   ];
-      real f27_T    = (D27.f[dirB   ])[kb   ];
-      real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      real f27_ZERO = (D27.f[dirZERO])[kzero];
-      real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      real f27_W    = (D27.f[E   ])[ke   ];
+      real f27_E    = (D27.f[W   ])[kw   ];
+      real f27_S    = (D27.f[N   ])[kn   ];
+      real f27_N    = (D27.f[S   ])[ks   ];
+      real f27_B    = (D27.f[T   ])[kt   ];
+      real f27_T    = (D27.f[B   ])[kb   ];
+      real f27_SW   = (D27.f[NE  ])[kne  ];
+      real f27_NE   = (D27.f[SW  ])[ksw  ];
+      real f27_NW   = (D27.f[SE  ])[kse  ];
+      real f27_SE   = (D27.f[NW  ])[knw  ];
+      real f27_BW   = (D27.f[TE  ])[kte  ];
+      real f27_TE   = (D27.f[BW  ])[kbw  ];
+      real f27_TW   = (D27.f[BE  ])[kbe  ];
+      real f27_BE   = (D27.f[TW  ])[ktw  ];
+      real f27_BS   = (D27.f[TN  ])[ktn  ];
+      real f27_TN   = (D27.f[BS  ])[kbs  ];
+      real f27_TS   = (D27.f[BN  ])[kbn  ];
+      real f27_BN   = (D27.f[TS  ])[kts  ];
+      real f27_ZERO = (D27.f[REST])[kzero];
+      real f27_BSW  = (D27.f[TNE ])[ktne ];
+      real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      real f27_BNW  = (D27.f[TSE ])[ktse ];
+      real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      real f27_TSW  = (D27.f[BNE ])[kbne ];
+      real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      real f27_TNW  = (D27.f[BSE ])[kbse ];
+      real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -3260,120 +3220,120 @@ extern "C" __global__ void QADDirichlet27(	 int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=0.1f;
+      //(D.f[REST])[k]=0.1f;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[  ke   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]=(c2o1*feqW27_W  -(f27_E  *(q*omegaD-c1o1)-omegaD*feq27_E  *(q-c1o1))/(omegaD-c1o1)+f27_W  *q)/(q+c1o1);
-      q = q_dirW[  kw   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]=(c2o1*feqW27_E  -(f27_W  *(q*omegaD-c1o1)-omegaD*feq27_W  *(q-c1o1))/(omegaD-c1o1)+f27_E  *q)/(q+c1o1);
-      q = q_dirN[  kn   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]=(c2o1*feqW27_S  -(f27_N  *(q*omegaD-c1o1)-omegaD*feq27_N  *(q-c1o1))/(omegaD-c1o1)+f27_S  *q)/(q+c1o1);
-      q = q_dirS[  ks   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]=(c2o1*feqW27_N  -(f27_S  *(q*omegaD-c1o1)-omegaD*feq27_S  *(q-c1o1))/(omegaD-c1o1)+f27_N  *q)/(q+c1o1);
-      q = q_dirT[  kt   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]=(c2o1*feqW27_B  -(f27_T  *(q*omegaD-c1o1)-omegaD*feq27_T  *(q-c1o1))/(omegaD-c1o1)+f27_B  *q)/(q+c1o1);
-      q = q_dirB[  kb   ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]=(c2o1*feqW27_T  -(f27_B  *(q*omegaD-c1o1)-omegaD*feq27_B  *(q-c1o1))/(omegaD-c1o1)+f27_T  *q)/(q+c1o1);
-      q = q_dirNE[ kne  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1);
-      q = q_dirSW[ ksw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1);
-      q = q_dirSE[ kse  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1);
-      q = q_dirNW[ knw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1);
-      q = q_dirTE[ kte  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1);
-      q = q_dirBW[ kbw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1);
-      q = q_dirBE[ kbe  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1);
-      q = q_dirTW[ ktw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1);
-      q = q_dirTN[ ktn  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1);
-      q = q_dirBS[ kbs  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1);
-      q = q_dirBN[ kbn  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1);
-      q = q_dirTS[ kts  ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1);
-      q = q_dirTNE[ktne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1);
-      q = q_dirBSW[kbsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1);
-      q = q_dirBNE[kbne ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1);
-      q = q_dirTSW[ktsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1);
-      q = q_dirTSE[ktse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1);
-      q = q_dirBNW[kbnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1);
-      q = q_dirBSE[kbse ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1);
-      q = q_dirTNW[ktnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dirW  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
-      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[dirE  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
-      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[dirS  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
-      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[dirN  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
-      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[dirB  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
-      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[dirT  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
-      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[dirSW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
-      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[dirNE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
-      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[dirNW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
-      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[dirSE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
-      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[dirBW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
-      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[dirTE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
-      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[dirTW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
-      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[dirBE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
-      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[dirBS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
-      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[dirTN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
-      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[dirTS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
-      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[dirBN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
-      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dirBSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
-      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dirTNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
-      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dirTSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
-      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dirBNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
-      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dirBNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
-      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dirTSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
-      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dirTNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
-      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dirBSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+      q = q_dirE[  ke   ]; if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]=(c2o1*feqW27_W  -(f27_E  *(q*omegaD-c1o1)-omegaD*feq27_E  *(q-c1o1))/(omegaD-c1o1)+f27_W  *q)/(q+c1o1);
+      q = q_dirW[  kw   ]; if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]=(c2o1*feqW27_E  -(f27_W  *(q*omegaD-c1o1)-omegaD*feq27_W  *(q-c1o1))/(omegaD-c1o1)+f27_E  *q)/(q+c1o1);
+      q = q_dirN[  kn   ]; if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]=(c2o1*feqW27_S  -(f27_N  *(q*omegaD-c1o1)-omegaD*feq27_N  *(q-c1o1))/(omegaD-c1o1)+f27_S  *q)/(q+c1o1);
+      q = q_dirS[  ks   ]; if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]=(c2o1*feqW27_N  -(f27_S  *(q*omegaD-c1o1)-omegaD*feq27_S  *(q-c1o1))/(omegaD-c1o1)+f27_N  *q)/(q+c1o1);
+      q = q_dirT[  kt   ]; if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]=(c2o1*feqW27_B  -(f27_T  *(q*omegaD-c1o1)-omegaD*feq27_T  *(q-c1o1))/(omegaD-c1o1)+f27_B  *q)/(q+c1o1);
+      q = q_dirB[  kb   ]; if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]=(c2o1*feqW27_T  -(f27_B  *(q*omegaD-c1o1)-omegaD*feq27_B  *(q-c1o1))/(omegaD-c1o1)+f27_T  *q)/(q+c1o1);
+      q = q_dirNE[ kne  ]; if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1);
+      q = q_dirSW[ ksw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1);
+      q = q_dirSE[ kse  ]; if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1);
+      q = q_dirNW[ knw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1);
+      q = q_dirTE[ kte  ]; if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1);
+      q = q_dirBW[ kbw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1);
+      q = q_dirBE[ kbe  ]; if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1);
+      q = q_dirTW[ ktw  ]; if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1);
+      q = q_dirTN[ ktn  ]; if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1);
+      q = q_dirBS[ kbs  ]; if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1);
+      q = q_dirBN[ kbn  ]; if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1);
+      q = q_dirTS[ kts  ]; if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1);
+      q = q_dirTNE[ktne ]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1);
+      q = q_dirBSW[kbsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1);
+      q = q_dirBNE[kbne ]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1);
+      q = q_dirTSW[ktsw ]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1);
+      q = q_dirTSE[ktse ]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1);
+      q = q_dirBNW[kbnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1);
+      q = q_dirBSE[kbse ]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1);
+      q = q_dirTNW[ktnw ]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[W  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
+      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[E  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
+      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[S  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
+      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[N  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
+      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[B  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
+      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[T  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
+      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[SW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
+      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[NE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
+      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[NW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
+      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[SE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
+      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[BW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
+      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[TE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
+      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[TW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
+      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[BE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
+      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[BS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
+      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[TN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
+      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[TS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
+      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[BN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
+      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[BSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
+      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[TNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
+      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[TSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
+      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[BNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
+      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[BNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
+      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[TSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
+      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[TNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
+      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[BSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3418,16 +3378,13 @@ extern "C" __global__ void QADDirichlet27(	 int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADBB27(int inx,
-                                   int iny,
-                                   real* DD, 
+extern "C" __global__ void QADBB27( real* DD, 
                                    real* DD27, 
                                    real* temp,
                                    real diffusivity,
                                    int* k_Q, 
                                    real* QQ,
-                                   unsigned int sizeQ,
-                                   int numberOfBCnodes, 
+                                   unsigned int numberOfBCnodes, 
                                    real om1, 
                                    unsigned int* neighborX,
                                    unsigned int* neighborY,
@@ -3438,125 +3395,125 @@ extern "C" __global__ void QADBB27(int inx,
    //Distributions27 D;
    //if (isEvenTimestep==true)
    //{
-   //   D.f[dirE   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirW   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   //   D.f[E   ] = &DD[E   *size_Mat];
+   //   D.f[W   ] = &DD[W   *size_Mat];
+   //   D.f[N   ] = &DD[N   *size_Mat];
+   //   D.f[S   ] = &DD[S   *size_Mat];
+   //   D.f[T   ] = &DD[T   *size_Mat];
+   //   D.f[B   ] = &DD[B   *size_Mat];
+   //   D.f[NE  ] = &DD[NE  *size_Mat];
+   //   D.f[SW  ] = &DD[SW  *size_Mat];
+   //   D.f[SE  ] = &DD[SE  *size_Mat];
+   //   D.f[NW  ] = &DD[NW  *size_Mat];
+   //   D.f[TE  ] = &DD[TE  *size_Mat];
+   //   D.f[BW  ] = &DD[BW  *size_Mat];
+   //   D.f[BE  ] = &DD[BE  *size_Mat];
+   //   D.f[TW  ] = &DD[TW  *size_Mat];
+   //   D.f[TN  ] = &DD[TN  *size_Mat];
+   //   D.f[BS  ] = &DD[BS  *size_Mat];
+   //   D.f[BN  ] = &DD[BN  *size_Mat];
+   //   D.f[TS  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[TNE *size_Mat];
+   //   D.f[TSW ] = &DD[TSW *size_Mat];
+   //   D.f[TSE ] = &DD[TSE *size_Mat];
+   //   D.f[TNW ] = &DD[TNW *size_Mat];
+   //   D.f[BNE ] = &DD[BNE *size_Mat];
+   //   D.f[BSW ] = &DD[BSW *size_Mat];
+   //   D.f[BSE ] = &DD[BSE *size_Mat];
+   //   D.f[BNW ] = &DD[BNW *size_Mat];
    //} 
    //else
    //{
-   //   D.f[dirW   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirE   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+   //   D.f[W   ] = &DD[E   *size_Mat];
+   //   D.f[E   ] = &DD[W   *size_Mat];
+   //   D.f[S   ] = &DD[N   *size_Mat];
+   //   D.f[N   ] = &DD[S   *size_Mat];
+   //   D.f[B   ] = &DD[T   *size_Mat];
+   //   D.f[T   ] = &DD[B   *size_Mat];
+   //   D.f[SW  ] = &DD[NE  *size_Mat];
+   //   D.f[NE  ] = &DD[SW  *size_Mat];
+   //   D.f[NW  ] = &DD[SE  *size_Mat];
+   //   D.f[SE  ] = &DD[NW  *size_Mat];
+   //   D.f[BW  ] = &DD[TE  *size_Mat];
+   //   D.f[TE  ] = &DD[BW  *size_Mat];
+   //   D.f[TW  ] = &DD[BE  *size_Mat];
+   //   D.f[BE  ] = &DD[TW  *size_Mat];
+   //   D.f[BS  ] = &DD[TN  *size_Mat];
+   //   D.f[TN  ] = &DD[BS  *size_Mat];
+   //   D.f[TS  ] = &DD[BN  *size_Mat];
+   //   D.f[BN  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[BSW *size_Mat];
+   //   D.f[TSW ] = &DD[BNE *size_Mat];
+   //   D.f[TSE ] = &DD[BNW *size_Mat];
+   //   D.f[TNW ] = &DD[BSE *size_Mat];
+   //   D.f[BNE ] = &DD[TSW *size_Mat];
+   //   D.f[BSW ] = &DD[TNE *size_Mat];
+   //   D.f[BSE ] = &DD[TNW *size_Mat];
+   //   D.f[BNW ] = &DD[TSE *size_Mat];
    //}
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -3577,32 +3534,32 @@ extern "C" __global__ void QADBB27(int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -3634,33 +3591,33 @@ extern "C" __global__ void QADBB27(int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      //real f_W    = (D.f[dirE   ])[ke   ];
-      //real f_E    = (D.f[dirW   ])[kw   ];
-      //real f_S    = (D.f[dirN   ])[kn   ];
-      //real f_N    = (D.f[dirS   ])[ks   ];
-      //real f_B    = (D.f[dirT   ])[kt   ];
-      //real f_T    = (D.f[dirB   ])[kb   ];
-      //real f_SW   = (D.f[dirNE  ])[kne  ];
-      //real f_NE   = (D.f[dirSW  ])[ksw  ];
-      //real f_NW   = (D.f[dirSE  ])[kse  ];
-      //real f_SE   = (D.f[dirNW  ])[knw  ];
-      //real f_BW   = (D.f[dirTE  ])[kte  ];
-      //real f_TE   = (D.f[dirBW  ])[kbw  ];
-      //real f_TW   = (D.f[dirBE  ])[kbe  ];
-      //real f_BE   = (D.f[dirTW  ])[ktw  ];
-      //real f_BS   = (D.f[dirTN  ])[ktn  ];
-      //real f_TN   = (D.f[dirBS  ])[kbs  ];
-      //real f_TS   = (D.f[dirBN  ])[kbn  ];
-      //real f_BN   = (D.f[dirTS  ])[kts  ];
-      //real f_ZERO = (D.f[dirZERO])[kzero];
-      //real f_BSW  = (D.f[dirTNE ])[ktne ];
-      //real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      //real f_BNW  = (D.f[dirTSE ])[ktse ];
-      //real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      //real f_TSW  = (D.f[dirBNE ])[kbne ];
-      //real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      //real f_TNW  = (D.f[dirBSE ])[kbse ];
-      //real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      //real f_W    = (D.f[E   ])[ke   ];
+      //real f_E    = (D.f[W   ])[kw   ];
+      //real f_S    = (D.f[N   ])[kn   ];
+      //real f_N    = (D.f[S   ])[ks   ];
+      //real f_B    = (D.f[T   ])[kt   ];
+      //real f_T    = (D.f[B   ])[kb   ];
+      //real f_SW   = (D.f[NE  ])[kne  ];
+      //real f_NE   = (D.f[SW  ])[ksw  ];
+      //real f_NW   = (D.f[SE  ])[kse  ];
+      //real f_SE   = (D.f[NW  ])[knw  ];
+      //real f_BW   = (D.f[TE  ])[kte  ];
+      //real f_TE   = (D.f[BW  ])[kbw  ];
+      //real f_TW   = (D.f[BE  ])[kbe  ];
+      //real f_BE   = (D.f[TW  ])[ktw  ];
+      //real f_BS   = (D.f[TN  ])[ktn  ];
+      //real f_TN   = (D.f[BS  ])[kbs  ];
+      //real f_TS   = (D.f[BN  ])[kbn  ];
+      //real f_BN   = (D.f[TS  ])[kts  ];
+      //real f_ZERO = (D.f[REST])[kzero];
+      //real f_BSW  = (D.f[TNE ])[ktne ];
+      //real f_BNE  = (D.f[TSW ])[ktsw ];
+      //real f_BNW  = (D.f[TSE ])[ktse ];
+      //real f_BSE  = (D.f[TNW ])[ktnw ];
+      //real f_TSW  = (D.f[BNE ])[kbne ];
+      //real f_TNE  = (D.f[BSW ])[kbsw ];
+      //real f_TNW  = (D.f[BSE ])[kbse ];
+      //real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       //real vx1, vx2, vx3, /*drho, feq,*/ q;
       real q;
@@ -3687,33 +3644,33 @@ extern "C" __global__ void QADBB27(int inx,
       //vx2     =  OORho*((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       //vx3     =  OORho*((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      real f27_W    = (D27.f[dirE   ])[ke   ];
-      real f27_E    = (D27.f[dirW   ])[kw   ];
-      real f27_S    = (D27.f[dirN   ])[kn   ];
-      real f27_N    = (D27.f[dirS   ])[ks   ];
-      real f27_B    = (D27.f[dirT   ])[kt   ];
-      real f27_T    = (D27.f[dirB   ])[kb   ];
-      real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      //real f27_ZERO = (D27.f[dirZERO])[kzero];
-      real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      real f27_W    = (D27.f[E   ])[ke   ];
+      real f27_E    = (D27.f[W   ])[kw   ];
+      real f27_S    = (D27.f[N   ])[kn   ];
+      real f27_N    = (D27.f[S   ])[ks   ];
+      real f27_B    = (D27.f[T   ])[kt   ];
+      real f27_T    = (D27.f[B   ])[kb   ];
+      real f27_SW   = (D27.f[NE  ])[kne  ];
+      real f27_NE   = (D27.f[SW  ])[ksw  ];
+      real f27_NW   = (D27.f[SE  ])[kse  ];
+      real f27_SE   = (D27.f[NW  ])[knw  ];
+      real f27_BW   = (D27.f[TE  ])[kte  ];
+      real f27_TE   = (D27.f[BW  ])[kbw  ];
+      real f27_TW   = (D27.f[BE  ])[kbe  ];
+      real f27_BE   = (D27.f[TW  ])[ktw  ];
+      real f27_BS   = (D27.f[TN  ])[ktn  ];
+      real f27_TN   = (D27.f[BS  ])[kbs  ];
+      real f27_TS   = (D27.f[BN  ])[kbn  ];
+      real f27_BN   = (D27.f[TS  ])[kts  ];
+      //real f27_ZERO = (D27.f[REST])[kzero];
+      real f27_BSW  = (D27.f[TNE ])[ktne ];
+      real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      real f27_BNW  = (D27.f[TSE ])[ktse ];
+      real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      real f27_TSW  = (D27.f[BNE ])[kbne ];
+      real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      real f27_TNW  = (D27.f[BSE ])[kbse ];
+      real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       //real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -3789,94 +3746,94 @@ extern "C" __global__ void QADBB27(int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=0.1f;
+      //(D.f[REST])[k]=0.1f;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]=f27_E  ;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]=f27_W  ;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]=f27_N  ;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]=f27_S  ;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]=f27_T  ;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]=f27_B  ;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]=f27_NE ;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]=f27_SW ;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]=f27_SE ;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]=f27_NW ;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]=f27_TE ;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]=f27_BW ;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]=f27_BE ;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]=f27_TW ;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]=f27_TN ;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]=f27_BS ;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]=f27_BN ;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]=f27_TS ;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]=f27_TNE;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]=f27_BSW;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]=f27_BNE;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]=f27_TSW;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]=f27_TSE;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]=f27_BNW;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]=f27_BSE;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]=f27_TNW;
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]=f27_E  ;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]=f27_W  ;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]=f27_N  ;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]=f27_S  ;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]=f27_T  ;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]=f27_B  ;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]=f27_NE ;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]=f27_SW ;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]=f27_SE ;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]=f27_NW ;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]=f27_TE ;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]=f27_BW ;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]=f27_BE ;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]=f27_TW ;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]=f27_TN ;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]=f27_BS ;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]=f27_BN ;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]=f27_TS ;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]=f27_TNE;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]=f27_BSW;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]=f27_BNE;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]=f27_TSW;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]=f27_TSE;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]=f27_BNW;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]=f27_BSE;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]=f27_TNW;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3936,16 +3893,14 @@ extern "C" __global__ void QADBB27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QNoSlipADincomp7( int inx,
-											 int iny,
+extern "C" __global__ void QNoSlipADincomp7(
 											 real* DD, 
 											 real* DD7, 
 											 real* temp,
 											 real diffusivity,
 											 int* k_Q, 
 											 real* QQ,
-											 unsigned int sizeQ,
-											 int numberOfBCnodes, 
+											 unsigned int numberOfBCnodes, 
 											 real om1, 
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -3956,63 +3911,63 @@ extern "C" __global__ void QNoSlipADincomp7( int inx,
    //Distributions27 D;
    //if (isEvenTimestep==true)
    //{
-   //   D.f[dirE   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirW   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   //   D.f[E   ] = &DD[E   *size_Mat];
+   //   D.f[W   ] = &DD[W   *size_Mat];
+   //   D.f[N   ] = &DD[N   *size_Mat];
+   //   D.f[S   ] = &DD[S   *size_Mat];
+   //   D.f[T   ] = &DD[T   *size_Mat];
+   //   D.f[B   ] = &DD[B   *size_Mat];
+   //   D.f[NE  ] = &DD[NE  *size_Mat];
+   //   D.f[SW  ] = &DD[SW  *size_Mat];
+   //   D.f[SE  ] = &DD[SE  *size_Mat];
+   //   D.f[NW  ] = &DD[NW  *size_Mat];
+   //   D.f[TE  ] = &DD[TE  *size_Mat];
+   //   D.f[BW  ] = &DD[BW  *size_Mat];
+   //   D.f[BE  ] = &DD[BE  *size_Mat];
+   //   D.f[TW  ] = &DD[TW  *size_Mat];
+   //   D.f[TN  ] = &DD[TN  *size_Mat];
+   //   D.f[BS  ] = &DD[BS  *size_Mat];
+   //   D.f[BN  ] = &DD[BN  *size_Mat];
+   //   D.f[TS  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[TNE *size_Mat];
+   //   D.f[TSW ] = &DD[TSW *size_Mat];
+   //   D.f[TSE ] = &DD[TSE *size_Mat];
+   //   D.f[TNW ] = &DD[TNW *size_Mat];
+   //   D.f[BNE ] = &DD[BNE *size_Mat];
+   //   D.f[BSW ] = &DD[BSW *size_Mat];
+   //   D.f[BSE ] = &DD[BSE *size_Mat];
+   //   D.f[BNW ] = &DD[BNW *size_Mat];
    //} 
    //else
    //{
-   //   D.f[dirW   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirE   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+   //   D.f[W   ] = &DD[E   *size_Mat];
+   //   D.f[E   ] = &DD[W   *size_Mat];
+   //   D.f[S   ] = &DD[N   *size_Mat];
+   //   D.f[N   ] = &DD[S   *size_Mat];
+   //   D.f[B   ] = &DD[T   *size_Mat];
+   //   D.f[T   ] = &DD[B   *size_Mat];
+   //   D.f[SW  ] = &DD[NE  *size_Mat];
+   //   D.f[NE  ] = &DD[SW  *size_Mat];
+   //   D.f[NW  ] = &DD[SE  *size_Mat];
+   //   D.f[SE  ] = &DD[NW  *size_Mat];
+   //   D.f[BW  ] = &DD[TE  *size_Mat];
+   //   D.f[TE  ] = &DD[BW  *size_Mat];
+   //   D.f[TW  ] = &DD[BE  *size_Mat];
+   //   D.f[BE  ] = &DD[TW  *size_Mat];
+   //   D.f[BS  ] = &DD[TN  *size_Mat];
+   //   D.f[TN  ] = &DD[BS  *size_Mat];
+   //   D.f[TS  ] = &DD[BN  *size_Mat];
+   //   D.f[BN  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[BSW *size_Mat];
+   //   D.f[TSW ] = &DD[BNE *size_Mat];
+   //   D.f[TSE ] = &DD[BNW *size_Mat];
+   //   D.f[TNW ] = &DD[BSE *size_Mat];
+   //   D.f[BNE ] = &DD[TSW *size_Mat];
+   //   D.f[BSW ] = &DD[TNE *size_Mat];
+   //   D.f[BSE ] = &DD[TNW *size_Mat];
+   //   D.f[BNW ] = &DD[TSE *size_Mat];
    //}
 
    Distributions7 D7;
@@ -4054,12 +4009,12 @@ extern "C" __global__ void QNoSlipADincomp7( int inx,
       //////////////////////////////////////////////////////////////////////////////////
       real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB;
 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
       //////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -4091,32 +4046,32 @@ extern "C" __global__ void QNoSlipADincomp7( int inx,
       //unsigned int ktne = KQK;
       //unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      //real f_W    = (D.f[dirE   ])[ke   ];
-      //real f_E    = (D.f[dirW   ])[kw   ];
-      //real f_S    = (D.f[dirN   ])[kn   ];
-      //real f_N    = (D.f[dirS   ])[ks   ];
-      //real f_B    = (D.f[dirT   ])[kt   ];
-      //real f_T    = (D.f[dirB   ])[kb   ];
-      //real f_SW   = (D.f[dirNE  ])[kne  ];
-      //real f_NE   = (D.f[dirSW  ])[ksw  ];
-      //real f_NW   = (D.f[dirSE  ])[kse  ];
-      //real f_SE   = (D.f[dirNW  ])[knw  ];
-      //real f_BW   = (D.f[dirTE  ])[kte  ];
-      //real f_TE   = (D.f[dirBW  ])[kbw  ];
-      //real f_TW   = (D.f[dirBE  ])[kbe  ];
-      //real f_BE   = (D.f[dirTW  ])[ktw  ];
-      //real f_BS   = (D.f[dirTN  ])[ktn  ];
-      //real f_TN   = (D.f[dirBS  ])[kbs  ];
-      //real f_TS   = (D.f[dirBN  ])[kbn  ];
-      //real f_BN   = (D.f[dirTS  ])[kts  ];
-      //real f_BSW  = (D.f[dirTNE ])[ktne ];
-      //real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      //real f_BNW  = (D.f[dirTSE ])[ktse ];
-      //real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      //real f_TSW  = (D.f[dirBNE ])[kbne ];
-      //real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      //real f_TNW  = (D.f[dirBSE ])[kbse ];
-      //real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      //real f_W    = (D.f[E   ])[ke   ];
+      //real f_E    = (D.f[W   ])[kw   ];
+      //real f_S    = (D.f[N   ])[kn   ];
+      //real f_N    = (D.f[S   ])[ks   ];
+      //real f_B    = (D.f[T   ])[kt   ];
+      //real f_T    = (D.f[B   ])[kb   ];
+      //real f_SW   = (D.f[NE  ])[kne  ];
+      //real f_NE   = (D.f[SW  ])[ksw  ];
+      //real f_NW   = (D.f[SE  ])[kse  ];
+      //real f_SE   = (D.f[NW  ])[knw  ];
+      //real f_BW   = (D.f[TE  ])[kte  ];
+      //real f_TE   = (D.f[BW  ])[kbw  ];
+      //real f_TW   = (D.f[BE  ])[kbe  ];
+      //real f_BE   = (D.f[TW  ])[ktw  ];
+      //real f_BS   = (D.f[TN  ])[ktn  ];
+      //real f_TN   = (D.f[BS  ])[kbs  ];
+      //real f_TS   = (D.f[BN  ])[kbn  ];
+      //real f_BN   = (D.f[TS  ])[kts  ];
+      //real f_BSW  = (D.f[TNE ])[ktne ];
+      //real f_BNE  = (D.f[TSW ])[ktsw ];
+      //real f_BNW  = (D.f[TSE ])[ktse ];
+      //real f_BSE  = (D.f[TNW ])[ktnw ];
+      //real f_TSW  = (D.f[BNE ])[kbne ];
+      //real f_TNE  = (D.f[BSW ])[kbsw ];
+      //real f_TNW  = (D.f[BSE ])[kbse ];
+      //real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       //real vx1 =  ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
       //real vx2 =  ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
@@ -4362,16 +4317,14 @@ extern "C" __global__ void QNoSlipADincomp7( int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QNoSlipADincomp27(int inx,
-											 int iny,
+extern "C" __global__ void QNoSlipADincomp27(
 											 real* DD, 
 											 real* DD27, 
 											 real* temp,
 											 real diffusivity,
 											 int* k_Q, 
 											 real* QQ,
-											 unsigned int sizeQ,
-											 int numberOfBCnodes, 
+											 unsigned int numberOfBCnodes, 
 											 real om1, 
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -4382,125 +4335,125 @@ extern "C" __global__ void QNoSlipADincomp27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -4521,32 +4474,32 @@ extern "C" __global__ void QNoSlipADincomp27(int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -4578,65 +4531,65 @@ extern "C" __global__ void QNoSlipADincomp27(int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      //real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      //real f_ZERO = (D.f[REST])[kzero];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1 =  ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
       real vx2 =  ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       real vx3 =  ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      real f27_W    = (D27.f[dirE   ])[ke   ];
-      real f27_E    = (D27.f[dirW   ])[kw   ];
-      real f27_S    = (D27.f[dirN   ])[kn   ];
-      real f27_N    = (D27.f[dirS   ])[ks   ];
-      real f27_B    = (D27.f[dirT   ])[kt   ];
-      real f27_T    = (D27.f[dirB   ])[kb   ];
-      real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      real f27_ZERO = (D27.f[dirZERO])[kzero];
-      real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      real f27_W    = (D27.f[E   ])[ke   ];
+      real f27_E    = (D27.f[W   ])[kw   ];
+      real f27_S    = (D27.f[N   ])[kn   ];
+      real f27_N    = (D27.f[S   ])[ks   ];
+      real f27_B    = (D27.f[T   ])[kt   ];
+      real f27_T    = (D27.f[B   ])[kb   ];
+      real f27_SW   = (D27.f[NE  ])[kne  ];
+      real f27_NE   = (D27.f[SW  ])[ksw  ];
+      real f27_NW   = (D27.f[SE  ])[kse  ];
+      real f27_SE   = (D27.f[NW  ])[knw  ];
+      real f27_BW   = (D27.f[TE  ])[kte  ];
+      real f27_TE   = (D27.f[BW  ])[kbw  ];
+      real f27_TW   = (D27.f[BE  ])[kbe  ];
+      real f27_BE   = (D27.f[TW  ])[ktw  ];
+      real f27_BS   = (D27.f[TN  ])[ktn  ];
+      real f27_TN   = (D27.f[BS  ])[kbs  ];
+      real f27_TS   = (D27.f[BN  ])[kbn  ];
+      real f27_BN   = (D27.f[TS  ])[kts  ];
+      real f27_ZERO = (D27.f[REST])[kzero];
+      real f27_BSW  = (D27.f[TNE ])[ktne ];
+      real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      real f27_BNW  = (D27.f[TSE ])[ktse ];
+      real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      real f27_TSW  = (D27.f[BNE ])[kbne ];
+      real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      real f27_TNW  = (D27.f[BSE ])[kbse ];
+      real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -4712,96 +4665,96 @@ extern "C" __global__ void QNoSlipADincomp27(int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=0.1f;
+      //(D.f[REST])[k]=0.1f;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real q;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]=(c2o1*feqW27_W  -(f27_E  *(q*omegaD-c1o1)-omegaD*feq27_E  *(q-c1o1))/(omegaD-c1o1)+f27_W  *q)/(q+c1o1);
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]=(c2o1*feqW27_E  -(f27_W  *(q*omegaD-c1o1)-omegaD*feq27_W  *(q-c1o1))/(omegaD-c1o1)+f27_E  *q)/(q+c1o1);
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]=(c2o1*feqW27_S  -(f27_N  *(q*omegaD-c1o1)-omegaD*feq27_N  *(q-c1o1))/(omegaD-c1o1)+f27_S  *q)/(q+c1o1);
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]=(c2o1*feqW27_N  -(f27_S  *(q*omegaD-c1o1)-omegaD*feq27_S  *(q-c1o1))/(omegaD-c1o1)+f27_N  *q)/(q+c1o1);
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]=(c2o1*feqW27_B  -(f27_T  *(q*omegaD-c1o1)-omegaD*feq27_T  *(q-c1o1))/(omegaD-c1o1)+f27_B  *q)/(q+c1o1);
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]=(c2o1*feqW27_T  -(f27_B  *(q*omegaD-c1o1)-omegaD*feq27_B  *(q-c1o1))/(omegaD-c1o1)+f27_T  *q)/(q+c1o1);
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1);
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1);
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1);
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1);
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1);
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1);
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1);
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1);
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1);
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1);
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1);
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1);
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1);
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1);
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1);
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1);
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1);
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1);
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1);
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]=(c2o1*feqW27_W  -(f27_E  *(q*omegaD-c1o1)-omegaD*feq27_E  *(q-c1o1))/(omegaD-c1o1)+f27_W  *q)/(q+c1o1);
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]=(c2o1*feqW27_E  -(f27_W  *(q*omegaD-c1o1)-omegaD*feq27_W  *(q-c1o1))/(omegaD-c1o1)+f27_E  *q)/(q+c1o1);
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]=(c2o1*feqW27_S  -(f27_N  *(q*omegaD-c1o1)-omegaD*feq27_N  *(q-c1o1))/(omegaD-c1o1)+f27_S  *q)/(q+c1o1);
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]=(c2o1*feqW27_N  -(f27_S  *(q*omegaD-c1o1)-omegaD*feq27_S  *(q-c1o1))/(omegaD-c1o1)+f27_N  *q)/(q+c1o1);
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]=(c2o1*feqW27_B  -(f27_T  *(q*omegaD-c1o1)-omegaD*feq27_T  *(q-c1o1))/(omegaD-c1o1)+f27_B  *q)/(q+c1o1);
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]=(c2o1*feqW27_T  -(f27_B  *(q*omegaD-c1o1)-omegaD*feq27_B  *(q-c1o1))/(omegaD-c1o1)+f27_T  *q)/(q+c1o1);
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]=(c2o1*feqW27_SW -(f27_NE *(q*omegaD-c1o1)-omegaD*feq27_NE *(q-c1o1))/(omegaD-c1o1)+f27_SW *q)/(q+c1o1);
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]=(c2o1*feqW27_NE -(f27_SW *(q*omegaD-c1o1)-omegaD*feq27_SW *(q-c1o1))/(omegaD-c1o1)+f27_NE *q)/(q+c1o1);
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]=(c2o1*feqW27_NW -(f27_SE *(q*omegaD-c1o1)-omegaD*feq27_SE *(q-c1o1))/(omegaD-c1o1)+f27_NW *q)/(q+c1o1);
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]=(c2o1*feqW27_SE -(f27_NW *(q*omegaD-c1o1)-omegaD*feq27_NW *(q-c1o1))/(omegaD-c1o1)+f27_SE *q)/(q+c1o1);
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]=(c2o1*feqW27_BW -(f27_TE *(q*omegaD-c1o1)-omegaD*feq27_TE *(q-c1o1))/(omegaD-c1o1)+f27_BW *q)/(q+c1o1);
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]=(c2o1*feqW27_TE -(f27_BW *(q*omegaD-c1o1)-omegaD*feq27_BW *(q-c1o1))/(omegaD-c1o1)+f27_TE *q)/(q+c1o1);
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]=(c2o1*feqW27_TW -(f27_BE *(q*omegaD-c1o1)-omegaD*feq27_BE *(q-c1o1))/(omegaD-c1o1)+f27_TW *q)/(q+c1o1);
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]=(c2o1*feqW27_BE -(f27_TW *(q*omegaD-c1o1)-omegaD*feq27_TW *(q-c1o1))/(omegaD-c1o1)+f27_BE *q)/(q+c1o1);
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]=(c2o1*feqW27_BS -(f27_TN *(q*omegaD-c1o1)-omegaD*feq27_TN *(q-c1o1))/(omegaD-c1o1)+f27_BS *q)/(q+c1o1);
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]=(c2o1*feqW27_TN -(f27_BS *(q*omegaD-c1o1)-omegaD*feq27_BS *(q-c1o1))/(omegaD-c1o1)+f27_TN *q)/(q+c1o1);
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]=(c2o1*feqW27_TS -(f27_BN *(q*omegaD-c1o1)-omegaD*feq27_BN *(q-c1o1))/(omegaD-c1o1)+f27_TS *q)/(q+c1o1);
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]=(c2o1*feqW27_BN -(f27_TS *(q*omegaD-c1o1)-omegaD*feq27_TS *(q-c1o1))/(omegaD-c1o1)+f27_BN *q)/(q+c1o1);
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]=(c2o1*feqW27_BSW-(f27_TNE*(q*omegaD-c1o1)-omegaD*feq27_TNE*(q-c1o1))/(omegaD-c1o1)+f27_BSW*q)/(q+c1o1);
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]=(c2o1*feqW27_TNE-(f27_BSW*(q*omegaD-c1o1)-omegaD*feq27_BSW*(q-c1o1))/(omegaD-c1o1)+f27_TNE*q)/(q+c1o1);
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]=(c2o1*feqW27_TSW-(f27_BNE*(q*omegaD-c1o1)-omegaD*feq27_BNE*(q-c1o1))/(omegaD-c1o1)+f27_TSW*q)/(q+c1o1);
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]=(c2o1*feqW27_BNE-(f27_TSW*(q*omegaD-c1o1)-omegaD*feq27_TSW*(q-c1o1))/(omegaD-c1o1)+f27_BNE*q)/(q+c1o1);
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]=(c2o1*feqW27_BNW-(f27_TSE*(q*omegaD-c1o1)-omegaD*feq27_TSE*(q-c1o1))/(omegaD-c1o1)+f27_BNW*q)/(q+c1o1);
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]=(c2o1*feqW27_TSE-(f27_BNW*(q*omegaD-c1o1)-omegaD*feq27_BNW*(q-c1o1))/(omegaD-c1o1)+f27_TSE*q)/(q+c1o1);
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]=(c2o1*feqW27_TNW-(f27_BSE*(q*omegaD-c1o1)-omegaD*feq27_BSE*(q-c1o1))/(omegaD-c1o1)+f27_TNW*q)/(q+c1o1);
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]=(c2o1*feqW27_BSE-(f27_TNW*(q*omegaD-c1o1)-omegaD*feq27_TNW*(q-c1o1))/(omegaD-c1o1)+f27_BSE*q)/(q+c1o1);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -4845,8 +4798,7 @@ extern "C" __global__ void QNoSlipADincomp27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADVeloIncomp7(  int inx,
-											int iny,
+extern "C" __global__ void QADVeloIncomp7(
 											real* DD, 
 											real* DD7, 
 											real* temp,
@@ -4854,8 +4806,7 @@ extern "C" __global__ void QADVeloIncomp7(  int inx,
 											real diffusivity,
 											int* k_Q, 
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes, 
+											unsigned int numberOfBCnodes, 
 											real om1, 
 											unsigned int* neighborX,
 											unsigned int* neighborY,
@@ -4866,63 +4817,63 @@ extern "C" __global__ void QADVeloIncomp7(  int inx,
    //Distributions27 D;
    //if (isEvenTimestep==true)
    //{
-   //   D.f[dirE   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirW   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   //   D.f[E   ] = &DD[E   *size_Mat];
+   //   D.f[W   ] = &DD[W   *size_Mat];
+   //   D.f[N   ] = &DD[N   *size_Mat];
+   //   D.f[S   ] = &DD[S   *size_Mat];
+   //   D.f[T   ] = &DD[T   *size_Mat];
+   //   D.f[B   ] = &DD[B   *size_Mat];
+   //   D.f[NE  ] = &DD[NE  *size_Mat];
+   //   D.f[SW  ] = &DD[SW  *size_Mat];
+   //   D.f[SE  ] = &DD[SE  *size_Mat];
+   //   D.f[NW  ] = &DD[NW  *size_Mat];
+   //   D.f[TE  ] = &DD[TE  *size_Mat];
+   //   D.f[BW  ] = &DD[BW  *size_Mat];
+   //   D.f[BE  ] = &DD[BE  *size_Mat];
+   //   D.f[TW  ] = &DD[TW  *size_Mat];
+   //   D.f[TN  ] = &DD[TN  *size_Mat];
+   //   D.f[BS  ] = &DD[BS  *size_Mat];
+   //   D.f[BN  ] = &DD[BN  *size_Mat];
+   //   D.f[TS  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[TNE *size_Mat];
+   //   D.f[TSW ] = &DD[TSW *size_Mat];
+   //   D.f[TSE ] = &DD[TSE *size_Mat];
+   //   D.f[TNW ] = &DD[TNW *size_Mat];
+   //   D.f[BNE ] = &DD[BNE *size_Mat];
+   //   D.f[BSW ] = &DD[BSW *size_Mat];
+   //   D.f[BSE ] = &DD[BSE *size_Mat];
+   //   D.f[BNW ] = &DD[BNW *size_Mat];
    //} 
    //else
    //{
-   //   D.f[dirW   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirE   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+   //   D.f[W   ] = &DD[E   *size_Mat];
+   //   D.f[E   ] = &DD[W   *size_Mat];
+   //   D.f[S   ] = &DD[N   *size_Mat];
+   //   D.f[N   ] = &DD[S   *size_Mat];
+   //   D.f[B   ] = &DD[T   *size_Mat];
+   //   D.f[T   ] = &DD[B   *size_Mat];
+   //   D.f[SW  ] = &DD[NE  *size_Mat];
+   //   D.f[NE  ] = &DD[SW  *size_Mat];
+   //   D.f[NW  ] = &DD[SE  *size_Mat];
+   //   D.f[SE  ] = &DD[NW  *size_Mat];
+   //   D.f[BW  ] = &DD[TE  *size_Mat];
+   //   D.f[TE  ] = &DD[BW  *size_Mat];
+   //   D.f[TW  ] = &DD[BE  *size_Mat];
+   //   D.f[BE  ] = &DD[TW  *size_Mat];
+   //   D.f[BS  ] = &DD[TN  *size_Mat];
+   //   D.f[TN  ] = &DD[BS  *size_Mat];
+   //   D.f[TS  ] = &DD[BN  *size_Mat];
+   //   D.f[BN  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[BSW *size_Mat];
+   //   D.f[TSW ] = &DD[BNE *size_Mat];
+   //   D.f[TSE ] = &DD[BNW *size_Mat];
+   //   D.f[TNW ] = &DD[BSE *size_Mat];
+   //   D.f[BNE ] = &DD[TSW *size_Mat];
+   //   D.f[BSW ] = &DD[TNE *size_Mat];
+   //   D.f[BSE ] = &DD[TNW *size_Mat];
+   //   D.f[BNW ] = &DD[TSE *size_Mat];
    //}
 
    Distributions7 D7;
@@ -4964,12 +4915,12 @@ extern "C" __global__ void QADVeloIncomp7(  int inx,
       //////////////////////////////////////////////////////////////////////////////////
       real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB; 
 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
       //////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -5001,32 +4952,32 @@ extern "C" __global__ void QADVeloIncomp7(  int inx,
       //unsigned int ktne = KQK;
       //unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      //real f_W    = (D.f[dirE   ])[ke   ];
-      //real f_E    = (D.f[dirW   ])[kw   ];
-      //real f_S    = (D.f[dirN   ])[kn   ];
-      //real f_N    = (D.f[dirS   ])[ks   ];
-      //real f_B    = (D.f[dirT   ])[kt   ];
-      //real f_T    = (D.f[dirB   ])[kb   ];
-      //real f_SW   = (D.f[dirNE  ])[kne  ];
-      //real f_NE   = (D.f[dirSW  ])[ksw  ];
-      //real f_NW   = (D.f[dirSE  ])[kse  ];
-      //real f_SE   = (D.f[dirNW  ])[knw  ];
-      //real f_BW   = (D.f[dirTE  ])[kte  ];
-      //real f_TE   = (D.f[dirBW  ])[kbw  ];
-      //real f_TW   = (D.f[dirBE  ])[kbe  ];
-      //real f_BE   = (D.f[dirTW  ])[ktw  ];
-      //real f_BS   = (D.f[dirTN  ])[ktn  ];
-      //real f_TN   = (D.f[dirBS  ])[kbs  ];
-      //real f_TS   = (D.f[dirBN  ])[kbn  ];
-      //real f_BN   = (D.f[dirTS  ])[kts  ];
-      //real f_BSW  = (D.f[dirTNE ])[ktne ];
-      //real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      //real f_BNW  = (D.f[dirTSE ])[ktse ];
-      //real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      //real f_TSW  = (D.f[dirBNE ])[kbne ];
-      //real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      //real f_TNW  = (D.f[dirBSE ])[kbse ];
-      //real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      //real f_W    = (D.f[E   ])[ke   ];
+      //real f_E    = (D.f[W   ])[kw   ];
+      //real f_S    = (D.f[N   ])[kn   ];
+      //real f_N    = (D.f[S   ])[ks   ];
+      //real f_B    = (D.f[T   ])[kt   ];
+      //real f_T    = (D.f[B   ])[kb   ];
+      //real f_SW   = (D.f[NE  ])[kne  ];
+      //real f_NE   = (D.f[SW  ])[ksw  ];
+      //real f_NW   = (D.f[SE  ])[kse  ];
+      //real f_SE   = (D.f[NW  ])[knw  ];
+      //real f_BW   = (D.f[TE  ])[kte  ];
+      //real f_TE   = (D.f[BW  ])[kbw  ];
+      //real f_TW   = (D.f[BE  ])[kbe  ];
+      //real f_BE   = (D.f[TW  ])[ktw  ];
+      //real f_BS   = (D.f[TN  ])[ktn  ];
+      //real f_TN   = (D.f[BS  ])[kbs  ];
+      //real f_TS   = (D.f[BN  ])[kbn  ];
+      //real f_BN   = (D.f[TS  ])[kts  ];
+      //real f_BSW  = (D.f[TNE ])[ktne ];
+      //real f_BNE  = (D.f[TSW ])[ktsw ];
+      //real f_BNW  = (D.f[TSE ])[ktse ];
+      //real f_BSE  = (D.f[TNW ])[ktnw ];
+      //real f_TSW  = (D.f[BNE ])[kbne ];
+      //real f_TNE  = (D.f[BSW ])[kbsw ];
+      //real f_TNW  = (D.f[BSE ])[kbse ];
+      //real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       //real vx1_Inflow   = c0o1;
       //real vx2_Inflow   = velo[k];
@@ -5325,8 +5276,7 @@ extern "C" __global__ void QADVeloIncomp7(  int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADVeloIncomp27( int inx,
-											int iny,
+extern "C" __global__ void QADVeloIncomp27(
 											real* DD, 
 											real* DD27, 
 											real* temp,
@@ -5334,8 +5284,7 @@ extern "C" __global__ void QADVeloIncomp27( int inx,
 											real diffusivity,
 											int* k_Q, 
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes, 
+											unsigned int numberOfBCnodes, 
 											real om1, 
 											unsigned int* neighborX,
 											unsigned int* neighborY,
@@ -5346,125 +5295,125 @@ extern "C" __global__ void QADVeloIncomp27( int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -5485,32 +5434,32 @@ extern "C" __global__ void QADVeloIncomp27( int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -5542,65 +5491,65 @@ extern "C" __global__ void QADVeloIncomp27( int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      //real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      //real f_ZERO = (D.f[REST])[kzero];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
       real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       real vx3 = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      //real f27_W    = (D27.f[dirE   ])[ke   ];
-      //real f27_E    = (D27.f[dirW   ])[kw   ];
-      //real f27_S    = (D27.f[dirN   ])[kn   ];
-      //real f27_N    = (D27.f[dirS   ])[ks   ];
-      //real f27_B    = (D27.f[dirT   ])[kt   ];
-      //real f27_T    = (D27.f[dirB   ])[kb   ];
-      //real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      //real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      //real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      //real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      //real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      //real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      //real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      //real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      //real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      //real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      //real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      //real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      //real f27_ZERO = (D27.f[dirZERO])[kzero];
-      //real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      //real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      //real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      //real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      //real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      //real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      //real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      //real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      //real f27_W    = (D27.f[E   ])[ke   ];
+      //real f27_E    = (D27.f[W   ])[kw   ];
+      //real f27_S    = (D27.f[N   ])[kn   ];
+      //real f27_N    = (D27.f[S   ])[ks   ];
+      //real f27_B    = (D27.f[T   ])[kt   ];
+      //real f27_T    = (D27.f[B   ])[kb   ];
+      //real f27_SW   = (D27.f[NE  ])[kne  ];
+      //real f27_NE   = (D27.f[SW  ])[ksw  ];
+      //real f27_NW   = (D27.f[SE  ])[kse  ];
+      //real f27_SE   = (D27.f[NW  ])[knw  ];
+      //real f27_BW   = (D27.f[TE  ])[kte  ];
+      //real f27_TE   = (D27.f[BW  ])[kbw  ];
+      //real f27_TW   = (D27.f[BE  ])[kbe  ];
+      //real f27_BE   = (D27.f[TW  ])[ktw  ];
+      //real f27_BS   = (D27.f[TN  ])[ktn  ];
+      //real f27_TN   = (D27.f[BS  ])[kbs  ];
+      //real f27_TS   = (D27.f[BN  ])[kbn  ];
+      //real f27_BN   = (D27.f[TS  ])[kts  ];
+      //real f27_ZERO = (D27.f[REST])[kzero];
+      //real f27_BSW  = (D27.f[TNE ])[ktne ];
+      //real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      //real f27_BNW  = (D27.f[TSE ])[ktse ];
+      //real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      //real f27_TSW  = (D27.f[BNE ])[kbne ];
+      //real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      //real f27_TNW  = (D27.f[BSE ])[kbse ];
+      //real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -5681,122 +5630,122 @@ extern "C" __global__ void QADVeloIncomp27( int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real q;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dirW  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
-      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[dirE  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
-      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[dirS  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
-      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[dirN  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
-      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[dirB  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
-      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[dirT  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
-      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[dirSW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
-      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[dirNE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
-      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[dirNW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
-      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[dirSE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
-      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[dirBW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
-      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[dirTE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
-      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[dirTW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
-      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[dirBE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
-      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[dirBS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
-      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[dirTN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
-      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[dirTS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
-      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[dirBN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
-      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dirBSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
-      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dirTNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
-      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dirTSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
-      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dirBNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
-      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dirBNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
-      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dirTSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
-      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dirTNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
-      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dirBSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[W  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
+      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[E  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
+      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[S  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
+      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[N  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
+      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[B  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
+      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[T  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
+      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[SW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
+      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[NE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
+      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[NW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
+      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[SE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
+      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[BW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
+      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[TE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
+      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[TW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
+      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[BE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
+      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[BS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
+      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[TN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
+      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[TS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
+      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[BN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
+      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[BSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
+      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[TNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
+      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[TSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
+      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[BNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
+      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[BNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
+      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[TSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
+      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[TNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
+      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[BSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -5849,8 +5798,7 @@ extern "C" __global__ void QADPressIncomp7(int inx,
 										   real diffusivity,
 										   int* k_Q, 
 										   real* QQ,
-										   unsigned int sizeQ,
-										   int numberOfBCnodes, 
+										   unsigned int numberOfBCnodes, 
 										   real om1, 
 										   unsigned int* neighborX,
 										   unsigned int* neighborY,
@@ -5861,63 +5809,63 @@ extern "C" __global__ void QADPressIncomp7(int inx,
   /* Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }*/
 
    Distributions7 D7;
@@ -5959,12 +5907,12 @@ extern "C" __global__ void QADPressIncomp7(int inx,
       //////////////////////////////////////////////////////////////////////////////////
       real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB; 
 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
       //////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -5999,32 +5947,32 @@ extern "C" __global__ void QADPressIncomp7(int inx,
     /*  real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];*/
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];*/
       ////////////////////////////////////////////////////////////////////////////////
       //real vx1 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
       //real vx2 = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
@@ -6281,17 +6229,15 @@ extern "C" __global__ void QADPressIncomp7(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QADPressIncomp27(   int inx,
-											   int iny,
-											   real* DD, 
-											   real* DD27, 
+extern "C" __global__ void QADPressIncomp27(
+											   real* DD,
+											   real* DD27,
 											   real* temp,
 											   real* velo,
 											   real diffusivity,
 											   int* k_Q, 
 											   real* QQ,
-											   unsigned int sizeQ,
-											   int numberOfBCnodes, 
+											   unsigned int numberOfBCnodes, 
 											   real om1, 
 											   unsigned int* neighborX,
 											   unsigned int* neighborY,
@@ -6302,125 +6248,125 @@ extern "C" __global__ void QADPressIncomp27(   int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
 
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    } 
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -6433,7 +6379,7 @@ extern "C" __global__ void QADPressIncomp27(   int inx,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfBCnodes)
+   if(k < numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real  *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -6441,32 +6387,32 @@ extern "C" __global__ void QADPressIncomp27(   int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -6498,65 +6444,65 @@ extern "C" __global__ void QADPressIncomp27(   int inx,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      //real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      //real f_ZERO = (D.f[REST])[kzero];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1      = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)+(f_BSE-f_TNW) +(f_NE-f_SW)+(f_SE-f_NW)+(f_TE-f_BW)+(f_BE-f_TW)+(f_E-f_W));
       real vx2      = ((f_TNE-f_BSW)+(f_BNE-f_TSW)+(f_BNW-f_TSE)+(f_TNW-f_BSE) +(f_NE-f_SW)+(f_NW-f_SE)+(f_TN-f_BS)+(f_BN-f_TS)+(f_N-f_S));
       real vx3      = ((f_TNE-f_BSW)+(f_TSW-f_BNE)+(f_TSE-f_BNW)+(f_TNW-f_BSE) +(f_TE-f_BW)+(f_TW-f_BE)+(f_TN-f_BS)+(f_TS-f_BN)+(f_T-f_B));
       ////////////////////////////////////////////////////////////////////////////////
-      //real f27_W    = (D27.f[dirE   ])[ke   ];
-      //real f27_E    = (D27.f[dirW   ])[kw   ];
-      //real f27_S    = (D27.f[dirN   ])[kn   ];
-      //real f27_N    = (D27.f[dirS   ])[ks   ];
-      //real f27_B    = (D27.f[dirT   ])[kt   ];
-      //real f27_T    = (D27.f[dirB   ])[kb   ];
-      //real f27_SW   = (D27.f[dirNE  ])[kne  ];
-      //real f27_NE   = (D27.f[dirSW  ])[ksw  ];
-      //real f27_NW   = (D27.f[dirSE  ])[kse  ];
-      //real f27_SE   = (D27.f[dirNW  ])[knw  ];
-      //real f27_BW   = (D27.f[dirTE  ])[kte  ];
-      //real f27_TE   = (D27.f[dirBW  ])[kbw  ];
-      //real f27_TW   = (D27.f[dirBE  ])[kbe  ];
-      //real f27_BE   = (D27.f[dirTW  ])[ktw  ];
-      //real f27_BS   = (D27.f[dirTN  ])[ktn  ];
-      //real f27_TN   = (D27.f[dirBS  ])[kbs  ];
-      //real f27_TS   = (D27.f[dirBN  ])[kbn  ];
-      //real f27_BN   = (D27.f[dirTS  ])[kts  ];
-      //real f27_ZERO = (D27.f[dirZERO])[kzero];
-      //real f27_BSW  = (D27.f[dirTNE ])[ktne ];
-      //real f27_BNE  = (D27.f[dirTSW ])[ktsw ];
-      //real f27_BNW  = (D27.f[dirTSE ])[ktse ];
-      //real f27_BSE  = (D27.f[dirTNW ])[ktnw ];
-      //real f27_TSW  = (D27.f[dirBNE ])[kbne ];
-      //real f27_TNE  = (D27.f[dirBSW ])[kbsw ];
-      //real f27_TNW  = (D27.f[dirBSE ])[kbse ];
-      //real f27_TSE  = (D27.f[dirBNW ])[kbnw ];
+      //real f27_W    = (D27.f[E   ])[ke   ];
+      //real f27_E    = (D27.f[W   ])[kw   ];
+      //real f27_S    = (D27.f[N   ])[kn   ];
+      //real f27_N    = (D27.f[S   ])[ks   ];
+      //real f27_B    = (D27.f[T   ])[kt   ];
+      //real f27_T    = (D27.f[B   ])[kb   ];
+      //real f27_SW   = (D27.f[NE  ])[kne  ];
+      //real f27_NE   = (D27.f[SW  ])[ksw  ];
+      //real f27_NW   = (D27.f[SE  ])[kse  ];
+      //real f27_SE   = (D27.f[NW  ])[knw  ];
+      //real f27_BW   = (D27.f[TE  ])[kte  ];
+      //real f27_TE   = (D27.f[BW  ])[kbw  ];
+      //real f27_TW   = (D27.f[BE  ])[kbe  ];
+      //real f27_BE   = (D27.f[TW  ])[ktw  ];
+      //real f27_BS   = (D27.f[TN  ])[ktn  ];
+      //real f27_TN   = (D27.f[BS  ])[kbs  ];
+      //real f27_TS   = (D27.f[BN  ])[kbn  ];
+      //real f27_BN   = (D27.f[TS  ])[kts  ];
+      //real f27_ZERO = (D27.f[REST])[kzero];
+      //real f27_BSW  = (D27.f[TNE ])[ktne ];
+      //real f27_BNE  = (D27.f[TSW ])[ktsw ];
+      //real f27_BNW  = (D27.f[TSE ])[ktse ];
+      //real f27_BSE  = (D27.f[TNW ])[ktnw ];
+      //real f27_TSW  = (D27.f[BNE ])[kbne ];
+      //real f27_TNE  = (D27.f[BSW ])[kbsw ];
+      //real f27_TNW  = (D27.f[BSE ])[kbse ];
+      //real f27_TSE  = (D27.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////
@@ -6637,122 +6583,122 @@ extern "C" __global__ void QADPressIncomp27(   int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+         D27.f[E   ] = &DD27[E   *size_Mat];
+         D27.f[W   ] = &DD27[W   *size_Mat];
+         D27.f[N   ] = &DD27[N   *size_Mat];
+         D27.f[S   ] = &DD27[S   *size_Mat];
+         D27.f[T   ] = &DD27[T   *size_Mat];
+         D27.f[B   ] = &DD27[B   *size_Mat];
+         D27.f[NE  ] = &DD27[NE  *size_Mat];
+         D27.f[SW  ] = &DD27[SW  *size_Mat];
+         D27.f[SE  ] = &DD27[SE  *size_Mat];
+         D27.f[NW  ] = &DD27[NW  *size_Mat];
+         D27.f[TE  ] = &DD27[TE  *size_Mat];
+         D27.f[BW  ] = &DD27[BW  *size_Mat];
+         D27.f[BE  ] = &DD27[BE  *size_Mat];
+         D27.f[TW  ] = &DD27[TW  *size_Mat];
+         D27.f[TN  ] = &DD27[TN  *size_Mat];
+         D27.f[BS  ] = &DD27[BS  *size_Mat];
+         D27.f[BN  ] = &DD27[BN  *size_Mat];
+         D27.f[TS  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[TNE *size_Mat];
+         D27.f[TSW ] = &DD27[TSW *size_Mat];
+         D27.f[TSE ] = &DD27[TSE *size_Mat];
+         D27.f[TNW ] = &DD27[TNW *size_Mat];
+         D27.f[BNE ] = &DD27[BNE *size_Mat];
+         D27.f[BSW ] = &DD27[BSW *size_Mat];
+         D27.f[BSE ] = &DD27[BSE *size_Mat];
+         D27.f[BNW ] = &DD27[BNW *size_Mat];
       } 
       else
       {
-         D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-         D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-         D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-         D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-         D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-         D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-         D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-         D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-         D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-         D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-         D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-         D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-         D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-         D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-         D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-         D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-         D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-         D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-         D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-         D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-         D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-         D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
-         D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-         D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-         D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-         D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-         D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
+         D27.f[W   ] = &DD27[E   *size_Mat];
+         D27.f[E   ] = &DD27[W   *size_Mat];
+         D27.f[S   ] = &DD27[N   *size_Mat];
+         D27.f[N   ] = &DD27[S   *size_Mat];
+         D27.f[B   ] = &DD27[T   *size_Mat];
+         D27.f[T   ] = &DD27[B   *size_Mat];
+         D27.f[SW  ] = &DD27[NE  *size_Mat];
+         D27.f[NE  ] = &DD27[SW  *size_Mat];
+         D27.f[NW  ] = &DD27[SE  *size_Mat];
+         D27.f[SE  ] = &DD27[NW  *size_Mat];
+         D27.f[BW  ] = &DD27[TE  *size_Mat];
+         D27.f[TE  ] = &DD27[BW  *size_Mat];
+         D27.f[TW  ] = &DD27[BE  *size_Mat];
+         D27.f[BE  ] = &DD27[TW  *size_Mat];
+         D27.f[BS  ] = &DD27[TN  *size_Mat];
+         D27.f[TN  ] = &DD27[BS  *size_Mat];
+         D27.f[TS  ] = &DD27[BN  *size_Mat];
+         D27.f[BN  ] = &DD27[TS  *size_Mat];
+         D27.f[REST] = &DD27[REST*size_Mat];
+         D27.f[TNE ] = &DD27[BSW *size_Mat];
+         D27.f[TSW ] = &DD27[BNE *size_Mat];
+         D27.f[TSE ] = &DD27[BNW *size_Mat];
+         D27.f[TNW ] = &DD27[BSE *size_Mat];
+         D27.f[BNE ] = &DD27[TSW *size_Mat];
+         D27.f[BSW ] = &DD27[TNE *size_Mat];
+         D27.f[BSE ] = &DD27[TNW *size_Mat];
+         D27.f[BNW ] = &DD27[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real q;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirW  ])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
-      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirE  ])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirS  ])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirN  ])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirB  ])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[dirT  ])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSW ])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNE ])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirNW ])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirSE ])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBW ])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTE ])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTW ])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBE ])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBS ])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTN ])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirTS ])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[dirBN ])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSW])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNE])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSW])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNE])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBNW])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTSE])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirTNW])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[dirBSE])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
-      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[dirW  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
-      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[dirE  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
-      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[dirS  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
-      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[dirN  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
-      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[dirB  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
-      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[dirT  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
-      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[dirSW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
-      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[dirNE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
-      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[dirNW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
-      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[dirSE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
-      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[dirBW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
-      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[dirTE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
-      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[dirTW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
-      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[dirBE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
-      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[dirBS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
-      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[dirTN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
-      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[dirTS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
-      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[dirBN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
-      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[dirBSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
-      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[dirTNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
-      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[dirTSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
-      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[dirBNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
-      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[dirBNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
-      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[dirTSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
-      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[dirTNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
-      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[dirBSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1) (D27.f[W  ])[kw  ]= -feqW27_W  + c2o1 * c2o27  * TempD;
+      q = q_dirW[k];   if (q>=c0o1 && q<=c1o1) (D27.f[E  ])[ke  ]= -feqW27_E  + c2o1 * c2o27  * TempD;
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1) (D27.f[S  ])[ks  ]= -feqW27_S  + c2o1 * c2o27  * TempD;
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1) (D27.f[N  ])[kn  ]= -feqW27_N  + c2o1 * c2o27  * TempD;
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1) (D27.f[B  ])[kb  ]= -feqW27_B  + c2o1 * c2o27  * TempD;
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1) (D27.f[T  ])[kt  ]= -feqW27_T  + c2o1 * c2o27  * TempD;
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SW ])[ksw ]= -feqW27_SW + c2o1 * c1o54  * TempD;
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NE ])[kne ]= -feqW27_NE + c2o1 * c1o54  * TempD;
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[NW ])[knw ]= -feqW27_NW + c2o1 * c1o54  * TempD;
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[SE ])[kse ]= -feqW27_SE + c2o1 * c1o54  * TempD;
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BW ])[kbw ]= -feqW27_BW + c2o1 * c1o54  * TempD;
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TE ])[kte ]= -feqW27_TE + c2o1 * c1o54  * TempD;
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TW ])[ktw ]= -feqW27_TW + c2o1 * c1o54  * TempD;
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BE ])[kbe ]= -feqW27_BE + c2o1 * c1o54  * TempD;
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BS ])[kbs ]= -feqW27_BS + c2o1 * c1o54  * TempD;
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TN ])[ktn ]= -feqW27_TN + c2o1 * c1o54  * TempD;
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1) (D27.f[TS ])[kts ]= -feqW27_TS + c2o1 * c1o54  * TempD;
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1) (D27.f[BN ])[kbn ]= -feqW27_BN + c2o1 * c1o54  * TempD;
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSW])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD;
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNE])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD;
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSW])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD;
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNE])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD;
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BNW])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD;
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TSE])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD;
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[TNW])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD;
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[BSE])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD;
+      //q = q_dirE[k];   if (q>=zero && q<=one) (D27.f[W  ])[kw  ]=(two*feqW27_W  -(f27_E  *(q*omegaD-one)-omegaD*feq27_E  *(q-one))/(omegaD-one)+f27_W  *q)/(q+one);
+      //q = q_dirW[k];   if (q>=zero && q<=one) (D27.f[E  ])[ke  ]=(two*feqW27_E  -(f27_W  *(q*omegaD-one)-omegaD*feq27_W  *(q-one))/(omegaD-one)+f27_E  *q)/(q+one);
+      //q = q_dirN[k];   if (q>=zero && q<=one) (D27.f[S  ])[ks  ]=(two*feqW27_S  -(f27_N  *(q*omegaD-one)-omegaD*feq27_N  *(q-one))/(omegaD-one)+f27_S  *q)/(q+one);
+      //q = q_dirS[k];   if (q>=zero && q<=one) (D27.f[N  ])[kn  ]=(two*feqW27_N  -(f27_S  *(q*omegaD-one)-omegaD*feq27_S  *(q-one))/(omegaD-one)+f27_N  *q)/(q+one);
+      //q = q_dirT[k];   if (q>=zero && q<=one) (D27.f[B  ])[kb  ]=(two*feqW27_B  -(f27_T  *(q*omegaD-one)-omegaD*feq27_T  *(q-one))/(omegaD-one)+f27_B  *q)/(q+one);
+      //q = q_dirB[k];   if (q>=zero && q<=one) (D27.f[T  ])[kt  ]=(two*feqW27_T  -(f27_B  *(q*omegaD-one)-omegaD*feq27_B  *(q-one))/(omegaD-one)+f27_T  *q)/(q+one);
+      //q = q_dirNE[k];  if (q>=zero && q<=one) (D27.f[SW ])[ksw ]=(two*feqW27_SW -(f27_NE *(q*omegaD-one)-omegaD*feq27_NE *(q-one))/(omegaD-one)+f27_SW *q)/(q+one);
+      //q = q_dirSW[k];  if (q>=zero && q<=one) (D27.f[NE ])[kne ]=(two*feqW27_NE -(f27_SW *(q*omegaD-one)-omegaD*feq27_SW *(q-one))/(omegaD-one)+f27_NE *q)/(q+one);
+      //q = q_dirSE[k];  if (q>=zero && q<=one) (D27.f[NW ])[knw ]=(two*feqW27_NW -(f27_SE *(q*omegaD-one)-omegaD*feq27_SE *(q-one))/(omegaD-one)+f27_NW *q)/(q+one);
+      //q = q_dirNW[k];  if (q>=zero && q<=one) (D27.f[SE ])[kse ]=(two*feqW27_SE -(f27_NW *(q*omegaD-one)-omegaD*feq27_NW *(q-one))/(omegaD-one)+f27_SE *q)/(q+one);
+      //q = q_dirTE[k];  if (q>=zero && q<=one) (D27.f[BW ])[kbw ]=(two*feqW27_BW -(f27_TE *(q*omegaD-one)-omegaD*feq27_TE *(q-one))/(omegaD-one)+f27_BW *q)/(q+one);
+      //q = q_dirBW[k];  if (q>=zero && q<=one) (D27.f[TE ])[kte ]=(two*feqW27_TE -(f27_BW *(q*omegaD-one)-omegaD*feq27_BW *(q-one))/(omegaD-one)+f27_TE *q)/(q+one);
+      //q = q_dirBE[k];  if (q>=zero && q<=one) (D27.f[TW ])[ktw ]=(two*feqW27_TW -(f27_BE *(q*omegaD-one)-omegaD*feq27_BE *(q-one))/(omegaD-one)+f27_TW *q)/(q+one);
+      //q = q_dirTW[k];  if (q>=zero && q<=one) (D27.f[BE ])[kbe ]=(two*feqW27_BE -(f27_TW *(q*omegaD-one)-omegaD*feq27_TW *(q-one))/(omegaD-one)+f27_BE *q)/(q+one);
+      //q = q_dirTN[k];  if (q>=zero && q<=one) (D27.f[BS ])[kbs ]=(two*feqW27_BS -(f27_TN *(q*omegaD-one)-omegaD*feq27_TN *(q-one))/(omegaD-one)+f27_BS *q)/(q+one);
+      //q = q_dirBS[k];  if (q>=zero && q<=one) (D27.f[TN ])[ktn ]=(two*feqW27_TN -(f27_BS *(q*omegaD-one)-omegaD*feq27_BS *(q-one))/(omegaD-one)+f27_TN *q)/(q+one);
+      //q = q_dirBN[k];  if (q>=zero && q<=one) (D27.f[TS ])[kts ]=(two*feqW27_TS -(f27_BN *(q*omegaD-one)-omegaD*feq27_BN *(q-one))/(omegaD-one)+f27_TS *q)/(q+one);
+      //q = q_dirTS[k];  if (q>=zero && q<=one) (D27.f[BN ])[kbn ]=(two*feqW27_BN -(f27_TS *(q*omegaD-one)-omegaD*feq27_TS *(q-one))/(omegaD-one)+f27_BN *q)/(q+one);
+      //q = q_dirTNE[k]; if (q>=zero && q<=one) (D27.f[BSW])[kbsw]=(two*feqW27_BSW-(f27_TNE*(q*omegaD-one)-omegaD*feq27_TNE*(q-one))/(omegaD-one)+f27_BSW*q)/(q+one);
+      //q = q_dirBSW[k]; if (q>=zero && q<=one) (D27.f[TNE])[ktne]=(two*feqW27_TNE-(f27_BSW*(q*omegaD-one)-omegaD*feq27_BSW*(q-one))/(omegaD-one)+f27_TNE*q)/(q+one);
+      //q = q_dirBNE[k]; if (q>=zero && q<=one) (D27.f[TSW])[ktsw]=(two*feqW27_TSW-(f27_BNE*(q*omegaD-one)-omegaD*feq27_BNE*(q-one))/(omegaD-one)+f27_TSW*q)/(q+one);
+      //q = q_dirTSW[k]; if (q>=zero && q<=one) (D27.f[BNE])[kbne]=(two*feqW27_BNE-(f27_TSW*(q*omegaD-one)-omegaD*feq27_TSW*(q-one))/(omegaD-one)+f27_BNE*q)/(q+one);
+      //q = q_dirTSE[k]; if (q>=zero && q<=one) (D27.f[BNW])[kbnw]=(two*feqW27_BNW-(f27_TSE*(q*omegaD-one)-omegaD*feq27_TSE*(q-one))/(omegaD-one)+f27_BNW*q)/(q+one);
+      //q = q_dirBNW[k]; if (q>=zero && q<=one) (D27.f[TSE])[ktse]=(two*feqW27_TSE-(f27_BNW*(q*omegaD-one)-omegaD*feq27_BNW*(q-one))/(omegaD-one)+f27_TSE*q)/(q+one);
+      //q = q_dirBSE[k]; if (q>=zero && q<=one) (D27.f[TNW])[ktnw]=(two*feqW27_TNW-(f27_BSE*(q*omegaD-one)-omegaD*feq27_BSE*(q-one))/(omegaD-one)+f27_TNW*q)/(q+one);
+      //q = q_dirTNW[k]; if (q>=zero && q<=one) (D27.f[BSE])[kbse]=(two*feqW27_BSE-(f27_TNW*(q*omegaD-one)-omegaD*feq27_TNW*(q-one))/(omegaD-one)+f27_BSE*q)/(q+one);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -6790,7 +6736,7 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
     real *distributionsAD,
     int *QindexArray,
     real *Qarrays,
-    uint numberOfQs,
+    uint numberOfBCnodes,
     real omegaDiffusivity,
     uint* neighborX,
     uint* neighborY,
@@ -6801,125 +6747,125 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
     Distributions27 D;
     if (isEvenTimestep)
     {
-        D.f[dirE   ] = &distributions[dirE    * size_Mat];
-        D.f[dirW   ] = &distributions[dirW    * size_Mat];
-        D.f[dirN   ] = &distributions[dirN    * size_Mat];
-        D.f[dirS   ] = &distributions[dirS    * size_Mat];
-        D.f[dirT   ] = &distributions[dirT    * size_Mat];
-        D.f[dirB   ] = &distributions[dirB    * size_Mat];
-        D.f[dirNE  ] = &distributions[dirNE   * size_Mat];
-        D.f[dirSW  ] = &distributions[dirSW   * size_Mat];
-        D.f[dirSE  ] = &distributions[dirSE   * size_Mat];
-        D.f[dirNW  ] = &distributions[dirNW   * size_Mat];
-        D.f[dirTE  ] = &distributions[dirTE   * size_Mat];
-        D.f[dirBW  ] = &distributions[dirBW   * size_Mat];
-        D.f[dirBE  ] = &distributions[dirBE   * size_Mat];
-        D.f[dirTW  ] = &distributions[dirTW   * size_Mat];
-        D.f[dirTN  ] = &distributions[dirTN   * size_Mat];
-        D.f[dirBS  ] = &distributions[dirBS   * size_Mat];
-        D.f[dirBN  ] = &distributions[dirBN   * size_Mat];
-        D.f[dirTS  ] = &distributions[dirTS   * size_Mat];
-        D.f[dirREST] = &distributions[dirREST * size_Mat];
-        D.f[dirTNE ] = &distributions[dirTNE  * size_Mat];
-        D.f[dirTSW ] = &distributions[dirTSW  * size_Mat];
-        D.f[dirTSE ] = &distributions[dirTSE  * size_Mat];
-        D.f[dirTNW ] = &distributions[dirTNW  * size_Mat];
-        D.f[dirBNE ] = &distributions[dirBNE  * size_Mat];
-        D.f[dirBSW ] = &distributions[dirBSW  * size_Mat];
-        D.f[dirBSE ] = &distributions[dirBSE  * size_Mat];
-        D.f[dirBNW ] = &distributions[dirBNW  * size_Mat];
+        D.f[E   ] = &distributions[E    * size_Mat];
+        D.f[W   ] = &distributions[W    * size_Mat];
+        D.f[N   ] = &distributions[N    * size_Mat];
+        D.f[S   ] = &distributions[S    * size_Mat];
+        D.f[T   ] = &distributions[T    * size_Mat];
+        D.f[B   ] = &distributions[B    * size_Mat];
+        D.f[NE  ] = &distributions[NE   * size_Mat];
+        D.f[SW  ] = &distributions[SW   * size_Mat];
+        D.f[SE  ] = &distributions[SE   * size_Mat];
+        D.f[NW  ] = &distributions[NW   * size_Mat];
+        D.f[TE  ] = &distributions[TE   * size_Mat];
+        D.f[BW  ] = &distributions[BW   * size_Mat];
+        D.f[BE  ] = &distributions[BE   * size_Mat];
+        D.f[TW  ] = &distributions[TW   * size_Mat];
+        D.f[TN  ] = &distributions[TN   * size_Mat];
+        D.f[BS  ] = &distributions[BS   * size_Mat];
+        D.f[BN  ] = &distributions[BN   * size_Mat];
+        D.f[TS  ] = &distributions[TS   * size_Mat];
+        D.f[REST] = &distributions[REST * size_Mat];
+        D.f[TNE ] = &distributions[TNE  * size_Mat];
+        D.f[TSW ] = &distributions[TSW  * size_Mat];
+        D.f[TSE ] = &distributions[TSE  * size_Mat];
+        D.f[TNW ] = &distributions[TNW  * size_Mat];
+        D.f[BNE ] = &distributions[BNE  * size_Mat];
+        D.f[BSW ] = &distributions[BSW  * size_Mat];
+        D.f[BSE ] = &distributions[BSE  * size_Mat];
+        D.f[BNW ] = &distributions[BNW  * size_Mat];
     }
     else
     {
-        D.f[dirW   ] = &distributions[dirE    * size_Mat];
-        D.f[dirE   ] = &distributions[dirW    * size_Mat];
-        D.f[dirS   ] = &distributions[dirN    * size_Mat];
-        D.f[dirN   ] = &distributions[dirS    * size_Mat];
-        D.f[dirB   ] = &distributions[dirT    * size_Mat];
-        D.f[dirT   ] = &distributions[dirB    * size_Mat];
-        D.f[dirSW  ] = &distributions[dirNE   * size_Mat];
-        D.f[dirNE  ] = &distributions[dirSW   * size_Mat];
-        D.f[dirNW  ] = &distributions[dirSE   * size_Mat];
-        D.f[dirSE  ] = &distributions[dirNW   * size_Mat];
-        D.f[dirBW  ] = &distributions[dirTE   * size_Mat];
-        D.f[dirTE  ] = &distributions[dirBW   * size_Mat];
-        D.f[dirTW  ] = &distributions[dirBE   * size_Mat];
-        D.f[dirBE  ] = &distributions[dirTW   * size_Mat];
-        D.f[dirBS  ] = &distributions[dirTN   * size_Mat];
-        D.f[dirTN  ] = &distributions[dirBS   * size_Mat];
-        D.f[dirTS  ] = &distributions[dirBN   * size_Mat];
-        D.f[dirBN  ] = &distributions[dirTS   * size_Mat];
-        D.f[dirREST] = &distributions[dirREST * size_Mat];
-        D.f[dirTNE ] = &distributions[dirBSW  * size_Mat];
-        D.f[dirTSW ] = &distributions[dirBNE  * size_Mat];
-        D.f[dirTSE ] = &distributions[dirBNW  * size_Mat];
-        D.f[dirTNW ] = &distributions[dirBSE  * size_Mat];
-        D.f[dirBNE ] = &distributions[dirTSW  * size_Mat];
-        D.f[dirBSW ] = &distributions[dirTNE  * size_Mat];
-        D.f[dirBSE ] = &distributions[dirTNW  * size_Mat];
-        D.f[dirBNW ] = &distributions[dirTSE  * size_Mat];
+        D.f[W   ] = &distributions[E    * size_Mat];
+        D.f[E   ] = &distributions[W    * size_Mat];
+        D.f[S   ] = &distributions[N    * size_Mat];
+        D.f[N   ] = &distributions[S    * size_Mat];
+        D.f[B   ] = &distributions[T    * size_Mat];
+        D.f[T   ] = &distributions[B    * size_Mat];
+        D.f[SW  ] = &distributions[NE   * size_Mat];
+        D.f[NE  ] = &distributions[SW   * size_Mat];
+        D.f[NW  ] = &distributions[SE   * size_Mat];
+        D.f[SE  ] = &distributions[NW   * size_Mat];
+        D.f[BW  ] = &distributions[TE   * size_Mat];
+        D.f[TE  ] = &distributions[BW   * size_Mat];
+        D.f[TW  ] = &distributions[BE   * size_Mat];
+        D.f[BE  ] = &distributions[TW   * size_Mat];
+        D.f[BS  ] = &distributions[TN   * size_Mat];
+        D.f[TN  ] = &distributions[BS   * size_Mat];
+        D.f[TS  ] = &distributions[BN   * size_Mat];
+        D.f[BN  ] = &distributions[TS   * size_Mat];
+        D.f[REST] = &distributions[REST * size_Mat];
+        D.f[TNE ] = &distributions[BSW  * size_Mat];
+        D.f[TSW ] = &distributions[BNE  * size_Mat];
+        D.f[TSE ] = &distributions[BNW  * size_Mat];
+        D.f[TNW ] = &distributions[BSE  * size_Mat];
+        D.f[BNE ] = &distributions[TSW  * size_Mat];
+        D.f[BSW ] = &distributions[TNE  * size_Mat];
+        D.f[BSE ] = &distributions[TNW  * size_Mat];
+        D.f[BNW ] = &distributions[TSE  * size_Mat];
     }
     ////////////////////////////////////////////////////////////////////////////////
     Distributions27 DAD;
     if (isEvenTimestep)
     {
-        DAD.f[dirE   ] = &distributionsAD[dirE    * size_Mat];
-        DAD.f[dirW   ] = &distributionsAD[dirW    * size_Mat];
-        DAD.f[dirN   ] = &distributionsAD[dirN    * size_Mat];
-        DAD.f[dirS   ] = &distributionsAD[dirS    * size_Mat];
-        DAD.f[dirT   ] = &distributionsAD[dirT    * size_Mat];
-        DAD.f[dirB   ] = &distributionsAD[dirB    * size_Mat];
-        DAD.f[dirNE  ] = &distributionsAD[dirNE   * size_Mat];
-        DAD.f[dirSW  ] = &distributionsAD[dirSW   * size_Mat];
-        DAD.f[dirSE  ] = &distributionsAD[dirSE   * size_Mat];
-        DAD.f[dirNW  ] = &distributionsAD[dirNW   * size_Mat];
-        DAD.f[dirTE  ] = &distributionsAD[dirTE   * size_Mat];
-        DAD.f[dirBW  ] = &distributionsAD[dirBW   * size_Mat];
-        DAD.f[dirBE  ] = &distributionsAD[dirBE   * size_Mat];
-        DAD.f[dirTW  ] = &distributionsAD[dirTW   * size_Mat];
-        DAD.f[dirTN  ] = &distributionsAD[dirTN   * size_Mat];
-        DAD.f[dirBS  ] = &distributionsAD[dirBS   * size_Mat];
-        DAD.f[dirBN  ] = &distributionsAD[dirBN   * size_Mat];
-        DAD.f[dirTS  ] = &distributionsAD[dirTS   * size_Mat];
-        DAD.f[dirREST] = &distributionsAD[dirREST * size_Mat];
-        DAD.f[dirTNE ] = &distributionsAD[dirTNE  * size_Mat];
-        DAD.f[dirTSW ] = &distributionsAD[dirTSW  * size_Mat];
-        DAD.f[dirTSE ] = &distributionsAD[dirTSE  * size_Mat];
-        DAD.f[dirTNW ] = &distributionsAD[dirTNW  * size_Mat];
-        DAD.f[dirBNE ] = &distributionsAD[dirBNE  * size_Mat];
-        DAD.f[dirBSW ] = &distributionsAD[dirBSW  * size_Mat];
-        DAD.f[dirBSE ] = &distributionsAD[dirBSE  * size_Mat];
-        DAD.f[dirBNW ] = &distributionsAD[dirBNW  * size_Mat];
+        DAD.f[E   ] = &distributionsAD[E    * size_Mat];
+        DAD.f[W   ] = &distributionsAD[W    * size_Mat];
+        DAD.f[N   ] = &distributionsAD[N    * size_Mat];
+        DAD.f[S   ] = &distributionsAD[S    * size_Mat];
+        DAD.f[T   ] = &distributionsAD[T    * size_Mat];
+        DAD.f[B   ] = &distributionsAD[B    * size_Mat];
+        DAD.f[NE  ] = &distributionsAD[NE   * size_Mat];
+        DAD.f[SW  ] = &distributionsAD[SW   * size_Mat];
+        DAD.f[SE  ] = &distributionsAD[SE   * size_Mat];
+        DAD.f[NW  ] = &distributionsAD[NW   * size_Mat];
+        DAD.f[TE  ] = &distributionsAD[TE   * size_Mat];
+        DAD.f[BW  ] = &distributionsAD[BW   * size_Mat];
+        DAD.f[BE  ] = &distributionsAD[BE   * size_Mat];
+        DAD.f[TW  ] = &distributionsAD[TW   * size_Mat];
+        DAD.f[TN  ] = &distributionsAD[TN   * size_Mat];
+        DAD.f[BS  ] = &distributionsAD[BS   * size_Mat];
+        DAD.f[BN  ] = &distributionsAD[BN   * size_Mat];
+        DAD.f[TS  ] = &distributionsAD[TS   * size_Mat];
+        DAD.f[REST] = &distributionsAD[REST * size_Mat];
+        DAD.f[TNE ] = &distributionsAD[TNE  * size_Mat];
+        DAD.f[TSW ] = &distributionsAD[TSW  * size_Mat];
+        DAD.f[TSE ] = &distributionsAD[TSE  * size_Mat];
+        DAD.f[TNW ] = &distributionsAD[TNW  * size_Mat];
+        DAD.f[BNE ] = &distributionsAD[BNE  * size_Mat];
+        DAD.f[BSW ] = &distributionsAD[BSW  * size_Mat];
+        DAD.f[BSE ] = &distributionsAD[BSE  * size_Mat];
+        DAD.f[BNW ] = &distributionsAD[BNW  * size_Mat];
     }
     else
     {
-        DAD.f[dirW   ] = &distributionsAD[dirE    * size_Mat];
-        DAD.f[dirE   ] = &distributionsAD[dirW    * size_Mat];
-        DAD.f[dirS   ] = &distributionsAD[dirN    * size_Mat];
-        DAD.f[dirN   ] = &distributionsAD[dirS    * size_Mat];
-        DAD.f[dirB   ] = &distributionsAD[dirT    * size_Mat];
-        DAD.f[dirT   ] = &distributionsAD[dirB    * size_Mat];
-        DAD.f[dirSW  ] = &distributionsAD[dirNE   * size_Mat];
-        DAD.f[dirNE  ] = &distributionsAD[dirSW   * size_Mat];
-        DAD.f[dirNW  ] = &distributionsAD[dirSE   * size_Mat];
-        DAD.f[dirSE  ] = &distributionsAD[dirNW   * size_Mat];
-        DAD.f[dirBW  ] = &distributionsAD[dirTE   * size_Mat];
-        DAD.f[dirTE  ] = &distributionsAD[dirBW   * size_Mat];
-        DAD.f[dirTW  ] = &distributionsAD[dirBE   * size_Mat];
-        DAD.f[dirBE  ] = &distributionsAD[dirTW   * size_Mat];
-        DAD.f[dirBS  ] = &distributionsAD[dirTN   * size_Mat];
-        DAD.f[dirTN  ] = &distributionsAD[dirBS   * size_Mat];
-        DAD.f[dirTS  ] = &distributionsAD[dirBN   * size_Mat];
-        DAD.f[dirBN  ] = &distributionsAD[dirTS   * size_Mat];
-        DAD.f[dirREST] = &distributionsAD[dirREST * size_Mat];
-        DAD.f[dirTNE ] = &distributionsAD[dirBSW  * size_Mat];
-        DAD.f[dirTSW ] = &distributionsAD[dirBNE  * size_Mat];
-        DAD.f[dirTSE ] = &distributionsAD[dirBNW  * size_Mat];
-        DAD.f[dirTNW ] = &distributionsAD[dirBSE  * size_Mat];
-        DAD.f[dirBNE ] = &distributionsAD[dirTSW  * size_Mat];
-        DAD.f[dirBSW ] = &distributionsAD[dirTNE  * size_Mat];
-        DAD.f[dirBSE ] = &distributionsAD[dirTNW  * size_Mat];
-        DAD.f[dirBNW ] = &distributionsAD[dirTSE  * size_Mat];
+        DAD.f[W   ] = &distributionsAD[E    * size_Mat];
+        DAD.f[E   ] = &distributionsAD[W    * size_Mat];
+        DAD.f[S   ] = &distributionsAD[N    * size_Mat];
+        DAD.f[N   ] = &distributionsAD[S    * size_Mat];
+        DAD.f[B   ] = &distributionsAD[T    * size_Mat];
+        DAD.f[T   ] = &distributionsAD[B    * size_Mat];
+        DAD.f[SW  ] = &distributionsAD[NE   * size_Mat];
+        DAD.f[NE  ] = &distributionsAD[SW   * size_Mat];
+        DAD.f[NW  ] = &distributionsAD[SE   * size_Mat];
+        DAD.f[SE  ] = &distributionsAD[NW   * size_Mat];
+        DAD.f[BW  ] = &distributionsAD[TE   * size_Mat];
+        DAD.f[TE  ] = &distributionsAD[BW   * size_Mat];
+        DAD.f[TW  ] = &distributionsAD[BE   * size_Mat];
+        DAD.f[BE  ] = &distributionsAD[TW   * size_Mat];
+        DAD.f[BS  ] = &distributionsAD[TN   * size_Mat];
+        DAD.f[TN  ] = &distributionsAD[BS   * size_Mat];
+        DAD.f[TS  ] = &distributionsAD[BN   * size_Mat];
+        DAD.f[BN  ] = &distributionsAD[TS   * size_Mat];
+        DAD.f[REST] = &distributionsAD[REST * size_Mat];
+        DAD.f[TNE ] = &distributionsAD[BSW  * size_Mat];
+        DAD.f[TSW ] = &distributionsAD[BNE  * size_Mat];
+        DAD.f[TSE ] = &distributionsAD[BNW  * size_Mat];
+        DAD.f[TNW ] = &distributionsAD[BSE  * size_Mat];
+        DAD.f[BNE ] = &distributionsAD[TSW  * size_Mat];
+        DAD.f[BSW ] = &distributionsAD[TNE  * size_Mat];
+        DAD.f[BSE ] = &distributionsAD[TNW  * size_Mat];
+        DAD.f[BNW ] = &distributionsAD[TSE  * size_Mat];
     }
     ////////////////////////////////////////////////////////////////////////////////
     const unsigned  x = threadIdx.x;  // Globaler x-Index
@@ -6932,7 +6878,7 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
     const unsigned k = nx * (ny * z + y) + x;
     //////////////////////////////////////////////////////////////////////////
 
-    if (k < numberOfQs)
+    if (k < numberOfBCnodes)
     {
         ////////////////////////////////////////////////////////////////////////////////
         real NormX = normalX[k];
@@ -6944,32 +6890,32 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
             * q_dirBE, * q_dirTW, * q_dirTN, * q_dirBS, * q_dirBN, * q_dirTS,
             * q_dirTNE, * q_dirTSW, * q_dirTSE, * q_dirTNW, * q_dirBNE, * q_dirBSW,
             * q_dirBSE, * q_dirBNW;
-        q_dirE   = &Qarrays[dirE   * numberOfQs];
-        q_dirW   = &Qarrays[dirW   * numberOfQs];
-        q_dirN   = &Qarrays[dirN   * numberOfQs];
-        q_dirS   = &Qarrays[dirS   * numberOfQs];
-        q_dirT   = &Qarrays[dirT   * numberOfQs];
-        q_dirB   = &Qarrays[dirB   * numberOfQs];
-        q_dirNE  = &Qarrays[dirNE  * numberOfQs];
-        q_dirSW  = &Qarrays[dirSW  * numberOfQs];
-        q_dirSE  = &Qarrays[dirSE  * numberOfQs];
-        q_dirNW  = &Qarrays[dirNW  * numberOfQs];
-        q_dirTE  = &Qarrays[dirTE  * numberOfQs];
-        q_dirBW  = &Qarrays[dirBW  * numberOfQs];
-        q_dirBE  = &Qarrays[dirBE  * numberOfQs];
-        q_dirTW  = &Qarrays[dirTW  * numberOfQs];
-        q_dirTN  = &Qarrays[dirTN  * numberOfQs];
-        q_dirBS  = &Qarrays[dirBS  * numberOfQs];
-        q_dirBN  = &Qarrays[dirBN  * numberOfQs];
-        q_dirTS  = &Qarrays[dirTS  * numberOfQs];
-        q_dirTNE = &Qarrays[dirTNE * numberOfQs];
-        q_dirTSW = &Qarrays[dirTSW * numberOfQs];
-        q_dirTSE = &Qarrays[dirTSE * numberOfQs];
-        q_dirTNW = &Qarrays[dirTNW * numberOfQs];
-        q_dirBNE = &Qarrays[dirBNE * numberOfQs];
-        q_dirBSW = &Qarrays[dirBSW * numberOfQs];
-        q_dirBSE = &Qarrays[dirBSE * numberOfQs];
-        q_dirBNW = &Qarrays[dirBNW * numberOfQs];
+        q_dirE   = &Qarrays[E   * numberOfBCnodes];
+        q_dirW   = &Qarrays[W   * numberOfBCnodes];
+        q_dirN   = &Qarrays[N   * numberOfBCnodes];
+        q_dirS   = &Qarrays[S   * numberOfBCnodes];
+        q_dirT   = &Qarrays[T   * numberOfBCnodes];
+        q_dirB   = &Qarrays[B   * numberOfBCnodes];
+        q_dirNE  = &Qarrays[NE  * numberOfBCnodes];
+        q_dirSW  = &Qarrays[SW  * numberOfBCnodes];
+        q_dirSE  = &Qarrays[SE  * numberOfBCnodes];
+        q_dirNW  = &Qarrays[NW  * numberOfBCnodes];
+        q_dirTE  = &Qarrays[TE  * numberOfBCnodes];
+        q_dirBW  = &Qarrays[BW  * numberOfBCnodes];
+        q_dirBE  = &Qarrays[BE  * numberOfBCnodes];
+        q_dirTW  = &Qarrays[TW  * numberOfBCnodes];
+        q_dirTN  = &Qarrays[TN  * numberOfBCnodes];
+        q_dirBS  = &Qarrays[BS  * numberOfBCnodes];
+        q_dirBN  = &Qarrays[BN  * numberOfBCnodes];
+        q_dirTS  = &Qarrays[TS  * numberOfBCnodes];
+        q_dirTNE = &Qarrays[TNE * numberOfBCnodes];
+        q_dirTSW = &Qarrays[TSW * numberOfBCnodes];
+        q_dirTSE = &Qarrays[TSE * numberOfBCnodes];
+        q_dirTNW = &Qarrays[TNW * numberOfBCnodes];
+        q_dirBNE = &Qarrays[BNE * numberOfBCnodes];
+        q_dirBSW = &Qarrays[BSW * numberOfBCnodes];
+        q_dirBSE = &Qarrays[BSE * numberOfBCnodes];
+        q_dirBNW = &Qarrays[BNW * numberOfBCnodes];
         ////////////////////////////////////////////////////////////////////////////////
         //index
         unsigned int KQK   = QindexArray[k];
@@ -7004,37 +6950,37 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
         real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE,
             f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-        f_W   = (D.f[dirE])[ke];
-        f_E   = (D.f[dirW])[kw];
-        f_S   = (D.f[dirN])[kn];
-        f_N   = (D.f[dirS])[ks];
-        f_B   = (D.f[dirT])[kt];
-        f_T   = (D.f[dirB])[kb];
-        f_SW  = (D.f[dirNE])[kne];
-        f_NE  = (D.f[dirSW])[ksw];
-        f_NW  = (D.f[dirSE])[kse];
-        f_SE  = (D.f[dirNW])[knw];
-        f_BW  = (D.f[dirTE])[kte];
-        f_TE  = (D.f[dirBW])[kbw];
-        f_TW  = (D.f[dirBE])[kbe];
-        f_BE  = (D.f[dirTW])[ktw];
-        f_BS  = (D.f[dirTN])[ktn];
-        f_TN  = (D.f[dirBS])[kbs];
-        f_TS  = (D.f[dirBN])[kbn];
-        f_BN  = (D.f[dirTS])[kts];
-        f_BSW = (D.f[dirTNE])[ktne];
-        f_BNE = (D.f[dirTSW])[ktsw];
-        f_BNW = (D.f[dirTSE])[ktse];
-        f_BSE = (D.f[dirTNW])[ktnw];
-        f_TSW = (D.f[dirBNE])[kbne];
-        f_TNE = (D.f[dirBSW])[kbsw];
-        f_TNW = (D.f[dirBSE])[kbse];
-        f_TSE = (D.f[dirBNW])[kbnw];
+        f_W   = (D.f[E])[ke];
+        f_E   = (D.f[W])[kw];
+        f_S   = (D.f[N])[kn];
+        f_N   = (D.f[S])[ks];
+        f_B   = (D.f[T])[kt];
+        f_T   = (D.f[B])[kb];
+        f_SW  = (D.f[NE])[kne];
+        f_NE  = (D.f[SW])[ksw];
+        f_NW  = (D.f[SE])[kse];
+        f_SE  = (D.f[NW])[knw];
+        f_BW  = (D.f[TE])[kte];
+        f_TE  = (D.f[BW])[kbw];
+        f_TW  = (D.f[BE])[kbe];
+        f_BE  = (D.f[TW])[ktw];
+        f_BS  = (D.f[TN])[ktn];
+        f_TN  = (D.f[BS])[kbs];
+        f_TS  = (D.f[BN])[kbn];
+        f_BN  = (D.f[TS])[kts];
+        f_BSW = (D.f[TNE])[ktne];
+        f_BNE = (D.f[TSW])[ktsw];
+        f_BNW = (D.f[TSE])[ktse];
+        f_BSE = (D.f[TNW])[ktnw];
+        f_TSW = (D.f[BNE])[kbne];
+        f_TNE = (D.f[BSW])[kbsw];
+        f_TNW = (D.f[BSE])[kbse];
+        f_TSE = (D.f[BNW])[kbnw];
         ////////////////////////////////////////////////////////////////////////////////
         real vx1, vx2, vx3, drho, q;
         drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
             f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW +
-            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirREST])[kzero]);
+            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]);
 
         vx1 = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
             ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) +
@@ -7052,98 +6998,98 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
         real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho);
 
         ////////////////////////////////////////////////////////////////////////////////
-        f_W   = (DAD.f[dirE])[ke];
-        f_E   = (DAD.f[dirW])[kw];
-        f_S   = (DAD.f[dirN])[kn];
-        f_N   = (DAD.f[dirS])[ks];
-        f_B   = (DAD.f[dirT])[kt];
-        f_T   = (DAD.f[dirB])[kb];
-        f_SW  = (DAD.f[dirNE])[kne];
-        f_NE  = (DAD.f[dirSW])[ksw];
-        f_NW  = (DAD.f[dirSE])[kse];
-        f_SE  = (DAD.f[dirNW])[knw];
-        f_BW  = (DAD.f[dirTE])[kte];
-        f_TE  = (DAD.f[dirBW])[kbw];
-        f_TW  = (DAD.f[dirBE])[kbe];
-        f_BE  = (DAD.f[dirTW])[ktw];
-        f_BS  = (DAD.f[dirTN])[ktn];
-        f_TN  = (DAD.f[dirBS])[kbs];
-        f_TS  = (DAD.f[dirBN])[kbn];
-        f_BN  = (DAD.f[dirTS])[kts];
-        f_BSW = (DAD.f[dirTNE])[ktne];
-        f_BNE = (DAD.f[dirTSW])[ktsw];
-        f_BNW = (DAD.f[dirTSE])[ktse];
-        f_BSE = (DAD.f[dirTNW])[ktnw];
-        f_TSW = (DAD.f[dirBNE])[kbne];
-        f_TNE = (DAD.f[dirBSW])[kbsw];
-        f_TNW = (DAD.f[dirBSE])[kbse];
-        f_TSE = (DAD.f[dirBNW])[kbnw];
+        f_W   = (DAD.f[E])[ke];
+        f_E   = (DAD.f[W])[kw];
+        f_S   = (DAD.f[N])[kn];
+        f_N   = (DAD.f[S])[ks];
+        f_B   = (DAD.f[T])[kt];
+        f_T   = (DAD.f[B])[kb];
+        f_SW  = (DAD.f[NE])[kne];
+        f_NE  = (DAD.f[SW])[ksw];
+        f_NW  = (DAD.f[SE])[kse];
+        f_SE  = (DAD.f[NW])[knw];
+        f_BW  = (DAD.f[TE])[kte];
+        f_TE  = (DAD.f[BW])[kbw];
+        f_TW  = (DAD.f[BE])[kbe];
+        f_BE  = (DAD.f[TW])[ktw];
+        f_BS  = (DAD.f[TN])[ktn];
+        f_TN  = (DAD.f[BS])[kbs];
+        f_TS  = (DAD.f[BN])[kbn];
+        f_BN  = (DAD.f[TS])[kts];
+        f_BSW = (DAD.f[TNE])[ktne];
+        f_BNE = (DAD.f[TSW])[ktsw];
+        f_BNW = (DAD.f[TSE])[ktse];
+        f_BSE = (DAD.f[TNW])[ktnw];
+        f_TSW = (DAD.f[BNE])[kbne];
+        f_TNE = (DAD.f[BSW])[kbsw];
+        f_TNW = (DAD.f[BSE])[kbse];
+        f_TSE = (DAD.f[BNW])[kbnw];
         //////////////////////////////////////////////////////////////////////////
         if (!isEvenTimestep)
         {
-            DAD.f[dirE   ] = &distributionsAD[dirE    * size_Mat];
-            DAD.f[dirW   ] = &distributionsAD[dirW    * size_Mat];
-            DAD.f[dirN   ] = &distributionsAD[dirN    * size_Mat];
-            DAD.f[dirS   ] = &distributionsAD[dirS    * size_Mat];
-            DAD.f[dirT   ] = &distributionsAD[dirT    * size_Mat];
-            DAD.f[dirB   ] = &distributionsAD[dirB    * size_Mat];
-            DAD.f[dirNE  ] = &distributionsAD[dirNE   * size_Mat];
-            DAD.f[dirSW  ] = &distributionsAD[dirSW   * size_Mat];
-            DAD.f[dirSE  ] = &distributionsAD[dirSE   * size_Mat];
-            DAD.f[dirNW  ] = &distributionsAD[dirNW   * size_Mat];
-            DAD.f[dirTE  ] = &distributionsAD[dirTE   * size_Mat];
-            DAD.f[dirBW  ] = &distributionsAD[dirBW   * size_Mat];
-            DAD.f[dirBE  ] = &distributionsAD[dirBE   * size_Mat];
-            DAD.f[dirTW  ] = &distributionsAD[dirTW   * size_Mat];
-            DAD.f[dirTN  ] = &distributionsAD[dirTN   * size_Mat];
-            DAD.f[dirBS  ] = &distributionsAD[dirBS   * size_Mat];
-            DAD.f[dirBN  ] = &distributionsAD[dirBN   * size_Mat];
-            DAD.f[dirTS  ] = &distributionsAD[dirTS   * size_Mat];
-            DAD.f[dirREST] = &distributionsAD[dirREST * size_Mat];
-            DAD.f[dirTNE ] = &distributionsAD[dirTNE  * size_Mat];
-            DAD.f[dirTSW ] = &distributionsAD[dirTSW  * size_Mat];
-            DAD.f[dirTSE ] = &distributionsAD[dirTSE  * size_Mat];
-            DAD.f[dirTNW ] = &distributionsAD[dirTNW  * size_Mat];
-            DAD.f[dirBNE ] = &distributionsAD[dirBNE  * size_Mat];
-            DAD.f[dirBSW ] = &distributionsAD[dirBSW  * size_Mat];
-            DAD.f[dirBSE ] = &distributionsAD[dirBSE  * size_Mat];
-            DAD.f[dirBNW ] = &distributionsAD[dirBNW  * size_Mat];
+            DAD.f[E   ] = &distributionsAD[E    * size_Mat];
+            DAD.f[W   ] = &distributionsAD[W    * size_Mat];
+            DAD.f[N   ] = &distributionsAD[N    * size_Mat];
+            DAD.f[S   ] = &distributionsAD[S    * size_Mat];
+            DAD.f[T   ] = &distributionsAD[T    * size_Mat];
+            DAD.f[B   ] = &distributionsAD[B    * size_Mat];
+            DAD.f[NE  ] = &distributionsAD[NE   * size_Mat];
+            DAD.f[SW  ] = &distributionsAD[SW   * size_Mat];
+            DAD.f[SE  ] = &distributionsAD[SE   * size_Mat];
+            DAD.f[NW  ] = &distributionsAD[NW   * size_Mat];
+            DAD.f[TE  ] = &distributionsAD[TE   * size_Mat];
+            DAD.f[BW  ] = &distributionsAD[BW   * size_Mat];
+            DAD.f[BE  ] = &distributionsAD[BE   * size_Mat];
+            DAD.f[TW  ] = &distributionsAD[TW   * size_Mat];
+            DAD.f[TN  ] = &distributionsAD[TN   * size_Mat];
+            DAD.f[BS  ] = &distributionsAD[BS   * size_Mat];
+            DAD.f[BN  ] = &distributionsAD[BN   * size_Mat];
+            DAD.f[TS  ] = &distributionsAD[TS   * size_Mat];
+            DAD.f[REST] = &distributionsAD[REST * size_Mat];
+            DAD.f[TNE ] = &distributionsAD[TNE  * size_Mat];
+            DAD.f[TSW ] = &distributionsAD[TSW  * size_Mat];
+            DAD.f[TSE ] = &distributionsAD[TSE  * size_Mat];
+            DAD.f[TNW ] = &distributionsAD[TNW  * size_Mat];
+            DAD.f[BNE ] = &distributionsAD[BNE  * size_Mat];
+            DAD.f[BSW ] = &distributionsAD[BSW  * size_Mat];
+            DAD.f[BSE ] = &distributionsAD[BSE  * size_Mat];
+            DAD.f[BNW ] = &distributionsAD[BNW  * size_Mat];
         }
         else
         {
-            DAD.f[dirW   ] = &distributionsAD[dirE    * size_Mat];
-            DAD.f[dirE   ] = &distributionsAD[dirW    * size_Mat];
-            DAD.f[dirS   ] = &distributionsAD[dirN    * size_Mat];
-            DAD.f[dirN   ] = &distributionsAD[dirS    * size_Mat];
-            DAD.f[dirB   ] = &distributionsAD[dirT    * size_Mat];
-            DAD.f[dirT   ] = &distributionsAD[dirB    * size_Mat];
-            DAD.f[dirSW  ] = &distributionsAD[dirNE   * size_Mat];
-            DAD.f[dirNE  ] = &distributionsAD[dirSW   * size_Mat];
-            DAD.f[dirNW  ] = &distributionsAD[dirSE   * size_Mat];
-            DAD.f[dirSE  ] = &distributionsAD[dirNW   * size_Mat];
-            DAD.f[dirBW  ] = &distributionsAD[dirTE   * size_Mat];
-            DAD.f[dirTE  ] = &distributionsAD[dirBW   * size_Mat];
-            DAD.f[dirTW  ] = &distributionsAD[dirBE   * size_Mat];
-            DAD.f[dirBE  ] = &distributionsAD[dirTW   * size_Mat];
-            DAD.f[dirBS  ] = &distributionsAD[dirTN   * size_Mat];
-            DAD.f[dirTN  ] = &distributionsAD[dirBS   * size_Mat];
-            DAD.f[dirTS  ] = &distributionsAD[dirBN   * size_Mat];
-            DAD.f[dirBN  ] = &distributionsAD[dirTS   * size_Mat];
-            DAD.f[dirREST] = &distributionsAD[dirREST * size_Mat];
-            DAD.f[dirTNE ] = &distributionsAD[dirBSW  * size_Mat];
-            DAD.f[dirTSW ] = &distributionsAD[dirBNE  * size_Mat];
-            DAD.f[dirTSE ] = &distributionsAD[dirBNW  * size_Mat];
-            DAD.f[dirTNW ] = &distributionsAD[dirBSE  * size_Mat];
-            DAD.f[dirBNE ] = &distributionsAD[dirTSW  * size_Mat];
-            DAD.f[dirBSW ] = &distributionsAD[dirTNE  * size_Mat];
-            DAD.f[dirBSE ] = &distributionsAD[dirTNW  * size_Mat];
-            DAD.f[dirBNW ] = &distributionsAD[dirTSE  * size_Mat];
+            DAD.f[W   ] = &distributionsAD[E    * size_Mat];
+            DAD.f[E   ] = &distributionsAD[W    * size_Mat];
+            DAD.f[S   ] = &distributionsAD[N    * size_Mat];
+            DAD.f[N   ] = &distributionsAD[S    * size_Mat];
+            DAD.f[B   ] = &distributionsAD[T    * size_Mat];
+            DAD.f[T   ] = &distributionsAD[B    * size_Mat];
+            DAD.f[SW  ] = &distributionsAD[NE   * size_Mat];
+            DAD.f[NE  ] = &distributionsAD[SW   * size_Mat];
+            DAD.f[NW  ] = &distributionsAD[SE   * size_Mat];
+            DAD.f[SE  ] = &distributionsAD[NW   * size_Mat];
+            DAD.f[BW  ] = &distributionsAD[TE   * size_Mat];
+            DAD.f[TE  ] = &distributionsAD[BW   * size_Mat];
+            DAD.f[TW  ] = &distributionsAD[BE   * size_Mat];
+            DAD.f[BE  ] = &distributionsAD[TW   * size_Mat];
+            DAD.f[BS  ] = &distributionsAD[TN   * size_Mat];
+            DAD.f[TN  ] = &distributionsAD[BS   * size_Mat];
+            DAD.f[TS  ] = &distributionsAD[BN   * size_Mat];
+            DAD.f[BN  ] = &distributionsAD[TS   * size_Mat];
+            DAD.f[REST] = &distributionsAD[REST * size_Mat];
+            DAD.f[TNE ] = &distributionsAD[BSW  * size_Mat];
+            DAD.f[TSW ] = &distributionsAD[BNE  * size_Mat];
+            DAD.f[TSE ] = &distributionsAD[BNW  * size_Mat];
+            DAD.f[TNW ] = &distributionsAD[BSE  * size_Mat];
+            DAD.f[BNE ] = &distributionsAD[TSW  * size_Mat];
+            DAD.f[BSW ] = &distributionsAD[TNE  * size_Mat];
+            DAD.f[BSE ] = &distributionsAD[TNW  * size_Mat];
+            DAD.f[BNW ] = &distributionsAD[TSE  * size_Mat];
         }
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
         real concentration =
             f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
             f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW +
-            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirREST])[kzero]);
+            f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]);
 
         real jx1 =
             (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
@@ -7171,32 +7117,32 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
         real jTan3 = jx3 - NormJ * NormZ;
 
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        q = q_dirE[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dirW  ])[kw  ] = calcDistributionBC_AD(q, c2o27,   vx1,         cu_sq, f_E,   f_W,   omegaDiffusivity,        jTan1,       concentration); }
-        q = q_dirW[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dirE  ])[ke  ] = calcDistributionBC_AD(q, c2o27,  -vx1,         cu_sq, f_W,   f_E,   omegaDiffusivity,       -jTan1,       concentration); }
-        q = q_dirN[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dirS  ])[ks  ] = calcDistributionBC_AD(q, c2o27,   vx2,         cu_sq, f_N,   f_S,   omegaDiffusivity,        jTan2,       concentration); }
-        q = q_dirS[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dirN  ])[kn  ] = calcDistributionBC_AD(q, c2o27,  -vx2,         cu_sq, f_S,   f_N,   omegaDiffusivity,       -jTan2,       concentration); }
-        q = q_dirT[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dirB  ])[kb  ] = calcDistributionBC_AD(q, c2o27,   vx3,         cu_sq, f_T,   f_B,   omegaDiffusivity,        jTan3,       concentration); }
-        q = q_dirB[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[dirT  ])[kt  ] = calcDistributionBC_AD(q, c2o27,  -vx3,         cu_sq, f_B,   f_T,   omegaDiffusivity,       -jTan3,       concentration); }
-        q = q_dirNE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirSW ])[ksw ] = calcDistributionBC_AD(q, c1o54,   vx1+vx2,     cu_sq, f_NE,  f_SW,  omegaDiffusivity,  jTan1+jTan2,       concentration); }
-        q = q_dirSW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirNE ])[kne ] = calcDistributionBC_AD(q, c1o54,  -vx1-vx2,     cu_sq, f_SW,  f_NE,  omegaDiffusivity, -jTan1-jTan2,       concentration); }
-        q = q_dirSE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirNW ])[knw ] = calcDistributionBC_AD(q, c1o54,   vx1-vx2,     cu_sq, f_SE,  f_NW,  omegaDiffusivity,  jTan1-jTan2,       concentration); }
-        q = q_dirNW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirSE ])[kse ] = calcDistributionBC_AD(q, c1o54,  -vx1+vx2,     cu_sq, f_NW,  f_SE,  omegaDiffusivity, -jTan1+jTan2,       concentration); }
-        q = q_dirTE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBW ])[kbw ] = calcDistributionBC_AD(q, c1o54,   vx1    +vx3, cu_sq, f_TE,  f_BW,  omegaDiffusivity,  jTan1      +jTan3, concentration); }
-        q = q_dirBW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTE ])[kte ] = calcDistributionBC_AD(q, c1o54,  -vx1    -vx3, cu_sq, f_BW,  f_TE,  omegaDiffusivity, -jTan1      -jTan3, concentration); }
-        q = q_dirBE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTW ])[ktw ] = calcDistributionBC_AD(q, c1o54,   vx1    -vx3, cu_sq, f_BE,  f_TW,  omegaDiffusivity,  jTan1      -jTan3, concentration); }
-        q = q_dirTW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBE ])[kbe ] = calcDistributionBC_AD(q, c1o54,  -vx1    +vx3, cu_sq, f_TW,  f_BE,  omegaDiffusivity, -jTan1      +jTan3, concentration); }
-        q = q_dirTN[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBS ])[kbs ] = calcDistributionBC_AD(q, c1o54,       vx2+vx3, cu_sq, f_TN,  f_BS,  omegaDiffusivity,        jTan2+jTan3, concentration); }
-        q = q_dirBS[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTN ])[ktn ] = calcDistributionBC_AD(q, c1o54,      -vx2-vx3, cu_sq, f_BS,  f_TN,  omegaDiffusivity,       -jTan2-jTan3, concentration); }
-        q = q_dirBN[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTS ])[kts ] = calcDistributionBC_AD(q, c1o54,       vx2-vx3, cu_sq, f_BN,  f_TS,  omegaDiffusivity,        jTan2-jTan3, concentration); }
-        q = q_dirTS[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBN ])[kbn ] = calcDistributionBC_AD(q, c1o54,      -vx2+vx3, cu_sq, f_TS,  f_BN,  omegaDiffusivity,       -jTan2+jTan3, concentration); }
-        q = q_dirTNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBSW])[kbsw] = calcDistributionBC_AD(q, c1o216,  vx1+vx2+vx3, cu_sq, f_TNE, f_BSW, omegaDiffusivity,  jTan1+jTan2+jTan3, concentration); }
-        q = q_dirBSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTNE])[ktne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2-vx3, cu_sq, f_BSW, f_TNE, omegaDiffusivity, -jTan1-jTan2-jTan3, concentration); }
-        q = q_dirBNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTSW])[ktsw] = calcDistributionBC_AD(q, c1o216,  vx1+vx2-vx3, cu_sq, f_BNE, f_TSW, omegaDiffusivity,  jTan1+jTan2-jTan3, concentration); }
-        q = q_dirTSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBNE])[kbne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2+vx3, cu_sq, f_TSW, f_BNE, omegaDiffusivity, -jTan1-jTan2+jTan3, concentration); }
-        q = q_dirTSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBNW])[kbnw] = calcDistributionBC_AD(q, c1o216,  vx1-vx2+vx3, cu_sq, f_TSE, f_BNW, omegaDiffusivity,  jTan1-jTan2+jTan3, concentration); }
-        q = q_dirBNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTSE])[ktse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2-vx3, cu_sq, f_BNW, f_TSE, omegaDiffusivity, -jTan1+jTan2-jTan3, concentration); }
-        q = q_dirBSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirTNW])[ktnw] = calcDistributionBC_AD(q, c1o216,  vx1-vx2-vx3, cu_sq, f_BSE, f_TNW, omegaDiffusivity,  jTan1-jTan2-jTan3, concentration); }
-        q = q_dirTNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[dirBSE])[kbse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2+vx3, cu_sq, f_TNW, f_BSE, omegaDiffusivity, -jTan1+jTan2+jTan3, concentration); }
+        q = q_dirE[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[W  ])[kw  ] = calcDistributionBC_AD(q, c2o27,   vx1,         cu_sq, f_E,   f_W,   omegaDiffusivity,        jTan1,       concentration); }
+        q = q_dirW[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[E  ])[ke  ] = calcDistributionBC_AD(q, c2o27,  -vx1,         cu_sq, f_W,   f_E,   omegaDiffusivity,       -jTan1,       concentration); }
+        q = q_dirN[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[S  ])[ks  ] = calcDistributionBC_AD(q, c2o27,   vx2,         cu_sq, f_N,   f_S,   omegaDiffusivity,        jTan2,       concentration); }
+        q = q_dirS[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[N  ])[kn  ] = calcDistributionBC_AD(q, c2o27,  -vx2,         cu_sq, f_S,   f_N,   omegaDiffusivity,       -jTan2,       concentration); }
+        q = q_dirT[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[B  ])[kb  ] = calcDistributionBC_AD(q, c2o27,   vx3,         cu_sq, f_T,   f_B,   omegaDiffusivity,        jTan3,       concentration); }
+        q = q_dirB[k];   if (q >= c0o1 && q <= c1o1) { (DAD.f[T  ])[kt  ] = calcDistributionBC_AD(q, c2o27,  -vx3,         cu_sq, f_B,   f_T,   omegaDiffusivity,       -jTan3,       concentration); }
+        q = q_dirNE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[SW ])[ksw ] = calcDistributionBC_AD(q, c1o54,   vx1+vx2,     cu_sq, f_NE,  f_SW,  omegaDiffusivity,  jTan1+jTan2,       concentration); }
+        q = q_dirSW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[NE ])[kne ] = calcDistributionBC_AD(q, c1o54,  -vx1-vx2,     cu_sq, f_SW,  f_NE,  omegaDiffusivity, -jTan1-jTan2,       concentration); }
+        q = q_dirSE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[NW ])[knw ] = calcDistributionBC_AD(q, c1o54,   vx1-vx2,     cu_sq, f_SE,  f_NW,  omegaDiffusivity,  jTan1-jTan2,       concentration); }
+        q = q_dirNW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[SE ])[kse ] = calcDistributionBC_AD(q, c1o54,  -vx1+vx2,     cu_sq, f_NW,  f_SE,  omegaDiffusivity, -jTan1+jTan2,       concentration); }
+        q = q_dirTE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[BW ])[kbw ] = calcDistributionBC_AD(q, c1o54,   vx1    +vx3, cu_sq, f_TE,  f_BW,  omegaDiffusivity,  jTan1      +jTan3, concentration); }
+        q = q_dirBW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[TE ])[kte ] = calcDistributionBC_AD(q, c1o54,  -vx1    -vx3, cu_sq, f_BW,  f_TE,  omegaDiffusivity, -jTan1      -jTan3, concentration); }
+        q = q_dirBE[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[TW ])[ktw ] = calcDistributionBC_AD(q, c1o54,   vx1    -vx3, cu_sq, f_BE,  f_TW,  omegaDiffusivity,  jTan1      -jTan3, concentration); }
+        q = q_dirTW[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[BE ])[kbe ] = calcDistributionBC_AD(q, c1o54,  -vx1    +vx3, cu_sq, f_TW,  f_BE,  omegaDiffusivity, -jTan1      +jTan3, concentration); }
+        q = q_dirTN[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[BS ])[kbs ] = calcDistributionBC_AD(q, c1o54,       vx2+vx3, cu_sq, f_TN,  f_BS,  omegaDiffusivity,        jTan2+jTan3, concentration); }
+        q = q_dirBS[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[TN ])[ktn ] = calcDistributionBC_AD(q, c1o54,      -vx2-vx3, cu_sq, f_BS,  f_TN,  omegaDiffusivity,       -jTan2-jTan3, concentration); }
+        q = q_dirBN[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[TS ])[kts ] = calcDistributionBC_AD(q, c1o54,       vx2-vx3, cu_sq, f_BN,  f_TS,  omegaDiffusivity,        jTan2-jTan3, concentration); }
+        q = q_dirTS[k];  if (q >= c0o1 && q <= c1o1) { (DAD.f[BN ])[kbn ] = calcDistributionBC_AD(q, c1o54,      -vx2+vx3, cu_sq, f_TS,  f_BN,  omegaDiffusivity,       -jTan2+jTan3, concentration); }
+        q = q_dirTNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[BSW])[kbsw] = calcDistributionBC_AD(q, c1o216,  vx1+vx2+vx3, cu_sq, f_TNE, f_BSW, omegaDiffusivity,  jTan1+jTan2+jTan3, concentration); }
+        q = q_dirBSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[TNE])[ktne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2-vx3, cu_sq, f_BSW, f_TNE, omegaDiffusivity, -jTan1-jTan2-jTan3, concentration); }
+        q = q_dirBNE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[TSW])[ktsw] = calcDistributionBC_AD(q, c1o216,  vx1+vx2-vx3, cu_sq, f_BNE, f_TSW, omegaDiffusivity,  jTan1+jTan2-jTan3, concentration); }
+        q = q_dirTSW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[BNE])[kbne] = calcDistributionBC_AD(q, c1o216, -vx1-vx2+vx3, cu_sq, f_TSW, f_BNE, omegaDiffusivity, -jTan1-jTan2+jTan3, concentration); }
+        q = q_dirTSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[BNW])[kbnw] = calcDistributionBC_AD(q, c1o216,  vx1-vx2+vx3, cu_sq, f_TSE, f_BNW, omegaDiffusivity,  jTan1-jTan2+jTan3, concentration); }
+        q = q_dirBNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[TSE])[ktse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2-vx3, cu_sq, f_BNW, f_TSE, omegaDiffusivity, -jTan1+jTan2-jTan3, concentration); }
+        q = q_dirBSE[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[TNW])[ktnw] = calcDistributionBC_AD(q, c1o216,  vx1-vx2-vx3, cu_sq, f_BSE, f_TNW, omegaDiffusivity,  jTan1-jTan2-jTan3, concentration); }
+        q = q_dirTNW[k]; if (q >= c0o1 && q <= c1o1) { (DAD.f[BSE])[kbse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2+vx3, cu_sq, f_TNW, f_BSE, omegaDiffusivity, -jTan1+jTan2+jTan3, concentration); }
         ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CP27.cu b/src/gpu/VirtualFluids_GPU/GPU/CP27.cu
index 20a33b992050bb9d7816b58cda97f6532d9892e5..9a02f5544b9f7ddb2228e87ca9a35cbd7c332a09 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CP27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/CP27.cu
@@ -1,9 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void CalcCP27(real* DD, 
@@ -19,63 +20,63 @@ extern "C" __global__ void CalcCP27(real* DD,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -123,20 +124,20 @@ extern "C" __global__ void CalcCP27(real* DD,
 		////////////////////////////////////////////////////////////////////////////////
 		double PressCP;
 
-		PressCP  =   (D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                     (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                     (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
-                     (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                     (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                     (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                     (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                     (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                     (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                     (D.f[dirZERO])[kzero]+ 
-                     (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                     (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                     (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                     (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
+		PressCP  =   (D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                     (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                     (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
+                     (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                     (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                     (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                     (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                     (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                     (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                     (D.f[REST])[kzero]+ 
+                     (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                     (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                     (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                     (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw];
 		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		cpPress[k] = PressCP;
 		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu b/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu
index e5569f5c1ac134c1e6cab00432535529f1e0717d..e3755ff2796ff180f0a3ae139f1c450cfcc4296a 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu
@@ -1,10 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
-
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void LBCalc2ndMomentsIncompSP27(  real* kxyFromfcNEQ,
@@ -23,63 +23,63 @@ extern "C" __global__ void LBCalc2ndMomentsIncompSP27(  real* kxyFromfcNEQ,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -125,33 +125,33 @@ extern "C" __global__ void LBCalc2ndMomentsIncompSP27(  real* kxyFromfcNEQ,
       unsigned int kbsw = neighborZ[ksw];
       //////////////////////////////////////////////////////////////////////////
       real        f_E,f_W,f_N,f_S,f_T,f_B,f_NE,f_SW,f_SE,f_NW,f_TE,f_BW,f_BE,f_TW,f_TN,f_BS,f_BN,f_TS,/*f_ZERO,*/f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
-	  f_E    = (D.f[dirE   ])[ke   ];
-	  f_W    = (D.f[dirW   ])[kw   ];
-	  f_N    = (D.f[dirN   ])[kn   ];
-	  f_S    = (D.f[dirS   ])[ks   ];
-	  f_T    = (D.f[dirT   ])[kt   ];
-	  f_B    = (D.f[dirB   ])[kb   ];
-	  f_NE   = (D.f[dirNE  ])[kne  ];
-	  f_SW   = (D.f[dirSW  ])[ksw  ];
-	  f_SE   = (D.f[dirSE  ])[kse  ];
-	  f_NW   = (D.f[dirNW  ])[knw  ];
-	  f_TE   = (D.f[dirTE  ])[kte  ];
-	  f_BW   = (D.f[dirBW  ])[kbw  ];
-	  f_BE   = (D.f[dirBE  ])[kbe  ];
-	  f_TW   = (D.f[dirTW  ])[ktw  ];
-	  f_TN   = (D.f[dirTN  ])[ktn  ];
-	  f_BS   = (D.f[dirBS  ])[kbs  ];
-	  f_BN   = (D.f[dirBN  ])[kbn  ];
-	  f_TS   = (D.f[dirTS  ])[kts  ];
-	  //f_ZERO = (D.f[dirZERO])[kzero];
-	  f_TNE  = (D.f[dirTNE ])[ktne ];
-	  f_TSW  = (D.f[dirTSW ])[ktsw ];
-	  f_TSE  = (D.f[dirTSE ])[ktse ];
-	  f_TNW  = (D.f[dirTNW ])[ktnw ];
-	  f_BNE  = (D.f[dirBNE ])[kbne ];
-	  f_BSW  = (D.f[dirBSW ])[kbsw ];
-	  f_BSE  = (D.f[dirBSE ])[kbse ];
-	  f_BNW  = (D.f[dirBNW ])[kbnw ];
+	  f_E    = (D.f[E   ])[ke   ];
+	  f_W    = (D.f[W   ])[kw   ];
+	  f_N    = (D.f[N   ])[kn   ];
+	  f_S    = (D.f[S   ])[ks   ];
+	  f_T    = (D.f[T   ])[kt   ];
+	  f_B    = (D.f[B   ])[kb   ];
+	  f_NE   = (D.f[NE  ])[kne  ];
+	  f_SW   = (D.f[SW  ])[ksw  ];
+	  f_SE   = (D.f[SE  ])[kse  ];
+	  f_NW   = (D.f[NW  ])[knw  ];
+	  f_TE   = (D.f[TE  ])[kte  ];
+	  f_BW   = (D.f[BW  ])[kbw  ];
+	  f_BE   = (D.f[BE  ])[kbe  ];
+	  f_TW   = (D.f[TW  ])[ktw  ];
+	  f_TN   = (D.f[TN  ])[ktn  ];
+	  f_BS   = (D.f[BS  ])[kbs  ];
+	  f_BN   = (D.f[BN  ])[kbn  ];
+	  f_TS   = (D.f[TS  ])[kts  ];
+	  //f_ZERO = (D.f[REST])[kzero];
+	  f_TNE  = (D.f[TNE ])[ktne ];
+	  f_TSW  = (D.f[TSW ])[ktsw ];
+	  f_TSE  = (D.f[TSE ])[ktse ];
+	  f_TNW  = (D.f[TNW ])[ktnw ];
+	  f_BNE  = (D.f[BNE ])[kbne ];
+	  f_BSW  = (D.f[BSW ])[kbsw ];
+	  f_BSE  = (D.f[BSE ])[kbse ];
+	  f_BNW  = (D.f[BNW ])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
 	  real vx1, vx2, vx3;
       kxyFromfcNEQ[k]       = c0o1;
@@ -222,63 +222,63 @@ extern "C" __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -325,33 +325,33 @@ extern "C" __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ,
       //////////////////////////////////////////////////////////////////////////
       real f_ZERO;
       real        f_E,f_W,f_N,f_S,f_T,f_B,f_NE,f_SW,f_SE,f_NW,f_TE,f_BW,f_BE,f_TW,f_TN,f_BS,f_BN,f_TS,f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
-	  f_E    = (D.f[dirE   ])[ke   ];
-	  f_W    = (D.f[dirW   ])[kw   ];
-	  f_N    = (D.f[dirN   ])[kn   ];
-	  f_S    = (D.f[dirS   ])[ks   ];
-	  f_T    = (D.f[dirT   ])[kt   ];
-	  f_B    = (D.f[dirB   ])[kb   ];
-	  f_NE   = (D.f[dirNE  ])[kne  ];
-	  f_SW   = (D.f[dirSW  ])[ksw  ];
-	  f_SE   = (D.f[dirSE  ])[kse  ];
-	  f_NW   = (D.f[dirNW  ])[knw  ];
-	  f_TE   = (D.f[dirTE  ])[kte  ];
-	  f_BW   = (D.f[dirBW  ])[kbw  ];
-	  f_BE   = (D.f[dirBE  ])[kbe  ];
-	  f_TW   = (D.f[dirTW  ])[ktw  ];
-	  f_TN   = (D.f[dirTN  ])[ktn  ];
-	  f_BS   = (D.f[dirBS  ])[kbs  ];
-	  f_BN   = (D.f[dirBN  ])[kbn  ];
-	  f_TS   = (D.f[dirTS  ])[kts  ];
-	  f_ZERO = (D.f[dirZERO])[kzero];
-	  f_TNE  = (D.f[dirTNE ])[ktne ];
-	  f_TSW  = (D.f[dirTSW ])[ktsw ];
-	  f_TSE  = (D.f[dirTSE ])[ktse ];
-	  f_TNW  = (D.f[dirTNW ])[ktnw ];
-	  f_BNE  = (D.f[dirBNE ])[kbne ];
-	  f_BSW  = (D.f[dirBSW ])[kbsw ];
-	  f_BSE  = (D.f[dirBSE ])[kbse ];
-	  f_BNW  = (D.f[dirBNW ])[kbnw ];
+	  f_E    = (D.f[E   ])[ke   ];
+	  f_W    = (D.f[W   ])[kw   ];
+	  f_N    = (D.f[N   ])[kn   ];
+	  f_S    = (D.f[S   ])[ks   ];
+	  f_T    = (D.f[T   ])[kt   ];
+	  f_B    = (D.f[B   ])[kb   ];
+	  f_NE   = (D.f[NE  ])[kne  ];
+	  f_SW   = (D.f[SW  ])[ksw  ];
+	  f_SE   = (D.f[SE  ])[kse  ];
+	  f_NW   = (D.f[NW  ])[knw  ];
+	  f_TE   = (D.f[TE  ])[kte  ];
+	  f_BW   = (D.f[BW  ])[kbw  ];
+	  f_BE   = (D.f[BE  ])[kbe  ];
+	  f_TW   = (D.f[TW  ])[ktw  ];
+	  f_TN   = (D.f[TN  ])[ktn  ];
+	  f_BS   = (D.f[BS  ])[kbs  ];
+	  f_BN   = (D.f[BN  ])[kbn  ];
+	  f_TS   = (D.f[TS  ])[kts  ];
+	  f_ZERO = (D.f[REST])[kzero];
+	  f_TNE  = (D.f[TNE ])[ktne ];
+	  f_TSW  = (D.f[TSW ])[ktsw ];
+	  f_TSE  = (D.f[TSE ])[ktse ];
+	  f_TNW  = (D.f[TNW ])[ktnw ];
+	  f_BNE  = (D.f[BNE ])[kbne ];
+	  f_BSW  = (D.f[BSW ])[kbsw ];
+	  f_BSE  = (D.f[BSE ])[kbse ];
+	  f_BNW  = (D.f[BNW ])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
 	  real drho;
 	  real vx1, vx2, vx3, rho;
@@ -448,63 +448,63 @@ extern "C" __global__ void LBCalc3rdMomentsIncompSP27(  real* CUMbbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -517,33 +517,33 @@ extern "C" __global__ void LBCalc3rdMomentsIncompSP27(  real* CUMbbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real vvx    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
 						     (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
@@ -882,63 +882,63 @@ extern "C" __global__ void LBCalc3rdMomentsCompSP27(real* CUMbbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -951,33 +951,33 @@ extern "C" __global__ void LBCalc3rdMomentsCompSP27(real* CUMbbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -1323,63 +1323,63 @@ extern "C" __global__ void LBCalcHigherMomentsIncompSP27(   real* CUMcbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -1392,33 +1392,33 @@ extern "C" __global__ void LBCalcHigherMomentsIncompSP27(   real* CUMcbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real vvx    =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + 
 						     (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) +
@@ -1777,63 +1777,63 @@ extern "C" __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -1846,33 +1846,33 @@ extern "C" __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb,
 			unsigned int kbs  = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu b/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu
index c885cbdbdd407b9c73afb663b93b55bbf3a6c0b4..c71f58bdfd69397338959162ee167527ec9d4380 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu
@@ -32,10 +32,11 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void CalcConc27(
@@ -52,7 +53,7 @@ extern "C" __global__ void CalcConc27(
    //! The velocity boundary condition is executed in the following steps
    //!
    ////////////////////////////////////////////////////////////////////////////////
-   //! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
    //!
    const unsigned  x = threadIdx.x;  // global x-index
    const unsigned  y = blockIdx.x;   // global y-index
@@ -75,63 +76,63 @@ extern "C" __global__ void CalcConc27(
       Distributions27 distAD;
       if (isEvenTimestep)
       {
-         distAD.f[dirE   ] = &distributionsAD[dirE   *size_Mat];
-         distAD.f[dirW   ] = &distributionsAD[dirW   *size_Mat];
-         distAD.f[dirN   ] = &distributionsAD[dirN   *size_Mat];
-         distAD.f[dirS   ] = &distributionsAD[dirS   *size_Mat];
-         distAD.f[dirT   ] = &distributionsAD[dirT   *size_Mat];
-         distAD.f[dirB   ] = &distributionsAD[dirB   *size_Mat];
-         distAD.f[dirNE  ] = &distributionsAD[dirNE  *size_Mat];
-         distAD.f[dirSW  ] = &distributionsAD[dirSW  *size_Mat];
-         distAD.f[dirSE  ] = &distributionsAD[dirSE  *size_Mat];
-         distAD.f[dirNW  ] = &distributionsAD[dirNW  *size_Mat];
-         distAD.f[dirTE  ] = &distributionsAD[dirTE  *size_Mat];
-         distAD.f[dirBW  ] = &distributionsAD[dirBW  *size_Mat];
-         distAD.f[dirBE  ] = &distributionsAD[dirBE  *size_Mat];
-         distAD.f[dirTW  ] = &distributionsAD[dirTW  *size_Mat];
-         distAD.f[dirTN  ] = &distributionsAD[dirTN  *size_Mat];
-         distAD.f[dirBS  ] = &distributionsAD[dirBS  *size_Mat];
-         distAD.f[dirBN  ] = &distributionsAD[dirBN  *size_Mat];
-         distAD.f[dirTS  ] = &distributionsAD[dirTS  *size_Mat];
-         distAD.f[dirREST] = &distributionsAD[dirREST*size_Mat];
-         distAD.f[dirTNE ] = &distributionsAD[dirTNE *size_Mat];
-         distAD.f[dirTSW ] = &distributionsAD[dirTSW *size_Mat];
-         distAD.f[dirTSE ] = &distributionsAD[dirTSE *size_Mat];
-         distAD.f[dirTNW ] = &distributionsAD[dirTNW *size_Mat];
-         distAD.f[dirBNE ] = &distributionsAD[dirBNE *size_Mat];
-         distAD.f[dirBSW ] = &distributionsAD[dirBSW *size_Mat];
-         distAD.f[dirBSE ] = &distributionsAD[dirBSE *size_Mat];
-         distAD.f[dirBNW ] = &distributionsAD[dirBNW *size_Mat];
+         distAD.f[E   ] = &distributionsAD[E   *size_Mat];
+         distAD.f[W   ] = &distributionsAD[W   *size_Mat];
+         distAD.f[N   ] = &distributionsAD[N   *size_Mat];
+         distAD.f[S   ] = &distributionsAD[S   *size_Mat];
+         distAD.f[T   ] = &distributionsAD[T   *size_Mat];
+         distAD.f[B   ] = &distributionsAD[B   *size_Mat];
+         distAD.f[NE  ] = &distributionsAD[NE  *size_Mat];
+         distAD.f[SW  ] = &distributionsAD[SW  *size_Mat];
+         distAD.f[SE  ] = &distributionsAD[SE  *size_Mat];
+         distAD.f[NW  ] = &distributionsAD[NW  *size_Mat];
+         distAD.f[TE  ] = &distributionsAD[TE  *size_Mat];
+         distAD.f[BW  ] = &distributionsAD[BW  *size_Mat];
+         distAD.f[BE  ] = &distributionsAD[BE  *size_Mat];
+         distAD.f[TW  ] = &distributionsAD[TW  *size_Mat];
+         distAD.f[TN  ] = &distributionsAD[TN  *size_Mat];
+         distAD.f[BS  ] = &distributionsAD[BS  *size_Mat];
+         distAD.f[BN  ] = &distributionsAD[BN  *size_Mat];
+         distAD.f[TS  ] = &distributionsAD[TS  *size_Mat];
+         distAD.f[REST] = &distributionsAD[REST*size_Mat];
+         distAD.f[TNE ] = &distributionsAD[TNE *size_Mat];
+         distAD.f[TSW ] = &distributionsAD[TSW *size_Mat];
+         distAD.f[TSE ] = &distributionsAD[TSE *size_Mat];
+         distAD.f[TNW ] = &distributionsAD[TNW *size_Mat];
+         distAD.f[BNE ] = &distributionsAD[BNE *size_Mat];
+         distAD.f[BSW ] = &distributionsAD[BSW *size_Mat];
+         distAD.f[BSE ] = &distributionsAD[BSE *size_Mat];
+         distAD.f[BNW ] = &distributionsAD[BNW *size_Mat];
       }
       else
       {
-         distAD.f[dirW   ] = &distributionsAD[dirE   *size_Mat];
-         distAD.f[dirE   ] = &distributionsAD[dirW   *size_Mat];
-         distAD.f[dirS   ] = &distributionsAD[dirN   *size_Mat];
-         distAD.f[dirN   ] = &distributionsAD[dirS   *size_Mat];
-         distAD.f[dirB   ] = &distributionsAD[dirT   *size_Mat];
-         distAD.f[dirT   ] = &distributionsAD[dirB   *size_Mat];
-         distAD.f[dirSW  ] = &distributionsAD[dirNE  *size_Mat];
-         distAD.f[dirNE  ] = &distributionsAD[dirSW  *size_Mat];
-         distAD.f[dirNW  ] = &distributionsAD[dirSE  *size_Mat];
-         distAD.f[dirSE  ] = &distributionsAD[dirNW  *size_Mat];
-         distAD.f[dirBW  ] = &distributionsAD[dirTE  *size_Mat];
-         distAD.f[dirTE  ] = &distributionsAD[dirBW  *size_Mat];
-         distAD.f[dirTW  ] = &distributionsAD[dirBE  *size_Mat];
-         distAD.f[dirBE  ] = &distributionsAD[dirTW  *size_Mat];
-         distAD.f[dirBS  ] = &distributionsAD[dirTN  *size_Mat];
-         distAD.f[dirTN  ] = &distributionsAD[dirBS  *size_Mat];
-         distAD.f[dirTS  ] = &distributionsAD[dirBN  *size_Mat];
-         distAD.f[dirBN  ] = &distributionsAD[dirTS  *size_Mat];
-         distAD.f[dirREST] = &distributionsAD[dirREST*size_Mat];
-         distAD.f[dirTNE ] = &distributionsAD[dirBSW *size_Mat];
-         distAD.f[dirTSW ] = &distributionsAD[dirBNE *size_Mat];
-         distAD.f[dirTSE ] = &distributionsAD[dirBNW *size_Mat];
-         distAD.f[dirTNW ] = &distributionsAD[dirBSE *size_Mat];
-         distAD.f[dirBNE ] = &distributionsAD[dirTSW *size_Mat];
-         distAD.f[dirBSW ] = &distributionsAD[dirTNE *size_Mat];
-         distAD.f[dirBSE ] = &distributionsAD[dirTNW *size_Mat];
-         distAD.f[dirBNW ] = &distributionsAD[dirTSE *size_Mat];
+         distAD.f[W   ] = &distributionsAD[E   *size_Mat];
+         distAD.f[E   ] = &distributionsAD[W   *size_Mat];
+         distAD.f[S   ] = &distributionsAD[N   *size_Mat];
+         distAD.f[N   ] = &distributionsAD[S   *size_Mat];
+         distAD.f[B   ] = &distributionsAD[T   *size_Mat];
+         distAD.f[T   ] = &distributionsAD[B   *size_Mat];
+         distAD.f[SW  ] = &distributionsAD[NE  *size_Mat];
+         distAD.f[NE  ] = &distributionsAD[SW  *size_Mat];
+         distAD.f[NW  ] = &distributionsAD[SE  *size_Mat];
+         distAD.f[SE  ] = &distributionsAD[NW  *size_Mat];
+         distAD.f[BW  ] = &distributionsAD[TE  *size_Mat];
+         distAD.f[TE  ] = &distributionsAD[BW  *size_Mat];
+         distAD.f[TW  ] = &distributionsAD[BE  *size_Mat];
+         distAD.f[BE  ] = &distributionsAD[TW  *size_Mat];
+         distAD.f[BS  ] = &distributionsAD[TN  *size_Mat];
+         distAD.f[TN  ] = &distributionsAD[BS  *size_Mat];
+         distAD.f[TS  ] = &distributionsAD[BN  *size_Mat];
+         distAD.f[BN  ] = &distributionsAD[TS  *size_Mat];
+         distAD.f[REST] = &distributionsAD[REST*size_Mat];
+         distAD.f[TNE ] = &distributionsAD[BSW *size_Mat];
+         distAD.f[TSW ] = &distributionsAD[BNE *size_Mat];
+         distAD.f[TSE ] = &distributionsAD[BNW *size_Mat];
+         distAD.f[TNW ] = &distributionsAD[BSE *size_Mat];
+         distAD.f[BNE ] = &distributionsAD[TSW *size_Mat];
+         distAD.f[BSW ] = &distributionsAD[TNE *size_Mat];
+         distAD.f[BSE ] = &distributionsAD[TNW *size_Mat];
+         distAD.f[BNW ] = &distributionsAD[TSE *size_Mat];
       }
 	  ////////////////////////////////////////////////////////////////////////////////
 	  //! - Set neighbor indices (necessary for indirect addressing)
@@ -165,33 +166,33 @@ extern "C" __global__ void CalcConc27(
 	  ////////////////////////////////////////////////////////////////////////////////
 	  //! - Set local distributions
 	  //!
-	  real mfcbb = (distAD.f[dirE   ])[ke  ];
-	  real mfabb = (distAD.f[dirW   ])[kw  ];
-	  real mfbcb = (distAD.f[dirN   ])[kn  ];
-	  real mfbab = (distAD.f[dirS   ])[ks  ];
-	  real mfbbc = (distAD.f[dirT   ])[kt  ];
-	  real mfbba = (distAD.f[dirB   ])[kb  ];
-	  real mfccb = (distAD.f[dirNE  ])[kne ];
-	  real mfaab = (distAD.f[dirSW  ])[ksw ];
-	  real mfcab = (distAD.f[dirSE  ])[kse ];
-	  real mfacb = (distAD.f[dirNW  ])[knw ];
-	  real mfcbc = (distAD.f[dirTE  ])[kte ];
-	  real mfaba = (distAD.f[dirBW  ])[kbw ];
-	  real mfcba = (distAD.f[dirBE  ])[kbe ];
-	  real mfabc = (distAD.f[dirTW  ])[ktw ];
-	  real mfbcc = (distAD.f[dirTN  ])[ktn ];
-	  real mfbaa = (distAD.f[dirBS  ])[kbs ];
-	  real mfbca = (distAD.f[dirBN  ])[kbn ];
-	  real mfbac = (distAD.f[dirTS  ])[kts ];
-	  real mfbbb = (distAD.f[dirREST])[k   ];
-	  real mfccc = (distAD.f[dirTNE ])[ktne];
-	  real mfaac = (distAD.f[dirTSW ])[ktsw];
-	  real mfcac = (distAD.f[dirTSE ])[ktse];
-	  real mfacc = (distAD.f[dirTNW ])[ktnw];
-	  real mfcca = (distAD.f[dirBNE ])[kbne];
-	  real mfaaa = (distAD.f[dirBSW ])[kbsw];
-	  real mfcaa = (distAD.f[dirBSE ])[kbse];
-	  real mfaca = (distAD.f[dirBNW ])[kbnw];
+	  real mfcbb = (distAD.f[E   ])[ke  ];
+	  real mfabb = (distAD.f[W   ])[kw  ];
+	  real mfbcb = (distAD.f[N   ])[kn  ];
+	  real mfbab = (distAD.f[S   ])[ks  ];
+	  real mfbbc = (distAD.f[T   ])[kt  ];
+	  real mfbba = (distAD.f[B   ])[kb  ];
+	  real mfccb = (distAD.f[NE  ])[kne ];
+	  real mfaab = (distAD.f[SW  ])[ksw ];
+	  real mfcab = (distAD.f[SE  ])[kse ];
+	  real mfacb = (distAD.f[NW  ])[knw ];
+	  real mfcbc = (distAD.f[TE  ])[kte ];
+	  real mfaba = (distAD.f[BW  ])[kbw ];
+	  real mfcba = (distAD.f[BE  ])[kbe ];
+	  real mfabc = (distAD.f[TW  ])[ktw ];
+	  real mfbcc = (distAD.f[TN  ])[ktn ];
+	  real mfbaa = (distAD.f[BS  ])[kbs ];
+	  real mfbca = (distAD.f[BN  ])[kbn ];
+	  real mfbac = (distAD.f[TS  ])[kts ];
+	  real mfbbb = (distAD.f[REST])[k   ];
+	  real mfccc = (distAD.f[TNE ])[ktne];
+	  real mfaac = (distAD.f[TSW ])[ktsw];
+	  real mfcac = (distAD.f[TSE ])[ktse];
+	  real mfacc = (distAD.f[TNW ])[ktnw];
+	  real mfcca = (distAD.f[BNE ])[kbne];
+	  real mfaaa = (distAD.f[BSW ])[kbsw];
+	  real mfcaa = (distAD.f[BSE ])[kbse];
+	  real mfaca = (distAD.f[BNW ])[kbnw];
       //////////////////////////////////////////////////////////////////////////
 	  //! - Calculate concentration using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
 	  //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a>
@@ -326,63 +327,63 @@ extern "C" __global__ void CalcConc7( real* Conc,
 //    Distributions27 D27;
 //    if (isEvenTimestep==true)
 //    {
-//       D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-//       D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-//       D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-//       D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-//       D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-//       D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-//       D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-//       D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-//       D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-//       D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-//       D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-//       D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-//       D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-//       D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-//       D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-//       D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-//       D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-//       D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-//       D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-//       D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-//       D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-//       D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-//       D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-//       D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-//       D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-//       D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-//       D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+//       D27.f[E   ] = &DD27[E   *size_Mat];
+//       D27.f[W   ] = &DD27[W   *size_Mat];
+//       D27.f[N   ] = &DD27[N   *size_Mat];
+//       D27.f[S   ] = &DD27[S   *size_Mat];
+//       D27.f[T   ] = &DD27[T   *size_Mat];
+//       D27.f[B   ] = &DD27[B   *size_Mat];
+//       D27.f[NE  ] = &DD27[NE  *size_Mat];
+//       D27.f[SW  ] = &DD27[SW  *size_Mat];
+//       D27.f[SE  ] = &DD27[SE  *size_Mat];
+//       D27.f[NW  ] = &DD27[NW  *size_Mat];
+//       D27.f[TE  ] = &DD27[TE  *size_Mat];
+//       D27.f[BW  ] = &DD27[BW  *size_Mat];
+//       D27.f[BE  ] = &DD27[BE  *size_Mat];
+//       D27.f[TW  ] = &DD27[TW  *size_Mat];
+//       D27.f[TN  ] = &DD27[TN  *size_Mat];
+//       D27.f[BS  ] = &DD27[BS  *size_Mat];
+//       D27.f[BN  ] = &DD27[BN  *size_Mat];
+//       D27.f[TS  ] = &DD27[TS  *size_Mat];
+//       D27.f[REST] = &DD27[REST*size_Mat];
+//       D27.f[TNE ] = &DD27[TNE *size_Mat];
+//       D27.f[TSW ] = &DD27[TSW *size_Mat];
+//       D27.f[TSE ] = &DD27[TSE *size_Mat];
+//       D27.f[TNW ] = &DD27[TNW *size_Mat];
+//       D27.f[BNE ] = &DD27[BNE *size_Mat];
+//       D27.f[BSW ] = &DD27[BSW *size_Mat];
+//       D27.f[BSE ] = &DD27[BSE *size_Mat];
+//       D27.f[BNW ] = &DD27[BNW *size_Mat];
 //    }
 //    else
 //    {
-//       D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-//       D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-//       D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-//       D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-//       D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-//       D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-//       D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-//       D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-//       D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-//       D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-//       D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-//       D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-//       D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-//       D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-//       D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-//       D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-//       D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-//       D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-//       D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-//       D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-//       D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-//       D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
-//       D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-//       D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-//       D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-//       D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-//       D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
+//       D27.f[W   ] = &DD27[E   *size_Mat];
+//       D27.f[E   ] = &DD27[W   *size_Mat];
+//       D27.f[S   ] = &DD27[N   *size_Mat];
+//       D27.f[N   ] = &DD27[S   *size_Mat];
+//       D27.f[B   ] = &DD27[T   *size_Mat];
+//       D27.f[T   ] = &DD27[B   *size_Mat];
+//       D27.f[SW  ] = &DD27[NE  *size_Mat];
+//       D27.f[NE  ] = &DD27[SW  *size_Mat];
+//       D27.f[NW  ] = &DD27[SE  *size_Mat];
+//       D27.f[SE  ] = &DD27[NW  *size_Mat];
+//       D27.f[BW  ] = &DD27[TE  *size_Mat];
+//       D27.f[TE  ] = &DD27[BW  *size_Mat];
+//       D27.f[TW  ] = &DD27[BE  *size_Mat];
+//       D27.f[BE  ] = &DD27[TW  *size_Mat];
+//       D27.f[BS  ] = &DD27[TN  *size_Mat];
+//       D27.f[TN  ] = &DD27[BS  *size_Mat];
+//       D27.f[TS  ] = &DD27[BN  *size_Mat];
+//       D27.f[BN  ] = &DD27[TS  *size_Mat];
+//       D27.f[REST] = &DD27[REST*size_Mat];
+//       D27.f[BSW ] = &DD27[TNE *size_Mat];
+//       D27.f[BNE ] = &DD27[TSW *size_Mat];
+//       D27.f[BNW ] = &DD27[TSE *size_Mat];
+//       D27.f[BSE ] = &DD27[TNW *size_Mat];
+//       D27.f[TSW ] = &DD27[BNE *size_Mat];
+//       D27.f[TNE ] = &DD27[BSW *size_Mat];
+//       D27.f[TNW ] = &DD27[BSE *size_Mat];
+//       D27.f[TSE ] = &DD27[BNW *size_Mat];
 //    }
 //    ////////////////////////////////////////////////////////////////////////////////
 //    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -431,20 +432,20 @@ extern "C" __global__ void CalcConc7( real* Conc,
 
 //       if(geoD[k] == GEO_FLUID)
 //       {
-//          Conc[k]    =   (D27.f[dirE   ])[ke  ]+ (D27.f[dirW   ])[kw  ]+ 
-//                         (D27.f[dirN   ])[kn  ]+ (D27.f[dirS   ])[ks  ]+
-//                         (D27.f[dirT   ])[kt  ]+ (D27.f[dirB   ])[kb  ]+
-//                         (D27.f[dirNE  ])[kne ]+ (D27.f[dirSW  ])[ksw ]+
-//                         (D27.f[dirSE  ])[kse ]+ (D27.f[dirNW  ])[knw ]+
-//                         (D27.f[dirTE  ])[kte ]+ (D27.f[dirBW  ])[kbw ]+
-//                         (D27.f[dirBE  ])[kbe ]+ (D27.f[dirTW  ])[ktw ]+
-//                         (D27.f[dirTN  ])[ktn ]+ (D27.f[dirBS  ])[kbs ]+
-//                         (D27.f[dirBN  ])[kbn ]+ (D27.f[dirTS  ])[kts ]+
-//                         (D27.f[dirZERO])[kzero]+ 
-//                         (D27.f[dirTNE ])[ktne]+ (D27.f[dirTSW ])[ktsw]+
-//                         (D27.f[dirTSE ])[ktse]+ (D27.f[dirTNW ])[ktnw]+
-//                         (D27.f[dirBNE ])[kbne]+ (D27.f[dirBSW ])[kbsw]+
-//                         (D27.f[dirBSE ])[kbse]+ (D27.f[dirBNW ])[kbnw];
+//          Conc[k]    =   (D27.f[E   ])[ke  ]+ (D27.f[W   ])[kw  ]+ 
+//                         (D27.f[N   ])[kn  ]+ (D27.f[S   ])[ks  ]+
+//                         (D27.f[T   ])[kt  ]+ (D27.f[B   ])[kb  ]+
+//                         (D27.f[NE  ])[kne ]+ (D27.f[SW  ])[ksw ]+
+//                         (D27.f[SE  ])[kse ]+ (D27.f[NW  ])[knw ]+
+//                         (D27.f[TE  ])[kte ]+ (D27.f[BW  ])[kbw ]+
+//                         (D27.f[BE  ])[kbe ]+ (D27.f[TW  ])[ktw ]+
+//                         (D27.f[TN  ])[ktn ]+ (D27.f[BS  ])[kbs ]+
+//                         (D27.f[BN  ])[kbn ]+ (D27.f[TS  ])[kts ]+
+//                         (D27.f[REST])[kzero]+ 
+//                         (D27.f[TNE ])[ktne]+ (D27.f[TSW ])[ktsw]+
+//                         (D27.f[TSE ])[ktse]+ (D27.f[TNW ])[ktnw]+
+//                         (D27.f[BNE ])[kbne]+ (D27.f[BSW ])[kbsw]+
+//                         (D27.f[BSE ])[kbse]+ (D27.f[BNW ])[kbnw];
 //       }
 //    }   
 // }
@@ -587,63 +588,63 @@ extern "C" __global__ void GetPlaneConc27(real* Conc,
    Distributions27 D27;
    if (isEvenTimestep==true)
    {
-      D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+      D27.f[E   ] = &DD27[E   *size_Mat];
+      D27.f[W   ] = &DD27[W   *size_Mat];
+      D27.f[N   ] = &DD27[N   *size_Mat];
+      D27.f[S   ] = &DD27[S   *size_Mat];
+      D27.f[T   ] = &DD27[T   *size_Mat];
+      D27.f[B   ] = &DD27[B   *size_Mat];
+      D27.f[NE  ] = &DD27[NE  *size_Mat];
+      D27.f[SW  ] = &DD27[SW  *size_Mat];
+      D27.f[SE  ] = &DD27[SE  *size_Mat];
+      D27.f[NW  ] = &DD27[NW  *size_Mat];
+      D27.f[TE  ] = &DD27[TE  *size_Mat];
+      D27.f[BW  ] = &DD27[BW  *size_Mat];
+      D27.f[BE  ] = &DD27[BE  *size_Mat];
+      D27.f[TW  ] = &DD27[TW  *size_Mat];
+      D27.f[TN  ] = &DD27[TN  *size_Mat];
+      D27.f[BS  ] = &DD27[BS  *size_Mat];
+      D27.f[BN  ] = &DD27[BN  *size_Mat];
+      D27.f[TS  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[TNE ] = &DD27[TNE *size_Mat];
+      D27.f[TSW ] = &DD27[TSW *size_Mat];
+      D27.f[TSE ] = &DD27[TSE *size_Mat];
+      D27.f[TNW ] = &DD27[TNW *size_Mat];
+      D27.f[BNE ] = &DD27[BNE *size_Mat];
+      D27.f[BSW ] = &DD27[BSW *size_Mat];
+      D27.f[BSE ] = &DD27[BSE *size_Mat];
+      D27.f[BNW ] = &DD27[BNW *size_Mat];
    }
    else
    {
-      D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-      D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-      D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-      D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-      D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-      D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-      D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-      D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-      D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-      D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-      D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-      D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-      D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-      D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-      D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-      D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-      D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-      D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-      D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-      D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-      D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-      D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
-      D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-      D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-      D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-      D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-      D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
+      D27.f[W   ] = &DD27[E   *size_Mat];
+      D27.f[E   ] = &DD27[W   *size_Mat];
+      D27.f[S   ] = &DD27[N   *size_Mat];
+      D27.f[N   ] = &DD27[S   *size_Mat];
+      D27.f[B   ] = &DD27[T   *size_Mat];
+      D27.f[T   ] = &DD27[B   *size_Mat];
+      D27.f[SW  ] = &DD27[NE  *size_Mat];
+      D27.f[NE  ] = &DD27[SW  *size_Mat];
+      D27.f[NW  ] = &DD27[SE  *size_Mat];
+      D27.f[SE  ] = &DD27[NW  *size_Mat];
+      D27.f[BW  ] = &DD27[TE  *size_Mat];
+      D27.f[TE  ] = &DD27[BW  *size_Mat];
+      D27.f[TW  ] = &DD27[BE  *size_Mat];
+      D27.f[BE  ] = &DD27[TW  *size_Mat];
+      D27.f[BS  ] = &DD27[TN  *size_Mat];
+      D27.f[TN  ] = &DD27[BS  *size_Mat];
+      D27.f[TS  ] = &DD27[BN  *size_Mat];
+      D27.f[BN  ] = &DD27[TS  *size_Mat];
+      D27.f[REST] = &DD27[REST*size_Mat];
+      D27.f[BSW ] = &DD27[TNE *size_Mat];
+      D27.f[BNE ] = &DD27[TSW *size_Mat];
+      D27.f[BNW ] = &DD27[TSE *size_Mat];
+      D27.f[BSE ] = &DD27[TNW *size_Mat];
+      D27.f[TSW ] = &DD27[BNE *size_Mat];
+      D27.f[TNE ] = &DD27[BSW *size_Mat];
+      D27.f[TNW ] = &DD27[BSE *size_Mat];
+      D27.f[TSE ] = &DD27[BNW *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -692,20 +693,20 @@ extern "C" __global__ void GetPlaneConc27(real* Conc,
 
       if(geoD[k] == GEO_FLUID)
       {
-         Conc[k]    =   (D27.f[dirE   ])[ke  ]+ (D27.f[dirW   ])[kw  ]+ 
-                        (D27.f[dirN   ])[kn  ]+ (D27.f[dirS   ])[ks  ]+
-                        (D27.f[dirT   ])[kt  ]+ (D27.f[dirB   ])[kb  ]+
-                        (D27.f[dirNE  ])[kne ]+ (D27.f[dirSW  ])[ksw ]+
-                        (D27.f[dirSE  ])[kse ]+ (D27.f[dirNW  ])[knw ]+
-                        (D27.f[dirTE  ])[kte ]+ (D27.f[dirBW  ])[kbw ]+
-                        (D27.f[dirBE  ])[kbe ]+ (D27.f[dirTW  ])[ktw ]+
-                        (D27.f[dirTN  ])[ktn ]+ (D27.f[dirBS  ])[kbs ]+
-                        (D27.f[dirBN  ])[kbn ]+ (D27.f[dirTS  ])[kts ]+
-                        (D27.f[dirZERO])[kzero]+ 
-                        (D27.f[dirTNE ])[ktne]+ (D27.f[dirTSW ])[ktsw]+
-                        (D27.f[dirTSE ])[ktse]+ (D27.f[dirTNW ])[ktnw]+
-                        (D27.f[dirBNE ])[kbne]+ (D27.f[dirBSW ])[kbsw]+
-                        (D27.f[dirBSE ])[kbse]+ (D27.f[dirBNW ])[kbnw];
+         Conc[k]    =   (D27.f[E   ])[ke  ]+ (D27.f[W   ])[kw  ]+ 
+                        (D27.f[N   ])[kn  ]+ (D27.f[S   ])[ks  ]+
+                        (D27.f[T   ])[kt  ]+ (D27.f[B   ])[kb  ]+
+                        (D27.f[NE  ])[kne ]+ (D27.f[SW  ])[ksw ]+
+                        (D27.f[SE  ])[kse ]+ (D27.f[NW  ])[knw ]+
+                        (D27.f[TE  ])[kte ]+ (D27.f[BW  ])[kbw ]+
+                        (D27.f[BE  ])[kbe ]+ (D27.f[TW  ])[ktw ]+
+                        (D27.f[TN  ])[ktn ]+ (D27.f[BS  ])[kbs ]+
+                        (D27.f[BN  ])[kbn ]+ (D27.f[TS  ])[kts ]+
+                        (D27.f[REST])[kzero]+ 
+                        (D27.f[TNE ])[ktne]+ (D27.f[TSW ])[ktsw]+
+                        (D27.f[TSE ])[ktse]+ (D27.f[TNW ])[ktnw]+
+                        (D27.f[BNE ])[kbne]+ (D27.f[BSW ])[kbsw]+
+                        (D27.f[BSE ])[kbse]+ (D27.f[BNW ])[kbnw];
       }
    }   
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu b/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
index 19ffc7082e999aa95566c2a9c7fb70ad8f8789ce..ba114ef1d80eeac869086179aab16428bffa74b4 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu
@@ -7,10 +7,11 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
-#include <lbm/constants/NumericConstants.h>
+#include "lbm/constants/D3Q27.h"
+#include "lbm/constants/NumericConstants.h"
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 #include "lbm/MacroscopicQuantities.h"
 
@@ -85,63 +86,63 @@ extern "C" __global__ void LBCalcMacSP27( real* vxD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -194,66 +195,66 @@ extern "C" __global__ void LBCalcMacSP27( real* vxD,
 
       if(geoD[k] == GEO_FLUID)
       {
-         rhoD[k]    =   (D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
-                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                        (D.f[dirZERO])[kzero]+ 
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
-
-         vxD[k]     =   (D.f[dirE   ])[ke  ]- (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]- (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]- (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]- (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw];
-
-         vyD[k]     =   (D.f[dirN   ])[kn  ]- (D.f[dirS   ])[ks  ]+
-                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]-
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]- (D.f[dirTS  ])[kts ]+
-                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]- 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
-
-         vzD[k]     =   (D.f[dirT   ])[kt  ]- (D.f[dirB   ])[kb  ]+
-                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]-
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]-
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]- 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw];
-
-         pressD[k]  =  ((D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
+         rhoD[k]    =   (D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                        (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                        (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
+                        (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                        (D.f[REST])[kzero]+ 
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw];
+
+         vxD[k]     =   (D.f[E   ])[ke  ]- (D.f[W   ])[kw  ]+ 
+                        (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]- (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]- (D.f[TW  ])[ktw ]+
+                        (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]- (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw];
+
+         vyD[k]     =   (D.f[N   ])[kn  ]- (D.f[S   ])[ks  ]+
+                        (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]-
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]- (D.f[TS  ])[kts ]+
+                        (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]- 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw];
+
+         vzD[k]     =   (D.f[T   ])[kt  ]- (D.f[B   ])[kb  ]+
+                        (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]-
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]-
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]- 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+                        (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw];
+
+         pressD[k]  =  ((D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                        (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                        (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
                         2.f*(
-                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ])+
+                        (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ])+
                         3.f*(
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw])-
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw])-
                         rhoD[k]-(vxD[k] * vxD[k] + vyD[k] * vyD[k] + vzD[k] * vzD[k]) * (c1o1+c0o1*rhoD[k])) * c1o2+rhoD[k]; // times zero for incompressible case   
          //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
 
@@ -345,63 +346,63 @@ extern "C" __global__ void LBCalcMedSP27( real* vxD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -460,70 +461,70 @@ extern "C" __global__ void LBCalcMedSP27( real* vxD,
 
       if(geoD[k] == GEO_FLUID)
       {
-         rhoD[k]    =   (D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
-                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                        (D.f[dirZERO])[kzero]+ 
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw]+
+         rhoD[k]    =   (D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                        (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                        (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
+                        (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                        (D.f[REST])[kzero]+ 
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw]+
                         RHO;
 
-         vxD[k]     =   (D.f[dirE   ])[ke  ]- (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]- (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]- (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]- (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw]+
+         vxD[k]     =   (D.f[E   ])[ke  ]- (D.f[W   ])[kw  ]+ 
+                        (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]- (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]- (D.f[TW  ])[ktw ]+
+                        (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]- (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw]+
                         VX;
 
-         vyD[k]     =   (D.f[dirN   ])[kn  ]- (D.f[dirS   ])[ks  ]+
-                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]-
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]- (D.f[dirTS  ])[kts ]+
-                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]- 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw]+
+         vyD[k]     =   (D.f[N   ])[kn  ]- (D.f[S   ])[ks  ]+
+                        (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]-
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]- (D.f[TS  ])[kts ]+
+                        (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]- 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw]+
                         VY;
 
-         vzD[k]     =   (D.f[dirT   ])[kt  ]- (D.f[dirB   ])[kb  ]+
-                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]-
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]-
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]- 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw]+
+         vzD[k]     =   (D.f[T   ])[kt  ]- (D.f[B   ])[kb  ]+
+                        (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]-
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]-
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]- 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+                        (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw]+
                         VZ;
 
-         pressD[k]  =   ((D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
+         pressD[k]  =   ((D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                        (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                        (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
                         c2o1*(
-                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ])+
+                        (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ])+
                         c3o1*(
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw])-
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw])-
                         rhoD[k]-(vxD[k] * vxD[k] + vyD[k] * vyD[k] + vzD[k] * vzD[k]) * (c1o1+rhoD[k])) * c1o2+rhoD[k]+
                         PRESS;    
          //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
@@ -569,63 +570,63 @@ extern "C" __global__ void LBCalcMedCompSP27( real* vxD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -684,33 +685,33 @@ extern "C" __global__ void LBCalcMedCompSP27( real* vxD,
 
       if(geoD[k] == GEO_FLUID)
       {
-		  real mfcbb = (D.f[dirE])[k];//[ke   ];
-		  real mfabb = (D.f[dirW])[kw];//[kw   ];  
-		  real mfbcb = (D.f[dirN])[k];//[kn   ];
-		  real mfbab = (D.f[dirS])[ks];//[ks   ];  
-		  real mfbbc = (D.f[dirT])[k];//[kt   ];
-		  real mfbba = (D.f[dirB])[kb];//[kb   ];  
-		  real mfccb = (D.f[dirNE])[k];//[kne  ];  
-		  real mfaab = (D.f[dirSW])[ksw];//[ksw  ];
-		  real mfcab = (D.f[dirSE])[ks];//[kse  ]; 
-		  real mfacb = (D.f[dirNW])[kw];//[knw  ]; 
-		  real mfcbc = (D.f[dirTE])[k];//[kte  ];  
-		  real mfaba = (D.f[dirBW])[kbw];//[kbw  ];
-		  real mfcba = (D.f[dirBE])[kb];//[kbe  ]; 
-		  real mfabc = (D.f[dirTW])[kw];//[ktw  ]; 
-		  real mfbcc = (D.f[dirTN])[k];//[ktn  ];  
-		  real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];
-		  real mfbca = (D.f[dirBN])[kb];//[kbn  ]; 
-		  real mfbac = (D.f[dirTS])[ks];//[kts  ]; 
-		  real mfbbb = (D.f[dirZERO])[k];//[kzero];
-		  real mfccc = (D.f[dirTNE])[k];//[ktne ]; 
-		  real mfaac = (D.f[dirTSW])[ksw];//[ktsw ]; 
-		  real mfcac = (D.f[dirTSE])[ks];//[ktse ];
-		  real mfacc = (D.f[dirTNW])[kw];//[ktnw ];
-		  real mfcca = (D.f[dirBNE])[kb];//[kbne ];
-		  real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];
-		  real mfcaa = (D.f[dirBSE])[kbs];//[kbse ]; 
-		  real mfaca = (D.f[dirBNW])[kbw];//[kbnw ]; 
+		  real mfcbb = (D.f[E])[k];//[ke   ];
+		  real mfabb = (D.f[W])[kw];//[kw   ];  
+		  real mfbcb = (D.f[N])[k];//[kn   ];
+		  real mfbab = (D.f[S])[ks];//[ks   ];  
+		  real mfbbc = (D.f[T])[k];//[kt   ];
+		  real mfbba = (D.f[B])[kb];//[kb   ];  
+		  real mfccb = (D.f[NE])[k];//[kne  ];  
+		  real mfaab = (D.f[SW])[ksw];//[ksw  ];
+		  real mfcab = (D.f[SE])[ks];//[kse  ]; 
+		  real mfacb = (D.f[NW])[kw];//[knw  ]; 
+		  real mfcbc = (D.f[TE])[k];//[kte  ];  
+		  real mfaba = (D.f[BW])[kbw];//[kbw  ];
+		  real mfcba = (D.f[BE])[kb];//[kbe  ]; 
+		  real mfabc = (D.f[TW])[kw];//[ktw  ]; 
+		  real mfbcc = (D.f[TN])[k];//[ktn  ];  
+		  real mfbaa = (D.f[BS])[kbs];//[kbs  ];
+		  real mfbca = (D.f[BN])[kb];//[kbn  ]; 
+		  real mfbac = (D.f[TS])[ks];//[kts  ]; 
+		  real mfbbb = (D.f[REST])[k];//[kzero];
+		  real mfccc = (D.f[TNE])[k];//[ktne ]; 
+		  real mfaac = (D.f[TSW])[ksw];//[ktsw ]; 
+		  real mfcac = (D.f[TSE])[ks];//[ktse ];
+		  real mfacc = (D.f[TNW])[kw];//[ktnw ];
+		  real mfcca = (D.f[BNE])[kb];//[kbne ];
+		  real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];
+		  real mfcaa = (D.f[BSE])[kbs];//[kbse ]; 
+		  real mfaca = (D.f[BNW])[kbw];//[kbnw ]; 
 		  ////////////////////////////////////////////////////////////////////////////////////
 		  real drho = 
 			  ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -735,72 +736,72 @@ extern "C" __global__ void LBCalcMedCompSP27( real* vxD,
 			  (mfbbc - mfbba)) / rho) + VZ;
 
 		  //rhoD[k] =
-			 // (D.f[dirE])[ke] + (D.f[dirW])[kw] +
-			 // (D.f[dirN])[kn] + (D.f[dirS])[ks] +
-			 // (D.f[dirT])[kt] + (D.f[dirB])[kb] +
-			 // (D.f[dirNE])[kne] + (D.f[dirSW])[ksw] +
-			 // (D.f[dirSE])[kse] + (D.f[dirNW])[knw] +
-			 // (D.f[dirTE])[kte] + (D.f[dirBW])[kbw] +
-			 // (D.f[dirBE])[kbe] + (D.f[dirTW])[ktw] +
-			 // (D.f[dirTN])[ktn] + (D.f[dirBS])[kbs] +
-			 // (D.f[dirBN])[kbn] + (D.f[dirTS])[kts] +
-			 // (D.f[dirZERO])[kzero] +
-			 // (D.f[dirTNE])[ktne] + (D.f[dirTSW])[ktsw] +
-			 // (D.f[dirTSE])[ktse] + (D.f[dirTNW])[ktnw] +
-			 // (D.f[dirBNE])[kbne] + (D.f[dirBSW])[kbsw] +
-			 // (D.f[dirBSE])[kbse] + (D.f[dirBNW])[kbnw];// +RHO;
+			 // (D.f[E])[ke] + (D.f[W])[kw] +
+			 // (D.f[N])[kn] + (D.f[S])[ks] +
+			 // (D.f[T])[kt] + (D.f[B])[kb] +
+			 // (D.f[NE])[kne] + (D.f[SW])[ksw] +
+			 // (D.f[SE])[kse] + (D.f[NW])[knw] +
+			 // (D.f[TE])[kte] + (D.f[BW])[kbw] +
+			 // (D.f[BE])[kbe] + (D.f[TW])[ktw] +
+			 // (D.f[TN])[ktn] + (D.f[BS])[kbs] +
+			 // (D.f[BN])[kbn] + (D.f[TS])[kts] +
+			 // (D.f[REST])[kzero] +
+			 // (D.f[TNE])[ktne] + (D.f[TSW])[ktsw] +
+			 // (D.f[TSE])[ktse] + (D.f[TNW])[ktnw] +
+			 // (D.f[BNE])[kbne] + (D.f[BSW])[kbsw] +
+			 // (D.f[BSE])[kbse] + (D.f[BNW])[kbnw];// +RHO;
 
     //     vxD[k] =  
-			 //((D.f[dirE  ])[ke  ]- (D.f[dirW   ])[kw  ]+ 
-    //         (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]+
-    //         (D.f[dirSE  ])[kse ]- (D.f[dirNW  ])[knw ]+
-    //         (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]+
-    //         (D.f[dirBE  ])[kbe ]- (D.f[dirTW  ])[ktw ]+
-    //         (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]+ 
-    //         (D.f[dirTSE ])[ktse]- (D.f[dirTNW ])[ktnw]+ 
-    //         (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]+ 
-    //         (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw]) / (one + rhoD[k])+
+			 //((D.f[E  ])[ke  ]- (D.f[W   ])[kw  ]+ 
+    //         (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]+
+    //         (D.f[SE  ])[kse ]- (D.f[NW  ])[knw ]+
+    //         (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]+
+    //         (D.f[BE  ])[kbe ]- (D.f[TW  ])[ktw ]+
+    //         (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]+ 
+    //         (D.f[TSE ])[ktse]- (D.f[TNW ])[ktnw]+ 
+    //         (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]+ 
+    //         (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw]) / (one + rhoD[k])+
     //         VX;
 
     //     vyD[k] =  
-			 //((D.f[dirN  ])[kn  ]- (D.f[dirS   ])[ks  ]+
-    //         (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]-
-    //         (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-    //         (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]+
-    //         (D.f[dirBN  ])[kbn ]- (D.f[dirTS  ])[kts ]+
-    //         (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]- 
-    //         (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-    //         (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-    //         (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw]) / (one + rhoD[k])+
+			 //((D.f[N  ])[kn  ]- (D.f[S   ])[ks  ]+
+    //         (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]-
+    //         (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+    //         (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]+
+    //         (D.f[BN  ])[kbn ]- (D.f[TS  ])[kts ]+
+    //         (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]- 
+    //         (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+    //         (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+    //         (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw]) / (one + rhoD[k])+
     //         VY;
 
     //     vzD[k] =  
-			 //((D.f[dirT  ])[kt  ]- (D.f[dirB   ])[kb  ]+
-    //         (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]-
-    //         (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-    //         (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]-
-    //         (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-    //         (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-    //         (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]- 
-    //         (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-    //         (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw]) / (one + rhoD[k])+
+			 //((D.f[T  ])[kt  ]- (D.f[B   ])[kb  ]+
+    //         (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]-
+    //         (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+    //         (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]-
+    //         (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+    //         (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+    //         (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]- 
+    //         (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+    //         (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw]) / (one + rhoD[k])+
     //         VZ;
 
-         pressD[k]  =  ((D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
+         pressD[k]  =  ((D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                        (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                        (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
                         c2o1*(
-                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ])+
+                        (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ])+
                         c3o1*(
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw])-
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw])-
                         rhoD[k]-(vxD[k] * vxD[k] + vyD[k] * vyD[k] + vzD[k] * vzD[k]) * (c1o1+rhoD[k])) * c1o2+rhoD[k]+
                         PRESS;    
          //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
@@ -849,125 +850,125 @@ extern "C" __global__ void LBCalcMedCompAD27(
 	Distributions27 D;
 	if (isEvenTimestep == true)
 	{
-		D.f[dirE] = &DD[dirE   *size_Mat];
-		D.f[dirW] = &DD[dirW   *size_Mat];
-		D.f[dirN] = &DD[dirN   *size_Mat];
-		D.f[dirS] = &DD[dirS   *size_Mat];
-		D.f[dirT] = &DD[dirT   *size_Mat];
-		D.f[dirB] = &DD[dirB   *size_Mat];
-		D.f[dirNE] = &DD[dirNE  *size_Mat];
-		D.f[dirSW] = &DD[dirSW  *size_Mat];
-		D.f[dirSE] = &DD[dirSE  *size_Mat];
-		D.f[dirNW] = &DD[dirNW  *size_Mat];
-		D.f[dirTE] = &DD[dirTE  *size_Mat];
-		D.f[dirBW] = &DD[dirBW  *size_Mat];
-		D.f[dirBE] = &DD[dirBE  *size_Mat];
-		D.f[dirTW] = &DD[dirTW  *size_Mat];
-		D.f[dirTN] = &DD[dirTN  *size_Mat];
-		D.f[dirBS] = &DD[dirBS  *size_Mat];
-		D.f[dirBN] = &DD[dirBN  *size_Mat];
-		D.f[dirTS] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW] = &DD[dirBNW *size_Mat];
+		D.f[E] = &DD[E   *size_Mat];
+		D.f[W] = &DD[W   *size_Mat];
+		D.f[N] = &DD[N   *size_Mat];
+		D.f[S] = &DD[S   *size_Mat];
+		D.f[T] = &DD[T   *size_Mat];
+		D.f[B] = &DD[B   *size_Mat];
+		D.f[NE] = &DD[NE  *size_Mat];
+		D.f[SW] = &DD[SW  *size_Mat];
+		D.f[SE] = &DD[SE  *size_Mat];
+		D.f[NW] = &DD[NW  *size_Mat];
+		D.f[TE] = &DD[TE  *size_Mat];
+		D.f[BW] = &DD[BW  *size_Mat];
+		D.f[BE] = &DD[BE  *size_Mat];
+		D.f[TW] = &DD[TW  *size_Mat];
+		D.f[TN] = &DD[TN  *size_Mat];
+		D.f[BS] = &DD[BS  *size_Mat];
+		D.f[BN] = &DD[BN  *size_Mat];
+		D.f[TS] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE] = &DD[TNE *size_Mat];
+		D.f[TSW] = &DD[TSW *size_Mat];
+		D.f[TSE] = &DD[TSE *size_Mat];
+		D.f[TNW] = &DD[TNW *size_Mat];
+		D.f[BNE] = &DD[BNE *size_Mat];
+		D.f[BSW] = &DD[BSW *size_Mat];
+		D.f[BSE] = &DD[BSE *size_Mat];
+		D.f[BNW] = &DD[BNW *size_Mat];
 	}
 	else
 	{
-		D.f[dirW] = &DD[dirE   *size_Mat];
-		D.f[dirE] = &DD[dirW   *size_Mat];
-		D.f[dirS] = &DD[dirN   *size_Mat];
-		D.f[dirN] = &DD[dirS   *size_Mat];
-		D.f[dirB] = &DD[dirT   *size_Mat];
-		D.f[dirT] = &DD[dirB   *size_Mat];
-		D.f[dirSW] = &DD[dirNE  *size_Mat];
-		D.f[dirNE] = &DD[dirSW  *size_Mat];
-		D.f[dirNW] = &DD[dirSE  *size_Mat];
-		D.f[dirSE] = &DD[dirNW  *size_Mat];
-		D.f[dirBW] = &DD[dirTE  *size_Mat];
-		D.f[dirTE] = &DD[dirBW  *size_Mat];
-		D.f[dirTW] = &DD[dirBE  *size_Mat];
-		D.f[dirBE] = &DD[dirTW  *size_Mat];
-		D.f[dirBS] = &DD[dirTN  *size_Mat];
-		D.f[dirTN] = &DD[dirBS  *size_Mat];
-		D.f[dirTS] = &DD[dirBN  *size_Mat];
-		D.f[dirBN] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW] = &DD[dirTSE *size_Mat];
+		D.f[W] = &DD[E   *size_Mat];
+		D.f[E] = &DD[W   *size_Mat];
+		D.f[S] = &DD[N   *size_Mat];
+		D.f[N] = &DD[S   *size_Mat];
+		D.f[B] = &DD[T   *size_Mat];
+		D.f[T] = &DD[B   *size_Mat];
+		D.f[SW] = &DD[NE  *size_Mat];
+		D.f[NE] = &DD[SW  *size_Mat];
+		D.f[NW] = &DD[SE  *size_Mat];
+		D.f[SE] = &DD[NW  *size_Mat];
+		D.f[BW] = &DD[TE  *size_Mat];
+		D.f[TE] = &DD[BW  *size_Mat];
+		D.f[TW] = &DD[BE  *size_Mat];
+		D.f[BE] = &DD[TW  *size_Mat];
+		D.f[BS] = &DD[TN  *size_Mat];
+		D.f[TN] = &DD[BS  *size_Mat];
+		D.f[TS] = &DD[BN  *size_Mat];
+		D.f[BN] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE] = &DD[BSW *size_Mat];
+		D.f[TSW] = &DD[BNE *size_Mat];
+		D.f[TSE] = &DD[BNW *size_Mat];
+		D.f[TNW] = &DD[BSE *size_Mat];
+		D.f[BNE] = &DD[TSW *size_Mat];
+		D.f[BSW] = &DD[TNE *size_Mat];
+		D.f[BSE] = &DD[TNW *size_Mat];
+		D.f[BNW] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	Distributions27 Dad;
 	if (isEvenTimestep == true)
 	{
-		Dad.f[dirE]    = &DD_AD[dirE   *size_Mat];
-		Dad.f[dirW]    = &DD_AD[dirW   *size_Mat];
-		Dad.f[dirN]    = &DD_AD[dirN   *size_Mat];
-		Dad.f[dirS]    = &DD_AD[dirS   *size_Mat];
-		Dad.f[dirT]    = &DD_AD[dirT   *size_Mat];
-		Dad.f[dirB]    = &DD_AD[dirB   *size_Mat];
-		Dad.f[dirNE]   = &DD_AD[dirNE  *size_Mat];
-		Dad.f[dirSW]   = &DD_AD[dirSW  *size_Mat];
-		Dad.f[dirSE]   = &DD_AD[dirSE  *size_Mat];
-		Dad.f[dirNW]   = &DD_AD[dirNW  *size_Mat];
-		Dad.f[dirTE]   = &DD_AD[dirTE  *size_Mat];
-		Dad.f[dirBW]   = &DD_AD[dirBW  *size_Mat];
-		Dad.f[dirBE]   = &DD_AD[dirBE  *size_Mat];
-		Dad.f[dirTW]   = &DD_AD[dirTW  *size_Mat];
-		Dad.f[dirTN]   = &DD_AD[dirTN  *size_Mat];
-		Dad.f[dirBS]   = &DD_AD[dirBS  *size_Mat];
-		Dad.f[dirBN]   = &DD_AD[dirBN  *size_Mat];
-		Dad.f[dirTS]   = &DD_AD[dirTS  *size_Mat];
-		Dad.f[dirZERO] = &DD_AD[dirZERO*size_Mat];
-		Dad.f[dirTNE]  = &DD_AD[dirTNE *size_Mat];
-		Dad.f[dirTSW]  = &DD_AD[dirTSW *size_Mat];
-		Dad.f[dirTSE]  = &DD_AD[dirTSE *size_Mat];
-		Dad.f[dirTNW]  = &DD_AD[dirTNW *size_Mat];
-		Dad.f[dirBNE]  = &DD_AD[dirBNE *size_Mat];
-		Dad.f[dirBSW]  = &DD_AD[dirBSW *size_Mat];
-		Dad.f[dirBSE]  = &DD_AD[dirBSE *size_Mat];
-		Dad.f[dirBNW]  = &DD_AD[dirBNW *size_Mat];
+		Dad.f[E]    = &DD_AD[E   *size_Mat];
+		Dad.f[W]    = &DD_AD[W   *size_Mat];
+		Dad.f[N]    = &DD_AD[N   *size_Mat];
+		Dad.f[S]    = &DD_AD[S   *size_Mat];
+		Dad.f[T]    = &DD_AD[T   *size_Mat];
+		Dad.f[B]    = &DD_AD[B   *size_Mat];
+		Dad.f[NE]   = &DD_AD[NE  *size_Mat];
+		Dad.f[SW]   = &DD_AD[SW  *size_Mat];
+		Dad.f[SE]   = &DD_AD[SE  *size_Mat];
+		Dad.f[NW]   = &DD_AD[NW  *size_Mat];
+		Dad.f[TE]   = &DD_AD[TE  *size_Mat];
+		Dad.f[BW]   = &DD_AD[BW  *size_Mat];
+		Dad.f[BE]   = &DD_AD[BE  *size_Mat];
+		Dad.f[TW]   = &DD_AD[TW  *size_Mat];
+		Dad.f[TN]   = &DD_AD[TN  *size_Mat];
+		Dad.f[BS]   = &DD_AD[BS  *size_Mat];
+		Dad.f[BN]   = &DD_AD[BN  *size_Mat];
+		Dad.f[TS]   = &DD_AD[TS  *size_Mat];
+		Dad.f[REST] = &DD_AD[REST*size_Mat];
+		Dad.f[TNE]  = &DD_AD[TNE *size_Mat];
+		Dad.f[TSW]  = &DD_AD[TSW *size_Mat];
+		Dad.f[TSE]  = &DD_AD[TSE *size_Mat];
+		Dad.f[TNW]  = &DD_AD[TNW *size_Mat];
+		Dad.f[BNE]  = &DD_AD[BNE *size_Mat];
+		Dad.f[BSW]  = &DD_AD[BSW *size_Mat];
+		Dad.f[BSE]  = &DD_AD[BSE *size_Mat];
+		Dad.f[BNW]  = &DD_AD[BNW *size_Mat];
 	}						
 	else					
 	{						
-		Dad.f[dirW]    = &DD_AD[dirE   *size_Mat];
-		Dad.f[dirE]    = &DD_AD[dirW   *size_Mat];
-		Dad.f[dirS]    = &DD_AD[dirN   *size_Mat];
-		Dad.f[dirN]    = &DD_AD[dirS   *size_Mat];
-		Dad.f[dirB]    = &DD_AD[dirT   *size_Mat];
-		Dad.f[dirT]    = &DD_AD[dirB   *size_Mat];
-		Dad.f[dirSW]   = &DD_AD[dirNE  *size_Mat];
-		Dad.f[dirNE]   = &DD_AD[dirSW  *size_Mat];
-		Dad.f[dirNW]   = &DD_AD[dirSE  *size_Mat];
-		Dad.f[dirSE]   = &DD_AD[dirNW  *size_Mat];
-		Dad.f[dirBW]   = &DD_AD[dirTE  *size_Mat];
-		Dad.f[dirTE]   = &DD_AD[dirBW  *size_Mat];
-		Dad.f[dirTW]   = &DD_AD[dirBE  *size_Mat];
-		Dad.f[dirBE]   = &DD_AD[dirTW  *size_Mat];
-		Dad.f[dirBS]   = &DD_AD[dirTN  *size_Mat];
-		Dad.f[dirTN]   = &DD_AD[dirBS  *size_Mat];
-		Dad.f[dirTS]   = &DD_AD[dirBN  *size_Mat];
-		Dad.f[dirBN]   = &DD_AD[dirTS  *size_Mat];
-		Dad.f[dirZERO] = &DD_AD[dirZERO*size_Mat];
-		Dad.f[dirTNE]  = &DD_AD[dirBSW *size_Mat];
-		Dad.f[dirTSW]  = &DD_AD[dirBNE *size_Mat];
-		Dad.f[dirTSE]  = &DD_AD[dirBNW *size_Mat];
-		Dad.f[dirTNW]  = &DD_AD[dirBSE *size_Mat];
-		Dad.f[dirBNE]  = &DD_AD[dirTSW *size_Mat];
-		Dad.f[dirBSW]  = &DD_AD[dirTNE *size_Mat];
-		Dad.f[dirBSE]  = &DD_AD[dirTNW *size_Mat];
-		Dad.f[dirBNW]  = &DD_AD[dirTSE *size_Mat];
+		Dad.f[W]    = &DD_AD[E   *size_Mat];
+		Dad.f[E]    = &DD_AD[W   *size_Mat];
+		Dad.f[S]    = &DD_AD[N   *size_Mat];
+		Dad.f[N]    = &DD_AD[S   *size_Mat];
+		Dad.f[B]    = &DD_AD[T   *size_Mat];
+		Dad.f[T]    = &DD_AD[B   *size_Mat];
+		Dad.f[SW]   = &DD_AD[NE  *size_Mat];
+		Dad.f[NE]   = &DD_AD[SW  *size_Mat];
+		Dad.f[NW]   = &DD_AD[SE  *size_Mat];
+		Dad.f[SE]   = &DD_AD[NW  *size_Mat];
+		Dad.f[BW]   = &DD_AD[TE  *size_Mat];
+		Dad.f[TE]   = &DD_AD[BW  *size_Mat];
+		Dad.f[TW]   = &DD_AD[BE  *size_Mat];
+		Dad.f[BE]   = &DD_AD[TW  *size_Mat];
+		Dad.f[BS]   = &DD_AD[TN  *size_Mat];
+		Dad.f[TN]   = &DD_AD[BS  *size_Mat];
+		Dad.f[TS]   = &DD_AD[BN  *size_Mat];
+		Dad.f[BN]   = &DD_AD[TS  *size_Mat];
+		Dad.f[REST] = &DD_AD[REST*size_Mat];
+		Dad.f[TNE]  = &DD_AD[BSW *size_Mat];
+		Dad.f[TSW]  = &DD_AD[BNE *size_Mat];
+		Dad.f[TSE]  = &DD_AD[BNW *size_Mat];
+		Dad.f[TNW]  = &DD_AD[BSE *size_Mat];
+		Dad.f[BNE]  = &DD_AD[TSW *size_Mat];
+		Dad.f[BSW]  = &DD_AD[TNE *size_Mat];
+		Dad.f[BSE]  = &DD_AD[TNW *size_Mat];
+		Dad.f[BNW]  = &DD_AD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1028,33 +1029,33 @@ extern "C" __global__ void LBCalcMedCompAD27(
 
 		if (geoD[k] == GEO_FLUID)
 		{
-			real mfcbb = (D.f[dirE])[k];//[ke   ];
-			real mfabb = (D.f[dirW])[kw];//[kw   ];  
-			real mfbcb = (D.f[dirN])[k];//[kn   ];
-			real mfbab = (D.f[dirS])[ks];//[ks   ];  
-			real mfbbc = (D.f[dirT])[k];//[kt   ];
-			real mfbba = (D.f[dirB])[kb];//[kb   ];  
-			real mfccb = (D.f[dirNE])[k];//[kne  ];  
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ]; 
-			real mfacb = (D.f[dirNW])[kw];//[knw  ]; 
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];  
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ]; 
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ]; 
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];  
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ]; 
-			real mfbac = (D.f[dirTS])[ks];//[kts  ]; 
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];
-			real mfccc = (D.f[dirTNE])[k];//[ktne ]; 
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ]; 
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ]; 
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ]; 
+			real mfcbb = (D.f[E])[k];//[ke   ];
+			real mfabb = (D.f[W])[kw];//[kw   ];  
+			real mfbcb = (D.f[N])[k];//[kn   ];
+			real mfbab = (D.f[S])[ks];//[ks   ];  
+			real mfbbc = (D.f[T])[k];//[kt   ];
+			real mfbba = (D.f[B])[kb];//[kb   ];  
+			real mfccb = (D.f[NE])[k];//[kne  ];  
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];
+			real mfcab = (D.f[SE])[ks];//[kse  ]; 
+			real mfacb = (D.f[NW])[kw];//[knw  ]; 
+			real mfcbc = (D.f[TE])[k];//[kte  ];  
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];
+			real mfcba = (D.f[BE])[kb];//[kbe  ]; 
+			real mfabc = (D.f[TW])[kw];//[ktw  ]; 
+			real mfbcc = (D.f[TN])[k];//[ktn  ];  
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];
+			real mfbca = (D.f[BN])[kb];//[kbn  ]; 
+			real mfbac = (D.f[TS])[ks];//[kts  ]; 
+			real mfbbb = (D.f[REST])[k];//[kzero];
+			real mfccc = (D.f[TNE])[k];//[ktne ]; 
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ]; 
+			real mfcac = (D.f[TSE])[ks];//[ktse ];
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];
+			real mfcca = (D.f[BNE])[kb];//[kbne ];
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ]; 
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ]; 
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho =
 				((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -1081,52 +1082,52 @@ extern "C" __global__ void LBCalcMedCompAD27(
 					(mfbbc - mfbba)) / rho) + VZ;
 
 			pressD[k] = 
-				((D.f[dirE])[ke] + (D.f[dirW])[kw] +
-				 (D.f[dirN])[kn] + (D.f[dirS])[ks] +
-				 (D.f[dirT])[kt] + (D.f[dirB])[kb] +
+				((D.f[E])[ke] + (D.f[W])[kw] +
+				 (D.f[N])[kn] + (D.f[S])[ks] +
+				 (D.f[T])[kt] + (D.f[B])[kb] +
 				 c2o1*(
-				 (D.f[dirNE])[kne] + (D.f[dirSW])[ksw] +
-				 (D.f[dirSE])[kse] + (D.f[dirNW])[knw] +
-				 (D.f[dirTE])[kte] + (D.f[dirBW])[kbw] +
-				 (D.f[dirBE])[kbe] + (D.f[dirTW])[ktw] +
-				 (D.f[dirTN])[ktn] + (D.f[dirBS])[kbs] +
-				 (D.f[dirBN])[kbn] + (D.f[dirTS])[kts]) +
+				 (D.f[NE])[kne] + (D.f[SW])[ksw] +
+				 (D.f[SE])[kse] + (D.f[NW])[knw] +
+				 (D.f[TE])[kte] + (D.f[BW])[kbw] +
+				 (D.f[BE])[kbe] + (D.f[TW])[ktw] +
+				 (D.f[TN])[ktn] + (D.f[BS])[kbs] +
+				 (D.f[BN])[kbn] + (D.f[TS])[kts]) +
 				 c3o1*(
-				 (D.f[dirTNE])[ktne] + (D.f[dirTSW])[ktsw] +
-				 (D.f[dirTSE])[ktse] + (D.f[dirTNW])[ktnw] +
-				 (D.f[dirBNE])[kbne] + (D.f[dirBSW])[kbsw] +
-				 (D.f[dirBSE])[kbse] + (D.f[dirBNW])[kbnw]) -
+				 (D.f[TNE])[ktne] + (D.f[TSW])[ktsw] +
+				 (D.f[TSE])[ktse] + (D.f[TNW])[ktnw] +
+				 (D.f[BNE])[kbne] + (D.f[BSW])[kbsw] +
+				 (D.f[BSE])[kbse] + (D.f[BNW])[kbnw]) -
 				 rhoD[k] - (vxD[k] * vxD[k] + vyD[k] * vyD[k] + vzD[k] * vzD[k]) * (c1o1 + rhoD[k])) * c1o2 + rhoD[k] +
 				 PRESS;
 				 //achtung op hart gesetzt Annahme op = 1 ;                                                    ^^^^(1.0/op-0.5)=0.5
 			//////////////////////////////////////////////////////////////////////////
-			mfcbb = (Dad.f[dirE   ])[k   ];
-			mfabb = (Dad.f[dirW   ])[kw  ];
-			mfbcb = (Dad.f[dirN   ])[k   ];
-			mfbab = (Dad.f[dirS   ])[ks  ];
-			mfbbc = (Dad.f[dirT   ])[k   ];
-			mfbba = (Dad.f[dirB   ])[kb  ];
-			mfccb = (Dad.f[dirNE  ])[k   ];
-			mfaab = (Dad.f[dirSW  ])[ksw ];
-			mfcab = (Dad.f[dirSE  ])[ks  ];
-			mfacb = (Dad.f[dirNW  ])[kw  ];
-			mfcbc = (Dad.f[dirTE  ])[k   ];
-			mfaba = (Dad.f[dirBW  ])[kbw ];
-			mfcba = (Dad.f[dirBE  ])[kb  ];
-			mfabc = (Dad.f[dirTW  ])[kw  ];
-			mfbcc = (Dad.f[dirTN  ])[k   ];
-			mfbaa = (Dad.f[dirBS  ])[kbs ];
-			mfbca = (Dad.f[dirBN  ])[kb  ];
-			mfbac = (Dad.f[dirTS  ])[ks  ];
-			mfbbb = (Dad.f[dirZERO])[k   ];
-			mfccc = (Dad.f[dirTNE ])[k   ];
-			mfaac = (Dad.f[dirTSW ])[ksw ];
-			mfcac = (Dad.f[dirTSE ])[ks  ];
-			mfacc = (Dad.f[dirTNW ])[kw  ];
-			mfcca = (Dad.f[dirBNE ])[kb  ];
-			mfaaa = (Dad.f[dirBSW ])[kbsw];
-			mfcaa = (Dad.f[dirBSE ])[kbs ];
-			mfaca = (Dad.f[dirBNW ])[kbw ];
+			mfcbb = (Dad.f[E   ])[k   ];
+			mfabb = (Dad.f[W   ])[kw  ];
+			mfbcb = (Dad.f[N   ])[k   ];
+			mfbab = (Dad.f[S   ])[ks  ];
+			mfbbc = (Dad.f[T   ])[k   ];
+			mfbba = (Dad.f[B   ])[kb  ];
+			mfccb = (Dad.f[NE  ])[k   ];
+			mfaab = (Dad.f[SW  ])[ksw ];
+			mfcab = (Dad.f[SE  ])[ks  ];
+			mfacb = (Dad.f[NW  ])[kw  ];
+			mfcbc = (Dad.f[TE  ])[k   ];
+			mfaba = (Dad.f[BW  ])[kbw ];
+			mfcba = (Dad.f[BE  ])[kb  ];
+			mfabc = (Dad.f[TW  ])[kw  ];
+			mfbcc = (Dad.f[TN  ])[k   ];
+			mfbaa = (Dad.f[BS  ])[kbs ];
+			mfbca = (Dad.f[BN  ])[kb  ];
+			mfbac = (Dad.f[TS  ])[ks  ];
+			mfbbb = (Dad.f[REST])[k   ];
+			mfccc = (Dad.f[TNE ])[k   ];
+			mfaac = (Dad.f[TSW ])[ksw ];
+			mfcac = (Dad.f[TSE ])[ks  ];
+			mfacc = (Dad.f[TNW ])[kw  ];
+			mfcca = (Dad.f[BNE ])[kb  ];
+			mfaaa = (Dad.f[BSW ])[kbsw];
+			mfcaa = (Dad.f[BSE ])[kbs ];
+			mfaca = (Dad.f[BNW ])[kbw ];
 			//////////////////////////////////////////////////////////////////////////
 			concD[k] = 
 				((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa)   + (mfaac + mfcca))) +
@@ -1357,63 +1358,63 @@ extern "C" __global__ void LBCalcMeasurePoints( real* vxMP,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1463,50 +1464,50 @@ extern "C" __global__ void LBCalcMeasurePoints( real* vxMP,
 
       if(geoD[kzero] == GEO_FLUID)
       {
-         rhoMP[kMac]=   (D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-                        (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
-                        (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                        (D.f[dirZERO])[kzero]+ 
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
-
-         vxMP[kMac] =   (D.f[dirE   ])[ke  ]- (D.f[dirW   ])[kw  ]+ 
-                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]+
-                        (D.f[dirSE  ])[kse ]- (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]+
-                        (D.f[dirBE  ])[kbe ]- (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]- (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]+ 
-                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw];
-
-         vyMP[kMac] =   (D.f[dirN   ])[kn  ]- (D.f[dirS   ])[ks  ]+
-                        (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]-
-                        (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]+
-                        (D.f[dirBN  ])[kbn ]- (D.f[dirTS  ])[kts ]+
-                        (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]- 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-                        (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
-
-         vzMP[kMac] =   (D.f[dirT   ])[kt  ]- (D.f[dirB   ])[kb  ]+
-                        (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]-
-                        (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-                        (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]-
-                        (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-                        (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-                        (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]- 
-                        (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-                        (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw];
+         rhoMP[kMac]=   (D.f[E   ])[ke  ]+ (D.f[W   ])[kw  ]+ 
+                        (D.f[N   ])[kn  ]+ (D.f[S   ])[ks  ]+
+                        (D.f[T   ])[kt  ]+ (D.f[B   ])[kb  ]+
+                        (D.f[NE  ])[kne ]+ (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]+ (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]+ (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                        (D.f[REST])[kzero]+ 
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]+ (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw];
+
+         vxMP[kMac] =   (D.f[E   ])[ke  ]- (D.f[W   ])[kw  ]+ 
+                        (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]+
+                        (D.f[SE  ])[kse ]- (D.f[NW  ])[knw ]+
+                        (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]+
+                        (D.f[BE  ])[kbe ]- (D.f[TW  ])[ktw ]+
+                        (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]- (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]+ 
+                        (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw];
+
+         vyMP[kMac] =   (D.f[N   ])[kn  ]- (D.f[S   ])[ks  ]+
+                        (D.f[NE  ])[kne ]- (D.f[SW  ])[ksw ]-
+                        (D.f[SE  ])[kse ]+ (D.f[NW  ])[knw ]+
+                        (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]+
+                        (D.f[BN  ])[kbn ]- (D.f[TS  ])[kts ]+
+                        (D.f[TNE ])[ktne]- (D.f[TSW ])[ktsw]- 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]+ 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+                        (D.f[BSE ])[kbse]+ (D.f[BNW ])[kbnw];
+
+         vzMP[kMac] =   (D.f[T   ])[kt  ]- (D.f[B   ])[kb  ]+
+                        (D.f[TE  ])[kte ]- (D.f[BW  ])[kbw ]-
+                        (D.f[BE  ])[kbe ]+ (D.f[TW  ])[ktw ]+
+                        (D.f[TN  ])[ktn ]- (D.f[BS  ])[kbs ]-
+                        (D.f[BN  ])[kbn ]+ (D.f[TS  ])[kts ]+
+                        (D.f[TNE ])[ktne]+ (D.f[TSW ])[ktsw]+ 
+                        (D.f[TSE ])[ktse]+ (D.f[TNW ])[ktnw]- 
+                        (D.f[BNE ])[kbne]- (D.f[BSW ])[kbsw]- 
+                        (D.f[BSE ])[kbse]- (D.f[BNW ])[kbnw];
       }
    }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu b/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu
index 5c3a12551c2cffdd0b75ce283d9ee584a7c4b808..6f4ac6ca5634f280b877cfd86fb7c01ce4870857 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu
@@ -1,9 +1,11 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
 #include "math.h"
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -38,63 +40,63 @@ extern "C" __global__ void LB_Kernel_Cascade_SP_27(     real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -127,33 +129,33 @@ extern "C" __global__ void LB_Kernel_Cascade_SP_27(     real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k  ];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE ])[k  ];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE ])[ks ];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE ])[kb ];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k  ];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE ])[k  ];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE ])[ks ];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE ])[kb ];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//slow
 			//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -729,33 +731,33 @@ extern "C" __global__ void LB_Kernel_Cascade_SP_27(     real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[ dirW   ])[kw  ] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[ dirN   ])[k   ] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[ dirS   ])[ks  ] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[ dirT   ])[k   ] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[ dirB   ])[kb  ] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[ dirNE  ])[k   ] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[ dirSW  ])[ksw ] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[ dirSE  ])[ks  ] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[ dirNW  ])[kw  ] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[ dirTE  ])[k   ] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[ dirBW  ])[kbw ] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[ dirBE  ])[kb  ] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[ dirTW  ])[kw  ] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[ dirTN  ])[k   ] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[ dirBS  ])[kbs ] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[ dirBN  ])[kb  ] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[ dirTS  ])[ks  ] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[ dirZERO])[k   ] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[ dirTNE ])[k   ] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[ dirTSE ])[ks  ] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[ dirBNE ])[kb  ] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[ dirBSE ])[kbs ] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[ dirTNW ])[kw  ] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[ dirTSW ])[ksw ] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[ dirBNW ])[kbw ] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[ dirBSW ])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[ E   ])[k   ] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[ W   ])[kw  ] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[ N   ])[k   ] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[ S   ])[ks  ] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[ T   ])[k   ] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[ B   ])[kb  ] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[ NE  ])[k   ] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[ SW  ])[ksw ] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[ SE  ])[ks  ] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[ NW  ])[kw  ] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[ TE  ])[k   ] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[ BW  ])[kbw ] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[ BE  ])[kb  ] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[ TW  ])[kw  ] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[ TN  ])[k   ] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[ BS  ])[kbs ] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[ BN  ])[kb  ] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[ TS  ])[ks  ] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[ REST])[k   ] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[ TNE ])[k   ] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[ TSE ])[ks  ] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[ BNE ])[kb  ] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[ BSE ])[kbs ] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[ TNW ])[kw  ] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[ TSW ])[ksw ] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[ BNW ])[kbw ] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[ BSW ])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -865,63 +867,63 @@ extern "C" __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+            D.f[E   ] = &DDStart[E   *size_Mat];
+            D.f[W   ] = &DDStart[W   *size_Mat];
+            D.f[N   ] = &DDStart[N   *size_Mat];
+            D.f[S   ] = &DDStart[S   *size_Mat];
+            D.f[T   ] = &DDStart[T   *size_Mat];
+            D.f[B   ] = &DDStart[B   *size_Mat];
+            D.f[NE  ] = &DDStart[NE  *size_Mat];
+            D.f[SW  ] = &DDStart[SW  *size_Mat];
+            D.f[SE  ] = &DDStart[SE  *size_Mat];
+            D.f[NW  ] = &DDStart[NW  *size_Mat];
+            D.f[TE  ] = &DDStart[TE  *size_Mat];
+            D.f[BW  ] = &DDStart[BW  *size_Mat];
+            D.f[BE  ] = &DDStart[BE  *size_Mat];
+            D.f[TW  ] = &DDStart[TW  *size_Mat];
+            D.f[TN  ] = &DDStart[TN  *size_Mat];
+            D.f[BS  ] = &DDStart[BS  *size_Mat];
+            D.f[BN  ] = &DDStart[BN  *size_Mat];
+            D.f[TS  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[TNE ] = &DDStart[TNE *size_Mat];
+            D.f[TSW ] = &DDStart[TSW *size_Mat];
+            D.f[TSE ] = &DDStart[TSE *size_Mat];
+            D.f[TNW ] = &DDStart[TNW *size_Mat];
+            D.f[BNE ] = &DDStart[BNE *size_Mat];
+            D.f[BSW ] = &DDStart[BSW *size_Mat];
+            D.f[BSE ] = &DDStart[BSE *size_Mat];
+            D.f[BNW ] = &DDStart[BNW *size_Mat];
          }
          else
          {
-            D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+            D.f[W   ] = &DDStart[E   *size_Mat];
+            D.f[E   ] = &DDStart[W   *size_Mat];
+            D.f[S   ] = &DDStart[N   *size_Mat];
+            D.f[N   ] = &DDStart[S   *size_Mat];
+            D.f[B   ] = &DDStart[T   *size_Mat];
+            D.f[T   ] = &DDStart[B   *size_Mat];
+            D.f[SW  ] = &DDStart[NE  *size_Mat];
+            D.f[NE  ] = &DDStart[SW  *size_Mat];
+            D.f[NW  ] = &DDStart[SE  *size_Mat];
+            D.f[SE  ] = &DDStart[NW  *size_Mat];
+            D.f[BW  ] = &DDStart[TE  *size_Mat];
+            D.f[TE  ] = &DDStart[BW  *size_Mat];
+            D.f[TW  ] = &DDStart[BE  *size_Mat];
+            D.f[BE  ] = &DDStart[TW  *size_Mat];
+            D.f[BS  ] = &DDStart[TN  *size_Mat];
+            D.f[TN  ] = &DDStart[BS  *size_Mat];
+            D.f[TS  ] = &DDStart[BN  *size_Mat];
+            D.f[BN  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[BSW ] = &DDStart[TNE *size_Mat];
+            D.f[BNE ] = &DDStart[TSW *size_Mat];
+            D.f[BNW ] = &DDStart[TSE *size_Mat];
+            D.f[BSE ] = &DDStart[TNW *size_Mat];
+            D.f[TSW ] = &DDStart[BNE *size_Mat];
+            D.f[TNE ] = &DDStart[BSW *size_Mat];
+            D.f[TNW ] = &DDStart[BSE *size_Mat];
+            D.f[TSE ] = &DDStart[BNW *size_Mat];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -954,38 +956,38 @@ extern "C" __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
          unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real E     = (D.f[dirE   ])[ke   ];// +  c2over27 ;
-         real W     = (D.f[dirW   ])[kw   ];// +  c2over27 ;
-         real N     = (D.f[dirN   ])[kn   ];// +  c2over27 ;
-         real S     = (D.f[dirS   ])[ks   ];// +  c2over27 ;
-         real F     = (D.f[dirT   ])[kt   ];// +  c2over27 ;
-         real B     = (D.f[dirB   ])[kb   ];// +  c2over27 ;
-         real Ne    = (D.f[dirNE  ])[kne  ];// +  c1over54 ;
-         real Sw    = (D.f[dirSW  ])[ksw  ];// +  c1over54 ;
-         real Se    = (D.f[dirSE  ])[kse  ];// +  c1over54 ;
-         real Nw    = (D.f[dirNW  ])[knw  ];// +  c1over54 ;
-         real Ef    = (D.f[dirTE  ])[kte  ];// +  c1over54 ;
-         real Wb    = (D.f[dirBW  ])[kbw  ];// +  c1over54 ;
-         real Eb    = (D.f[dirBE  ])[kbe  ];// +  c1over54 ;
-         real Wf    = (D.f[dirTW  ])[ktw  ];// +  c1over54 ;
-         real Nf    = (D.f[dirTN  ])[ktn  ];// +  c1over54 ;
-         real Sb    = (D.f[dirBS  ])[kbs  ];// +  c1over54 ;
-         real Nb    = (D.f[dirBN  ])[kbn  ];// +  c1over54 ;
-         real Sf    = (D.f[dirTS  ])[kts  ];// +  c1over54 ;
-         real R     = (D.f[dirZERO])[kzero];// +  c8over27 ;
-         real Nef   = (D.f[dirTNE ])[ktne ];// +  c1over216;
-         real Swf   = (D.f[dirTSW ])[ktsw ];// +  c1over216;
-         real Sef   = (D.f[dirTSE ])[ktse ];// +  c1over216;
-         real Nwf   = (D.f[dirTNW ])[ktnw ];// +  c1over216;
-         real Neb   = (D.f[dirBNE ])[kbne ];// +  c1over216;
-         real Swb   = (D.f[dirBSW ])[kbsw ];// +  c1over216;
-         real Seb   = (D.f[dirBSE ])[kbse ];// +  c1over216;
-         real Nwb   = (D.f[dirBNW ])[kbnw ];// +  c1over216;
+         real f_E     = (D.f[E   ])[ke   ];// +  c2over27 ;
+         real f_W     = (D.f[W   ])[kw   ];// +  c2over27 ;
+         real f_N     = (D.f[N   ])[kn   ];// +  c2over27 ;
+         real f_S     = (D.f[S   ])[ks   ];// +  c2over27 ;
+         real f_F     = (D.f[T   ])[kt   ];// +  c2over27 ;
+         real f_B     = (D.f[B   ])[kb   ];// +  c2over27 ;
+         real f_NE    = (D.f[NE  ])[kne  ];// +  c1over54 ;
+         real f_SW    = (D.f[SW  ])[ksw  ];// +  c1over54 ;
+         real f_SE    = (D.f[SE  ])[kse  ];// +  c1over54 ;
+         real f_NW    = (D.f[NW  ])[knw  ];// +  c1over54 ;
+         real f_Ef    = (D.f[TE  ])[kte  ];// +  c1over54 ;
+         real f_Wb    = (D.f[BW  ])[kbw  ];// +  c1over54 ;
+         real f_Eb    = (D.f[BE  ])[kbe  ];// +  c1over54 ;
+         real f_Wf    = (D.f[TW  ])[ktw  ];// +  c1over54 ;
+         real f_Nf    = (D.f[TN  ])[ktn  ];// +  c1over54 ;
+         real f_Sb    = (D.f[BS  ])[kbs  ];// +  c1over54 ;
+         real f_Nb    = (D.f[BN  ])[kbn  ];// +  c1over54 ;
+         real f_Sf    = (D.f[TS  ])[kts  ];// +  c1over54 ;
+         real f_R     = (D.f[REST])[kzero];// +  c8over27 ;
+         real f_Nef   = (D.f[TNE ])[ktne ];// +  c1over216;
+         real f_Swf   = (D.f[TSW ])[ktsw ];// +  c1over216;
+         real f_Sef   = (D.f[TSE ])[ktse ];// +  c1over216;
+         real f_Nwf   = (D.f[TNW ])[ktnw ];// +  c1over216;
+         real f_Neb   = (D.f[BNE ])[kbne ];// +  c1over216;
+         real f_Swb   = (D.f[BSW ])[kbsw ];// +  c1over216;
+         real f_Seb   = (D.f[BSE ])[kbse ];// +  c1over216;
+         real f_Nwb   = (D.f[BNW ])[kbnw ];// +  c1over216;
          ////////////////////////////////////////////////////////////////////////////////////
-		 real rho=Nw+W+Sw+S+Se+E+Ne+N+R+Nf+Nb+Sf+Sb+Ef+Eb+Wf+Wb+Nwf+Nwb+Nef+Neb+Swf+Swb+Sef+Seb+F+B+c1o1;// ACHTUNG ne EINS !!!!!!!!
-		 real pix=(Ne+E+Se+Ef+Eb-Nw-W-Sw-Wf-Wb+Nef+Neb+Sef+Seb-Nwf-Nwb-Swf-Swb);
-		 real piy=(Ne+N+Nw+Nf+Nb-Se-S-Sw-Sf-Sb+Nef+Neb+Nwf+Nwb-Sef-Seb-Swf-Swb);
-		 real piz=(Nf+Sf+Wf+Ef+F-Nb-Sb-Wb-Eb-B+Nef+Nwf+Sef+Swf-Neb-Nwb-Seb-Swb);
+		 real rho=f_NW+f_W+f_SW+f_S+f_SE+f_E+f_NE+f_N+f_R+f_Nf+f_Nb+f_Sf+f_Sb+f_Ef+f_Eb+f_Wf+f_Wb+f_Nwf+f_Nwb+f_Nef+f_Neb+f_Swf+f_Swb+f_Sef+f_Seb+f_F+f_B+c1o1;// ACHTUNG ne EINS !!!!!!!!
+		 real pix=(f_NE+f_E+f_SE+f_Ef+f_Eb-f_NW-f_W-f_SW-f_Wf-f_Wb+f_Nef+f_Neb+f_Sef+f_Seb-f_Nwf-f_Nwb-f_Swf-f_Swb);
+		 real piy=(f_NE+f_N+f_NW+f_Nf+f_Nb-f_SE-f_S-f_SW-f_Sf-f_Sb+f_Nef+f_Neb+f_Nwf+f_Nwb-f_Sef-f_Seb-f_Swf-f_Swb);
+		 real piz=(f_Nf+f_Sf+f_Wf+f_Ef+f_F-f_Nb-f_Sb-f_Wb-f_Eb-f_B+f_Nef+f_Nwf+f_Sef+f_Swf-f_Neb-f_Nwb-f_Seb-f_Swb);
 		 real vvx=pix/rho;
 		 real vvy=piy/rho;
 		 real vvz=piz/rho;
@@ -993,33 +995,33 @@ extern "C" __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
 		 real vy2=vvy*vvy;
 		 real vz2=vvz*vvz;
 		 ////////////////////////////////////////////////////////////////////////////////////
-		 real mfaaa = Swb;
-		 real mfaab = Sw;
-		 real mfaac = Swf;
-		 real mfaba = Wb;
-		 real mfabb = W;
-		 real mfabc = Wf;
-		 real mfbaa = Sb;
-		 real mfbab = S;
-		 real mfbac = Sf;
-		 real mfbba = B;
-		 real mfbbb = R;
-		 real mfbbc = F;
-		 real mfaca = Nwb;
-		 real mfacb = Nw;
-		 real mfacc = Nwf;
-		 real mfcaa = Seb;
-		 real mfcab = Se;
-		 real mfcac = Sef;
-		 real mfcca = Neb;
-		 real mfccb = Ne;
-		 real mfccc = Nef;
-		 real mfbca = Nb;
-		 real mfbcb = N;
-		 real mfbcc = Nf;
-		 real mfcba = Eb;
-		 real mfcbb = E;
-		 real mfcbc = Ef;
+		 real mfaaa = f_Swb;
+		 real mfaab = f_SW;
+		 real mfaac = f_Swf;
+		 real mfaba = f_Wb;
+		 real mfabb = f_W;
+		 real mfabc = f_Wf;
+		 real mfbaa = f_Sb;
+		 real mfbab = f_S;
+		 real mfbac = f_Sf;
+		 real mfbba = f_B;
+		 real mfbbb = f_R;
+		 real mfbbc = f_F;
+		 real mfaca = f_Nwb;
+		 real mfacb = f_NW;
+		 real mfacc = f_Nwf;
+		 real mfcaa = f_Seb;
+		 real mfcab = f_SE;
+		 real mfcac = f_Sef;
+		 real mfcca = f_Neb;
+		 real mfccb = f_NE;
+		 real mfccc = f_Nef;
+		 real mfbca = f_Nb;
+		 real mfbcb = f_N;
+		 real mfbcc = f_Nf;
+		 real mfcba = f_Eb;
+		 real mfcbb = f_E;
+		 real mfcbc = f_Ef;
 		 real m0, m1, m2;
 		 ////////////////////////////////////////////////////////////////////////////////////
 		 //Hin
@@ -1609,33 +1611,33 @@ extern "C" __global__ void LB_Kernel_Casc_Comp_SP_27(      real omega,
 		
 			   
 		 ////////////////////////////////////////////////////////////////////////////////////
-		 (D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
-		 (D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
-		 (D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;
-		 (D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;
-		 (D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;
-		 (D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;
-		 (D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;
-		 (D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;
-		 (D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;
-		 (D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;
-		 (D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;
-		 (D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;
-		 (D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;
-		 (D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;
-		 (D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;
-		 (D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;
-		 (D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;
-		 (D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;
-		 (D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;
-		 (D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;
-		 (D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;
-		 (D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;
-		 (D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;
-		 (D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;
-		 (D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;
-		 (D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;
-		 (D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;
+		 (D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
+		 (D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
+		 (D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;
+		 (D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;
+		 (D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;
+		 (D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;
+		 (D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;
+		 (D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;
+		 (D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;
+		 (D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;
+		 (D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;
+		 (D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;
+		 (D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;
+		 (D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;
+		 (D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;
+		 (D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;
+		 (D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;
+		 (D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;
+		 (D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;
+		 (D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;
+		 (D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;
+		 (D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;
+		 (D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;
+		 (D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;
+		 (D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;
+		 (D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;
+		 (D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;
 		 ////////////////////////////////////////////////////////////////////////////////////
       }                                                                                                                    
    }
@@ -1712,63 +1714,63 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_OHM_27(  real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+            D.f[E   ] = &DDStart[E   *size_Mat];
+            D.f[W   ] = &DDStart[W   *size_Mat];
+            D.f[N   ] = &DDStart[N   *size_Mat];
+            D.f[S   ] = &DDStart[S   *size_Mat];
+            D.f[T   ] = &DDStart[T   *size_Mat];
+            D.f[B   ] = &DDStart[B   *size_Mat];
+            D.f[NE  ] = &DDStart[NE  *size_Mat];
+            D.f[SW  ] = &DDStart[SW  *size_Mat];
+            D.f[SE  ] = &DDStart[SE  *size_Mat];
+            D.f[NW  ] = &DDStart[NW  *size_Mat];
+            D.f[TE  ] = &DDStart[TE  *size_Mat];
+            D.f[BW  ] = &DDStart[BW  *size_Mat];
+            D.f[BE  ] = &DDStart[BE  *size_Mat];
+            D.f[TW  ] = &DDStart[TW  *size_Mat];
+            D.f[TN  ] = &DDStart[TN  *size_Mat];
+            D.f[BS  ] = &DDStart[BS  *size_Mat];
+            D.f[BN  ] = &DDStart[BN  *size_Mat];
+            D.f[TS  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[TNE ] = &DDStart[TNE *size_Mat];
+            D.f[TSW ] = &DDStart[TSW *size_Mat];
+            D.f[TSE ] = &DDStart[TSE *size_Mat];
+            D.f[TNW ] = &DDStart[TNW *size_Mat];
+            D.f[BNE ] = &DDStart[BNE *size_Mat];
+            D.f[BSW ] = &DDStart[BSW *size_Mat];
+            D.f[BSE ] = &DDStart[BSE *size_Mat];
+            D.f[BNW ] = &DDStart[BNW *size_Mat];
          }
          else
          {
-            D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+            D.f[W   ] = &DDStart[E   *size_Mat];
+            D.f[E   ] = &DDStart[W   *size_Mat];
+            D.f[S   ] = &DDStart[N   *size_Mat];
+            D.f[N   ] = &DDStart[S   *size_Mat];
+            D.f[B   ] = &DDStart[T   *size_Mat];
+            D.f[T   ] = &DDStart[B   *size_Mat];
+            D.f[SW  ] = &DDStart[NE  *size_Mat];
+            D.f[NE  ] = &DDStart[SW  *size_Mat];
+            D.f[NW  ] = &DDStart[SE  *size_Mat];
+            D.f[SE  ] = &DDStart[NW  *size_Mat];
+            D.f[BW  ] = &DDStart[TE  *size_Mat];
+            D.f[TE  ] = &DDStart[BW  *size_Mat];
+            D.f[TW  ] = &DDStart[BE  *size_Mat];
+            D.f[BE  ] = &DDStart[TW  *size_Mat];
+            D.f[BS  ] = &DDStart[TN  *size_Mat];
+            D.f[TN  ] = &DDStart[BS  *size_Mat];
+            D.f[TS  ] = &DDStart[BN  *size_Mat];
+            D.f[BN  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[BSW ] = &DDStart[TNE *size_Mat];
+            D.f[BNE ] = &DDStart[TSW *size_Mat];
+            D.f[BNW ] = &DDStart[TSE *size_Mat];
+            D.f[BSE ] = &DDStart[TNW *size_Mat];
+            D.f[TSW ] = &DDStart[BNE *size_Mat];
+            D.f[TNE ] = &DDStart[BSW *size_Mat];
+            D.f[TNW ] = &DDStart[BSE *size_Mat];
+            D.f[TSE ] = &DDStart[BNW *size_Mat];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -1801,33 +1803,33 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_OHM_27(  real omega,
          //unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real fE    =  (D.f[dirE   ])[k  ];//ke
-         real fW    =  (D.f[dirW   ])[kw ];
-         real fN    =  (D.f[dirN   ])[k  ];//kn
-         real fS    =  (D.f[dirS   ])[ks ];
-         real fT    =  (D.f[dirT   ])[k  ];//kt
-         real fB    =  (D.f[dirB   ])[kb ];
-         real fNE   =  (D.f[dirNE  ])[k  ];//kne
-         real fSW   =  (D.f[dirSW  ])[ksw];
-         real fSE   =  (D.f[dirSE  ])[ks ];//kse
-         real fNW   =  (D.f[dirNW  ])[kw ];//knw
-         real fTE   =  (D.f[dirTE  ])[k  ];//kte
-         real fBW   =  (D.f[dirBW  ])[kbw];
-         real fBE   =  (D.f[dirBE  ])[kb ];//kbe
-         real fTW   =  (D.f[dirTW  ])[kw ];//ktw
-         real fTN   =  (D.f[dirTN  ])[k  ];//ktn
-         real fBS   =  (D.f[dirBS  ])[kbs];
-         real fBN   =  (D.f[dirBN  ])[kb ];//kbn
-         real fTS   =  (D.f[dirTS  ])[ks ];//kts
-         real fZERO =  (D.f[dirZERO])[k  ];//kzero
-         real fTNE   = (D.f[dirTNE ])[k  ];//ktne
-         real fTSW   = (D.f[dirTSW ])[ksw];//ktsw
-         real fTSE   = (D.f[dirTSE ])[ks ];//ktse
-         real fTNW   = (D.f[dirTNW ])[kw ];//ktnw
-         real fBNE   = (D.f[dirBNE ])[kb ];//kbne
-         real fBSW   = (D.f[dirBSW ])[kbsw];
-         real fBSE   = (D.f[dirBSE ])[kbs];//kbse
-         real fBNW   = (D.f[dirBNW ])[kbw];//kbnw
+         real fE    =  (D.f[E   ])[k  ];//ke
+         real fW    =  (D.f[W   ])[kw ];
+         real fN    =  (D.f[N   ])[k  ];//kn
+         real fS    =  (D.f[S   ])[ks ];
+         real fT    =  (D.f[T   ])[k  ];//kt
+         real fB    =  (D.f[B   ])[kb ];
+         real fNE   =  (D.f[NE  ])[k  ];//kne
+         real fSW   =  (D.f[SW  ])[ksw];
+         real fSE   =  (D.f[SE  ])[ks ];//kse
+         real fNW   =  (D.f[NW  ])[kw ];//knw
+         real fTE   =  (D.f[TE  ])[k  ];//kte
+         real fBW   =  (D.f[BW  ])[kbw];
+         real fBE   =  (D.f[BE  ])[kb ];//kbe
+         real fTW   =  (D.f[TW  ])[kw ];//ktw
+         real fTN   =  (D.f[TN  ])[k  ];//ktn
+         real fBS   =  (D.f[BS  ])[kbs];
+         real fBN   =  (D.f[BN  ])[kb ];//kbn
+         real fTS   =  (D.f[TS  ])[ks ];//kts
+         real fZERO =  (D.f[REST])[k  ];//kzero
+         real fTNE   = (D.f[TNE ])[k  ];//ktne
+         real fTSW   = (D.f[TSW ])[ksw];//ktsw
+         real fTSE   = (D.f[TSE ])[ks ];//ktse
+         real fTNW   = (D.f[TNW ])[kw ];//ktnw
+         real fBNE   = (D.f[BNE ])[kb ];//kbne
+         real fBSW   = (D.f[BSW ])[kbsw];
+         real fBSE   = (D.f[BSE ])[kbs];//kbse
+         real fBNW   = (D.f[BNW ])[kbw];//kbnw
          ////////////////////////////////////////////////////////////////////////////////
          real rho0   =  (fTNE+fBSW)+(fTSW+fBNE)+(fTSE+fBNW)+(fTNW+fBSE)+(fNE+fSW)+(fNW+fSE)+(fTE+fBW)+(fBE+fTW)+(fTN+fBS)+(fBN+fTS)+(fE+fW)+(fN+fS)+(fT+fB)+fZERO;
          real rho    =  rho0 + c1o1;
@@ -2183,92 +2185,92 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_OHM_27(  real omega,
             c2o1*(/*vx2y*MzYZZ +*/  vx*MzXYYZZ + vz*MzXXYYZ /*+ vyz2*MzXXY + vx2z*MzYYZ + vxy2*MzXZZ + vxz2*MzXYY*/ + vy*MzXXYZZ/* + vy2z*MzXXZ*/);//+ 
             //four*(/*vxy2z*MzXZ + vx2yz*MzYZ + vxyz2*MzXY +*/ vxy*MzXYZZ + vxz*MzXYYZ + vyz*MzXXYZ);
 
-         //(D.f[ dirE   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
-         //(D.f[ dirW   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
-         //(D.f[ dirN   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
-         //(D.f[ dirS   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
-         //(D.f[ dirT   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
-         //(D.f[ dirB   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
-         //(D.f[ dirNE  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
-         //(D.f[ dirSW  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
-         //(D.f[ dirSE  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
-         //(D.f[ dirNW  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
-         //(D.f[ dirTE  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
-         //(D.f[ dirBW  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
-         //(D.f[ dirBE  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
-         //(D.f[ dirTW  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
-         //(D.f[ dirTN  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
-         //(D.f[ dirBS  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
-         //(D.f[ dirBN  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
-         //(D.f[ dirTS  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
-         //(D.f[ dirZERO])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
-         //(D.f[ dirTNE ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
-         //(D.f[ dirTSE ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
-         //(D.f[ dirBNE ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
-         //(D.f[ dirBSE ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
-         //(D.f[ dirTNW ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
-         //(D.f[ dirTSW ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
-         //(D.f[ dirBNW ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
-         //(D.f[ dirBSW ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
-         (D.f[ dirE   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 - mu122) + (                                          + mu102 + mu120) + ( - vx            ) );   //ke
-         (D.f[ dirW   ])[kw  ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 + mu122) + (                                          - mu102 - mu120) + ( + vx            ) );   
-         (D.f[ dirN   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         - mu212        ) + (                          + mu012 + mu210                ) + (      - vy       ) );   //kn
-         (D.f[ dirS   ])[ks  ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         + mu212        ) + (                          - mu012 - mu210                ) + (      + vy       ) );   
-         (D.f[ dirT   ])[k   ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( - mu221                ) + (         + mu201 +  mu021                                ) + (           - vz  ) );   //kt
-         (D.f[ dirB   ])[kb  ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( + mu221                ) + (         - mu201 -  mu021                                ) + (           + vz  ) );   
-         (D.f[ dirNE  ])[k   ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         + mu212 + mu122) + (                                  - mu210         - mu120)                       );   //kne
-         (D.f[ dirSW  ])[ksw ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         - mu212 - mu122) + (                                  + mu210         + mu120)                       );   
-         (D.f[ dirSE  ])[ks  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         - mu212 + mu122) + (                                  + mu210         - mu120)                       );   //kse
-         (D.f[ dirNW  ])[kw  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         + mu212 - mu122) + (                                  - mu210         + mu120)                       );   //knw
-         (D.f[ dirTE  ])[k   ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( + mu221         + mu122) + (         - mu201                          - mu102        )                       );   //kte
-         (D.f[ dirBW  ])[kbw ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( - mu221         - mu122) + (         + mu201                          + mu102        )                       );   
-         (D.f[ dirBE  ])[kb  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( - mu221         + mu122) + (         + mu201                          - mu102        )                       );   //kbe
-         (D.f[ dirTW  ])[kw  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( + mu221         - mu122) + (         - mu201                          + mu102        )                       );   //ktw
-         (D.f[ dirTN  ])[k   ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( + mu221 + mu212        ) + (                 -  mu021 - mu012                        )                       );   //ktn
-         (D.f[ dirBS  ])[kbs ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( - mu221 - mu212        ) + (                 +  mu021 + mu012                        )                       );   
-         (D.f[ dirBN  ])[kb  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( - mu221 + mu212        ) + (                 +  mu021 - mu012                        )                       );   //kbn
-         (D.f[ dirTS  ])[ks  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( + mu221 - mu212        ) + (                 -  mu021 + mu012                        )                       );   //kts
-         (D.f[ dirZERO])[k   ] =       rho*(- mu222 + (                          + mu220 + mu202 + mu022) + (                         - mu200 - mu020 - mu002)                                                                                                                  )+rho0;   //kzero
-         (D.f[ dirTNE ])[k   ] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( - mu221 - mu212 - mu122) + ( - mu111                                                 )                       );   //ktne
-         (D.f[ dirTSE ])[ks  ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( - mu221 + mu212 - mu122) + ( + mu111                                                 )                       );   //ktse
-         (D.f[ dirBNE ])[kb  ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( + mu221 - mu212 - mu122) + ( + mu111                                                 )                       );   //kbne
-         (D.f[ dirBSE ])[kbs ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( + mu221 + mu212 - mu122) + ( - mu111                                                 )                       );   //kbse
-         (D.f[ dirTNW ])[kw  ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( - mu221 - mu212 + mu122) + ( + mu111                                                 )                       );   //ktnw
-         (D.f[ dirTSW ])[ksw ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( - mu221 + mu212 + mu122) + ( - mu111                                                 )                       );   //ktsw
-         (D.f[ dirBNW ])[kbw ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( + mu221 - mu212 + mu122) + ( - mu111                                                 )                       );   //kbnw
-         (D.f[ dirBSW ])[kbsw] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( + mu221 + mu212 + mu122) + ( + mu111                                                 )                       );   
+         //(D.f[ E   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
+         //(D.f[ W   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
+         //(D.f[ N   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
+         //(D.f[ S   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
+         //(D.f[ T   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
+         //(D.f[ B   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
+         //(D.f[ NE  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
+         //(D.f[ SW  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
+         //(D.f[ SE  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
+         //(D.f[ NW  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
+         //(D.f[ TE  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
+         //(D.f[ BW  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
+         //(D.f[ BE  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
+         //(D.f[ TW  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
+         //(D.f[ TN  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
+         //(D.f[ BS  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
+         //(D.f[ BN  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
+         //(D.f[ TS  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
+         //(D.f[ REST])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
+         //(D.f[ TNE ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
+         //(D.f[ TSE ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
+         //(D.f[ BNE ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
+         //(D.f[ BSE ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
+         //(D.f[ TNW ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
+         //(D.f[ TSW ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
+         //(D.f[ BNW ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
+         //(D.f[ BSW ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
+         (D.f[ E   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 - mu122) + (                                          + mu102 + mu120) + ( - vx            ) );   //ke
+         (D.f[ W   ])[kw  ] =   c1o2*rho*(+ mu222 + (                          - mu220 - mu202        ) + (                         + mu200                ) + (                 + mu122) + (                                          - mu102 - mu120) + ( + vx            ) );   
+         (D.f[ N   ])[k   ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         - mu212        ) + (                          + mu012 + mu210                ) + (      - vy       ) );   //kn
+         (D.f[ S   ])[ks  ] =   c1o2*rho*(+ mu222 + (                          - mu220         - mu022) + (                                 + mu020        ) + (         + mu212        ) + (                          - mu012 - mu210                ) + (      + vy       ) );   
+         (D.f[ T   ])[k   ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( - mu221                ) + (         + mu201 +  mu021                                ) + (           - vz  ) );   //kt
+         (D.f[ B   ])[kb  ] =   c1o2*rho*(+ mu222 + (                                  - mu202 - mu022) + (                                         + mu002) + ( + mu221                ) + (         - mu201 -  mu021                                ) + (           + vz  ) );   
+         (D.f[ NE  ])[k   ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         + mu212 + mu122) + (                                  - mu210         - mu120)                       );   //kne
+         (D.f[ SW  ])[ksw ] =  c1o4*rho*(- mu222 + (                  - mu112 + mu220                ) + (+  mu110                                        ) + (         - mu212 - mu122) + (                                  + mu210         + mu120)                       );   
+         (D.f[ SE  ])[ks  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         - mu212 + mu122) + (                                  + mu210         - mu120)                       );   //kse
+         (D.f[ NW  ])[kw  ] =  c1o4*rho*(- mu222 + (                  + mu112 + mu220                ) + (-  mu110                                        ) + (         + mu212 - mu122) + (                                  - mu210         + mu120)                       );   //knw
+         (D.f[ TE  ])[k   ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( + mu221         + mu122) + (         - mu201                          - mu102        )                       );   //kte
+         (D.f[ BW  ])[kbw ] =  c1o4*rho*(- mu222 + (        -  mu121                  + mu202        ) + (         + mu101                                ) + ( - mu221         - mu122) + (         + mu201                          + mu102        )                       );   
+         (D.f[ BE  ])[kb  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( - mu221         + mu122) + (         + mu201                          - mu102        )                       );   //kbe
+         (D.f[ TW  ])[kw  ] =  c1o4*rho*(- mu222 + (        +  mu121                  + mu202        ) + (         - mu101                                ) + ( + mu221         - mu122) + (         - mu201                          + mu102        )                       );   //ktw
+         (D.f[ TN  ])[k   ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( + mu221 + mu212        ) + (                 -  mu021 - mu012                        )                       );   //ktn
+         (D.f[ BS  ])[kbs ] =  c1o4*rho*(- mu222 + (- mu211                                   + mu022) + (                 + mu011                        ) + ( - mu221 - mu212        ) + (                 +  mu021 + mu012                        )                       );   
+         (D.f[ BN  ])[kb  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( - mu221 + mu212        ) + (                 +  mu021 - mu012                        )                       );   //kbn
+         (D.f[ TS  ])[ks  ] =  c1o4*rho*(- mu222 + (+ mu211                                   + mu022) + (                 - mu011                        ) + ( + mu221 - mu212        ) + (                 -  mu021 + mu012                        )                       );   //kts
+         (D.f[ REST])[k   ] =       rho*(- mu222 + (                          + mu220 + mu202 + mu022) + (                         - mu200 - mu020 - mu002)                                                                                                                  )+rho0;   //kzero
+         (D.f[ TNE ])[k   ] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( - mu221 - mu212 - mu122) + ( - mu111                                                 )                       );   //ktne
+         (D.f[ TSE ])[ks  ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( - mu221 + mu212 - mu122) + ( + mu111                                                 )                       );   //ktse
+         (D.f[ BNE ])[kb  ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( + mu221 - mu212 - mu122) + ( + mu111                                                 )                       );   //kbne
+         (D.f[ BSE ])[kbs ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( + mu221 + mu212 - mu122) + ( - mu111                                                 )                       );   //kbse
+         (D.f[ TNW ])[kw  ] = c1o8*rho*(+ mu222 + (+ mu211 -  mu121 - mu112                         )                                                      + ( - mu221 - mu212 + mu122) + ( + mu111                                                 )                       );   //ktnw
+         (D.f[ TSW ])[ksw ] = c1o8*rho*(+ mu222 + (- mu211 -  mu121 + mu112                         )                                                      + ( - mu221 + mu212 + mu122) + ( - mu111                                                 )                       );   //ktsw
+         (D.f[ BNW ])[kbw ] = c1o8*rho*(+ mu222 + (- mu211 +  mu121 - mu112                         )                                                      + ( + mu221 - mu212 + mu122) + ( - mu111                                                 )                       );   //kbnw
+         (D.f[ BSW ])[kbsw] = c1o8*rho*(+ mu222 + (+ mu211 +  mu121 + mu112                         )                                                      + ( + mu221 + mu212 + mu122) + ( + mu111                                                 )                       );   
                                                                                                                                                                                                                                                                 
                                                                                                                                                                                                                                                                 
          //////////////////////////////////////////////////////////////////////////                                                                                                                                                                             
          //BGK                                                                                                 
          //////////////////////////////////////////////////////////////////////////                            
-         //(D.f[ dirE   ])[k   ] = fW    ;                                                                     
-         //(D.f[ dirW   ])[kw  ] = fE    ;                                                                     
-         //(D.f[ dirN   ])[k   ] = fS    ;
-         //(D.f[ dirS   ])[ks  ] = fN    ;
-         //(D.f[ dirT   ])[k   ] = fB    ;
-         //(D.f[ dirB   ])[kb  ] = fT    ;
-         //(D.f[ dirNE  ])[k   ] = fSW   ;
-         //(D.f[ dirSW  ])[ksw ] = fNE   ;
-         //(D.f[ dirSE  ])[ks  ] = fNW   ;
-         //(D.f[ dirNW  ])[kw  ] = fSE   ;
-         //(D.f[ dirTE  ])[k   ] = fBW   ;
-         //(D.f[ dirBW  ])[kbw ] = fTE   ;
-         //(D.f[ dirBE  ])[kb  ] = fTW   ;
-         //(D.f[ dirTW  ])[kw  ] = fBE   ;
-         //(D.f[ dirTN  ])[k   ] = fBS   ;
-         //(D.f[ dirBS  ])[kbs ] = fTN   ;
-         //(D.f[ dirBN  ])[kb  ] = fTS   ;
-         //(D.f[ dirTS  ])[ks  ] = fBN   ;
-         //(D.f[ dirZERO])[k   ] = fZERO ;
-         //(D.f[ dirTNE ])[k   ] = fBSW  ;
-         //(D.f[ dirTSE ])[ks  ] = fBNW  ;
-         //(D.f[ dirBNE ])[kb  ] = fTSW  ;
-         //(D.f[ dirBSE ])[kbs ] = fTNW  ;
-         //(D.f[ dirTNW ])[kw  ] = fBSE  ;
-         //(D.f[ dirTSW ])[ksw ] = fBNE  ;
-         //(D.f[ dirBNW ])[kbw ] = fTSE  ;
-         //(D.f[ dirBSW ])[kbsw] = fTNE  ;
+         //(D.f[ E   ])[k   ] = fW    ;                                                                     
+         //(D.f[ W   ])[kw  ] = fE    ;                                                                     
+         //(D.f[ N   ])[k   ] = fS    ;
+         //(D.f[ S   ])[ks  ] = fN    ;
+         //(D.f[ T   ])[k   ] = fB    ;
+         //(D.f[ B   ])[kb  ] = fT    ;
+         //(D.f[ NE  ])[k   ] = fSW   ;
+         //(D.f[ SW  ])[ksw ] = fNE   ;
+         //(D.f[ SE  ])[ks  ] = fNW   ;
+         //(D.f[ NW  ])[kw  ] = fSE   ;
+         //(D.f[ TE  ])[k   ] = fBW   ;
+         //(D.f[ BW  ])[kbw ] = fTE   ;
+         //(D.f[ BE  ])[kb  ] = fTW   ;
+         //(D.f[ TW  ])[kw  ] = fBE   ;
+         //(D.f[ TN  ])[k   ] = fBS   ;
+         //(D.f[ BS  ])[kbs ] = fTN   ;
+         //(D.f[ BN  ])[kb  ] = fTS   ;
+         //(D.f[ TS  ])[ks  ] = fBN   ;
+         //(D.f[ REST])[k   ] = fZERO ;
+         //(D.f[ TNE ])[k   ] = fBSW  ;
+         //(D.f[ TSE ])[ks  ] = fBNW  ;
+         //(D.f[ BNE ])[kb  ] = fTSW  ;
+         //(D.f[ BSE ])[kbs ] = fTNW  ;
+         //(D.f[ TNW ])[kw  ] = fBSE  ;
+         //(D.f[ TSW ])[ksw ] = fBNE  ;
+         //(D.f[ BNW ])[kbw ] = fTSE  ;
+         //(D.f[ BSW ])[kbsw] = fTNE  ;
       }                                                                                                                    
    }
 }
@@ -2344,63 +2346,63 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_27(   real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+            D.f[E   ] = &DDStart[E   *size_Mat];
+            D.f[W   ] = &DDStart[W   *size_Mat];
+            D.f[N   ] = &DDStart[N   *size_Mat];
+            D.f[S   ] = &DDStart[S   *size_Mat];
+            D.f[T   ] = &DDStart[T   *size_Mat];
+            D.f[B   ] = &DDStart[B   *size_Mat];
+            D.f[NE  ] = &DDStart[NE  *size_Mat];
+            D.f[SW  ] = &DDStart[SW  *size_Mat];
+            D.f[SE  ] = &DDStart[SE  *size_Mat];
+            D.f[NW  ] = &DDStart[NW  *size_Mat];
+            D.f[TE  ] = &DDStart[TE  *size_Mat];
+            D.f[BW  ] = &DDStart[BW  *size_Mat];
+            D.f[BE  ] = &DDStart[BE  *size_Mat];
+            D.f[TW  ] = &DDStart[TW  *size_Mat];
+            D.f[TN  ] = &DDStart[TN  *size_Mat];
+            D.f[BS  ] = &DDStart[BS  *size_Mat];
+            D.f[BN  ] = &DDStart[BN  *size_Mat];
+            D.f[TS  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[TNE ] = &DDStart[TNE *size_Mat];
+            D.f[TSW ] = &DDStart[TSW *size_Mat];
+            D.f[TSE ] = &DDStart[TSE *size_Mat];
+            D.f[TNW ] = &DDStart[TNW *size_Mat];
+            D.f[BNE ] = &DDStart[BNE *size_Mat];
+            D.f[BSW ] = &DDStart[BSW *size_Mat];
+            D.f[BSE ] = &DDStart[BSE *size_Mat];
+            D.f[BNW ] = &DDStart[BNW *size_Mat];
          }
          else
          {
-            D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+            D.f[W   ] = &DDStart[E   *size_Mat];
+            D.f[E   ] = &DDStart[W   *size_Mat];
+            D.f[S   ] = &DDStart[N   *size_Mat];
+            D.f[N   ] = &DDStart[S   *size_Mat];
+            D.f[B   ] = &DDStart[T   *size_Mat];
+            D.f[T   ] = &DDStart[B   *size_Mat];
+            D.f[SW  ] = &DDStart[NE  *size_Mat];
+            D.f[NE  ] = &DDStart[SW  *size_Mat];
+            D.f[NW  ] = &DDStart[SE  *size_Mat];
+            D.f[SE  ] = &DDStart[NW  *size_Mat];
+            D.f[BW  ] = &DDStart[TE  *size_Mat];
+            D.f[TE  ] = &DDStart[BW  *size_Mat];
+            D.f[TW  ] = &DDStart[BE  *size_Mat];
+            D.f[BE  ] = &DDStart[TW  *size_Mat];
+            D.f[BS  ] = &DDStart[TN  *size_Mat];
+            D.f[TN  ] = &DDStart[BS  *size_Mat];
+            D.f[TS  ] = &DDStart[BN  *size_Mat];
+            D.f[BN  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[BSW ] = &DDStart[TNE *size_Mat];
+            D.f[BNE ] = &DDStart[TSW *size_Mat];
+            D.f[BNW ] = &DDStart[TSE *size_Mat];
+            D.f[BSE ] = &DDStart[TNW *size_Mat];
+            D.f[TSW ] = &DDStart[BNE *size_Mat];
+            D.f[TNE ] = &DDStart[BSW *size_Mat];
+            D.f[TNW ] = &DDStart[BSE *size_Mat];
+            D.f[TSE ] = &DDStart[BNW *size_Mat];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -2433,33 +2435,33 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_27(   real omega,
          //unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real fE    =  (D.f[dirE   ])[k  ];//ke
-         real fW    =  (D.f[dirW   ])[kw ];
-         real fN    =  (D.f[dirN   ])[k  ];//kn
-         real fS    =  (D.f[dirS   ])[ks ];
-         real fT    =  (D.f[dirT   ])[k  ];//kt
-         real fB    =  (D.f[dirB   ])[kb ];
-         real fNE   =  (D.f[dirNE  ])[k  ];//kne
-         real fSW   =  (D.f[dirSW  ])[ksw];
-         real fSE   =  (D.f[dirSE  ])[ks ];//kse
-         real fNW   =  (D.f[dirNW  ])[kw ];//knw
-         real fTE   =  (D.f[dirTE  ])[k  ];//kte
-         real fBW   =  (D.f[dirBW  ])[kbw];
-         real fBE   =  (D.f[dirBE  ])[kb ];//kbe
-         real fTW   =  (D.f[dirTW  ])[kw ];//ktw
-         real fTN   =  (D.f[dirTN  ])[k  ];//ktn
-         real fBS   =  (D.f[dirBS  ])[kbs];
-         real fBN   =  (D.f[dirBN  ])[kb ];//kbn
-         real fTS   =  (D.f[dirTS  ])[ks ];//kts
-         real fZERO =  (D.f[dirZERO])[k  ];//kzero
-         real fTNE   = (D.f[dirTNE ])[k  ];//ktne
-         real fTSW   = (D.f[dirTSW ])[ksw];//ktsw
-         real fTSE   = (D.f[dirTSE ])[ks ];//ktse
-         real fTNW   = (D.f[dirTNW ])[kw ];//ktnw
-         real fBNE   = (D.f[dirBNE ])[kb ];//kbne
-         real fBSW   = (D.f[dirBSW ])[kbsw];
-         real fBSE   = (D.f[dirBSE ])[kbs];//kbse
-         real fBNW   = (D.f[dirBNW ])[kbw];//kbnw
+         real fE    =  (D.f[E   ])[k  ];//ke
+         real fW    =  (D.f[W   ])[kw ];
+         real fN    =  (D.f[N   ])[k  ];//kn
+         real fS    =  (D.f[S   ])[ks ];
+         real fT    =  (D.f[T   ])[k  ];//kt
+         real fB    =  (D.f[B   ])[kb ];
+         real fNE   =  (D.f[NE  ])[k  ];//kne
+         real fSW   =  (D.f[SW  ])[ksw];
+         real fSE   =  (D.f[SE  ])[ks ];//kse
+         real fNW   =  (D.f[NW  ])[kw ];//knw
+         real fTE   =  (D.f[TE  ])[k  ];//kte
+         real fBW   =  (D.f[BW  ])[kbw];
+         real fBE   =  (D.f[BE  ])[kb ];//kbe
+         real fTW   =  (D.f[TW  ])[kw ];//ktw
+         real fTN   =  (D.f[TN  ])[k  ];//ktn
+         real fBS   =  (D.f[BS  ])[kbs];
+         real fBN   =  (D.f[BN  ])[kb ];//kbn
+         real fTS   =  (D.f[TS  ])[ks ];//kts
+         real fZERO =  (D.f[REST])[k  ];//kzero
+         real fTNE   = (D.f[TNE ])[k  ];//ktne
+         real fTSW   = (D.f[TSW ])[ksw];//ktsw
+         real fTSE   = (D.f[TSE ])[ks ];//ktse
+         real fTNW   = (D.f[TNW ])[kw ];//ktnw
+         real fBNE   = (D.f[BNE ])[kb ];//kbne
+         real fBSW   = (D.f[BSW ])[kbsw];
+         real fBSE   = (D.f[BSE ])[kbs];//kbse
+         real fBNW   = (D.f[BNW ])[kbw];//kbnw
          ////////////////////////////////////////////////////////////////////////////////
          real rho0   =  fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW;
          real rho    =  rho0 + c1o1;
@@ -2735,65 +2737,65 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_27(   real omega,
                   c2o1*(vx2y*MzYZZ +  vx*MzXYYZZ + vz*MzXXYYZ + vyz2*MzXXY + vx2z*MzYYZ + vxy2*MzXZZ + vxz2*MzXYY + vy*MzXXYZZ + vy2z*MzXXZ)+ 
                   c4o1*(vxy2z*MzXZ + vx2yz*MzYZ + vxyz2*MzXY + vxy*MzXYZZ + vxz*MzXYYZ + vyz*MzXXYZ);
 
-         (D.f[ dirE   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
-         (D.f[ dirW   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
-         (D.f[ dirN   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
-         (D.f[ dirS   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
-         (D.f[ dirT   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
-         (D.f[ dirB   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
-         (D.f[ dirNE  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
-         (D.f[ dirSW  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
-         (D.f[ dirSE  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
-         (D.f[ dirNW  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
-         (D.f[ dirTE  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
-         (D.f[ dirBW  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
-         (D.f[ dirBE  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
-         (D.f[ dirTW  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
-         (D.f[ dirTN  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
-         (D.f[ dirBS  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
-         (D.f[ dirBN  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
-         (D.f[ dirTS  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
-         (D.f[ dirZERO])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
-         (D.f[ dirTNE ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
-         (D.f[ dirTSE ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
-         (D.f[ dirBNE ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
-         (D.f[ dirBSE ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
-         (D.f[ dirTNW ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
-         (D.f[ dirTSW ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
-         (D.f[ dirBNW ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
-         (D.f[ dirBSW ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
+         (D.f[ E   ])[k   ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102 - vx   );   //ke
+         (D.f[ W   ])[kw  ] =   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102 + vx   );   
+         (D.f[ N   ])[k   ] =   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012 - vy   );   //kn
+         (D.f[ S   ])[ks  ] =   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012 + vy   );   
+         (D.f[ T   ])[k   ] =   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002 - vz   );   //kt
+         (D.f[ B   ])[kb  ] =   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002 + vz   );   
+         (D.f[ NE  ])[k   ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
+         (D.f[ SW  ])[ksw ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
+         (D.f[ SE  ])[ks  ] =  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
+         (D.f[ NW  ])[kw  ] =  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
+         (D.f[ TE  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
+         (D.f[ BW  ])[kbw ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
+         (D.f[ BE  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
+         (D.f[ TW  ])[kw  ] =  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
+         (D.f[ TN  ])[k   ] =  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
+         (D.f[ BS  ])[kbs ] =  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
+         (D.f[ BN  ])[kb  ] =  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
+         (D.f[ TS  ])[ks  ] =  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
+         (D.f[ REST])[k   ] =       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        )+rho0;   //kzero
+         (D.f[ TNE ])[k   ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
+         (D.f[ TSE ])[ks  ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
+         (D.f[ BNE ])[kb  ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
+         (D.f[ BSE ])[kbs ] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
+         (D.f[ TNW ])[kw  ] = c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
+         (D.f[ TSW ])[ksw ] = c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
+         (D.f[ BNW ])[kbw ] = c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
+         (D.f[ BSW ])[kbsw] = c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
 
 
          //////////////////////////////////////////////////////////////////////////
          //BGK
          //////////////////////////////////////////////////////////////////////////
-         //(D.f[ dirE   ])[k   ] = fW    ;
-         //(D.f[ dirW   ])[kw  ] = fE    ;
-         //(D.f[ dirN   ])[k   ] = fS    ;
-         //(D.f[ dirS   ])[ks  ] = fN    ;
-         //(D.f[ dirT   ])[k   ] = fB    ;
-         //(D.f[ dirB   ])[kb  ] = fT    ;
-         //(D.f[ dirNE  ])[k   ] = fSW   ;
-         //(D.f[ dirSW  ])[ksw ] = fNE   ;
-         //(D.f[ dirSE  ])[ks  ] = fNW   ;
-         //(D.f[ dirNW  ])[kw  ] = fSE   ;
-         //(D.f[ dirTE  ])[k   ] = fBW   ;
-         //(D.f[ dirBW  ])[kbw ] = fTE   ;
-         //(D.f[ dirBE  ])[kb  ] = fTW   ;
-         //(D.f[ dirTW  ])[kw  ] = fBE   ;
-         //(D.f[ dirTN  ])[k   ] = fBS   ;
-         //(D.f[ dirBS  ])[kbs ] = fTN   ;
-         //(D.f[ dirBN  ])[kb  ] = fTS   ;
-         //(D.f[ dirTS  ])[ks  ] = fBN   ;
-         //(D.f[ dirZERO])[k   ] = fZERO ;
-         //(D.f[ dirTNE ])[k   ] = fBSW  ;
-         //(D.f[ dirTSE ])[ks  ] = fBNW  ;
-         //(D.f[ dirBNE ])[kb  ] = fTSW  ;
-         //(D.f[ dirBSE ])[kbs ] = fTNW  ;
-         //(D.f[ dirTNW ])[kw  ] = fBSE  ;
-         //(D.f[ dirTSW ])[ksw ] = fBNE  ;
-         //(D.f[ dirBNW ])[kbw ] = fTSE  ;
-         //(D.f[ dirBSW ])[kbsw] = fTNE  ;
+         //(D.f[ E   ])[k   ] = fW    ;
+         //(D.f[ W   ])[kw  ] = fE    ;
+         //(D.f[ N   ])[k   ] = fS    ;
+         //(D.f[ S   ])[ks  ] = fN    ;
+         //(D.f[ T   ])[k   ] = fB    ;
+         //(D.f[ B   ])[kb  ] = fT    ;
+         //(D.f[ NE  ])[k   ] = fSW   ;
+         //(D.f[ SW  ])[ksw ] = fNE   ;
+         //(D.f[ SE  ])[ks  ] = fNW   ;
+         //(D.f[ NW  ])[kw  ] = fSE   ;
+         //(D.f[ TE  ])[k   ] = fBW   ;
+         //(D.f[ BW  ])[kbw ] = fTE   ;
+         //(D.f[ BE  ])[kb  ] = fTW   ;
+         //(D.f[ TW  ])[kw  ] = fBE   ;
+         //(D.f[ TN  ])[k   ] = fBS   ;
+         //(D.f[ BS  ])[kbs ] = fTN   ;
+         //(D.f[ BN  ])[kb  ] = fTS   ;
+         //(D.f[ TS  ])[ks  ] = fBN   ;
+         //(D.f[ REST])[k   ] = fZERO ;
+         //(D.f[ TNE ])[k   ] = fBSW  ;
+         //(D.f[ TSE ])[ks  ] = fBNW  ;
+         //(D.f[ BNE ])[kb  ] = fTSW  ;
+         //(D.f[ BSE ])[kbs ] = fTNW  ;
+         //(D.f[ TNW ])[kw  ] = fBSE  ;
+         //(D.f[ TSW ])[ksw ] = fBNE  ;
+         //(D.f[ BNW ])[kbw ] = fTSE  ;
+         //(D.f[ BSW ])[kbsw] = fTNE  ;
       }                                                                                                                    
    }
 }
@@ -2869,63 +2871,63 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_Diff_27(real omega,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+            D.f[E   ] = &DDStart[E   *size_Mat];
+            D.f[W   ] = &DDStart[W   *size_Mat];
+            D.f[N   ] = &DDStart[N   *size_Mat];
+            D.f[S   ] = &DDStart[S   *size_Mat];
+            D.f[T   ] = &DDStart[T   *size_Mat];
+            D.f[B   ] = &DDStart[B   *size_Mat];
+            D.f[NE  ] = &DDStart[NE  *size_Mat];
+            D.f[SW  ] = &DDStart[SW  *size_Mat];
+            D.f[SE  ] = &DDStart[SE  *size_Mat];
+            D.f[NW  ] = &DDStart[NW  *size_Mat];
+            D.f[TE  ] = &DDStart[TE  *size_Mat];
+            D.f[BW  ] = &DDStart[BW  *size_Mat];
+            D.f[BE  ] = &DDStart[BE  *size_Mat];
+            D.f[TW  ] = &DDStart[TW  *size_Mat];
+            D.f[TN  ] = &DDStart[TN  *size_Mat];
+            D.f[BS  ] = &DDStart[BS  *size_Mat];
+            D.f[BN  ] = &DDStart[BN  *size_Mat];
+            D.f[TS  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[TNE ] = &DDStart[TNE *size_Mat];
+            D.f[TSW ] = &DDStart[TSW *size_Mat];
+            D.f[TSE ] = &DDStart[TSE *size_Mat];
+            D.f[TNW ] = &DDStart[TNW *size_Mat];
+            D.f[BNE ] = &DDStart[BNE *size_Mat];
+            D.f[BSW ] = &DDStart[BSW *size_Mat];
+            D.f[BSE ] = &DDStart[BSE *size_Mat];
+            D.f[BNW ] = &DDStart[BNW *size_Mat];
          }
          else
          {
-            D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-            D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-            D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-            D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-            D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-            D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-            D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-            D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-            D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-            D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-            D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-            D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-            D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-            D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-            D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-            D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-            D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-            D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-            D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-            D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-            D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-            D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-            D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-            D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-            D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-            D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-            D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+            D.f[W   ] = &DDStart[E   *size_Mat];
+            D.f[E   ] = &DDStart[W   *size_Mat];
+            D.f[S   ] = &DDStart[N   *size_Mat];
+            D.f[N   ] = &DDStart[S   *size_Mat];
+            D.f[B   ] = &DDStart[T   *size_Mat];
+            D.f[T   ] = &DDStart[B   *size_Mat];
+            D.f[SW  ] = &DDStart[NE  *size_Mat];
+            D.f[NE  ] = &DDStart[SW  *size_Mat];
+            D.f[NW  ] = &DDStart[SE  *size_Mat];
+            D.f[SE  ] = &DDStart[NW  *size_Mat];
+            D.f[BW  ] = &DDStart[TE  *size_Mat];
+            D.f[TE  ] = &DDStart[BW  *size_Mat];
+            D.f[TW  ] = &DDStart[BE  *size_Mat];
+            D.f[BE  ] = &DDStart[TW  *size_Mat];
+            D.f[BS  ] = &DDStart[TN  *size_Mat];
+            D.f[TN  ] = &DDStart[BS  *size_Mat];
+            D.f[TS  ] = &DDStart[BN  *size_Mat];
+            D.f[BN  ] = &DDStart[TS  *size_Mat];
+            D.f[REST] = &DDStart[REST*size_Mat];
+            D.f[BSW ] = &DDStart[TNE *size_Mat];
+            D.f[BNE ] = &DDStart[TSW *size_Mat];
+            D.f[BNW ] = &DDStart[TSE *size_Mat];
+            D.f[BSE ] = &DDStart[TNW *size_Mat];
+            D.f[TSW ] = &DDStart[BNE *size_Mat];
+            D.f[TNE ] = &DDStart[BSW *size_Mat];
+            D.f[TNW ] = &DDStart[BSE *size_Mat];
+            D.f[TSE ] = &DDStart[BNW *size_Mat];
          }
 
          ////////////////////////////////////////////////////////////////////////////////
@@ -2958,33 +2960,33 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_Diff_27(real omega,
          //unsigned int ktne = k;
          unsigned int kbsw = neighborZ[ksw];
          //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         real fE    =  (D.f[dirE   ])[k  ];//ke
-         real fW    =  (D.f[dirW   ])[kw ];
-         real fN    =  (D.f[dirN   ])[k  ];//kn
-         real fS    =  (D.f[dirS   ])[ks ];
-         real fT    =  (D.f[dirT   ])[k  ];//kt
-         real fB    =  (D.f[dirB   ])[kb ];
-         real fNE   =  (D.f[dirNE  ])[k  ];//kne
-         real fSW   =  (D.f[dirSW  ])[ksw];
-         real fSE   =  (D.f[dirSE  ])[ks ];//kse
-         real fNW   =  (D.f[dirNW  ])[kw ];//knw
-         real fTE   =  (D.f[dirTE  ])[k  ];//kte
-         real fBW   =  (D.f[dirBW  ])[kbw];
-         real fBE   =  (D.f[dirBE  ])[kb ];//kbe
-         real fTW   =  (D.f[dirTW  ])[kw ];//ktw
-         real fTN   =  (D.f[dirTN  ])[k  ];//ktn
-         real fBS   =  (D.f[dirBS  ])[kbs];
-         real fBN   =  (D.f[dirBN  ])[kb ];//kbn
-         real fTS   =  (D.f[dirTS  ])[ks ];//kts
-         real fZERO =  (D.f[dirZERO])[k  ];//kzero
-         real fTNE   = (D.f[dirTNE ])[k  ];//ktne
-         real fTSW   = (D.f[dirTSW ])[ksw];//ktsw
-         real fTSE   = (D.f[dirTSE ])[ks ];//ktse
-         real fTNW   = (D.f[dirTNW ])[kw ];//ktnw
-         real fBNE   = (D.f[dirBNE ])[kb ];//kbne
-         real fBSW   = (D.f[dirBSW ])[kbsw];
-         real fBSE   = (D.f[dirBSE ])[kbs];//kbse
-         real fBNW   = (D.f[dirBNW ])[kbw];//kbnw
+         real fE    =  (D.f[E   ])[k  ];//ke
+         real fW    =  (D.f[W   ])[kw ];
+         real fN    =  (D.f[N   ])[k  ];//kn
+         real fS    =  (D.f[S   ])[ks ];
+         real fT    =  (D.f[T   ])[k  ];//kt
+         real fB    =  (D.f[B   ])[kb ];
+         real fNE   =  (D.f[NE  ])[k  ];//kne
+         real fSW   =  (D.f[SW  ])[ksw];
+         real fSE   =  (D.f[SE  ])[ks ];//kse
+         real fNW   =  (D.f[NW  ])[kw ];//knw
+         real fTE   =  (D.f[TE  ])[k  ];//kte
+         real fBW   =  (D.f[BW  ])[kbw];
+         real fBE   =  (D.f[BE  ])[kb ];//kbe
+         real fTW   =  (D.f[TW  ])[kw ];//ktw
+         real fTN   =  (D.f[TN  ])[k  ];//ktn
+         real fBS   =  (D.f[BS  ])[kbs];
+         real fBN   =  (D.f[BN  ])[kb ];//kbn
+         real fTS   =  (D.f[TS  ])[ks ];//kts
+         real fZERO =  (D.f[REST])[k  ];//kzero
+         real fTNE   = (D.f[TNE ])[k  ];//ktne
+         real fTSW   = (D.f[TSW ])[ksw];//ktsw
+         real fTSE   = (D.f[TSE ])[ks ];//ktse
+         real fTNW   = (D.f[TNW ])[kw ];//ktnw
+         real fBNE   = (D.f[BNE ])[kb ];//kbne
+         real fBSW   = (D.f[BSW ])[kbsw];
+         real fBSE   = (D.f[BSE ])[kbs];//kbse
+         real fBNW   = (D.f[BNW ])[kbw];//kbnw
          ////////////////////////////////////////////////////////////////////////////////
          real rho0   =  fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW;
          real rho    =  rho0 + c1o1;
@@ -3257,65 +3259,65 @@ extern "C" __global__ void LB_Kernel_Casc_SP_MS_Diff_27(real omega,
             c2o1*(vx2y*MzYZZ +  vx*MzXYYZZ + vz*MzXXYYZ + vyz2*MzXXY + vx2z*MzYYZ + vxy2*MzXZZ + vxz2*MzXYY + vy*MzXXYZZ + vy2z*MzXXZ)+ 
             c4o1*(vxy2z*MzXZ + vx2yz*MzYZ + vxyz2*MzXY + vxy*MzXYZZ + vxz*MzXYYZ + vyz*MzXXYZ);
 
-         (D.f[ dirE   ])[k   ] = fW    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102        );   //ke
-         (D.f[ dirW   ])[kw  ] = fE    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102        );   
-         (D.f[ dirN   ])[k   ] = fS    -   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012        );   //kn
-         (D.f[ dirS   ])[ks  ] = fN    -   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012        );   
-         (D.f[ dirT   ])[k   ] = fB    -   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002        );   //kt
-         (D.f[ dirB   ])[kb  ] = fT    -   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002        );   
-         (D.f[ dirNE  ])[k   ] = fSW   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
-         (D.f[ dirSW  ])[ksw ] = fNE   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
-         (D.f[ dirSE  ])[ks  ] = fNW   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
-         (D.f[ dirNW  ])[kw  ] = fSE   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
-         (D.f[ dirTE  ])[k   ] = fBW   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
-         (D.f[ dirBW  ])[kbw ] = fTE   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
-         (D.f[ dirBE  ])[kb  ] = fTW   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
-         (D.f[ dirTW  ])[kw  ] = fBE   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
-         (D.f[ dirTN  ])[k   ] = fBS   -  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
-         (D.f[ dirBS  ])[kbs ] = fTN   -  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
-         (D.f[ dirBN  ])[kb  ] = fTS   -  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
-         (D.f[ dirTS  ])[ks  ] = fBN   -  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
-         (D.f[ dirZERO])[k   ] = fZERO -       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        );   //kzero
-         (D.f[ dirTNE ])[k   ] = fBSW  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
-         (D.f[ dirTSE ])[ks  ] = fBNW  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
-         (D.f[ dirBNE ])[kb  ] = fTSW  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
-         (D.f[ dirBSE ])[kbs ] = fTNW  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
-         (D.f[ dirTNW ])[kw  ] = fBSE  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
-         (D.f[ dirTSW ])[ksw ] = fBNE  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
-         (D.f[ dirBNW ])[kbw ] = fTSE  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
-         (D.f[ dirBSW ])[kbsw] = fTNE  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
+         (D.f[ E   ])[k   ] = fW    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 +  mu120 - mu122 + mu102        );   //ke
+         (D.f[ W   ])[kw  ] = fE    -   c1o2*rho*( mu200  - mu220 + mu222 - mu202 -  mu120 + mu122 - mu102        );   
+         (D.f[ N   ])[k   ] = fS    -   c1o2*rho*( mu210  - mu220 + mu222 - mu212 +  mu020 - mu022 + mu012        );   //kn
+         (D.f[ S   ])[ks  ] = fN    -   c1o2*rho*(-mu210  - mu220 + mu222 + mu212 +  mu020 - mu022 - mu012        );   
+         (D.f[ T   ])[k   ] = fB    -   c1o2*rho*(-mu221  + mu222 + mu201 - mu202 +  mu021 - mu022 + mu002        );   //kt
+         (D.f[ B   ])[kb  ] = fT    -   c1o2*rho*( mu221  + mu222 - mu201 - mu202 -  mu021 - mu022 + mu002        );   
+         (D.f[ NE  ])[k   ] = fSW   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 +  mu110 - mu120 + mu122 - mu112);   //kne
+         (D.f[ SW  ])[ksw ] = fNE   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 +  mu110 + mu120 - mu122 - mu112);   
+         (D.f[ SE  ])[ks  ] = fNW   -  c1o4*rho*( mu210  + mu220 - mu222 - mu212 -  mu110 - mu120 + mu122 + mu112);   //kse
+         (D.f[ NW  ])[kw  ] = fSE   -  c1o4*rho*(-mu210  + mu220 - mu222 + mu212 -  mu110 + mu120 - mu122 + mu112);   //knw
+         (D.f[ TE  ])[k   ] = fBW   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 -  mu121 + mu122 + mu101 - mu102);   //kte
+         (D.f[ BW  ])[kbw ] = fTE   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 -  mu121 - mu122 + mu101 + mu102);   
+         (D.f[ BE  ])[kb  ] = fTW   -  c1o4*rho*(-mu221  - mu222 + mu201 + mu202 +  mu121 + mu122 - mu101 - mu102);   //kbe
+         (D.f[ TW  ])[kw  ] = fBE   -  c1o4*rho*( mu221  - mu222 - mu201 + mu202 +  mu121 - mu122 - mu101 + mu102);   //ktw
+         (D.f[ TN  ])[k   ] = fBS   -  c1o4*rho*( mu221  - mu222 - mu211 + mu212 -  mu021 + mu022 + mu011 - mu012);   //ktn
+         (D.f[ BS  ])[kbs ] = fTN   -  c1o4*rho*(-mu221  - mu222 - mu211 - mu212 +  mu021 + mu022 + mu011 + mu012);   
+         (D.f[ BN  ])[kb  ] = fTS   -  c1o4*rho*(-mu221  - mu222 + mu211 + mu212 +  mu021 + mu022 - mu011 - mu012);   //kbn
+         (D.f[ TS  ])[ks  ] = fBN   -  c1o4*rho*( mu221  - mu222 + mu211 - mu212 -  mu021 + mu022 - mu011 + mu012);   //kts
+         (D.f[ REST])[k   ] = fZERO -       rho*(-mu200  + mu220 - mu222 + mu202 -  mu020 + mu022 - mu002        );   //kzero
+         (D.f[ TNE ])[k   ] = fBSW  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 +  mu121 - mu122 - mu111 + mu112);   //ktne
+         (D.f[ TSE ])[ks  ] = fBNW  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 +  mu121 - mu122 + mu111 - mu112);   //ktse
+         (D.f[ BNE ])[kb  ] = fTSW  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 -  mu121 - mu122 + mu111 + mu112);   //kbne
+         (D.f[ BSE ])[kbs ] = fTNW  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 -  mu121 - mu122 - mu111 - mu112);   //kbse
+         (D.f[ TNW ])[kw  ] = fBSE  - c1o8*rho*(-mu221  + mu222 + mu211 - mu212 -  mu121 + mu122 + mu111 - mu112);   //ktnw
+         (D.f[ TSW ])[ksw ] = fBNE  - c1o8*rho*(-mu221  + mu222 - mu211 + mu212 -  mu121 + mu122 - mu111 + mu112);   //ktsw
+         (D.f[ BNW ])[kbw ] = fTSE  - c1o8*rho*( mu221  + mu222 - mu211 - mu212 +  mu121 + mu122 - mu111 - mu112);   //kbnw
+         (D.f[ BSW ])[kbsw] = fTNE  - c1o8*rho*( mu221  + mu222 + mu211 + mu212 +  mu121 + mu122 + mu111 + mu112);   
 
 
          //////////////////////////////////////////////////////////////////////////
          //BGK
          //////////////////////////////////////////////////////////////////////////
-         //(D.f[ dirE   ])[k   ] = fW    ;
-         //(D.f[ dirW   ])[kw  ] = fE    ;
-         //(D.f[ dirN   ])[k   ] = fS    ;
-         //(D.f[ dirS   ])[ks  ] = fN    ;
-         //(D.f[ dirT   ])[k   ] = fB    ;
-         //(D.f[ dirB   ])[kb  ] = fT    ;
-         //(D.f[ dirNE  ])[k   ] = fSW   ;
-         //(D.f[ dirSW  ])[ksw ] = fNE   ;
-         //(D.f[ dirSE  ])[ks  ] = fNW   ;
-         //(D.f[ dirNW  ])[kw  ] = fSE   ;
-         //(D.f[ dirTE  ])[k   ] = fBW   ;
-         //(D.f[ dirBW  ])[kbw ] = fTE   ;
-         //(D.f[ dirBE  ])[kb  ] = fTW   ;
-         //(D.f[ dirTW  ])[kw  ] = fBE   ;
-         //(D.f[ dirTN  ])[k   ] = fBS   ;
-         //(D.f[ dirBS  ])[kbs ] = fTN   ;
-         //(D.f[ dirBN  ])[kb  ] = fTS   ;
-         //(D.f[ dirTS  ])[ks  ] = fBN   ;
-         //(D.f[ dirZERO])[k   ] = fZERO ;
-         //(D.f[ dirTNE ])[k   ] = fBSW  ;
-         //(D.f[ dirTSE ])[ks  ] = fBNW  ;
-         //(D.f[ dirBNE ])[kb  ] = fTSW  ;
-         //(D.f[ dirBSE ])[kbs ] = fTNW  ;
-         //(D.f[ dirTNW ])[kw  ] = fBSE  ;
-         //(D.f[ dirTSW ])[ksw ] = fBNE  ;
-         //(D.f[ dirBNW ])[kbw ] = fTSE  ;
-         //(D.f[ dirBSW ])[kbsw] = fTNE  ;
+         //(D.f[ E   ])[k   ] = fW    ;
+         //(D.f[ W   ])[kw  ] = fE    ;
+         //(D.f[ N   ])[k   ] = fS    ;
+         //(D.f[ S   ])[ks  ] = fN    ;
+         //(D.f[ T   ])[k   ] = fB    ;
+         //(D.f[ B   ])[kb  ] = fT    ;
+         //(D.f[ NE  ])[k   ] = fSW   ;
+         //(D.f[ SW  ])[ksw ] = fNE   ;
+         //(D.f[ SE  ])[ks  ] = fNW   ;
+         //(D.f[ NW  ])[kw  ] = fSE   ;
+         //(D.f[ TE  ])[k   ] = fBW   ;
+         //(D.f[ BW  ])[kbw ] = fTE   ;
+         //(D.f[ BE  ])[kb  ] = fTW   ;
+         //(D.f[ TW  ])[kw  ] = fBE   ;
+         //(D.f[ TN  ])[k   ] = fBS   ;
+         //(D.f[ BS  ])[kbs ] = fTN   ;
+         //(D.f[ BN  ])[kb  ] = fTS   ;
+         //(D.f[ TS  ])[ks  ] = fBN   ;
+         //(D.f[ REST])[k   ] = fZERO ;
+         //(D.f[ TNE ])[k   ] = fBSW  ;
+         //(D.f[ TSE ])[ks  ] = fBNW  ;
+         //(D.f[ BNE ])[kb  ] = fTSW  ;
+         //(D.f[ BSE ])[kbs ] = fTNW  ;
+         //(D.f[ TNW ])[kw  ] = fBSE  ;
+         //(D.f[ TSW ])[ksw ] = fBNE  ;
+         //(D.f[ BNW ])[kbw ] = fTSE  ;
+         //(D.f[ BSW ])[kbsw] = fTNE  ;
       }                                                                                                                    
    }
 }
@@ -3391,63 +3393,63 @@ extern "C" __global__ void LB_Kernel_Casc_SP_27(  real omega,
        Distributions27 D;
        if (EvenOrOdd==true)
        {
-          D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-          D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-          D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-          D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-          D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-          D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-          D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-          D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-          D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-          D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-          D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-          D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-          D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-          D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-          D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-          D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-          D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-          D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-          D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-          D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-          D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-          D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-          D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-          D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-          D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-          D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-          D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+          D.f[E   ] = &DDStart[E   *size_Mat];
+          D.f[W   ] = &DDStart[W   *size_Mat];
+          D.f[N   ] = &DDStart[N   *size_Mat];
+          D.f[S   ] = &DDStart[S   *size_Mat];
+          D.f[T   ] = &DDStart[T   *size_Mat];
+          D.f[B   ] = &DDStart[B   *size_Mat];
+          D.f[NE  ] = &DDStart[NE  *size_Mat];
+          D.f[SW  ] = &DDStart[SW  *size_Mat];
+          D.f[SE  ] = &DDStart[SE  *size_Mat];
+          D.f[NW  ] = &DDStart[NW  *size_Mat];
+          D.f[TE  ] = &DDStart[TE  *size_Mat];
+          D.f[BW  ] = &DDStart[BW  *size_Mat];
+          D.f[BE  ] = &DDStart[BE  *size_Mat];
+          D.f[TW  ] = &DDStart[TW  *size_Mat];
+          D.f[TN  ] = &DDStart[TN  *size_Mat];
+          D.f[BS  ] = &DDStart[BS  *size_Mat];
+          D.f[BN  ] = &DDStart[BN  *size_Mat];
+          D.f[TS  ] = &DDStart[TS  *size_Mat];
+          D.f[REST] = &DDStart[REST*size_Mat];
+          D.f[TNE ] = &DDStart[TNE *size_Mat];
+          D.f[TSW ] = &DDStart[TSW *size_Mat];
+          D.f[TSE ] = &DDStart[TSE *size_Mat];
+          D.f[TNW ] = &DDStart[TNW *size_Mat];
+          D.f[BNE ] = &DDStart[BNE *size_Mat];
+          D.f[BSW ] = &DDStart[BSW *size_Mat];
+          D.f[BSE ] = &DDStart[BSE *size_Mat];
+          D.f[BNW ] = &DDStart[BNW *size_Mat];
        }
        else
        {
-          D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-          D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-          D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-          D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-          D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-          D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-          D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-          D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-          D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-          D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-          D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-          D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-          D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-          D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-          D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-          D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-          D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-          D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-          D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-          D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-          D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-          D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-          D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-          D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-          D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-          D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-          D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+          D.f[W   ] = &DDStart[E   *size_Mat];
+          D.f[E   ] = &DDStart[W   *size_Mat];
+          D.f[S   ] = &DDStart[N   *size_Mat];
+          D.f[N   ] = &DDStart[S   *size_Mat];
+          D.f[B   ] = &DDStart[T   *size_Mat];
+          D.f[T   ] = &DDStart[B   *size_Mat];
+          D.f[SW  ] = &DDStart[NE  *size_Mat];
+          D.f[NE  ] = &DDStart[SW  *size_Mat];
+          D.f[NW  ] = &DDStart[SE  *size_Mat];
+          D.f[SE  ] = &DDStart[NW  *size_Mat];
+          D.f[BW  ] = &DDStart[TE  *size_Mat];
+          D.f[TE  ] = &DDStart[BW  *size_Mat];
+          D.f[TW  ] = &DDStart[BE  *size_Mat];
+          D.f[BE  ] = &DDStart[TW  *size_Mat];
+          D.f[BS  ] = &DDStart[TN  *size_Mat];
+          D.f[TN  ] = &DDStart[BS  *size_Mat];
+          D.f[TS  ] = &DDStart[BN  *size_Mat];
+          D.f[BN  ] = &DDStart[TS  *size_Mat];
+          D.f[REST] = &DDStart[REST*size_Mat];
+          D.f[BSW ] = &DDStart[TNE *size_Mat];
+          D.f[BNE ] = &DDStart[TSW *size_Mat];
+          D.f[BNW ] = &DDStart[TSE *size_Mat];
+          D.f[BSE ] = &DDStart[TNW *size_Mat];
+          D.f[TSW ] = &DDStart[BNE *size_Mat];
+          D.f[TNE ] = &DDStart[BSW *size_Mat];
+          D.f[TNW ] = &DDStart[BSE *size_Mat];
+          D.f[TSE ] = &DDStart[BNW *size_Mat];
        }
 
        ////////////////////////////////////////////////////////////////////////////////
@@ -3510,33 +3512,33 @@ extern "C" __global__ void LB_Kernel_Casc_SP_27(  real omega,
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        real f_E,f_W,f_N,f_S,f_T,f_B,f_NE,f_SW,f_SE,f_NW,f_TE,f_BW,f_BE,f_TW,f_TN,f_BS,f_BN,f_TS,f_ZERO, f_TNE,f_TNW,f_TSE,f_TSW, f_BNE,f_BNW,f_BSE,f_BSW;
        //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-       f_E    =  (D.f[dirE   ])[ke]+c2o27;
-       f_W    =  (D.f[dirW   ])[kw]+c2o27;
-       f_N    =  (D.f[dirN   ])[kn]+c2o27;
-       f_S    =  (D.f[dirS   ])[ks]+c2o27;
-       f_T    =  (D.f[dirT   ])[kt]+c2o27;
-       f_B    =  (D.f[dirB   ])[kb]+c2o27;
-       f_NE   =  (D.f[dirNE  ])[kne]+c1o54;
-       f_SW   =  (D.f[dirSW  ])[ksw]+c1o54;
-       f_SE   =  (D.f[dirSE  ])[kse]+c1o54;
-       f_NW   =  (D.f[dirNW  ])[knw]+c1o54;
-       f_TE   =  (D.f[dirTE  ])[kte]+c1o54;
-       f_BW   =  (D.f[dirBW  ])[kbw]+c1o54;
-       f_BE   =  (D.f[dirBE  ])[kbe]+c1o54;
-       f_TW   =  (D.f[dirTW  ])[ktw]+c1o54;
-       f_TN   =  (D.f[dirTN  ])[ktn]+c1o54;
-       f_BS   =  (D.f[dirBS  ])[kbs]+c1o54;
-       f_BN   =  (D.f[dirBN  ])[kbn]+c1o54;
-       f_TS   =  (D.f[dirTS  ])[kts]+c1o54;
-       f_ZERO =  (D.f[dirZERO])[kzero]+c8o27;
-       f_TNE   = (D.f[dirTNE ])[ktne]+c1o216;
-       f_TSW   = (D.f[dirTSW ])[ktsw]+c1o216;
-       f_TSE   = (D.f[dirTSE ])[ktse]+c1o216;
-       f_TNW   = (D.f[dirTNW ])[ktnw]+c1o216;
-       f_BNE   = (D.f[dirBNE ])[kbne]+c1o216;
-       f_BSW   = (D.f[dirBSW ])[kbsw]+c1o216;
-       f_BSE   = (D.f[dirBSE ])[kbse]+c1o216;
-       f_BNW   = (D.f[dirBNW ])[kbnw]+c1o216;
+       f_E    =  (D.f[E   ])[ke]+c2o27;
+       f_W    =  (D.f[W   ])[kw]+c2o27;
+       f_N    =  (D.f[N   ])[kn]+c2o27;
+       f_S    =  (D.f[S   ])[ks]+c2o27;
+       f_T    =  (D.f[T   ])[kt]+c2o27;
+       f_B    =  (D.f[B   ])[kb]+c2o27;
+       f_NE   =  (D.f[NE  ])[kne]+c1o54;
+       f_SW   =  (D.f[SW  ])[ksw]+c1o54;
+       f_SE   =  (D.f[SE  ])[kse]+c1o54;
+       f_NW   =  (D.f[NW  ])[knw]+c1o54;
+       f_TE   =  (D.f[TE  ])[kte]+c1o54;
+       f_BW   =  (D.f[BW  ])[kbw]+c1o54;
+       f_BE   =  (D.f[BE  ])[kbe]+c1o54;
+       f_TW   =  (D.f[TW  ])[ktw]+c1o54;
+       f_TN   =  (D.f[TN  ])[ktn]+c1o54;
+       f_BS   =  (D.f[BS  ])[kbs]+c1o54;
+       f_BN   =  (D.f[BN  ])[kbn]+c1o54;
+       f_TS   =  (D.f[TS  ])[kts]+c1o54;
+       f_ZERO =  (D.f[REST])[kzero]+c8o27;
+       f_TNE   = (D.f[TNE ])[ktne]+c1o216;
+       f_TSW   = (D.f[TSW ])[ktsw]+c1o216;
+       f_TSE   = (D.f[TSE ])[ktse]+c1o216;
+       f_TNW   = (D.f[TNW ])[ktnw]+c1o216;
+       f_BNE   = (D.f[BNE ])[kbne]+c1o216;
+       f_BSW   = (D.f[BSW ])[kbsw]+c1o216;
+       f_BSE   = (D.f[BSE ])[kbse]+c1o216;
+       f_BNW   = (D.f[BNW ])[kbnw]+c1o216;
        ////////////////////////////////////////////////////////////////////////////////
 
        if( BC == GEO_FLUID || BC == GEO_VELO)
@@ -3975,38 +3977,38 @@ extern "C" __global__ void LB_Kernel_Casc_SP_27(  real omega,
           }
         }
 
-       (D.f[ dirE  ])[ke ] = f_W-c2o27;
-       (D.f[ dirW  ])[kw ] = f_E-c2o27;
-
-       (D.f[ dirN  ])[kn ] = f_S-c2o27;
-       (D.f[ dirS  ])[ks ] = f_N-c2o27;
-       (D.f[ dirT  ])[kt ] = f_B-c2o27;
-       (D.f[ dirB  ])[kb ] = f_T-c2o27;
-
-       (D.f[ dirNE ])[kne] = f_SW-c1o54;
-       (D.f[ dirSW ])[ksw] = f_NE-c1o54;
-       (D.f[ dirSE ])[kse] = f_NW-c1o54;
-       (D.f[ dirNW ])[knw] = f_SE-c1o54;
-       (D.f[ dirTE ])[kte] = f_BW-c1o54;
-       (D.f[ dirBW ])[kbw] = f_TE-c1o54;
-       (D.f[ dirBE ])[kbe] = f_TW-c1o54;
-       (D.f[ dirTW ])[ktw] = f_BE-c1o54;
-
-       (D.f[ dirTN ])[ktn] = f_BS-c1o54;
-       (D.f[ dirBS ])[kbs] = f_TN-c1o54;
-       (D.f[ dirBN ])[kbn] = f_TS-c1o54;
-       (D.f[ dirTS ])[kts] = f_BN-c1o54;
-
-       (D.f[ dirZERO])[k] = f_ZERO-c8o27;
-
-       (D.f[ dirTNE ])[ktne] = f_BSW-c1o216;
-       (D.f[ dirTSE ])[ktse] = f_BNW-c1o216;
-       (D.f[ dirBNE ])[kbne] = f_TSW-c1o216;
-       (D.f[ dirBSE ])[kbse] = f_TNW-c1o216;
-       (D.f[ dirTNW ])[ktnw] = f_BSE-c1o216;
-       (D.f[ dirTSW ])[ktsw] = f_BNE-c1o216;
-       (D.f[ dirBNW ])[kbnw] = f_TSE-c1o216;
-       (D.f[ dirBSW ])[kbsw] = f_TNE-c1o216;
+       (D.f[ E  ])[ke ] = f_W-c2o27;
+       (D.f[ W  ])[kw ] = f_E-c2o27;
+
+       (D.f[ N  ])[kn ] = f_S-c2o27;
+       (D.f[ S  ])[ks ] = f_N-c2o27;
+       (D.f[ T  ])[kt ] = f_B-c2o27;
+       (D.f[ B  ])[kb ] = f_T-c2o27;
+
+       (D.f[ NE ])[kne] = f_SW-c1o54;
+       (D.f[ SW ])[ksw] = f_NE-c1o54;
+       (D.f[ SE ])[kse] = f_NW-c1o54;
+       (D.f[ NW ])[knw] = f_SE-c1o54;
+       (D.f[ TE ])[kte] = f_BW-c1o54;
+       (D.f[ BW ])[kbw] = f_TE-c1o54;
+       (D.f[ BE ])[kbe] = f_TW-c1o54;
+       (D.f[ TW ])[ktw] = f_BE-c1o54;
+
+       (D.f[ TN ])[ktn] = f_BS-c1o54;
+       (D.f[ BS ])[kbs] = f_TN-c1o54;
+       (D.f[ BN ])[kbn] = f_TS-c1o54;
+       (D.f[ TS ])[kts] = f_BN-c1o54;
+
+       (D.f[ REST])[k] = f_ZERO-c8o27;
+
+       (D.f[ TNE ])[ktne] = f_BSW-c1o216;
+       (D.f[ TSE ])[ktse] = f_BNW-c1o216;
+       (D.f[ BNE ])[kbne] = f_TSW-c1o216;
+       (D.f[ BSE ])[kbse] = f_TNW-c1o216;
+       (D.f[ TNW ])[ktnw] = f_BSE-c1o216;
+       (D.f[ TSW ])[ktsw] = f_BNE-c1o216;
+       (D.f[ BNW ])[kbnw] = f_TSE-c1o216;
+       (D.f[ BSW ])[kbsw] = f_TNE-c1o216;
       }
      __syncthreads();
      }
@@ -4087,63 +4089,63 @@ extern "C" __global__ void LB_Kernel_Casc27(real omega,
       Distributions27 D;
       if (EvenOrOdd==true)
       {
-         D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-         D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-         D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-         D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-         D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-         D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-         D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-         D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+         D.f[E   ] = &DDStart[E   *size_Mat];
+         D.f[W   ] = &DDStart[W   *size_Mat];
+         D.f[N   ] = &DDStart[N   *size_Mat];
+         D.f[S   ] = &DDStart[S   *size_Mat];
+         D.f[T   ] = &DDStart[T   *size_Mat];
+         D.f[B   ] = &DDStart[B   *size_Mat];
+         D.f[NE  ] = &DDStart[NE  *size_Mat];
+         D.f[SW  ] = &DDStart[SW  *size_Mat];
+         D.f[SE  ] = &DDStart[SE  *size_Mat];
+         D.f[NW  ] = &DDStart[NW  *size_Mat];
+         D.f[TE  ] = &DDStart[TE  *size_Mat];
+         D.f[BW  ] = &DDStart[BW  *size_Mat];
+         D.f[BE  ] = &DDStart[BE  *size_Mat];
+         D.f[TW  ] = &DDStart[TW  *size_Mat];
+         D.f[TN  ] = &DDStart[TN  *size_Mat];
+         D.f[BS  ] = &DDStart[BS  *size_Mat];
+         D.f[BN  ] = &DDStart[BN  *size_Mat];
+         D.f[TS  ] = &DDStart[TS  *size_Mat];
+         D.f[REST] = &DDStart[REST*size_Mat];
+         D.f[TNE ] = &DDStart[TNE *size_Mat];
+         D.f[TSW ] = &DDStart[TSW *size_Mat];
+         D.f[TSE ] = &DDStart[TSE *size_Mat];
+         D.f[TNW ] = &DDStart[TNW *size_Mat];
+         D.f[BNE ] = &DDStart[BNE *size_Mat];
+         D.f[BSW ] = &DDStart[BSW *size_Mat];
+         D.f[BSE ] = &DDStart[BSE *size_Mat];
+         D.f[BNW ] = &DDStart[BNW *size_Mat];
       }
       else
       {
-         D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-         D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-         D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-         D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-         D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-         D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-         D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-         D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-         D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-         D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-         D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-         D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-         D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-         D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-         D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-         D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+         D.f[W   ] = &DDStart[E   *size_Mat];
+         D.f[E   ] = &DDStart[W   *size_Mat];
+         D.f[S   ] = &DDStart[N   *size_Mat];
+         D.f[N   ] = &DDStart[S   *size_Mat];
+         D.f[B   ] = &DDStart[T   *size_Mat];
+         D.f[T   ] = &DDStart[B   *size_Mat];
+         D.f[SW  ] = &DDStart[NE  *size_Mat];
+         D.f[NE  ] = &DDStart[SW  *size_Mat];
+         D.f[NW  ] = &DDStart[SE  *size_Mat];
+         D.f[SE  ] = &DDStart[NW  *size_Mat];
+         D.f[BW  ] = &DDStart[TE  *size_Mat];
+         D.f[TE  ] = &DDStart[BW  *size_Mat];
+         D.f[TW  ] = &DDStart[BE  *size_Mat];
+         D.f[BE  ] = &DDStart[TW  *size_Mat];
+         D.f[BS  ] = &DDStart[TN  *size_Mat];
+         D.f[TN  ] = &DDStart[BS  *size_Mat];
+         D.f[TS  ] = &DDStart[BN  *size_Mat];
+         D.f[BN  ] = &DDStart[TS  *size_Mat];
+         D.f[REST] = &DDStart[REST*size_Mat];
+         D.f[BSW ] = &DDStart[TNE *size_Mat];
+         D.f[BNE ] = &DDStart[TSW *size_Mat];
+         D.f[BNW ] = &DDStart[TSE *size_Mat];
+         D.f[BSE ] = &DDStart[TNW *size_Mat];
+         D.f[TSW ] = &DDStart[BNE *size_Mat];
+         D.f[TNE ] = &DDStart[BSW *size_Mat];
+         D.f[TNW ] = &DDStart[BSE *size_Mat];
+         D.f[TSE ] = &DDStart[BNW *size_Mat];
       }
 
       ////////////////////////////////////////////////////////////////////////////////
@@ -4206,33 +4208,33 @@ extern "C" __global__ void LB_Kernel_Casc27(real omega,
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real f_E,f_W,f_N,f_S,f_T,f_B,f_NE,f_SW,f_SE,f_NW,f_TE,f_BW,f_BE,f_TW,f_TN,f_BS,f_BN,f_TS,f_ZERO, f_TNE,f_TNW,f_TSE,f_TSW, f_BNE,f_BNW,f_BSE,f_BSW;
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      f_E    =  (D.f[dirE   ])[ke]+c2o27;
-      f_W    =  (D.f[dirW   ])[kw]+c2o27;
-      f_N    =  (D.f[dirN   ])[kn]+c2o27;
-      f_S    =  (D.f[dirS   ])[ks]+c2o27;
-      f_T    =  (D.f[dirT   ])[kt]+c2o27;
-      f_B    =  (D.f[dirB   ])[kb]+c2o27;
-      f_NE   =  (D.f[dirNE  ])[kne]+c1o54;
-      f_SW   =  (D.f[dirSW  ])[ksw]+c1o54;
-      f_SE   =  (D.f[dirSE  ])[kse]+c1o54;
-      f_NW   =  (D.f[dirNW  ])[knw]+c1o54;
-      f_TE   =  (D.f[dirTE  ])[kte]+c1o54;
-      f_BW   =  (D.f[dirBW  ])[kbw]+c1o54;
-      f_BE   =  (D.f[dirBE  ])[kbe]+c1o54;
-      f_TW   =  (D.f[dirTW  ])[ktw]+c1o54;
-      f_TN   =  (D.f[dirTN  ])[ktn]+c1o54;
-      f_BS   =  (D.f[dirBS  ])[kbs]+c1o54;
-      f_BN   =  (D.f[dirBN  ])[kbn]+c1o54;
-      f_TS   =  (D.f[dirTS  ])[kts]+c1o54;
-      f_ZERO =  (D.f[dirZERO])[kzero]+c8o27;
-      f_TNE   = (D.f[dirTNE ])[ktne]+c1o216;
-      f_TSW   = (D.f[dirTSW ])[ktsw]+c1o216;
-      f_TSE   = (D.f[dirTSE ])[ktse]+c1o216;
-      f_TNW   = (D.f[dirTNW ])[ktnw]+c1o216;
-      f_BNE   = (D.f[dirBNE ])[kbne]+c1o216;
-      f_BSW   = (D.f[dirBSW ])[kbsw]+c1o216;
-      f_BSE   = (D.f[dirBSE ])[kbse]+c1o216;
-      f_BNW   = (D.f[dirBNW ])[kbnw]+c1o216;
+      f_E    =  (D.f[E   ])[ke]+c2o27;
+      f_W    =  (D.f[W   ])[kw]+c2o27;
+      f_N    =  (D.f[N   ])[kn]+c2o27;
+      f_S    =  (D.f[S   ])[ks]+c2o27;
+      f_T    =  (D.f[T   ])[kt]+c2o27;
+      f_B    =  (D.f[B   ])[kb]+c2o27;
+      f_NE   =  (D.f[NE  ])[kne]+c1o54;
+      f_SW   =  (D.f[SW  ])[ksw]+c1o54;
+      f_SE   =  (D.f[SE  ])[kse]+c1o54;
+      f_NW   =  (D.f[NW  ])[knw]+c1o54;
+      f_TE   =  (D.f[TE  ])[kte]+c1o54;
+      f_BW   =  (D.f[BW  ])[kbw]+c1o54;
+      f_BE   =  (D.f[BE  ])[kbe]+c1o54;
+      f_TW   =  (D.f[TW  ])[ktw]+c1o54;
+      f_TN   =  (D.f[TN  ])[ktn]+c1o54;
+      f_BS   =  (D.f[BS  ])[kbs]+c1o54;
+      f_BN   =  (D.f[BN  ])[kbn]+c1o54;
+      f_TS   =  (D.f[TS  ])[kts]+c1o54;
+      f_ZERO =  (D.f[REST])[kzero]+c8o27;
+      f_TNE   = (D.f[TNE ])[ktne]+c1o216;
+      f_TSW   = (D.f[TSW ])[ktsw]+c1o216;
+      f_TSE   = (D.f[TSE ])[ktse]+c1o216;
+      f_TNW   = (D.f[TNW ])[ktnw]+c1o216;
+      f_BNE   = (D.f[BNE ])[kbne]+c1o216;
+      f_BSW   = (D.f[BSW ])[kbsw]+c1o216;
+      f_BSE   = (D.f[BSE ])[kbse]+c1o216;
+      f_BNW   = (D.f[BNW ])[kbnw]+c1o216;
       ////////////////////////////////////////////////////////////////////////////////
 
       if( BC == GEO_FLUID || BC == GEO_VELO)
@@ -4671,38 +4673,38 @@ extern "C" __global__ void LB_Kernel_Casc27(real omega,
          }
       }
 
-      (D.f[ dirE  ])[ke ] = f_W-c2o27;
-      (D.f[ dirW  ])[kw ] = f_E-c2o27;
-
-      (D.f[ dirN  ])[kn ] = f_S-c2o27;
-      (D.f[ dirS  ])[ks ] = f_N-c2o27;
-      (D.f[ dirT  ])[kt ] = f_B-c2o27;
-      (D.f[ dirB  ])[kb ] = f_T-c2o27;
-
-      (D.f[ dirNE ])[kne] = f_SW-c1o54;
-      (D.f[ dirSW ])[ksw] = f_NE-c1o54;
-      (D.f[ dirSE ])[kse] = f_NW-c1o54;
-      (D.f[ dirNW ])[knw] = f_SE-c1o54;
-      (D.f[ dirTE ])[kte] = f_BW-c1o54;
-      (D.f[ dirBW ])[kbw] = f_TE-c1o54;
-      (D.f[ dirBE ])[kbe] = f_TW-c1o54;
-      (D.f[ dirTW ])[ktw] = f_BE-c1o54;
-
-      (D.f[ dirTN ])[ktn] = f_BS-c1o54;
-      (D.f[ dirBS ])[kbs] = f_TN-c1o54;
-      (D.f[ dirBN ])[kbn] = f_TS-c1o54;
-      (D.f[ dirTS ])[kts] = f_BN-c1o54;
-
-      (D.f[ dirZERO])[k] = f_ZERO-c8o27;
-
-      (D.f[ dirTNE ])[ktne] = f_BSW-c1o216;
-      (D.f[ dirTSE ])[ktse] = f_BNW-c1o216;
-      (D.f[ dirBNE ])[kbne] = f_TSW-c1o216;
-      (D.f[ dirBSE ])[kbse] = f_TNW-c1o216;
-      (D.f[ dirTNW ])[ktnw] = f_BSE-c1o216;
-      (D.f[ dirTSW ])[ktsw] = f_BNE-c1o216;
-      (D.f[ dirBNW ])[kbnw] = f_TSE-c1o216;
-      (D.f[ dirBSW ])[kbsw] = f_TNE-c1o216;
+      (D.f[ E  ])[ke ] = f_W-c2o27;
+      (D.f[ W  ])[kw ] = f_E-c2o27;
+
+      (D.f[ N  ])[kn ] = f_S-c2o27;
+      (D.f[ S  ])[ks ] = f_N-c2o27;
+      (D.f[ T  ])[kt ] = f_B-c2o27;
+      (D.f[ B  ])[kb ] = f_T-c2o27;
+
+      (D.f[ NE ])[kne] = f_SW-c1o54;
+      (D.f[ SW ])[ksw] = f_NE-c1o54;
+      (D.f[ SE ])[kse] = f_NW-c1o54;
+      (D.f[ NW ])[knw] = f_SE-c1o54;
+      (D.f[ TE ])[kte] = f_BW-c1o54;
+      (D.f[ BW ])[kbw] = f_TE-c1o54;
+      (D.f[ BE ])[kbe] = f_TW-c1o54;
+      (D.f[ TW ])[ktw] = f_BE-c1o54;
+
+      (D.f[ TN ])[ktn] = f_BS-c1o54;
+      (D.f[ BS ])[kbs] = f_TN-c1o54;
+      (D.f[ BN ])[kbn] = f_TS-c1o54;
+      (D.f[ TS ])[kts] = f_BN-c1o54;
+
+      (D.f[ REST])[k] = f_ZERO-c8o27;
+
+      (D.f[ TNE ])[ktne] = f_BSW-c1o216;
+      (D.f[ TSE ])[ktse] = f_BNW-c1o216;
+      (D.f[ BNE ])[kbne] = f_TSW-c1o216;
+      (D.f[ BSE ])[kbse] = f_TNW-c1o216;
+      (D.f[ TNW ])[ktnw] = f_BSE-c1o216;
+      (D.f[ TSW ])[ktsw] = f_BNE-c1o216;
+      (D.f[ BNW ])[kbnw] = f_TSE-c1o216;
+      (D.f[ BSW ])[kbsw] = f_TNE-c1o216;
    }
    __syncthreads();
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
index 1b9467416362a9b37c6c769b8955c87f540e9837..158889da63508f112e135983beedfc00debfba15 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
+++ b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp
@@ -1477,9 +1477,6 @@ void CudaMemoryManager::cudaAllocSlipBC(int lev)
 {
     unsigned int mem_size_Q_k      = sizeof(int)*parameter->getParH(lev)->slipBC.numberOfBCnodes;
     unsigned int mem_size_Q_q      = sizeof(real)*parameter->getParH(lev)->slipBC.numberOfBCnodes;
-    //unsigned int mem_size_Q_value  = sizeof(long long)*parameter->getParH(lev)->slipBC.kQ; //Geller
-    //unsigned int mem_size_Q_q_read = sizeof(real)*parameter->getParH(lev)->numberOfSlipBCnodesRead;     //Geller
-
     //Host
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->slipBC.q27[0]), parameter->getD3Qxx()*mem_size_Q_q      ));
     checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->slipBC.k),                            mem_size_Q_k      ));
diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
index d7c4a1970d34c72b2ec9ba39e863bd2873cf171d..6e7084d1bfeb5ad13c4ea9d6bc012b6a287de7b7 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
+++ b/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h
@@ -8,7 +8,7 @@
 #include "VirtualFluids_GPU_export.h"
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 
 #include <cuda_runtime.h>
 #include <helper_cuda.h>
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu b/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu
index 14c9b77ed2236ea517062944e37297747c5c3718..7a12d97d8dc5091a2479d84930b610a023aa6b17 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu
@@ -7,11 +7,12 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
-#include <lbm/constants/NumericConstants.h>
+#include "lbm/constants/NumericConstants.h"
+#include "lbm/constants/D3Q27.h"
+
 
 using namespace vf::lbm::constant;
-#include "math.h"
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
@@ -47,63 +48,63 @@ extern "C" __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -136,33 +137,33 @@ extern "C" __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k  ];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE ])[k  ];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE ])[ks ];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE ])[kb ];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k  ];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE ])[k  ];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE ])[ks ];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE ])[kb ];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -603,9 +604,9 @@ extern "C" __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			//4.
 			//////////////////////////////////////////////////////////////////////////
 			//mit limiter
-			real A = ( c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * ( omega - c6o1 ) + OxxPyyPzz * OxxPyyPzz * ( omega * ( c10o1 - c3o1 * omega ) - c4o1 )) /
+			real factorA = ( c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * ( omega - c6o1 ) + OxxPyyPzz * OxxPyyPzz * ( omega * ( c10o1 - c3o1 * omega ) - c4o1 )) /
 				        ( ( omega - OxxPyyPzz ) * ( OxxPyyPzz * ( c2o1 + c3o1 * omega ) - c8o1 * omega ) );
-			real B = ( c4o1 * omega * OxxPyyPzz * ( c9o1 * omega - c16o1 ) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * ( c2o1 + c9o1 * omega * ( omega - c2o1 ))) /
+			real factorB = ( c4o1 * omega * OxxPyyPzz * ( c9o1 * omega - c16o1 ) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * ( c2o1 + c9o1 * omega * ( omega - c2o1 ))) /
 				        ( c3o1 * ( omega - OxxPyyPzz ) * ( OxxPyyPzz * ( c2o1 + c3o1 * omega ) - c8o1 * omega ) );
 			//////////////////////////////////////////////////////////////////////////
 			//ohne limiter
@@ -623,12 +624,12 @@ extern "C" __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			//CUMbcb = -O4*(one/omega-c1o2)*Dxz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMbcb);
 			//CUMcbb = -O4*(one/omega-c1o2)*Dyz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMcbb);
 			//with bulk viscosity 
-			CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-			CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-			CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+			CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+			CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+			CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+			CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+			CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+			CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 
 
 			//////////////////////////////////////////////////////////////////////////
@@ -893,33 +894,33 @@ extern "C" __global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[ dirW   ])[kw  ] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[ dirN   ])[k   ] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[ dirS   ])[ks  ] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[ dirT   ])[k   ] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[ dirB   ])[kb  ] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[ dirNE  ])[k   ] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[ dirSW  ])[ksw ] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[ dirSE  ])[ks  ] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[ dirNW  ])[kw  ] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[ dirTE  ])[k   ] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[ dirBW  ])[kbw ] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[ dirBE  ])[kb  ] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[ dirTW  ])[kw  ] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[ dirTN  ])[k   ] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[ dirBS  ])[kbs ] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[ dirBN  ])[kb  ] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[ dirTS  ])[ks  ] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[ dirZERO])[k   ] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[ dirTNE ])[k   ] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[ dirTSE ])[ks  ] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[ dirBNE ])[kb  ] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[ dirBSE ])[kbs ] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[ dirTNW ])[kw  ] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[ dirTSW ])[ksw ] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[ dirBNW ])[kbw ] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[ dirBSW ])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[ E   ])[k   ] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[ W   ])[kw  ] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[ N   ])[k   ] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[ S   ])[ks  ] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[ T   ])[k   ] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[ B   ])[kb  ] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[ NE  ])[k   ] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[ SW  ])[ksw ] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[ SE  ])[ks  ] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[ NW  ])[kw  ] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[ TE  ])[k   ] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[ BW  ])[kbw ] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[ BE  ])[kb  ] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[ TW  ])[kw  ] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[ TN  ])[k   ] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[ BS  ])[kbs ] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[ BN  ])[kb  ] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[ TS  ])[ks  ] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[ REST])[k   ] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[ TNE ])[k   ] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[ TSE ])[ks  ] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[ BNE ])[kb  ] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[ BSE ])[kbs ] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[ TNW ])[kw  ] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[ TSW ])[ksw ] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[ BNW ])[kbw ] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[ BSW ])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -999,63 +1000,63 @@ extern "C" __global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -1088,33 +1089,33 @@ extern "C" __global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k  ];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE ])[k  ];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE ])[ks ];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE ])[kb ];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k  ];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE ])[k  ];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE ])[ks ];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE ])[kb ];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//slow
 			//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -1932,33 +1933,33 @@ extern "C" __global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[ dirW   ])[kw  ] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[ dirN   ])[k   ] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[ dirS   ])[ks  ] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[ dirT   ])[k   ] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[ dirB   ])[kb  ] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[ dirNE  ])[k   ] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[ dirSW  ])[ksw ] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[ dirSE  ])[ks  ] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[ dirNW  ])[kw  ] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[ dirTE  ])[k   ] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[ dirBW  ])[kbw ] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[ dirBE  ])[kb  ] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[ dirTW  ])[kw  ] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[ dirTN  ])[k   ] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[ dirBS  ])[kbs ] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[ dirBN  ])[kb  ] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[ dirTS  ])[ks  ] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[ dirZERO])[k   ] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[ dirTNE ])[k   ] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[ dirTSE ])[ks  ] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[ dirBNE ])[kb  ] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[ dirBSE ])[kbs ] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[ dirTNW ])[kw  ] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[ dirTSW ])[ksw ] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[ dirBNW ])[kbw ] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[ dirBSW ])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[ E   ])[k   ] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[ W   ])[kw  ] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[ N   ])[k   ] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[ S   ])[ks  ] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[ T   ])[k   ] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[ B   ])[kb  ] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[ NE  ])[k   ] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[ SW  ])[ksw ] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[ SE  ])[ks  ] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[ NW  ])[kw  ] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[ TE  ])[k   ] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[ BW  ])[kbw ] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[ BE  ])[kb  ] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[ TW  ])[kw  ] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[ TN  ])[k   ] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[ BS  ])[kbs ] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[ BN  ])[kb  ] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[ TS  ])[ks  ] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[ REST])[k   ] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[ TNE ])[k   ] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[ TSE ])[ks  ] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[ BNE ])[kb  ] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[ BSE ])[kbs ] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[ TNW ])[kw  ] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[ TSW ])[ksw ] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[ BNW ])[kbw ] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[ BSW ])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -2040,63 +2041,63 @@ extern "C" __global__ void LB_Kernel_Kum_1h_SP_27(  real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -2157,33 +2158,33 @@ extern "C" __global__ void LB_Kernel_Kum_1h_SP_27(  real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k  ];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE ])[k  ];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE ])[ks ];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE ])[kb ];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k  ];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE ])[k  ];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE ])[ks ];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE ])[kb ];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//Ship
 			real coord0X = 281.125f;//7.5f;
@@ -3159,33 +3160,33 @@ extern "C" __global__ void LB_Kernel_Kum_1h_SP_27(  real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[ dirW   ])[kw  ] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[ dirN   ])[k   ] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[ dirS   ])[ks  ] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[ dirT   ])[k   ] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[ dirB   ])[kb  ] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[ dirNE  ])[k   ] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[ dirSW  ])[ksw ] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[ dirSE  ])[ks  ] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[ dirNW  ])[kw  ] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[ dirTE  ])[k   ] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[ dirBW  ])[kbw ] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[ dirBE  ])[kb  ] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[ dirTW  ])[kw  ] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[ dirTN  ])[k   ] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[ dirBS  ])[kbs ] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[ dirBN  ])[kb  ] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[ dirTS  ])[ks  ] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[ dirZERO])[k   ] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[ dirTNE ])[k   ] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[ dirTSE ])[ks  ] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[ dirBNE ])[kb  ] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[ dirBSE ])[kbs ] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[ dirTNW ])[kw  ] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[ dirTSW ])[ksw ] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[ dirBNW ])[kbw ] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[ dirBSW ])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[ E   ])[k   ] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[ W   ])[kw  ] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[ N   ])[k   ] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[ S   ])[ks  ] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[ T   ])[k   ] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[ B   ])[kb  ] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[ NE  ])[k   ] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[ SW  ])[ksw ] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[ SE  ])[ks  ] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[ NW  ])[kw  ] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[ TE  ])[k   ] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[ BW  ])[kbw ] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[ BE  ])[kb  ] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[ TW  ])[kw  ] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[ TN  ])[k   ] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[ BS  ])[kbs ] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[ BN  ])[kb  ] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[ TS  ])[ks  ] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[ REST])[k   ] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[ TNE ])[k   ] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[ TSE ])[ks  ] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[ BNE ])[kb  ] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[ BSE ])[kbs ] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[ TNW ])[kw  ] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[ TSW ])[ksw ] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[ BNW ])[kbw ] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[ BSW ])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -3262,63 +3263,63 @@ extern "C" __global__ void LB_Kernel_Kum_New_SP_27(     real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -3379,33 +3380,33 @@ extern "C" __global__ void LB_Kernel_Kum_New_SP_27(     real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k  ];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE ])[k  ];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE ])[ks ];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE ])[kb ];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E   ])[k  ];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W   ])[kw ];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S   ])[ks ];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B   ])[kb ];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW  ])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW  ])[kw ];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE  ])[k  ];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW  ])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW  ])[kw ];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN  ])[k  ];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS  ])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS  ])[ks ];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k  ];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE ])[k  ];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW ])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE ])[ks ];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW ])[kw ];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE ])[kb ];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW ])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW ])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 			////////////////////////////////////////////////////////////////////////////////////
 			//slow
 			//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -4431,33 +4432,33 @@ extern "C" __global__ void LB_Kernel_Kum_New_SP_27(     real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[ dirW   ])[kw  ] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[ dirN   ])[k   ] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[ dirS   ])[ks  ] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[ dirT   ])[k   ] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[ dirB   ])[kb  ] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[ dirNE  ])[k   ] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[ dirSW  ])[ksw ] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[ dirSE  ])[ks  ] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[ dirNW  ])[kw  ] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[ dirTE  ])[k   ] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[ dirBW  ])[kbw ] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[ dirBE  ])[kb  ] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[ dirTW  ])[kw  ] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[ dirTN  ])[k   ] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[ dirBS  ])[kbs ] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[ dirBN  ])[kb  ] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[ dirTS  ])[ks  ] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[ dirZERO])[k   ] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[ dirTNE ])[k   ] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[ dirTSE ])[ks  ] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[ dirBNE ])[kb  ] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[ dirBSE ])[kbs ] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[ dirTNW ])[kw  ] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[ dirTSW ])[ksw ] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[ dirBNW ])[kbw ] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[ dirBSW ])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[ E   ])[k   ] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[ W   ])[kw  ] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[ N   ])[k   ] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[ S   ])[ks  ] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[ T   ])[k   ] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[ B   ])[kb  ] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[ NE  ])[k   ] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[ SW  ])[ksw ] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[ SE  ])[ks  ] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[ NW  ])[kw  ] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[ TE  ])[k   ] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[ BW  ])[kbw ] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[ BE  ])[kb  ] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[ TW  ])[kw  ] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[ TN  ])[k   ] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[ BS  ])[kbs ] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[ BN  ])[kb  ] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[ TS  ])[ks  ] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[ REST])[k   ] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[ TNE ])[k   ] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[ TSE ])[ks  ] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[ BNE ])[kb  ] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[ BSE ])[kbs ] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[ TNW ])[kw  ] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[ TSW ])[ksw ] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[ BNW ])[kbw ] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[ BSW ])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -4534,63 +4535,63 @@ extern "C" __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -4623,42 +4624,42 @@ extern "C" __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 			unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real E     = (D.f[dirE   ])[ke   ];// +  c2over27 ;
-			real W     = (D.f[dirW   ])[kw   ];// +  c2over27 ;
-			real N     = (D.f[dirN   ])[kn   ];// +  c2over27 ;
-			real S     = (D.f[dirS   ])[ks   ];// +  c2over27 ;
-			real F     = (D.f[dirT   ])[kt   ];// +  c2over27 ;
-			real B     = (D.f[dirB   ])[kb   ];// +  c2over27 ;
-			real Ne    = (D.f[dirNE  ])[kne  ];// +  c1over54 ;
-			real Sw    = (D.f[dirSW  ])[ksw  ];// +  c1over54 ;
-			real Se    = (D.f[dirSE  ])[kse  ];// +  c1over54 ;
-			real Nw    = (D.f[dirNW  ])[knw  ];// +  c1over54 ;
-			real Ef    = (D.f[dirTE  ])[kte  ];// +  c1over54 ;
-			real Wb    = (D.f[dirBW  ])[kbw  ];// +  c1over54 ;
-			real Eb    = (D.f[dirBE  ])[kbe  ];// +  c1over54 ;
-			real Wf    = (D.f[dirTW  ])[ktw  ];// +  c1over54 ;
-			real Nf    = (D.f[dirTN  ])[ktn  ];// +  c1over54 ;
-			real Sb    = (D.f[dirBS  ])[kbs  ];// +  c1over54 ;
-			real Nb    = (D.f[dirBN  ])[kbn  ];// +  c1over54 ;
-			real Sf    = (D.f[dirTS  ])[kts  ];// +  c1over54 ;
-			real R     = (D.f[dirZERO])[kzero];// +  c8over27 ;
-			real Nef   = (D.f[dirTNE ])[ktne ];// +  c1over216;
-			real Swf   = (D.f[dirTSW ])[ktsw ];// +  c1over216;
-			real Sef   = (D.f[dirTSE ])[ktse ];// +  c1over216;
-			real Nwf   = (D.f[dirTNW ])[ktnw ];// +  c1over216;
-			real Neb   = (D.f[dirBNE ])[kbne ];// +  c1over216;
-			real Swb   = (D.f[dirBSW ])[kbsw ];// +  c1over216;
-			real Seb   = (D.f[dirBSE ])[kbse ];// +  c1over216;
-			real Nwb   = (D.f[dirBNW ])[kbnw ];// +  c1over216;
+			real f_E     = (D.f[E   ])[ke   ];// +  c2over27 ;
+			real f_W     = (D.f[W   ])[kw   ];// +  c2over27 ;
+			real f_N     = (D.f[N   ])[kn   ];// +  c2over27 ;
+			real f_S     = (D.f[S   ])[ks   ];// +  c2over27 ;
+			real f_T     = (D.f[T   ])[kt   ];// +  c2over27 ;
+			real f_B     = (D.f[B   ])[kb   ];// +  c2over27 ;
+			real f_NE    = (D.f[NE  ])[kne  ];// +  c1over54 ;
+			real f_SW    = (D.f[SW  ])[ksw  ];// +  c1over54 ;
+			real f_SE    = (D.f[SE  ])[kse  ];// +  c1over54 ;
+			real f_NW    = (D.f[NW  ])[knw  ];// +  c1over54 ;
+			real f_TE    = (D.f[TE  ])[kte  ];// +  c1over54 ;
+			real f_BW    = (D.f[BW  ])[kbw  ];// +  c1over54 ;
+			real f_BE    = (D.f[BE  ])[kbe  ];// +  c1over54 ;
+			real f_TW    = (D.f[TW  ])[ktw  ];// +  c1over54 ;
+			real f_TN    = (D.f[TN  ])[ktn  ];// +  c1over54 ;
+			real f_BS    = (D.f[BS  ])[kbs  ];// +  c1over54 ;
+			real f_BN    = (D.f[BN  ])[kbn  ];// +  c1over54 ;
+			real f_TS    = (D.f[TS  ])[kts  ];// +  c1over54 ;
+			real f_R     = (D.f[REST])[kzero];// +  c8over27 ;
+			real f_TNE   = (D.f[TNE ])[ktne ];// +  c1over216;
+			real f_TSW   = (D.f[TSW ])[ktsw ];// +  c1over216;
+			real f_TSE   = (D.f[TSE ])[ktse ];// +  c1over216;
+			real f_TNW   = (D.f[TNW ])[ktnw ];// +  c1over216;
+			real f_BNE   = (D.f[BNE ])[kbne ];// +  c1over216;
+			real f_BSW   = (D.f[BSW ])[kbsw ];// +  c1over216;
+			real f_BSE   = (D.f[BSE ])[kbse ];// +  c1over216;
+			real f_BNW   = (D.f[BNW ])[kbnw ];// +  c1over216;
 			////////////////////////////////////////////////////////////////////////////////////
 			real fx = c0o1;
 			real fy = c0o1;
 			real fz = c0o1;
 			////////////////////////////////////////////////////////////////////////////////////
-			real rho=Nw+W+Sw+S+Se+E+Ne+N+R+Nf+Nb+Sf+Sb+Ef+Eb+Wf+Wb+Nwf+Nwb+Nef+Neb+Swf+Swb+Sef+Seb+F+B+c1o1;// ACHTUNG ne EINS !!!!!!!!
-			real pix=(Ne+E+Se+Ef+Eb-Nw-W-Sw-Wf-Wb+Nef+Neb+Sef+Seb-Nwf-Nwb-Swf-Swb);
-			real piy=(Ne+N+Nw+Nf+Nb-Se-S-Sw-Sf-Sb+Nef+Neb+Nwf+Nwb-Sef-Seb-Swf-Swb);
-			real piz=(Nf+Sf+Wf+Ef+F-Nb-Sb-Wb-Eb-B+Nef+Nwf+Sef+Swf-Neb-Nwb-Seb-Swb);
+			real rho=f_NW+f_W+f_SW+f_S+f_SE+f_E+f_NE+f_N+f_R+f_TN+f_BN+f_TS+f_BS+f_TE+f_BE+f_TW+f_BW+f_TNW+f_BNW+f_TNE+f_BNE+f_TSW+f_BSW+f_TSE+f_BSE+f_T+f_B+c1o1;// ACHTUNG ne EINS !!!!!!!!
+			real pix=(f_NE+f_E+f_SE+f_TE+f_BE-f_NW-f_W-f_SW-f_TW-f_BW+f_TNE+f_BNE+f_TSE+f_BSE-f_TNW-f_BNW-f_TSW-f_BSW);
+			real piy=(f_NE+f_N+f_NW+f_TN+f_BN-f_SE-f_S-f_SW-f_TS-f_BS+f_TNE+f_BNE+f_TNW+f_BNW-f_TSE-f_BSE-f_TSW-f_BSW);
+			real piz=(f_TN+f_TS+f_TW+f_TE+f_T-f_BN-f_BS-f_BW-f_BE-f_B+f_TNE+f_TNW+f_TSE+f_TSW-f_BNE-f_BNW-f_BSE-f_BSW);
 			real vvx=pix/rho + fx;
 			real vvy=piy/rho + fy;
 			real vvz=piz/rho + fz;
@@ -4666,33 +4667,33 @@ extern "C" __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 			real vy2=vvy*vvy;
 			real vz2=vvz*vvz;
 			////////////////////////////////////////////////////////////////////////////////////
-			real mfaaa = Swb;
-			real mfaab = Sw;
-			real mfaac = Swf;
-			real mfaba = Wb;
-			real mfabb = W;
-			real mfabc = Wf;
-			real mfbaa = Sb;
-			real mfbab = S;
-			real mfbac = Sf;
-			real mfbba = B;
-			real mfbbb = R;
-			real mfbbc = F;
-			real mfaca = Nwb;
-			real mfacb = Nw;
-			real mfacc = Nwf;
-			real mfcaa = Seb;
-			real mfcab = Se;
-			real mfcac = Sef;
-			real mfcca = Neb;
-			real mfccb = Ne;
-			real mfccc = Nef;
-			real mfbca = Nb;
-			real mfbcb = N;
-			real mfbcc = Nf;
-			real mfcba = Eb;
-			real mfcbb = E;
-			real mfcbc = Ef;
+			real mfaaa = f_BSW;
+			real mfaab = f_SW;
+			real mfaac = f_TSW;
+			real mfaba = f_BW;
+			real mfabb = f_W;
+			real mfabc = f_TW;
+			real mfbaa = f_BS;
+			real mfbab = f_S;
+			real mfbac = f_TS;
+			real mfbba = f_B;
+			real mfbbb = f_R;
+			real mfbbc = f_T;
+			real mfaca = f_BNW;
+			real mfacb = f_NW;
+			real mfacc = f_TNW;
+			real mfcaa = f_BSE;
+			real mfcab = f_SE;
+			real mfcac = f_TSE;
+			real mfcca = f_BNE;
+			real mfccb = f_NE;
+			real mfccc = f_TNE;
+			real mfbca = f_BN;
+			real mfbcb = f_N;
+			real mfbcc = f_TN;
+			real mfcba = f_BE;
+			real mfcbb = f_E;
+			real mfcbc = f_TE;
 			real m0, m1, m2;
 			real wadjust;
 			real qudricLimit = c1o100;
@@ -5371,33 +5372,33 @@ extern "C" __global__ void LB_Kernel_Kum_Comp_SP_27(    real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
-			(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
-			(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;
-			(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;
-			(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;
-			(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;
-			(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;
-			(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;
-			(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;
-			(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;
-			(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;
-			(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;
-			(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;
-			(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;
-			(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;
-			(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;
-			(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;
-			(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;
-			(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;
-			(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;
-			(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;
-			(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;
-			(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;
-			(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;
-			(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;
-			(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;
-			(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;
+			(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;//                                                                     
+			(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;                                                                     
+			(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;
+			(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;
+			(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;
+			(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;
+			(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;
+			(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;
+			(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;
+			(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;
+			(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;
+			(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;
+			(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;
+			(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;
+			(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;
+			(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;
+			(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;
+			(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;
+			(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;
+			(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;
+			(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;
+			(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;
+			(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;
+			(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;
+			(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;
+			(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;
+			(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
@@ -5477,63 +5478,63 @@ extern "C" __global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -5567,33 +5568,33 @@ extern "C" __global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k   ];
-			real mfabb = (D.f[dirW   ])[kw  ];
-			real mfbcb = (D.f[dirN   ])[k   ];
-			real mfbab = (D.f[dirS   ])[ks  ];
-			real mfbbc = (D.f[dirT   ])[k   ];
-			real mfbba = (D.f[dirB   ])[kb  ];
-			real mfccb = (D.f[dirNE  ])[k   ];
-			real mfaab = (D.f[dirSW  ])[ksw ];
-			real mfcab = (D.f[dirSE  ])[ks  ];
-			real mfacb = (D.f[dirNW  ])[kw  ];
-			real mfcbc = (D.f[dirTE  ])[k   ];
-			real mfaba = (D.f[dirBW  ])[kbw ];
-			real mfcba = (D.f[dirBE  ])[kb  ];
-			real mfabc = (D.f[dirTW  ])[kw  ];
-			real mfbcc = (D.f[dirTN  ])[k   ];
-			real mfbaa = (D.f[dirBS  ])[kbs ];
-			real mfbca = (D.f[dirBN  ])[kb  ];
-			real mfbac = (D.f[dirTS  ])[ks  ];
-			real mfbbb = (D.f[dirZERO])[k   ];
-			real mfccc = (D.f[dirTNE ])[k   ];
-			real mfaac = (D.f[dirTSW ])[ksw ];
-			real mfcac = (D.f[dirTSE ])[ks  ];
-			real mfacc = (D.f[dirTNW ])[kw  ];
-			real mfcca = (D.f[dirBNE ])[kb  ];
-			real mfaaa = (D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs ];
-			real mfaca = (D.f[dirBNW ])[kbw ];
+			real mfcbb = (D.f[E   ])[k   ];
+			real mfabb = (D.f[W   ])[kw  ];
+			real mfbcb = (D.f[N   ])[k   ];
+			real mfbab = (D.f[S   ])[ks  ];
+			real mfbbc = (D.f[T   ])[k   ];
+			real mfbba = (D.f[B   ])[kb  ];
+			real mfccb = (D.f[NE  ])[k   ];
+			real mfaab = (D.f[SW  ])[ksw ];
+			real mfcab = (D.f[SE  ])[ks  ];
+			real mfacb = (D.f[NW  ])[kw  ];
+			real mfcbc = (D.f[TE  ])[k   ];
+			real mfaba = (D.f[BW  ])[kbw ];
+			real mfcba = (D.f[BE  ])[kb  ];
+			real mfabc = (D.f[TW  ])[kw  ];
+			real mfbcc = (D.f[TN  ])[k   ];
+			real mfbaa = (D.f[BS  ])[kbs ];
+			real mfbca = (D.f[BN  ])[kb  ];
+			real mfbac = (D.f[TS  ])[ks  ];
+			real mfbbb = (D.f[REST])[k   ];
+			real mfccc = (D.f[TNE ])[k   ];
+			real mfaac = (D.f[TSW ])[ksw ];
+			real mfcac = (D.f[TSE ])[ks  ];
+			real mfacc = (D.f[TNW ])[kw  ];
+			real mfcca = (D.f[BNE ])[kb  ];
+			real mfaaa = (D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs ];
+			real mfaca = (D.f[BNW ])[kbw ];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -6348,33 +6349,33 @@ extern "C" __global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27(
 					((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
 			mfbbb += drho - drhoPost;
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE   ])[k   ] = mfabb;                                                                   
-			(D.f[dirW   ])[kw  ] = mfcbb;                                                                 
-			(D.f[dirN   ])[k   ] = mfbab;
-			(D.f[dirS   ])[ks  ] = mfbcb;
-			(D.f[dirT   ])[k   ] = mfbba;
-			(D.f[dirB   ])[kb  ] = mfbbc;
-			(D.f[dirNE  ])[k   ] = mfaab;
-			(D.f[dirSW  ])[ksw ] = mfccb;
-			(D.f[dirSE  ])[ks  ] = mfacb;
-			(D.f[dirNW  ])[kw  ] = mfcab;
-			(D.f[dirTE  ])[k   ] = mfaba;
-			(D.f[dirBW  ])[kbw ] = mfcbc;
-			(D.f[dirBE  ])[kb  ] = mfabc;
-			(D.f[dirTW  ])[kw  ] = mfcba;
-			(D.f[dirTN  ])[k   ] = mfbaa;
-			(D.f[dirBS  ])[kbs ] = mfbcc;
-			(D.f[dirBN  ])[kb  ] = mfbac;
-			(D.f[dirTS  ])[ks  ] = mfbca;
-			(D.f[dirZERO])[k   ] = mfbbb;
-			(D.f[dirTNE ])[k   ] = mfaaa;
-			(D.f[dirTSE ])[ks  ] = mfaca;
-			(D.f[dirBNE ])[kb  ] = mfaac;
-			(D.f[dirBSE ])[kbs ] = mfacc;
-			(D.f[dirTNW ])[kw  ] = mfcaa;
-			(D.f[dirTSW ])[ksw ] = mfcca;
-			(D.f[dirBNW ])[kbw ] = mfcac;
-			(D.f[dirBSW ])[kbsw] = mfccc;
+			(D.f[E   ])[k   ] = mfabb;                                                                   
+			(D.f[W   ])[kw  ] = mfcbb;                                                                 
+			(D.f[N   ])[k   ] = mfbab;
+			(D.f[S   ])[ks  ] = mfbcb;
+			(D.f[T   ])[k   ] = mfbba;
+			(D.f[B   ])[kb  ] = mfbbc;
+			(D.f[NE  ])[k   ] = mfaab;
+			(D.f[SW  ])[ksw ] = mfccb;
+			(D.f[SE  ])[ks  ] = mfacb;
+			(D.f[NW  ])[kw  ] = mfcab;
+			(D.f[TE  ])[k   ] = mfaba;
+			(D.f[BW  ])[kbw ] = mfcbc;
+			(D.f[BE  ])[kb  ] = mfabc;
+			(D.f[TW  ])[kw  ] = mfcba;
+			(D.f[TN  ])[k   ] = mfbaa;
+			(D.f[BS  ])[kbs ] = mfbcc;
+			(D.f[BN  ])[kb  ] = mfbac;
+			(D.f[TS  ])[ks  ] = mfbca;
+			(D.f[REST])[k   ] = mfbbb;
+			(D.f[TNE ])[k   ] = mfaaa;
+			(D.f[TSE ])[ks  ] = mfaca;
+			(D.f[BNE ])[kb  ] = mfaac;
+			(D.f[BSE ])[kbs ] = mfacc;
+			(D.f[TNW ])[kw  ] = mfcaa;
+			(D.f[TSW ])[ksw ] = mfcca;
+			(D.f[BNW ])[kbw ] = mfcac;
+			(D.f[BSW ])[kbsw] = mfccc;
 		}
 	}
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu b/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu
index 9dc75cfa6019a29350263f9a554aa9a489566cfa..19683722f50f402fdc6dfdf5c7774d41b178874c 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu
@@ -32,13 +32,15 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
 #include "math.h"
 
-#include <lbm/Chimera.h>
+#include "lbm/Chimera.h"
 
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -76,63 +78,63 @@ extern "C" __global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_
             Distributions27 D;
             if (EvenOrOdd == true)
             {
-                D.f[dirE] = &DDStart[dirE   *size_Mat];
-                D.f[dirW] = &DDStart[dirW   *size_Mat];
-                D.f[dirN] = &DDStart[dirN   *size_Mat];
-                D.f[dirS] = &DDStart[dirS   *size_Mat];
-                D.f[dirT] = &DDStart[dirT   *size_Mat];
-                D.f[dirB] = &DDStart[dirB   *size_Mat];
-                D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-                D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-                D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-                D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-                D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-                D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-                D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-                D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-                D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-                D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-                D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-                D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-                D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-                D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-                D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-                D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-                D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-                D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-                D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-                D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-                D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+                D.f[E] = &DDStart[E   *size_Mat];
+                D.f[W] = &DDStart[W   *size_Mat];
+                D.f[N] = &DDStart[N   *size_Mat];
+                D.f[S] = &DDStart[S   *size_Mat];
+                D.f[T] = &DDStart[T   *size_Mat];
+                D.f[B] = &DDStart[B   *size_Mat];
+                D.f[NE] = &DDStart[NE  *size_Mat];
+                D.f[SW] = &DDStart[SW  *size_Mat];
+                D.f[SE] = &DDStart[SE  *size_Mat];
+                D.f[NW] = &DDStart[NW  *size_Mat];
+                D.f[TE] = &DDStart[TE  *size_Mat];
+                D.f[BW] = &DDStart[BW  *size_Mat];
+                D.f[BE] = &DDStart[BE  *size_Mat];
+                D.f[TW] = &DDStart[TW  *size_Mat];
+                D.f[TN] = &DDStart[TN  *size_Mat];
+                D.f[BS] = &DDStart[BS  *size_Mat];
+                D.f[BN] = &DDStart[BN  *size_Mat];
+                D.f[TS] = &DDStart[TS  *size_Mat];
+                D.f[REST] = &DDStart[REST*size_Mat];
+                D.f[TNE] = &DDStart[TNE *size_Mat];
+                D.f[TSW] = &DDStart[TSW *size_Mat];
+                D.f[TSE] = &DDStart[TSE *size_Mat];
+                D.f[TNW] = &DDStart[TNW *size_Mat];
+                D.f[BNE] = &DDStart[BNE *size_Mat];
+                D.f[BSW] = &DDStart[BSW *size_Mat];
+                D.f[BSE] = &DDStart[BSE *size_Mat];
+                D.f[BNW] = &DDStart[BNW *size_Mat];
             }
             else
             {
-                D.f[dirW] = &DDStart[dirE   *size_Mat];
-                D.f[dirE] = &DDStart[dirW   *size_Mat];
-                D.f[dirS] = &DDStart[dirN   *size_Mat];
-                D.f[dirN] = &DDStart[dirS   *size_Mat];
-                D.f[dirB] = &DDStart[dirT   *size_Mat];
-                D.f[dirT] = &DDStart[dirB   *size_Mat];
-                D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-                D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-                D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-                D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-                D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-                D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-                D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-                D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-                D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-                D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-                D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-                D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-                D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-                D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-                D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-                D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-                D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-                D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-                D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-                D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-                D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+                D.f[W] = &DDStart[E   *size_Mat];
+                D.f[E] = &DDStart[W   *size_Mat];
+                D.f[S] = &DDStart[N   *size_Mat];
+                D.f[N] = &DDStart[S   *size_Mat];
+                D.f[B] = &DDStart[T   *size_Mat];
+                D.f[T] = &DDStart[B   *size_Mat];
+                D.f[SW] = &DDStart[NE  *size_Mat];
+                D.f[NE] = &DDStart[SW  *size_Mat];
+                D.f[NW] = &DDStart[SE  *size_Mat];
+                D.f[SE] = &DDStart[NW  *size_Mat];
+                D.f[BW] = &DDStart[TE  *size_Mat];
+                D.f[TE] = &DDStart[BW  *size_Mat];
+                D.f[TW] = &DDStart[BE  *size_Mat];
+                D.f[BE] = &DDStart[TW  *size_Mat];
+                D.f[BS] = &DDStart[TN  *size_Mat];
+                D.f[TN] = &DDStart[BS  *size_Mat];
+                D.f[TS] = &DDStart[BN  *size_Mat];
+                D.f[BN] = &DDStart[TS  *size_Mat];
+                D.f[REST] = &DDStart[REST*size_Mat];
+                D.f[BSW] = &DDStart[TNE *size_Mat];
+                D.f[BNE] = &DDStart[TSW *size_Mat];
+                D.f[BNW] = &DDStart[TSE *size_Mat];
+                D.f[BSE] = &DDStart[TNW *size_Mat];
+                D.f[TSW] = &DDStart[BNE *size_Mat];
+                D.f[TNE] = &DDStart[BSW *size_Mat];
+                D.f[TNW] = &DDStart[BSE *size_Mat];
+                D.f[TSE] = &DDStart[BNW *size_Mat];
             }
 
             ////////////////////////////////////////////////////////////////////////////////
@@ -168,33 +170,33 @@ extern "C" __global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_
 
 
             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-            real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-            real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-            real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-            real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-            real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-            real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-            real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-            real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-            real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-            real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-            real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-            real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-            real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-            real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-            real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-            real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-            real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-            real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-            real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-            real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-            real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-            real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-            real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-            real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-            real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-            real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+            real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+            real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+            real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+            real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+            real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+            real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+            real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+            real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+            real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+            real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+            real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+            real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+            real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+            real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+            real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+            real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+            real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+            real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+            real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+            real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+            real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+            real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+            real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+            real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+            real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+            real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+            real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
                                                ////////////////////////////////////////////////////////////////////////////////////
             real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
                 (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -884,33 +886,33 @@ extern "C" __global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_
             //		((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
             //mfbbb += drho - drhoPost;
             ////////////////////////////////////////////////////////////////////////////////////
-            (D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-            (D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-            (D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-            (D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-            (D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-            (D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-            (D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-            (D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-            (D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-            (D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-            (D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-            (D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-            (D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-            (D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-            (D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-            (D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-            (D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-            (D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-            (D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-            (D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-            (D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-            (D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-            (D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-            (D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-            (D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-            (D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-            (D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+            (D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+            (D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+            (D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+            (D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+            (D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+            (D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+            (D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+            (D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+            (D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+            (D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+            (D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+            (D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+            (D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+            (D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+            (D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+            (D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+            (D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+            (D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+            (D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+            (D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+            (D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+            (D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+            (D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+            (D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+            (D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+            (D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+            (D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
                                         ////////////////////////////////////////////////////////////////////////////////////
         }
     }
@@ -991,63 +993,63 @@ extern "C" __global__ void Cumulant_One_preconditioned_chim_Comp_SP_27(
             Distributions27 D;
             if (EvenOrOdd == true)
             {
-                D.f[dirE] = &DDStart[dirE   *size_Mat];
-                D.f[dirW] = &DDStart[dirW   *size_Mat];
-                D.f[dirN] = &DDStart[dirN   *size_Mat];
-                D.f[dirS] = &DDStart[dirS   *size_Mat];
-                D.f[dirT] = &DDStart[dirT   *size_Mat];
-                D.f[dirB] = &DDStart[dirB   *size_Mat];
-                D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-                D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-                D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-                D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-                D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-                D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-                D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-                D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-                D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-                D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-                D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-                D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-                D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-                D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-                D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-                D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-                D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-                D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-                D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-                D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-                D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+                D.f[E] = &DDStart[E   *size_Mat];
+                D.f[W] = &DDStart[W   *size_Mat];
+                D.f[N] = &DDStart[N   *size_Mat];
+                D.f[S] = &DDStart[S   *size_Mat];
+                D.f[T] = &DDStart[T   *size_Mat];
+                D.f[B] = &DDStart[B   *size_Mat];
+                D.f[NE] = &DDStart[NE  *size_Mat];
+                D.f[SW] = &DDStart[SW  *size_Mat];
+                D.f[SE] = &DDStart[SE  *size_Mat];
+                D.f[NW] = &DDStart[NW  *size_Mat];
+                D.f[TE] = &DDStart[TE  *size_Mat];
+                D.f[BW] = &DDStart[BW  *size_Mat];
+                D.f[BE] = &DDStart[BE  *size_Mat];
+                D.f[TW] = &DDStart[TW  *size_Mat];
+                D.f[TN] = &DDStart[TN  *size_Mat];
+                D.f[BS] = &DDStart[BS  *size_Mat];
+                D.f[BN] = &DDStart[BN  *size_Mat];
+                D.f[TS] = &DDStart[TS  *size_Mat];
+                D.f[REST] = &DDStart[REST*size_Mat];
+                D.f[TNE] = &DDStart[TNE *size_Mat];
+                D.f[TSW] = &DDStart[TSW *size_Mat];
+                D.f[TSE] = &DDStart[TSE *size_Mat];
+                D.f[TNW] = &DDStart[TNW *size_Mat];
+                D.f[BNE] = &DDStart[BNE *size_Mat];
+                D.f[BSW] = &DDStart[BSW *size_Mat];
+                D.f[BSE] = &DDStart[BSE *size_Mat];
+                D.f[BNW] = &DDStart[BNW *size_Mat];
             }
             else
             {
-                D.f[dirW] = &DDStart[dirE   *size_Mat];
-                D.f[dirE] = &DDStart[dirW   *size_Mat];
-                D.f[dirS] = &DDStart[dirN   *size_Mat];
-                D.f[dirN] = &DDStart[dirS   *size_Mat];
-                D.f[dirB] = &DDStart[dirT   *size_Mat];
-                D.f[dirT] = &DDStart[dirB   *size_Mat];
-                D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-                D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-                D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-                D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-                D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-                D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-                D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-                D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-                D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-                D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-                D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-                D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-                D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-                D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-                D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-                D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-                D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-                D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-                D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-                D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-                D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+                D.f[W] = &DDStart[E   *size_Mat];
+                D.f[E] = &DDStart[W   *size_Mat];
+                D.f[S] = &DDStart[N   *size_Mat];
+                D.f[N] = &DDStart[S   *size_Mat];
+                D.f[B] = &DDStart[T   *size_Mat];
+                D.f[T] = &DDStart[B   *size_Mat];
+                D.f[SW] = &DDStart[NE  *size_Mat];
+                D.f[NE] = &DDStart[SW  *size_Mat];
+                D.f[NW] = &DDStart[SE  *size_Mat];
+                D.f[SE] = &DDStart[NW  *size_Mat];
+                D.f[BW] = &DDStart[TE  *size_Mat];
+                D.f[TE] = &DDStart[BW  *size_Mat];
+                D.f[TW] = &DDStart[BE  *size_Mat];
+                D.f[BE] = &DDStart[TW  *size_Mat];
+                D.f[BS] = &DDStart[TN  *size_Mat];
+                D.f[TN] = &DDStart[BS  *size_Mat];
+                D.f[TS] = &DDStart[BN  *size_Mat];
+                D.f[BN] = &DDStart[TS  *size_Mat];
+                D.f[REST] = &DDStart[REST*size_Mat];
+                D.f[BSW] = &DDStart[TNE *size_Mat];
+                D.f[BNE] = &DDStart[TSW *size_Mat];
+                D.f[BNW] = &DDStart[TSE *size_Mat];
+                D.f[BSE] = &DDStart[TNW *size_Mat];
+                D.f[TSW] = &DDStart[BNE *size_Mat];
+                D.f[TNE] = &DDStart[BSW *size_Mat];
+                D.f[TNW] = &DDStart[BSE *size_Mat];
+                D.f[TSE] = &DDStart[BNW *size_Mat];
             }
 
             ////////////////////////////////////////////////////////////////////////////////
@@ -1083,33 +1085,33 @@ extern "C" __global__ void Cumulant_One_preconditioned_chim_Comp_SP_27(
 
 
             //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-            real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-            real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-            real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-            real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-            real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-            real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-            real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-            real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-            real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-            real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-            real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-            real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-            real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-            real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-            real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-            real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-            real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-            real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-            real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-            real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-            real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-            real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-            real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-            real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-            real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-            real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-            real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+            real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+            real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+            real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+            real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+            real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+            real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+            real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+            real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+            real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+            real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+            real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+            real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+            real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+            real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+            real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+            real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+            real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+            real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+            real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+            real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+            real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+            real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+            real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+            real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+            real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+            real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+            real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
                                                ////////////////////////////////////////////////////////////////////////////////////
             real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
                 (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1680,33 +1682,33 @@ extern "C" __global__ void Cumulant_One_preconditioned_chim_Comp_SP_27(
                     ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
             mfbbb += drho - drhoPost;
             ////////////////////////////////////////////////////////////////////////////////////
-            (D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-            (D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-            (D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-            (D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-            (D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-            (D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-            (D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-            (D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-            (D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-            (D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-            (D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-            (D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-            (D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-            (D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-            (D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-            (D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-            (D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-            (D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-            (D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-            (D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-            (D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-            (D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-            (D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-            (D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-            (D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-            (D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-            (D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+            (D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+            (D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+            (D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+            (D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+            (D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+            (D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+            (D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+            (D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+            (D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+            (D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+            (D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+            (D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+            (D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+            (D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+            (D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+            (D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+            (D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+            (D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+            (D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+            (D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+            (D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+            (D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+            (D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+            (D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+            (D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+            (D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+            (D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
             ////////////////////////////////////////////////////////////////////////////////////
         }
     }
@@ -1787,63 +1789,63 @@ extern "C" __global__ void Cumulant_One_chim_Comp_SP_27(
             Distributions27 D;
             if (EvenOrOdd == true)
             {
-                D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-                D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-                D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-                D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-                D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-                D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-                D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-                D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-                D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-                D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-                D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-                D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-                D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-                D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-                D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-                D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-                D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-                D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-                D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-                D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-                D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-                D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-                D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-                D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-                D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-                D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-                D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+                D.f[E   ] = &DDStart[E   *size_Mat];
+                D.f[W   ] = &DDStart[W   *size_Mat];
+                D.f[N   ] = &DDStart[N   *size_Mat];
+                D.f[S   ] = &DDStart[S   *size_Mat];
+                D.f[T   ] = &DDStart[T   *size_Mat];
+                D.f[B   ] = &DDStart[B   *size_Mat];
+                D.f[NE  ] = &DDStart[NE  *size_Mat];
+                D.f[SW  ] = &DDStart[SW  *size_Mat];
+                D.f[SE  ] = &DDStart[SE  *size_Mat];
+                D.f[NW  ] = &DDStart[NW  *size_Mat];
+                D.f[TE  ] = &DDStart[TE  *size_Mat];
+                D.f[BW  ] = &DDStart[BW  *size_Mat];
+                D.f[BE  ] = &DDStart[BE  *size_Mat];
+                D.f[TW  ] = &DDStart[TW  *size_Mat];
+                D.f[TN  ] = &DDStart[TN  *size_Mat];
+                D.f[BS  ] = &DDStart[BS  *size_Mat];
+                D.f[BN  ] = &DDStart[BN  *size_Mat];
+                D.f[TS  ] = &DDStart[TS  *size_Mat];
+                D.f[REST] = &DDStart[REST*size_Mat];
+                D.f[TNE ] = &DDStart[TNE *size_Mat];
+                D.f[TSW ] = &DDStart[TSW *size_Mat];
+                D.f[TSE ] = &DDStart[TSE *size_Mat];
+                D.f[TNW ] = &DDStart[TNW *size_Mat];
+                D.f[BNE ] = &DDStart[BNE *size_Mat];
+                D.f[BSW ] = &DDStart[BSW *size_Mat];
+                D.f[BSE ] = &DDStart[BSE *size_Mat];
+                D.f[BNW ] = &DDStart[BNW *size_Mat];
             }
             else
             {
-                D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-                D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-                D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-                D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-                D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-                D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-                D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-                D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-                D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-                D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-                D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-                D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-                D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-                D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-                D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-                D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-                D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-                D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-                D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-                D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-                D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-                D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-                D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-                D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-                D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-                D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-                D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+                D.f[W   ] = &DDStart[E   *size_Mat];
+                D.f[E   ] = &DDStart[W   *size_Mat];
+                D.f[S   ] = &DDStart[N   *size_Mat];
+                D.f[N   ] = &DDStart[S   *size_Mat];
+                D.f[B   ] = &DDStart[T   *size_Mat];
+                D.f[T   ] = &DDStart[B   *size_Mat];
+                D.f[SW  ] = &DDStart[NE  *size_Mat];
+                D.f[NE  ] = &DDStart[SW  *size_Mat];
+                D.f[NW  ] = &DDStart[SE  *size_Mat];
+                D.f[SE  ] = &DDStart[NW  *size_Mat];
+                D.f[BW  ] = &DDStart[TE  *size_Mat];
+                D.f[TE  ] = &DDStart[BW  *size_Mat];
+                D.f[TW  ] = &DDStart[BE  *size_Mat];
+                D.f[BE  ] = &DDStart[TW  *size_Mat];
+                D.f[BS  ] = &DDStart[TN  *size_Mat];
+                D.f[TN  ] = &DDStart[BS  *size_Mat];
+                D.f[TS  ] = &DDStart[BN  *size_Mat];
+                D.f[BN  ] = &DDStart[TS  *size_Mat];
+                D.f[REST] = &DDStart[REST*size_Mat];
+                D.f[BSW ] = &DDStart[TNE *size_Mat];
+                D.f[BNE ] = &DDStart[TSW *size_Mat];
+                D.f[BNW ] = &DDStart[TSE *size_Mat];
+                D.f[BSE ] = &DDStart[TNW *size_Mat];
+                D.f[TSW ] = &DDStart[BNE *size_Mat];
+                D.f[TNE ] = &DDStart[BSW *size_Mat];
+                D.f[TNW ] = &DDStart[BSE *size_Mat];
+                D.f[TSE ] = &DDStart[BNW *size_Mat];
             }
             ////////////////////////////////////////////////////////////////////////////////
             //index
@@ -1855,33 +1857,33 @@ extern "C" __global__ void Cumulant_One_chim_Comp_SP_27(
             unsigned int kbs = neighborZ[ks];
             unsigned int kbsw = neighborZ[ksw];
             ////////////////////////////////////////////////////////////////////////////////////
-            real mfcbb = (D.f[dirE   ])[k   ];
-            real mfabb = (D.f[dirW   ])[kw  ];
-            real mfbcb = (D.f[dirN   ])[k   ];
-            real mfbab = (D.f[dirS   ])[ks  ];
-            real mfbbc = (D.f[dirT   ])[k   ];
-            real mfbba = (D.f[dirB   ])[kb  ];
-            real mfccb = (D.f[dirNE  ])[k   ];
-            real mfaab = (D.f[dirSW  ])[ksw ];
-            real mfcab = (D.f[dirSE  ])[ks  ];
-            real mfacb = (D.f[dirNW  ])[kw  ];
-            real mfcbc = (D.f[dirTE  ])[k   ];
-            real mfaba = (D.f[dirBW  ])[kbw ];
-            real mfcba = (D.f[dirBE  ])[kb  ];
-            real mfabc = (D.f[dirTW  ])[kw  ];
-            real mfbcc = (D.f[dirTN  ])[k   ];
-            real mfbaa = (D.f[dirBS  ])[kbs ];
-            real mfbca = (D.f[dirBN  ])[kb  ];
-            real mfbac = (D.f[dirTS  ])[ks  ];
-            real mfbbb = (D.f[dirZERO])[k   ];
-            real mfccc = (D.f[dirTNE ])[k   ];
-            real mfaac = (D.f[dirTSW ])[ksw ];
-            real mfcac = (D.f[dirTSE ])[ks  ];
-            real mfacc = (D.f[dirTNW ])[kw  ];
-            real mfcca = (D.f[dirBNE ])[kb  ];
-            real mfaaa = (D.f[dirBSW ])[kbsw];
-            real mfcaa = (D.f[dirBSE ])[kbs ];
-            real mfaca = (D.f[dirBNW ])[kbw ];
+            real mfcbb = (D.f[E   ])[k   ];
+            real mfabb = (D.f[W   ])[kw  ];
+            real mfbcb = (D.f[N   ])[k   ];
+            real mfbab = (D.f[S   ])[ks  ];
+            real mfbbc = (D.f[T   ])[k   ];
+            real mfbba = (D.f[B   ])[kb  ];
+            real mfccb = (D.f[NE  ])[k   ];
+            real mfaab = (D.f[SW  ])[ksw ];
+            real mfcab = (D.f[SE  ])[ks  ];
+            real mfacb = (D.f[NW  ])[kw  ];
+            real mfcbc = (D.f[TE  ])[k   ];
+            real mfaba = (D.f[BW  ])[kbw ];
+            real mfcba = (D.f[BE  ])[kb  ];
+            real mfabc = (D.f[TW  ])[kw  ];
+            real mfbcc = (D.f[TN  ])[k   ];
+            real mfbaa = (D.f[BS  ])[kbs ];
+            real mfbca = (D.f[BN  ])[kb  ];
+            real mfbac = (D.f[TS  ])[ks  ];
+            real mfbbb = (D.f[REST])[k   ];
+            real mfccc = (D.f[TNE ])[k   ];
+            real mfaac = (D.f[TSW ])[ksw ];
+            real mfcac = (D.f[TSE ])[ks  ];
+            real mfacc = (D.f[TNW ])[kw  ];
+            real mfcca = (D.f[BNE ])[kb  ];
+            real mfaaa = (D.f[BSW ])[kbsw];
+            real mfcaa = (D.f[BSE ])[kbs ];
+            real mfaca = (D.f[BNW ])[kbw ];
             ////////////////////////////////////////////////////////////////////////////////////
             real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
                 (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -2202,33 +2204,33 @@ extern "C" __global__ void Cumulant_One_chim_Comp_SP_27(
                     ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
             mfbbb += drho - drhoPost;
             ////////////////////////////////////////////////////////////////////////////////////
-            (D.f[dirE   ])[k   ] = mfabb;                                                                   
-            (D.f[dirW   ])[kw  ] = mfcbb;                                                                 
-            (D.f[dirN   ])[k   ] = mfbab;
-            (D.f[dirS   ])[ks  ] = mfbcb;
-            (D.f[dirT   ])[k   ] = mfbba;
-            (D.f[dirB   ])[kb  ] = mfbbc;
-            (D.f[dirNE  ])[k   ] = mfaab;
-            (D.f[dirSW  ])[ksw ] = mfccb;
-            (D.f[dirSE  ])[ks  ] = mfacb;
-            (D.f[dirNW  ])[kw  ] = mfcab;
-            (D.f[dirTE  ])[k   ] = mfaba;
-            (D.f[dirBW  ])[kbw ] = mfcbc;
-            (D.f[dirBE  ])[kb  ] = mfabc;
-            (D.f[dirTW  ])[kw  ] = mfcba;
-            (D.f[dirTN  ])[k   ] = mfbaa;
-            (D.f[dirBS  ])[kbs ] = mfbcc;
-            (D.f[dirBN  ])[kb  ] = mfbac;
-            (D.f[dirTS  ])[ks  ] = mfbca;
-            (D.f[dirZERO])[k   ] = mfbbb;
-            (D.f[dirTNE ])[k   ] = mfaaa;
-            (D.f[dirTSE ])[ks  ] = mfaca;
-            (D.f[dirBNE ])[kb  ] = mfaac;
-            (D.f[dirBSE ])[kbs ] = mfacc;
-            (D.f[dirTNW ])[kw  ] = mfcaa;
-            (D.f[dirTSW ])[ksw ] = mfcca;
-            (D.f[dirBNW ])[kbw ] = mfcac;
-            (D.f[dirBSW ])[kbsw] = mfccc;
+            (D.f[E   ])[k   ] = mfabb;                                                                   
+            (D.f[W   ])[kw  ] = mfcbb;                                                                 
+            (D.f[N   ])[k   ] = mfbab;
+            (D.f[S   ])[ks  ] = mfbcb;
+            (D.f[T   ])[k   ] = mfbba;
+            (D.f[B   ])[kb  ] = mfbbc;
+            (D.f[NE  ])[k   ] = mfaab;
+            (D.f[SW  ])[ksw ] = mfccb;
+            (D.f[SE  ])[ks  ] = mfacb;
+            (D.f[NW  ])[kw  ] = mfcab;
+            (D.f[TE  ])[k   ] = mfaba;
+            (D.f[BW  ])[kbw ] = mfcbc;
+            (D.f[BE  ])[kb  ] = mfabc;
+            (D.f[TW  ])[kw  ] = mfcba;
+            (D.f[TN  ])[k   ] = mfbaa;
+            (D.f[BS  ])[kbs ] = mfbcc;
+            (D.f[BN  ])[kb  ] = mfbac;
+            (D.f[TS  ])[ks  ] = mfbca;
+            (D.f[REST])[k   ] = mfbbb;
+            (D.f[TNE ])[k   ] = mfaaa;
+            (D.f[TSE ])[ks  ] = mfaca;
+            (D.f[BNE ])[kb  ] = mfaac;
+            (D.f[BSE ])[kbs ] = mfacc;
+            (D.f[TNW ])[kw  ] = mfcaa;
+            (D.f[TSW ])[ksw ] = mfcca;
+            (D.f[BNW ])[kbw ] = mfcac;
+            (D.f[BSW ])[kbsw] = mfccc;
         }
     }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu b/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu
index 8763482321aaa1c1dc5f21794192a5227a8f377b..e6b696768bfa604f01bd92d34dde95100b8a29f6 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu
@@ -7,10 +7,12 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
 #include "math.h"
 
 /////////////////////////////////////////////////////////////////////////////////
@@ -52,83 +54,83 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions6 G;
 			if (EvenOrOdd == true)
 			{
-				G.g[dirE] = &G6[dirE   *size_Mat];
-				G.g[dirW] = &G6[dirW   *size_Mat];
-				G.g[dirN] = &G6[dirN   *size_Mat];
-				G.g[dirS] = &G6[dirS   *size_Mat];
-				G.g[dirT] = &G6[dirT   *size_Mat];
-				G.g[dirB] = &G6[dirB   *size_Mat];
+				G.g[E] = &G6[E   *size_Mat];
+				G.g[W] = &G6[W   *size_Mat];
+				G.g[N] = &G6[N   *size_Mat];
+				G.g[S] = &G6[S   *size_Mat];
+				G.g[T] = &G6[T   *size_Mat];
+				G.g[B] = &G6[B   *size_Mat];
 			}
 			else
 			{
-				G.g[dirW] = &G6[dirE   *size_Mat];
-				G.g[dirE] = &G6[dirW   *size_Mat];
-				G.g[dirS] = &G6[dirN   *size_Mat];
-				G.g[dirN] = &G6[dirS   *size_Mat];
-				G.g[dirB] = &G6[dirT   *size_Mat];
-				G.g[dirT] = &G6[dirB   *size_Mat];
+				G.g[W] = &G6[E   *size_Mat];
+				G.g[E] = &G6[W   *size_Mat];
+				G.g[S] = &G6[N   *size_Mat];
+				G.g[N] = &G6[S   *size_Mat];
+				G.g[B] = &G6[T   *size_Mat];
+				G.g[T] = &G6[B   *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -161,43 +163,43 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mgcbb = (G.g[dirE])[k];
-			real mgabb = (G.g[dirW])[kw];
-			real mgbcb = (G.g[dirN])[k];
-			real mgbab = (G.g[dirS])[ks];
-			real mgbbc = (G.g[dirT])[k];
-			real mgbba = (G.g[dirB])[kb];
+			real mgcbb = (G.g[E])[k];
+			real mgabb = (G.g[W])[kw];
+			real mgbcb = (G.g[N])[k];
+			real mgbab = (G.g[S])[ks];
+			real mgbbc = (G.g[T])[k];
+			real mgbba = (G.g[B])[kb];
 			real dxuxdxux = c1o2 * (-mgcbb + mgabb);
 			real dyuydyuy = c1o2 * (-mgbcb + mgbab);
 			real dzuzdzuz = c1o2 * (-mgbbc + mgbba);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];
-			real mfabb = (D.f[dirW])[kw];
-			real mfbcb = (D.f[dirN])[k];
-			real mfbab = (D.f[dirS])[ks];
-			real mfbbc = (D.f[dirT])[k];
-			real mfbba = (D.f[dirB])[kb];
-			real mfccb = (D.f[dirNE])[k];
-			real mfaab = (D.f[dirSW])[ksw];
-			real mfcab = (D.f[dirSE])[ks];
-			real mfacb = (D.f[dirNW])[kw];
-			real mfcbc = (D.f[dirTE])[k];
-			real mfaba = (D.f[dirBW])[kbw];
-			real mfcba = (D.f[dirBE])[kb];
-			real mfabc = (D.f[dirTW])[kw];
-			real mfbcc = (D.f[dirTN])[k];
-			real mfbaa = (D.f[dirBS])[kbs];
-			real mfbca = (D.f[dirBN])[kb];
-			real mfbac = (D.f[dirTS])[ks];
-			real mfbbb = (D.f[dirZERO])[k];
-			real mfccc = (D.f[dirTNE])[k];
-			real mfaac = (D.f[dirTSW])[ksw];
-			real mfcac = (D.f[dirTSE])[ks];
-			real mfacc = (D.f[dirTNW])[kw];
-			real mfcca = (D.f[dirBNE])[kb];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];
-			real mfaca = (D.f[dirBNW])[kbw];
+			real mfcbb = (D.f[E])[k];
+			real mfabb = (D.f[W])[kw];
+			real mfbcb = (D.f[N])[k];
+			real mfbab = (D.f[S])[ks];
+			real mfbbc = (D.f[T])[k];
+			real mfbba = (D.f[B])[kb];
+			real mfccb = (D.f[NE])[k];
+			real mfaab = (D.f[SW])[ksw];
+			real mfcab = (D.f[SE])[ks];
+			real mfacb = (D.f[NW])[kw];
+			real mfcbc = (D.f[TE])[k];
+			real mfaba = (D.f[BW])[kbw];
+			real mfcba = (D.f[BE])[kb];
+			real mfabc = (D.f[TW])[kw];
+			real mfbcc = (D.f[TN])[k];
+			real mfbaa = (D.f[BS])[kbs];
+			real mfbca = (D.f[BN])[kb];
+			real mfbac = (D.f[TS])[ks];
+			real mfbbb = (D.f[REST])[k];
+			real mfccc = (D.f[TNE])[k];
+			real mfaac = (D.f[TSW])[ksw];
+			real mfcac = (D.f[TSE])[ks];
+			real mfacc = (D.f[TNW])[kw];
+			real mfcca = (D.f[BNE])[kb];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];
+			real mfaca = (D.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -911,41 +913,41 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 			//////////////////////////////////////////////////////////////////////////////////////
 
 			//////////////////////////////////////////////////////////////////////////////////////
-			//(D.f[dirE])[k] = mfabb;
-			//(D.f[dirW])[kw] = mfcbb;
-			//(D.f[dirN])[k] = mfbab;
-			//(D.f[dirS])[ks] = mfbcb;
-			//(D.f[dirT])[k] = mfbba;
-			//(D.f[dirB])[kb] = mfbbc;
-			//(D.f[dirNE])[k] = mfaab;
-			//(D.f[dirSW])[ksw] = mfccb;
-			//(D.f[dirSE])[ks] = mfacb;
-			//(D.f[dirNW])[kw] = mfcab;
-			//(D.f[dirTE])[k] = mfaba;
-			//(D.f[dirBW])[kbw] = mfcbc;
-			//(D.f[dirBE])[kb] = mfabc;
-			//(D.f[dirTW])[kw] = mfcba;
-			//(D.f[dirTN])[k] = mfbaa;
-			//(D.f[dirBS])[kbs] = mfbcc;
-			//(D.f[dirBN])[kb] = mfbac;
-			//(D.f[dirTS])[ks] = mfbca;
-			//(D.f[dirZERO])[k] = mfbbb;
-			//(D.f[dirTNE])[k] = mfaaa;
-			//(D.f[dirTSE])[ks] = mfaca;
-			//(D.f[dirBNE])[kb] = mfaac;
-			//(D.f[dirBSE])[kbs] = mfacc;
-			//(D.f[dirTNW])[kw] = mfcaa;
-			//(D.f[dirTSW])[ksw] = mfcca;
-			//(D.f[dirBNW])[kbw] = mfcac;
-			//(D.f[dirBSW])[kbsw] = mfccc;
+			//(D.f[E])[k] = mfabb;
+			//(D.f[W])[kw] = mfcbb;
+			//(D.f[N])[k] = mfbab;
+			//(D.f[S])[ks] = mfbcb;
+			//(D.f[T])[k] = mfbba;
+			//(D.f[B])[kb] = mfbbc;
+			//(D.f[NE])[k] = mfaab;
+			//(D.f[SW])[ksw] = mfccb;
+			//(D.f[SE])[ks] = mfacb;
+			//(D.f[NW])[kw] = mfcab;
+			//(D.f[TE])[k] = mfaba;
+			//(D.f[BW])[kbw] = mfcbc;
+			//(D.f[BE])[kb] = mfabc;
+			//(D.f[TW])[kw] = mfcba;
+			//(D.f[TN])[k] = mfbaa;
+			//(D.f[BS])[kbs] = mfbcc;
+			//(D.f[BN])[kb] = mfbac;
+			//(D.f[TS])[ks] = mfbca;
+			//(D.f[REST])[k] = mfbbb;
+			//(D.f[TNE])[k] = mfaaa;
+			//(D.f[TSE])[ks] = mfaca;
+			//(D.f[BNE])[kb] = mfaac;
+			//(D.f[BSE])[kbs] = mfacc;
+			//(D.f[TNW])[kw] = mfcaa;
+			//(D.f[TSW])[ksw] = mfcca;
+			//(D.f[BNW])[kbw] = mfcac;
+			//(D.f[BSW])[kbsw] = mfccc;
 			//////////////////////////////////////////////////////////////////////////////////////
 
-			//(G.g[dirE])[k] = mgabb;
-			//(G.g[dirW])[kw] = mgcbb;
-			//(G.g[dirN])[k] = mgbab;
-			//(G.g[dirS])[ks] = mgbcb;
-			//(G.g[dirT])[k] = mgbba;
-			//(G.g[dirB])[kb] = mgbbc;
+			//(G.g[E])[k] = mgabb;
+			//(G.g[W])[kw] = mgcbb;
+			//(G.g[N])[k] = mgbab;
+			//(G.g[S])[ks] = mgbcb;
+			//(G.g[T])[k] = mgbba;
+			//(G.g[B])[kb] = mgbbc;
 		}
 	}
 }
@@ -1024,83 +1026,83 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			Distributions27 D;
 //			if (EvenOrOdd == true)
 //			{
-//				D.f[dirE] = &DDStart[dirE   *size_Mat];
-//				D.f[dirW] = &DDStart[dirW   *size_Mat];
-//				D.f[dirN] = &DDStart[dirN   *size_Mat];
-//				D.f[dirS] = &DDStart[dirS   *size_Mat];
-//				D.f[dirT] = &DDStart[dirT   *size_Mat];
-//				D.f[dirB] = &DDStart[dirB   *size_Mat];
-//				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-//				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-//				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-//				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-//				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-//				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-//				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-//				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-//				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-//				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-//				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-//				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-//				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-//				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-//				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-//				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-//				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-//				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-//				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-//				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-//				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+//				D.f[E] = &DDStart[E   *size_Mat];
+//				D.f[W] = &DDStart[W   *size_Mat];
+//				D.f[N] = &DDStart[N   *size_Mat];
+//				D.f[S] = &DDStart[S   *size_Mat];
+//				D.f[T] = &DDStart[T   *size_Mat];
+//				D.f[B] = &DDStart[B   *size_Mat];
+//				D.f[NE] = &DDStart[NE  *size_Mat];
+//				D.f[SW] = &DDStart[SW  *size_Mat];
+//				D.f[SE] = &DDStart[SE  *size_Mat];
+//				D.f[NW] = &DDStart[NW  *size_Mat];
+//				D.f[TE] = &DDStart[TE  *size_Mat];
+//				D.f[BW] = &DDStart[BW  *size_Mat];
+//				D.f[BE] = &DDStart[BE  *size_Mat];
+//				D.f[TW] = &DDStart[TW  *size_Mat];
+//				D.f[TN] = &DDStart[TN  *size_Mat];
+//				D.f[BS] = &DDStart[BS  *size_Mat];
+//				D.f[BN] = &DDStart[BN  *size_Mat];
+//				D.f[TS] = &DDStart[TS  *size_Mat];
+//				D.f[REST] = &DDStart[REST*size_Mat];
+//				D.f[TNE] = &DDStart[TNE *size_Mat];
+//				D.f[TSW] = &DDStart[TSW *size_Mat];
+//				D.f[TSE] = &DDStart[TSE *size_Mat];
+//				D.f[TNW] = &DDStart[TNW *size_Mat];
+//				D.f[BNE] = &DDStart[BNE *size_Mat];
+//				D.f[BSW] = &DDStart[BSW *size_Mat];
+//				D.f[BSE] = &DDStart[BSE *size_Mat];
+//				D.f[BNW] = &DDStart[BNW *size_Mat];
 //			}
 //			else
 //			{
-//				D.f[dirW] = &DDStart[dirE   *size_Mat];
-//				D.f[dirE] = &DDStart[dirW   *size_Mat];
-//				D.f[dirS] = &DDStart[dirN   *size_Mat];
-//				D.f[dirN] = &DDStart[dirS   *size_Mat];
-//				D.f[dirB] = &DDStart[dirT   *size_Mat];
-//				D.f[dirT] = &DDStart[dirB   *size_Mat];
-//				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-//				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-//				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-//				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-//				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-//				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-//				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-//				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-//				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-//				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-//				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-//				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-//				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-//				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-//				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-//				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-//				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-//				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-//				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-//				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-//				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+//				D.f[W] = &DDStart[E   *size_Mat];
+//				D.f[E] = &DDStart[W   *size_Mat];
+//				D.f[S] = &DDStart[N   *size_Mat];
+//				D.f[N] = &DDStart[S   *size_Mat];
+//				D.f[B] = &DDStart[T   *size_Mat];
+//				D.f[T] = &DDStart[B   *size_Mat];
+//				D.f[SW] = &DDStart[NE  *size_Mat];
+//				D.f[NE] = &DDStart[SW  *size_Mat];
+//				D.f[NW] = &DDStart[SE  *size_Mat];
+//				D.f[SE] = &DDStart[NW  *size_Mat];
+//				D.f[BW] = &DDStart[TE  *size_Mat];
+//				D.f[TE] = &DDStart[BW  *size_Mat];
+//				D.f[TW] = &DDStart[BE  *size_Mat];
+//				D.f[BE] = &DDStart[TW  *size_Mat];
+//				D.f[BS] = &DDStart[TN  *size_Mat];
+//				D.f[TN] = &DDStart[BS  *size_Mat];
+//				D.f[TS] = &DDStart[BN  *size_Mat];
+//				D.f[BN] = &DDStart[TS  *size_Mat];
+//				D.f[REST] = &DDStart[REST*size_Mat];
+//				D.f[BSW] = &DDStart[TNE *size_Mat];
+//				D.f[BNE] = &DDStart[TSW *size_Mat];
+//				D.f[BNW] = &DDStart[TSE *size_Mat];
+//				D.f[BSE] = &DDStart[TNW *size_Mat];
+//				D.f[TSW] = &DDStart[BNE *size_Mat];
+//				D.f[TNE] = &DDStart[BSW *size_Mat];
+//				D.f[TNW] = &DDStart[BSE *size_Mat];
+//				D.f[TSE] = &DDStart[BNW *size_Mat];
 //			}
 //
 //			Distributions6 G;
 //			if (EvenOrOdd == true)
 //			{
-//				G.g[dirE] = &G6[dirE   *size_Mat];
-//				G.g[dirW] = &G6[dirW   *size_Mat];
-//				G.g[dirN] = &G6[dirN   *size_Mat];
-//				G.g[dirS] = &G6[dirS   *size_Mat];
-//				G.g[dirT] = &G6[dirT   *size_Mat];
-//				G.g[dirB] = &G6[dirB   *size_Mat];
+//				G.g[E] = &G6[E   *size_Mat];
+//				G.g[W] = &G6[W   *size_Mat];
+//				G.g[N] = &G6[N   *size_Mat];
+//				G.g[S] = &G6[S   *size_Mat];
+//				G.g[T] = &G6[T   *size_Mat];
+//				G.g[B] = &G6[B   *size_Mat];
 //			}
 //			else
 //			{
-//				G.g[dirW] = &G6[dirE   *size_Mat];
-//				G.g[dirE] = &G6[dirW   *size_Mat];
-//				G.g[dirS] = &G6[dirN   *size_Mat];
-//				G.g[dirN] = &G6[dirS   *size_Mat];
-//				G.g[dirB] = &G6[dirT   *size_Mat];
-//				G.g[dirT] = &G6[dirB   *size_Mat];
+//				G.g[W] = &G6[E   *size_Mat];
+//				G.g[E] = &G6[W   *size_Mat];
+//				G.g[S] = &G6[N   *size_Mat];
+//				G.g[N] = &G6[S   *size_Mat];
+//				G.g[B] = &G6[T   *size_Mat];
+//				G.g[T] = &G6[B   *size_Mat];
 //			}
 //
 //			////////////////////////////////////////////////////////////////////////////////
@@ -1133,43 +1135,43 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			//unsigned int ktne = k;
 //			unsigned int kbsw = neighborZ[ksw];
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mgcbb = (G.g[dirE])[k];
-//			real mgabb = (G.g[dirW])[kw];
-//			real mgbcb = (G.g[dirN])[k];
-//			real mgbab = (G.g[dirS])[ks];
-//			real mgbbc = (G.g[dirT])[k];
-//			real mgbba = (G.g[dirB])[kb];
+//			real mgcbb = (G.g[E])[k];
+//			real mgabb = (G.g[W])[kw];
+//			real mgbcb = (G.g[N])[k];
+//			real mgbab = (G.g[S])[ks];
+//			real mgbbc = (G.g[T])[k];
+//			real mgbba = (G.g[B])[kb];
 //			real dxuxdxux = c1o2 * (-mgcbb + mgabb);
 //			real dyuydyuy = c1o2 * (-mgbcb + mgbab);
 //			real dzuzdzuz = c1o2 * (-mgbbc + mgbba);
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mfcbb = (D.f[dirE])[k];
-//			real mfabb = (D.f[dirW])[kw];
-//			real mfbcb = (D.f[dirN])[k];
-//			real mfbab = (D.f[dirS])[ks];
-//			real mfbbc = (D.f[dirT])[k];
-//			real mfbba = (D.f[dirB])[kb];
-//			real mfccb = (D.f[dirNE])[k];
-//			real mfaab = (D.f[dirSW])[ksw];
-//			real mfcab = (D.f[dirSE])[ks];
-//			real mfacb = (D.f[dirNW])[kw];
-//			real mfcbc = (D.f[dirTE])[k];
-//			real mfaba = (D.f[dirBW])[kbw];
-//			real mfcba = (D.f[dirBE])[kb];
-//			real mfabc = (D.f[dirTW])[kw];
-//			real mfbcc = (D.f[dirTN])[k];
-//			real mfbaa = (D.f[dirBS])[kbs];
-//			real mfbca = (D.f[dirBN])[kb];
-//			real mfbac = (D.f[dirTS])[ks];
-//			real mfbbb = (D.f[dirZERO])[k];
-//			real mfccc = (D.f[dirTNE])[k];
-//			real mfaac = (D.f[dirTSW])[ksw];
-//			real mfcac = (D.f[dirTSE])[ks];
-//			real mfacc = (D.f[dirTNW])[kw];
-//			real mfcca = (D.f[dirBNE])[kb];
-//			real mfaaa = (D.f[dirBSW])[kbsw];
-//			real mfcaa = (D.f[dirBSE])[kbs];
-//			real mfaca = (D.f[dirBNW])[kbw];
+//			real mfcbb = (D.f[E])[k];
+//			real mfabb = (D.f[W])[kw];
+//			real mfbcb = (D.f[N])[k];
+//			real mfbab = (D.f[S])[ks];
+//			real mfbbc = (D.f[T])[k];
+//			real mfbba = (D.f[B])[kb];
+//			real mfccb = (D.f[NE])[k];
+//			real mfaab = (D.f[SW])[ksw];
+//			real mfcab = (D.f[SE])[ks];
+//			real mfacb = (D.f[NW])[kw];
+//			real mfcbc = (D.f[TE])[k];
+//			real mfaba = (D.f[BW])[kbw];
+//			real mfcba = (D.f[BE])[kb];
+//			real mfabc = (D.f[TW])[kw];
+//			real mfbcc = (D.f[TN])[k];
+//			real mfbaa = (D.f[BS])[kbs];
+//			real mfbca = (D.f[BN])[kb];
+//			real mfbac = (D.f[TS])[ks];
+//			real mfbbb = (D.f[REST])[k];
+//			real mfccc = (D.f[TNE])[k];
+//			real mfaac = (D.f[TSW])[ksw];
+//			real mfcac = (D.f[TSE])[ks];
+//			real mfacc = (D.f[TNW])[kw];
+//			real mfcca = (D.f[BNE])[kb];
+//			real mfaaa = (D.f[BSW])[kbsw];
+//			real mfcaa = (D.f[BSE])[kbs];
+//			real mfaca = (D.f[BNW])[kbw];
 //			////////////////////////////////////////////////////////////////////////////////////
 //			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 //				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1891,41 +1893,41 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			////////////////////////////////////////////////////////////////////////////////////
 //
 //			////////////////////////////////////////////////////////////////////////////////////
-//			(D.f[dirE])[k] = mfabb;   
-//			(D.f[dirW])[kw] = mfcbb;  
-//			(D.f[dirN])[k] = mfbab;   
-//			(D.f[dirS])[ks] = mfbcb;  
-//			(D.f[dirT])[k] = mfbba;   
-//			(D.f[dirB])[kb] = mfbbc;  
-//			(D.f[dirNE])[k] = mfaab;  
-//			(D.f[dirSW])[ksw] = mfccb;
-//			(D.f[dirSE])[ks] = mfacb; 
-//			(D.f[dirNW])[kw] = mfcab; 
-//			(D.f[dirTE])[k] = mfaba;  
-//			(D.f[dirBW])[kbw] = mfcbc;
-//			(D.f[dirBE])[kb] = mfabc; 
-//			(D.f[dirTW])[kw] = mfcba; 
-//			(D.f[dirTN])[k] = mfbaa;  
-//			(D.f[dirBS])[kbs] = mfbcc;
-//			(D.f[dirBN])[kb] = mfbac; 
-//			(D.f[dirTS])[ks] = mfbca; 
-//			(D.f[dirZERO])[k] = mfbbb;
-//			(D.f[dirTNE])[k] = mfaaa; 
-//			(D.f[dirTSE])[ks] = mfaca;
-//			(D.f[dirBNE])[kb] = mfaac;
-//			(D.f[dirBSE])[kbs] = mfacc;
-//			(D.f[dirTNW])[kw] = mfcaa;
-//			(D.f[dirTSW])[ksw] = mfcca;
-//			(D.f[dirBNW])[kbw] = mfcac;
-//			(D.f[dirBSW])[kbsw] = mfccc;
-//			////////////////////////////////////////////////////////////////////////////////////
-//
-//			(G.g[dirE])[k]  = mgabb;                                                               
-//			(G.g[dirW])[kw] = mgcbb;                                                              
-//			(G.g[dirN])[k]  = mgbab;
-//			(G.g[dirS])[ks] = mgbcb;
-//			(G.g[dirT])[k]  = mgbba;
-//			(G.g[dirB])[kb] = mgbbc;
+//			(D.f[E])[k] = mfabb;   
+//			(D.f[W])[kw] = mfcbb;  
+//			(D.f[N])[k] = mfbab;   
+//			(D.f[S])[ks] = mfbcb;  
+//			(D.f[T])[k] = mfbba;   
+//			(D.f[B])[kb] = mfbbc;  
+//			(D.f[NE])[k] = mfaab;  
+//			(D.f[SW])[ksw] = mfccb;
+//			(D.f[SE])[ks] = mfacb; 
+//			(D.f[NW])[kw] = mfcab; 
+//			(D.f[TE])[k] = mfaba;  
+//			(D.f[BW])[kbw] = mfcbc;
+//			(D.f[BE])[kb] = mfabc; 
+//			(D.f[TW])[kw] = mfcba; 
+//			(D.f[TN])[k] = mfbaa;  
+//			(D.f[BS])[kbs] = mfbcc;
+//			(D.f[BN])[kb] = mfbac; 
+//			(D.f[TS])[ks] = mfbca; 
+//			(D.f[REST])[k] = mfbbb;
+//			(D.f[TNE])[k] = mfaaa; 
+//			(D.f[TSE])[ks] = mfaca;
+//			(D.f[BNE])[kb] = mfaac;
+//			(D.f[BSE])[kbs] = mfacc;
+//			(D.f[TNW])[kw] = mfcaa;
+//			(D.f[TSW])[ksw] = mfcca;
+//			(D.f[BNW])[kbw] = mfcac;
+//			(D.f[BSW])[kbsw] = mfccc;
+//			////////////////////////////////////////////////////////////////////////////////////
+//
+//			(G.g[E])[k]  = mgabb;                                                               
+//			(G.g[W])[kw] = mgcbb;                                                              
+//			(G.g[N])[k]  = mgbab;
+//			(G.g[S])[ks] = mgbcb;
+//			(G.g[T])[k]  = mgbba;
+//			(G.g[B])[kb] = mgbbc;
 //		}
 //	}
 //}
@@ -2004,83 +2006,83 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			Distributions27 D;
 //			if (EvenOrOdd == true)
 //			{
-//				D.f[dirE] = &DDStart[dirE   *size_Mat];
-//				D.f[dirW] = &DDStart[dirW   *size_Mat];
-//				D.f[dirN] = &DDStart[dirN   *size_Mat];
-//				D.f[dirS] = &DDStart[dirS   *size_Mat];
-//				D.f[dirT] = &DDStart[dirT   *size_Mat];
-//				D.f[dirB] = &DDStart[dirB   *size_Mat];
-//				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-//				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-//				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-//				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-//				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-//				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-//				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-//				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-//				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-//				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-//				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-//				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-//				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-//				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-//				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-//				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-//				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-//				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-//				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-//				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-//				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+//				D.f[E] = &DDStart[E   *size_Mat];
+//				D.f[W] = &DDStart[W   *size_Mat];
+//				D.f[N] = &DDStart[N   *size_Mat];
+//				D.f[S] = &DDStart[S   *size_Mat];
+//				D.f[T] = &DDStart[T   *size_Mat];
+//				D.f[B] = &DDStart[B   *size_Mat];
+//				D.f[NE] = &DDStart[NE  *size_Mat];
+//				D.f[SW] = &DDStart[SW  *size_Mat];
+//				D.f[SE] = &DDStart[SE  *size_Mat];
+//				D.f[NW] = &DDStart[NW  *size_Mat];
+//				D.f[TE] = &DDStart[TE  *size_Mat];
+//				D.f[BW] = &DDStart[BW  *size_Mat];
+//				D.f[BE] = &DDStart[BE  *size_Mat];
+//				D.f[TW] = &DDStart[TW  *size_Mat];
+//				D.f[TN] = &DDStart[TN  *size_Mat];
+//				D.f[BS] = &DDStart[BS  *size_Mat];
+//				D.f[BN] = &DDStart[BN  *size_Mat];
+//				D.f[TS] = &DDStart[TS  *size_Mat];
+//				D.f[REST] = &DDStart[REST*size_Mat];
+//				D.f[TNE] = &DDStart[TNE *size_Mat];
+//				D.f[TSW] = &DDStart[TSW *size_Mat];
+//				D.f[TSE] = &DDStart[TSE *size_Mat];
+//				D.f[TNW] = &DDStart[TNW *size_Mat];
+//				D.f[BNE] = &DDStart[BNE *size_Mat];
+//				D.f[BSW] = &DDStart[BSW *size_Mat];
+//				D.f[BSE] = &DDStart[BSE *size_Mat];
+//				D.f[BNW] = &DDStart[BNW *size_Mat];
 //			}
 //			else
 //			{
-//				D.f[dirW] = &DDStart[dirE   *size_Mat];
-//				D.f[dirE] = &DDStart[dirW   *size_Mat];
-//				D.f[dirS] = &DDStart[dirN   *size_Mat];
-//				D.f[dirN] = &DDStart[dirS   *size_Mat];
-//				D.f[dirB] = &DDStart[dirT   *size_Mat];
-//				D.f[dirT] = &DDStart[dirB   *size_Mat];
-//				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-//				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-//				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-//				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-//				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-//				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-//				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-//				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-//				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-//				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-//				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-//				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-//				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-//				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-//				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-//				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-//				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-//				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-//				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-//				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-//				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+//				D.f[W] = &DDStart[E   *size_Mat];
+//				D.f[E] = &DDStart[W   *size_Mat];
+//				D.f[S] = &DDStart[N   *size_Mat];
+//				D.f[N] = &DDStart[S   *size_Mat];
+//				D.f[B] = &DDStart[T   *size_Mat];
+//				D.f[T] = &DDStart[B   *size_Mat];
+//				D.f[SW] = &DDStart[NE  *size_Mat];
+//				D.f[NE] = &DDStart[SW  *size_Mat];
+//				D.f[NW] = &DDStart[SE  *size_Mat];
+//				D.f[SE] = &DDStart[NW  *size_Mat];
+//				D.f[BW] = &DDStart[TE  *size_Mat];
+//				D.f[TE] = &DDStart[BW  *size_Mat];
+//				D.f[TW] = &DDStart[BE  *size_Mat];
+//				D.f[BE] = &DDStart[TW  *size_Mat];
+//				D.f[BS] = &DDStart[TN  *size_Mat];
+//				D.f[TN] = &DDStart[BS  *size_Mat];
+//				D.f[TS] = &DDStart[BN  *size_Mat];
+//				D.f[BN] = &DDStart[TS  *size_Mat];
+//				D.f[REST] = &DDStart[REST*size_Mat];
+//				D.f[BSW] = &DDStart[TNE *size_Mat];
+//				D.f[BNE] = &DDStart[TSW *size_Mat];
+//				D.f[BNW] = &DDStart[TSE *size_Mat];
+//				D.f[BSE] = &DDStart[TNW *size_Mat];
+//				D.f[TSW] = &DDStart[BNE *size_Mat];
+//				D.f[TNE] = &DDStart[BSW *size_Mat];
+//				D.f[TNW] = &DDStart[BSE *size_Mat];
+//				D.f[TSE] = &DDStart[BNW *size_Mat];
 //			}
 //
 //			Distributions6 G;
 //			if (EvenOrOdd == true)
 //			{
-//				G.g[dirE] = &G6[dirE   *size_Mat];
-//				G.g[dirW] = &G6[dirW   *size_Mat];
-//				G.g[dirN] = &G6[dirN   *size_Mat];
-//				G.g[dirS] = &G6[dirS   *size_Mat];
-//				G.g[dirT] = &G6[dirT   *size_Mat];
-//				G.g[dirB] = &G6[dirB   *size_Mat];
+//				G.g[E] = &G6[E   *size_Mat];
+//				G.g[W] = &G6[W   *size_Mat];
+//				G.g[N] = &G6[N   *size_Mat];
+//				G.g[S] = &G6[S   *size_Mat];
+//				G.g[T] = &G6[T   *size_Mat];
+//				G.g[B] = &G6[B   *size_Mat];
 //			}
 //			else
 //			{
-//				G.g[dirW] = &G6[dirE   *size_Mat];
-//				G.g[dirE] = &G6[dirW   *size_Mat];
-//				G.g[dirS] = &G6[dirN   *size_Mat];
-//				G.g[dirN] = &G6[dirS   *size_Mat];
-//				G.g[dirB] = &G6[dirT   *size_Mat];
-//				G.g[dirT] = &G6[dirB   *size_Mat];
+//				G.g[W] = &G6[E   *size_Mat];
+//				G.g[E] = &G6[W   *size_Mat];
+//				G.g[S] = &G6[N   *size_Mat];
+//				G.g[N] = &G6[S   *size_Mat];
+//				G.g[B] = &G6[T   *size_Mat];
+//				G.g[T] = &G6[B   *size_Mat];
 //			}
 //
 //			////////////////////////////////////////////////////////////////////////////////
@@ -2141,43 +2143,43 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			//unsigned int ktne = k;
 //			//unsigned int kbsw = neighborZ[ksw];
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mgcbb = (G.g[dirE])[k];
-//			real mgabb = (G.g[dirW])[kw];
-//			real mgbcb = (G.g[dirN])[k];
-//			real mgbab = (G.g[dirS])[ks];
-//			real mgbbc = (G.g[dirT])[k];
-//			real mgbba = (G.g[dirB])[kb];
+//			real mgcbb = (G.g[E])[k];
+//			real mgabb = (G.g[W])[kw];
+//			real mgbcb = (G.g[N])[k];
+//			real mgbab = (G.g[S])[ks];
+//			real mgbbc = (G.g[T])[k];
+//			real mgbba = (G.g[B])[kb];
 //			real dxxux = c1o2 * (-mgcbb + mgabb);
 //			real dyyuy = c1o2 * (-mgbcb + mgbab);
 //			real dzzuz = c1o2 * (-mgbbc + mgbba);
 //			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-//			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-//			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-//			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-//			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-//			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-//			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-//			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-//			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-//			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-//			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-//			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-//			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-//			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-//			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-//			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-//			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-//			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-//			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-//			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-//			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-//			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-//			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-//			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-//			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-//			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-//			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-//			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+//			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+//			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+//			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+//			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+//			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+//			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+//			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+//			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+//			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+//			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+//			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+//			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+//			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+//			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+//			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+//			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+//			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+//			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+//			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+//			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+//			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+//			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+//			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+//			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+//			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+//			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+//			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 //			////////////////////////////////////////////////////////////////////////////////////
 //			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 //				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -3011,41 +3013,41 @@ extern "C" __global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega,
 //			////////////////////////////////////////////////////////////////////////////////////
 //
 //			////////////////////////////////////////////////////////////////////////////////////
-//			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-//			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-//			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-//			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-//			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-//			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-//			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-//			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-//			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-//			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-//			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-//			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-//			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-//			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-//			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-//			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-//			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-//			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-//			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-//			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-//			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-//			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-//			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-//			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-//			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-//			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-//			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
-//			////////////////////////////////////////////////////////////////////////////////////
-//
-//			(G.g[dirE])[k]  = mgabb;                                                               
-//			(G.g[dirW])[kw] = mgcbb;                                                              
-//			(G.g[dirN])[k]  = mgbab;
-//			(G.g[dirS])[ks] = mgbcb;
-//			(G.g[dirT])[k]  = mgbba;
-//			(G.g[dirB])[kb] = mgbbc;
+//			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+//			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+//			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+//			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+//			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+//			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+//			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+//			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+//			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+//			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+//			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+//			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+//			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+//			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+//			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+//			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+//			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+//			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+//			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+//			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+//			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+//			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+//			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+//			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+//			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+//			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+//			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
+//			////////////////////////////////////////////////////////////////////////////////////
+//
+//			(G.g[E])[k]  = mgabb;                                                               
+//			(G.g[W])[kw] = mgcbb;                                                              
+//			(G.g[N])[k]  = mgbab;
+//			(G.g[S])[ks] = mgbcb;
+//			(G.g[T])[k]  = mgbba;
+//			(G.g[B])[kb] = mgbbc;
 //		}
 //	}
 //}
diff --git a/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu b/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu
index 54484c322397614db297f964e2586653f1dad88b..133c2aef257d30c9b4bb064ff4bff8e3d0593c28 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu
@@ -1,9 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void DragLiftPost27(  real* DD, 
@@ -22,63 +23,63 @@ extern "C" __global__ void DragLiftPost27(  real* DD,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -93,39 +94,38 @@ extern "C" __global__ void DragLiftPost27(  real* DD,
 
 	if(k<numberOfBCnodes)
 	{
-		unsigned int sizeQ = numberOfBCnodes;
 		////////////////////////////////////////////////////////////////////////////////
 		real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
 			*q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
 			*q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
 			*q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 			*q_dirBSE, *q_dirBNW; 
-		q_dirE   = &QQ[dirE   *sizeQ];
-		q_dirW   = &QQ[dirW   *sizeQ];
-		q_dirN   = &QQ[dirN   *sizeQ];
-		q_dirS   = &QQ[dirS   *sizeQ];
-		q_dirT   = &QQ[dirT   *sizeQ];
-		q_dirB   = &QQ[dirB   *sizeQ];
-		q_dirNE  = &QQ[dirNE  *sizeQ];
-		q_dirSW  = &QQ[dirSW  *sizeQ];
-		q_dirSE  = &QQ[dirSE  *sizeQ];
-		q_dirNW  = &QQ[dirNW  *sizeQ];
-		q_dirTE  = &QQ[dirTE  *sizeQ];
-		q_dirBW  = &QQ[dirBW  *sizeQ];
-		q_dirBE  = &QQ[dirBE  *sizeQ];
-		q_dirTW  = &QQ[dirTW  *sizeQ];
-		q_dirTN  = &QQ[dirTN  *sizeQ];
-		q_dirBS  = &QQ[dirBS  *sizeQ];
-		q_dirBN  = &QQ[dirBN  *sizeQ];
-		q_dirTS  = &QQ[dirTS  *sizeQ];
-		q_dirTNE = &QQ[dirTNE *sizeQ];
-		q_dirTSW = &QQ[dirTSW *sizeQ];
-		q_dirTSE = &QQ[dirTSE *sizeQ];
-		q_dirTNW = &QQ[dirTNW *sizeQ];
-		q_dirBNE = &QQ[dirBNE *sizeQ];
-		q_dirBSW = &QQ[dirBSW *sizeQ];
-		q_dirBSE = &QQ[dirBSE *sizeQ];
-		q_dirBNW = &QQ[dirBNW *sizeQ];
+		q_dirE   = &QQ[E   * numberOfBCnodes];
+		q_dirW   = &QQ[W   * numberOfBCnodes];
+		q_dirN   = &QQ[N   * numberOfBCnodes];
+		q_dirS   = &QQ[S   * numberOfBCnodes];
+		q_dirT   = &QQ[T   * numberOfBCnodes];
+		q_dirB   = &QQ[B   * numberOfBCnodes];
+		q_dirNE  = &QQ[NE  * numberOfBCnodes];
+		q_dirSW  = &QQ[SW  * numberOfBCnodes];
+		q_dirSE  = &QQ[SE  * numberOfBCnodes];
+		q_dirNW  = &QQ[NW  * numberOfBCnodes];
+		q_dirTE  = &QQ[TE  * numberOfBCnodes];
+		q_dirBW  = &QQ[BW  * numberOfBCnodes];
+		q_dirBE  = &QQ[BE  * numberOfBCnodes];
+		q_dirTW  = &QQ[TW  * numberOfBCnodes];
+		q_dirTN  = &QQ[TN  * numberOfBCnodes];
+		q_dirBS  = &QQ[BS  * numberOfBCnodes];
+		q_dirBN  = &QQ[BN  * numberOfBCnodes];
+		q_dirTS  = &QQ[TS  * numberOfBCnodes];
+		q_dirTNE = &QQ[TNE * numberOfBCnodes];
+		q_dirTSW = &QQ[TSW * numberOfBCnodes];
+		q_dirTSE = &QQ[TSE * numberOfBCnodes];
+		q_dirTNW = &QQ[TNW * numberOfBCnodes];
+		q_dirBNE = &QQ[BNE * numberOfBCnodes];
+		q_dirBSW = &QQ[BSW * numberOfBCnodes];
+		q_dirBSE = &QQ[BSE * numberOfBCnodes];
+		q_dirBNW = &QQ[BNW * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK  = k_Q[k];
@@ -160,32 +160,32 @@ extern "C" __global__ void DragLiftPost27(  real* DD,
 		real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
                 f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-		f_W    = (D.f[dirE   ])[ke   ];
-		f_E    = (D.f[dirW   ])[kw   ];
-		f_S    = (D.f[dirN   ])[kn   ];
-		f_N    = (D.f[dirS   ])[ks   ];
-		f_B    = (D.f[dirT   ])[kt   ];
-		f_T    = (D.f[dirB   ])[kb   ];
-		f_SW   = (D.f[dirNE  ])[kne  ];
-		f_NE   = (D.f[dirSW  ])[ksw  ];
-		f_NW   = (D.f[dirSE  ])[kse  ];
-		f_SE   = (D.f[dirNW  ])[knw  ];
-		f_BW   = (D.f[dirTE  ])[kte  ];
-		f_TE   = (D.f[dirBW  ])[kbw  ];
-		f_TW   = (D.f[dirBE  ])[kbe  ];
-		f_BE   = (D.f[dirTW  ])[ktw  ];
-		f_BS   = (D.f[dirTN  ])[ktn  ];
-		f_TN   = (D.f[dirBS  ])[kbs  ];
-		f_TS   = (D.f[dirBN  ])[kbn  ];
-		f_BN   = (D.f[dirTS  ])[kts  ];
-		f_BSW  = (D.f[dirTNE ])[ktne ];
-		f_BNE  = (D.f[dirTSW ])[ktsw ];
-		f_BNW  = (D.f[dirTSE ])[ktse ];
-		f_BSE  = (D.f[dirTNW ])[ktnw ];
-		f_TSW  = (D.f[dirBNE ])[kbne ];
-		f_TNE  = (D.f[dirBSW ])[kbsw ];
-		f_TNW  = (D.f[dirBSE ])[kbse ];
-		f_TSE  = (D.f[dirBNW ])[kbnw ];
+		f_W    = (D.f[E   ])[ke   ];
+		f_E    = (D.f[W   ])[kw   ];
+		f_S    = (D.f[N   ])[kn   ];
+		f_N    = (D.f[S   ])[ks   ];
+		f_B    = (D.f[T   ])[kt   ];
+		f_T    = (D.f[B   ])[kb   ];
+		f_SW   = (D.f[NE  ])[kne  ];
+		f_NE   = (D.f[SW  ])[ksw  ];
+		f_NW   = (D.f[SE  ])[kse  ];
+		f_SE   = (D.f[NW  ])[knw  ];
+		f_BW   = (D.f[TE  ])[kte  ];
+		f_TE   = (D.f[BW  ])[kbw  ];
+		f_TW   = (D.f[BE  ])[kbe  ];
+		f_BE   = (D.f[TW  ])[ktw  ];
+		f_BS   = (D.f[TN  ])[ktn  ];
+		f_TN   = (D.f[BS  ])[kbs  ];
+		f_TS   = (D.f[BN  ])[kbn  ];
+		f_BN   = (D.f[TS  ])[kts  ];
+		f_BSW  = (D.f[TNE ])[ktne ];
+		f_BNE  = (D.f[TSW ])[ktsw ];
+		f_BNW  = (D.f[TSE ])[ktse ];
+		f_BSE  = (D.f[TNW ])[ktnw ];
+		f_TSW  = (D.f[BNE ])[kbne ];
+		f_TNE  = (D.f[BSW ])[kbsw ];
+		f_TNW  = (D.f[BSE ])[kbse ];
+		f_TSE  = (D.f[BNW ])[kbnw ];
 		////////////////////////////////////////////////////////////////////////////////
 		double	OnE   = c0o1, OnW   = c0o1, OnN   = c0o1, OnS   = c0o1, OnT = c0o1, OnB = c0o1, 
 				OnNE  = c0o1, OnSW  = c0o1, OnSE  = c0o1, OnNW  = c0o1, 
@@ -288,63 +288,63 @@ extern "C" __global__ void DragLiftPre27(   real* DD,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -359,39 +359,38 @@ extern "C" __global__ void DragLiftPre27(   real* DD,
 
 	if(k<numberOfBCnodes)
 	{
-		unsigned int sizeQ = numberOfBCnodes;
 		////////////////////////////////////////////////////////////////////////////////
 		real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
 			*q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
 			*q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
 			*q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 			*q_dirBSE, *q_dirBNW; 
-		q_dirE   = &QQ[dirE   *sizeQ];
-		q_dirW   = &QQ[dirW   *sizeQ];
-		q_dirN   = &QQ[dirN   *sizeQ];
-		q_dirS   = &QQ[dirS   *sizeQ];
-		q_dirT   = &QQ[dirT   *sizeQ];
-		q_dirB   = &QQ[dirB   *sizeQ];
-		q_dirNE  = &QQ[dirNE  *sizeQ];
-		q_dirSW  = &QQ[dirSW  *sizeQ];
-		q_dirSE  = &QQ[dirSE  *sizeQ];
-		q_dirNW  = &QQ[dirNW  *sizeQ];
-		q_dirTE  = &QQ[dirTE  *sizeQ];
-		q_dirBW  = &QQ[dirBW  *sizeQ];
-		q_dirBE  = &QQ[dirBE  *sizeQ];
-		q_dirTW  = &QQ[dirTW  *sizeQ];
-		q_dirTN  = &QQ[dirTN  *sizeQ];
-		q_dirBS  = &QQ[dirBS  *sizeQ];
-		q_dirBN  = &QQ[dirBN  *sizeQ];
-		q_dirTS  = &QQ[dirTS  *sizeQ];
-		q_dirTNE = &QQ[dirTNE *sizeQ];
-		q_dirTSW = &QQ[dirTSW *sizeQ];
-		q_dirTSE = &QQ[dirTSE *sizeQ];
-		q_dirTNW = &QQ[dirTNW *sizeQ];
-		q_dirBNE = &QQ[dirBNE *sizeQ];
-		q_dirBSW = &QQ[dirBSW *sizeQ];
-		q_dirBSE = &QQ[dirBSE *sizeQ];
-		q_dirBNW = &QQ[dirBNW *sizeQ];
+		q_dirE   = &QQ[E   * numberOfBCnodes];
+		q_dirW   = &QQ[W   * numberOfBCnodes];
+		q_dirN   = &QQ[N   * numberOfBCnodes];
+		q_dirS   = &QQ[S   * numberOfBCnodes];
+		q_dirT   = &QQ[T   * numberOfBCnodes];
+		q_dirB   = &QQ[B   * numberOfBCnodes];
+		q_dirNE  = &QQ[NE  * numberOfBCnodes];
+		q_dirSW  = &QQ[SW  * numberOfBCnodes];
+		q_dirSE  = &QQ[SE  * numberOfBCnodes];
+		q_dirNW  = &QQ[NW  * numberOfBCnodes];
+		q_dirTE  = &QQ[TE  * numberOfBCnodes];
+		q_dirBW  = &QQ[BW  * numberOfBCnodes];
+		q_dirBE  = &QQ[BE  * numberOfBCnodes];
+		q_dirTW  = &QQ[TW  * numberOfBCnodes];
+		q_dirTN  = &QQ[TN  * numberOfBCnodes];
+		q_dirBS  = &QQ[BS  * numberOfBCnodes];
+		q_dirBN  = &QQ[BN  * numberOfBCnodes];
+		q_dirTS  = &QQ[TS  * numberOfBCnodes];
+		q_dirTNE = &QQ[TNE * numberOfBCnodes];
+		q_dirTSW = &QQ[TSW * numberOfBCnodes];
+		q_dirTSE = &QQ[TSE * numberOfBCnodes];
+		q_dirTNW = &QQ[TNW * numberOfBCnodes];
+		q_dirBNE = &QQ[BNE * numberOfBCnodes];
+		q_dirBSW = &QQ[BSW * numberOfBCnodes];
+		q_dirBSE = &QQ[BSE * numberOfBCnodes];
+		q_dirBNW = &QQ[BNW * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK  = k_Q[k];
@@ -426,32 +425,32 @@ extern "C" __global__ void DragLiftPre27(   real* DD,
 		real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
                 f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-		f_E   = (D.f[dirE   ])[ke   ];
-		f_W   = (D.f[dirW   ])[kw   ];
-		f_N   = (D.f[dirN   ])[kn   ];
-		f_S   = (D.f[dirS   ])[ks   ];
-		f_T   = (D.f[dirT   ])[kt   ];
-		f_B   = (D.f[dirB   ])[kb   ];
-		f_NE  = (D.f[dirNE  ])[kne  ];
-		f_SW  = (D.f[dirSW  ])[ksw  ];
-		f_SE  = (D.f[dirSE  ])[kse  ];
-		f_NW  = (D.f[dirNW  ])[knw  ];
-		f_TE  = (D.f[dirTE  ])[kte  ];
-		f_BW  = (D.f[dirBW  ])[kbw  ];
-		f_BE  = (D.f[dirBE  ])[kbe  ];
-		f_TW  = (D.f[dirTW  ])[ktw  ];
-		f_TN  = (D.f[dirTN  ])[ktn  ];
-		f_BS  = (D.f[dirBS  ])[kbs  ];
-		f_BN  = (D.f[dirBN  ])[kbn  ];
-		f_TS  = (D.f[dirTS  ])[kts  ];
-		f_TNE = (D.f[dirTNE ])[ktne ];
-		f_TSW = (D.f[dirTSW ])[ktsw ];
-		f_TSE = (D.f[dirTSE ])[ktse ];
-		f_TNW = (D.f[dirTNW ])[ktnw ];
-		f_BNE = (D.f[dirBNE ])[kbne ];
-		f_BSW = (D.f[dirBSW ])[kbsw ];
-		f_BSE = (D.f[dirBSE ])[kbse ];
-		f_BNW = (D.f[dirBNW ])[kbnw ];
+		f_E   = (D.f[E   ])[ke   ];
+		f_W   = (D.f[W   ])[kw   ];
+		f_N   = (D.f[N   ])[kn   ];
+		f_S   = (D.f[S   ])[ks   ];
+		f_T   = (D.f[T   ])[kt   ];
+		f_B   = (D.f[B   ])[kb   ];
+		f_NE  = (D.f[NE  ])[kne  ];
+		f_SW  = (D.f[SW  ])[ksw  ];
+		f_SE  = (D.f[SE  ])[kse  ];
+		f_NW  = (D.f[NW  ])[knw  ];
+		f_TE  = (D.f[TE  ])[kte  ];
+		f_BW  = (D.f[BW  ])[kbw  ];
+		f_BE  = (D.f[BE  ])[kbe  ];
+		f_TW  = (D.f[TW  ])[ktw  ];
+		f_TN  = (D.f[TN  ])[ktn  ];
+		f_BS  = (D.f[BS  ])[kbs  ];
+		f_BN  = (D.f[BN  ])[kbn  ];
+		f_TS  = (D.f[TS  ])[kts  ];
+		f_TNE = (D.f[TNE ])[ktne ];
+		f_TSW = (D.f[TSW ])[ktsw ];
+		f_TSE = (D.f[TSE ])[ktse ];
+		f_TNW = (D.f[TNW ])[ktnw ];
+		f_BNE = (D.f[BNE ])[kbne ];
+		f_BSW = (D.f[BSW ])[kbsw ];
+		f_BSE = (D.f[BSE ])[kbse ];
+		f_BNW = (D.f[BNW ])[kbnw ];
 		 ////////////////////////////////////////////////////////////////////////////////
 		double	OnE   = c0o1, OnW   = c0o1, OnN   = c0o1, OnS   = c0o1, OnT = c0o1, OnB = c0o1, 
 				OnNE  = c0o1, OnSW  = c0o1, OnSE  = c0o1, OnNW  = c0o1, 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu b/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu
index e23862e9fe7f90554fb44b0d41e580d656ecf449..6b10ede662132ac18f5a3474d2a6d654bf6c835c 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu
@@ -1,9 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void getSendFsPost27(real* DD,
@@ -64,150 +65,150 @@ extern "C" __global__ void getSendFsPost27(real* DD,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //set Pointer for Buffer Fs
       Distributions27 Dbuff;
-      Dbuff.f[dirE   ] = &bufferFs[dirE   *buffmax];
-      Dbuff.f[dirW   ] = &bufferFs[dirW   *buffmax];
-      Dbuff.f[dirN   ] = &bufferFs[dirN   *buffmax];
-      Dbuff.f[dirS   ] = &bufferFs[dirS   *buffmax];
-      Dbuff.f[dirT   ] = &bufferFs[dirT   *buffmax];
-      Dbuff.f[dirB   ] = &bufferFs[dirB   *buffmax];
-      Dbuff.f[dirNE  ] = &bufferFs[dirNE  *buffmax];
-      Dbuff.f[dirSW  ] = &bufferFs[dirSW  *buffmax];
-      Dbuff.f[dirSE  ] = &bufferFs[dirSE  *buffmax];
-      Dbuff.f[dirNW  ] = &bufferFs[dirNW  *buffmax];
-      Dbuff.f[dirTE  ] = &bufferFs[dirTE  *buffmax];
-      Dbuff.f[dirBW  ] = &bufferFs[dirBW  *buffmax];
-      Dbuff.f[dirBE  ] = &bufferFs[dirBE  *buffmax];
-      Dbuff.f[dirTW  ] = &bufferFs[dirTW  *buffmax];
-      Dbuff.f[dirTN  ] = &bufferFs[dirTN  *buffmax];
-      Dbuff.f[dirBS  ] = &bufferFs[dirBS  *buffmax];
-      Dbuff.f[dirBN  ] = &bufferFs[dirBN  *buffmax];
-      Dbuff.f[dirTS  ] = &bufferFs[dirTS  *buffmax];
-      Dbuff.f[dirZERO] = &bufferFs[dirZERO*buffmax];
-      Dbuff.f[dirTNE ] = &bufferFs[dirTNE *buffmax];
-      Dbuff.f[dirTSW ] = &bufferFs[dirTSW *buffmax];
-      Dbuff.f[dirTSE ] = &bufferFs[dirTSE *buffmax];
-      Dbuff.f[dirTNW ] = &bufferFs[dirTNW *buffmax];
-      Dbuff.f[dirBNE ] = &bufferFs[dirBNE *buffmax];
-      Dbuff.f[dirBSW ] = &bufferFs[dirBSW *buffmax];
-      Dbuff.f[dirBSE ] = &bufferFs[dirBSE *buffmax];
-      Dbuff.f[dirBNW ] = &bufferFs[dirBNW *buffmax];
+      Dbuff.f[E   ] = &bufferFs[E   *buffmax];
+      Dbuff.f[W   ] = &bufferFs[W   *buffmax];
+      Dbuff.f[N   ] = &bufferFs[N   *buffmax];
+      Dbuff.f[S   ] = &bufferFs[S   *buffmax];
+      Dbuff.f[T   ] = &bufferFs[T   *buffmax];
+      Dbuff.f[B   ] = &bufferFs[B   *buffmax];
+      Dbuff.f[NE  ] = &bufferFs[NE  *buffmax];
+      Dbuff.f[SW  ] = &bufferFs[SW  *buffmax];
+      Dbuff.f[SE  ] = &bufferFs[SE  *buffmax];
+      Dbuff.f[NW  ] = &bufferFs[NW  *buffmax];
+      Dbuff.f[TE  ] = &bufferFs[TE  *buffmax];
+      Dbuff.f[BW  ] = &bufferFs[BW  *buffmax];
+      Dbuff.f[BE  ] = &bufferFs[BE  *buffmax];
+      Dbuff.f[TW  ] = &bufferFs[TW  *buffmax];
+      Dbuff.f[TN  ] = &bufferFs[TN  *buffmax];
+      Dbuff.f[BS  ] = &bufferFs[BS  *buffmax];
+      Dbuff.f[BN  ] = &bufferFs[BN  *buffmax];
+      Dbuff.f[TS  ] = &bufferFs[TS  *buffmax];
+      Dbuff.f[REST] = &bufferFs[REST*buffmax];
+      Dbuff.f[TNE ] = &bufferFs[TNE *buffmax];
+      Dbuff.f[TSW ] = &bufferFs[TSW *buffmax];
+      Dbuff.f[TSE ] = &bufferFs[TSE *buffmax];
+      Dbuff.f[TNW ] = &bufferFs[TNW *buffmax];
+      Dbuff.f[BNE ] = &bufferFs[BNE *buffmax];
+      Dbuff.f[BSW ] = &bufferFs[BSW *buffmax];
+      Dbuff.f[BSE ] = &bufferFs[BSE *buffmax];
+      Dbuff.f[BNW ] = &bufferFs[BNW *buffmax];
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //copy to buffer
-      //(Dbuff.f[dirE   ])[k] = (D.f[dirE   ])[ke   ];
-      //(Dbuff.f[dirW   ])[k] = (D.f[dirW   ])[kw   ];
-      //(Dbuff.f[dirN   ])[k] = (D.f[dirN   ])[kn   ];
-      //(Dbuff.f[dirS   ])[k] = (D.f[dirS   ])[ks   ];
-      //(Dbuff.f[dirT   ])[k] = (D.f[dirT   ])[kt   ];
-      //(Dbuff.f[dirB   ])[k] = (D.f[dirB   ])[kb   ];
-      //(Dbuff.f[dirNE  ])[k] = (D.f[dirNE  ])[kne  ];
-      //(Dbuff.f[dirSW  ])[k] = (D.f[dirSW  ])[ksw  ];
-      //(Dbuff.f[dirSE  ])[k] = (D.f[dirSE  ])[kse  ];
-      //(Dbuff.f[dirNW  ])[k] = (D.f[dirNW  ])[knw  ];
-      //(Dbuff.f[dirTE  ])[k] = (D.f[dirTE  ])[kte  ];
-      //(Dbuff.f[dirBW  ])[k] = (D.f[dirBW  ])[kbw  ];
-      //(Dbuff.f[dirBE  ])[k] = (D.f[dirBE  ])[kbe  ];
-      //(Dbuff.f[dirTW  ])[k] = (D.f[dirTW  ])[ktw  ];
-      //(Dbuff.f[dirTN  ])[k] = (D.f[dirTN  ])[ktn  ];
-      //(Dbuff.f[dirBS  ])[k] = (D.f[dirBS  ])[kbs  ];
-      //(Dbuff.f[dirBN  ])[k] = (D.f[dirBN  ])[kbn  ];
-      //(Dbuff.f[dirTS  ])[k] = (D.f[dirTS  ])[kts  ];
-      //(Dbuff.f[dirZERO])[k] = (D.f[dirZERO])[kzero];
-      //(Dbuff.f[dirTNE ])[k] = (D.f[dirTNE ])[ktne ];
-      //(Dbuff.f[dirTSW ])[k] = (D.f[dirTSW ])[ktsw ];
-      //(Dbuff.f[dirTSE ])[k] = (D.f[dirTSE ])[ktse ];
-      //(Dbuff.f[dirTNW ])[k] = (D.f[dirTNW ])[ktnw ];
-      //(Dbuff.f[dirBNE ])[k] = (D.f[dirBNE ])[kbne ];
-      //(Dbuff.f[dirBSW ])[k] = (D.f[dirBSW ])[kbsw ];
-      //(Dbuff.f[dirBSE ])[k] = (D.f[dirBSE ])[kbse ];
-      //(Dbuff.f[dirBNW ])[k] = (D.f[dirBNW ])[kbnw ];
-      (Dbuff.f[dirE   ])[k] = (D.f[dirW   ])[kw   ];
-      (Dbuff.f[dirW   ])[k] = (D.f[dirE   ])[ke   ];
-      (Dbuff.f[dirN   ])[k] = (D.f[dirS   ])[ks   ];
-      (Dbuff.f[dirS   ])[k] = (D.f[dirN   ])[kn   ];
-      (Dbuff.f[dirT   ])[k] = (D.f[dirB   ])[kb   ];
-      (Dbuff.f[dirB   ])[k] = (D.f[dirT   ])[kt   ];
-      (Dbuff.f[dirNE  ])[k] = (D.f[dirSW  ])[ksw  ];
-      (Dbuff.f[dirSW  ])[k] = (D.f[dirNE  ])[kne  ];
-      (Dbuff.f[dirSE  ])[k] = (D.f[dirNW  ])[knw  ];
-      (Dbuff.f[dirNW  ])[k] = (D.f[dirSE  ])[kse  ];
-      (Dbuff.f[dirTE  ])[k] = (D.f[dirBW  ])[kbw  ];
-      (Dbuff.f[dirBW  ])[k] = (D.f[dirTE  ])[kte  ];
-      (Dbuff.f[dirBE  ])[k] = (D.f[dirTW  ])[ktw  ];
-      (Dbuff.f[dirTW  ])[k] = (D.f[dirBE  ])[kbe  ];
-      (Dbuff.f[dirTN  ])[k] = (D.f[dirBS  ])[kbs  ];
-      (Dbuff.f[dirBS  ])[k] = (D.f[dirTN  ])[ktn  ];
-      (Dbuff.f[dirBN  ])[k] = (D.f[dirTS  ])[kts  ];
-      (Dbuff.f[dirTS  ])[k] = (D.f[dirBN  ])[kbn  ];
-      (Dbuff.f[dirZERO])[k] = (D.f[dirZERO])[kzero];
-      (Dbuff.f[dirTNE ])[k] = (D.f[dirBSW ])[kbsw ];
-      (Dbuff.f[dirTSW ])[k] = (D.f[dirBNE ])[kbne ];
-      (Dbuff.f[dirTSE ])[k] = (D.f[dirBNW ])[kbnw ];
-      (Dbuff.f[dirTNW ])[k] = (D.f[dirBSE ])[kbse ];
-      (Dbuff.f[dirBNE ])[k] = (D.f[dirTSW ])[ktsw ];
-      (Dbuff.f[dirBSW ])[k] = (D.f[dirTNE ])[ktne ];
-      (Dbuff.f[dirBSE ])[k] = (D.f[dirTNW ])[ktnw ];
-      (Dbuff.f[dirBNW ])[k] = (D.f[dirTSE ])[ktse ];
+      //(Dbuff.f[E   ])[k] = (D.f[E   ])[ke   ];
+      //(Dbuff.f[W   ])[k] = (D.f[W   ])[kw   ];
+      //(Dbuff.f[N   ])[k] = (D.f[N   ])[kn   ];
+      //(Dbuff.f[S   ])[k] = (D.f[S   ])[ks   ];
+      //(Dbuff.f[T   ])[k] = (D.f[T   ])[kt   ];
+      //(Dbuff.f[B   ])[k] = (D.f[B   ])[kb   ];
+      //(Dbuff.f[NE  ])[k] = (D.f[NE  ])[kne  ];
+      //(Dbuff.f[SW  ])[k] = (D.f[SW  ])[ksw  ];
+      //(Dbuff.f[SE  ])[k] = (D.f[SE  ])[kse  ];
+      //(Dbuff.f[NW  ])[k] = (D.f[NW  ])[knw  ];
+      //(Dbuff.f[TE  ])[k] = (D.f[TE  ])[kte  ];
+      //(Dbuff.f[BW  ])[k] = (D.f[BW  ])[kbw  ];
+      //(Dbuff.f[BE  ])[k] = (D.f[BE  ])[kbe  ];
+      //(Dbuff.f[TW  ])[k] = (D.f[TW  ])[ktw  ];
+      //(Dbuff.f[TN  ])[k] = (D.f[TN  ])[ktn  ];
+      //(Dbuff.f[BS  ])[k] = (D.f[BS  ])[kbs  ];
+      //(Dbuff.f[BN  ])[k] = (D.f[BN  ])[kbn  ];
+      //(Dbuff.f[TS  ])[k] = (D.f[TS  ])[kts  ];
+      //(Dbuff.f[REST])[k] = (D.f[REST])[kzero];
+      //(Dbuff.f[TNE ])[k] = (D.f[TNE ])[ktne ];
+      //(Dbuff.f[TSW ])[k] = (D.f[TSW ])[ktsw ];
+      //(Dbuff.f[TSE ])[k] = (D.f[TSE ])[ktse ];
+      //(Dbuff.f[TNW ])[k] = (D.f[TNW ])[ktnw ];
+      //(Dbuff.f[BNE ])[k] = (D.f[BNE ])[kbne ];
+      //(Dbuff.f[BSW ])[k] = (D.f[BSW ])[kbsw ];
+      //(Dbuff.f[BSE ])[k] = (D.f[BSE ])[kbse ];
+      //(Dbuff.f[BNW ])[k] = (D.f[BNW ])[kbnw ];
+      (Dbuff.f[E   ])[k] = (D.f[W   ])[kw   ];
+      (Dbuff.f[W   ])[k] = (D.f[E   ])[ke   ];
+      (Dbuff.f[N   ])[k] = (D.f[S   ])[ks   ];
+      (Dbuff.f[S   ])[k] = (D.f[N   ])[kn   ];
+      (Dbuff.f[T   ])[k] = (D.f[B   ])[kb   ];
+      (Dbuff.f[B   ])[k] = (D.f[T   ])[kt   ];
+      (Dbuff.f[NE  ])[k] = (D.f[SW  ])[ksw  ];
+      (Dbuff.f[SW  ])[k] = (D.f[NE  ])[kne  ];
+      (Dbuff.f[SE  ])[k] = (D.f[NW  ])[knw  ];
+      (Dbuff.f[NW  ])[k] = (D.f[SE  ])[kse  ];
+      (Dbuff.f[TE  ])[k] = (D.f[BW  ])[kbw  ];
+      (Dbuff.f[BW  ])[k] = (D.f[TE  ])[kte  ];
+      (Dbuff.f[BE  ])[k] = (D.f[TW  ])[ktw  ];
+      (Dbuff.f[TW  ])[k] = (D.f[BE  ])[kbe  ];
+      (Dbuff.f[TN  ])[k] = (D.f[BS  ])[kbs  ];
+      (Dbuff.f[BS  ])[k] = (D.f[TN  ])[ktn  ];
+      (Dbuff.f[BN  ])[k] = (D.f[TS  ])[kts  ];
+      (Dbuff.f[TS  ])[k] = (D.f[BN  ])[kbn  ];
+      (Dbuff.f[REST])[k] = (D.f[REST])[kzero];
+      (Dbuff.f[TNE ])[k] = (D.f[BSW ])[kbsw ];
+      (Dbuff.f[TSW ])[k] = (D.f[BNE ])[kbne ];
+      (Dbuff.f[TSE ])[k] = (D.f[BNW ])[kbnw ];
+      (Dbuff.f[TNW ])[k] = (D.f[BSE ])[kbse ];
+      (Dbuff.f[BNE ])[k] = (D.f[TSW ])[ktsw ];
+      (Dbuff.f[BSW ])[k] = (D.f[TNE ])[ktne ];
+      (Dbuff.f[BSE ])[k] = (D.f[TNW ])[ktnw ];
+      (Dbuff.f[BNW ])[k] = (D.f[TSE ])[ktse ];
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -300,150 +301,150 @@ extern "C" __global__ void setRecvFsPost27(real* DD,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //set Pointer for Buffer Fs
       Distributions27 Dbuff;
-      Dbuff.f[dirE   ] = &bufferFs[dirE   *buffmax];
-      Dbuff.f[dirW   ] = &bufferFs[dirW   *buffmax];
-      Dbuff.f[dirN   ] = &bufferFs[dirN   *buffmax];
-      Dbuff.f[dirS   ] = &bufferFs[dirS   *buffmax];
-      Dbuff.f[dirT   ] = &bufferFs[dirT   *buffmax];
-      Dbuff.f[dirB   ] = &bufferFs[dirB   *buffmax];
-      Dbuff.f[dirNE  ] = &bufferFs[dirNE  *buffmax];
-      Dbuff.f[dirSW  ] = &bufferFs[dirSW  *buffmax];
-      Dbuff.f[dirSE  ] = &bufferFs[dirSE  *buffmax];
-      Dbuff.f[dirNW  ] = &bufferFs[dirNW  *buffmax];
-      Dbuff.f[dirTE  ] = &bufferFs[dirTE  *buffmax];
-      Dbuff.f[dirBW  ] = &bufferFs[dirBW  *buffmax];
-      Dbuff.f[dirBE  ] = &bufferFs[dirBE  *buffmax];
-      Dbuff.f[dirTW  ] = &bufferFs[dirTW  *buffmax];
-      Dbuff.f[dirTN  ] = &bufferFs[dirTN  *buffmax];
-      Dbuff.f[dirBS  ] = &bufferFs[dirBS  *buffmax];
-      Dbuff.f[dirBN  ] = &bufferFs[dirBN  *buffmax];
-      Dbuff.f[dirTS  ] = &bufferFs[dirTS  *buffmax];
-      Dbuff.f[dirZERO] = &bufferFs[dirZERO*buffmax];
-      Dbuff.f[dirTNE ] = &bufferFs[dirTNE *buffmax];
-      Dbuff.f[dirTSW ] = &bufferFs[dirTSW *buffmax];
-      Dbuff.f[dirTSE ] = &bufferFs[dirTSE *buffmax];
-      Dbuff.f[dirTNW ] = &bufferFs[dirTNW *buffmax];
-      Dbuff.f[dirBNE ] = &bufferFs[dirBNE *buffmax];
-      Dbuff.f[dirBSW ] = &bufferFs[dirBSW *buffmax];
-      Dbuff.f[dirBSE ] = &bufferFs[dirBSE *buffmax];
-      Dbuff.f[dirBNW ] = &bufferFs[dirBNW *buffmax];
+      Dbuff.f[E   ] = &bufferFs[E   *buffmax];
+      Dbuff.f[W   ] = &bufferFs[W   *buffmax];
+      Dbuff.f[N   ] = &bufferFs[N   *buffmax];
+      Dbuff.f[S   ] = &bufferFs[S   *buffmax];
+      Dbuff.f[T   ] = &bufferFs[T   *buffmax];
+      Dbuff.f[B   ] = &bufferFs[B   *buffmax];
+      Dbuff.f[NE  ] = &bufferFs[NE  *buffmax];
+      Dbuff.f[SW  ] = &bufferFs[SW  *buffmax];
+      Dbuff.f[SE  ] = &bufferFs[SE  *buffmax];
+      Dbuff.f[NW  ] = &bufferFs[NW  *buffmax];
+      Dbuff.f[TE  ] = &bufferFs[TE  *buffmax];
+      Dbuff.f[BW  ] = &bufferFs[BW  *buffmax];
+      Dbuff.f[BE  ] = &bufferFs[BE  *buffmax];
+      Dbuff.f[TW  ] = &bufferFs[TW  *buffmax];
+      Dbuff.f[TN  ] = &bufferFs[TN  *buffmax];
+      Dbuff.f[BS  ] = &bufferFs[BS  *buffmax];
+      Dbuff.f[BN  ] = &bufferFs[BN  *buffmax];
+      Dbuff.f[TS  ] = &bufferFs[TS  *buffmax];
+      Dbuff.f[REST] = &bufferFs[REST*buffmax];
+      Dbuff.f[TNE ] = &bufferFs[TNE *buffmax];
+      Dbuff.f[TSW ] = &bufferFs[TSW *buffmax];
+      Dbuff.f[TSE ] = &bufferFs[TSE *buffmax];
+      Dbuff.f[TNW ] = &bufferFs[TNW *buffmax];
+      Dbuff.f[BNE ] = &bufferFs[BNE *buffmax];
+      Dbuff.f[BSW ] = &bufferFs[BSW *buffmax];
+      Dbuff.f[BSE ] = &bufferFs[BSE *buffmax];
+      Dbuff.f[BNW ] = &bufferFs[BNW *buffmax];
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //copy from buffer
-      //(D.f[dirE   ])[ke   ] = (Dbuff.f[dirE   ])[k];
-      //(D.f[dirW   ])[kw   ] = (Dbuff.f[dirW   ])[k];
-      //(D.f[dirN   ])[kn   ] = (Dbuff.f[dirN   ])[k];
-      //(D.f[dirS   ])[ks   ] = (Dbuff.f[dirS   ])[k];
-      //(D.f[dirT   ])[kt   ] = (Dbuff.f[dirT   ])[k];
-      //(D.f[dirB   ])[kb   ] = (Dbuff.f[dirB   ])[k];
-      //(D.f[dirNE  ])[kne  ] = (Dbuff.f[dirNE  ])[k];
-      //(D.f[dirSW  ])[ksw  ] = (Dbuff.f[dirSW  ])[k];
-      //(D.f[dirSE  ])[kse  ] = (Dbuff.f[dirSE  ])[k];
-      //(D.f[dirNW  ])[knw  ] = (Dbuff.f[dirNW  ])[k];
-      //(D.f[dirTE  ])[kte  ] = (Dbuff.f[dirTE  ])[k];
-      //(D.f[dirBW  ])[kbw  ] = (Dbuff.f[dirBW  ])[k];
-      //(D.f[dirBE  ])[kbe  ] = (Dbuff.f[dirBE  ])[k];
-      //(D.f[dirTW  ])[ktw  ] = (Dbuff.f[dirTW  ])[k];
-      //(D.f[dirTN  ])[ktn  ] = (Dbuff.f[dirTN  ])[k];
-      //(D.f[dirBS  ])[kbs  ] = (Dbuff.f[dirBS  ])[k];
-      //(D.f[dirBN  ])[kbn  ] = (Dbuff.f[dirBN  ])[k];
-      //(D.f[dirTS  ])[kts  ] = (Dbuff.f[dirTS  ])[k];
-      //(D.f[dirZERO])[kzero] = (Dbuff.f[dirZERO])[k];
-      //(D.f[dirTNE ])[ktne ] = (Dbuff.f[dirTNE ])[k];
-      //(D.f[dirTSW ])[ktsw ] = (Dbuff.f[dirTSW ])[k];
-      //(D.f[dirTSE ])[ktse ] = (Dbuff.f[dirTSE ])[k];
-      //(D.f[dirTNW ])[ktnw ] = (Dbuff.f[dirTNW ])[k];
-      //(D.f[dirBNE ])[kbne ] = (Dbuff.f[dirBNE ])[k];
-      //(D.f[dirBSW ])[kbsw ] = (Dbuff.f[dirBSW ])[k];
-      //(D.f[dirBSE ])[kbse ] = (Dbuff.f[dirBSE ])[k];
-      //(D.f[dirBNW ])[kbnw ] = (Dbuff.f[dirBNW ])[k];
-      (D.f[dirW   ])[kw   ] = (Dbuff.f[dirE   ])[k];
-      (D.f[dirE   ])[ke   ] = (Dbuff.f[dirW   ])[k];
-      (D.f[dirS   ])[ks   ] = (Dbuff.f[dirN   ])[k];
-      (D.f[dirN   ])[kn   ] = (Dbuff.f[dirS   ])[k];
-      (D.f[dirB   ])[kb   ] = (Dbuff.f[dirT   ])[k];
-      (D.f[dirT   ])[kt   ] = (Dbuff.f[dirB   ])[k];
-      (D.f[dirSW  ])[ksw  ] = (Dbuff.f[dirNE  ])[k];
-      (D.f[dirNE  ])[kne  ] = (Dbuff.f[dirSW  ])[k];
-      (D.f[dirNW  ])[knw  ] = (Dbuff.f[dirSE  ])[k];
-      (D.f[dirSE  ])[kse  ] = (Dbuff.f[dirNW  ])[k];
-      (D.f[dirBW  ])[kbw  ] = (Dbuff.f[dirTE  ])[k];
-      (D.f[dirTE  ])[kte  ] = (Dbuff.f[dirBW  ])[k];
-      (D.f[dirTW  ])[ktw  ] = (Dbuff.f[dirBE  ])[k];
-      (D.f[dirBE  ])[kbe  ] = (Dbuff.f[dirTW  ])[k];
-      (D.f[dirBS  ])[kbs  ] = (Dbuff.f[dirTN  ])[k];
-      (D.f[dirTN  ])[ktn  ] = (Dbuff.f[dirBS  ])[k];
-      (D.f[dirTS  ])[kts  ] = (Dbuff.f[dirBN  ])[k];
-      (D.f[dirBN  ])[kbn  ] = (Dbuff.f[dirTS  ])[k];
-      (D.f[dirZERO])[kzero] = (Dbuff.f[dirZERO])[k];
-      (D.f[dirBSW ])[kbsw ] = (Dbuff.f[dirTNE ])[k];
-      (D.f[dirBNE ])[kbne ] = (Dbuff.f[dirTSW ])[k];
-      (D.f[dirBNW ])[kbnw ] = (Dbuff.f[dirTSE ])[k];
-      (D.f[dirBSE ])[kbse ] = (Dbuff.f[dirTNW ])[k];
-      (D.f[dirTSW ])[ktsw ] = (Dbuff.f[dirBNE ])[k];
-      (D.f[dirTNE ])[ktne ] = (Dbuff.f[dirBSW ])[k];
-      (D.f[dirTNW ])[ktnw ] = (Dbuff.f[dirBSE ])[k];
-      (D.f[dirTSE ])[ktse ] = (Dbuff.f[dirBNW ])[k];
+      //(D.f[E   ])[ke   ] = (Dbuff.f[E   ])[k];
+      //(D.f[W   ])[kw   ] = (Dbuff.f[W   ])[k];
+      //(D.f[N   ])[kn   ] = (Dbuff.f[N   ])[k];
+      //(D.f[S   ])[ks   ] = (Dbuff.f[S   ])[k];
+      //(D.f[T   ])[kt   ] = (Dbuff.f[T   ])[k];
+      //(D.f[B   ])[kb   ] = (Dbuff.f[B   ])[k];
+      //(D.f[NE  ])[kne  ] = (Dbuff.f[NE  ])[k];
+      //(D.f[SW  ])[ksw  ] = (Dbuff.f[SW  ])[k];
+      //(D.f[SE  ])[kse  ] = (Dbuff.f[SE  ])[k];
+      //(D.f[NW  ])[knw  ] = (Dbuff.f[NW  ])[k];
+      //(D.f[TE  ])[kte  ] = (Dbuff.f[TE  ])[k];
+      //(D.f[BW  ])[kbw  ] = (Dbuff.f[BW  ])[k];
+      //(D.f[BE  ])[kbe  ] = (Dbuff.f[BE  ])[k];
+      //(D.f[TW  ])[ktw  ] = (Dbuff.f[TW  ])[k];
+      //(D.f[TN  ])[ktn  ] = (Dbuff.f[TN  ])[k];
+      //(D.f[BS  ])[kbs  ] = (Dbuff.f[BS  ])[k];
+      //(D.f[BN  ])[kbn  ] = (Dbuff.f[BN  ])[k];
+      //(D.f[TS  ])[kts  ] = (Dbuff.f[TS  ])[k];
+      //(D.f[REST])[kzero] = (Dbuff.f[REST])[k];
+      //(D.f[TNE ])[ktne ] = (Dbuff.f[TNE ])[k];
+      //(D.f[TSW ])[ktsw ] = (Dbuff.f[TSW ])[k];
+      //(D.f[TSE ])[ktse ] = (Dbuff.f[TSE ])[k];
+      //(D.f[TNW ])[ktnw ] = (Dbuff.f[TNW ])[k];
+      //(D.f[BNE ])[kbne ] = (Dbuff.f[BNE ])[k];
+      //(D.f[BSW ])[kbsw ] = (Dbuff.f[BSW ])[k];
+      //(D.f[BSE ])[kbse ] = (Dbuff.f[BSE ])[k];
+      //(D.f[BNW ])[kbnw ] = (Dbuff.f[BNW ])[k];
+      (D.f[W   ])[kw   ] = (Dbuff.f[E   ])[k];
+      (D.f[E   ])[ke   ] = (Dbuff.f[W   ])[k];
+      (D.f[S   ])[ks   ] = (Dbuff.f[N   ])[k];
+      (D.f[N   ])[kn   ] = (Dbuff.f[S   ])[k];
+      (D.f[B   ])[kb   ] = (Dbuff.f[T   ])[k];
+      (D.f[T   ])[kt   ] = (Dbuff.f[B   ])[k];
+      (D.f[SW  ])[ksw  ] = (Dbuff.f[NE  ])[k];
+      (D.f[NE  ])[kne  ] = (Dbuff.f[SW  ])[k];
+      (D.f[NW  ])[knw  ] = (Dbuff.f[SE  ])[k];
+      (D.f[SE  ])[kse  ] = (Dbuff.f[NW  ])[k];
+      (D.f[BW  ])[kbw  ] = (Dbuff.f[TE  ])[k];
+      (D.f[TE  ])[kte  ] = (Dbuff.f[BW  ])[k];
+      (D.f[TW  ])[ktw  ] = (Dbuff.f[BE  ])[k];
+      (D.f[BE  ])[kbe  ] = (Dbuff.f[TW  ])[k];
+      (D.f[BS  ])[kbs  ] = (Dbuff.f[TN  ])[k];
+      (D.f[TN  ])[ktn  ] = (Dbuff.f[BS  ])[k];
+      (D.f[TS  ])[kts  ] = (Dbuff.f[BN  ])[k];
+      (D.f[BN  ])[kbn  ] = (Dbuff.f[TS  ])[k];
+      (D.f[REST])[kzero] = (Dbuff.f[REST])[k];
+      (D.f[BSW ])[kbsw ] = (Dbuff.f[TNE ])[k];
+      (D.f[BNE ])[kbne ] = (Dbuff.f[TSW ])[k];
+      (D.f[BNW ])[kbnw ] = (Dbuff.f[TSE ])[k];
+      (D.f[BSE ])[kbse ] = (Dbuff.f[TNW ])[k];
+      (D.f[TSW ])[ktsw ] = (Dbuff.f[BNE ])[k];
+      (D.f[TNE ])[ktne ] = (Dbuff.f[BSW ])[k];
+      (D.f[TNW ])[ktnw ] = (Dbuff.f[BSE ])[k];
+      (D.f[TSE ])[ktse ] = (Dbuff.f[BNW ])[k];
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -535,123 +536,123 @@ extern "C" __global__ void getSendFsPre27(real* DD,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //set Pointer for Buffer Fs
       Distributions27 Dbuff;
-      Dbuff.f[dirE   ] = &bufferFs[dirE   *buffmax];
-      Dbuff.f[dirW   ] = &bufferFs[dirW   *buffmax];
-      Dbuff.f[dirN   ] = &bufferFs[dirN   *buffmax];
-      Dbuff.f[dirS   ] = &bufferFs[dirS   *buffmax];
-      Dbuff.f[dirT   ] = &bufferFs[dirT   *buffmax];
-      Dbuff.f[dirB   ] = &bufferFs[dirB   *buffmax];
-      Dbuff.f[dirNE  ] = &bufferFs[dirNE  *buffmax];
-      Dbuff.f[dirSW  ] = &bufferFs[dirSW  *buffmax];
-      Dbuff.f[dirSE  ] = &bufferFs[dirSE  *buffmax];
-      Dbuff.f[dirNW  ] = &bufferFs[dirNW  *buffmax];
-      Dbuff.f[dirTE  ] = &bufferFs[dirTE  *buffmax];
-      Dbuff.f[dirBW  ] = &bufferFs[dirBW  *buffmax];
-      Dbuff.f[dirBE  ] = &bufferFs[dirBE  *buffmax];
-      Dbuff.f[dirTW  ] = &bufferFs[dirTW  *buffmax];
-      Dbuff.f[dirTN  ] = &bufferFs[dirTN  *buffmax];
-      Dbuff.f[dirBS  ] = &bufferFs[dirBS  *buffmax];
-      Dbuff.f[dirBN  ] = &bufferFs[dirBN  *buffmax];
-      Dbuff.f[dirTS  ] = &bufferFs[dirTS  *buffmax];
-      Dbuff.f[dirZERO] = &bufferFs[dirZERO*buffmax];
-      Dbuff.f[dirTNE ] = &bufferFs[dirTNE *buffmax];
-      Dbuff.f[dirTSW ] = &bufferFs[dirTSW *buffmax];
-      Dbuff.f[dirTSE ] = &bufferFs[dirTSE *buffmax];
-      Dbuff.f[dirTNW ] = &bufferFs[dirTNW *buffmax];
-      Dbuff.f[dirBNE ] = &bufferFs[dirBNE *buffmax];
-      Dbuff.f[dirBSW ] = &bufferFs[dirBSW *buffmax];
-      Dbuff.f[dirBSE ] = &bufferFs[dirBSE *buffmax];
-      Dbuff.f[dirBNW ] = &bufferFs[dirBNW *buffmax];
+      Dbuff.f[E   ] = &bufferFs[E   *buffmax];
+      Dbuff.f[W   ] = &bufferFs[W   *buffmax];
+      Dbuff.f[N   ] = &bufferFs[N   *buffmax];
+      Dbuff.f[S   ] = &bufferFs[S   *buffmax];
+      Dbuff.f[T   ] = &bufferFs[T   *buffmax];
+      Dbuff.f[B   ] = &bufferFs[B   *buffmax];
+      Dbuff.f[NE  ] = &bufferFs[NE  *buffmax];
+      Dbuff.f[SW  ] = &bufferFs[SW  *buffmax];
+      Dbuff.f[SE  ] = &bufferFs[SE  *buffmax];
+      Dbuff.f[NW  ] = &bufferFs[NW  *buffmax];
+      Dbuff.f[TE  ] = &bufferFs[TE  *buffmax];
+      Dbuff.f[BW  ] = &bufferFs[BW  *buffmax];
+      Dbuff.f[BE  ] = &bufferFs[BE  *buffmax];
+      Dbuff.f[TW  ] = &bufferFs[TW  *buffmax];
+      Dbuff.f[TN  ] = &bufferFs[TN  *buffmax];
+      Dbuff.f[BS  ] = &bufferFs[BS  *buffmax];
+      Dbuff.f[BN  ] = &bufferFs[BN  *buffmax];
+      Dbuff.f[TS  ] = &bufferFs[TS  *buffmax];
+      Dbuff.f[REST] = &bufferFs[REST*buffmax];
+      Dbuff.f[TNE ] = &bufferFs[TNE *buffmax];
+      Dbuff.f[TSW ] = &bufferFs[TSW *buffmax];
+      Dbuff.f[TSE ] = &bufferFs[TSE *buffmax];
+      Dbuff.f[TNW ] = &bufferFs[TNW *buffmax];
+      Dbuff.f[BNE ] = &bufferFs[BNE *buffmax];
+      Dbuff.f[BSW ] = &bufferFs[BSW *buffmax];
+      Dbuff.f[BSE ] = &bufferFs[BSE *buffmax];
+      Dbuff.f[BNW ] = &bufferFs[BNW *buffmax];
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //copy to buffer
-      (Dbuff.f[dirE   ])[k] = (D.f[dirE   ])[ke   ];
-      (Dbuff.f[dirW   ])[k] = (D.f[dirW   ])[kw   ];
-      (Dbuff.f[dirN   ])[k] = (D.f[dirN   ])[kn   ];
-      (Dbuff.f[dirS   ])[k] = (D.f[dirS   ])[ks   ];
-      (Dbuff.f[dirT   ])[k] = (D.f[dirT   ])[kt   ];
-      (Dbuff.f[dirB   ])[k] = (D.f[dirB   ])[kb   ];
-      (Dbuff.f[dirNE  ])[k] = (D.f[dirNE  ])[kne  ];
-      (Dbuff.f[dirSW  ])[k] = (D.f[dirSW  ])[ksw  ];
-      (Dbuff.f[dirSE  ])[k] = (D.f[dirSE  ])[kse  ];
-      (Dbuff.f[dirNW  ])[k] = (D.f[dirNW  ])[knw  ];
-      (Dbuff.f[dirTE  ])[k] = (D.f[dirTE  ])[kte  ];
-      (Dbuff.f[dirBW  ])[k] = (D.f[dirBW  ])[kbw  ];
-      (Dbuff.f[dirBE  ])[k] = (D.f[dirBE  ])[kbe  ];
-      (Dbuff.f[dirTW  ])[k] = (D.f[dirTW  ])[ktw  ];
-      (Dbuff.f[dirTN  ])[k] = (D.f[dirTN  ])[ktn  ];
-      (Dbuff.f[dirBS  ])[k] = (D.f[dirBS  ])[kbs  ];
-      (Dbuff.f[dirBN  ])[k] = (D.f[dirBN  ])[kbn  ];
-      (Dbuff.f[dirTS  ])[k] = (D.f[dirTS  ])[kts  ];
-      (Dbuff.f[dirZERO])[k] = (D.f[dirZERO])[kzero];
-      (Dbuff.f[dirTNE ])[k] = (D.f[dirTNE ])[ktne ];
-      (Dbuff.f[dirTSW ])[k] = (D.f[dirTSW ])[ktsw ];
-      (Dbuff.f[dirTSE ])[k] = (D.f[dirTSE ])[ktse ];
-      (Dbuff.f[dirTNW ])[k] = (D.f[dirTNW ])[ktnw ];
-      (Dbuff.f[dirBNE ])[k] = (D.f[dirBNE ])[kbne ];
-      (Dbuff.f[dirBSW ])[k] = (D.f[dirBSW ])[kbsw ];
-      (Dbuff.f[dirBSE ])[k] = (D.f[dirBSE ])[kbse ];
-      (Dbuff.f[dirBNW ])[k] = (D.f[dirBNW ])[kbnw ];
+      (Dbuff.f[E   ])[k] = (D.f[E   ])[ke   ];
+      (Dbuff.f[W   ])[k] = (D.f[W   ])[kw   ];
+      (Dbuff.f[N   ])[k] = (D.f[N   ])[kn   ];
+      (Dbuff.f[S   ])[k] = (D.f[S   ])[ks   ];
+      (Dbuff.f[T   ])[k] = (D.f[T   ])[kt   ];
+      (Dbuff.f[B   ])[k] = (D.f[B   ])[kb   ];
+      (Dbuff.f[NE  ])[k] = (D.f[NE  ])[kne  ];
+      (Dbuff.f[SW  ])[k] = (D.f[SW  ])[ksw  ];
+      (Dbuff.f[SE  ])[k] = (D.f[SE  ])[kse  ];
+      (Dbuff.f[NW  ])[k] = (D.f[NW  ])[knw  ];
+      (Dbuff.f[TE  ])[k] = (D.f[TE  ])[kte  ];
+      (Dbuff.f[BW  ])[k] = (D.f[BW  ])[kbw  ];
+      (Dbuff.f[BE  ])[k] = (D.f[BE  ])[kbe  ];
+      (Dbuff.f[TW  ])[k] = (D.f[TW  ])[ktw  ];
+      (Dbuff.f[TN  ])[k] = (D.f[TN  ])[ktn  ];
+      (Dbuff.f[BS  ])[k] = (D.f[BS  ])[kbs  ];
+      (Dbuff.f[BN  ])[k] = (D.f[BN  ])[kbn  ];
+      (Dbuff.f[TS  ])[k] = (D.f[TS  ])[kts  ];
+      (Dbuff.f[REST])[k] = (D.f[REST])[kzero];
+      (Dbuff.f[TNE ])[k] = (D.f[TNE ])[ktne ];
+      (Dbuff.f[TSW ])[k] = (D.f[TSW ])[ktsw ];
+      (Dbuff.f[TSE ])[k] = (D.f[TSE ])[ktse ];
+      (Dbuff.f[TNW ])[k] = (D.f[TNW ])[ktnw ];
+      (Dbuff.f[BNE ])[k] = (D.f[BNE ])[kbne ];
+      (Dbuff.f[BSW ])[k] = (D.f[BSW ])[kbsw ];
+      (Dbuff.f[BSE ])[k] = (D.f[BSE ])[kbse ];
+      (Dbuff.f[BNW ])[k] = (D.f[BNW ])[kbnw ];
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -744,123 +745,123 @@ extern "C" __global__ void setRecvFsPre27(real* DD,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //set Pointer for Buffer Fs
       Distributions27 Dbuff;
-      Dbuff.f[dirE   ] = &bufferFs[dirE   *buffmax];
-      Dbuff.f[dirW   ] = &bufferFs[dirW   *buffmax];
-      Dbuff.f[dirN   ] = &bufferFs[dirN   *buffmax];
-      Dbuff.f[dirS   ] = &bufferFs[dirS   *buffmax];
-      Dbuff.f[dirT   ] = &bufferFs[dirT   *buffmax];
-      Dbuff.f[dirB   ] = &bufferFs[dirB   *buffmax];
-      Dbuff.f[dirNE  ] = &bufferFs[dirNE  *buffmax];
-      Dbuff.f[dirSW  ] = &bufferFs[dirSW  *buffmax];
-      Dbuff.f[dirSE  ] = &bufferFs[dirSE  *buffmax];
-      Dbuff.f[dirNW  ] = &bufferFs[dirNW  *buffmax];
-      Dbuff.f[dirTE  ] = &bufferFs[dirTE  *buffmax];
-      Dbuff.f[dirBW  ] = &bufferFs[dirBW  *buffmax];
-      Dbuff.f[dirBE  ] = &bufferFs[dirBE  *buffmax];
-      Dbuff.f[dirTW  ] = &bufferFs[dirTW  *buffmax];
-      Dbuff.f[dirTN  ] = &bufferFs[dirTN  *buffmax];
-      Dbuff.f[dirBS  ] = &bufferFs[dirBS  *buffmax];
-      Dbuff.f[dirBN  ] = &bufferFs[dirBN  *buffmax];
-      Dbuff.f[dirTS  ] = &bufferFs[dirTS  *buffmax];
-      Dbuff.f[dirZERO] = &bufferFs[dirZERO*buffmax];
-      Dbuff.f[dirTNE ] = &bufferFs[dirTNE *buffmax];
-      Dbuff.f[dirTSW ] = &bufferFs[dirTSW *buffmax];
-      Dbuff.f[dirTSE ] = &bufferFs[dirTSE *buffmax];
-      Dbuff.f[dirTNW ] = &bufferFs[dirTNW *buffmax];
-      Dbuff.f[dirBNE ] = &bufferFs[dirBNE *buffmax];
-      Dbuff.f[dirBSW ] = &bufferFs[dirBSW *buffmax];
-      Dbuff.f[dirBSE ] = &bufferFs[dirBSE *buffmax];
-      Dbuff.f[dirBNW ] = &bufferFs[dirBNW *buffmax];
+      Dbuff.f[E   ] = &bufferFs[E   *buffmax];
+      Dbuff.f[W   ] = &bufferFs[W   *buffmax];
+      Dbuff.f[N   ] = &bufferFs[N   *buffmax];
+      Dbuff.f[S   ] = &bufferFs[S   *buffmax];
+      Dbuff.f[T   ] = &bufferFs[T   *buffmax];
+      Dbuff.f[B   ] = &bufferFs[B   *buffmax];
+      Dbuff.f[NE  ] = &bufferFs[NE  *buffmax];
+      Dbuff.f[SW  ] = &bufferFs[SW  *buffmax];
+      Dbuff.f[SE  ] = &bufferFs[SE  *buffmax];
+      Dbuff.f[NW  ] = &bufferFs[NW  *buffmax];
+      Dbuff.f[TE  ] = &bufferFs[TE  *buffmax];
+      Dbuff.f[BW  ] = &bufferFs[BW  *buffmax];
+      Dbuff.f[BE  ] = &bufferFs[BE  *buffmax];
+      Dbuff.f[TW  ] = &bufferFs[TW  *buffmax];
+      Dbuff.f[TN  ] = &bufferFs[TN  *buffmax];
+      Dbuff.f[BS  ] = &bufferFs[BS  *buffmax];
+      Dbuff.f[BN  ] = &bufferFs[BN  *buffmax];
+      Dbuff.f[TS  ] = &bufferFs[TS  *buffmax];
+      Dbuff.f[REST] = &bufferFs[REST*buffmax];
+      Dbuff.f[TNE ] = &bufferFs[TNE *buffmax];
+      Dbuff.f[TSW ] = &bufferFs[TSW *buffmax];
+      Dbuff.f[TSE ] = &bufferFs[TSE *buffmax];
+      Dbuff.f[TNW ] = &bufferFs[TNW *buffmax];
+      Dbuff.f[BNE ] = &bufferFs[BNE *buffmax];
+      Dbuff.f[BSW ] = &bufferFs[BSW *buffmax];
+      Dbuff.f[BSE ] = &bufferFs[BSE *buffmax];
+      Dbuff.f[BNW ] = &bufferFs[BNW *buffmax];
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //copy from buffer
-      (D.f[dirE   ])[ke   ] = (Dbuff.f[dirE   ])[k];
-      (D.f[dirW   ])[kw   ] = (Dbuff.f[dirW   ])[k];
-      (D.f[dirN   ])[kn   ] = (Dbuff.f[dirN   ])[k];
-      (D.f[dirS   ])[ks   ] = (Dbuff.f[dirS   ])[k];
-      (D.f[dirT   ])[kt   ] = (Dbuff.f[dirT   ])[k];
-      (D.f[dirB   ])[kb   ] = (Dbuff.f[dirB   ])[k];
-      (D.f[dirNE  ])[kne  ] = (Dbuff.f[dirNE  ])[k];
-      (D.f[dirSW  ])[ksw  ] = (Dbuff.f[dirSW  ])[k];
-      (D.f[dirSE  ])[kse  ] = (Dbuff.f[dirSE  ])[k];
-      (D.f[dirNW  ])[knw  ] = (Dbuff.f[dirNW  ])[k];
-      (D.f[dirTE  ])[kte  ] = (Dbuff.f[dirTE  ])[k];
-      (D.f[dirBW  ])[kbw  ] = (Dbuff.f[dirBW  ])[k];
-      (D.f[dirBE  ])[kbe  ] = (Dbuff.f[dirBE  ])[k];
-      (D.f[dirTW  ])[ktw  ] = (Dbuff.f[dirTW  ])[k];
-      (D.f[dirTN  ])[ktn  ] = (Dbuff.f[dirTN  ])[k];
-      (D.f[dirBS  ])[kbs  ] = (Dbuff.f[dirBS  ])[k];
-      (D.f[dirBN  ])[kbn  ] = (Dbuff.f[dirBN  ])[k];
-      (D.f[dirTS  ])[kts  ] = (Dbuff.f[dirTS  ])[k];
-      (D.f[dirZERO])[kzero] = (Dbuff.f[dirZERO])[k];
-      (D.f[dirTNE ])[ktne ] = (Dbuff.f[dirTNE ])[k];
-      (D.f[dirTSW ])[ktsw ] = (Dbuff.f[dirTSW ])[k];
-      (D.f[dirTSE ])[ktse ] = (Dbuff.f[dirTSE ])[k];
-      (D.f[dirTNW ])[ktnw ] = (Dbuff.f[dirTNW ])[k];
-      (D.f[dirBNE ])[kbne ] = (Dbuff.f[dirBNE ])[k];
-      (D.f[dirBSW ])[kbsw ] = (Dbuff.f[dirBSW ])[k];
-      (D.f[dirBSE ])[kbse ] = (Dbuff.f[dirBSE ])[k];
-      (D.f[dirBNW ])[kbnw ] = (Dbuff.f[dirBNW ])[k];
+      (D.f[E   ])[ke   ] = (Dbuff.f[E   ])[k];
+      (D.f[W   ])[kw   ] = (Dbuff.f[W   ])[k];
+      (D.f[N   ])[kn   ] = (Dbuff.f[N   ])[k];
+      (D.f[S   ])[ks   ] = (Dbuff.f[S   ])[k];
+      (D.f[T   ])[kt   ] = (Dbuff.f[T   ])[k];
+      (D.f[B   ])[kb   ] = (Dbuff.f[B   ])[k];
+      (D.f[NE  ])[kne  ] = (Dbuff.f[NE  ])[k];
+      (D.f[SW  ])[ksw  ] = (Dbuff.f[SW  ])[k];
+      (D.f[SE  ])[kse  ] = (Dbuff.f[SE  ])[k];
+      (D.f[NW  ])[knw  ] = (Dbuff.f[NW  ])[k];
+      (D.f[TE  ])[kte  ] = (Dbuff.f[TE  ])[k];
+      (D.f[BW  ])[kbw  ] = (Dbuff.f[BW  ])[k];
+      (D.f[BE  ])[kbe  ] = (Dbuff.f[BE  ])[k];
+      (D.f[TW  ])[ktw  ] = (Dbuff.f[TW  ])[k];
+      (D.f[TN  ])[ktn  ] = (Dbuff.f[TN  ])[k];
+      (D.f[BS  ])[kbs  ] = (Dbuff.f[BS  ])[k];
+      (D.f[BN  ])[kbn  ] = (Dbuff.f[BN  ])[k];
+      (D.f[TS  ])[kts  ] = (Dbuff.f[TS  ])[k];
+      (D.f[REST])[kzero] = (Dbuff.f[REST])[k];
+      (D.f[TNE ])[ktne ] = (Dbuff.f[TNE ])[k];
+      (D.f[TSW ])[ktsw ] = (Dbuff.f[TSW ])[k];
+      (D.f[TSE ])[ktse ] = (Dbuff.f[TSE ])[k];
+      (D.f[TNW ])[ktnw ] = (Dbuff.f[TNW ])[k];
+      (D.f[BNE ])[kbne ] = (Dbuff.f[BNE ])[k];
+      (D.f[BSW ])[kbsw ] = (Dbuff.f[BSW ])[k];
+      (D.f[BSE ])[kbse ] = (Dbuff.f[BSE ])[k];
+      (D.f[BNW ])[kbnw ] = (Dbuff.f[BNW ])[k];
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -930,39 +931,39 @@ extern "C" __global__ void getSendGsF3(
 		Distributions6 G;
 		if (isEvenTimestep)
 		{
-			G.g[dirE] = &G6[dirE   *size_Mat];
-			G.g[dirW] = &G6[dirW   *size_Mat];
-			G.g[dirN] = &G6[dirN   *size_Mat];
-			G.g[dirS] = &G6[dirS   *size_Mat];
-			G.g[dirT] = &G6[dirT   *size_Mat];
-			G.g[dirB] = &G6[dirB   *size_Mat];
+			G.g[E] = &G6[E   *size_Mat];
+			G.g[W] = &G6[W   *size_Mat];
+			G.g[N] = &G6[N   *size_Mat];
+			G.g[S] = &G6[S   *size_Mat];
+			G.g[T] = &G6[T   *size_Mat];
+			G.g[B] = &G6[B   *size_Mat];
 		}
 		else
 		{
-			G.g[dirW] = &G6[dirE   *size_Mat];
-			G.g[dirE] = &G6[dirW   *size_Mat];
-			G.g[dirS] = &G6[dirN   *size_Mat];
-			G.g[dirN] = &G6[dirS   *size_Mat];
-			G.g[dirB] = &G6[dirT   *size_Mat];
-			G.g[dirT] = &G6[dirB   *size_Mat];
+			G.g[W] = &G6[E   *size_Mat];
+			G.g[E] = &G6[W   *size_Mat];
+			G.g[S] = &G6[N   *size_Mat];
+			G.g[N] = &G6[S   *size_Mat];
+			G.g[B] = &G6[T   *size_Mat];
+			G.g[T] = &G6[B   *size_Mat];
 		}
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		//set Pointer for Buffer Gs
 		Distributions6 Dbuff;
-		Dbuff.g[dirE] = &bufferGs[dirE   *buffmax];
-		Dbuff.g[dirW] = &bufferGs[dirW   *buffmax];
-		Dbuff.g[dirN] = &bufferGs[dirN   *buffmax];
-		Dbuff.g[dirS] = &bufferGs[dirS   *buffmax];
-		Dbuff.g[dirT] = &bufferGs[dirT   *buffmax];
-		Dbuff.g[dirB] = &bufferGs[dirB   *buffmax];
+		Dbuff.g[E] = &bufferGs[E   *buffmax];
+		Dbuff.g[W] = &bufferGs[W   *buffmax];
+		Dbuff.g[N] = &bufferGs[N   *buffmax];
+		Dbuff.g[S] = &bufferGs[S   *buffmax];
+		Dbuff.g[T] = &bufferGs[T   *buffmax];
+		Dbuff.g[B] = &bufferGs[B   *buffmax];
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		//write Gs to buffer
-		(Dbuff.g[dirE])[k] = (G.g[dirW])[kw];
-		(Dbuff.g[dirW])[k] = (G.g[dirE])[kr];
-		(Dbuff.g[dirN])[k] = (G.g[dirS])[ks];
-		(Dbuff.g[dirS])[k] = (G.g[dirN])[kr];
-		(Dbuff.g[dirT])[k] = (G.g[dirB])[kb];
-		(Dbuff.g[dirB])[k] = (G.g[dirT])[kr];
+		(Dbuff.g[E])[k] = (G.g[W])[kw];
+		(Dbuff.g[W])[k] = (G.g[E])[kr];
+		(Dbuff.g[N])[k] = (G.g[S])[ks];
+		(Dbuff.g[S])[k] = (G.g[N])[kr];
+		(Dbuff.g[T])[k] = (G.g[B])[kb];
+		(Dbuff.g[B])[k] = (G.g[T])[kr];
 	}
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1033,39 +1034,39 @@ extern "C" __global__ void setRecvGsF3(
 		Distributions6 G;
 		if (isEvenTimestep)
 		{
-			G.g[dirE] = &G6[dirE   *size_Mat];
-			G.g[dirW] = &G6[dirW   *size_Mat];
-			G.g[dirN] = &G6[dirN   *size_Mat];
-			G.g[dirS] = &G6[dirS   *size_Mat];
-			G.g[dirT] = &G6[dirT   *size_Mat];
-			G.g[dirB] = &G6[dirB   *size_Mat];
+			G.g[E] = &G6[E   *size_Mat];
+			G.g[W] = &G6[W   *size_Mat];
+			G.g[N] = &G6[N   *size_Mat];
+			G.g[S] = &G6[S   *size_Mat];
+			G.g[T] = &G6[T   *size_Mat];
+			G.g[B] = &G6[B   *size_Mat];
 		}
 		else
 		{
-			G.g[dirW] = &G6[dirE   *size_Mat];
-			G.g[dirE] = &G6[dirW   *size_Mat];
-			G.g[dirS] = &G6[dirN   *size_Mat];
-			G.g[dirN] = &G6[dirS   *size_Mat];
-			G.g[dirB] = &G6[dirT   *size_Mat];
-			G.g[dirT] = &G6[dirB   *size_Mat];
+			G.g[W] = &G6[E   *size_Mat];
+			G.g[E] = &G6[W   *size_Mat];
+			G.g[S] = &G6[N   *size_Mat];
+			G.g[N] = &G6[S   *size_Mat];
+			G.g[B] = &G6[T   *size_Mat];
+			G.g[T] = &G6[B   *size_Mat];
 		}
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		//set Pointer for Buffer Gs
 		Distributions6 Dbuff;
-		Dbuff.g[dirE] = &bufferGs[dirE   *buffmax];
-		Dbuff.g[dirW] = &bufferGs[dirW   *buffmax];
-		Dbuff.g[dirN] = &bufferGs[dirN   *buffmax];
-		Dbuff.g[dirS] = &bufferGs[dirS   *buffmax];
-		Dbuff.g[dirT] = &bufferGs[dirT   *buffmax];
-		Dbuff.g[dirB] = &bufferGs[dirB   *buffmax];
+		Dbuff.g[E] = &bufferGs[E   *buffmax];
+		Dbuff.g[W] = &bufferGs[W   *buffmax];
+		Dbuff.g[N] = &bufferGs[N   *buffmax];
+		Dbuff.g[S] = &bufferGs[S   *buffmax];
+		Dbuff.g[T] = &bufferGs[T   *buffmax];
+		Dbuff.g[B] = &bufferGs[B   *buffmax];
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		//write buffer to Gs
-		(G.g[dirW])[kw] = (Dbuff.g[dirE])[k];
-		(G.g[dirE])[kr] = (Dbuff.g[dirW])[k];
-		(G.g[dirS])[ks] = (Dbuff.g[dirN])[k];
-		(G.g[dirN])[kr] = (Dbuff.g[dirS])[k];
-		(G.g[dirB])[kb] = (Dbuff.g[dirT])[k];
-		(G.g[dirT])[kr] = (Dbuff.g[dirB])[k];
+		(G.g[W])[kw] = (Dbuff.g[E])[k];
+		(G.g[E])[kr] = (Dbuff.g[W])[k];
+		(G.g[S])[ks] = (Dbuff.g[N])[k];
+		(G.g[N])[kr] = (Dbuff.g[S])[k];
+		(G.g[B])[kb] = (Dbuff.g[T])[k];
+		(G.g[T])[kr] = (Dbuff.g[B])[k];
 	}
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h b/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h
index 23212df68745c449bbfc3dd6fb4cd94440b302b5..2d14f07bb6a25fb192ec96b425aa9c37a0aeb9f4 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h
+++ b/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h
@@ -5,16 +5,18 @@
 // |___/_/_/   \__/\__,_/\__,_/_/_/   /_/\__,_/_/\__,_/____/   \____/_/    \_____/
 //
 //////////////////////////////////////////////////////////////////////////
-//random numbers
-#include <curand.h>
+#ifndef GPU_INTERFACE_H
+#define GPU_INTERFACE_H
+
+#include <curand.h> //random numbers
 #include <curand_kernel.h>
 #include <cuda_runtime.h>
 
 #include <DataTypes.h>
 #include "LBM/LB.h"
 
-#ifndef GPU_INTERFACE_H
-#define GPU_INTERFACE_H
+struct LBMSimulationParameter;
+class Parameter;
 
 //////////////////////////////////////////////////////////////////////////
 //Kernel
@@ -645,41 +647,14 @@ extern "C" void BcVel27(int nx,
                         real u0x, 
                         real om);
 
-extern "C" void QDev27( unsigned int numberOfThreads,
-                        int nx,
-                        int ny,
-                        real* DD, 
-                        int* k_Q, 
-                        real* QQ,
-                        unsigned int sizeQ,
-                        unsigned int numberOfBCnodes, 
-                        real om1, 
-                        unsigned int* neighborX,
-                        unsigned int* neighborY,
-                        unsigned int* neighborZ,
-                        unsigned int size_Mat, 
-                        bool isEvenTimestep);
+extern "C" void QDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
-extern "C" void QDevComp27(unsigned int numberOfThreads,
-						   int nx,
-						   int ny,
-						   real* DD, 
-						   int* k_Q, 
-						   real* QQ,
-						   unsigned int sizeQ,
-						   unsigned int numberOfBCnodes, 
-						   real om1, 
-						   unsigned int* neighborX,
-						   unsigned int* neighborY,
-						   unsigned int* neighborZ,
-						   unsigned int size_Mat, 
-						   bool isEvenTimestep);
+extern "C" void QDevComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QDevCompThinWalls27(unsigned int numberOfThreads,
 									real* DD, 
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes, 
 									real om1, 
 									unsigned int* geom,
@@ -690,28 +665,12 @@ extern "C" void QDevCompThinWalls27(unsigned int numberOfThreads,
 									unsigned int size_Mat, 
 									bool isEvenTimestep);
 
-extern "C" void QDev3rdMomentsComp27(  unsigned int numberOfThreads,
-									   int nx,
-									   int ny,
-									   real* DD, 
-									   int* k_Q, 
-									   real* QQ,
-									   unsigned int sizeQ,
-									   unsigned int numberOfBCnodes, 
-									   real om1, 
-									   unsigned int* neighborX,
-									   unsigned int* neighborY,
-									   unsigned int* neighborZ,
-									   unsigned int size_Mat, 
-									   bool isEvenTimestep);
+extern "C" void QDev3rdMomentsComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QDevIncompHighNu27(  unsigned int numberOfThreads,
-									 int nx,
-									 int ny,
 									 real* DD, 
 									 int* k_Q, 
 									 real* QQ,
-									 unsigned int sizeQ,
 									 unsigned int numberOfBCnodes, 
 									 real om1, 
 									 unsigned int* neighborX,
@@ -721,12 +680,9 @@ extern "C" void QDevIncompHighNu27(  unsigned int numberOfThreads,
 									 bool isEvenTimestep);
 
 extern "C" void QDevCompHighNu27(unsigned int numberOfThreads,
-								 int nx,
-								 int ny,
 								 real* DD, 
 								 int* k_Q, 
 								 real* QQ,
-								 unsigned int sizeQ,
 								 unsigned int numberOfBCnodes, 
 								 real om1, 
 								 unsigned int* neighborX,
@@ -735,31 +691,16 @@ extern "C" void QDevCompHighNu27(unsigned int numberOfThreads,
 								 unsigned int size_Mat, 
 								 bool isEvenTimestep);
 
-extern "C" void QVelDevicePlainBB27(unsigned int numberOfThreads,
-									real* vx,
-									real* vy,
-									real* vz,
-									real* DD,
-									int* k_Q, 
-									real* QQ,
-									unsigned int sizeQ,
-									int numberOfBCnodes, 
-									real om1, 
-									unsigned int* neighborX,
-									unsigned int* neighborY,
-									unsigned int* neighborZ,
-									unsigned int size_Mat, 
-									bool isEvenTimestep);
+extern "C" void QVelDevicePlainBB27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 	
-extern "C" void QVelDeviceCouhette27(unsigned int numberOfThreads,
+extern "C" void QVelDeviceCouette27(unsigned int numberOfThreads,
 									real* vx,
 									real* vy,
 									real* vz,
 									real* DD,
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
-									int numberOfBCnodes, 
+									unsigned int numberOfBCnodes, 
 									real om1, 
 									unsigned int* neighborX,
 									unsigned int* neighborY,
@@ -776,7 +717,6 @@ extern "C" void QVelDevice1h27( unsigned int numberOfThreads,
 								real* DD, 
 								int* k_Q, 
 								real* QQ,
-								unsigned int sizeQ,
 								unsigned int numberOfBCnodes, 
 								real om1, 
 								real Phi, 
@@ -790,34 +730,15 @@ extern "C" void QVelDevice1h27( unsigned int numberOfThreads,
 								unsigned int size_Mat, 
 								bool isEvenTimestep);
 
-extern "C" void QVelDev27(unsigned int numberOfThreads,
-                          int nx,
-                          int ny,
-                          real* vx,
-                          real* vy,
-                          real* vz,
-                          real* DD, 
-                          int* k_Q, 
-                          real* QQ,
-                          unsigned int sizeQ,
-                          unsigned int numberOfBCnodes, 
-                          real om1, 
-                          unsigned int* neighborX,
-                          unsigned int* neighborY,
-                          unsigned int* neighborZ,
-                          unsigned int size_Mat, 
-                          bool isEvenTimestep);
+extern "C" void QVelDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QVelDevCompPlusSlip27(unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* vx,
 									  real* vy,
 									  real* vz,
 									  real* DD, 
 									  int* k_Q, 
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes, 
 									  real om1, 
 									  unsigned int* neighborX,
@@ -826,23 +747,7 @@ extern "C" void QVelDevCompPlusSlip27(unsigned int numberOfThreads,
 									  unsigned int size_Mat, 
 									  bool isEvenTimestep);
 
-extern "C" void QVelDevComp27(unsigned int numberOfThreads,
-							  int nx,
-							  int ny,
-							  real* vx,
-							  real* vy,
-							  real* vz,
-							  real* DD, 
-							  int* k_Q, 
-							  real* QQ,
-							  unsigned int sizeQ,
-							  unsigned int numberOfBCnodes, 
-							  real om1, 
-							  unsigned int* neighborX,
-							  unsigned int* neighborY,
-							  unsigned int* neighborZ,
-							  unsigned int size_Mat, 
-							  bool isEvenTimestep);
+extern "C" void QVelDevComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
 							           real* vx,
@@ -851,7 +756,6 @@ extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
 							           real* DD, 
 							           int* k_Q, 
 							           real* QQ,
-							           unsigned int sizeQ,
 							           unsigned int numberOfBCnodes, 
 							           real om1, 
 									   unsigned int* geom,
@@ -862,34 +766,15 @@ extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
 							           unsigned int size_Mat, 
 							           bool isEvenTimestep);
 
-extern "C" void QVelDevCompZeroPress27(unsigned int numberOfThreads,
-									   int nx,
-									   int ny,
-									   real* vx,
-									   real* vy,
-									   real* vz,
-									   real* DD, 
-									   int* k_Q, 
-									   real* QQ,
-									   unsigned int sizeQ,
-									   int kArray, 
-									   real om1, 
-									   unsigned int* neighborX,
-									   unsigned int* neighborY,
-									   unsigned int* neighborZ,
-									   unsigned int size_Mat, 
-									   bool isEvenTimestep);
+extern "C" void QVelDevCompZeroPress27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QVelDevIncompHighNu27(  unsigned int numberOfThreads,
-										int nx,
-										int ny,
 										real* vx,
 										real* vy,
 										real* vz,
 										real* DD, 
 										int* k_Q, 
 										real* QQ,
-										unsigned int sizeQ,
 										unsigned int numberOfBCnodes, 
 										real om1, 
 										unsigned int* neighborX,
@@ -899,15 +784,12 @@ extern "C" void QVelDevIncompHighNu27(  unsigned int numberOfThreads,
 										bool isEvenTimestep);
 
 extern "C" void QVelDevCompHighNu27(unsigned int numberOfThreads,
-									int nx,
-									int ny,
 									real* vx,
 									real* vy,
 									real* vz,
 									real* DD, 
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes, 
 									real om1, 
 									unsigned int* neighborX,
@@ -945,37 +827,17 @@ extern "C" void QVeloStreetDevEQ27(
 	uint  size_Mat,
 	bool  isEvenTimestep);
 
-extern "C" void QSlipDev27( unsigned int numberOfThreads,
-							real* DD, 
-							int* k_Q, 
-							real* QQ,
-							unsigned int sizeQ,
-							real om1, 
-							unsigned int* neighborX,
-							unsigned int* neighborY,
-							unsigned int* neighborZ,
-							unsigned int size_Mat, 
-							bool isEvenTimestep);
-
-extern "C" void QSlipDevComp27(unsigned int numberOfThreads,
-							   real* DD, 
-							   int* k_Q, 
-							   real* QQ,
-							   unsigned int sizeQ,
-							   real om1, 
-							   unsigned int* neighborX,
-							   unsigned int* neighborY,
-							   unsigned int* neighborZ,
-							   real* turbViscosity,
-                        	   bool useTurbViscosity,
-							   unsigned int size_Mat, 
-							   bool isEvenTimestep);
+extern "C" void QSlipDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
+
+extern "C" void QSlipDevComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
+
+extern "C" void QSlipDevCompTurbulentViscosity27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QSlipGeomDevComp27( unsigned int numberOfThreads,
 									real* DD, 
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
+									unsigned int numberOfBCnodes,
 									real om1, 
 									real* NormalX,
 									real* NormalY,
@@ -990,7 +852,7 @@ extern "C" void QSlipNormDevComp27(unsigned int numberOfThreads,
 								   real* DD, 
 								   int* k_Q, 
 								   real* QQ,
-								   unsigned int sizeQ,
+								   unsigned int numberOfBCnodes,
 								   real om1, 
 								   real* NormalX,
 								   real* NormalY,
@@ -1001,85 +863,11 @@ extern "C" void QSlipNormDevComp27(unsigned int numberOfThreads,
 								   unsigned int size_Mat, 
 								   bool isEvenTimestep);
 
-extern "C" void QStressDevComp27(unsigned int numberOfThreads,
-								real* DD, 
-								int* k_Q, 
-								int* k_N,
-								real* QQ,
-								unsigned int sizeQ,
-								real om1, 
-								real* turbViscosity,
-								real* vx,
-								real* vy,
-								real* vz,
-								real* normalX,
-								real* normalY,
-								real* normalZ,
-								real* vx_el,
-								real* vy_el,
-								real* vz_el,
-								real* vx_w_mean,
-								real* vy_w_mean,
-								real* vz_w_mean,
-								int* samplingOffset,
-								real* z0,
-								bool  hasWallModelMonitor,
-								real* u_star,
-								real* Fx,
-								real* Fy,
-								real* Fz,
-								unsigned int* neighborX,
-								unsigned int* neighborY,
-								unsigned int* neighborZ,
-								unsigned int size_Mat, 
-								bool isEvenTimestep);
+extern "C" void QStressDevComp27(Parameter *para,  QforBoundaryConditions* boundaryCondition, const int level);
 
-extern "C" void BBStressDev27(  unsigned int numberOfThreads,
-								real* DD, 
-								int* k_Q, 
-								int* k_N, 
-								real* QQ,
-								unsigned int sizeQ,
-								real* vx,
-								real* vy,
-								real* vz,
-								real* normalX,
-								real* normalY,
-								real* normalZ,
-								real* vx_el,
-								real* vy_el,
-								real* vz_el,
-								real* vx_w_mean,
-								real* vy_w_mean,
-								real* vz_w_mean,
-								int* samplingOffset,
-								real* z0,
-								bool  hasWallModelMonitor,
-								real* u_star,
-								real* Fx,
-								real* Fy,
-								real* Fz,
-								unsigned int* neighborX,
-								unsigned int* neighborY,
-								unsigned int* neighborZ,
-								unsigned int size_Mat, 
-								bool isEvenTimestep);
+extern "C" void BBStressDev27(Parameter *para,  QforBoundaryConditions* boundaryCondition, const int level);
 
-extern "C" void QPressDev27(unsigned int numberOfThreads,
-                          int nx,
-                          int ny,
-                          real* rhoBC,
-                          real* DD, 
-                          int* k_Q, 
-                          real* QQ,
-                          unsigned int sizeQ,
-                          unsigned int numberOfBCnodes, 
-                          real om1, 
-                          unsigned int* neighborX,
-                          unsigned int* neighborY,
-                          unsigned int* neighborZ,
-                          unsigned int size_Mat, 
-                          bool isEvenTimestep);
+extern "C" void QPressDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QPressDevFixBackflow27(unsigned int numberOfThreads,
                                        real* rhoBC,
@@ -1105,31 +893,9 @@ extern "C" void QPressDevDirDepBot27(unsigned int numberOfThreads,
                                      unsigned int size_Mat, 
                                      bool isEvenTimestep);
 
-extern "C" void QPressNoRhoDev27(  unsigned int numberOfThreads,
-								   real* rhoBC,
-								   real* DD, 
-								   int* k_Q, 
-								   int* k_N, 
-								   unsigned int numberOfBCnodes, 
-								   real om1, 
-								   unsigned int* neighborX,
-								   unsigned int* neighborY,
-								   unsigned int* neighborZ,
-								   unsigned int size_Mat, 
-								   bool isEvenTimestep);
+extern "C" void QPressNoRhoDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
-extern "C" void QInflowScaleByPressDev27(unsigned int numberOfThreads,
-										 real* rhoBC,
-										 real* DD, 
-										 int* k_Q, 
-										 int* k_N, 
-										 unsigned int numberOfBCnodes, 
-										 real om1, 
-										 unsigned int* neighborX,
-										 unsigned int* neighborY,
-										 unsigned int* neighborZ,
-										 unsigned int size_Mat, 
-										 bool isEvenTimestep);
+extern "C" void QInflowScaleByPressDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QPressDevOld27(unsigned int numberOfThreads,
                                real* rhoBC,
@@ -1144,45 +910,11 @@ extern "C" void QPressDevOld27(unsigned int numberOfThreads,
                                unsigned int size_Mat, 
                                bool isEvenTimestep);
 
-extern "C" void QPressDevIncompNEQ27(unsigned int numberOfThreads,
-									 real* rhoBC,
-									 real* DD, 
-									 int* k_Q, 
-									 int* k_N, 
-									 unsigned int numberOfBCnodes, 
-									 real om1, 
-									 unsigned int* neighborX,
-									 unsigned int* neighborY,
-									 unsigned int* neighborZ,
-									 unsigned int size_Mat, 
-									 bool isEvenTimestep);
+extern "C" void QPressDevIncompNEQ27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
-extern "C" void QPressDevNEQ27(unsigned int numberOfThreads,
-							   real* rhoBC,
-							   real* DD, 
-							   int* k_Q, 
-							   int* k_N, 
-							   unsigned int numberOfBCnodes, 
-							   real om1, 
-							   unsigned int* neighborX,
-							   unsigned int* neighborY,
-							   unsigned int* neighborZ,
-							   unsigned int size_Mat, 
-							   bool isEvenTimestep);
+extern "C" void QPressDevNEQ27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
-extern "C" void QPressDevEQZ27(unsigned int numberOfThreads,
-							   real* rhoBC,
-							   real* DD, 
-							   int* k_Q, 
-							   int* k_N, 
-							   real* kTestRE, 
-							   unsigned int numberOfBCnodes, 
-							   real om1, 
-							   unsigned int* neighborX,
-							   unsigned int* neighborY,
-							   unsigned int* neighborZ,
-							   unsigned int size_Mat, 
-							   bool isEvenTimestep);
+extern "C" void QPressDevEQZ27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QPressDevZero27(unsigned int numberOfThreads,
                                 real* DD, 
@@ -1207,27 +939,13 @@ extern "C" void QPressDevFake27(   unsigned int numberOfThreads,
 								   unsigned int size_Mat, 
 								   bool isEvenTimestep);
 
-extern "C" void BBDev27( unsigned int numberOfThreads,
-                        int nx,
-                        int ny,
-                        real* DD, 
-                        int* k_Q, 
-                        real* QQ,
-                        unsigned int sizeQ,
-                        unsigned int numberOfBCnodes, 
-                        real om1, 
-                        unsigned int* neighborX,
-                        unsigned int* neighborY,
-                        unsigned int* neighborZ,
-                        unsigned int size_Mat, 
-                        bool isEvenTimestep);
+extern "C" void BBDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition);
 
 extern "C" void QPressDev27_IntBB(  unsigned int numberOfThreads,
 									real* rho,
 									real* DD, 
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes, 
 									real om1, 
 									unsigned int* neighborX,
@@ -1297,15 +1015,12 @@ extern "C" void QPrecursorDevCompZeroPress(  uint numberOfThreads, real tRatio,
                                              unsigned long long size_Mat, bool evenOrOdd);
 
 extern "C" void QADDev7(unsigned int numberOfThreads,
-                        int nx,
-                        int ny,
                         real* DD, 
                         real* DD7,
                         real* temp,
                         real diffusivity,
                         int* k_Q, 
                         real* QQ,
-                        unsigned int sizeQ,
                         unsigned int numberOfBCnodes, 
                         real om1, 
                         unsigned int* neighborX,
@@ -1340,7 +1055,7 @@ extern "C" void ADSlipVelDevComp(
 	real * distributionsAD,
 	int* QindexArray,
 	real * Qarrays,
-	uint numberOfQs,
+	uint numberOfBCnodes,
 	real omegaDiffusivity,
 	uint * neighborX,
 	uint * neighborY,
@@ -1349,15 +1064,12 @@ extern "C" void ADSlipVelDevComp(
 	bool isEvenTimestep);
 	
 extern "C" void QADDirichletDev27( unsigned int numberOfThreads,
-								   int nx,
-								   int ny,
 								   real* DD, 
 								   real* DD27,
 								   real* temp,
 								   real diffusivity,
 								   int* k_Q, 
 								   real* QQ,
-								   unsigned int sizeQ,
 								   unsigned int numberOfBCnodes, 
 								   real om1, 
 								   unsigned int* neighborX,
@@ -1367,15 +1079,12 @@ extern "C" void QADDirichletDev27( unsigned int numberOfThreads,
 								   bool isEvenTimestep);
 
 extern "C" void QADBBDev27(  unsigned int numberOfThreads,
-							 int nx,
-							 int ny,
 							 real* DD, 
 							 real* DD27,
 							 real* temp,
 							 real diffusivity,
 							 int* k_Q, 
 							 real* QQ,
-							 unsigned int sizeQ,
 							 unsigned int numberOfBCnodes, 
 							 real om1, 
 							 unsigned int* neighborX,
@@ -1385,8 +1094,6 @@ extern "C" void QADBBDev27(  unsigned int numberOfThreads,
 							 bool isEvenTimestep);
 
 extern "C" void QADVelDev7(unsigned int numberOfThreads,
-                           int nx,
-                           int ny,
                            real* DD, 
                            real* DD7,
                            real* temp,
@@ -1394,7 +1101,6 @@ extern "C" void QADVelDev7(unsigned int numberOfThreads,
                            real diffusivity,
                            int* k_Q, 
                            real* QQ,
-                           unsigned int sizeQ,
                            unsigned int numberOfBCnodes, 
                            real om1, 
                            unsigned int* neighborX,
@@ -1405,8 +1111,6 @@ extern "C" void QADVelDev7(unsigned int numberOfThreads,
 
 
 extern "C" void QADVelDev27(  unsigned int numberOfThreads,
-                              int nx,
-                              int ny,
                               real* DD, 
                               real* DD27,
                               real* temp,
@@ -1414,7 +1118,6 @@ extern "C" void QADVelDev27(  unsigned int numberOfThreads,
                               real diffusivity,
                               int* k_Q, 
                               real* QQ,
-                              unsigned int sizeQ,
                               unsigned int numberOfBCnodes, 
                               real om1, 
                               unsigned int* neighborX,
@@ -1424,8 +1127,6 @@ extern "C" void QADVelDev27(  unsigned int numberOfThreads,
                               bool isEvenTimestep);
 
 extern "C" void QADPressDev7( unsigned int numberOfThreads,
-                              int nx,
-                              int ny,
                               real* DD, 
                               real* DD7,
                               real* temp,
@@ -1433,7 +1134,6 @@ extern "C" void QADPressDev7( unsigned int numberOfThreads,
                               real diffusivity,
                               int* k_Q, 
                               real* QQ,
-                              unsigned int sizeQ,
                               unsigned int numberOfBCnodes, 
                               real om1, 
                               unsigned int* neighborX,
@@ -1443,8 +1143,6 @@ extern "C" void QADPressDev7( unsigned int numberOfThreads,
                               bool isEvenTimestep);
 
 extern "C" void QADPressDev27(unsigned int numberOfThreads,
-                              int nx,
-                              int ny,
                               real* DD, 
                               real* DD27,
                               real* temp,
@@ -1452,7 +1150,6 @@ extern "C" void QADPressDev27(unsigned int numberOfThreads,
                               real diffusivity,
                               int* k_Q, 
                               real* QQ,
-                              unsigned int sizeQ,
                               unsigned int numberOfBCnodes, 
                               real om1, 
                               unsigned int* neighborX,
@@ -1476,15 +1173,12 @@ extern "C" void QADPressNEQNeighborDev27(
 										);
 
 extern "C" void QNoSlipADincompDev7(unsigned int numberOfThreads,
-									int nx,
-									int ny,
 									real* DD, 
 									real* DD7,
 									real* temp,
 									real diffusivity,
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes, 
 									real om1, 
 									unsigned int* neighborX,
@@ -1494,15 +1188,12 @@ extern "C" void QNoSlipADincompDev7(unsigned int numberOfThreads,
 									bool isEvenTimestep);
 
 extern "C" void QNoSlipADincompDev27(unsigned int numberOfThreads,
-									 int nx,
-									 int ny,
 									 real* DD, 
 									 real* DD27,
 									 real* temp,
 									 real diffusivity,
 									 int* k_Q, 
 									 real* QQ,
-									 unsigned int sizeQ,
 									 unsigned int numberOfBCnodes, 
 									 real om1, 
 									 unsigned int* neighborX,
@@ -1512,8 +1203,6 @@ extern "C" void QNoSlipADincompDev27(unsigned int numberOfThreads,
 									 bool isEvenTimestep);
 
 extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
-								   int nx,
-								   int ny,
 								   real* DD, 
 								   real* DD7,
 								   real* temp,
@@ -1521,7 +1210,6 @@ extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
 								   real diffusivity,
 								   int* k_Q, 
 								   real* QQ,
-								   unsigned int sizeQ,
 								   unsigned int numberOfBCnodes, 
 								   real om1, 
 								   unsigned int* neighborX,
@@ -1532,8 +1220,6 @@ extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
 
 
 extern "C" void QADVeloIncompDev27( unsigned int numberOfThreads,
-									int nx,
-									int ny,
 									real* DD, 
 									real* DD27,
 									real* temp,
@@ -1541,7 +1227,6 @@ extern "C" void QADVeloIncompDev27( unsigned int numberOfThreads,
 									real diffusivity,
 									int* k_Q, 
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes, 
 									real om1, 
 									unsigned int* neighborX,
@@ -1551,8 +1236,6 @@ extern "C" void QADVeloIncompDev27( unsigned int numberOfThreads,
 									bool isEvenTimestep);
 
 extern "C" void QADPressIncompDev7(  unsigned int numberOfThreads,
-									 int nx,
-									 int ny,
 									 real* DD, 
 									 real* DD7,
 									 real* temp,
@@ -1560,7 +1243,6 @@ extern "C" void QADPressIncompDev7(  unsigned int numberOfThreads,
 									 real diffusivity,
 									 int* k_Q, 
 									 real* QQ,
-									 unsigned int sizeQ,
 									 unsigned int numberOfBCnodes, 
 									 real om1, 
 									 unsigned int* neighborX,
@@ -1570,8 +1252,6 @@ extern "C" void QADPressIncompDev7(  unsigned int numberOfThreads,
 									 bool isEvenTimestep);
 
 extern "C" void QADPressIncompDev27(  unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* DD, 
 									  real* DD27,
 									  real* temp,
@@ -1579,7 +1259,6 @@ extern "C" void QADPressIncompDev27(  unsigned int numberOfThreads,
 									  real diffusivity,
 									  int* k_Q, 
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes, 
 									  real om1, 
 									  unsigned int* neighborX,
@@ -2533,15 +2212,12 @@ extern "C" void setRecvGsDevF3(
 	unsigned int numberOfThreads);
 
 extern "C" void WallFuncDev27(unsigned int numberOfThreads,
-							  int nx,
-							  int ny,
 							  real* vx,
 							  real* vy,
 							  real* vz,
 							  real* DD, 
 							  int* k_Q, 
 							  real* QQ,
-							  unsigned int sizeQ,
 							  unsigned int numberOfBCnodes, 
 							  real om1, 
 							  unsigned int* neighborX,
diff --git a/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh b/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh
index 4b99e5a607d9530394dfbbf74bb1ce930fb7532d..2a1f168fce51b3e6caef1f18c05e09bd82387307 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh
+++ b/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh
@@ -598,39 +598,33 @@ extern "C" __global__ void LB_BC_Vel_West_27( int nx,
                                               real om);
 
 //no Slip BCs
-extern "C" __global__ void QDevice27(int inx,
-                                     int iny,
-                                     real* DD,
-                                     int* k_Q,
-                                     real* QQ,
-                                     unsigned int sizeQ,
-                                     int numberOfBCnodes,
-                                     real minusomega,
+extern "C" __global__ void QDevice27(real* distributions,
+                                     int* subgridDistanceIndices,
+                                     real* subgridDistances,
+                                     unsigned int numberOfBCnodes,
+                                     real omega,
                                      unsigned int* neighborX,
                                      unsigned int* neighborY,
                                      unsigned int* neighborZ,
-                                     unsigned int size_Mat,
+                                     unsigned int numberOfLBnodes,
                                      bool isEvenTimestep);
 
-extern "C" __global__ void QDeviceComp27(int inx,
-										 int iny,
-										 real* DD,
-										 int* k_Q,
-										 real* QQ,
-										 unsigned int sizeQ,
-										 int numberOfBCnodes,
-										 real minusomega,
+extern "C" __global__ void QDeviceComp27(
+										 real* distributions,
+										 int* subgridDistanceIndices,
+										 real* subgridDistances,
+										 unsigned int numberOfBCnodes,
+										 real omega,
 										 unsigned int* neighborX,
 										 unsigned int* neighborY,
 										 unsigned int* neighborZ,
-										 unsigned int size_Mat,
+										 unsigned int numberOfLBnodes,
 										 bool isEvenTimestep);
 
 extern "C" __global__ void QDeviceCompThinWallsPartOne27(real* DD,
 														 int* k_Q,
 														 real* QQ,
-														 unsigned int sizeQ,
-														 int numberOfBCnodes,
+														 unsigned int numberOfBCnodes,
 														 real om1,
 														 unsigned int* neighborX,
 														 unsigned int* neighborY,
@@ -638,27 +632,21 @@ extern "C" __global__ void QDeviceCompThinWallsPartOne27(real* DD,
 														 unsigned int size_Mat,
 														 bool isEvenTimestep);
 
-extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
-													 int iny,
-													 real* DD,
-													 int* k_Q,
-													 real* QQ,
-													 unsigned int sizeQ,
-													 int numberOfBCnodes,
-													 real minusomega,
+extern "C" __global__ void QDevice3rdMomentsComp27(	 real* distributions, 
+													 int* subgridDistanceIndices, 
+													 real* subgridDistances,
+													 unsigned int numberOfBCnodes, 
+													 real omega, 
 													 unsigned int* neighborX,
 													 unsigned int* neighborY,
 													 unsigned int* neighborZ,
-													 unsigned int size_Mat,
+													 unsigned int numberOfLBnodes, 
 													 bool isEvenTimestep);
 
-extern "C" __global__ void QDeviceIncompHighNu27(int inx,
-												 int iny,
-												 real* DD,
+extern "C" __global__ void QDeviceIncompHighNu27(real* DD,
 												 int* k_Q,
 												 real* QQ,
-												 unsigned int sizeQ,
-												 int numberOfBCnodes,
+												 unsigned int numberOfBCnodes,
 												 real om1,
 												 unsigned int* neighborX,
 												 unsigned int* neighborY,
@@ -666,13 +654,10 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
 												 unsigned int size_Mat,
 												 bool isEvenTimestep);
 
-extern "C" __global__ void QDeviceCompHighNu27(  int inx,
-												 int iny,
-												 real* DD,
+extern "C" __global__ void QDeviceCompHighNu27(	 real* DD,
 												 int* k_Q,
 												 real* QQ,
-												 unsigned int sizeQ,
-												 int numberOfBCnodes,
+												 unsigned int numberOfBCnodes,
 												 real om1,
 												 unsigned int* neighborX,
 												 unsigned int* neighborY,
@@ -681,29 +666,27 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
 												 bool isEvenTimestep);
 
 //Velocity BCs
-extern "C" __global__ void QVelDevPlainBB27(real* vx,
-											real* vy,
-											real* vz,
-											real* DD,
-											int* k_Q,
-											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes,
-											real om1,
-											unsigned int* neighborX,
-											unsigned int* neighborY,
-											unsigned int* neighborZ,
-											unsigned int size_Mat,
-											bool isEvenTimestep);
-
-extern "C" __global__ void QVelDevCouhette27(real* vx,
+extern "C" __global__ void QVelDevPlainBB27(
+    real* velocityX,
+    real* velocityY,
+    real* velocityZ,
+    real* distributions,
+    int* subgridDistanceIndices,
+    real* subgridDistances,
+    uint numberOfBCnodes,
+    uint* neighborX,
+    uint* neighborY,
+    uint* neighborZ,
+    uint numberOfLBnodes,
+    bool isEvenTimestep);
+
+extern "C" __global__ void QVelDevCouette27(real* vx,
 											real* vy,
 											real* vz,
 											real* DD,
 											int* k_Q,
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes,
+											unsigned int numberOfBCnodes,
 											real om1,
 											unsigned int* neighborX,
 											unsigned int* neighborY,
@@ -719,8 +702,7 @@ extern "C" __global__ void QVelDev1h27( int inx,
 										real* DD,
 										int* k_Q,
 										real* QQ,
-										unsigned int sizeQ,
-										int numberOfBCnodes,
+										unsigned int numberOfBCnodes,
 										real om1,
 										real Phi,
 										real angularVelocity,
@@ -741,8 +723,7 @@ extern "C" __global__ void QVelDevice27(int inx,
                                         real* DD,
                                         int* k_Q,
                                         real* QQ,
-                                        unsigned int sizeQ,
-                                        int numberOfBCnodes,
+                                        unsigned int numberOfBCnodes,
                                         real om1,
                                         unsigned int* neighborX,
                                         unsigned int* neighborY,
@@ -750,16 +731,13 @@ extern "C" __global__ void QVelDevice27(int inx,
                                         unsigned int size_Mat,
                                         bool isEvenTimestep);
 
-extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
-													int iny,
-													real* vx,
+extern "C" __global__ void QVelDeviceCompPlusSlip27(real* vx,
 													real* vy,
 													real* vz,
 													real* DD,
 													int* k_Q,
 													real* QQ,
-													unsigned int sizeQ,
-													int numberOfBCnodes,
+													unsigned int numberOfBCnodes,
 													real om1,
 													unsigned int* neighborX,
 													unsigned int* neighborY,
@@ -767,24 +745,20 @@ extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
 													unsigned int size_Mat,
 													bool isEvenTimestep);
 
-extern "C" __global__ void QVelDeviceComp27(int inx,
-											int iny,
-											real* vx,
-											real* vy,
-											real* vz,
-											real* DD,
-											int* k_Q,
-											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes,
-											real om1,
+extern "C" __global__ void QVelDeviceComp27(real* velocityX,
+											real* velocityY,
+											real* velocityZ,
+											real* distribution,
+											int* subgridDistanceIndices,
+											real* subgridDistances,
+											unsigned int numberOfBCnodes,
+											real omega,
 											unsigned int* neighborX,
 											unsigned int* neighborY,
 											unsigned int* neighborZ,
-											unsigned int size_Mat,
+											unsigned int numberOfLBnodes,
 											bool isEvenTimestep);
 
-
 extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
 	real* vx,
 	real* vy,
@@ -792,8 +766,7 @@ extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
 	real* DD,
 	int* k_Q,
 	real* QQ,
-	uint sizeQ,
-	int numberOfBCnodes,
+	uint numberOfBCnodes,
 	real om1,
 	uint* neighborX,
 	uint* neighborY,
@@ -805,8 +778,7 @@ extern "C" __global__ void QThinWallsPartTwo27(
 	real* DD,
 	int* k_Q,
 	real* QQ,
-	uint sizeQ,
-	int numberOfBCnodes,
+	uint numberOfBCnodes,
 	uint* geom,
 	uint* neighborX,
 	uint* neighborY,
@@ -815,33 +787,28 @@ extern "C" __global__ void QThinWallsPartTwo27(
 	uint size_Mat,
 	bool isEvenTimestep);
 
-extern "C" __global__ void QVelDeviceCompZeroPress27(   int inx,
-														int iny,
-														real* vx,
-														real* vy,
-														real* vz,
-														real* DD,
-														int* k_Q,
-														real* QQ,
-														unsigned int sizeQ,
-														//int numberOfBCnodes,
-														real om1,
-														unsigned int* neighborX,
-														unsigned int* neighborY,
-														unsigned int* neighborZ,
-														unsigned int size_Mat,
-														bool isEvenTimestep);
+extern "C" __global__ void QVelDeviceCompZeroPress27(
+	real* velocityX,
+	real* velocityY,
+	real* velocityZ,
+	real* distribution,
+	int* subgridDistanceIndices,
+	real* subgridDistances,
+	unsigned int numberOfBCnodes,
+	real omega,
+	unsigned int* neighborX,
+	unsigned int* neighborY,
+	unsigned int* neighborZ,
+	unsigned int numberOfLBnodes,
+	bool isEvenTimestep);
 
-extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
-													int iny,
-													real* vx,
+extern "C" __global__ void QVelDeviceIncompHighNu27(real* vx,
 													real* vy,
 													real* vz,
 													real* DD,
 													int* k_Q,
 													real* QQ,
-													unsigned int sizeQ,
-													int numberOfBCnodes,
+													unsigned int numberOfBCnodes,
 													real om1,
 													unsigned int* neighborX,
 													unsigned int* neighborY,
@@ -849,16 +816,13 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
 													unsigned int size_Mat,
 													bool isEvenTimestep);
 
-extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
-													int iny,
-													real* vx,
+extern "C" __global__ void QVelDeviceCompHighNu27(	real* vx,
 													real* vy,
 													real* vz,
 													real* DD,
 													int* k_Q,
 													real* QQ,
-													unsigned int sizeQ,
-													int numberOfBCnodes,
+													unsigned int numberOfBCnodes,
 													real om1,
 													unsigned int* neighborX,
 													unsigned int* neighborY,
@@ -897,7 +861,7 @@ extern "C" __global__ void QVeloStreetDeviceEQ27(
 extern "C" __global__ void QSlipDevice27(real* DD,
                                          int* k_Q,
                                          real* QQ,
-                                         unsigned int sizeQ,
+                                         unsigned int numberOfBCnodes,
                                          real om1,
                                          unsigned int* neighborX,
                                          unsigned int* neighborY,
@@ -908,7 +872,7 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 extern "C" __global__ void QSlipDeviceComp27(real* DD,
 											 int* k_Q,
 											 real* QQ,
-											 unsigned int sizeQ,
+											 unsigned int numberOfBCnodes,
 											 real om1,
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -919,7 +883,7 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 											 int* k_Q,
 											 real* QQ,
-											 unsigned int sizeQ,
+											 unsigned int numberOfBCnodes,
 											 real om1,
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -931,7 +895,7 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 												 int* k_Q,
 												 real* QQ,
-												 unsigned int sizeQ,
+												 unsigned int numberOfBCnodes,
 												 real om1,
 												 real* NormalX,
 												 real* NormalY,
@@ -945,7 +909,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 												 int* k_Q,
 												 real* QQ,
-												 unsigned int sizeQ,
+												 unsigned int numberOfBCnodes,
 												 real om1,
 												 real* NormalX,
 												 real* NormalY,
@@ -961,7 +925,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
 											   int* k_Q,
 											 int* k_N,
 											 real* QQ,
-											 unsigned int sizeQ,
+											 unsigned int numberOfBCnodes,
 											 real om1,
 											 real* turbViscosity,
 										     real* vx,
@@ -993,7 +957,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
 												int* k_Q,
 												int* k_N,
 												real* QQ,
-												unsigned int sizeQ,
+												unsigned int numberOfBCnodes,
 												real* vx,
 												real* vy,
 												real* vz,
@@ -1020,14 +984,11 @@ extern "C" __global__ void BBStressDevice27( real* DD,
 												bool isEvenTimestep);
 
 //Pressure BCs
-extern "C" __global__ void QPressDevice27(int inx,
-                                           int iny,
-                                           real* rhoBC,
+extern "C" __global__ void QPressDevice27( real* rhoBC,
                                            real* DD,
                                            int* k_Q,
                                            real* QQ,
-                                           unsigned int sizeQ,
-                                           int numberOfBCnodes,
+                                           unsigned int numberOfBCnodes,
                                            real om1,
                                            unsigned int* neighborX,
                                            unsigned int* neighborY,
@@ -1121,11 +1082,11 @@ extern "C" __global__ void QPressDeviceIncompNEQ27( real* rhoBC,
 													bool isEvenTimestep);
 
 extern "C" __global__ void QPressDeviceNEQ27(real* rhoBC,
-                                             real* DD,
-                                             int* k_Q,
-                                             int* k_N,
+                                             real* distribution,
+                                             int* bcNodeIndices,
+                                             int* bcNeighborIndices,
                                              int numberOfBCnodes,
-                                             real om1,
+                                             real omega1,
                                              unsigned int* neighborX,
                                              unsigned int* neighborY,
                                              unsigned int* neighborZ,
@@ -1166,26 +1127,21 @@ extern "C" __global__ void QPressDeviceFake27(real* rhoBC,
                                              unsigned int size_Mat,
                                              bool isEvenTimestep);
 
-extern "C" __global__ void BBDevice27(int inx,
-                                     int iny,
-                                     real* DD,
-                                     int* k_Q,
-                                     real* QQ,
-                                     unsigned int sizeQ,
-                                     int numberOfBCnodes,
-                                     real om1,
+extern "C" __global__ void BBDevice27(real* distributions,
+                                     int* subgridDistanceIndices,
+                                     real* subgridDistances,
+                                     unsigned int numberOfBCnodes,
                                      unsigned int* neighborX,
                                      unsigned int* neighborY,
                                      unsigned int* neighborZ,
-                                     unsigned int size_Mat,
+                                     unsigned int numberOfLBnodes,
                                      bool isEvenTimestep);
 
 extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 												real* DD,
 												int* k_Q,
 												real* QQ,
-												unsigned int sizeQ,
-												int numberOfBCnodes,
+												unsigned int numberOfBCnodes,
 												real om1,
 												unsigned int* neighborX,
 												unsigned int* neighborY,
@@ -1257,16 +1213,13 @@ extern "C" __global__ void QPrecursorDeviceCompZeroPress( 	int* k_Q,
 															unsigned long long size_Mat,
 															bool evenOrOdd);
 //Advection / Diffusion BCs
-extern "C" __global__ void QAD7( int inx,
-                                 int iny,
-                                 real* DD,
+extern "C" __global__ void QAD7( real* DD,
                                  real* DD7,
                                  real* temp,
                                  real diffusivity,
                                  int* k_Q,
                                  real* QQ,
-                                 unsigned int sizeQ,
-                                 int numberOfBCnodes,
+                                 unsigned int numberOfBCnodes,
                                  real om1,
                                  unsigned int* neighborX,
                                  unsigned int* neighborY,
@@ -1298,7 +1251,7 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
 	real * distributionsAD,
 	int* QindexArray,
 	real * Qarrays,
-	uint numberOfQs,
+	uint numberOfBCnodes,
 	real omegaDiffusivity,
 	uint * neighborX,
 	uint * neighborY,
@@ -1306,16 +1259,13 @@ extern "C" __global__ void AD_SlipVelDeviceComp(
 	uint size_Mat,
 	bool isEvenTimestep);
 
-extern "C" __global__ void QADDirichlet27(   int inx,
-											 int iny,
-											 real* DD,
+extern "C" __global__ void QADDirichlet27(   real* DD,
 											 real* DD27,
 											 real* temp,
 											 real diffusivity,
 											 int* k_Q,
 											 real* QQ,
-											 unsigned int sizeQ,
-											 int numberOfBCnodes,
+											 unsigned int numberOfBCnodes,
 											 real om1,
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -1323,16 +1273,13 @@ extern "C" __global__ void QADDirichlet27(   int inx,
 											 unsigned int size_Mat,
 											 bool isEvenTimestep);
 
-extern "C" __global__ void QADBB27(  int inx,
-									 int iny,
-									 real* DD,
+extern "C" __global__ void QADBB27(  real* DD,
 									 real* DD27,
 									 real* temp,
 									 real diffusivity,
 									 int* k_Q,
 									 real* QQ,
-									 unsigned int sizeQ,
-									 int numberOfBCnodes,
+									 unsigned int numberOfBCnodes,
 									 real om1,
 									 unsigned int* neighborX,
 									 unsigned int* neighborY,
@@ -1340,17 +1287,14 @@ extern "C" __global__ void QADBB27(  int inx,
 									 unsigned int size_Mat,
 									 bool isEvenTimestep);
 
-extern "C" __global__ void QADVel7( int inx,
-                                    int iny,
-                                    real* DD,
+extern "C" __global__ void QADVel7( real* DD,
                                     real* DD7,
                                     real* temp,
                                     real* velo,
                                     real diffusivity,
                                     int* k_Q,
                                     real* QQ,
-                                    unsigned int sizeQ,
-                                    int numberOfBCnodes,
+                                    unsigned int numberOfBCnodes,
                                     real om1,
                                     unsigned int* neighborX,
                                     unsigned int* neighborY,
@@ -1358,17 +1302,14 @@ extern "C" __global__ void QADVel7( int inx,
                                     unsigned int size_Mat,
                                     bool isEvenTimestep);
 
-extern "C" __global__ void QADVel27(int inx,
-                                    int iny,
-                                    real* DD,
+extern "C" __global__ void QADVel27(real* DD,
                                     real* DD27,
                                     real* temp,
                                     real* velo,
                                     real diffusivity,
                                     int* k_Q,
                                     real* QQ,
-                                    unsigned int sizeQ,
-                                    int numberOfBCnodes,
+                                    unsigned int numberOfBCnodes,
                                     real om1,
                                     unsigned int* neighborX,
                                     unsigned int* neighborY,
@@ -1376,17 +1317,14 @@ extern "C" __global__ void QADVel27(int inx,
                                     unsigned int size_Mat,
                                     bool isEvenTimestep);
 
-extern "C" __global__ void QADPress7(  int inx,
-                                       int iny,
-                                       real* DD,
+extern "C" __global__ void QADPress7(  real* DD,
                                        real* DD7,
                                        real* temp,
                                        real* velo,
                                        real diffusivity,
                                        int* k_Q,
                                        real* QQ,
-                                       unsigned int sizeQ,
-                                       int numberOfBCnodes,
+                                       unsigned int numberOfBCnodes,
                                        real om1,
                                        unsigned int* neighborX,
                                        unsigned int* neighborY,
@@ -1394,17 +1332,14 @@ extern "C" __global__ void QADPress7(  int inx,
                                        unsigned int size_Mat,
                                        bool isEvenTimestep);
 
-extern "C" __global__ void QADPress27( int inx,
-                                       int iny,
-                                       real* DD,
+extern "C" __global__ void QADPress27( real* DD,
                                        real* DD27,
                                        real* temp,
                                        real* velo,
                                        real diffusivity,
                                        int* k_Q,
                                        real* QQ,
-                                       unsigned int sizeQ,
-                                       int numberOfBCnodes,
+                                       unsigned int numberOfBCnodes,
                                        real om1,
                                        unsigned int* neighborX,
                                        unsigned int* neighborY,
@@ -1425,16 +1360,13 @@ extern "C" __global__ void QADPressNEQNeighbor27(
 												 bool isEvenTimestep
 												);
 
-extern "C" __global__ void QNoSlipADincomp7( int inx,
-											 int iny,
-											 real* DD,
+extern "C" __global__ void QNoSlipADincomp7( real* DD,
 											 real* DD7,
 											 real* temp,
 											 real diffusivity,
 											 int* k_Q,
 											 real* QQ,
-											 unsigned int sizeQ,
-											 int numberOfBCnodes,
+											 unsigned int numberOfBCnodes,
 											 real om1,
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -1442,16 +1374,13 @@ extern "C" __global__ void QNoSlipADincomp7( int inx,
 											 unsigned int size_Mat,
 											 bool isEvenTimestep);
 
-extern "C" __global__ void QNoSlipADincomp27(int inx,
-											 int iny,
-											 real* DD,
+extern "C" __global__ void QNoSlipADincomp27( real* DD,
 											 real* DD27,
 											 real* temp,
 											 real diffusivity,
 											 int* k_Q,
 											 real* QQ,
-											 unsigned int sizeQ,
-											 int numberOfBCnodes,
+											 unsigned int numberOfBCnodes,
 											 real om1,
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -1459,17 +1388,14 @@ extern "C" __global__ void QNoSlipADincomp27(int inx,
 											 unsigned int size_Mat,
 											 bool isEvenTimestep);
 
-extern "C" __global__ void QADVeloIncomp7(  int inx,
-											int iny,
-											real* DD,
+extern "C" __global__ void QADVeloIncomp7(  real* DD,
 											real* DD7,
 											real* temp,
 											real* velo,
 											real diffusivity,
 											int* k_Q,
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes,
+											unsigned int numberOfBCnodes,
 											real om1,
 											unsigned int* neighborX,
 											unsigned int* neighborY,
@@ -1477,17 +1403,14 @@ extern "C" __global__ void QADVeloIncomp7(  int inx,
 											unsigned int size_Mat,
 											bool isEvenTimestep);
 
-extern "C" __global__ void QADVeloIncomp27( int inx,
-											int iny,
-											real* DD,
+extern "C" __global__ void QADVeloIncomp27( real* DD,
 											real* DD27,
 											real* temp,
 											real* velo,
 											real diffusivity,
 											int* k_Q,
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes,
+											unsigned int numberOfBCnodes,
 											real om1,
 											unsigned int* neighborX,
 											unsigned int* neighborY,
@@ -1495,17 +1418,14 @@ extern "C" __global__ void QADVeloIncomp27( int inx,
 											unsigned int size_Mat,
 											bool isEvenTimestep);
 
-extern "C" __global__ void QADPressIncomp7(int inx,
-										   int iny,
-										   real* DD,
+extern "C" __global__ void QADPressIncomp7(real* DD,
 										   real* DD7,
 										   real* temp,
 										   real* velo,
 										   real diffusivity,
 										   int* k_Q,
 										   real* QQ,
-										   unsigned int sizeQ,
-										   int numberOfBCnodes,
+										   unsigned int numberOfBCnodes,
 										   real om1,
 										   unsigned int* neighborX,
 										   unsigned int* neighborY,
@@ -1513,17 +1433,14 @@ extern "C" __global__ void QADPressIncomp7(int inx,
 										   unsigned int size_Mat,
 										   bool isEvenTimestep);
 
-extern "C" __global__ void QADPressIncomp27(   int inx,
-											   int iny,
-											   real* DD,
+extern "C" __global__ void QADPressIncomp27(   real* DD,
 											   real* DD27,
 											   real* temp,
 											   real* velo,
 											   real diffusivity,
 											   int* k_Q,
 											   real* QQ,
-											   unsigned int sizeQ,
-											   int numberOfBCnodes,
+											   unsigned int numberOfBCnodes,
 											   real om1,
 											   unsigned int* neighborX,
 											   unsigned int* neighborY,
@@ -2414,16 +2331,13 @@ extern "C" __global__ void setRecvGsF3(
 	unsigned int size_Mat,
 	bool isEvenTimestep);
 
-extern "C" __global__ void WallFunction27(  int inx,
-											int iny,
-											real* vx,
+extern "C" __global__ void WallFunction27( 	real* vx,
 											real* vy,
 											real* vz,
 											real* DD,
 											int* k_Q,
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes,
+											unsigned int numberOfBCnodes,
 											real om1,
 											unsigned int* neighborX,
 											unsigned int* neighborY,
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Init27.cu b/src/gpu/VirtualFluids_GPU/GPU/Init27.cu
index 415ca1c8cd0bbff2502af3310706657bccab31a6..b27df37882b684e3fc8cf3b09e39a6195baed5de 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Init27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Init27.cu
@@ -1,9 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void LBInit27( int myid,
@@ -23,33 +24,33 @@ extern "C" __global__ void LBInit27( int myid,
                                      int maxlev)
 {
    Distributions27 D;
-   D.f[dirE   ] = &DD[dirE   *size_Mat];
-   D.f[dirW   ] = &DD[dirW   *size_Mat];
-   D.f[dirN   ] = &DD[dirN   *size_Mat];
-   D.f[dirS   ] = &DD[dirS   *size_Mat];
-   D.f[dirT   ] = &DD[dirT   *size_Mat];
-   D.f[dirB   ] = &DD[dirB   *size_Mat];
-   D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   D.f[E   ] = &DD[E   *size_Mat];
+   D.f[W   ] = &DD[W   *size_Mat];
+   D.f[N   ] = &DD[N   *size_Mat];
+   D.f[S   ] = &DD[S   *size_Mat];
+   D.f[T   ] = &DD[T   *size_Mat];
+   D.f[B   ] = &DD[B   *size_Mat];
+   D.f[NE  ] = &DD[NE  *size_Mat];
+   D.f[SW  ] = &DD[SW  *size_Mat];
+   D.f[SE  ] = &DD[SE  *size_Mat];
+   D.f[NW  ] = &DD[NW  *size_Mat];
+   D.f[TE  ] = &DD[TE  *size_Mat];
+   D.f[BW  ] = &DD[BW  *size_Mat];
+   D.f[BE  ] = &DD[BE  *size_Mat];
+   D.f[TW  ] = &DD[TW  *size_Mat];
+   D.f[TN  ] = &DD[TN  *size_Mat];
+   D.f[BS  ] = &DD[BS  *size_Mat];
+   D.f[BN  ] = &DD[BN  *size_Mat];
+   D.f[TS  ] = &DD[TS  *size_Mat];
+   D.f[REST] = &DD[REST*size_Mat];
+   D.f[TNE ] = &DD[TNE *size_Mat];
+   D.f[TSW ] = &DD[TSW *size_Mat];
+   D.f[TSE ] = &DD[TSE *size_Mat];
+   D.f[TNW ] = &DD[TNW *size_Mat];
+   D.f[BNE ] = &DD[BNE *size_Mat];
+   D.f[BSW ] = &DD[BSW *size_Mat];
+   D.f[BSE ] = &DD[BSE *size_Mat];
+   D.f[BNW ] = &DD[BNW *size_Mat];
    ////////////////////////////////////////////////////////////////////////////////
    unsigned int  k;                   // Zugriff auf arrays im device
    //
@@ -140,33 +141,33 @@ extern "C" __global__ void LBInit27( int myid,
 
    real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-   (D.f[dirZERO])[kzero] =   c8o27* (drho-cu_sq);
-   (D.f[dirE   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-   (D.f[dirW   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-   (D.f[dirN   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-   (D.f[dirS   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-   (D.f[dirT   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-   (D.f[dirB   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-   (D.f[dirNE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-   (D.f[dirSW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-   (D.f[dirSE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-   (D.f[dirNW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-   (D.f[dirTE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-   (D.f[dirBW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-   (D.f[dirBE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-   (D.f[dirTW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-   (D.f[dirTN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-   (D.f[dirBS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-   (D.f[dirBN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-   (D.f[dirTS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-   (D.f[dirTNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-   (D.f[dirBSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-   (D.f[dirBNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-   (D.f[dirTSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-   (D.f[dirTSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-   (D.f[dirBNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-   (D.f[dirBSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-   (D.f[dirTNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+   (D.f[REST])[kzero] =   c8o27* (drho-cu_sq);
+   (D.f[E   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+   (D.f[W   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+   (D.f[N   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+   (D.f[S   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+   (D.f[T   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+   (D.f[B   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+   (D.f[NE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+   (D.f[SW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+   (D.f[SE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+   (D.f[NW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+   (D.f[TE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+   (D.f[BW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+   (D.f[BE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+   (D.f[TW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+   (D.f[TN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+   (D.f[BS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+   (D.f[BN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+   (D.f[TS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+   (D.f[TNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+   (D.f[BSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+   (D.f[BNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+   (D.f[TSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+   (D.f[TSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+   (D.f[BNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+   (D.f[BSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+   (D.f[TNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 
 }
 ////////////////////////////////////////////////////////////////////////////////
@@ -217,63 +218,63 @@ extern "C" __global__ void LBInitNonEqPartSP27( unsigned int* neighborX,
             Distributions27 D;
             if (EvenOrOdd==true)
             {
-                D.f[dirE   ] = &DD[dirE   *size_Mat];
-                D.f[dirW   ] = &DD[dirW   *size_Mat];
-                D.f[dirN   ] = &DD[dirN   *size_Mat];
-                D.f[dirS   ] = &DD[dirS   *size_Mat];
-                D.f[dirT   ] = &DD[dirT   *size_Mat];
-                D.f[dirB   ] = &DD[dirB   *size_Mat];
-                D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-                D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-                D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-                D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-                D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-                D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-                D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-                D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-                D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-                D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-                D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-                D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-                D.f[dirZERO] = &DD[dirZERO*size_Mat];
-                D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-                D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-                D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-                D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-                D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-                D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-                D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-                D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+                D.f[E   ] = &DD[E   *size_Mat];
+                D.f[W   ] = &DD[W   *size_Mat];
+                D.f[N   ] = &DD[N   *size_Mat];
+                D.f[S   ] = &DD[S   *size_Mat];
+                D.f[T   ] = &DD[T   *size_Mat];
+                D.f[B   ] = &DD[B   *size_Mat];
+                D.f[NE  ] = &DD[NE  *size_Mat];
+                D.f[SW  ] = &DD[SW  *size_Mat];
+                D.f[SE  ] = &DD[SE  *size_Mat];
+                D.f[NW  ] = &DD[NW  *size_Mat];
+                D.f[TE  ] = &DD[TE  *size_Mat];
+                D.f[BW  ] = &DD[BW  *size_Mat];
+                D.f[BE  ] = &DD[BE  *size_Mat];
+                D.f[TW  ] = &DD[TW  *size_Mat];
+                D.f[TN  ] = &DD[TN  *size_Mat];
+                D.f[BS  ] = &DD[BS  *size_Mat];
+                D.f[BN  ] = &DD[BN  *size_Mat];
+                D.f[TS  ] = &DD[TS  *size_Mat];
+                D.f[REST] = &DD[REST*size_Mat];
+                D.f[TNE ] = &DD[TNE *size_Mat];
+                D.f[TSW ] = &DD[TSW *size_Mat];
+                D.f[TSE ] = &DD[TSE *size_Mat];
+                D.f[TNW ] = &DD[TNW *size_Mat];
+                D.f[BNE ] = &DD[BNE *size_Mat];
+                D.f[BSW ] = &DD[BSW *size_Mat];
+                D.f[BSE ] = &DD[BSE *size_Mat];
+                D.f[BNW ] = &DD[BNW *size_Mat];
             }
             else
             {
-                D.f[dirW   ] = &DD[dirE   *size_Mat];
-                D.f[dirE   ] = &DD[dirW   *size_Mat];
-                D.f[dirS   ] = &DD[dirN   *size_Mat];
-                D.f[dirN   ] = &DD[dirS   *size_Mat];
-                D.f[dirB   ] = &DD[dirT   *size_Mat];
-                D.f[dirT   ] = &DD[dirB   *size_Mat];
-                D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-                D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-                D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-                D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-                D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-                D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-                D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-                D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-                D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-                D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-                D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-                D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-                D.f[dirZERO] = &DD[dirZERO*size_Mat];
-                D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-                D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-                D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-                D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-                D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-                D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-                D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-                D.f[dirTSE ] = &DD[dirBNW *size_Mat];
+                D.f[W   ] = &DD[E   *size_Mat];
+                D.f[E   ] = &DD[W   *size_Mat];
+                D.f[S   ] = &DD[N   *size_Mat];
+                D.f[N   ] = &DD[S   *size_Mat];
+                D.f[B   ] = &DD[T   *size_Mat];
+                D.f[T   ] = &DD[B   *size_Mat];
+                D.f[SW  ] = &DD[NE  *size_Mat];
+                D.f[NE  ] = &DD[SW  *size_Mat];
+                D.f[NW  ] = &DD[SE  *size_Mat];
+                D.f[SE  ] = &DD[NW  *size_Mat];
+                D.f[BW  ] = &DD[TE  *size_Mat];
+                D.f[TE  ] = &DD[BW  *size_Mat];
+                D.f[TW  ] = &DD[BE  *size_Mat];
+                D.f[BE  ] = &DD[TW  *size_Mat];
+                D.f[BS  ] = &DD[TN  *size_Mat];
+                D.f[TN  ] = &DD[BS  *size_Mat];
+                D.f[TS  ] = &DD[BN  *size_Mat];
+                D.f[BN  ] = &DD[TS  *size_Mat];
+                D.f[REST] = &DD[REST*size_Mat];
+                D.f[BSW ] = &DD[TNE *size_Mat];
+                D.f[BNE ] = &DD[TSW *size_Mat];
+                D.f[BNW ] = &DD[TSE *size_Mat];
+                D.f[BSE ] = &DD[TNW *size_Mat];
+                D.f[TSW ] = &DD[BNE *size_Mat];
+                D.f[TNE ] = &DD[BSW *size_Mat];
+                D.f[TNW ] = &DD[BSE *size_Mat];
+                D.f[TSE ] = &DD[BNW *size_Mat];
             }
             //////////////////////////////////////////////////////////////////////////
             real drho = rho[k];//0.0f;//
@@ -395,63 +396,63 @@ extern "C" __global__ void LBInitNonEqPartSP27( unsigned int* neighborX,
             //////////////////////////////////////////////////////////////////////////
             real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
             
-            (D.f[dirZERO])[kzero] =   c8o27* (drho-cu_sq);
-            (D.f[dirE   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-            (D.f[dirW   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-            (D.f[dirN   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-            (D.f[dirS   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-            (D.f[dirT   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-            (D.f[dirB   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-            (D.f[dirNE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-            (D.f[dirSW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-            (D.f[dirSE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-            (D.f[dirNW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-            (D.f[dirTE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-            (D.f[dirBW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-            (D.f[dirBE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-            (D.f[dirTW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-            (D.f[dirTN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-            (D.f[dirBS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-            (D.f[dirBN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-            (D.f[dirTS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-            (D.f[dirTNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-            (D.f[dirBSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-            (D.f[dirBNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-            (D.f[dirTSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-            (D.f[dirTSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-            (D.f[dirBNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-            (D.f[dirBSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-            (D.f[dirTNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+            (D.f[REST])[kzero] =   c8o27* (drho-cu_sq);
+            (D.f[E   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+            (D.f[W   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+            (D.f[N   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+            (D.f[S   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+            (D.f[T   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+            (D.f[B   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+            (D.f[NE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+            (D.f[SW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+            (D.f[SE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+            (D.f[NW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+            (D.f[TE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+            (D.f[BW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+            (D.f[BE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+            (D.f[TW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+            (D.f[TN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+            (D.f[BS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+            (D.f[BN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+            (D.f[TS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+            (D.f[TNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+            (D.f[BSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+            (D.f[BNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+            (D.f[TSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+            (D.f[TSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+            (D.f[BNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+            (D.f[BSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+            (D.f[TNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 
             //////////////////////////////////////////////////////////////////////////
 
-            (D.f[dirZERO])[kzero] += f_ZERO;
-            (D.f[dirE   ])[ke   ] += f_E   ;
-            (D.f[dirW   ])[kw   ] += f_E   ;
-            (D.f[dirN   ])[kn   ] += f_N   ;
-            (D.f[dirS   ])[ks   ] += f_N   ;
-            (D.f[dirT   ])[kt   ] += f_T   ;
-            (D.f[dirB   ])[kb   ] += f_T   ;
-            (D.f[dirNE  ])[kne  ] += f_NE  ;
-            (D.f[dirSW  ])[ksw  ] += f_NE  ;
-            (D.f[dirSE  ])[kse  ] += f_SE  ;
-            (D.f[dirNW  ])[knw  ] += f_SE  ;
-            (D.f[dirTE  ])[kte  ] += f_TE  ;
-            (D.f[dirBW  ])[kbw  ] += f_TE  ;
-            (D.f[dirBE  ])[kbe  ] += f_BE  ;
-            (D.f[dirTW  ])[ktw  ] += f_BE  ;
-            (D.f[dirTN  ])[ktn  ] += f_TN  ;
-            (D.f[dirBS  ])[kbs  ] += f_TN  ;
-            (D.f[dirBN  ])[kbn  ] += f_BN  ;
-            (D.f[dirTS  ])[kts  ] += f_BN  ;
-            (D.f[dirTNE ])[ktne ] += f_TNE ;
-            (D.f[dirBSW ])[kbsw ] += f_TNE ;
-            (D.f[dirBNE ])[kbne ] += f_TSW ;
-            (D.f[dirTSW ])[ktsw ] += f_TSW ;
-            (D.f[dirTSE ])[ktse ] += f_TSE ;
-            (D.f[dirBNW ])[kbnw ] += f_TSE ;
-            (D.f[dirBSE ])[kbse ] += f_TNW ;
-            (D.f[dirTNW ])[ktnw ] += f_TNW ;
+            (D.f[REST])[kzero] += f_ZERO;
+            (D.f[E   ])[ke   ] += f_E   ;
+            (D.f[W   ])[kw   ] += f_E   ;
+            (D.f[N   ])[kn   ] += f_N   ;
+            (D.f[S   ])[ks   ] += f_N   ;
+            (D.f[T   ])[kt   ] += f_T   ;
+            (D.f[B   ])[kb   ] += f_T   ;
+            (D.f[NE  ])[kne  ] += f_NE  ;
+            (D.f[SW  ])[ksw  ] += f_NE  ;
+            (D.f[SE  ])[kse  ] += f_SE  ;
+            (D.f[NW  ])[knw  ] += f_SE  ;
+            (D.f[TE  ])[kte  ] += f_TE  ;
+            (D.f[BW  ])[kbw  ] += f_TE  ;
+            (D.f[BE  ])[kbe  ] += f_BE  ;
+            (D.f[TW  ])[ktw  ] += f_BE  ;
+            (D.f[TN  ])[ktn  ] += f_TN  ;
+            (D.f[BS  ])[kbs  ] += f_TN  ;
+            (D.f[BN  ])[kbn  ] += f_BN  ;
+            (D.f[TS  ])[kts  ] += f_BN  ;
+            (D.f[TNE ])[ktne ] += f_TNE ;
+            (D.f[BSW ])[kbsw ] += f_TNE ;
+            (D.f[BNE ])[kbne ] += f_TSW ;
+            (D.f[TSW ])[ktsw ] += f_TSW ;
+            (D.f[TSE ])[ktse ] += f_TSE ;
+            (D.f[BNW ])[kbnw ] += f_TSE ;
+            (D.f[BSE ])[kbse ] += f_TNW ;
+            (D.f[TNW ])[ktnw ] += f_TNW ;
 
             //////////////////////////////////////////////////////////////////////////
         }
@@ -459,9 +460,9 @@ extern "C" __global__ void LBInitNonEqPartSP27( unsigned int* neighborX,
 	    {
 		    //////////////////////////////////////////////////////////////////////////
 		    Distributions27 D;
-		    D.f[dirZERO] = &DD[dirZERO*size_Mat];
+		    D.f[REST] = &DD[REST*size_Mat];
 		    //////////////////////////////////////////////////////////////////////////
-		    (D.f[dirZERO])[k] = c96o1;
+		    (D.f[REST])[k] = c96o1;
 		    //////////////////////////////////////////////////////////////////////////
 	    }
    }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu b/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu
index 49bc12c26c7d1254cd0c6d5d5b5f34133bb0373a..38e409730a8316f9f8b620d931d25aadc80d4b01 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu
@@ -32,11 +32,11 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
-
+using namespace vf::lbm::dir;
 
 extern "C" __global__ void InitAD27(
 	uint* neighborX,
@@ -55,7 +55,7 @@ extern "C" __global__ void InitAD27(
 	//! The initialization is executed in the following steps
 	//!
 	////////////////////////////////////////////////////////////////////////////////
-	//! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+	//! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
 	//!
 	const unsigned  x = threadIdx.x;  // Globaler x-Index
 	const unsigned  y = blockIdx.x;   // Globaler y-Index
@@ -77,63 +77,63 @@ extern "C" __global__ void InitAD27(
 		Distributions27 distAD;
 		if (isEvenTimestep)
 		{
-			distAD.f[dirE   ] = &distributionsAD[dirE   *size_Mat];
-			distAD.f[dirW   ] = &distributionsAD[dirW   *size_Mat];
-			distAD.f[dirN   ] = &distributionsAD[dirN   *size_Mat];
-			distAD.f[dirS   ] = &distributionsAD[dirS   *size_Mat];
-			distAD.f[dirT   ] = &distributionsAD[dirT   *size_Mat];
-			distAD.f[dirB   ] = &distributionsAD[dirB   *size_Mat];
-			distAD.f[dirNE  ] = &distributionsAD[dirNE  *size_Mat];
-			distAD.f[dirSW  ] = &distributionsAD[dirSW  *size_Mat];
-			distAD.f[dirSE  ] = &distributionsAD[dirSE  *size_Mat];
-			distAD.f[dirNW  ] = &distributionsAD[dirNW  *size_Mat];
-			distAD.f[dirTE  ] = &distributionsAD[dirTE  *size_Mat];
-			distAD.f[dirBW  ] = &distributionsAD[dirBW  *size_Mat];
-			distAD.f[dirBE  ] = &distributionsAD[dirBE  *size_Mat];
-			distAD.f[dirTW  ] = &distributionsAD[dirTW  *size_Mat];
-			distAD.f[dirTN  ] = &distributionsAD[dirTN  *size_Mat];
-			distAD.f[dirBS  ] = &distributionsAD[dirBS  *size_Mat];
-			distAD.f[dirBN  ] = &distributionsAD[dirBN  *size_Mat];
-			distAD.f[dirTS  ] = &distributionsAD[dirTS  *size_Mat];
-			distAD.f[dirREST] = &distributionsAD[dirREST*size_Mat];
-			distAD.f[dirTNE ] = &distributionsAD[dirTNE *size_Mat];
-			distAD.f[dirTSW ] = &distributionsAD[dirTSW *size_Mat];
-			distAD.f[dirTSE ] = &distributionsAD[dirTSE *size_Mat];
-			distAD.f[dirTNW ] = &distributionsAD[dirTNW *size_Mat];
-			distAD.f[dirBNE ] = &distributionsAD[dirBNE *size_Mat];
-			distAD.f[dirBSW ] = &distributionsAD[dirBSW *size_Mat];
-			distAD.f[dirBSE ] = &distributionsAD[dirBSE *size_Mat];
-			distAD.f[dirBNW ] = &distributionsAD[dirBNW *size_Mat];
+			distAD.f[E   ] = &distributionsAD[E   *size_Mat];
+			distAD.f[W   ] = &distributionsAD[W   *size_Mat];
+			distAD.f[N   ] = &distributionsAD[N   *size_Mat];
+			distAD.f[S   ] = &distributionsAD[S   *size_Mat];
+			distAD.f[T   ] = &distributionsAD[T   *size_Mat];
+			distAD.f[B   ] = &distributionsAD[B   *size_Mat];
+			distAD.f[NE  ] = &distributionsAD[NE  *size_Mat];
+			distAD.f[SW  ] = &distributionsAD[SW  *size_Mat];
+			distAD.f[SE  ] = &distributionsAD[SE  *size_Mat];
+			distAD.f[NW  ] = &distributionsAD[NW  *size_Mat];
+			distAD.f[TE  ] = &distributionsAD[TE  *size_Mat];
+			distAD.f[BW  ] = &distributionsAD[BW  *size_Mat];
+			distAD.f[BE  ] = &distributionsAD[BE  *size_Mat];
+			distAD.f[TW  ] = &distributionsAD[TW  *size_Mat];
+			distAD.f[TN  ] = &distributionsAD[TN  *size_Mat];
+			distAD.f[BS  ] = &distributionsAD[BS  *size_Mat];
+			distAD.f[BN  ] = &distributionsAD[BN  *size_Mat];
+			distAD.f[TS  ] = &distributionsAD[TS  *size_Mat];
+			distAD.f[REST] = &distributionsAD[REST*size_Mat];
+			distAD.f[TNE ] = &distributionsAD[TNE *size_Mat];
+			distAD.f[TSW ] = &distributionsAD[TSW *size_Mat];
+			distAD.f[TSE ] = &distributionsAD[TSE *size_Mat];
+			distAD.f[TNW ] = &distributionsAD[TNW *size_Mat];
+			distAD.f[BNE ] = &distributionsAD[BNE *size_Mat];
+			distAD.f[BSW ] = &distributionsAD[BSW *size_Mat];
+			distAD.f[BSE ] = &distributionsAD[BSE *size_Mat];
+			distAD.f[BNW ] = &distributionsAD[BNW *size_Mat];
 		}
 		else
 		{
-			distAD.f[dirW   ] = &distributionsAD[dirE   *size_Mat];
-			distAD.f[dirE   ] = &distributionsAD[dirW   *size_Mat];
-			distAD.f[dirS   ] = &distributionsAD[dirN   *size_Mat];
-			distAD.f[dirN   ] = &distributionsAD[dirS   *size_Mat];
-			distAD.f[dirB   ] = &distributionsAD[dirT   *size_Mat];
-			distAD.f[dirT   ] = &distributionsAD[dirB   *size_Mat];
-			distAD.f[dirSW  ] = &distributionsAD[dirNE  *size_Mat];
-			distAD.f[dirNE  ] = &distributionsAD[dirSW  *size_Mat];
-			distAD.f[dirNW  ] = &distributionsAD[dirSE  *size_Mat];
-			distAD.f[dirSE  ] = &distributionsAD[dirNW  *size_Mat];
-			distAD.f[dirBW  ] = &distributionsAD[dirTE  *size_Mat];
-			distAD.f[dirTE  ] = &distributionsAD[dirBW  *size_Mat];
-			distAD.f[dirTW  ] = &distributionsAD[dirBE  *size_Mat];
-			distAD.f[dirBE  ] = &distributionsAD[dirTW  *size_Mat];
-			distAD.f[dirBS  ] = &distributionsAD[dirTN  *size_Mat];
-			distAD.f[dirTN  ] = &distributionsAD[dirBS  *size_Mat];
-			distAD.f[dirTS  ] = &distributionsAD[dirBN  *size_Mat];
-			distAD.f[dirBN  ] = &distributionsAD[dirTS  *size_Mat];
-			distAD.f[dirREST] = &distributionsAD[dirREST*size_Mat];
-			distAD.f[dirBSW ] = &distributionsAD[dirTNE *size_Mat];
-			distAD.f[dirBNE ] = &distributionsAD[dirTSW *size_Mat];
-			distAD.f[dirBNW ] = &distributionsAD[dirTSE *size_Mat];
-			distAD.f[dirBSE ] = &distributionsAD[dirTNW *size_Mat];
-			distAD.f[dirTSW ] = &distributionsAD[dirBNE *size_Mat];
-			distAD.f[dirTNE ] = &distributionsAD[dirBSW *size_Mat];
-			distAD.f[dirTNW ] = &distributionsAD[dirBSE *size_Mat];
-			distAD.f[dirTSE ] = &distributionsAD[dirBNW *size_Mat];
+			distAD.f[W   ] = &distributionsAD[E   *size_Mat];
+			distAD.f[E   ] = &distributionsAD[W   *size_Mat];
+			distAD.f[S   ] = &distributionsAD[N   *size_Mat];
+			distAD.f[N   ] = &distributionsAD[S   *size_Mat];
+			distAD.f[B   ] = &distributionsAD[T   *size_Mat];
+			distAD.f[T   ] = &distributionsAD[B   *size_Mat];
+			distAD.f[SW  ] = &distributionsAD[NE  *size_Mat];
+			distAD.f[NE  ] = &distributionsAD[SW  *size_Mat];
+			distAD.f[NW  ] = &distributionsAD[SE  *size_Mat];
+			distAD.f[SE  ] = &distributionsAD[NW  *size_Mat];
+			distAD.f[BW  ] = &distributionsAD[TE  *size_Mat];
+			distAD.f[TE  ] = &distributionsAD[BW  *size_Mat];
+			distAD.f[TW  ] = &distributionsAD[BE  *size_Mat];
+			distAD.f[BE  ] = &distributionsAD[TW  *size_Mat];
+			distAD.f[BS  ] = &distributionsAD[TN  *size_Mat];
+			distAD.f[TN  ] = &distributionsAD[BS  *size_Mat];
+			distAD.f[TS  ] = &distributionsAD[BN  *size_Mat];
+			distAD.f[BN  ] = &distributionsAD[TS  *size_Mat];
+			distAD.f[REST] = &distributionsAD[REST*size_Mat];
+			distAD.f[BSW ] = &distributionsAD[TNE *size_Mat];
+			distAD.f[BNE ] = &distributionsAD[TSW *size_Mat];
+			distAD.f[BNW ] = &distributionsAD[TSE *size_Mat];
+			distAD.f[BSE ] = &distributionsAD[TNW *size_Mat];
+			distAD.f[TSW ] = &distributionsAD[BNE *size_Mat];
+			distAD.f[TNE ] = &distributionsAD[BSW *size_Mat];
+			distAD.f[TNW ] = &distributionsAD[BSE *size_Mat];
+			distAD.f[TSE ] = &distributionsAD[BNW *size_Mat];
 		}
 		//////////////////////////////////////////////////////////////////////////
 		//! - Set local velocities and concetration
@@ -177,33 +177,33 @@ extern "C" __global__ void InitAD27(
 		//!
 		real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
 
-		(distAD.f[dirREST])[kzero] = c8o27  * conc * (c1o1 - cu_sq);
-		(distAD.f[dirE   ])[ke   ] = c2o27  * conc * (c1o1 + c3o1 * ( vx1            ) + c9o2 * ( vx1            ) * ( vx1            ) - cu_sq);
-		(distAD.f[dirW   ])[kw   ] = c2o27  * conc * (c1o1 + c3o1 * (-vx1            ) + c9o2 * (-vx1            ) * (-vx1            ) - cu_sq);
-		(distAD.f[dirN   ])[kn   ] = c2o27  * conc * (c1o1 + c3o1 * (       vx2      ) + c9o2 * (       vx2      ) * (       vx2      ) - cu_sq);
-		(distAD.f[dirS   ])[ks   ] = c2o27  * conc * (c1o1 + c3o1 * (     - vx2      ) + c9o2 * (     - vx2      ) * (     - vx2      ) - cu_sq);
-		(distAD.f[dirT   ])[kt   ] = c2o27  * conc * (c1o1 + c3o1 * (             vx3) + c9o2 * (             vx3) * (             vx3) - cu_sq);
-		(distAD.f[dirB   ])[kb   ] = c2o27  * conc * (c1o1 + c3o1 * (           - vx3) + c9o2 * (           - vx3) * (           - vx3) - cu_sq);
-		(distAD.f[dirNE  ])[kne  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 + vx2      ) + c9o2 * ( vx1 + vx2      ) * ( vx1 + vx2      ) - cu_sq);
-		(distAD.f[dirSW  ])[ksw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 - vx2      ) + c9o2 * (-vx1 - vx2      ) * (-vx1 - vx2      ) - cu_sq);
-		(distAD.f[dirSE  ])[kse  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 - vx2      ) + c9o2 * ( vx1 - vx2      ) * ( vx1 - vx2      ) - cu_sq);
-		(distAD.f[dirNW  ])[knw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 + vx2      ) + c9o2 * (-vx1 + vx2      ) * (-vx1 + vx2      ) - cu_sq);
-		(distAD.f[dirTE  ])[kte  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       + vx3) + c9o2 * ( vx1       + vx3) * ( vx1       + vx3) - cu_sq);
-		(distAD.f[dirBW  ])[kbw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       - vx3) + c9o2 * (-vx1       - vx3) * (-vx1       - vx3) - cu_sq);
-		(distAD.f[dirBE  ])[kbe  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       - vx3) + c9o2 * ( vx1       - vx3) * ( vx1       - vx3) - cu_sq);
-		(distAD.f[dirTW  ])[ktw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       + vx3) + c9o2 * (-vx1       + vx3) * (-vx1       + vx3) - cu_sq);
-		(distAD.f[dirTN  ])[ktn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 + vx3) + c9o2 * (       vx2 + vx3) * (       vx2 + vx3) - cu_sq);
-		(distAD.f[dirBS  ])[kbs  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 - vx3) + c9o2 * (     - vx2 - vx3) * (     - vx2 - vx3) - cu_sq);
-		(distAD.f[dirBN  ])[kbn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 - vx3) + c9o2 * (       vx2 - vx3) * (       vx2 - vx3) - cu_sq);
-		(distAD.f[dirTS  ])[kts  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 + vx3) + c9o2 * (     - vx2 + vx3) * (     - vx2 + vx3) - cu_sq);
-		(distAD.f[dirTNE ])[ktne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 + vx3) + c9o2 * ( vx1 + vx2 + vx3) * ( vx1 + vx2 + vx3) - cu_sq);
-		(distAD.f[dirBSW ])[kbsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
-		(distAD.f[dirBNE ])[kbne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 - vx3) + c9o2 * ( vx1 + vx2 - vx3) * ( vx1 + vx2 - vx3) - cu_sq);
-		(distAD.f[dirTSW ])[ktsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
-		(distAD.f[dirTSE ])[ktse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 + vx3) + c9o2 * ( vx1 - vx2 + vx3) * ( vx1 - vx2 + vx3) - cu_sq);
-		(distAD.f[dirBNW ])[kbnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
-		(distAD.f[dirBSE ])[kbse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 - vx3) + c9o2 * ( vx1 - vx2 - vx3) * ( vx1 - vx2 - vx3) - cu_sq);
-		(distAD.f[dirTNW ])[ktnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
+		(distAD.f[REST])[kzero] = c8o27  * conc * (c1o1 - cu_sq);
+		(distAD.f[E   ])[ke   ] = c2o27  * conc * (c1o1 + c3o1 * ( vx1            ) + c9o2 * ( vx1            ) * ( vx1            ) - cu_sq);
+		(distAD.f[W   ])[kw   ] = c2o27  * conc * (c1o1 + c3o1 * (-vx1            ) + c9o2 * (-vx1            ) * (-vx1            ) - cu_sq);
+		(distAD.f[N   ])[kn   ] = c2o27  * conc * (c1o1 + c3o1 * (       vx2      ) + c9o2 * (       vx2      ) * (       vx2      ) - cu_sq);
+		(distAD.f[S   ])[ks   ] = c2o27  * conc * (c1o1 + c3o1 * (     - vx2      ) + c9o2 * (     - vx2      ) * (     - vx2      ) - cu_sq);
+		(distAD.f[T   ])[kt   ] = c2o27  * conc * (c1o1 + c3o1 * (             vx3) + c9o2 * (             vx3) * (             vx3) - cu_sq);
+		(distAD.f[B   ])[kb   ] = c2o27  * conc * (c1o1 + c3o1 * (           - vx3) + c9o2 * (           - vx3) * (           - vx3) - cu_sq);
+		(distAD.f[NE  ])[kne  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 + vx2      ) + c9o2 * ( vx1 + vx2      ) * ( vx1 + vx2      ) - cu_sq);
+		(distAD.f[SW  ])[ksw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 - vx2      ) + c9o2 * (-vx1 - vx2      ) * (-vx1 - vx2      ) - cu_sq);
+		(distAD.f[SE  ])[kse  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1 - vx2      ) + c9o2 * ( vx1 - vx2      ) * ( vx1 - vx2      ) - cu_sq);
+		(distAD.f[NW  ])[knw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1 + vx2      ) + c9o2 * (-vx1 + vx2      ) * (-vx1 + vx2      ) - cu_sq);
+		(distAD.f[TE  ])[kte  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       + vx3) + c9o2 * ( vx1       + vx3) * ( vx1       + vx3) - cu_sq);
+		(distAD.f[BW  ])[kbw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       - vx3) + c9o2 * (-vx1       - vx3) * (-vx1       - vx3) - cu_sq);
+		(distAD.f[BE  ])[kbe  ] = c1o54  * conc * (c1o1 + c3o1 * ( vx1       - vx3) + c9o2 * ( vx1       - vx3) * ( vx1       - vx3) - cu_sq);
+		(distAD.f[TW  ])[ktw  ] = c1o54  * conc * (c1o1 + c3o1 * (-vx1       + vx3) + c9o2 * (-vx1       + vx3) * (-vx1       + vx3) - cu_sq);
+		(distAD.f[TN  ])[ktn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 + vx3) + c9o2 * (       vx2 + vx3) * (       vx2 + vx3) - cu_sq);
+		(distAD.f[BS  ])[kbs  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 - vx3) + c9o2 * (     - vx2 - vx3) * (     - vx2 - vx3) - cu_sq);
+		(distAD.f[BN  ])[kbn  ] = c1o54  * conc * (c1o1 + c3o1 * (       vx2 - vx3) + c9o2 * (       vx2 - vx3) * (       vx2 - vx3) - cu_sq);
+		(distAD.f[TS  ])[kts  ] = c1o54  * conc * (c1o1 + c3o1 * (     - vx2 + vx3) + c9o2 * (     - vx2 + vx3) * (     - vx2 + vx3) - cu_sq);
+		(distAD.f[TNE ])[ktne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 + vx3) + c9o2 * ( vx1 + vx2 + vx3) * ( vx1 + vx2 + vx3) - cu_sq);
+		(distAD.f[BSW ])[kbsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq);
+		(distAD.f[BNE ])[kbne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 - vx3) + c9o2 * ( vx1 + vx2 - vx3) * ( vx1 + vx2 - vx3) - cu_sq);
+		(distAD.f[TSW ])[ktsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq);
+		(distAD.f[TSE ])[ktse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 + vx3) + c9o2 * ( vx1 - vx2 + vx3) * ( vx1 - vx2 + vx3) - cu_sq);
+		(distAD.f[BNW ])[kbnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq);
+		(distAD.f[BSE ])[kbse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 - vx3) + c9o2 * ( vx1 - vx2 - vx3) * ( vx1 - vx2 - vx3) - cu_sq);
+		(distAD.f[TNW ])[ktnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq);
 	}
 }
 
@@ -263,63 +263,63 @@ extern "C" __global__ void InitAD27(
 //          Distributions27 D27;
 //          if (EvenOrOdd==true)
 //          {
-//             D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-//             D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-//             D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-//             D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-//             D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-//             D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-//             D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-//             D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-//             D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-//             D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-//             D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-//             D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-//             D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-//             D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-//             D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-//             D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-//             D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-//             D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-//             D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-//             D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-//             D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-//             D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-//             D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-//             D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-//             D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-//             D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-//             D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+//             D27.f[E   ] = &DD27[E   *size_Mat];
+//             D27.f[W   ] = &DD27[W   *size_Mat];
+//             D27.f[N   ] = &DD27[N   *size_Mat];
+//             D27.f[S   ] = &DD27[S   *size_Mat];
+//             D27.f[T   ] = &DD27[T   *size_Mat];
+//             D27.f[B   ] = &DD27[B   *size_Mat];
+//             D27.f[NE  ] = &DD27[NE  *size_Mat];
+//             D27.f[SW  ] = &DD27[SW  *size_Mat];
+//             D27.f[SE  ] = &DD27[SE  *size_Mat];
+//             D27.f[NW  ] = &DD27[NW  *size_Mat];
+//             D27.f[TE  ] = &DD27[TE  *size_Mat];
+//             D27.f[BW  ] = &DD27[BW  *size_Mat];
+//             D27.f[BE  ] = &DD27[BE  *size_Mat];
+//             D27.f[TW  ] = &DD27[TW  *size_Mat];
+//             D27.f[TN  ] = &DD27[TN  *size_Mat];
+//             D27.f[BS  ] = &DD27[BS  *size_Mat];
+//             D27.f[BN  ] = &DD27[BN  *size_Mat];
+//             D27.f[TS  ] = &DD27[TS  *size_Mat];
+//             D27.f[REST] = &DD27[REST*size_Mat];
+//             D27.f[TNE ] = &DD27[TNE *size_Mat];
+//             D27.f[TSW ] = &DD27[TSW *size_Mat];
+//             D27.f[TSE ] = &DD27[TSE *size_Mat];
+//             D27.f[TNW ] = &DD27[TNW *size_Mat];
+//             D27.f[BNE ] = &DD27[BNE *size_Mat];
+//             D27.f[BSW ] = &DD27[BSW *size_Mat];
+//             D27.f[BSE ] = &DD27[BSE *size_Mat];
+//             D27.f[BNW ] = &DD27[BNW *size_Mat];
 //          }
 //          else
 //          {
-//             D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-//             D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-//             D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-//             D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-//             D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-//             D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-//             D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-//             D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-//             D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-//             D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-//             D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-//             D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-//             D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-//             D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-//             D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-//             D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-//             D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-//             D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-//             D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-//             D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-//             D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-//             D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
-//             D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-//             D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-//             D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-//             D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-//             D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
+//             D27.f[W   ] = &DD27[E   *size_Mat];
+//             D27.f[E   ] = &DD27[W   *size_Mat];
+//             D27.f[S   ] = &DD27[N   *size_Mat];
+//             D27.f[N   ] = &DD27[S   *size_Mat];
+//             D27.f[B   ] = &DD27[T   *size_Mat];
+//             D27.f[T   ] = &DD27[B   *size_Mat];
+//             D27.f[SW  ] = &DD27[NE  *size_Mat];
+//             D27.f[NE  ] = &DD27[SW  *size_Mat];
+//             D27.f[NW  ] = &DD27[SE  *size_Mat];
+//             D27.f[SE  ] = &DD27[NW  *size_Mat];
+//             D27.f[BW  ] = &DD27[TE  *size_Mat];
+//             D27.f[TE  ] = &DD27[BW  *size_Mat];
+//             D27.f[TW  ] = &DD27[BE  *size_Mat];
+//             D27.f[BE  ] = &DD27[TW  *size_Mat];
+//             D27.f[BS  ] = &DD27[TN  *size_Mat];
+//             D27.f[TN  ] = &DD27[BS  *size_Mat];
+//             D27.f[TS  ] = &DD27[BN  *size_Mat];
+//             D27.f[BN  ] = &DD27[TS  *size_Mat];
+//             D27.f[REST] = &DD27[REST*size_Mat];
+//             D27.f[BSW ] = &DD27[TNE *size_Mat];
+//             D27.f[BNE ] = &DD27[TSW *size_Mat];
+//             D27.f[BNW ] = &DD27[TSE *size_Mat];
+//             D27.f[BSE ] = &DD27[TNW *size_Mat];
+//             D27.f[TSW ] = &DD27[BNE *size_Mat];
+//             D27.f[TNE ] = &DD27[BSW *size_Mat];
+//             D27.f[TNW ] = &DD27[BSE *size_Mat];
+//             D27.f[TSE ] = &DD27[BNW *size_Mat];
 //          }
 //          //////////////////////////////////////////////////////////////////////////
 //          real ConcD = Conc[k];
@@ -390,33 +390,33 @@ extern "C" __global__ void InitAD27(
 //          ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //          real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-//          (D27.f[dirZERO])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
-//          (D27.f[dirE   ])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-//          (D27.f[dirW   ])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-//          (D27.f[dirN   ])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-//          (D27.f[dirS   ])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-//          (D27.f[dirT   ])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-//          (D27.f[dirB   ])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-//          (D27.f[dirNE  ])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-//          (D27.f[dirSW  ])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-//          (D27.f[dirSE  ])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-//          (D27.f[dirNW  ])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-//          (D27.f[dirTE  ])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-//          (D27.f[dirBW  ])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-//          (D27.f[dirBE  ])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-//          (D27.f[dirTW  ])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-//          (D27.f[dirTN  ])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-//          (D27.f[dirBS  ])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-//          (D27.f[dirBN  ])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-//          (D27.f[dirTS  ])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-//          (D27.f[dirTNE ])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-//          (D27.f[dirBSW ])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-//          (D27.f[dirBNE ])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-//          (D27.f[dirTSW ])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-//          (D27.f[dirTSE ])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-//          (D27.f[dirBNW ])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-//          (D27.f[dirBSE ])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-//          (D27.f[dirTNW ])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+//          (D27.f[REST])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
+//          (D27.f[E   ])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+//          (D27.f[W   ])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+//          (D27.f[N   ])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+//          (D27.f[S   ])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+//          (D27.f[T   ])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+//          (D27.f[B   ])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+//          (D27.f[NE  ])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+//          (D27.f[SW  ])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+//          (D27.f[SE  ])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+//          (D27.f[NW  ])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+//          (D27.f[TE  ])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+//          (D27.f[BW  ])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+//          (D27.f[BE  ])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+//          (D27.f[TW  ])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+//          (D27.f[TN  ])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+//          (D27.f[BS  ])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+//          (D27.f[BN  ])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+//          (D27.f[TS  ])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+//          (D27.f[TNE ])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+//          (D27.f[BSW ])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+//          (D27.f[BNE ])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+//          (D27.f[TSW ])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+//          (D27.f[TSE ])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+//          (D27.f[BNW ])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+//          (D27.f[BSE ])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+//          (D27.f[TNW ])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 //          ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 //       }
 //    }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/KernelUtilities.h b/src/gpu/VirtualFluids_GPU/GPU/KernelUtilities.h
new file mode 100644
index 0000000000000000000000000000000000000000..34082639e496aee4e3335dcc753aa7bc9e105cd0
--- /dev/null
+++ b/src/gpu/VirtualFluids_GPU/GPU/KernelUtilities.h
@@ -0,0 +1,170 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __         
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |        
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |        
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |        
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____    
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|   
+//      \    \  |    |   ________________________________________________________________    
+//       \    \ |    |  |  ______________________________________________________________|   
+//        \    \|    |  |  |         __          __     __     __     ______      _______    
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)   
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______    
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/   
+//
+//  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 KernelUtilities.h
+//! \ingroup GPU
+//! \author Martin Schoenherr, Anna Wellmann
+//======================================================================================
+#ifndef KERNELUTILS_H
+#define KERNELUTILS_H
+
+#include "LBM/LB.h"
+#include "lbm/constants/D3Q27.h"
+#include "lbm/constants/NumericConstants.h"
+
+using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
+__inline__ __device__ void getPointersToDistributions(Distributions27 &dist, real *distributionArray, const uint numberOfLBnodes, const bool isEvenTimestep)
+{
+    if (isEvenTimestep)
+    {
+        dist.f[E   ] = &distributionArray[E   *numberOfLBnodes];
+        dist.f[W   ] = &distributionArray[W   *numberOfLBnodes];
+        dist.f[N   ] = &distributionArray[N   *numberOfLBnodes];
+        dist.f[S   ] = &distributionArray[S   *numberOfLBnodes];
+        dist.f[T   ] = &distributionArray[T   *numberOfLBnodes];
+        dist.f[B   ] = &distributionArray[B   *numberOfLBnodes];
+        dist.f[NE  ] = &distributionArray[NE  *numberOfLBnodes];
+        dist.f[SW  ] = &distributionArray[SW  *numberOfLBnodes];
+        dist.f[SE  ] = &distributionArray[SE  *numberOfLBnodes];
+        dist.f[NW  ] = &distributionArray[NW  *numberOfLBnodes];
+        dist.f[TE  ] = &distributionArray[TE  *numberOfLBnodes];
+        dist.f[BW  ] = &distributionArray[BW  *numberOfLBnodes];
+        dist.f[BE  ] = &distributionArray[BE  *numberOfLBnodes];
+        dist.f[TW  ] = &distributionArray[TW  *numberOfLBnodes];
+        dist.f[TN  ] = &distributionArray[TN  *numberOfLBnodes];
+        dist.f[BS  ] = &distributionArray[BS  *numberOfLBnodes];
+        dist.f[BN  ] = &distributionArray[BN  *numberOfLBnodes];
+        dist.f[TS  ] = &distributionArray[TS  *numberOfLBnodes];
+        dist.f[REST] = &distributionArray[REST*numberOfLBnodes];
+        dist.f[TNE ] = &distributionArray[TNE *numberOfLBnodes];
+        dist.f[TSW ] = &distributionArray[TSW *numberOfLBnodes];
+        dist.f[TSE ] = &distributionArray[TSE *numberOfLBnodes];
+        dist.f[TNW ] = &distributionArray[TNW *numberOfLBnodes];
+        dist.f[BNE ] = &distributionArray[BNE *numberOfLBnodes];
+        dist.f[BSW ] = &distributionArray[BSW *numberOfLBnodes];
+        dist.f[BSE ] = &distributionArray[BSE *numberOfLBnodes];
+        dist.f[BNW ] = &distributionArray[BNW *numberOfLBnodes];
+    }
+    else
+    {
+         dist.f[W   ] = &distributionArray[E   *numberOfLBnodes];
+         dist.f[E   ] = &distributionArray[W   *numberOfLBnodes];
+         dist.f[S   ] = &distributionArray[N   *numberOfLBnodes];
+         dist.f[N   ] = &distributionArray[S   *numberOfLBnodes];
+         dist.f[B   ] = &distributionArray[T   *numberOfLBnodes];
+         dist.f[T   ] = &distributionArray[B   *numberOfLBnodes];
+         dist.f[SW  ] = &distributionArray[NE  *numberOfLBnodes];
+         dist.f[NE  ] = &distributionArray[SW  *numberOfLBnodes];
+         dist.f[NW  ] = &distributionArray[SE  *numberOfLBnodes];
+         dist.f[SE  ] = &distributionArray[NW  *numberOfLBnodes];
+         dist.f[BW  ] = &distributionArray[TE  *numberOfLBnodes];
+         dist.f[TE  ] = &distributionArray[BW  *numberOfLBnodes];
+         dist.f[TW  ] = &distributionArray[BE  *numberOfLBnodes];
+         dist.f[BE  ] = &distributionArray[TW  *numberOfLBnodes];
+         dist.f[BS  ] = &distributionArray[TN  *numberOfLBnodes];
+         dist.f[TN  ] = &distributionArray[BS  *numberOfLBnodes];
+         dist.f[TS  ] = &distributionArray[BN  *numberOfLBnodes];
+         dist.f[BN  ] = &distributionArray[TS  *numberOfLBnodes];
+         dist.f[REST] = &distributionArray[REST*numberOfLBnodes];
+         dist.f[TNE ] = &distributionArray[BSW *numberOfLBnodes];
+         dist.f[TSW ] = &distributionArray[BNE *numberOfLBnodes];
+         dist.f[TSE ] = &distributionArray[BNW *numberOfLBnodes];
+         dist.f[TNW ] = &distributionArray[BSE *numberOfLBnodes];
+         dist.f[BNE ] = &distributionArray[TSW *numberOfLBnodes];
+         dist.f[BSW ] = &distributionArray[TNE *numberOfLBnodes];
+         dist.f[BSE ] = &distributionArray[TNW *numberOfLBnodes];
+         dist.f[BNW ] = &distributionArray[TSE *numberOfLBnodes];
+    }
+}
+
+__inline__ __device__ void getPointersToSubgridDistances(SubgridDistances27& subgridD, real* subgridDistances, const unsigned int numberOfSubgridIndices)
+{
+    subgridD.q[E   ] = &subgridDistances[E    *numberOfSubgridIndices];
+    subgridD.q[W   ] = &subgridDistances[W    *numberOfSubgridIndices];
+    subgridD.q[N   ] = &subgridDistances[N    *numberOfSubgridIndices];
+    subgridD.q[S   ] = &subgridDistances[S    *numberOfSubgridIndices];
+    subgridD.q[T   ] = &subgridDistances[T    *numberOfSubgridIndices];
+    subgridD.q[B   ] = &subgridDistances[B    *numberOfSubgridIndices];
+    subgridD.q[NE  ] = &subgridDistances[NE   *numberOfSubgridIndices];
+    subgridD.q[SW  ] = &subgridDistances[SW   *numberOfSubgridIndices];
+    subgridD.q[SE  ] = &subgridDistances[SE   *numberOfSubgridIndices];
+    subgridD.q[NW  ] = &subgridDistances[NW   *numberOfSubgridIndices];
+    subgridD.q[TE  ] = &subgridDistances[TE   *numberOfSubgridIndices];
+    subgridD.q[BW  ] = &subgridDistances[BW   *numberOfSubgridIndices];
+    subgridD.q[BE  ] = &subgridDistances[BE   *numberOfSubgridIndices];
+    subgridD.q[TW  ] = &subgridDistances[TW   *numberOfSubgridIndices];
+    subgridD.q[TN  ] = &subgridDistances[TN   *numberOfSubgridIndices];
+    subgridD.q[BS  ] = &subgridDistances[BS   *numberOfSubgridIndices];
+    subgridD.q[BN  ] = &subgridDistances[BN   *numberOfSubgridIndices];
+    subgridD.q[TS  ] = &subgridDistances[TS   *numberOfSubgridIndices];
+    subgridD.q[REST] = &subgridDistances[REST *numberOfSubgridIndices];
+    subgridD.q[TNE ] = &subgridDistances[TNE  *numberOfSubgridIndices];
+    subgridD.q[TSW ] = &subgridDistances[TSW  *numberOfSubgridIndices];
+    subgridD.q[TSE ] = &subgridDistances[TSE  *numberOfSubgridIndices];
+    subgridD.q[TNW ] = &subgridDistances[TNW  *numberOfSubgridIndices];
+    subgridD.q[BNE ] = &subgridDistances[BNE  *numberOfSubgridIndices];
+    subgridD.q[BSW ] = &subgridDistances[BSW  *numberOfSubgridIndices];
+    subgridD.q[BSE ] = &subgridDistances[BSE  *numberOfSubgridIndices];
+    subgridD.q[BNW ] = &subgridDistances[BNW  *numberOfSubgridIndices];
+}
+
+__inline__ __device__ real getEquilibriumForBC(const real& drho, const real& velocity, const real& cu_sq, const real weight)
+{
+    return weight * (drho + c9o2 * velocity * velocity * (c1o1 + drho) - cu_sq);
+}
+
+__inline__ __device__ real getInterpolatedDistributionForVeloBC(const real& q, const real& f, const real& fInverse, const real& feq, 
+                                                                const real& omega, const real& velocity, const real weight)
+{
+
+    return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 
+           + (q * (f + fInverse) - c6o1 * weight * velocity) / (c1o1 + q);
+}
+
+__inline__ __device__ real getInterpolatedDistributionForNoSlipBC(const real& q, const real& f, const real& fInverse, const real& feq, 
+                                                                  const real& omega)
+{
+
+    return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 
+           + (q * (f + fInverse)) / (c1o1 + q);
+}
+
+
+__inline__ __device__ real getInterpolatedDistributionForVeloWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, 
+                                                                            const real& omega, const real& drho, const real& velocity, const real weight)
+{
+
+    return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 
+           + (q * (f + fInverse) - c6o1 * weight * velocity) / (c1o1 + q) - weight * drho;
+}
+
+
+
+#endif
diff --git a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu b/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu
index 449c42b3ec2d5e0c0bfe6599dd60fd5d3af392d0..51368bbe09e6fc43a7a1ff6b8b15387417774964 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu
@@ -22,6 +22,7 @@
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 __global__                 void kineticEnergyKernel  (real* vx, real* vy, real* vz, real* rho, uint* neighborX, uint* neighborY, uint* neighborZ, uint* neighborWSB, uint* geo, real* kineticEnergy, uint* isFluid, uint size_Mat);
 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu b/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
index d0e396d71727e3ff643200cd8755920fb47ee18f..d659c88ffb1abc977d58e46f13b31f37ec485fee 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu
@@ -11,10 +11,12 @@
 #include <helper_cuda.h>
 
 #include "LBM/LB.h"
-#include "CudaGrid.h"
+#include "cuda/CudaGrid.h"
 
 // includes, kernels
 #include "GPU/GPU_Kernels.cuh"
+
+#include "Parameter/Parameter.h"
 //////////////////////////////////////////////////////////////////////////
 extern "C" void KernelCas27( unsigned int grid_nx,
                              unsigned int grid_ny,
@@ -1403,7 +1405,6 @@ extern "C" void QADPressDev7( unsigned int numberOfThreads,
                               real diffusivity,
                               int* k_Q,
                               real* QQ,
-                              unsigned int sizeQ,
                               unsigned int numberOfBCnodes,
                               real om1,
                               unsigned int* neighborX,
@@ -1414,16 +1415,13 @@ extern "C" void QADPressDev7( unsigned int numberOfThreads,
 {
    	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-	QADPress7<<< grid.grid, grid.threads >>>( nx,
-                                       ny,
-                                       DD,
+      QADPress7<<< grid.grid, grid.threads >>>( DD,
                                        DD7,
                                        temp,
                                        velo,
                                        diffusivity,
                                        k_Q,
                                        QQ,
-                                       sizeQ,
                                        numberOfBCnodes,
                                        om1,
                                        neighborX,
@@ -1435,8 +1433,6 @@ extern "C" void QADPressDev7( unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADPressDev27(unsigned int numberOfThreads,
-                              int nx,
-                              int ny,
                               real* DD,
                               real* DD27,
                               real* temp,
@@ -1444,7 +1440,6 @@ extern "C" void QADPressDev27(unsigned int numberOfThreads,
                               real diffusivity,
                               int* k_Q,
                               real* QQ,
-                              unsigned int sizeQ,
                               unsigned int numberOfBCnodes,
                               real om1,
                               unsigned int* neighborX,
@@ -1455,16 +1450,13 @@ extern "C" void QADPressDev27(unsigned int numberOfThreads,
 {
    	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-	QADPress27<<< grid.grid, grid.threads >>>(   nx,
-                                          ny,
-                                          DD,
+      QADPress27<<< grid.grid, grid.threads >>>(   DD,
                                           DD27,
                                           temp,
                                           velo,
                                           diffusivity,
                                           k_Q,
                                           QQ,
-                                          sizeQ,
                                           numberOfBCnodes,
                                           om1,
                                           neighborX,
@@ -1508,8 +1500,6 @@ extern "C" void QADPressNEQNeighborDev27(
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADVelDev7(unsigned int numberOfThreads,
-                           int nx,
-                           int ny,
                            real* DD,
                            real* DD7,
                            real* temp,
@@ -1517,7 +1507,6 @@ extern "C" void QADVelDev7(unsigned int numberOfThreads,
                            real diffusivity,
                            int* k_Q,
                            real* QQ,
-                           unsigned int sizeQ,
                            unsigned int numberOfBCnodes,
                            real om1,
                            unsigned int* neighborX,
@@ -1528,9 +1517,7 @@ extern "C" void QADVelDev7(unsigned int numberOfThreads,
 {
 	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-
-	QADVel7<<< grid.grid, grid.threads >>> (  nx,
-                                       ny,
+      QADVel7<<< grid.grid, grid.threads >>> (  
                                        DD,
                                        DD7,
                                        temp,
@@ -1538,7 +1525,6 @@ extern "C" void QADVelDev7(unsigned int numberOfThreads,
                                        diffusivity,
                                        k_Q,
                                        QQ,
-                                       sizeQ,
                                        numberOfBCnodes,
                                        om1,
                                        neighborX,
@@ -1550,8 +1536,6 @@ extern "C" void QADVelDev7(unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADVelDev27(  unsigned int numberOfThreads,
-                              int nx,
-                              int ny,
                               real* DD,
                               real* DD27,
                               real* temp,
@@ -1559,7 +1543,6 @@ extern "C" void QADVelDev27(  unsigned int numberOfThreads,
                               real diffusivity,
                               int* k_Q,
                               real* QQ,
-                              unsigned int sizeQ,
                               unsigned int numberOfBCnodes,
                               real om1,
                               unsigned int* neighborX,
@@ -1568,39 +1551,32 @@ extern "C" void QADVelDev27(  unsigned int numberOfThreads,
                               unsigned int size_Mat,
                               bool isEvenTimestep)
 {
-	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
-
+   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-		QADVel27<<< grid.grid, grid.threads >>>(nx,
-												ny,
-												DD,
-												DD27,
-												temp,
-												velo,
-												diffusivity,
-												k_Q,
-												QQ,
-												sizeQ,
-												numberOfBCnodes,
-												om1,
-												neighborX,
-												neighborY,
-												neighborZ,
-												size_Mat,
-												isEvenTimestep);
-		getLastCudaError("QADVel27 execution failed");
+      QADVel27<<< grid.grid, grid.threads >>> ( DD,
+                                      DD27,
+                                      temp,
+                                      velo,
+                                      diffusivity,
+                                      k_Q,
+                                      QQ,
+                                      numberOfBCnodes,
+                                      om1,
+                                      neighborX,
+                                      neighborY,
+                                      neighborZ,
+                                      size_Mat,
+                                      isEvenTimestep);
+      getLastCudaError("QADVel27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADDev7(unsigned int numberOfThreads,
-                        int nx,
-                        int ny,
                         real* DD,
                         real* DD7,
                         real* temp,
                         real diffusivity,
                         int* k_Q,
                         real* QQ,
-                        unsigned int sizeQ,
                         unsigned int numberOfBCnodes,
                         real om1,
                         unsigned int* neighborX,
@@ -1611,22 +1587,19 @@ extern "C" void QADDev7(unsigned int numberOfThreads,
 {
 	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-	QAD7<<< grid.grid, grid.threads >>>(nx,
-										ny,
-										DD,
-										DD7,
-										temp,
-										diffusivity,
-										k_Q,
-										QQ,
-										sizeQ,
-										numberOfBCnodes,
-										om1,
-										neighborX,
-										neighborY,
-										neighborZ,
-										size_Mat,
-										isEvenTimestep);
+      QAD7<<< grid.grid, grid.threads >>> (     DD,
+                                       DD7,
+                                       temp,
+                                       diffusivity,
+                                       k_Q,
+                                       QQ,
+                                       numberOfBCnodes,
+                                       om1,
+                                       neighborX,
+                                       neighborY,
+                                       neighborZ,
+                                       size_Mat,
+                                       isEvenTimestep);
       getLastCudaError("QAD7 execution failed");
 }
 
@@ -1674,7 +1647,7 @@ extern "C" void ADSlipVelDevComp(
 	real * distributionsAD,
 	int* QindexArray,
 	real * Qarrays,
-	uint numberOfQs,
+	uint numberOfBCnodes,
 	real omegaDiffusivity,
 	uint * neighborX,
 	uint * neighborY,
@@ -1682,7 +1655,7 @@ extern "C" void ADSlipVelDevComp(
 	uint size_Mat,
 	bool isEvenTimestep)
 {
-   	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfQs);
+   	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
 	AD_SlipVelDeviceComp << < grid.grid, grid.threads >> > (
 		normalX,
@@ -1692,7 +1665,7 @@ extern "C" void ADSlipVelDevComp(
 		distributionsAD,
 		QindexArray,
 		Qarrays,
-		numberOfQs,
+		numberOfBCnodes,
 		omegaDiffusivity,
 		neighborX,
 		neighborY,
@@ -1704,15 +1677,12 @@ extern "C" void ADSlipVelDevComp(
 //////////////////////////////////////////////////////////////////////////
 
 extern "C" void QADDirichletDev27( unsigned int numberOfThreads,
-								   int nx,
-								   int ny,
 								   real* DD,
 								   real* DD27,
 								   real* temp,
 								   real diffusivity,
 								   int* k_Q,
 								   real* QQ,
-								   unsigned int sizeQ,
 								   unsigned int numberOfBCnodes,
 								   real om1,
 								   unsigned int* neighborX,
@@ -1723,15 +1693,13 @@ extern "C" void QADDirichletDev27( unsigned int numberOfThreads,
 {
    	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   	QADDirichlet27<<< grid.grid, grid.threads >>> (   nx,
-											   ny,
+      QADDirichlet27<<< grid.grid, grid.threads >>> (
 											   DD,
 											   DD27,
 											   temp,
 											   diffusivity,
 											   k_Q,
 											   QQ,
-											   sizeQ,
 											   numberOfBCnodes,
 											   om1,
 											   neighborX,
@@ -1743,15 +1711,12 @@ extern "C" void QADDirichletDev27( unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADBBDev27(unsigned int numberOfThreads,
-                           int nx,
-                           int ny,
                            real* DD,
                            real* DD27,
                            real* temp,
                            real diffusivity,
                            int* k_Q,
                            real* QQ,
-                           unsigned int sizeQ,
                            unsigned int numberOfBCnodes,
                            real om1,
                            unsigned int* neighborX,
@@ -1762,15 +1727,12 @@ extern "C" void QADBBDev27(unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QADBB27<<< grid.grid, grid.threads >>> (  nx,
-                                       ny,
-                                       DD,
+      QADBB27<<< grid.grid, grid.threads >>> (  DD,
                                        DD27,
                                        temp,
                                        diffusivity,
                                        k_Q,
                                        QQ,
-                                       sizeQ,
                                        numberOfBCnodes,
                                        om1,
                                        neighborX,
@@ -1782,15 +1744,12 @@ extern "C" void QADBBDev27(unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QNoSlipADincompDev7(unsigned int numberOfThreads,
-									int nx,
-									int ny,
 									real* DD,
 									real* DD7,
 									real* temp,
 									real diffusivity,
 									int* k_Q,
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes,
 									real om1,
 									unsigned int* neighborX,
@@ -1801,15 +1760,13 @@ extern "C" void QNoSlipADincompDev7(unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QNoSlipADincomp7<<< grid.grid, grid.threads >>> ( nx,
-											   ny,
+      QNoSlipADincomp7<<< grid.grid, grid.threads >>> (
 											   DD,
 											   DD7,
 											   temp,
 											   diffusivity,
 											   k_Q,
 											   QQ,
-											   sizeQ,
 											   numberOfBCnodes,
 											   om1,
 											   neighborX,
@@ -1821,15 +1778,12 @@ extern "C" void QNoSlipADincompDev7(unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QNoSlipADincompDev27(  unsigned int numberOfThreads,
-									   int nx,
-									   int ny,
 									   real* DD,
 									   real* DD27,
 									   real* temp,
 									   real diffusivity,
 									   int* k_Q,
 									   real* QQ,
-									   unsigned int sizeQ,
 									   unsigned int numberOfBCnodes,
 									   real om1,
 									   unsigned int* neighborX,
@@ -1840,15 +1794,13 @@ extern "C" void QNoSlipADincompDev27(  unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QNoSlipADincomp27<<< grid.grid, grid.threads >>> (nx,
-											   ny,
+      QNoSlipADincomp27<<< grid.grid, grid.threads >>> (
 											   DD,
 											   DD27,
 											   temp,
 											   diffusivity,
 											   k_Q,
 											   QQ,
-											   sizeQ,
 											   numberOfBCnodes,
 											   om1,
 											   neighborX,
@@ -1860,8 +1812,6 @@ extern "C" void QNoSlipADincompDev27(  unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
-								   int nx,
-								   int ny,
 								   real* DD,
 								   real* DD7,
 								   real* temp,
@@ -1869,7 +1819,6 @@ extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
 								   real diffusivity,
 								   int* k_Q,
 								   real* QQ,
-								   unsigned int sizeQ,
 								   unsigned int numberOfBCnodes,
 								   real om1,
 								   unsigned int* neighborX,
@@ -1880,16 +1829,13 @@ extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QADVeloIncomp7<<< grid.grid, grid.threads >>> (   nx,
-											   ny,
-											   DD,
-											   DD7,
+      QADVeloIncomp7<<< grid.grid, grid.threads >>> ( DD,
+	  										   DD7,
 											   temp,
 											   velo,
 											   diffusivity,
 											   k_Q,
 											   QQ,
-											   sizeQ,
 											   numberOfBCnodes,
 											   om1,
 											   neighborX,
@@ -1901,8 +1847,6 @@ extern "C" void QADVeloIncompDev7( unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADVeloIncompDev27(   unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* DD,
 									  real* DD27,
 									  real* temp,
@@ -1910,7 +1854,6 @@ extern "C" void QADVeloIncompDev27(   unsigned int numberOfThreads,
 									  real diffusivity,
 									  int* k_Q,
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes,
 									  real om1,
 									  unsigned int* neighborX,
@@ -1921,8 +1864,7 @@ extern "C" void QADVeloIncompDev27(   unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QADVeloIncomp27<<< grid.grid, grid.threads >>> ( nx,
-											  ny,
+      QADVeloIncomp27<<< grid.grid, grid.threads >>> (
 											  DD,
 											  DD27,
 											  temp,
@@ -1930,7 +1872,6 @@ extern "C" void QADVeloIncompDev27(   unsigned int numberOfThreads,
 											  diffusivity,
 											  k_Q,
 											  QQ,
-											  sizeQ,
 											  numberOfBCnodes,
 											  om1,
 											  neighborX,
@@ -1941,9 +1882,7 @@ extern "C" void QADVeloIncompDev27(   unsigned int numberOfThreads,
       getLastCudaError("QADVeloIncomp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QADPressIncompDev7(   unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
+extern "C" void QADPressIncompDev7( unsigned int numberOfThreads,
 									  real* DD,
 									  real* DD7,
 									  real* temp,
@@ -1951,7 +1890,6 @@ extern "C" void QADPressIncompDev7(   unsigned int numberOfThreads,
 									  real diffusivity,
 									  int* k_Q,
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes,
 									  real om1,
 									  unsigned int* neighborX,
@@ -1962,8 +1900,7 @@ extern "C" void QADPressIncompDev7(   unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QADPressIncomp7<<< grid.grid, grid.threads >>>(   nx,
-											   ny,
+      QADPressIncomp7<<< grid.grid, grid.threads >>>(
 											   DD,
 											   DD7,
 											   temp,
@@ -1971,7 +1908,6 @@ extern "C" void QADPressIncompDev7(   unsigned int numberOfThreads,
 											   diffusivity,
 											   k_Q,
 											   QQ,
-											   sizeQ,
 											   numberOfBCnodes,
 											   om1,
 											   neighborX,
@@ -1983,8 +1919,6 @@ extern "C" void QADPressIncompDev7(   unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QADPressIncompDev27(  unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* DD,
 									  real* DD27,
 									  real* temp,
@@ -1992,7 +1926,6 @@ extern "C" void QADPressIncompDev27(  unsigned int numberOfThreads,
 									  real diffusivity,
 									  int* k_Q,
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes,
 									  real om1,
 									  unsigned int* neighborX,
@@ -2003,16 +1936,13 @@ extern "C" void QADPressIncompDev27(  unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QADPressIncomp27<<< grid.grid, grid.threads >>>( nx,
-											  ny,
-											  DD,
-											  DD27,
+      QADPressIncomp27<<< grid.grid, grid.threads >>>(DD, 
+	  										  DD27, 
 											  temp,
 											  velo,
 											  diffusivity,
 											  k_Q,
 											  QQ,
-											  sizeQ,
 											  numberOfBCnodes,
 											  om1,
 											  neighborX,
@@ -2023,69 +1953,42 @@ extern "C" void QADPressIncompDev27(  unsigned int numberOfThreads,
       getLastCudaError("QADPressIncomp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QDev27( unsigned int numberOfThreads,
-                        int nx,
-                        int ny,
-                        real* DD,
-                        int* k_Q,
-                        real* QQ,
-                        unsigned int sizeQ,
-                        unsigned int numberOfBCnodes,
-                        real om1,
-                        unsigned int* neighborX,
-                        unsigned int* neighborY,
-                        unsigned int* neighborZ,
-                        unsigned int size_Mat,
-                        bool isEvenTimestep)
+extern "C" void QDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+      QDevice27<<< grid, threads >>> (
+            parameterDevice->distributions.f[0],
+            boundaryCondition->k,
+            boundaryCondition->q27[0],
+            boundaryCondition->numberOfBCnodes,
+            parameterDevice->omega,
+            parameterDevice->neighborX,
+            parameterDevice->neighborY,
+            parameterDevice->neighborZ,
+            parameterDevice->numberOfNodes,
+            parameterDevice->isEvenTimestep);
 
-   QDevice27<<< grid.grid, grid.threads >>> (nx,
-                                       ny,
-                                       DD,
-                                       k_Q,
-                                       QQ,
-                                       sizeQ,
-                                       numberOfBCnodes,
-                                       om1,
-                                       neighborX,
-                                       neighborY,
-                                       neighborZ,
-                                       size_Mat,
-                                       isEvenTimestep);
       getLastCudaError("QDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QDevComp27( unsigned int numberOfThreads,
-							int nx,
-							int ny,
-							real* DD,
-							int* k_Q,
-							real* QQ,
-							unsigned int sizeQ,
-							unsigned int numberOfBCnodes,
-							real om1,
-							unsigned int* neighborX,
-							unsigned int* neighborY,
-							unsigned int* neighborZ,
-							unsigned int size_Mat,
-							bool isEvenTimestep)
+extern "C" void QDevComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QDeviceComp27<<< grid.grid, grid.threads >>> (nx,
-										   ny,
-										   DD,
-										   k_Q,
-										   QQ,
-										   sizeQ,
-										   numberOfBCnodes,
-										   om1,
-										   neighborX,
-										   neighborY,
-										   neighborZ,
-										   size_Mat,
-										   isEvenTimestep);
+      QDeviceComp27<<< grid, threads >>> (
+           parameterDevice->distributions.f[0],
+           boundaryCondition->k,
+           boundaryCondition->q27[0],
+           boundaryCondition->numberOfBCnodes,
+           parameterDevice->omega,
+           parameterDevice->neighborX,
+           parameterDevice->neighborY,
+           parameterDevice->neighborZ,
+           parameterDevice->numberOfNodes,
+           parameterDevice->isEvenTimestep);
       getLastCudaError("QDeviceComp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
@@ -2093,7 +1996,6 @@ extern "C" void QDevCompThinWalls27(unsigned int numberOfThreads,
 									real* DD,
 									int* k_Q,
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes,
 									real om1,
 									unsigned int* geom,
@@ -2109,7 +2011,6 @@ extern "C" void QDevCompThinWalls27(unsigned int numberOfThreads,
    QDeviceCompThinWallsPartOne27 <<< grid.grid, grid.threads >>> (DD,
 														 k_Q,
 														 QQ,
-														 sizeQ,
 														 numberOfBCnodes,
 														 om1,
 														 neighborX,
@@ -2122,7 +2023,6 @@ extern "C" void QDevCompThinWalls27(unsigned int numberOfThreads,
    QThinWallsPartTwo27 <<< grid.grid, grid.threads >>> ( DD,
 												k_Q,
 												QQ,
-												sizeQ,
 												numberOfBCnodes,
 												geom,
 												neighborX,
@@ -2135,46 +2035,29 @@ extern "C" void QDevCompThinWalls27(unsigned int numberOfThreads,
 
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QDev3rdMomentsComp27(   unsigned int numberOfThreads,
-										int nx,
-										int ny,
-										real* DD,
-										int* k_Q,
-										real* QQ,
-										unsigned int sizeQ,
-										unsigned int numberOfBCnodes,
-										real om1,
-										unsigned int* neighborX,
-										unsigned int* neighborY,
-										unsigned int* neighborZ,
-										unsigned int size_Mat,
-										bool isEvenTimestep)
+extern "C" void QDev3rdMomentsComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1);
 
-   QDevice3rdMomentsComp27<<< grid.grid, grid.threads >>> (  nx,
-													   ny,
-													   DD,
-													   k_Q,
-													   QQ,
-													   sizeQ,
-													   numberOfBCnodes,
-													   om1,
-													   neighborX,
-													   neighborY,
-													   neighborZ,
-													   size_Mat,
-													   isEvenTimestep);
-      getLastCudaError("QDevice3rdMomentsComp27 execution failed");
+   QDevice3rdMomentsComp27<<< grid, threads >>> (
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->omega,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
+   getLastCudaError("QDevice3rdMomentsComp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QDevIncompHighNu27( unsigned int numberOfThreads,
-									int nx,
-									int ny,
 									real* DD,
 									int* k_Q,
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes,
 									real om1,
 									unsigned int* neighborX,
@@ -2185,12 +2068,10 @@ extern "C" void QDevIncompHighNu27( unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QDeviceIncompHighNu27<<< grid.grid, grid.threads >>> (nx,
-												   ny,
+      QDeviceIncompHighNu27<<< grid.grid, grid.threads >>> (
 												   DD,
 												   k_Q,
 												   QQ,
-												   sizeQ,
 												   numberOfBCnodes,
 												   om1,
 												   neighborX,
@@ -2202,12 +2083,9 @@ extern "C" void QDevIncompHighNu27( unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QDevCompHighNu27(   unsigned int numberOfThreads,
-									int nx,
-									int ny,
 									real* DD,
 									int* k_Q,
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes,
 									real om1,
 									unsigned int* neighborX,
@@ -2218,12 +2096,10 @@ extern "C" void QDevCompHighNu27(   unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QDeviceCompHighNu27<<< grid.grid, grid.threads >>> (  nx,
-												   ny,
+      QDeviceCompHighNu27<<< grid.grid, grid.threads >>> (
 												   DD,
 												   k_Q,
 												   QQ,
-												   sizeQ,
 												   numberOfBCnodes,
 												   om1,
 												   neighborX,
@@ -2234,50 +2110,35 @@ extern "C" void QDevCompHighNu27(   unsigned int numberOfThreads,
       getLastCudaError("QDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QVelDevicePlainBB27(unsigned int numberOfThreads,
-									real* vx,
-									real* vy,
-									real* vz,
-									real* DD,
-									int* k_Q,
-									real* QQ,
-									unsigned int sizeQ,
-									int numberOfBCnodes,
-									real om1,
-									unsigned int* neighborX,
-									unsigned int* neighborY,
-									unsigned int* neighborZ,
-									unsigned int size_Mat,
-									bool isEvenTimestep)
+extern "C" void QVelDevicePlainBB27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QVelDevPlainBB27<<< grid.grid, grid.threads >>> (  vx,
-												vy,
-												vz,
-												DD,
-												k_Q,
-												QQ,
-												sizeQ,
-												numberOfBCnodes,
-												om1,
-												neighborX,
-												neighborY,
-												neighborZ,
-												size_Mat,
-												isEvenTimestep);
-      getLastCudaError("QVelDevicePlainBB27 execution failed");
+   QVelDevPlainBB27<<< grid, threads >>> (
+         boundaryCondition->Vx,
+         boundaryCondition->Vy,
+         boundaryCondition->Vz,
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
+   getLastCudaError("QVelDevicePlainBB27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QVelDeviceCouhette27(unsigned int numberOfThreads,
+extern "C" void QVelDeviceCouette27(unsigned int numberOfThreads,
 									real* vx,
 									real* vy,
 									real* vz,
 									real* DD,
 									int* k_Q,
 									real* QQ,
-									unsigned int sizeQ,
-									int numberOfBCnodes,
+									unsigned int numberOfBCnodes,
 									real om1,
 									unsigned int* neighborX,
 									unsigned int* neighborY,
@@ -2287,13 +2148,12 @@ extern "C" void QVelDeviceCouhette27(unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QVelDevCouhette27<<< grid.grid, grid.threads >>> ( vx,
+      QVelDevCouette27<<< grid.grid, grid.threads >>> ( vx,
 												vy,
 												vz,
 												DD,
 												k_Q,
 												QQ,
-												sizeQ,
 												numberOfBCnodes,
 												om1,
 												neighborX,
@@ -2313,7 +2173,6 @@ extern "C" void QVelDevice1h27(   unsigned int numberOfThreads,
 								  real* DD,
 								  int* k_Q,
 								  real* QQ,
-								  unsigned int sizeQ,
 								  unsigned int numberOfBCnodes,
 								  real om1,
 								  real Phi,
@@ -2337,7 +2196,6 @@ extern "C" void QVelDevice1h27(   unsigned int numberOfThreads,
                                           DD,
                                           k_Q,
                                           QQ,
-                                          sizeQ,
                                           numberOfBCnodes,
                                           om1,
 										  Phi,
@@ -2353,55 +2211,37 @@ extern "C" void QVelDevice1h27(   unsigned int numberOfThreads,
       getLastCudaError("QVelDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QVelDev27(unsigned int numberOfThreads,
-                          int nx,
-                          int ny,
-                          real* vx,
-                          real* vy,
-                          real* vz,
-                          real* DD,
-                          int* k_Q,
-                          real* QQ,
-                          unsigned int sizeQ,
-                          unsigned int numberOfBCnodes,
-                          real om1,
-                          unsigned int* neighborX,
-                          unsigned int* neighborY,
-                          unsigned int* neighborZ,
-                          unsigned int size_Mat,
-                          bool isEvenTimestep)
-{
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
-
-   QVelDevice27<<< grid.grid, grid.threads >>> (nx,
-                                          ny,
-                                          vx,
-                                          vy,
-                                          vz,
-                                          DD,
-                                          k_Q,
-                                          QQ,
-                                          sizeQ,
-                                          numberOfBCnodes,
-                                          om1,
-                                          neighborX,
-                                          neighborY,
-                                          neighborZ,
-                                          size_Mat,
-                                          isEvenTimestep);
+extern "C" void QVelDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
+{
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+      QVelDevice27<<< grid, threads >>> (
+            parameterDevice->nx,
+            parameterDevice->ny,
+            boundaryCondition->Vx,
+            boundaryCondition->Vy,
+            boundaryCondition->Vz,
+            parameterDevice->distributions.f[0],
+            boundaryCondition->k,
+            boundaryCondition->q27[0],
+            boundaryCondition->numberOfBCnodes,
+            parameterDevice->omega,
+            parameterDevice->neighborX,
+            parameterDevice->neighborY,
+            parameterDevice->neighborZ,
+            parameterDevice->numberOfNodes,
+            parameterDevice->isEvenTimestep);
       getLastCudaError("QVelDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QVelDevCompPlusSlip27(unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* vx,
 									  real* vy,
 									  real* vz,
 									  real* DD,
 									  int* k_Q,
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes,
 									  real om1,
 									  unsigned int* neighborX,
@@ -2412,15 +2252,13 @@ extern "C" void QVelDevCompPlusSlip27(unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QVelDeviceCompPlusSlip27<<< grid.grid, grid.threads >>> (nx,
-													  ny,
+      QVelDeviceCompPlusSlip27<<< grid.grid, grid.threads >>> (
 													  vx,
 													  vy,
 													  vz,
 													  DD,
 													  k_Q,
 													  QQ,
-													  sizeQ,
 													  numberOfBCnodes,
 													  om1,
 													  neighborX,
@@ -2431,43 +2269,26 @@ extern "C" void QVelDevCompPlusSlip27(unsigned int numberOfThreads,
       getLastCudaError("QVelDeviceCompPlusSlip27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QVelDevComp27(unsigned int numberOfThreads,
-							  int nx,
-							  int ny,
-							  real* vx,
-							  real* vy,
-							  real* vz,
-							  real* DD,
-							  int* k_Q,
-							  real* QQ,
-							  unsigned int sizeQ,
-							  unsigned int numberOfBCnodes,
-							  real om1,
-							  unsigned int* neighborX,
-							  unsigned int* neighborY,
-							  unsigned int* neighborZ,
-							  unsigned int size_Mat,
-							  bool isEvenTimestep)
+extern "C" void QVelDevComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid(parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QVelDeviceComp27<<< grid.grid, grid.threads >>> (nx,
-											  ny,
-											  vx,
-											  vy,
-											  vz,
-											  DD,
-											  k_Q,
-											  QQ,
-											  sizeQ,
-											  numberOfBCnodes,
-											  om1,
-											  neighborX,
-											  neighborY,
-											  neighborZ,
-											  size_Mat,
-											  isEvenTimestep);
-      getLastCudaError("QVelDeviceComp27 execution failed");
+   QVelDeviceComp27<<< grid, threads >>> (
+            boundaryCondition->Vx,
+            boundaryCondition->Vy,
+            boundaryCondition->Vz,
+            parameterDevice->distributions.f[0],
+            boundaryCondition->k,        
+            boundaryCondition->q27[0],
+            boundaryCondition->numberOfBCnodes,
+            parameterDevice->omega,
+            parameterDevice->neighborX,
+            parameterDevice->neighborY,
+            parameterDevice->neighborZ,
+            parameterDevice->numberOfNodes,
+            parameterDevice->isEvenTimestep);
+   getLastCudaError("QVelDeviceComp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
@@ -2477,14 +2298,13 @@ extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
 							           real* DD,
 							           int* k_Q,
 							           real* QQ,
-							           unsigned int sizeQ,
 							           unsigned int numberOfBCnodes,
 							           real om1,
-									   unsigned int* geom,
+									     unsigned int* geom,
 							           unsigned int* neighborX,
 							           unsigned int* neighborY,
 							           unsigned int* neighborZ,
-									   unsigned int* neighborWSB,
+									     unsigned int* neighborWSB,
 							           unsigned int size_Mat,
 							           bool isEvenTimestep)
 {
@@ -2496,7 +2316,6 @@ extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
 											                  DD,
 											                  k_Q,
 											                  QQ,
-											                  sizeQ,
 											                  numberOfBCnodes,
 											                  om1,
 											                  neighborX,
@@ -2506,70 +2325,50 @@ extern "C" void QVelDevCompThinWalls27(unsigned int numberOfThreads,
 											                  isEvenTimestep);
    getLastCudaError("QVelDeviceCompThinWallsPartOne27 execution failed");
 
-	QThinWallsPartTwo27 <<< grid.grid, grid.threads >>> (DD,
-											      k_Q,
-											      QQ,
-											      sizeQ,
-											      numberOfBCnodes,
-                                                  geom,
-											      neighborX,
-											      neighborY,
-											      neighborZ,
-                                                  neighborWSB,
-											      size_Mat,
-											      isEvenTimestep);
+	QThinWallsPartTwo27 <<< grid.grid, grid.threads >>> (
+       DD,
+       k_Q,
+       QQ,
+       numberOfBCnodes,
+       geom,
+       neighborX,
+       neighborY,
+       neighborZ,
+       neighborWSB,
+       size_Mat,
+       isEvenTimestep);
    getLastCudaError("QThinWallsPartTwo27 execution failed");
 }
-//////////////////////////////////////////////////////////////////////////
-extern "C" void QVelDevCompZeroPress27(   unsigned int numberOfThreads,
-										  int nx,
-										  int ny,
-										  real* vx,
-										  real* vy,
-										  real* vz,
-										  real* DD,
-										  int* k_Q,
-										  real* QQ,
-										  unsigned int sizeQ,
-										  int kArray,
-										  real om1,
-										  unsigned int* neighborX,
-										  unsigned int* neighborY,
-										  unsigned int* neighborZ,
-										  unsigned int size_Mat,
-										  bool isEvenTimestep)
-{
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
 
-   QVelDeviceCompZeroPress27<<< grid.grid, grid.threads >>> (   nx,
-														  ny,
-														  vx,
-														  vy,
-														  vz,
-														  DD,
-														  k_Q,
-														  QQ,
-														  sizeQ,
-														  //numberOfBCnodes,
-														  om1,
-														  neighborX,
-														  neighborY,
-														  neighborZ,
-														  size_Mat,
-														  isEvenTimestep);
+extern "C" void QVelDevCompZeroPress27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
+{
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+   QVelDeviceCompZeroPress27<<< grid, threads >>> (
+            boundaryCondition->Vx,
+            boundaryCondition->Vy,
+            boundaryCondition->Vz,
+            parameterDevice->distributions.f[0],
+            boundaryCondition->k,
+            boundaryCondition->q27[0],
+            boundaryCondition->numberOfBCnodes,
+            parameterDevice->omega,
+            parameterDevice->neighborX,
+            parameterDevice->neighborY,
+            parameterDevice->neighborZ,
+            parameterDevice->numberOfNodes,
+            parameterDevice->isEvenTimestep);
    getLastCudaError("QVelDeviceCompZeroPress27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QVelDevIncompHighNu27(unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* vx,
 									  real* vy,
 									  real* vz,
 									  real* DD,
 									  int* k_Q,
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes,
 									  real om1,
 									  unsigned int* neighborX,
@@ -2580,15 +2379,13 @@ extern "C" void QVelDevIncompHighNu27(unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QVelDeviceIncompHighNu27<<< grid.grid, grid.threads >>> (nx,
-													  ny,
+      QVelDeviceIncompHighNu27<<< grid.grid, grid.threads >>> (
 													  vx,
 													  vy,
 													  vz,
 													  DD,
 													  k_Q,
 													  QQ,
-													  sizeQ,
 													  numberOfBCnodes,
 													  om1,
 													  neighborX,
@@ -2600,15 +2397,12 @@ extern "C" void QVelDevIncompHighNu27(unsigned int numberOfThreads,
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QVelDevCompHighNu27(  unsigned int numberOfThreads,
-									  int nx,
-									  int ny,
 									  real* vx,
 									  real* vy,
 									  real* vz,
 									  real* DD,
 									  int* k_Q,
 									  real* QQ,
-									  unsigned int sizeQ,
 									  unsigned int numberOfBCnodes,
 									  real om1,
 									  unsigned int* neighborX,
@@ -2619,15 +2413,13 @@ extern "C" void QVelDevCompHighNu27(  unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-   QVelDeviceCompHighNu27<<< grid.grid, grid.threads >>> (  nx,
-													  ny,
+      QVelDeviceCompHighNu27<<< grid.grid, grid.threads >>> (
 													  vx,
 													  vy,
 													  vz,
 													  DD,
 													  k_Q,
 													  QQ,
-													  sizeQ,
 													  numberOfBCnodes,
 													  om1,
 													  neighborX,
@@ -2702,85 +2494,69 @@ extern "C" void QVeloStreetDevEQ27(
 	getLastCudaError("QVeloStreetDeviceEQ27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QSlipDev27(unsigned int numberOfThreads,
-                           real* DD,
-                           int* k_Q,
-                           real* QQ,
-                           unsigned int sizeQ,
-                           real om1,
-                           unsigned int* neighborX,
-                           unsigned int* neighborY,
-                           unsigned int* neighborZ,
-                           unsigned int size_Mat,
-                           bool isEvenTimestep)
+extern "C" void QSlipDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
-
-   QSlipDevice27<<< grid.grid, grid.threads >>> (DD,
-                                           k_Q,
-                                           QQ,
-                                           sizeQ,
-                                           om1,
-                                           neighborX,
-                                           neighborY,
-                                           neighborZ,
-                                           size_Mat,
-                                           isEvenTimestep);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads, boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+   QSlipDevice27<<< grid, threads >>> (
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->omega,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
    getLastCudaError("QSlipDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QSlipDevComp27(unsigned int numberOfThreads,
-							   real* DD,
-							   int* k_Q,
-							   real* QQ,
-							   unsigned int sizeQ,
-							   real om1,
-							   unsigned int* neighborX,
-							   unsigned int* neighborY,
-							   unsigned int* neighborZ,
-                        real* turbViscosity,
-                        bool useTurbViscosity,
-							   unsigned int size_Mat,
-							   bool isEvenTimestep)
-{
-   	vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
-
-	if(useTurbViscosity)
-	{
-		QSlipDeviceComp27TurbViscosity<<< grid.grid, grid.threads >>> (DD,
-											   k_Q,
-											   QQ,
-											   sizeQ,
-											   om1,
-											   neighborX,
-											   neighborY,
-											   neighborZ,
-                                    turbViscosity,
-											   size_Mat,
-											   isEvenTimestep);
-		getLastCudaError("QSlipDeviceComp27TurbViscosity execution failed");
-	}
-	else
-	{
-		QSlipDeviceComp27<<< grid.grid, grid.threads >>> (DD,
-											   k_Q,
-											   QQ,
-											   sizeQ,
-											   om1,
-											   neighborX,
-											   neighborY,
-											   neighborZ,
-											   size_Mat,
-											   isEvenTimestep);
-      	getLastCudaError("QSlipDeviceComp27 execution failed");
-   }
+extern "C" void QSlipDevCompTurbulentViscosity27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
+{
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads, boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+   QSlipDeviceComp27TurbViscosity<<< grid, threads >>> (
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->omega,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->turbViscosity,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
+   getLastCudaError("QSlipDeviceComp27TurbViscosity execution failed");
+}
+
+extern "C" void QSlipDevComp27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
+{
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads, boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+   QSlipDeviceComp27<<< grid, threads >>> (
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->omega,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
+   getLastCudaError("QSlipDeviceComp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QSlipGeomDevComp27(unsigned int numberOfThreads,
 								   real* DD,
 								   int* k_Q,
 								   real* QQ,
-								   unsigned int sizeQ,
+								   unsigned int numberOfBCnodes,
 								   real om1,
 								   real* NormalX,
 								   real* NormalY,
@@ -2791,12 +2567,12 @@ extern "C" void QSlipGeomDevComp27(unsigned int numberOfThreads,
 								   unsigned int size_Mat,
 								   bool isEvenTimestep)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
+	vf::cuda::CudaGrid grid(numberOfThreads, numberOfBCnodes);
 
    QSlipGeomDeviceComp27<<< grid.grid, grid.threads >>> (DD,
 												   k_Q,
 												   QQ,
-												   sizeQ,
+												   numberOfBCnodes,
 												   om1,
 												   NormalX,
 												   NormalY,
@@ -2813,7 +2589,7 @@ extern "C" void QSlipNormDevComp27(unsigned int numberOfThreads,
 								   real* DD,
 								   int* k_Q,
 								   real* QQ,
-								   unsigned int sizeQ,
+								   unsigned int numberOfBCnodes,
 								   real om1,
 								   real* NormalX,
 								   real* NormalY,
@@ -2824,12 +2600,12 @@ extern "C" void QSlipNormDevComp27(unsigned int numberOfThreads,
 								   unsigned int size_Mat,
 								   bool isEvenTimestep)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
+   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
    QSlipNormDeviceComp27<<< grid.grid, grid.threads >>> (DD,
 												   k_Q,
 												   QQ,
-												   sizeQ,
+												   numberOfBCnodes,
 												   om1,
 												   NormalX,
 												   NormalY,
@@ -2842,173 +2618,102 @@ extern "C" void QSlipNormDevComp27(unsigned int numberOfThreads,
       getLastCudaError("QSlipGeomDeviceComp27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QStressDevComp27(unsigned int numberOfThreads,
-							   real* DD,
-							   int* k_Q,
-                        int* k_N,
-							   real* QQ,
-							   unsigned int sizeQ,
-							   real om1,
-                        real* turbViscosity,
-                        real* vx,
-                        real* vy,
-                        real* vz,
-                        real* normalX,
-                        real* normalY,
-                        real* normalZ,
-                        real* vx_bc,
-                        real* vy_bc,
-                        real* vz_bc,
-                        real* vx1,
-                        real* vy1,
-                        real* vz1,
-                        int* samplingOffset,
-                        real* z0,
-                        bool  hasWallModelMonitor,
-                        real* u_star,
-                        real* Fx,
-                        real* Fy,
-                        real* Fz,
-							   unsigned int* neighborX,
-							   unsigned int* neighborY,
-							   unsigned int* neighborZ,
-							   unsigned int size_Mat,
-							   bool isEvenTimestep)
-{
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
-
-   QStressDeviceComp27<<< grid.grid, grid.threads >>> (DD,
-											   k_Q,
-                                    k_N,
-											   QQ,
-											   sizeQ,
-											   om1,
-                                    turbViscosity,
-                                    vx,
-                                    vy,
-                                    vz,
-                                    normalX,
-                                    normalY,
-                                    normalZ,
-                                    vx_bc,
-                                    vy_bc,
-                                    vz_bc,
-                                    vx1,
-                                    vy1,
-                                    vz1,
-                                    samplingOffset,
-                                    z0,
-                                    hasWallModelMonitor,
-                                    u_star,
-                                    Fx,
-                                    Fy,
-                                    Fz,
-											   neighborX,
-											   neighborY,
-											   neighborZ,
-											   size_Mat,
-											   isEvenTimestep);
-   getLastCudaError("QSlipDeviceComp27 execution failed");
-}
-
-//////////////////////////////////////////////////////////////////////////
-extern "C" void BBStressDev27(unsigned int numberOfThreads,
-							   real* DD,
-							   int* k_Q,
-                        int* k_N,
-							   real* QQ,
-							   unsigned int sizeQ,
-                        real* vx,
-                        real* vy,
-                        real* vz,
-                        real* normalX,
-                        real* normalY,
-                        real* normalZ,
-                        real* vx_bc,
-                        real* vy_bc,
-                        real* vz_bc,
-                        real* vx1,
-                        real* vy1,
-                        real* vz1,
-                        int* samplingOffset,
-                        real* z0,
-                        bool  hasWallModelMonitor,
-                        real* u_star,
-                        real* Fx,
-                        real* Fy,
-                        real* Fz,
-							   unsigned int* neighborX,
-							   unsigned int* neighborY,
-							   unsigned int* neighborZ,
-							   unsigned int size_Mat,
-							   bool isEvenTimestep)
-{
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, sizeQ);
-
-   BBStressDevice27<<< grid.grid, grid.threads >>> (DD,
-											   k_Q,
-                                    k_N,
-											   QQ,
-											   sizeQ,
-                                    vx,
-                                    vy,
-                                    vz,
-                                    normalX,
-                                    normalY,
-                                    normalZ,
-                                    vx_bc,
-                                    vy_bc,
-                                    vz_bc,
-                                    vx1,
-                                    vy1,
-                                    vz1,
-                                    samplingOffset,
-                                    z0,
-                                    hasWallModelMonitor,
-                                    u_star,
-                                    Fx,
-                                    Fy,
-                                    Fz,
-											   neighborX,
-											   neighborY,
-											   neighborZ,
-											   size_Mat,
-											   isEvenTimestep);
-   getLastCudaError("BBStressDevice27 execution failed");
-}
-//////////////////////////////////////////////////////////////////////////
-extern "C" void QPressDev27(unsigned int numberOfThreads,
-                             int nx,
-                             int ny,
-                             real* rhoBC,
-                             real* DD,
-                             int* k_Q,
-                             real* QQ,
-                             unsigned int sizeQ,
-                             unsigned int numberOfBCnodes,
-                             real om1,
-                             unsigned int* neighborX,
-                             unsigned int* neighborY,
-                             unsigned int* neighborZ,
-                             unsigned int size_Mat,
-                             bool isEvenTimestep)
-{
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
-
-   QPressDevice27<<< grid.grid, grid.threads >>> (nx,
-                                             ny,
-                                             rhoBC,
-                                             DD,
-                                             k_Q,
-                                             QQ,
-                                             sizeQ,
-                                             numberOfBCnodes,
-                                             om1,
-                                             neighborX,
-                                             neighborY,
-                                             neighborZ,
-                                             size_Mat,
-                                             isEvenTimestep);
+extern "C" void QStressDevComp27(Parameter *para,  QforBoundaryConditions* boundaryCondition, const int level)
+{
+   dim3 grid = vf::cuda::getCudaGrid(  para->getParD(level)->numberofthreads, boundaryCondition->numberOfBCnodes);
+   dim3 threads(para->getParD(level)->numberofthreads, 1, 1 );
+
+      QStressDeviceComp27<<< grid, threads >>> (
+         para->getParD(level)->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->kN,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         para->getParD(level)->omega,
+         para->getParD(level)->turbViscosity,
+         para->getParD(level)->velocityX,
+         para->getParD(level)->velocityY,
+         para->getParD(level)->velocityY,
+         boundaryCondition->normalX,
+         boundaryCondition->normalY,
+         boundaryCondition->normalZ,
+         boundaryCondition->Vx,
+         boundaryCondition->Vy,
+         boundaryCondition->Vz,
+         boundaryCondition->Vx1,
+         boundaryCondition->Vy1,
+         boundaryCondition->Vz1,
+         para->getParD(level)->wallModel.samplingOffset,
+         para->getParD(level)->wallModel.z0,
+         para->getHasWallModelMonitor(),
+         para->getParD(level)->wallModel.u_star,
+         para->getParD(level)->wallModel.Fx,
+         para->getParD(level)->wallModel.Fy,
+         para->getParD(level)->wallModel.Fz,
+         para->getParD(level)->neighborX,
+         para->getParD(level)->neighborY,
+         para->getParD(level)->neighborZ,
+         para->getParD(level)->numberOfNodes,
+         para->getParD(level)->isEvenTimestep);
+      getLastCudaError("QSlipDeviceComp27 execution failed");
+}
+
+//////////////////////////////////////////////////////////////////////////
+extern "C" void BBStressDev27(Parameter *para,  QforBoundaryConditions* boundaryCondition, const int level)
+{
+   dim3 grid = vf::cuda::getCudaGrid( para->getParD(level)->numberofthreads, boundaryCondition->numberOfBCnodes);
+   dim3 threads(para->getParD(level)->numberofthreads, 1, 1 );
+
+   BBStressDevice27<<< grid, threads >>> (
+      para->getParD(level)->distributions.f[0],
+      boundaryCondition->k,
+      boundaryCondition->kN,
+      boundaryCondition->q27[0],
+      boundaryCondition->numberOfBCnodes,
+      para->getParD(level)->velocityX,
+      para->getParD(level)->velocityY,
+      para->getParD(level)->velocityY,
+      boundaryCondition->normalX,
+      boundaryCondition->normalY,
+      boundaryCondition->normalZ,
+      boundaryCondition->Vx,
+      boundaryCondition->Vy,
+      boundaryCondition->Vz,
+      boundaryCondition->Vx1,
+      boundaryCondition->Vy1,
+      boundaryCondition->Vz1,
+      para->getParD(level)->wallModel.samplingOffset,
+      para->getParD(level)->wallModel.z0,
+      para->getHasWallModelMonitor(),
+      para->getParD(level)->wallModel.u_star,
+      para->getParD(level)->wallModel.Fx,
+      para->getParD(level)->wallModel.Fy,
+      para->getParD(level)->wallModel.Fz,
+      para->getParD(level)->neighborX,
+      para->getParD(level)->neighborY,
+      para->getParD(level)->neighborZ,
+      para->getParD(level)->numberOfNodes,
+      para->getParD(level)->isEvenTimestep);
+      getLastCudaError("BBStressDevice27 execution failed");
+}
+//////////////////////////////////////////////////////////////////////////
+extern "C" void QPressDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
+{
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
+
+   QPressDevice27<<< grid, threads >>> (
+      boundaryCondition->RhoBC,
+      parameterDevice->distributions.f[0],
+      boundaryCondition->k,
+      boundaryCondition->q27[0],
+      boundaryCondition->numberOfBCnodes,
+      parameterDevice->omega,
+      parameterDevice->neighborX,
+      parameterDevice->neighborY,
+      parameterDevice->neighborZ,
+      parameterDevice->numberOfNodes,
+      parameterDevice->isEvenTimestep);
    getLastCudaError("QPressDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
@@ -3101,61 +2806,43 @@ extern "C" void QPressDevDirDepBot27(  unsigned int numberOfThreads,
    getLastCudaError("QPressDeviceDirDepBot27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QPressNoRhoDev27(unsigned int numberOfThreads,
-                                 real* rhoBC,
-                                 real* DD,
-                                 int* k_Q,
-                                 int* k_N,
-                                 unsigned int numberOfBCnodes,
-                                 real om1,
-                                 unsigned int* neighborX,
-                                 unsigned int* neighborY,
-                                 unsigned int* neighborZ,
-                                 unsigned int size_Mat,
-                                 bool isEvenTimestep)
+extern "C" void QPressNoRhoDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QPressNoRhoDevice27<<< grid.grid, grid.threads >>> (   rhoBC,
-													DD,
-													k_Q,
-													k_N,
-													numberOfBCnodes,
-													om1,
-													neighborX,
-													neighborY,
-													neighborZ,
-													size_Mat,
-													isEvenTimestep);
+   QPressNoRhoDevice27<<< grid, threads >>> (
+         boundaryCondition->RhoBC,
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->kN,
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->omega,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
    getLastCudaError("QPressNoRhoDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QInflowScaleByPressDev27(unsigned int numberOfThreads,
-										 real* rhoBC,
-										 real* DD,
-										 int* k_Q,
-										 int* k_N,
-										 unsigned int numberOfBCnodes,
-										 real om1,
-										 unsigned int* neighborX,
-										 unsigned int* neighborY,
-										 unsigned int* neighborZ,
-										 unsigned int size_Mat,
-										 bool isEvenTimestep)
+extern "C" void QInflowScaleByPressDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QInflowScaleByPressDevice27<<< grid.grid, grid.threads >>> (  rhoBC,
-														DD,
-														k_Q,
-														k_N,
-														numberOfBCnodes,
-														om1,
-														neighborX,
-														neighborY,
-														neighborZ,
-														size_Mat,
-														isEvenTimestep);
+   QInflowScaleByPressDevice27<<< grid, threads >>> (
+           boundaryCondition->RhoBC,
+           parameterDevice->distributions.f[0],
+           boundaryCondition->k,
+           boundaryCondition->kN,
+           boundaryCondition->numberOfBCnodes,
+           parameterDevice->omega,
+           parameterDevice->neighborX,
+           parameterDevice->neighborY,
+           parameterDevice->neighborZ,
+           parameterDevice->numberOfNodes,
+           parameterDevice->isEvenTimestep);
    getLastCudaError("QInflowScaleByPressDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
@@ -3188,93 +2875,65 @@ extern "C" void QPressDevOld27(  unsigned int numberOfThreads,
    getLastCudaError("QPressDeviceOld27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QPressDevIncompNEQ27(unsigned int numberOfThreads,
-                                     real* rhoBC,
-                                     real* DD,
-                                     int* k_Q,
-                                     int* k_N,
-                                     unsigned int numberOfBCnodes,
-                                     real om1,
-                                     unsigned int* neighborX,
-                                     unsigned int* neighborY,
-                                     unsigned int* neighborZ,
-                                     unsigned int size_Mat,
-                                     bool isEvenTimestep)
+extern "C" void QPressDevIncompNEQ27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QPressDeviceIncompNEQ27<<< grid.grid, grid.threads >>> (   rhoBC,
-														DD,
-														k_Q,
-														k_N,
-														numberOfBCnodes,
-														om1,
-														neighborX,
-														neighborY,
-														neighborZ,
-														size_Mat,
-														isEvenTimestep);
+   QPressDeviceIncompNEQ27<<< grid, threads >>> (
+         boundaryCondition->RhoBC,
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->kN,
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->omega,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
    getLastCudaError("QPressDeviceIncompNEQ27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QPressDevNEQ27(  unsigned int numberOfThreads,
-                                     real* rhoBC,
-                                     real* DD,
-                                     int* k_Q,
-                                     int* k_N,
-                                     unsigned int numberOfBCnodes,
-                                     real om1,
-                                     unsigned int* neighborX,
-                                     unsigned int* neighborY,
-                                     unsigned int* neighborZ,
-                                     unsigned int size_Mat,
-                                     bool isEvenTimestep)
+extern "C" void QPressDevNEQ27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QPressDeviceNEQ27<<< grid.grid, grid.threads >>> ( rhoBC,
-                                                DD,
-                                                k_Q,
-                                                k_N,
-                                                numberOfBCnodes,
-                                                om1,
-                                                neighborX,
-                                                neighborY,
-                                                neighborZ,
-                                                size_Mat,
-                                                isEvenTimestep);
-   getLastCudaError("QPressDeviceOld27 execution failed");
+   QPressDeviceNEQ27<<< grid, threads >>> (
+        boundaryCondition->RhoBC,
+        parameterDevice->distributions.f[0],
+        boundaryCondition->k,
+        boundaryCondition->kN,
+        boundaryCondition->numberOfBCnodes,
+        parameterDevice->omega,
+        parameterDevice->neighborX,
+        parameterDevice->neighborY,
+        parameterDevice->neighborZ,
+        parameterDevice->numberOfNodes,
+        parameterDevice->isEvenTimestep);
+   getLastCudaError("QPressDevNEQ27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void QPressDevEQZ27(  unsigned int numberOfThreads,
-                                     real* rhoBC,
-                                     real* DD,
-                                     int* k_Q,
-                                     int* k_N,
-                                     real* kTestRE,
-                                     unsigned int numberOfBCnodes,
-                                     real om1,
-                                     unsigned int* neighborX,
-                                     unsigned int* neighborY,
-                                     unsigned int* neighborZ,
-                                     unsigned int size_Mat,
-                                     bool isEvenTimestep)
+extern "C" void QPressDevEQZ27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-   QPressDeviceEQZ27<<< grid.grid, grid.threads >>> ( rhoBC,
-                                                DD,
-                                                k_Q,
-                                                k_N,
-                                                kTestRE,
-                                                numberOfBCnodes,
-                                                om1,
-                                                neighborX,
-                                                neighborY,
-                                                neighborZ,
-                                                size_Mat,
-                                                isEvenTimestep);
-   getLastCudaError("QPressDeviceEQZ27 execution failed");
+      QPressDeviceEQZ27<<< grid, threads >>> (
+            boundaryCondition->RhoBC,
+            parameterDevice->distributions.f[0],
+            boundaryCondition->k,
+            boundaryCondition->kN,
+            parameterDevice->kDistTestRE.f[0],
+            boundaryCondition->numberOfBCnodes,
+            parameterDevice->omega,
+            parameterDevice->neighborX,
+            parameterDevice->neighborY,
+            parameterDevice->neighborZ,
+            parameterDevice->numberOfNodes,
+            parameterDevice->isEvenTimestep);
+      getLastCudaError("QPressDeviceEQZ27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QPressDevZero27(unsigned int numberOfThreads,
@@ -3330,38 +2989,22 @@ extern "C" void QPressDevFake27(     unsigned int numberOfThreads,
       getLastCudaError("QPressDeviceFake27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
-extern "C" void BBDev27( unsigned int numberOfThreads,
-                       int nx,
-                       int ny,
-                       real* DD,
-                       int* k_Q,
-                       real* QQ,
-                       unsigned int sizeQ,
-                       unsigned int numberOfBCnodes,
-                       real om1,
-                       unsigned int* neighborX,
-                       unsigned int* neighborY,
-                       unsigned int* neighborZ,
-                       unsigned int size_Mat,
-                       bool isEvenTimestep)
+extern "C" void BBDev27(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* boundaryCondition)
 {
-   vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
-
+   dim3 grid = vf::cuda::getCudaGrid( parameterDevice->numberofthreads,  boundaryCondition->numberOfBCnodes);
+   dim3 threads(parameterDevice->numberofthreads, 1, 1 );
 
-      BBDevice27<<< grid.grid, grid.threads >>> (  nx,
-                                          ny,
-                                          DD,
-                                          k_Q,
-                                          QQ,
-                                          sizeQ,
-                                          numberOfBCnodes,
-                                          om1,
-                                          neighborX,
-                                          neighborY,
-                                          neighborZ,
-                                          size_Mat,
-                                          isEvenTimestep);
-      getLastCudaError("BBDevice27 execution failed");
+   BBDevice27<<< grid, threads >>> (
+         parameterDevice->distributions.f[0],
+         boundaryCondition->k,
+         boundaryCondition->q27[0],
+         boundaryCondition->numberOfBCnodes,
+         parameterDevice->neighborX,
+         parameterDevice->neighborY,
+         parameterDevice->neighborZ,
+         parameterDevice->numberOfNodes,
+         parameterDevice->isEvenTimestep);
+   getLastCudaError("BBDevice27 execution failed");
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void QPressDev27_IntBB(  unsigned int numberOfThreads,
@@ -3369,7 +3012,6 @@ extern "C" void QPressDev27_IntBB(  unsigned int numberOfThreads,
 									real* DD,
 									int* k_Q,
 									real* QQ,
-									unsigned int sizeQ,
 									unsigned int numberOfBCnodes,
 									real om1,
 									unsigned int* neighborX,
@@ -3384,7 +3026,6 @@ extern "C" void QPressDev27_IntBB(  unsigned int numberOfThreads,
 													DD,
 													k_Q,
 													QQ,
-													sizeQ,
 													numberOfBCnodes,
 													om1,
 													neighborX,
@@ -5510,15 +5151,12 @@ extern "C" void setRecvGsDevF3(
 }
 //////////////////////////////////////////////////////////////////////////
 extern "C" void WallFuncDev27(unsigned int numberOfThreads,
-							  int nx,
-							  int ny,
 							  real* vx,
 							  real* vy,
 							  real* vz,
 							  real* DD,
 							  int* k_Q,
 							  real* QQ,
-							  unsigned int sizeQ,
 							  unsigned int numberOfBCnodes,
 							  real om1,
 							  unsigned int* neighborX,
@@ -5529,16 +5167,13 @@ extern "C" void WallFuncDev27(unsigned int numberOfThreads,
 {
    vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfBCnodes);
 
-
-      WallFunction27<<< grid.grid, grid.threads >>> (  nx,
-											  ny,
+      WallFunction27<<< grid.grid, grid.threads >>> (
 											  vx,
 											  vy,
 											  vz,
 											  DD,
 											  k_Q,
 											  QQ,
-											  sizeQ,
 											  numberOfBCnodes,
 											  om1,
 											  neighborX,
@@ -5639,7 +5274,7 @@ extern "C" void InitParticlesDevice(real* coordX,
 									unsigned int* neighborY,
 									unsigned int* neighborZ,
 									unsigned int* neighborWSB,
-							        int level,
+									int level,
 									unsigned int numberOfParticles,
 									unsigned int size_Mat,
 									unsigned int numberOfThreads)
diff --git a/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu
index af74dd9a75f1ab5bab89193cd14270dfb2b8d515..b04b7fdd999b96f20c3a32f2b3e8aef1e3222608 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu
@@ -7,86 +7,86 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
+#include "KernelUtilities.h"
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
-													 int iny,
-													 real* DD, 
-													 int* k_Q, 
-													 real* QQ,
-													 unsigned int sizeQ,
-													 int numberOfNodes, 
-													 real om1, 
+extern "C" __global__ void QDevice3rdMomentsComp27(
+													 real* distributions, 
+													 int* subgridDistanceIndices, 
+													 real* subgridDistances,
+													 unsigned int numberOfBCnodes, 
+													 real omega, 
 													 unsigned int* neighborX,
 													 unsigned int* neighborY,
 													 unsigned int* neighborZ,
-													 unsigned int size_Mat, 
+													 unsigned int numberOfLBnodes, 
 													 bool isEvenTimestep)
 {
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &distributions[E   *numberOfLBnodes];
+      D.f[W   ] = &distributions[W   *numberOfLBnodes];
+      D.f[N   ] = &distributions[N   *numberOfLBnodes];
+      D.f[S   ] = &distributions[S   *numberOfLBnodes];
+      D.f[T   ] = &distributions[T   *numberOfLBnodes];
+      D.f[B   ] = &distributions[B   *numberOfLBnodes];
+      D.f[NE  ] = &distributions[NE  *numberOfLBnodes];
+      D.f[SW  ] = &distributions[SW  *numberOfLBnodes];
+      D.f[SE  ] = &distributions[SE  *numberOfLBnodes];
+      D.f[NW  ] = &distributions[NW  *numberOfLBnodes];
+      D.f[TE  ] = &distributions[TE  *numberOfLBnodes];
+      D.f[BW  ] = &distributions[BW  *numberOfLBnodes];
+      D.f[BE  ] = &distributions[BE  *numberOfLBnodes];
+      D.f[TW  ] = &distributions[TW  *numberOfLBnodes];
+      D.f[TN  ] = &distributions[TN  *numberOfLBnodes];
+      D.f[BS  ] = &distributions[BS  *numberOfLBnodes];
+      D.f[BN  ] = &distributions[BN  *numberOfLBnodes];
+      D.f[TS  ] = &distributions[TS  *numberOfLBnodes];
+      D.f[REST] = &distributions[REST*numberOfLBnodes];
+      D.f[TNE ] = &distributions[TNE *numberOfLBnodes];
+      D.f[TSW ] = &distributions[TSW *numberOfLBnodes];
+      D.f[TSE ] = &distributions[TSE *numberOfLBnodes];
+      D.f[TNW ] = &distributions[TNW *numberOfLBnodes];
+      D.f[BNE ] = &distributions[BNE *numberOfLBnodes];
+      D.f[BSW ] = &distributions[BSW *numberOfLBnodes];
+      D.f[BSE ] = &distributions[BSE *numberOfLBnodes];
+      D.f[BNW ] = &distributions[BNW *numberOfLBnodes];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &distributions[E   *numberOfLBnodes];
+      D.f[E   ] = &distributions[W   *numberOfLBnodes];
+      D.f[S   ] = &distributions[N   *numberOfLBnodes];
+      D.f[N   ] = &distributions[S   *numberOfLBnodes];
+      D.f[B   ] = &distributions[T   *numberOfLBnodes];
+      D.f[T   ] = &distributions[B   *numberOfLBnodes];
+      D.f[SW  ] = &distributions[NE  *numberOfLBnodes];
+      D.f[NE  ] = &distributions[SW  *numberOfLBnodes];
+      D.f[NW  ] = &distributions[SE  *numberOfLBnodes];
+      D.f[SE  ] = &distributions[NW  *numberOfLBnodes];
+      D.f[BW  ] = &distributions[TE  *numberOfLBnodes];
+      D.f[TE  ] = &distributions[BW  *numberOfLBnodes];
+      D.f[TW  ] = &distributions[BE  *numberOfLBnodes];
+      D.f[BE  ] = &distributions[TW  *numberOfLBnodes];
+      D.f[BS  ] = &distributions[TN  *numberOfLBnodes];
+      D.f[TN  ] = &distributions[BS  *numberOfLBnodes];
+      D.f[TS  ] = &distributions[BN  *numberOfLBnodes];
+      D.f[BN  ] = &distributions[TS  *numberOfLBnodes];
+      D.f[REST] = &distributions[REST*numberOfLBnodes];
+      D.f[TNE ] = &distributions[BSW *numberOfLBnodes];
+      D.f[TSW ] = &distributions[BNE *numberOfLBnodes];
+      D.f[TSE ] = &distributions[BNW *numberOfLBnodes];
+      D.f[TNW ] = &distributions[BSE *numberOfLBnodes];
+      D.f[BNE ] = &distributions[TSW *numberOfLBnodes];
+      D.f[BSW ] = &distributions[TNE *numberOfLBnodes];
+      D.f[BSE ] = &distributions[TNW *numberOfLBnodes];
+      D.f[BNW ] = &distributions[TSE *numberOfLBnodes];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -99,7 +99,7 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfNodes)
+   if(k < numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -107,35 +107,35 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &subgridDistances[E   * numberOfBCnodes];
+      q_dirW   = &subgridDistances[W   * numberOfBCnodes];
+      q_dirN   = &subgridDistances[N   * numberOfBCnodes];
+      q_dirS   = &subgridDistances[S   * numberOfBCnodes];
+      q_dirT   = &subgridDistances[T   * numberOfBCnodes];
+      q_dirB   = &subgridDistances[B   * numberOfBCnodes];
+      q_dirNE  = &subgridDistances[NE  * numberOfBCnodes];
+      q_dirSW  = &subgridDistances[SW  * numberOfBCnodes];
+      q_dirSE  = &subgridDistances[SE  * numberOfBCnodes];
+      q_dirNW  = &subgridDistances[NW  * numberOfBCnodes];
+      q_dirTE  = &subgridDistances[TE  * numberOfBCnodes];
+      q_dirBW  = &subgridDistances[BW  * numberOfBCnodes];
+      q_dirBE  = &subgridDistances[BE  * numberOfBCnodes];
+      q_dirTW  = &subgridDistances[TW  * numberOfBCnodes];
+      q_dirTN  = &subgridDistances[TN  * numberOfBCnodes];
+      q_dirBS  = &subgridDistances[BS  * numberOfBCnodes];
+      q_dirBN  = &subgridDistances[BN  * numberOfBCnodes];
+      q_dirTS  = &subgridDistances[TS  * numberOfBCnodes];
+      q_dirTNE = &subgridDistances[TNE * numberOfBCnodes];
+      q_dirTSW = &subgridDistances[TSW * numberOfBCnodes];
+      q_dirTSE = &subgridDistances[TSE * numberOfBCnodes];
+      q_dirTNW = &subgridDistances[TNW * numberOfBCnodes];
+      q_dirBNE = &subgridDistances[BNE * numberOfBCnodes];
+      q_dirBSW = &subgridDistances[BSW * numberOfBCnodes];
+      q_dirBSE = &subgridDistances[BSE * numberOfBCnodes];
+      q_dirBNW = &subgridDistances[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
-      unsigned int numberOfNodesK  = k_Q[k];
+      unsigned int numberOfNodesK  = subgridDistanceIndices[k];
       unsigned int kzero= numberOfNodesK;
       unsigned int ke   = numberOfNodesK;
       unsigned int kw   = neighborX[numberOfNodesK];
@@ -167,37 +167,37 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
             f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q, m3;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 				f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -217,67 +217,67 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &distributions[E   *numberOfLBnodes];
+         D.f[W   ] = &distributions[W   *numberOfLBnodes];
+         D.f[N   ] = &distributions[N   *numberOfLBnodes];
+         D.f[S   ] = &distributions[S   *numberOfLBnodes];
+         D.f[T   ] = &distributions[T   *numberOfLBnodes];
+         D.f[B   ] = &distributions[B   *numberOfLBnodes];
+         D.f[NE  ] = &distributions[NE  *numberOfLBnodes];
+         D.f[SW  ] = &distributions[SW  *numberOfLBnodes];
+         D.f[SE  ] = &distributions[SE  *numberOfLBnodes];
+         D.f[NW  ] = &distributions[NW  *numberOfLBnodes];
+         D.f[TE  ] = &distributions[TE  *numberOfLBnodes];
+         D.f[BW  ] = &distributions[BW  *numberOfLBnodes];
+         D.f[BE  ] = &distributions[BE  *numberOfLBnodes];
+         D.f[TW  ] = &distributions[TW  *numberOfLBnodes];
+         D.f[TN  ] = &distributions[TN  *numberOfLBnodes];
+         D.f[BS  ] = &distributions[BS  *numberOfLBnodes];
+         D.f[BN  ] = &distributions[BN  *numberOfLBnodes];
+         D.f[TS  ] = &distributions[TS  *numberOfLBnodes];
+         D.f[REST] = &distributions[REST*numberOfLBnodes];
+         D.f[TNE ] = &distributions[TNE *numberOfLBnodes];
+         D.f[TSW ] = &distributions[TSW *numberOfLBnodes];
+         D.f[TSE ] = &distributions[TSE *numberOfLBnodes];
+         D.f[TNW ] = &distributions[TNW *numberOfLBnodes];
+         D.f[BNE ] = &distributions[BNE *numberOfLBnodes];
+         D.f[BSW ] = &distributions[BSW *numberOfLBnodes];
+         D.f[BSE ] = &distributions[BSE *numberOfLBnodes];
+         D.f[BNW ] = &distributions[BNW *numberOfLBnodes];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &distributions[E   *numberOfLBnodes];
+         D.f[E   ] = &distributions[W   *numberOfLBnodes];
+         D.f[S   ] = &distributions[N   *numberOfLBnodes];
+         D.f[N   ] = &distributions[S   *numberOfLBnodes];
+         D.f[B   ] = &distributions[T   *numberOfLBnodes];
+         D.f[T   ] = &distributions[B   *numberOfLBnodes];
+         D.f[SW  ] = &distributions[NE  *numberOfLBnodes];
+         D.f[NE  ] = &distributions[SW  *numberOfLBnodes];
+         D.f[NW  ] = &distributions[SE  *numberOfLBnodes];
+         D.f[SE  ] = &distributions[NW  *numberOfLBnodes];
+         D.f[BW  ] = &distributions[TE  *numberOfLBnodes];
+         D.f[TE  ] = &distributions[BW  *numberOfLBnodes];
+         D.f[TW  ] = &distributions[BE  *numberOfLBnodes];
+         D.f[BE  ] = &distributions[TW  *numberOfLBnodes];
+         D.f[BS  ] = &distributions[TN  *numberOfLBnodes];
+         D.f[TN  ] = &distributions[BS  *numberOfLBnodes];
+         D.f[TS  ] = &distributions[BN  *numberOfLBnodes];
+         D.f[BN  ] = &distributions[TS  *numberOfLBnodes];
+         D.f[REST] = &distributions[REST*numberOfLBnodes];
+         D.f[TNE ] = &distributions[BSW *numberOfLBnodes];
+         D.f[TSW ] = &distributions[BNE *numberOfLBnodes];
+         D.f[TSE ] = &distributions[BNW *numberOfLBnodes];
+         D.f[TNW ] = &distributions[BSE *numberOfLBnodes];
+         D.f[BNE ] = &distributions[TSW *numberOfLBnodes];
+         D.f[BSW ] = &distributions[TNE *numberOfLBnodes];
+         D.f[BSE ] = &distributions[TNW *numberOfLBnodes];
+         D.f[BNW ] = &distributions[TSE *numberOfLBnodes];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-         //(D.f[dirZERO])[k]=c1o10;
+         //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  
 	  
@@ -288,8 +288,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_E - f_W - c2o1 * drho * c2o27 * (c3o1*( vx1        ));
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W-m3+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirW])[kw]=zero;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W-m3+(f_E+f_W-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_E+f_W))/(c1o1+q)+(m3*c1o2);
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
@@ -297,8 +297,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_W - f_E - c2o1 * drho * c2o27 * (c3o1*(-vx1        ));
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E-m3+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirE])[ke]=zero;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E-m3+(f_W+f_E-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_W+f_E))/(c1o1+q)+(m3*c1o2);
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
@@ -306,8 +306,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_N - f_S - c2o1 * drho * c2o27 * (c3o1*( vx2        ));
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S-m3+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirS])[ks]=zero;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S-m3+(f_N+f_S-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_N+f_S))/(c1o1+q)+(m3*c1o2);
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
@@ -315,8 +315,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_S - f_N - c2o1 * drho * c2o27 * (c3o1*(   -vx2     ));
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N-m3+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirN])[kn]=zero;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N-m3+(f_S+f_N-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_S+f_N))/(c1o1+q)+(m3*c1o2);
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
@@ -324,8 +324,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_T - f_B - c2o1 * drho * c2o27 * (c3o1*(         vx3));
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B-m3+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirB])[kb]=one;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B-m3+(f_T+f_B-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_T+f_B))/(c1o1+q)+(m3*c1o2);
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
@@ -333,8 +333,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_B - f_T - c2o1 * drho * c2o27 * (c3o1*(        -vx3));
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T-m3+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirT])[kt]=zero;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T-m3+(f_B+f_T-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_B+f_T))/(c1o1+q)+(m3*c1o2);
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
@@ -342,8 +342,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_NE - f_SW - c2o1 * drho * c1o54 * (c3o1*( vx1+vx2    ));
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW-m3+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirSW])[ksw]=zero;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW-m3+(f_NE+f_SW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_NE+f_SW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
@@ -351,8 +351,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_SW - f_NE - c2o1 * drho * c1o54 * (c3o1*(-vx1-vx2    ));
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE-m3+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirNE])[kne]=zero;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE-m3+(f_SW+f_NE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_SW+f_NE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
@@ -360,8 +360,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_SE - f_NW - c2o1 * drho * c1o54 * (c3o1*( vx1-vx2    ));
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW-m3+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirNW])[knw]=zero;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW-m3+(f_SE+f_NW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_SE+f_NW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
@@ -369,8 +369,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_NW - f_SE - c2o1 * drho * c1o54 * (c3o1*(-vx1+vx2    ));
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE-m3+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirSE])[kse]=zero;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE-m3+(f_NW+f_SE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_NW+f_SE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
@@ -378,8 +378,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TE - f_BW - c2o1 * drho * c1o54 * (c3o1*( vx1    +vx3));
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW-m3+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBW])[kbw]=zero;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW-m3+(f_TE+f_BW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TE+f_BW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
@@ -387,8 +387,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BW - f_TE - c2o1 * drho * c1o54 * (c3o1*(-vx1    -vx3));
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE-m3+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTE])[kte]=zero;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE-m3+(f_BW+f_TE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BW+f_TE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
@@ -396,8 +396,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BE - f_TW - c2o1 * drho * c1o54 * (c3o1*( vx1    -vx3));
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW-m3+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTW])[ktw]=zero;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW-m3+(f_BE+f_TW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BE+f_TW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
@@ -405,8 +405,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TW - f_BE - c2o1 * drho * c1o54 * (c3o1*(-vx1    +vx3));
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE-m3+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBE])[kbe]=zero;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE-m3+(f_TW+f_BE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TW+f_BE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
@@ -414,8 +414,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TN - f_BS - c2o1 * drho * c1o54 * (c3o1*(     vx2+vx3));
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS-m3+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBS])[kbs]=zero;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS-m3+(f_TN+f_BS-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TN+f_BS))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
@@ -423,8 +423,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BS - f_TN - c2o1 * drho * c1o54 * (c3o1*(    -vx2-vx3));
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN-m3+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTN])[ktn]=zero;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN-m3+(f_BS+f_TN-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BS+f_TN))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
@@ -432,8 +432,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BN - f_TS - c2o1 * drho * c1o54 * (c3o1*(     vx2-vx3));
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS-m3+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTS])[kts]=zero;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS-m3+(f_BN+f_TS-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BN+f_TS))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
@@ -441,8 +441,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TS - f_BN - c2o1 * drho * c1o54 * (c3o1*(    -vx2+vx3));
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN-m3+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBN])[kbn]=zero;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN-m3+(f_TS+f_BN-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TS+f_BN))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
@@ -450,8 +450,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TNE - f_BSW - c2o1 * drho * c1o216 * (c3o1*( vx1+vx2+vx3));
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW-m3+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBSW])[kbsw]=zero;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW-m3+(f_TNE+f_BSW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
@@ -459,8 +459,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BSW - f_TNE - c2o1 * drho * c1o216 * (c3o1*(-vx1-vx2-vx3));
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE-m3+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTNE])[ktne]=zero;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE-m3+(f_BSW+f_TNE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
@@ -468,8 +468,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BNE - f_TSW - c2o1 * drho * c1o216 * (c3o1*( vx1+vx2-vx3));
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW-m3+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTSW])[ktsw]=zero;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW-m3+(f_BNE+f_TSW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
@@ -477,8 +477,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TSW - f_BNE - c2o1 * drho * c1o216 * (c3o1*(-vx1-vx2+vx3));
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE-m3+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBNE])[kbne]=zero;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE-m3+(f_TSW+f_BNE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
@@ -486,8 +486,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TSE - f_BNW - c2o1 * drho * c1o216 * (c3o1*( vx1-vx2+vx3));
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW-m3+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBNW])[kbnw]=zero;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW-m3+(f_TSE+f_BNW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
@@ -495,8 +495,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BNW - f_TSE - c2o1 * drho * c1o216 * (c3o1*(-vx1+vx2-vx3));
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE-m3+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTSE])[ktse]=zero;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE-m3+(f_BNW+f_TSE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
@@ -504,8 +504,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_BSE - f_TNW - c2o1 * drho * c1o216 * (c3o1*( vx1-vx2-vx3));
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW-m3+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirTNW])[ktnw]=zero;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW-m3+(f_BSE+f_TNW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q)+(m3*c1o2);
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
@@ -513,8 +513,8 @@ extern "C" __global__ void QDevice3rdMomentsComp27(  int inx,
       {
 		 m3 = f_TNW - f_BSE - c2o1 * drho * c1o216 * (c3o1*(-vx1+vx2+vx3));
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE-m3+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q)+(m3*c1o2);
-         //(D.f[dirBSE])[kbse]=zero;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE-m3+(f_TNW+f_BSE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q)+(m3*c1o2);
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -564,7 +564,7 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
 												 real* DD, 
 												 int* k_Q, 
 												 real* QQ,
-												 unsigned int sizeQ,
+												 unsigned int  numberOfBCnodes,
 												 int numberOfNodes, 
 												 real om1, 
 												 unsigned int* neighborX,
@@ -576,63 +576,63 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -653,32 +653,32 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int numberOfNodesK  = k_Q[k];
@@ -713,37 +713,37 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
             f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_E   = (D.f[dirE   ])[ke   ];
-      f_W   = (D.f[dirW   ])[kw   ];
-      f_N   = (D.f[dirN   ])[kn   ];
-      f_S   = (D.f[dirS   ])[ks   ];
-      f_T   = (D.f[dirT   ])[kt   ];
-      f_B   = (D.f[dirB   ])[kb   ];
-      f_NE  = (D.f[dirNE  ])[kne  ];
-      f_SW  = (D.f[dirSW  ])[ksw  ];
-      f_SE  = (D.f[dirSE  ])[kse  ];
-      f_NW  = (D.f[dirNW  ])[knw  ];
-      f_TE  = (D.f[dirTE  ])[kte  ];
-      f_BW  = (D.f[dirBW  ])[kbw  ];
-      f_BE  = (D.f[dirBE  ])[kbe  ];
-      f_TW  = (D.f[dirTW  ])[ktw  ];
-      f_TN  = (D.f[dirTN  ])[ktn  ];
-      f_BS  = (D.f[dirBS  ])[kbs  ];
-      f_BN  = (D.f[dirBN  ])[kbn  ];
-      f_TS  = (D.f[dirTS  ])[kts  ];
-      f_TNE = (D.f[dirTNE ])[ktne ];
-      f_TSW = (D.f[dirTSW ])[ktsw ];
-      f_TSE = (D.f[dirTSE ])[ktse ];
-      f_TNW = (D.f[dirTNW ])[ktnw ];
-      f_BNE = (D.f[dirBNE ])[kbne ];
-      f_BSW = (D.f[dirBSW ])[kbsw ];
-      f_BSE = (D.f[dirBSE ])[kbse ];
-      f_BNW = (D.f[dirBNW ])[kbnw ];
+      f_E   = (D.f[E   ])[ke   ];
+      f_W   = (D.f[W   ])[kw   ];
+      f_N   = (D.f[N   ])[kn   ];
+      f_S   = (D.f[S   ])[ks   ];
+      f_T   = (D.f[T   ])[kt   ];
+      f_B   = (D.f[B   ])[kb   ];
+      f_NE  = (D.f[NE  ])[kne  ];
+      f_SW  = (D.f[SW  ])[ksw  ];
+      f_SE  = (D.f[SE  ])[kse  ];
+      f_NW  = (D.f[NW  ])[knw  ];
+      f_TE  = (D.f[TE  ])[kte  ];
+      f_BW  = (D.f[BW  ])[kbw  ];
+      f_BE  = (D.f[BE  ])[kbe  ];
+      f_TW  = (D.f[TW  ])[ktw  ];
+      f_TN  = (D.f[TN  ])[ktn  ];
+      f_BS  = (D.f[BS  ])[kbs  ];
+      f_BN  = (D.f[BN  ])[kbn  ];
+      f_TS  = (D.f[TS  ])[kts  ];
+      f_TNE = (D.f[TNE ])[ktne ];
+      f_TSW = (D.f[TSW ])[ktsw ];
+      f_TSE = (D.f[TSE ])[ktse ];
+      f_TNW = (D.f[TNW ])[ktnw ];
+      f_BNE = (D.f[BNE ])[kbne ];
+      f_BSW = (D.f[BSW ])[kbsw ];
+      f_BSE = (D.f[BSE ])[kbse ];
+      f_BNW = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 				f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -763,67 +763,67 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-         //(D.f[dirZERO])[k]=c1o10;
+         //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real VeloX = c0o1;
       real VeloY = c0o1;
@@ -837,182 +837,182 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirW])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
+         (D.f[W])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirE])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
+         (D.f[E])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirS])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
+         (D.f[S])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirN])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
+         (D.f[N])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirB])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
+         (D.f[B])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirT])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
+         (D.f[T])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirSW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
+         (D.f[SW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirNE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
+         (D.f[NE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirNW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
+         (D.f[NW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirSE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
+         (D.f[SE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
+         (D.f[BW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
+         (D.f[TE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
+         (D.f[TW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
+         (D.f[BE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
       }
    }
 }
@@ -1057,13 +1057,11 @@ extern "C" __global__ void QDeviceIncompHighNu27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QDeviceCompHighNu27(  int inx,
-												 int iny,
+extern "C" __global__ void QDeviceCompHighNu27(
 												 real* DD, 
 												 int* k_Q, 
 												 real* QQ,
-												 unsigned int sizeQ,
-												 int numberOfNodes, 
+												 unsigned int numberOfBCnodes, 
 												 real om1, 
 												 unsigned int* neighborX,
 												 unsigned int* neighborY,
@@ -1074,63 +1072,63 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1143,7 +1141,7 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfNodes)
+   if(k<numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -1151,32 +1149,32 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int numberOfNodesK  = k_Q[k];
@@ -1211,63 +1209,63 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
             f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_E   = (D.f[dirE   ])[ke   ];
-      f_W   = (D.f[dirW   ])[kw   ];
-      f_N   = (D.f[dirN   ])[kn   ];
-      f_S   = (D.f[dirS   ])[ks   ];
-      f_T   = (D.f[dirT   ])[kt   ];
-      f_B   = (D.f[dirB   ])[kb   ];
-      f_NE  = (D.f[dirNE  ])[kne  ];
-      f_SW  = (D.f[dirSW  ])[ksw  ];
-      f_SE  = (D.f[dirSE  ])[kse  ];
-      f_NW  = (D.f[dirNW  ])[knw  ];
-      f_TE  = (D.f[dirTE  ])[kte  ];
-      f_BW  = (D.f[dirBW  ])[kbw  ];
-      f_BE  = (D.f[dirBE  ])[kbe  ];
-      f_TW  = (D.f[dirTW  ])[ktw  ];
-      f_TN  = (D.f[dirTN  ])[ktn  ];
-      f_BS  = (D.f[dirBS  ])[kbs  ];
-      f_BN  = (D.f[dirBN  ])[kbn  ];
-      f_TS  = (D.f[dirTS  ])[kts  ];
-      f_TNE = (D.f[dirTNE ])[ktne ];
-      f_TSW = (D.f[dirTSW ])[ktsw ];
-      f_TSE = (D.f[dirTSE ])[ktse ];
-      f_TNW = (D.f[dirTNW ])[ktnw ];
-      f_BNE = (D.f[dirBNE ])[kbne ];
-      f_BSW = (D.f[dirBSW ])[kbsw ];
-      f_BSE = (D.f[dirBSE ])[kbse ];
-      f_BNW = (D.f[dirBNW ])[kbnw ];
-      //f_W    = (D.f[dirE   ])[ke   ];
-      //f_E    = (D.f[dirW   ])[kw   ];
-      //f_S    = (D.f[dirN   ])[kn   ];
-      //f_N    = (D.f[dirS   ])[ks   ];
-      //f_B    = (D.f[dirT   ])[kt   ];
-      //f_T    = (D.f[dirB   ])[kb   ];
-      //f_SW   = (D.f[dirNE  ])[kne  ];
-      //f_NE   = (D.f[dirSW  ])[ksw  ];
-      //f_NW   = (D.f[dirSE  ])[kse  ];
-      //f_SE   = (D.f[dirNW  ])[knw  ];
-      //f_BW   = (D.f[dirTE  ])[kte  ];
-      //f_TE   = (D.f[dirBW  ])[kbw  ];
-      //f_TW   = (D.f[dirBE  ])[kbe  ];
-      //f_BE   = (D.f[dirTW  ])[ktw  ];
-      //f_BS   = (D.f[dirTN  ])[ktn  ];
-      //f_TN   = (D.f[dirBS  ])[kbs  ];
-      //f_TS   = (D.f[dirBN  ])[kbn  ];
-      //f_BN   = (D.f[dirTS  ])[kts  ];
-      //f_BSW  = (D.f[dirTNE ])[ktne ];
-      //f_BNE  = (D.f[dirTSW ])[ktsw ];
-      //f_BNW  = (D.f[dirTSE ])[ktse ];
-      //f_BSE  = (D.f[dirTNW ])[ktnw ];
-      //f_TSW  = (D.f[dirBNE ])[kbne ];
-      //f_TNE  = (D.f[dirBSW ])[kbsw ];
-      //f_TNW  = (D.f[dirBSE ])[kbse ];
-      //f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_E   = (D.f[E   ])[ke   ];
+      f_W   = (D.f[W   ])[kw   ];
+      f_N   = (D.f[N   ])[kn   ];
+      f_S   = (D.f[S   ])[ks   ];
+      f_T   = (D.f[T   ])[kt   ];
+      f_B   = (D.f[B   ])[kb   ];
+      f_NE  = (D.f[NE  ])[kne  ];
+      f_SW  = (D.f[SW  ])[ksw  ];
+      f_SE  = (D.f[SE  ])[kse  ];
+      f_NW  = (D.f[NW  ])[knw  ];
+      f_TE  = (D.f[TE  ])[kte  ];
+      f_BW  = (D.f[BW  ])[kbw  ];
+      f_BE  = (D.f[BE  ])[kbe  ];
+      f_TW  = (D.f[TW  ])[ktw  ];
+      f_TN  = (D.f[TN  ])[ktn  ];
+      f_BS  = (D.f[BS  ])[kbs  ];
+      f_BN  = (D.f[BN  ])[kbn  ];
+      f_TS  = (D.f[TS  ])[kts  ];
+      f_TNE = (D.f[TNE ])[ktne ];
+      f_TSW = (D.f[TSW ])[ktsw ];
+      f_TSE = (D.f[TSE ])[ktse ];
+      f_TNW = (D.f[TNW ])[ktnw ];
+      f_BNE = (D.f[BNE ])[kbne ];
+      f_BSW = (D.f[BSW ])[kbsw ];
+      f_BSE = (D.f[BSE ])[kbse ];
+      f_BNW = (D.f[BNW ])[kbnw ];
+      //f_W    = (D.f[E   ])[ke   ];
+      //f_E    = (D.f[W   ])[kw   ];
+      //f_S    = (D.f[N   ])[kn   ];
+      //f_N    = (D.f[S   ])[ks   ];
+      //f_B    = (D.f[T   ])[kt   ];
+      //f_T    = (D.f[B   ])[kb   ];
+      //f_SW   = (D.f[NE  ])[kne  ];
+      //f_NE   = (D.f[SW  ])[ksw  ];
+      //f_NW   = (D.f[SE  ])[kse  ];
+      //f_SE   = (D.f[NW  ])[knw  ];
+      //f_BW   = (D.f[TE  ])[kte  ];
+      //f_TE   = (D.f[BW  ])[kbw  ];
+      //f_TW   = (D.f[BE  ])[kbe  ];
+      //f_BE   = (D.f[TW  ])[ktw  ];
+      //f_BS   = (D.f[TN  ])[ktn  ];
+      //f_TN   = (D.f[BS  ])[kbs  ];
+      //f_TS   = (D.f[BN  ])[kbn  ];
+      //f_BN   = (D.f[TS  ])[kts  ];
+      //f_BSW  = (D.f[TNE ])[ktne ];
+      //f_BNE  = (D.f[TSW ])[ktsw ];
+      //f_BNW  = (D.f[TSE ])[ktse ];
+      //f_BSE  = (D.f[TNW ])[ktnw ];
+      //f_TSW  = (D.f[BNE ])[kbne ];
+      //f_TNE  = (D.f[BSW ])[kbsw ];
+      //f_TNW  = (D.f[BSE ])[kbse ];
+      //f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 				f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -1287,67 +1285,67 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-         //(D.f[dirZERO])[k]=c1o10;
+         //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real VeloX = c0o1;
       real VeloY = c0o1;
@@ -1361,234 +1359,234 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
-         //(D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirW])[kw]=zero;
+         (D.f[W])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
+         //(D.f[W])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q) - c2over27 * drho;
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
-         //(D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirE])[ke]=zero;
+         (D.f[E])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
+         //(D.f[E])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q) - c2over27 * drho;
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
-         //(D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirS])[ks]=zero;
+         (D.f[S])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
+         //(D.f[S])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q) - c2over27 * drho;
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
-         //(D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirN])[kn]=zero;
+         (D.f[N])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
+         //(D.f[N])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q) - c2over27 * drho;
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
-         //(D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirB])[kb]=one;
+         (D.f[B])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
+         //(D.f[B])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q) - c2over27 * drho;
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
-         //(D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirT])[kt]=zero;
+         (D.f[T])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
+         //(D.f[T])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q) - c2over27 * drho;
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirSW])[ksw]=zero;
+         (D.f[SW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[SW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirNE])[kne]=zero;
+         (D.f[NE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[NE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirNW])[knw]=zero;
+         (D.f[NW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[NW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirSE])[kse]=zero;
+         (D.f[SE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[SE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBW])[kbw]=zero;
+         (D.f[BW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[BW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTE])[kte]=zero;
+         (D.f[TE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[TE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTW])[ktw]=zero;
+         (D.f[TW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[TW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBE])[kbe]=zero;
+         (D.f[BE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[BE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBS])[kbs]=zero;
+         (D.f[BS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTN])[ktn]=zero;
+         (D.f[TN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTS])[kts]=zero;
+         (D.f[TS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBN])[kbn]=zero;
+         (D.f[BN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBSW])[kbsw]=zero;
+         (D.f[BSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTNE])[ktne]=zero;
+         (D.f[TNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTSW])[ktsw]=zero;
+         (D.f[TSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBNE])[kbne]=zero;
+         (D.f[BNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBNW])[kbnw]=zero;
+         (D.f[BNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTSE])[ktse]=zero;
+         (D.f[TSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTNW])[ktnw]=zero;
+         (D.f[TNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBSE])[kbse]=zero;
+         (D.f[BSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -1633,146 +1631,69 @@ extern "C" __global__ void QDeviceCompHighNu27(  int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QDeviceComp27(int inx,
-										 int iny,
-										 real* DD, 
-										 int* k_Q, 
-										 real* QQ,
-										 unsigned int sizeQ,
-										 int numberOfNodes, 
-										 real om1, 
+extern "C" __global__ void QDeviceComp27(
+										 real* distributions, 
+										 int* subgridDistanceIndices, 
+										 real* subgridDistances,
+										 unsigned int numberOfBCnodes, 
+										 real omega, 
 										 unsigned int* neighborX,
 										 unsigned int* neighborY,
 										 unsigned int* neighborZ,
-										 unsigned int size_Mat, 
+										 unsigned int numberOfLBnodes, 
 										 bool isEvenTimestep)
 {
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-   } 
-   else
-   {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-   }
+   //////////////////////////////////////////////////////////////////////////
+   //! The velocity boundary condition is executed in the following steps
+   //!
    ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned  x = threadIdx.x;  // global x-index 
+   const unsigned  y = blockIdx.x;   // global y-index 
+   const unsigned  z = blockIdx.y;   // global z-index 
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfNodes)
+   if(k < numberOfBCnodes)
    {
+      //////////////////////////////////////////////////////////////////////////
+      //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+      //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+      //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
-            *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-            *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-            *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-            *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+      
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int numberOfNodesK  = k_Q[k];
-      unsigned int kzero= numberOfNodesK;
-      unsigned int ke   = numberOfNodesK;
-      unsigned int kw   = neighborX[numberOfNodesK];
-      unsigned int kn   = numberOfNodesK;
-      unsigned int ks   = neighborY[numberOfNodesK];
-      unsigned int kt   = numberOfNodesK;
-      unsigned int kb   = neighborZ[numberOfNodesK];
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[k];
+      unsigned int kzero= indexOfBCnode;
+      unsigned int ke   = indexOfBCnode;
+      unsigned int kw   = neighborX[indexOfBCnode];
+      unsigned int kn   = indexOfBCnode;
+      unsigned int ks   = neighborY[indexOfBCnode];
+      unsigned int kt   = indexOfBCnode;
+      unsigned int kb   = neighborZ[indexOfBCnode];
       unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = numberOfNodesK;
+      unsigned int kne  = indexOfBCnode;
       unsigned int kse  = ks;
       unsigned int knw  = kw;
       unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = numberOfNodesK;
+      unsigned int kte  = indexOfBCnode;
       unsigned int kbe  = kb;
       unsigned int ktw  = kw;
       unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = numberOfNodesK;
+      unsigned int ktn  = indexOfBCnode;
       unsigned int kbn  = kb;
       unsigned int kts  = ks;
       unsigned int ktse = ks;
@@ -1781,334 +1702,275 @@ extern "C" __global__ void QDeviceComp27(int inx,
       unsigned int kbse = kbs;
       unsigned int ktsw = ksw;
       unsigned int kbne = kb;
-      unsigned int ktne = numberOfNodesK;
+      unsigned int ktne = indexOfBCnode;
       unsigned int kbsw = neighborZ[ksw];
+
       ////////////////////////////////////////////////////////////////////////////////
-      real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-            f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[E   ])[ke   ];
+      real f_E    = (dist.f[W   ])[kw   ];
+      real f_S    = (dist.f[N   ])[kn   ];
+      real f_N    = (dist.f[S   ])[ks   ];
+      real f_B    = (dist.f[T   ])[kt   ];
+      real f_T    = (dist.f[B   ])[kb   ];
+      real f_SW   = (dist.f[NE  ])[kne  ];
+      real f_NE   = (dist.f[SW  ])[ksw  ];
+      real f_NW   = (dist.f[SE  ])[kse  ];
+      real f_SE   = (dist.f[NW  ])[knw  ];
+      real f_BW   = (dist.f[TE  ])[kte  ];
+      real f_TE   = (dist.f[BW  ])[kbw  ];
+      real f_TW   = (dist.f[BE  ])[kbe  ];
+      real f_BE   = (dist.f[TW  ])[ktw  ];
+      real f_BS   = (dist.f[TN  ])[ktn  ];
+      real f_TN   = (dist.f[BS  ])[kbs  ];
+      real f_TS   = (dist.f[BN  ])[kbn  ];
+      real f_BN   = (dist.f[TS  ])[kts  ];
+      real f_BSW  = (dist.f[TNE ])[ktne ];
+      real f_BNE  = (dist.f[TSW ])[ktsw ];
+      real f_BNW  = (dist.f[TSE ])[ktse ];
+      real f_BSE  = (dist.f[TNW ])[ktnw ];
+      real f_TSW  = (dist.f[BNE ])[kbne ];
+      real f_TNE  = (dist.f[BSW ])[kbsw ];
+      real f_TNW  = (dist.f[BSE ])[kbse ];
+      real f_TSE  = (dist.f[BNW ])[kbnw ];
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
-      real vx1, vx2, vx3, drho, feq, q;
-      drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
-				f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      //! - Calculate macroscopic quantities
+      //!
+      real drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
+                  f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[REST])[kzero]); 
 
-      vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
-                (f_E - f_W)) / (c1o1 + drho); 
+      real vx1  = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                   ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
+                   (f_E - f_W)) / (c1o1 + drho);          
 
+      real vx2  = ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                   ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
+                   (f_N - f_S)) / (c1o1 + drho); 
 
-      vx2    =   ((-(f_TSE - f_BNW) + (f_TNW - f_BSE))  + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                  ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
-                  (f_N - f_S)) / (c1o1 + drho); 
+      real vx3  = (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
+                   (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
+                   (f_T - f_B)) / (c1o1 + drho); 
 
-      vx3    =    (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
-                  (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
-                  (f_T - f_B)) / (c1o1 + drho); 
+      real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho);
 
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - change the pointer to write the results in the correct array
+      //!
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
 
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-         //(D.f[dirZERO])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-	  
-	  //ToDo anders klammern !!!!!!
-	  
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
+       ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      real feq, q, velocityLB;
+      q = (subgridD.q[E])[k];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
       {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q);
-         //(D.f[dirW])[kw]=zero;
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[W])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega);
       }
 
-      q = q_dirW[k];
+      q = (subgridD.q[W])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q);
-         //(D.f[dirE])[ke]=zero;
+         velocityLB = -vx1;
+         
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[E])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega);
       }
 
-      q = q_dirN[k];
+      q = (subgridD.q[N])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q);
-         //(D.f[dirS])[ks]=zero;
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[S])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega);
       }
 
-      q = q_dirS[k];
+      q = (subgridD.q[S])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q);
-         //(D.f[dirN])[kn]=zero;
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[N])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega);
       }
 
-      q = q_dirT[k];
+      q = (subgridD.q[T])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q);
-         //(D.f[dirB])[kb]=one;
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[B])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega);
       }
 
-      q = q_dirB[k];
+      q = (subgridD.q[B])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q);
-         //(D.f[dirT])[kt]=zero;
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[T])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega);
       }
 
-      q = q_dirNE[k];
+      q = (subgridD.q[NE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q);
-         //(D.f[dirSW])[ksw]=zero;
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[SW])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega);
       }
 
-      q = q_dirSW[k];
+      q = (subgridD.q[SW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q);
-         //(D.f[dirNE])[kne]=zero;
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[NE])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega);
       }
 
-      q = q_dirSE[k];
+      q = (subgridD.q[SE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q);
-         //(D.f[dirNW])[knw]=zero;
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[NW])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega);
       }
 
-      q = q_dirNW[k];
+      q = (subgridD.q[NW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q);
-         //(D.f[dirSE])[kse]=zero;
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[SE])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega);
       }
 
-      q = q_dirTE[k];
+      q = (subgridD.q[TE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q);
-         //(D.f[dirBW])[kbw]=zero;
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BW])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega);
       }
 
-      q = q_dirBW[k];
+      q = (subgridD.q[BW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q);
-         //(D.f[dirTE])[kte]=zero;
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TE])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega);
       }
 
-      q = q_dirBE[k];
+      q = (subgridD.q[BE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q);
-         //(D.f[dirTW])[ktw]=zero;
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TW])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega);
       }
 
-      q = q_dirTW[k];
+      q = (subgridD.q[TW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q);
-         //(D.f[dirBE])[kbe]=zero;
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BE])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega);
       }
 
-      q = q_dirTN[k];
+      q = (subgridD.q[TN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q);
-         //(D.f[dirBS])[kbs]=zero;
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BS])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega);
       }
 
-      q = q_dirBS[k];
+      q = (subgridD.q[BS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q);
-         //(D.f[dirTN])[ktn]=zero;
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TN])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega);
       }
 
-      q = q_dirBN[k];
+      q = (subgridD.q[BN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q);
-         //(D.f[dirTS])[kts]=zero;
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TS])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega);
       }
 
-      q = q_dirTS[k];
+      q = (subgridD.q[TS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q);
-         //(D.f[dirBN])[kbn]=zero;
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BN])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega);
       }
 
-      q = q_dirTNE[k];
+      q = (subgridD.q[TNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q);
-         //(D.f[dirBSW])[kbsw]=zero;
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BSW])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega);
       }
 
-      q = q_dirBSW[k];
+      q = (subgridD.q[BSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q);
-         //(D.f[dirTNE])[ktne]=zero;
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TNE])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega);
       }
 
-      q = q_dirBNE[k];
+      q = (subgridD.q[BNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q);
-         //(D.f[dirTSW])[ktsw]=zero;
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TSW])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega);
       }
 
-      q = q_dirTSW[k];
+      q = (subgridD.q[TSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q);
-         //(D.f[dirBNE])[kbne]=zero;
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BNE])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega);
       }
 
-      q = q_dirTSE[k];
+      q = (subgridD.q[TSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q);
-         //(D.f[dirBNW])[kbnw]=zero;
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BNW])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega);
       }
 
-      q = q_dirBNW[k];
+      q = (subgridD.q[BNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q);
-         //(D.f[dirTSE])[ktse]=zero;
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TSE])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega);
       }
 
-      q = q_dirBSE[k];
+      q = (subgridD.q[BSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q);
-         //(D.f[dirTNW])[ktnw]=zero;
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TNW])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega);
       }
 
-      q = q_dirTNW[k];
+      q = (subgridD.q[TNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q);
-         //(D.f[dirBSE])[kbse]=zero;
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BSE])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega);
       }
    }
 }
@@ -2153,146 +2015,72 @@ extern "C" __global__ void QDeviceComp27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QDevice27(int inx,
-                                     int iny,
-                                     real* DD, 
-                                     int* k_Q, 
-                                     real* QQ,
-                                     unsigned int sizeQ,
-                                     int numberOfNodes, 
-                                     real om1, 
+extern "C" __global__ void QDevice27(real* distributions, 
+                                     int* subgridDistanceIndices, 
+                                     real* subgridDistances,
+                                     unsigned int numberOfBCnodes, 
+                                     real omega, 
                                      unsigned int* neighborX,
                                      unsigned int* neighborY,
                                      unsigned int* neighborZ,
-                                     unsigned int size_Mat, 
+                                     unsigned int numberOfLBnodes, 
                                      bool isEvenTimestep)
 {
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-   } 
-   else
-   {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-   }
+   //////////////////////////////////////////////////////////////////////////
+   //! The no-slip boundary condition is executed in the following steps
+   //!
    ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned  x = threadIdx.x;  // global x-index 
+   const unsigned  y = blockIdx.x;   // global y-index 
+   const unsigned  z = blockIdx.y;   // global z-index 
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfNodes)
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(k < numberOfBCnodes)
    {
+
+      //////////////////////////////////////////////////////////////////////////
+      //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+      //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+      //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
-            *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-            *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-            *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-            *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int numberOfNodesK  = k_Q[k];
-      unsigned int kzero= numberOfNodesK;
-      unsigned int ke   = numberOfNodesK;
-      unsigned int kw   = neighborX[numberOfNodesK];
-      unsigned int kn   = numberOfNodesK;
-      unsigned int ks   = neighborY[numberOfNodesK];
-      unsigned int kt   = numberOfNodesK;
-      unsigned int kb   = neighborZ[numberOfNodesK];
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[k];
+      unsigned int kzero= indexOfBCnode;
+      unsigned int ke   = indexOfBCnode;
+      unsigned int kw   = neighborX[indexOfBCnode];
+      unsigned int kn   = indexOfBCnode;
+      unsigned int ks   = neighborY[indexOfBCnode];
+      unsigned int kt   = indexOfBCnode;
+      unsigned int kb   = neighborZ[indexOfBCnode];
       unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = numberOfNodesK;
+      unsigned int kne  = indexOfBCnode;
       unsigned int kse  = ks;
       unsigned int knw  = kw;
       unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = numberOfNodesK;
+      unsigned int kte  = indexOfBCnode;
       unsigned int kbe  = kb;
       unsigned int ktw  = kw;
       unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = numberOfNodesK;
+      unsigned int ktn  = indexOfBCnode;
       unsigned int kbn  = kb;
       unsigned int kts  = ks;
       unsigned int ktse = ks;
@@ -2301,751 +2089,276 @@ extern "C" __global__ void QDevice27(int inx,
       unsigned int kbse = kbs;
       unsigned int ktsw = ksw;
       unsigned int kbne = kb;
-      unsigned int ktne = numberOfNodesK;
+      unsigned int ktne = indexOfBCnode;
       unsigned int kbsw = neighborZ[ksw];
-      //unsigned int nxny = nx*ny;
-      //unsigned int kzero= numberOfNodesK;
-      //unsigned int ke   = numberOfNodesK;
-      //unsigned int kw   = numberOfNodesK + 1;
-      //unsigned int kn   = numberOfNodesK;
-      //unsigned int ks   = numberOfNodesK + nx;
-      //unsigned int kt   = numberOfNodesK;
-      //unsigned int kb   = numberOfNodesK + nxny;
-      //unsigned int ksw  = numberOfNodesK + nx + 1;
-      //unsigned int kne  = numberOfNodesK;
-      //unsigned int kse  = numberOfNodesK + nx;
-      //unsigned int knw  = numberOfNodesK + 1;
-      //unsigned int kbw  = numberOfNodesK + nxny + 1;
-      //unsigned int kte  = numberOfNodesK;
-      //unsigned int kbe  = numberOfNodesK + nxny;
-      //unsigned int ktw  = numberOfNodesK + 1;
-      //unsigned int kbs  = numberOfNodesK + nxny + nx;
-      //unsigned int ktn  = numberOfNodesK;
-      //unsigned int kbn  = numberOfNodesK + nxny;
-      //unsigned int kts  = numberOfNodesK + nx;
-      //unsigned int ktse = numberOfNodesK + nx;
-      //unsigned int kbnw = numberOfNodesK + nxny + 1;
-      //unsigned int ktnw = numberOfNodesK + 1;
-      //unsigned int kbse = numberOfNodesK + nxny + nx;
-      //unsigned int ktsw = numberOfNodesK + nx + 1;
-      //unsigned int kbne = numberOfNodesK + nxny;
-      //unsigned int ktne = numberOfNodesK;
-      //unsigned int kbsw = numberOfNodesK + nxny + nx + 1;
-      ////////////////////////////////////////////////////////////////////////////////
-      //real vx1, vx2, vx3, drho, feq, q;
-      //drho    =   (D.f[dirE   ])[ke  ]+ (D.f[dirW   ])[kw  ]+ 
-      //            (D.f[dirN   ])[kn  ]+ (D.f[dirS   ])[ks  ]+
-      //            (D.f[dirT   ])[kt  ]+ (D.f[dirB   ])[kb  ]+
-      //            (D.f[dirNE  ])[kne ]+ (D.f[dirSW  ])[ksw ]+
-      //            (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-      //            (D.f[dirTE  ])[kte ]+ (D.f[dirBW  ])[kbw ]+
-      //            (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-      //            (D.f[dirTN  ])[ktn ]+ (D.f[dirBS  ])[kbs ]+
-      //            (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-      //            (D.f[dirZERO])[kzero]+ 
-      //            (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-      //            (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-      //            (D.f[dirBNE ])[kbne]+ (D.f[dirBSW ])[kbsw]+ 
-      //            (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
-
-      //vx1    =    (D.f[dirE   ])[ke  ]- (D.f[dirW   ])[kw  ]+ 
-      //            (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]+
-      //            (D.f[dirSE  ])[kse ]- (D.f[dirNW  ])[knw ]+
-      //            (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]+
-      //            (D.f[dirBE  ])[kbe ]- (D.f[dirTW  ])[ktw ]+
-      //            (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]+ 
-      //            (D.f[dirTSE ])[ktse]- (D.f[dirTNW ])[ktnw]+ 
-      //            (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]+ 
-      //            (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw];
-
-      //vx2    =    (D.f[dirN   ])[kn  ]- (D.f[dirS   ])[ks  ]+
-      //            (D.f[dirNE  ])[kne ]- (D.f[dirSW  ])[ksw ]-
-      //            (D.f[dirSE  ])[kse ]+ (D.f[dirNW  ])[knw ]+
-      //            (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]+
-      //            (D.f[dirBN  ])[kbn ]- (D.f[dirTS  ])[kts ]+
-      //            (D.f[dirTNE ])[ktne]- (D.f[dirTSW ])[ktsw]- 
-      //            (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]+ 
-      //            (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-      //            (D.f[dirBSE ])[kbse]+ (D.f[dirBNW ])[kbnw];
-
-      //vx3    =    (D.f[dirT   ])[kt  ]- (D.f[dirB   ])[kb  ]+
-      //            (D.f[dirTE  ])[kte ]- (D.f[dirBW  ])[kbw ]-
-      //            (D.f[dirBE  ])[kbe ]+ (D.f[dirTW  ])[ktw ]+
-      //            (D.f[dirTN  ])[ktn ]- (D.f[dirBS  ])[kbs ]-
-      //            (D.f[dirBN  ])[kbn ]+ (D.f[dirTS  ])[kts ]+
-      //            (D.f[dirTNE ])[ktne]+ (D.f[dirTSW ])[ktsw]+ 
-      //            (D.f[dirTSE ])[ktse]+ (D.f[dirTNW ])[ktnw]- 
-      //            (D.f[dirBNE ])[kbne]- (D.f[dirBSW ])[kbsw]- 
-      //            (D.f[dirBSE ])[kbse]- (D.f[dirBNW ])[kbnw];
-
-      //real cu_sq=1.5f*(vx1*vx1+vx2*vx2+vx3*vx3);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-            f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[E   ])[ke   ];
+      real f_E    = (dist.f[W   ])[kw   ];
+      real f_S    = (dist.f[N   ])[kn   ];
+      real f_N    = (dist.f[S   ])[ks   ];
+      real f_B    = (dist.f[T   ])[kt   ];
+      real f_T    = (dist.f[B   ])[kb   ];
+      real f_SW   = (dist.f[NE  ])[kne  ];
+      real f_NE   = (dist.f[SW  ])[ksw  ];
+      real f_NW   = (dist.f[SE  ])[kse  ];
+      real f_SE   = (dist.f[NW  ])[knw  ];
+      real f_BW   = (dist.f[TE  ])[kte  ];
+      real f_TE   = (dist.f[BW  ])[kbw  ];
+      real f_TW   = (dist.f[BE  ])[kbe  ];
+      real f_BE   = (dist.f[TW  ])[ktw  ];
+      real f_BS   = (dist.f[TN  ])[ktn  ];
+      real f_TN   = (dist.f[BS  ])[kbs  ];
+      real f_TS   = (dist.f[BN  ])[kbn  ];
+      real f_BN   = (dist.f[TS  ])[kts  ];
+      real f_BSW  = (dist.f[TNE ])[ktne ];
+      real f_BNE  = (dist.f[TSW ])[ktsw ];
+      real f_BNW  = (dist.f[TSE ])[ktse ];
+      real f_BSE  = (dist.f[TNW ])[ktnw ];
+      real f_TSW  = (dist.f[BNE ])[kbne ];
+      real f_TNE  = (dist.f[BSW ])[kbsw ];
+      real f_TNW  = (dist.f[BSE ])[kbse ];
+      real f_TSE  = (dist.f[BNW ])[kbnw ];
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
-      real vx1, vx2, vx3, drho, feq, q;
-      drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
-				f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-				f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      //! - Calculate macroscopic quantities
+      //!
+      real drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
+                  f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[REST])[kzero]); 
 
-      vx1    =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
-                (f_E - f_W); 
+      real vx1  = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                   ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
+                   (f_E - f_W));          
 
+      real vx2  = ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                   ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
+                   (f_N - f_S)); 
 
-      vx2    =   (-(f_TSE - f_BNW) + (f_TNW - f_BSE))  + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                  ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
-                  (f_N - f_S); 
+      real vx3  = (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
+                   (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
+                   (f_T - f_B)); 
 
-      vx3    =    ((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
-                  (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
-                  (f_T - f_B); 
-
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
-
-	  //b�ser lecktest
-	  //q = q_dirE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirW])[kw]=999.f;
-   //   }
-
-   //   q = q_dirW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirE])[ke]=999.f;
-   //   }
-
-   //   q = q_dirN[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirS])[ks]=999.f;
-   //   }
-
-   //   q = q_dirS[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirN])[kn]=999.f;
-   //   }
-
-   //   q = q_dirT[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirB])[kb]=999.f;
-   //   }
-
-   //   q = q_dirB[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirT])[kt]=999.f;
-   //   }
-
-   //   q = q_dirNE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirSW])[ksw]=999.f;
-   //   }
-
-   //   q = q_dirSW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirNE])[kne]=999.f;
-   //   }
-
-   //   q = q_dirSE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirNW])[knw]=999.f;
-   //   }
-
-   //   q = q_dirNW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirSE])[kse]=999.f;
-   //   }
-
-   //   q = q_dirTE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBW])[kbw]=999.f;
-   //   }
-
-   //   q = q_dirBW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTE])[kte]=999.f;
-   //   }
-
-   //   q = q_dirBE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTW])[ktw]=999.f;
-   //   }
-
-   //   q = q_dirTW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBE])[kbe]=999.f;
-   //   }
-
-   //   q = q_dirTN[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBS])[kbs]=999.f;
-   //   }
-
-   //   q = q_dirBS[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTN])[ktn]=999.f;
-   //   }
-
-   //   q = q_dirBN[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTS])[kts]=999.f;
-   //   }
-
-   //   q = q_dirTS[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBN])[kbn]=999.f;
-   //   }
-
-   //   q = q_dirTNE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBSW])[kbsw]=999.f;
-   //   }
-
-   //   q = q_dirBSW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTNE])[ktne]=999.f;
-   //   }
-
-   //   q = q_dirBNE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTSW])[ktsw]=999.f;
-   //   }
-
-   //   q = q_dirTSW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBNE])[kbne]=999.f;
-   //   }
-
-   //   q = q_dirTSE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBNW])[kbnw]=999.f;
-   //   }
-
-   //   q = q_dirBNW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTSE])[ktse]=999.f;
-   //   }
-
-   //   q = q_dirBSE[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirTNW])[ktnw]=999.f;
-   //   }
-
-   //   q = q_dirTNW[k];
-   //   if (q>=zero && q<=one)
-   //   {
-   //      (D.f[dirBSE])[kbse]=999.f;
-   //   }
+      real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-         //(D.f[dirZERO])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  
-	  
-	  //ToDo anders klammern !!!!!!
-	  
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - change the pointer to write the results in the correct array
+      //!
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      //!
+      real feq, q, velocityLB;
+      q = (subgridD.q[E])[k];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
       {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        )-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q);
-         //(D.f[dirW])[kw]=zero;
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[W])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega);
       }
 
-      q = q_dirW[k];
+      q = (subgridD.q[W])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q);
-         //(D.f[dirE])[ke]=zero;
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[E])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega);
       }
 
-      q = q_dirN[k];
+      q = (subgridD.q[N])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q);
-         //(D.f[dirS])[ks]=zero;
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[S])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega);
       }
 
-      q = q_dirS[k];
+      q = (subgridD.q[S])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q);
-         //(D.f[dirN])[kn]=zero;
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[N])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega);
       }
 
-      q = q_dirT[k];
+      q = (subgridD.q[T])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q);
-         //(D.f[dirB])[kb]=one;
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[B])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega);
       }
 
-      q = q_dirB[k];
+      q = (subgridD.q[B])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q);
-         //(D.f[dirT])[kt]=zero;
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         (dist.f[T])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega);
       }
 
-      q = q_dirNE[k];
+      q = (subgridD.q[NE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q);
-         //(D.f[dirSW])[ksw]=zero;
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[SW])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega);
       }
 
-      q = q_dirSW[k];
+      q = (subgridD.q[SW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q);
-         //(D.f[dirNE])[kne]=zero;
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[NE])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega);
       }
 
-      q = q_dirSE[k];
+      q = (subgridD.q[SE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q);
-         //(D.f[dirNW])[knw]=zero;
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[NW])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega);
       }
 
-      q = q_dirNW[k];
+      q = (subgridD.q[NW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q);
-         //(D.f[dirSE])[kse]=zero;
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[SE])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega);
       }
 
-      q = q_dirTE[k];
+      q = (subgridD.q[TE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q);
-         //(D.f[dirBW])[kbw]=zero;
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BW])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega);
       }
 
-      q = q_dirBW[k];
+      q = (subgridD.q[BW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q);
-         //(D.f[dirTE])[kte]=zero;
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TE])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega);
       }
 
-      q = q_dirBE[k];
+      q = (subgridD.q[BE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q);
-         //(D.f[dirTW])[ktw]=zero;
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TW])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega);
       }
 
-      q = q_dirTW[k];
+      q = (subgridD.q[TW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q);
-         //(D.f[dirBE])[kbe]=zero;
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BE])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega);
       }
 
-      q = q_dirTN[k];
+      q = (subgridD.q[TN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q);
-         //(D.f[dirBS])[kbs]=zero;
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BS])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega);
       }
 
-      q = q_dirBS[k];
+      q = (subgridD.q[BS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q);
-         //(D.f[dirTN])[ktn]=zero;
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TN])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega);
       }
 
-      q = q_dirBN[k];
+      q = (subgridD.q[BN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q);
-         //(D.f[dirTS])[kts]=zero;
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[TS])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega);
       }
 
-      q = q_dirTS[k];
+      q = (subgridD.q[TS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q);
-         //(D.f[dirBN])[kbn]=zero;
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         (dist.f[BN])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega);
       }
 
-      q = q_dirTNE[k];
+      q = (subgridD.q[TNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q);
-         //(D.f[dirBSW])[kbsw]=zero;
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BSW])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega);
       }
 
-      q = q_dirBSW[k];
+      q = (subgridD.q[BSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q);
-         //(D.f[dirTNE])[ktne]=zero;
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TNE])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega);
       }
 
-      q = q_dirBNE[k];
+      q = (subgridD.q[BNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q);
-         //(D.f[dirTSW])[ktsw]=zero;
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TSW])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega);
       }
 
-      q = q_dirTSW[k];
+      q = (subgridD.q[TSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q);
-         //(D.f[dirBNE])[kbne]=zero;
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BNE])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega);
       }
 
-      q = q_dirTSE[k];
+      q = (subgridD.q[TSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q);
-         //(D.f[dirBNW])[kbnw]=zero;
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BNW])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega);
       }
 
-      q = q_dirBNW[k];
+      q = (subgridD.q[BNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q);
-         //(D.f[dirTSE])[ktse]=zero;
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TSE])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega);
       }
 
-      q = q_dirBSE[k];
+      q = (subgridD.q[BSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q);
-         //(D.f[dirTNW])[ktnw]=zero;
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[TNW])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega);
       }
 
-      q = q_dirTNW[k];
+      q = (subgridD.q[TNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q);
-         //(D.f[dirBSE])[kbse]=zero;
-      }
-
-	 // q = q_dirE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq); 
-  //       (D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+q/(one+q)*(f_E+f_W);
-		//// (D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
-  //    }
-
-  //    q = q_dirW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
-  //       (D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-feq*om1)/(one-om1)+q/(one+q)*(f_W+f_E);
-  //    }
-
-  //    q = q_dirN[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
-  //       (D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-feq*om1)/(one-om1)+q/(one+q)*(f_N+f_S);
-  //    }
-
-  //    q = q_dirS[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
-  //       (D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-feq*om1)/(one-om1)+q/(one+q)*(f_S+f_N);
-  //    }
-
-  //    q = q_dirT[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq); 
-  //       (D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-feq*om1)/(one-om1)+q/(one+q)*(f_T+f_B);
-  //    }
-
-  //    q = q_dirB[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
-  //       (D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-feq*om1)/(one-om1)+q/(one+q)*(f_B+f_T);
-  //    }
-
-  //    q = q_dirNE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-  //       (D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-feq*om1)/(one-om1)+q/(one+q)*(f_NE+f_SW);
-  //    }
-
-  //    q = q_dirSW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-  //       (D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-feq*om1)/(one-om1)+q/(one+q)*(f_SW+f_NE);
-  //    }
-
-  //    q = q_dirSE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-  //       (D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-feq*om1)/(one-om1)+q/(one+q)*(f_SE+f_NW);
-  //    }
-
-  //    q = q_dirNW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-  //       (D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-feq*om1)/(one-om1)+q/(one+q)*(f_NW+f_SE);
-  //    }
-
-  //    q = q_dirTE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-  //       (D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-feq*om1)/(one-om1)+q/(one+q)*(f_TE+f_BW);
-  //    }
-
-  //    q = q_dirBW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-  //       (D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-feq*om1)/(one-om1)+q/(one+q)*(f_BW+f_TE);
-  //    }
-
-  //    q = q_dirBE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-  //       (D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-feq*om1)/(one-om1)+q/(one+q)*(f_BE+f_TW);
-  //    }
-
-  //    q = q_dirTW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-  //       (D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-feq*om1)/(one-om1)+q/(one+q)*(f_TW+f_BE);
-  //    }
-
-  //    q = q_dirTN[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-  //       (D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-feq*om1)/(one-om1)+q/(one+q)*(f_TN+f_BS);
-  //    }
-
-  //    q = q_dirBS[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-  //       (D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-feq*om1)/(one-om1)+q/(one+q)*(f_BS+f_TN);
-  //    }
-
-  //    q = q_dirBN[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-  //       (D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-feq*om1)/(one-om1)+q/(one+q)*(f_BN+f_TS);
-  //    }
-
-  //    q = q_dirTS[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-  //       (D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-feq*om1)/(one-om1)+q/(one+q)*(f_TS+f_BN);
-  //    }
-
-  //    q = q_dirTNE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-  //       (D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om1)/(one-om1)+q/(one+q)*(f_TNE+f_BSW);
-  //    }
-
-  //    q = q_dirBSW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-  //       (D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om1)/(one-om1)+q/(one+q)*(f_BSW+f_TNE);
-  //    }
-
-  //    q = q_dirBNE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-  //       (D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om1)/(one-om1)+q/(one+q)*(f_BNE+f_TSW);
-  //    }
-
-  //    q = q_dirTSW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-  //       (D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om1)/(one-om1)+q/(one+q)*(f_TSW+f_BNE);
-  //    }
-
-  //    q = q_dirTSE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-  //       (D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om1)/(one-om1)+q/(one+q)*(f_TSE+f_BNW);
-  //    }
-
-  //    q = q_dirBNW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-  //       (D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om1)/(one-om1)+q/(one+q)*(f_BNW+f_TSE);
-  //    }
-
-  //    q = q_dirBSE[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-  //       (D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om1)/(one-om1)+q/(one+q)*(f_BSE+f_TNW);
-  //    }
-
-  //    q = q_dirTNW[k];
-  //    if (q>=zero && q<=one)
-  //    {
-  //       feq=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-  //       (D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om1)/(one-om1)+q/(one+q)*(f_TNW+f_BSE);
-  //    }
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         (dist.f[BSE])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega);
+      }
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3089,146 +2402,68 @@ extern "C" __global__ void QDevice27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void BBDevice27(int inx,
-                                     int iny,
-                                     real* DD, 
-                                     int* k_Q, 
-                                     real* QQ,
-                                     unsigned int sizeQ,
-                                     int numberOfNodes, 
-                                     real om1, 
+extern "C" __global__ void BBDevice27(real* distributions, 
+                                     int* subgridDistanceIndices, 
+                                     real* subgridDistances,
+                                     unsigned int numberOfBCnodes, 
                                      unsigned int* neighborX,
                                      unsigned int* neighborY,
                                      unsigned int* neighborZ,
-                                     unsigned int size_Mat, 
+                                     unsigned int numberOfLBnodes, 
                                      bool isEvenTimestep)
 {
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-   } 
-   else
-   {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-   }
+   //////////////////////////////////////////////////////////////////////////
+   //! The no-slip boundary condition is executed in the following steps
+   //!
    ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned  x = threadIdx.x;   // global x-index
+   const unsigned  y = blockIdx.x;    // global y-index
+   const unsigned  z = blockIdx.y;    // global z-index
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfNodes)
+   //////////////////////////////////////////////////////////////////////////
+   // run for all indices in size of boundary condition (numberOfBCnodes)
+   if(k < numberOfBCnodes)
    {
+      //////////////////////////////////////////////////////////////////////////
+      //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+      //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+      //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
-         *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-         *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-         *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-         *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int numberOfNodesK  = k_Q[k];
-      //unsigned int kzero= numberOfNodesK;
-      unsigned int ke   = numberOfNodesK;
-      unsigned int kw   = neighborX[numberOfNodesK];
-      unsigned int kn   = numberOfNodesK;
-      unsigned int ks   = neighborY[numberOfNodesK];
-      unsigned int kt   = numberOfNodesK;
-      unsigned int kb   = neighborZ[numberOfNodesK];
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[k];
+      unsigned int ke   = indexOfBCnode;
+      unsigned int kw   = neighborX[indexOfBCnode];
+      unsigned int kn   = indexOfBCnode;
+      unsigned int ks   = neighborY[indexOfBCnode];
+      unsigned int kt   = indexOfBCnode;
+      unsigned int kb   = neighborZ[indexOfBCnode];
       unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = numberOfNodesK;
+      unsigned int kne  = indexOfBCnode;
       unsigned int kse  = ks;
       unsigned int knw  = kw;
       unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = numberOfNodesK;
+      unsigned int kte  = indexOfBCnode;
       unsigned int kbe  = kb;
       unsigned int ktw  = kw;
       unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = numberOfNodesK;
+      unsigned int ktn  = indexOfBCnode;
       unsigned int kbn  = kb;
       unsigned int kts  = ks;
       unsigned int ktse = ks;
@@ -3237,290 +2472,73 @@ extern "C" __global__ void BBDevice27(int inx,
       unsigned int kbse = kbs;
       unsigned int ktsw = ksw;
       unsigned int kbne = kb;
-      unsigned int ktne = numberOfNodesK;
+      unsigned int ktne = indexOfBCnode;
       unsigned int kbsw = neighborZ[ksw];
-      //unsigned int nxny = nx*ny;
-      //unsigned int kzero= numberOfNodesK;
-      //unsigned int ke   = numberOfNodesK;
-      //unsigned int kw   = numberOfNodesK + 1;
-      //unsigned int kn   = numberOfNodesK;
-      //unsigned int ks   = numberOfNodesK + nx;
-      //unsigned int kt   = numberOfNodesK;
-      //unsigned int kb   = numberOfNodesK + nxny;
-      //unsigned int ksw  = numberOfNodesK + nx + 1;
-      //unsigned int kne  = numberOfNodesK;
-      //unsigned int kse  = numberOfNodesK + nx;
-      //unsigned int knw  = numberOfNodesK + 1;
-      //unsigned int kbw  = numberOfNodesK + nxny + 1;
-      //unsigned int kte  = numberOfNodesK;
-      //unsigned int kbe  = numberOfNodesK + nxny;
-      //unsigned int ktw  = numberOfNodesK + 1;
-      //unsigned int kbs  = numberOfNodesK + nxny + nx;
-      //unsigned int ktn  = numberOfNodesK;
-      //unsigned int kbn  = numberOfNodesK + nxny;
-      //unsigned int kts  = numberOfNodesK + nx;
-      //unsigned int ktse = numberOfNodesK + nx;
-      //unsigned int kbnw = numberOfNodesK + nxny + 1;
-      //unsigned int ktnw = numberOfNodesK + 1;
-      //unsigned int kbse = numberOfNodesK + nxny + nx;
-      //unsigned int ktsw = numberOfNodesK + nx + 1;
-      //unsigned int kbne = numberOfNodesK + nxny;
-      //unsigned int ktne = numberOfNodesK;
-      //unsigned int kbsw = numberOfNodesK + nxny + nx + 1;
+
       ////////////////////////////////////////////////////////////////////////////////
-     
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[E   ])[ke   ];
+      real f_E    = (dist.f[W   ])[kw   ];
+      real f_S    = (dist.f[N   ])[kn   ];
+      real f_N    = (dist.f[S   ])[ks   ];
+      real f_B    = (dist.f[T   ])[kt   ];
+      real f_T    = (dist.f[B   ])[kb   ];
+      real f_SW   = (dist.f[NE  ])[kne  ];
+      real f_NE   = (dist.f[SW  ])[ksw  ];
+      real f_NW   = (dist.f[SE  ])[kse  ];
+      real f_SE   = (dist.f[NW  ])[knw  ];
+      real f_BW   = (dist.f[TE  ])[kte  ];
+      real f_TE   = (dist.f[BW  ])[kbw  ];
+      real f_TW   = (dist.f[BE  ])[kbe  ];
+      real f_BE   = (dist.f[TW  ])[ktw  ];
+      real f_BS   = (dist.f[TN  ])[ktn  ];
+      real f_TN   = (dist.f[BS  ])[kbs  ];
+      real f_TS   = (dist.f[BN  ])[kbn  ];
+      real f_BN   = (dist.f[TS  ])[kts  ];
+      real f_BSW  = (dist.f[TNE ])[ktne ];
+      real f_BNE  = (dist.f[TSW ])[ktsw ];
+      real f_BNW  = (dist.f[TSE ])[ktse ];
+      real f_BSE  = (dist.f[TNW ])[ktnw ];
+      real f_TSW  = (dist.f[BNE ])[kbne ];
+      real f_TNE  = (dist.f[BSW ])[kbsw ];
+      real f_TNW  = (dist.f[BSE ])[kbse ];
+      real f_TSE  = (dist.f[BNW ])[kbnw ];
+
       ////////////////////////////////////////////////////////////////////////////////
-      real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-         f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
-
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      //! - change the pointer to write the results in the correct array
+      //!
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
 
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[dirZERO])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - rewrite distributions if there is a sub-grid distance (q) in same direction
       real q;
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirW])[kw]=f_E;
-      }
-
-      q = q_dirW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirE])[ke]=f_W;
-      }
-
-      q = q_dirN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirS])[ks]=f_N;
-      }
-
-      q = q_dirS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirN])[kn]=f_S;
-      }
-
-      q = q_dirT[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirB])[kb]=f_T;
-      }
-
-      q = q_dirB[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirT])[kt]=f_B;
-      }
-
-      q = q_dirNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirSW])[ksw]=f_NE;
-      }
-
-      q = q_dirSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirNE])[kne]=f_SW;
-      }
-
-      q = q_dirSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirNW])[knw]=f_SE;
-      }
-
-      q = q_dirNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirSE])[kse]=f_NW;
-      }
-
-      q = q_dirTE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBW])[kbw]=f_TE;
-      }
-
-      q = q_dirBW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTE])[kte]=f_BW;
-      }
-
-      q = q_dirBE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTW])[ktw]=f_BE;
-      }
-
-      q = q_dirTW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBE])[kbe]=f_TW;
-      }
-
-      q = q_dirTN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBS])[kbs]=f_TN;
-      }
-
-      q = q_dirBS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTN])[ktn]=f_BS;
-      }
-
-      q = q_dirBN[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTS])[kts]=f_BN;
-      }
-
-      q = q_dirTS[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBN])[kbn]=f_TS;
-      }
-
-      q = q_dirTNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBSW])[kbsw]=f_TNE;
-      }
-
-      q = q_dirBSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTNE])[ktne]=f_BSW;
-      }
-
-      q = q_dirBNE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTSW])[ktsw]=f_BNE;
-      }
-
-      q = q_dirTSW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBNE])[kbne]=f_TSW;
-      }
-
-      q = q_dirTSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBNW])[kbnw]=f_TSE;
-      }
-
-      q = q_dirBNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTSE])[ktse]=f_BNW;
-      }
-
-      q = q_dirBSE[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirTNW])[ktnw]=f_BSE;
-      }
-
-      q = q_dirTNW[k];
-      if (q>=c0o1 && q<=c1o1)
-      {
-         (D.f[dirBSE])[kbse]=f_TNW;
-      }
+      q = (subgridD.q[E  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[W  ])[kw  ]=f_E  ;
+      q = (subgridD.q[W  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[E  ])[ke  ]=f_W  ;
+      q = (subgridD.q[N  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[S  ])[ks  ]=f_N  ;
+      q = (subgridD.q[S  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[N  ])[kn  ]=f_S  ;
+      q = (subgridD.q[T  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[B  ])[kb  ]=f_T  ;
+      q = (subgridD.q[B  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[T  ])[kt  ]=f_B  ;
+      q = (subgridD.q[NE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[SW ])[ksw ]=f_NE ;
+      q = (subgridD.q[SW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[NE ])[kne ]=f_SW ;
+      q = (subgridD.q[SE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[NW ])[knw ]=f_SE ;
+      q = (subgridD.q[NW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[SE ])[kse ]=f_NW ;
+      q = (subgridD.q[TE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BW ])[kbw ]=f_TE ;
+      q = (subgridD.q[BW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TE ])[kte ]=f_BW ;
+      q = (subgridD.q[BE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TW ])[ktw ]=f_BE ;
+      q = (subgridD.q[TW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BE ])[kbe ]=f_TW ;
+      q = (subgridD.q[TN ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BS ])[kbs ]=f_TN ;
+      q = (subgridD.q[BS ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TN ])[ktn ]=f_BS ;
+      q = (subgridD.q[BN ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TS ])[kts ]=f_BN ;
+      q = (subgridD.q[TS ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BN ])[kbn ]=f_TS ;
+      q = (subgridD.q[TNE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BSW])[kbsw]=f_TNE;
+      q = (subgridD.q[BSW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TNE])[ktne]=f_BSW;
+      q = (subgridD.q[BNE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TSW])[ktsw]=f_BNE;
+      q = (subgridD.q[TSW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BNE])[kbne]=f_TSW;
+      q = (subgridD.q[TSE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BNW])[kbnw]=f_TSE;
+      q = (subgridD.q[BNW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TSE])[ktse]=f_BNW;
+      q = (subgridD.q[BSE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TNW])[ktnw]=f_BSE;
+      q = (subgridD.q[TNW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BSE])[kbse]=f_TNW;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Particles.cu b/src/gpu/VirtualFluids_GPU/GPU/Particles.cu
index c8ae62e256251c55460c7b8751b1268cc663fc03..a0192efab597856ecf365ebc69c9035ba06d1b44 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Particles.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Particles.cu
@@ -1,10 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
-
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void InitParticles( real* coordX,
@@ -248,63 +248,63 @@ extern "C" __global__ void MoveParticles( real* coordX,
 		{
 		   if (isEvenTimestep==true)
 		   {
-			  feC    = &DD[dirE   *size_Mat];
-			  fwC    = &DD[dirW   *size_Mat];
-			  fnC    = &DD[dirN   *size_Mat];
-			  fsC    = &DD[dirS   *size_Mat];
-			  ftC    = &DD[dirT   *size_Mat];
-			  fbC    = &DD[dirB   *size_Mat];
-			  fneC   = &DD[dirNE  *size_Mat];
-			  fswC   = &DD[dirSW  *size_Mat];
-			  fseC   = &DD[dirSE  *size_Mat];
-			  fnwC   = &DD[dirNW  *size_Mat];
-			  fteC   = &DD[dirTE  *size_Mat];
-			  fbwC   = &DD[dirBW  *size_Mat];
-			  fbeC   = &DD[dirBE  *size_Mat];
-			  ftwC   = &DD[dirTW  *size_Mat];
-			  ftnC   = &DD[dirTN  *size_Mat];
-			  fbsC   = &DD[dirBS  *size_Mat];
-			  fbnC   = &DD[dirBN  *size_Mat];
-			  ftsC   = &DD[dirTS  *size_Mat];
-			  fzeroC = &DD[dirZERO*size_Mat];
-			  ftneC  = &DD[dirTNE *size_Mat];
-			  ftswC  = &DD[dirTSW *size_Mat];
-			  ftseC  = &DD[dirTSE *size_Mat];
-			  ftnwC  = &DD[dirTNW *size_Mat];
-			  fbneC  = &DD[dirBNE *size_Mat];
-			  fbswC  = &DD[dirBSW *size_Mat];
-			  fbseC  = &DD[dirBSE *size_Mat];
-			  fbnwC  = &DD[dirBNW *size_Mat];
+			  feC    = &DD[E   *size_Mat];
+			  fwC    = &DD[W   *size_Mat];
+			  fnC    = &DD[N   *size_Mat];
+			  fsC    = &DD[S   *size_Mat];
+			  ftC    = &DD[T   *size_Mat];
+			  fbC    = &DD[B   *size_Mat];
+			  fneC   = &DD[NE  *size_Mat];
+			  fswC   = &DD[SW  *size_Mat];
+			  fseC   = &DD[SE  *size_Mat];
+			  fnwC   = &DD[NW  *size_Mat];
+			  fteC   = &DD[TE  *size_Mat];
+			  fbwC   = &DD[BW  *size_Mat];
+			  fbeC   = &DD[BE  *size_Mat];
+			  ftwC   = &DD[TW  *size_Mat];
+			  ftnC   = &DD[TN  *size_Mat];
+			  fbsC   = &DD[BS  *size_Mat];
+			  fbnC   = &DD[BN  *size_Mat];
+			  ftsC   = &DD[TS  *size_Mat];
+			  fzeroC = &DD[REST*size_Mat];
+			  ftneC  = &DD[TNE *size_Mat];
+			  ftswC  = &DD[TSW *size_Mat];
+			  ftseC  = &DD[TSE *size_Mat];
+			  ftnwC  = &DD[TNW *size_Mat];
+			  fbneC  = &DD[BNE *size_Mat];
+			  fbswC  = &DD[BSW *size_Mat];
+			  fbseC  = &DD[BSE *size_Mat];
+			  fbnwC  = &DD[BNW *size_Mat];
 		   } 			 
 		   else			 
 		   {			 
-			  fwC    = &DD[dirE   *size_Mat];
-			  feC    = &DD[dirW   *size_Mat];
-			  fsC    = &DD[dirN   *size_Mat];
-			  fnC    = &DD[dirS   *size_Mat];
-			  fbC    = &DD[dirT   *size_Mat];
-			  ftC    = &DD[dirB   *size_Mat];
-			  fswC   = &DD[dirNE  *size_Mat];
-			  fneC   = &DD[dirSW  *size_Mat];
-			  fnwC   = &DD[dirSE  *size_Mat];
-			  fseC   = &DD[dirNW  *size_Mat];
-			  fbwC   = &DD[dirTE  *size_Mat];
-			  fteC   = &DD[dirBW  *size_Mat];
-			  ftwC   = &DD[dirBE  *size_Mat];
-			  fbeC   = &DD[dirTW  *size_Mat];
-			  fbsC   = &DD[dirTN  *size_Mat];
-			  ftnC   = &DD[dirBS  *size_Mat];
-			  ftsC   = &DD[dirBN  *size_Mat];
-			  fbnC   = &DD[dirTS  *size_Mat];
-			  fzeroC = &DD[dirZERO*size_Mat];
-			  fbswC  = &DD[dirTNE *size_Mat];
-			  fbneC  = &DD[dirTSW *size_Mat];
-			  fbnwC  = &DD[dirTSE *size_Mat];
-			  fbseC  = &DD[dirTNW *size_Mat];
-			  ftswC  = &DD[dirBNE *size_Mat];
-			  ftneC  = &DD[dirBSW *size_Mat];
-			  ftnwC  = &DD[dirBSE *size_Mat];
-			  ftseC  = &DD[dirBNW *size_Mat];
+			  fwC    = &DD[E   *size_Mat];
+			  feC    = &DD[W   *size_Mat];
+			  fsC    = &DD[N   *size_Mat];
+			  fnC    = &DD[S   *size_Mat];
+			  fbC    = &DD[T   *size_Mat];
+			  ftC    = &DD[B   *size_Mat];
+			  fswC   = &DD[NE  *size_Mat];
+			  fneC   = &DD[SW  *size_Mat];
+			  fnwC   = &DD[SE  *size_Mat];
+			  fseC   = &DD[NW  *size_Mat];
+			  fbwC   = &DD[TE  *size_Mat];
+			  fteC   = &DD[BW  *size_Mat];
+			  ftwC   = &DD[BE  *size_Mat];
+			  fbeC   = &DD[TW  *size_Mat];
+			  fbsC   = &DD[TN  *size_Mat];
+			  ftnC   = &DD[BS  *size_Mat];
+			  ftsC   = &DD[BN  *size_Mat];
+			  fbnC   = &DD[TS  *size_Mat];
+			  fzeroC = &DD[REST*size_Mat];
+			  fbswC  = &DD[TNE *size_Mat];
+			  fbneC  = &DD[TSW *size_Mat];
+			  fbnwC  = &DD[TSE *size_Mat];
+			  fbseC  = &DD[TNW *size_Mat];
+			  ftswC  = &DD[BNE *size_Mat];
+			  ftneC  = &DD[BSW *size_Mat];
+			  ftnwC  = &DD[BSE *size_Mat];
+			  ftseC  = &DD[BNW *size_Mat];
 		   }
 
 			  //////////////////////////////////////////////////////////////////////////
@@ -1114,63 +1114,63 @@ extern "C" __global__ void MoveParticlesWithoutBCs(   real* coordX,
 		{
 		   if (isEvenTimestep==true)
 		   {
-			  feC    = &DD[dirE   *size_Mat];
-			  fwC    = &DD[dirW   *size_Mat];
-			  fnC    = &DD[dirN   *size_Mat];
-			  fsC    = &DD[dirS   *size_Mat];
-			  ftC    = &DD[dirT   *size_Mat];
-			  fbC    = &DD[dirB   *size_Mat];
-			  fneC   = &DD[dirNE  *size_Mat];
-			  fswC   = &DD[dirSW  *size_Mat];
-			  fseC   = &DD[dirSE  *size_Mat];
-			  fnwC   = &DD[dirNW  *size_Mat];
-			  fteC   = &DD[dirTE  *size_Mat];
-			  fbwC   = &DD[dirBW  *size_Mat];
-			  fbeC   = &DD[dirBE  *size_Mat];
-			  ftwC   = &DD[dirTW  *size_Mat];
-			  ftnC   = &DD[dirTN  *size_Mat];
-			  fbsC   = &DD[dirBS  *size_Mat];
-			  fbnC   = &DD[dirBN  *size_Mat];
-			  ftsC   = &DD[dirTS  *size_Mat];
-			  fzeroC = &DD[dirZERO*size_Mat];
-			  ftneC  = &DD[dirTNE *size_Mat];
-			  ftswC  = &DD[dirTSW *size_Mat];
-			  ftseC  = &DD[dirTSE *size_Mat];
-			  ftnwC  = &DD[dirTNW *size_Mat];
-			  fbneC  = &DD[dirBNE *size_Mat];
-			  fbswC  = &DD[dirBSW *size_Mat];
-			  fbseC  = &DD[dirBSE *size_Mat];
-			  fbnwC  = &DD[dirBNW *size_Mat];
+			  feC    = &DD[E   *size_Mat];
+			  fwC    = &DD[W   *size_Mat];
+			  fnC    = &DD[N   *size_Mat];
+			  fsC    = &DD[S   *size_Mat];
+			  ftC    = &DD[T   *size_Mat];
+			  fbC    = &DD[B   *size_Mat];
+			  fneC   = &DD[NE  *size_Mat];
+			  fswC   = &DD[SW  *size_Mat];
+			  fseC   = &DD[SE  *size_Mat];
+			  fnwC   = &DD[NW  *size_Mat];
+			  fteC   = &DD[TE  *size_Mat];
+			  fbwC   = &DD[BW  *size_Mat];
+			  fbeC   = &DD[BE  *size_Mat];
+			  ftwC   = &DD[TW  *size_Mat];
+			  ftnC   = &DD[TN  *size_Mat];
+			  fbsC   = &DD[BS  *size_Mat];
+			  fbnC   = &DD[BN  *size_Mat];
+			  ftsC   = &DD[TS  *size_Mat];
+			  fzeroC = &DD[REST*size_Mat];
+			  ftneC  = &DD[TNE *size_Mat];
+			  ftswC  = &DD[TSW *size_Mat];
+			  ftseC  = &DD[TSE *size_Mat];
+			  ftnwC  = &DD[TNW *size_Mat];
+			  fbneC  = &DD[BNE *size_Mat];
+			  fbswC  = &DD[BSW *size_Mat];
+			  fbseC  = &DD[BSE *size_Mat];
+			  fbnwC  = &DD[BNW *size_Mat];
 		   } 			 
 		   else			 
 		   {			 
-			  fwC    = &DD[dirE   *size_Mat];
-			  feC    = &DD[dirW   *size_Mat];
-			  fsC    = &DD[dirN   *size_Mat];
-			  fnC    = &DD[dirS   *size_Mat];
-			  fbC    = &DD[dirT   *size_Mat];
-			  ftC    = &DD[dirB   *size_Mat];
-			  fswC   = &DD[dirNE  *size_Mat];
-			  fneC   = &DD[dirSW  *size_Mat];
-			  fnwC   = &DD[dirSE  *size_Mat];
-			  fseC   = &DD[dirNW  *size_Mat];
-			  fbwC   = &DD[dirTE  *size_Mat];
-			  fteC   = &DD[dirBW  *size_Mat];
-			  ftwC   = &DD[dirBE  *size_Mat];
-			  fbeC   = &DD[dirTW  *size_Mat];
-			  fbsC   = &DD[dirTN  *size_Mat];
-			  ftnC   = &DD[dirBS  *size_Mat];
-			  ftsC   = &DD[dirBN  *size_Mat];
-			  fbnC   = &DD[dirTS  *size_Mat];
-			  fzeroC = &DD[dirZERO*size_Mat];
-			  fbswC  = &DD[dirTNE *size_Mat];
-			  fbneC  = &DD[dirTSW *size_Mat];
-			  fbnwC  = &DD[dirTSE *size_Mat];
-			  fbseC  = &DD[dirTNW *size_Mat];
-			  ftswC  = &DD[dirBNE *size_Mat];
-			  ftneC  = &DD[dirBSW *size_Mat];
-			  ftnwC  = &DD[dirBSE *size_Mat];
-			  ftseC  = &DD[dirBNW *size_Mat];
+			  fwC    = &DD[E   *size_Mat];
+			  feC    = &DD[W   *size_Mat];
+			  fsC    = &DD[N   *size_Mat];
+			  fnC    = &DD[S   *size_Mat];
+			  fbC    = &DD[T   *size_Mat];
+			  ftC    = &DD[B   *size_Mat];
+			  fswC   = &DD[NE  *size_Mat];
+			  fneC   = &DD[SW  *size_Mat];
+			  fnwC   = &DD[SE  *size_Mat];
+			  fseC   = &DD[NW  *size_Mat];
+			  fbwC   = &DD[TE  *size_Mat];
+			  fteC   = &DD[BW  *size_Mat];
+			  ftwC   = &DD[BE  *size_Mat];
+			  fbeC   = &DD[TW  *size_Mat];
+			  fbsC   = &DD[TN  *size_Mat];
+			  ftnC   = &DD[BS  *size_Mat];
+			  ftsC   = &DD[BN  *size_Mat];
+			  fbnC   = &DD[TS  *size_Mat];
+			  fzeroC = &DD[REST*size_Mat];
+			  fbswC  = &DD[TNE *size_Mat];
+			  fbneC  = &DD[TSW *size_Mat];
+			  fbnwC  = &DD[TSE *size_Mat];
+			  fbseC  = &DD[TNW *size_Mat];
+			  ftswC  = &DD[BNE *size_Mat];
+			  ftneC  = &DD[BSW *size_Mat];
+			  ftnwC  = &DD[BSE *size_Mat];
+			  ftseC  = &DD[BNW *size_Mat];
 		   }
 
 			  //////////////////////////////////////////////////////////////////////////
@@ -1924,7 +1924,7 @@ extern "C" __global__ void ParticleNoSlipDeviceComp27(real* coordX,
 													  unsigned int numberOfParticles, 
 													  int* k_Q, 
 													  real* QQ,
-													  unsigned int sizeQ,
+													  unsigned int  numberOfBCnodes,
 													  real* NormalX,
 													  real* NormalY,
 													  real* NormalZ,
@@ -1937,63 +1937,63 @@ extern "C" __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //Distributions27 D;
    //if (isEvenTimestep==true)
    //{
-   //   D.f[dirE   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirW   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   //   D.f[E   ] = &DD[E   *size_Mat];
+   //   D.f[W   ] = &DD[W   *size_Mat];
+   //   D.f[N   ] = &DD[N   *size_Mat];
+   //   D.f[S   ] = &DD[S   *size_Mat];
+   //   D.f[T   ] = &DD[T   *size_Mat];
+   //   D.f[B   ] = &DD[B   *size_Mat];
+   //   D.f[NE  ] = &DD[NE  *size_Mat];
+   //   D.f[SW  ] = &DD[SW  *size_Mat];
+   //   D.f[SE  ] = &DD[SE  *size_Mat];
+   //   D.f[NW  ] = &DD[NW  *size_Mat];
+   //   D.f[TE  ] = &DD[TE  *size_Mat];
+   //   D.f[BW  ] = &DD[BW  *size_Mat];
+   //   D.f[BE  ] = &DD[BE  *size_Mat];
+   //   D.f[TW  ] = &DD[TW  *size_Mat];
+   //   D.f[TN  ] = &DD[TN  *size_Mat];
+   //   D.f[BS  ] = &DD[BS  *size_Mat];
+   //   D.f[BN  ] = &DD[BN  *size_Mat];
+   //   D.f[TS  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[TNE *size_Mat];
+   //   D.f[TSW ] = &DD[TSW *size_Mat];
+   //   D.f[TSE ] = &DD[TSE *size_Mat];
+   //   D.f[TNW ] = &DD[TNW *size_Mat];
+   //   D.f[BNE ] = &DD[BNE *size_Mat];
+   //   D.f[BSW ] = &DD[BSW *size_Mat];
+   //   D.f[BSE ] = &DD[BSE *size_Mat];
+   //   D.f[BNW ] = &DD[BNW *size_Mat];
    //} 
    //else
    //{
-   //   D.f[dirW   ] = &DD[dirE   *size_Mat];
-   //   D.f[dirE   ] = &DD[dirW   *size_Mat];
-   //   D.f[dirS   ] = &DD[dirN   *size_Mat];
-   //   D.f[dirN   ] = &DD[dirS   *size_Mat];
-   //   D.f[dirB   ] = &DD[dirT   *size_Mat];
-   //   D.f[dirT   ] = &DD[dirB   *size_Mat];
-   //   D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-   //   D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-   //   D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-   //   D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-   //   D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-   //   D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-   //   D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-   //   D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-   //   D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-   //   D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-   //   D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-   //   D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-   //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //   D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-   //   D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-   //   D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-   //   D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-   //   D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-   //   D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-   //   D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-   //   D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+   //   D.f[W   ] = &DD[E   *size_Mat];
+   //   D.f[E   ] = &DD[W   *size_Mat];
+   //   D.f[S   ] = &DD[N   *size_Mat];
+   //   D.f[N   ] = &DD[S   *size_Mat];
+   //   D.f[B   ] = &DD[T   *size_Mat];
+   //   D.f[T   ] = &DD[B   *size_Mat];
+   //   D.f[SW  ] = &DD[NE  *size_Mat];
+   //   D.f[NE  ] = &DD[SW  *size_Mat];
+   //   D.f[NW  ] = &DD[SE  *size_Mat];
+   //   D.f[SE  ] = &DD[NW  *size_Mat];
+   //   D.f[BW  ] = &DD[TE  *size_Mat];
+   //   D.f[TE  ] = &DD[BW  *size_Mat];
+   //   D.f[TW  ] = &DD[BE  *size_Mat];
+   //   D.f[BE  ] = &DD[TW  *size_Mat];
+   //   D.f[BS  ] = &DD[TN  *size_Mat];
+   //   D.f[TN  ] = &DD[BS  *size_Mat];
+   //   D.f[TS  ] = &DD[BN  *size_Mat];
+   //   D.f[BN  ] = &DD[TS  *size_Mat];
+   //   D.f[REST] = &DD[REST*size_Mat];
+   //   D.f[TNE ] = &DD[BSW *size_Mat];
+   //   D.f[TSW ] = &DD[BNE *size_Mat];
+   //   D.f[TSE ] = &DD[BNW *size_Mat];
+   //   D.f[TNW ] = &DD[BSE *size_Mat];
+   //   D.f[BNE ] = &DD[TSW *size_Mat];
+   //   D.f[BSW ] = &DD[TNE *size_Mat];
+   //   D.f[BSE ] = &DD[TNW *size_Mat];
+   //   D.f[BNW ] = &DD[TSE *size_Mat];
    //}
    //////////////////////////////////////////////////////////////////////////////////
    //const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2006,7 +2006,7 @@ extern "C" __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //const unsigned k = nx*(ny*z + y) + x;
    ////////////////////////////////////////////////////////////////////////////
 
-   //if(k < sizeQ)
+   //if(k <  numberOfBCnodes)
    //{
    //   ////////////////////////////////////////////////////////////////////////////////
    //   real *q_dirW, *q_dirS, *q_dirB;
@@ -2015,128 +2015,128 @@ extern "C" __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    // //         *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
    // //         *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
    // //         *q_dirBSE, *q_dirBNW; 
-   // //   q_dirE   = &QQ[dirE   *sizeQ];
-   //    q_dirW   = &QQ[dirW   *sizeQ];
-   // //   q_dirN   = &QQ[dirN   *sizeQ];
-   //    q_dirS   = &QQ[dirS   *sizeQ];
-   // //   q_dirT   = &QQ[dirT   *sizeQ];
-   //    q_dirB   = &QQ[dirB   *sizeQ];
-   // //   q_dirNE  = &QQ[dirNE  *sizeQ];
-   // //   q_dirSW  = &QQ[dirSW  *sizeQ];
-   // //   q_dirSE  = &QQ[dirSE  *sizeQ];
-   // //   q_dirNW  = &QQ[dirNW  *sizeQ];
-   // //   q_dirTE  = &QQ[dirTE  *sizeQ];
-   // //   q_dirBW  = &QQ[dirBW  *sizeQ];
-   // //   q_dirBE  = &QQ[dirBE  *sizeQ];
-   // //   q_dirTW  = &QQ[dirTW  *sizeQ];
-   // //   q_dirTN  = &QQ[dirTN  *sizeQ];
-   // //   q_dirBS  = &QQ[dirBS  *sizeQ];
-   // //   q_dirBN  = &QQ[dirBN  *sizeQ];
-   // //   q_dirTS  = &QQ[dirTS  *sizeQ];
-   // //   q_dirTNE = &QQ[dirTNE *sizeQ];
-   // //   q_dirTSW = &QQ[dirTSW *sizeQ];
-   // //   q_dirTSE = &QQ[dirTSE *sizeQ];
-   // //   q_dirTNW = &QQ[dirTNW *sizeQ];
-   // //   q_dirBNE = &QQ[dirBNE *sizeQ];
-   // //   q_dirBSW = &QQ[dirBSW *sizeQ];
-   // //   q_dirBSE = &QQ[dirBSE *sizeQ];
-   // //   q_dirBNW = &QQ[dirBNW *sizeQ];
+   // //   q_dirE   = &QQ[E   * numberOfBCnodes];
+   //    q_dirW   = &QQ[W   * numberOfBCnodes];
+   // //   q_dirN   = &QQ[N   * numberOfBCnodes];
+   //    q_dirS   = &QQ[S   * numberOfBCnodes];
+   // //   q_dirT   = &QQ[T   * numberOfBCnodes];
+   //    q_dirB   = &QQ[B   * numberOfBCnodes];
+   // //   q_dirNE  = &QQ[NE  * numberOfBCnodes];
+   // //   q_dirSW  = &QQ[SW  * numberOfBCnodes];
+   // //   q_dirSE  = &QQ[SE  * numberOfBCnodes];
+   // //   q_dirNW  = &QQ[NW  * numberOfBCnodes];
+   // //   q_dirTE  = &QQ[TE  * numberOfBCnodes];
+   // //   q_dirBW  = &QQ[BW  * numberOfBCnodes];
+   // //   q_dirBE  = &QQ[BE  * numberOfBCnodes];
+   // //   q_dirTW  = &QQ[TW  * numberOfBCnodes];
+   // //   q_dirTN  = &QQ[TN  * numberOfBCnodes];
+   // //   q_dirBS  = &QQ[BS  * numberOfBCnodes];
+   // //   q_dirBN  = &QQ[BN  * numberOfBCnodes];
+   // //   q_dirTS  = &QQ[TS  * numberOfBCnodes];
+   // //   q_dirTNE = &QQ[TNE * numberOfBCnodes];
+   // //   q_dirTSW = &QQ[TSW * numberOfBCnodes];
+   // //   q_dirTSE = &QQ[TSE * numberOfBCnodes];
+   // //   q_dirTNW = &QQ[TNW * numberOfBCnodes];
+   // //   q_dirBNE = &QQ[BNE * numberOfBCnodes];
+   // //   q_dirBSW = &QQ[BSW * numberOfBCnodes];
+   // //   q_dirBSE = &QQ[BSE * numberOfBCnodes];
+   // //   q_dirBNW = &QQ[BNW * numberOfBCnodes];
    //   ////////////////////////////////////////////////////////////////////////////////
    // //   real *nx_dirE,   *nx_dirW,   *nx_dirN,   *nx_dirS,   *nx_dirT,   *nx_dirB, 
    // //           *nx_dirNE,  *nx_dirSW,  *nx_dirSE,  *nx_dirNW,  *nx_dirTE,  *nx_dirBW,
    // //           *nx_dirBE,  *nx_dirTW,  *nx_dirTN,  *nx_dirBS,  *nx_dirBN,  *nx_dirTS,
    // //           *nx_dirTNE, *nx_dirTSW, *nx_dirTSE, *nx_dirTNW, *nx_dirBNE, *nx_dirBSW,
    // //           *nx_dirBSE, *nx_dirBNW; 
-   // //   nx_dirE   = &NormalX[dirE   *sizeQ];
-   // //   nx_dirW   = &NormalX[dirW   *sizeQ];
-   // //   nx_dirN   = &NormalX[dirN   *sizeQ];
-   // //   nx_dirS   = &NormalX[dirS   *sizeQ];
-   // //   nx_dirT   = &NormalX[dirT   *sizeQ];
-   // //   nx_dirB   = &NormalX[dirB   *sizeQ];
-   // //   nx_dirNE  = &NormalX[dirNE  *sizeQ];
-   // //   nx_dirSW  = &NormalX[dirSW  *sizeQ];
-   // //   nx_dirSE  = &NormalX[dirSE  *sizeQ];
-   // //   nx_dirNW  = &NormalX[dirNW  *sizeQ];
-   // //   nx_dirTE  = &NormalX[dirTE  *sizeQ];
-   // //   nx_dirBW  = &NormalX[dirBW  *sizeQ];
-   // //   nx_dirBE  = &NormalX[dirBE  *sizeQ];
-   // //   nx_dirTW  = &NormalX[dirTW  *sizeQ];
-   // //   nx_dirTN  = &NormalX[dirTN  *sizeQ];
-   // //   nx_dirBS  = &NormalX[dirBS  *sizeQ];
-   // //   nx_dirBN  = &NormalX[dirBN  *sizeQ];
-   // //   nx_dirTS  = &NormalX[dirTS  *sizeQ];
-   // //   nx_dirTNE = &NormalX[dirTNE *sizeQ];
-   // //   nx_dirTSW = &NormalX[dirTSW *sizeQ];
-   // //   nx_dirTSE = &NormalX[dirTSE *sizeQ];
-   // //   nx_dirTNW = &NormalX[dirTNW *sizeQ];
-   // //   nx_dirBNE = &NormalX[dirBNE *sizeQ];
-   // //   nx_dirBSW = &NormalX[dirBSW *sizeQ];
-   // //   nx_dirBSE = &NormalX[dirBSE *sizeQ];
-   // //   nx_dirBNW = &NormalX[dirBNW *sizeQ];
+   // //   nx_dirE   = &NormalX[E   * numberOfBCnodes];
+   // //   nx_dirW   = &NormalX[W   * numberOfBCnodes];
+   // //   nx_dirN   = &NormalX[N   * numberOfBCnodes];
+   // //   nx_dirS   = &NormalX[S   * numberOfBCnodes];
+   // //   nx_dirT   = &NormalX[T   * numberOfBCnodes];
+   // //   nx_dirB   = &NormalX[B   * numberOfBCnodes];
+   // //   nx_dirNE  = &NormalX[NE  * numberOfBCnodes];
+   // //   nx_dirSW  = &NormalX[SW  * numberOfBCnodes];
+   // //   nx_dirSE  = &NormalX[SE  * numberOfBCnodes];
+   // //   nx_dirNW  = &NormalX[NW  * numberOfBCnodes];
+   // //   nx_dirTE  = &NormalX[TE  * numberOfBCnodes];
+   // //   nx_dirBW  = &NormalX[BW  * numberOfBCnodes];
+   // //   nx_dirBE  = &NormalX[BE  * numberOfBCnodes];
+   // //   nx_dirTW  = &NormalX[TW  * numberOfBCnodes];
+   // //   nx_dirTN  = &NormalX[TN  * numberOfBCnodes];
+   // //   nx_dirBS  = &NormalX[BS  * numberOfBCnodes];
+   // //   nx_dirBN  = &NormalX[BN  * numberOfBCnodes];
+   // //   nx_dirTS  = &NormalX[TS  * numberOfBCnodes];
+   // //   nx_dirTNE = &NormalX[TNE * numberOfBCnodes];
+   // //   nx_dirTSW = &NormalX[TSW * numberOfBCnodes];
+   // //   nx_dirTSE = &NormalX[TSE * numberOfBCnodes];
+   // //   nx_dirTNW = &NormalX[TNW * numberOfBCnodes];
+   // //   nx_dirBNE = &NormalX[BNE * numberOfBCnodes];
+   // //   nx_dirBSW = &NormalX[BSW * numberOfBCnodes];
+   // //   nx_dirBSE = &NormalX[BSE * numberOfBCnodes];
+   // //   nx_dirBNW = &NormalX[BNW * numberOfBCnodes];
    //   ////////////////////////////////////////////////////////////////////////////////
    // //   real *ny_dirE,   *ny_dirW,   *ny_dirN,   *ny_dirS,   *ny_dirT,   *ny_dirB, 
    // //           *ny_dirNE,  *ny_dirSW,  *ny_dirSE,  *ny_dirNW,  *ny_dirTE,  *ny_dirBW,
    // //           *ny_dirBE,  *ny_dirTW,  *ny_dirTN,  *ny_dirBS,  *ny_dirBN,  *ny_dirTS,
    // //           *ny_dirTNE, *ny_dirTSW, *ny_dirTSE, *ny_dirTNW, *ny_dirBNE, *ny_dirBSW,
    // //           *ny_dirBSE, *ny_dirBNW; 
-   // //   ny_dirE   = &NormalY[dirE   *sizeQ];
-   // //   ny_dirW   = &NormalY[dirW   *sizeQ];
-   // //   ny_dirN   = &NormalY[dirN   *sizeQ];
-   // //   ny_dirS   = &NormalY[dirS   *sizeQ];
-   // //   ny_dirT   = &NormalY[dirT   *sizeQ];
-   // //   ny_dirB   = &NormalY[dirB   *sizeQ];
-   // //   ny_dirNE  = &NormalY[dirNE  *sizeQ];
-   // //   ny_dirSW  = &NormalY[dirSW  *sizeQ];
-   // //   ny_dirSE  = &NormalY[dirSE  *sizeQ];
-   // //   ny_dirNW  = &NormalY[dirNW  *sizeQ];
-   // //   ny_dirTE  = &NormalY[dirTE  *sizeQ];
-   // //   ny_dirBW  = &NormalY[dirBW  *sizeQ];
-   // //   ny_dirBE  = &NormalY[dirBE  *sizeQ];
-   // //   ny_dirTW  = &NormalY[dirTW  *sizeQ];
-   // //   ny_dirTN  = &NormalY[dirTN  *sizeQ];
-   // //   ny_dirBS  = &NormalY[dirBS  *sizeQ];
-   // //   ny_dirBN  = &NormalY[dirBN  *sizeQ];
-   // //   ny_dirTS  = &NormalY[dirTS  *sizeQ];
-   // //   ny_dirTNE = &NormalY[dirTNE *sizeQ];
-   // //   ny_dirTSW = &NormalY[dirTSW *sizeQ];
-   // //   ny_dirTSE = &NormalY[dirTSE *sizeQ];
-   // //   ny_dirTNW = &NormalY[dirTNW *sizeQ];
-   // //   ny_dirBNE = &NormalY[dirBNE *sizeQ];
-   // //   ny_dirBSW = &NormalY[dirBSW *sizeQ];
-   // //   ny_dirBSE = &NormalY[dirBSE *sizeQ];
-   // //   ny_dirBNW = &NormalY[dirBNW *sizeQ];
+   // //   ny_dirE   = &NormalY[E   * numberOfBCnodes];
+   // //   ny_dirW   = &NormalY[W   * numberOfBCnodes];
+   // //   ny_dirN   = &NormalY[N   * numberOfBCnodes];
+   // //   ny_dirS   = &NormalY[S   * numberOfBCnodes];
+   // //   ny_dirT   = &NormalY[T   * numberOfBCnodes];
+   // //   ny_dirB   = &NormalY[B   * numberOfBCnodes];
+   // //   ny_dirNE  = &NormalY[NE  * numberOfBCnodes];
+   // //   ny_dirSW  = &NormalY[SW  * numberOfBCnodes];
+   // //   ny_dirSE  = &NormalY[SE  * numberOfBCnodes];
+   // //   ny_dirNW  = &NormalY[NW  * numberOfBCnodes];
+   // //   ny_dirTE  = &NormalY[TE  * numberOfBCnodes];
+   // //   ny_dirBW  = &NormalY[BW  * numberOfBCnodes];
+   // //   ny_dirBE  = &NormalY[BE  * numberOfBCnodes];
+   // //   ny_dirTW  = &NormalY[TW  * numberOfBCnodes];
+   // //   ny_dirTN  = &NormalY[TN  * numberOfBCnodes];
+   // //   ny_dirBS  = &NormalY[BS  * numberOfBCnodes];
+   // //   ny_dirBN  = &NormalY[BN  * numberOfBCnodes];
+   // //   ny_dirTS  = &NormalY[TS  * numberOfBCnodes];
+   // //   ny_dirTNE = &NormalY[TNE * numberOfBCnodes];
+   // //   ny_dirTSW = &NormalY[TSW * numberOfBCnodes];
+   // //   ny_dirTSE = &NormalY[TSE * numberOfBCnodes];
+   // //   ny_dirTNW = &NormalY[TNW * numberOfBCnodes];
+   // //   ny_dirBNE = &NormalY[BNE * numberOfBCnodes];
+   // //   ny_dirBSW = &NormalY[BSW * numberOfBCnodes];
+   // //   ny_dirBSE = &NormalY[BSE * numberOfBCnodes];
+   // //   ny_dirBNW = &NormalY[BNW * numberOfBCnodes];
    //   ////////////////////////////////////////////////////////////////////////////////
    // //   real *nz_dirE,   *nz_dirW,   *nz_dirN,   *nz_dirS,   *nz_dirT,   *nz_dirB, 
    // //           *nz_dirNE,  *nz_dirSW,  *nz_dirSE,  *nz_dirNW,  *nz_dirTE,  *nz_dirBW,
    // //           *nz_dirBE,  *nz_dirTW,  *nz_dirTN,  *nz_dirBS,  *nz_dirBN,  *nz_dirTS,
    // //           *nz_dirTNE, *nz_dirTSW, *nz_dirTSE, *nz_dirTNW, *nz_dirBNE, *nz_dirBSW,
    // //           *nz_dirBSE, *nz_dirBNW; 
-   // //   nz_dirE   = &NormalZ[dirE   *sizeQ];
-   // //   nz_dirW   = &NormalZ[dirW   *sizeQ];
-   // //   nz_dirN   = &NormalZ[dirN   *sizeQ];
-   // //   nz_dirS   = &NormalZ[dirS   *sizeQ];
-   // //   nz_dirT   = &NormalZ[dirT   *sizeQ];
-   // //   nz_dirB   = &NormalZ[dirB   *sizeQ];
-   // //   nz_dirNE  = &NormalZ[dirNE  *sizeQ];
-   // //   nz_dirSW  = &NormalZ[dirSW  *sizeQ];
-   // //   nz_dirSE  = &NormalZ[dirSE  *sizeQ];
-   // //   nz_dirNW  = &NormalZ[dirNW  *sizeQ];
-   // //   nz_dirTE  = &NormalZ[dirTE  *sizeQ];
-   // //   nz_dirBW  = &NormalZ[dirBW  *sizeQ];
-   // //   nz_dirBE  = &NormalZ[dirBE  *sizeQ];
-   // //   nz_dirTW  = &NormalZ[dirTW  *sizeQ];
-   // //   nz_dirTN  = &NormalZ[dirTN  *sizeQ];
-   // //   nz_dirBS  = &NormalZ[dirBS  *sizeQ];
-   // //   nz_dirBN  = &NormalZ[dirBN  *sizeQ];
-   // //   nz_dirTS  = &NormalZ[dirTS  *sizeQ];
-   // //   nz_dirTNE = &NormalZ[dirTNE *sizeQ];
-   // //   nz_dirTSW = &NormalZ[dirTSW *sizeQ];
-   // //   nz_dirTSE = &NormalZ[dirTSE *sizeQ];
-   // //   nz_dirTNW = &NormalZ[dirTNW *sizeQ];
-   // //   nz_dirBNE = &NormalZ[dirBNE *sizeQ];
-   // //   nz_dirBSW = &NormalZ[dirBSW *sizeQ];
-   // //   nz_dirBSE = &NormalZ[dirBSE *sizeQ];
-   // //   nz_dirBNW = &NormalZ[dirBNW *sizeQ];
+   // //   nz_dirE   = &NormalZ[E   * numberOfBCnodes];
+   // //   nz_dirW   = &NormalZ[W   * numberOfBCnodes];
+   // //   nz_dirN   = &NormalZ[N   * numberOfBCnodes];
+   // //   nz_dirS   = &NormalZ[S   * numberOfBCnodes];
+   // //   nz_dirT   = &NormalZ[T   * numberOfBCnodes];
+   // //   nz_dirB   = &NormalZ[B   * numberOfBCnodes];
+   // //   nz_dirNE  = &NormalZ[NE  * numberOfBCnodes];
+   // //   nz_dirSW  = &NormalZ[SW  * numberOfBCnodes];
+   // //   nz_dirSE  = &NormalZ[SE  * numberOfBCnodes];
+   // //   nz_dirNW  = &NormalZ[NW  * numberOfBCnodes];
+   // //   nz_dirTE  = &NormalZ[TE  * numberOfBCnodes];
+   // //   nz_dirBW  = &NormalZ[BW  * numberOfBCnodes];
+   // //   nz_dirBE  = &NormalZ[BE  * numberOfBCnodes];
+   // //   nz_dirTW  = &NormalZ[TW  * numberOfBCnodes];
+   // //   nz_dirTN  = &NormalZ[TN  * numberOfBCnodes];
+   // //   nz_dirBS  = &NormalZ[BS  * numberOfBCnodes];
+   // //   nz_dirBN  = &NormalZ[BN  * numberOfBCnodes];
+   // //   nz_dirTS  = &NormalZ[TS  * numberOfBCnodes];
+   // //   nz_dirTNE = &NormalZ[TNE * numberOfBCnodes];
+   // //   nz_dirTSW = &NormalZ[TSW * numberOfBCnodes];
+   // //   nz_dirTSE = &NormalZ[TSE * numberOfBCnodes];
+   // //   nz_dirTNW = &NormalZ[TNW * numberOfBCnodes];
+   // //   nz_dirBNE = &NormalZ[BNE * numberOfBCnodes];
+   // //   nz_dirBSW = &NormalZ[BSW * numberOfBCnodes];
+   // //   nz_dirBSE = &NormalZ[BSE * numberOfBCnodes];
+   // //   nz_dirBNW = &NormalZ[BNW * numberOfBCnodes];
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //bool changeCell = false;
    //   unsigned int KQK  = k_Q[k];
@@ -2190,38 +2190,38 @@ extern "C" __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //   unsigned int ktne = KQK;
    //   unsigned int kbsw = neighborZ[ksw];
    //   ////////////////////////////////////////////////////////////////////////////////
-   //   real f_W    = (D.f[dirE   ])[ke   ];
-   //   real f_E    = (D.f[dirW   ])[kw   ];
-   //   real f_S    = (D.f[dirN   ])[kn   ];
-   //   real f_N    = (D.f[dirS   ])[ks   ];
-   //   real f_B    = (D.f[dirT   ])[kt   ];
-   //   real f_T    = (D.f[dirB   ])[kb   ];
-   //   real f_SW   = (D.f[dirNE  ])[kne  ];
-   //   real f_NE   = (D.f[dirSW  ])[ksw  ];
-   //   real f_NW   = (D.f[dirSE  ])[kse  ];
-   //   real f_SE   = (D.f[dirNW  ])[knw  ];
-   //   real f_BW   = (D.f[dirTE  ])[kte  ];
-   //   real f_TE   = (D.f[dirBW  ])[kbw  ];
-   //   real f_TW   = (D.f[dirBE  ])[kbe  ];
-   //   real f_BE   = (D.f[dirTW  ])[ktw  ];
-   //   real f_BS   = (D.f[dirTN  ])[ktn  ];
-   //   real f_TN   = (D.f[dirBS  ])[kbs  ];
-   //   real f_TS   = (D.f[dirBN  ])[kbn  ];
-   //   real f_BN   = (D.f[dirTS  ])[kts  ];
-   //   real f_BSW  = (D.f[dirTNE ])[ktne ];
-   //   real f_BNE  = (D.f[dirTSW ])[ktsw ];
-   //   real f_BNW  = (D.f[dirTSE ])[ktse ];
-   //   real f_BSE  = (D.f[dirTNW ])[ktnw ];
-   //   real f_TSW  = (D.f[dirBNE ])[kbne ];
-   //   real f_TNE  = (D.f[dirBSW ])[kbsw ];
-   //   real f_TNW  = (D.f[dirBSE ])[kbse ];
-   //   real f_TSE  = (D.f[dirBNW ])[kbnw ];
+   //   real f_W    = (D.f[E   ])[ke   ];
+   //   real f_E    = (D.f[W   ])[kw   ];
+   //   real f_S    = (D.f[N   ])[kn   ];
+   //   real f_N    = (D.f[S   ])[ks   ];
+   //   real f_B    = (D.f[T   ])[kt   ];
+   //   real f_T    = (D.f[B   ])[kb   ];
+   //   real f_SW   = (D.f[NE  ])[kne  ];
+   //   real f_NE   = (D.f[SW  ])[ksw  ];
+   //   real f_NW   = (D.f[SE  ])[kse  ];
+   //   real f_SE   = (D.f[NW  ])[knw  ];
+   //   real f_BW   = (D.f[TE  ])[kte  ];
+   //   real f_TE   = (D.f[BW  ])[kbw  ];
+   //   real f_TW   = (D.f[BE  ])[kbe  ];
+   //   real f_BE   = (D.f[TW  ])[ktw  ];
+   //   real f_BS   = (D.f[TN  ])[ktn  ];
+   //   real f_TN   = (D.f[BS  ])[kbs  ];
+   //   real f_TS   = (D.f[BN  ])[kbn  ];
+   //   real f_BN   = (D.f[TS  ])[kts  ];
+   //   real f_BSW  = (D.f[TNE ])[ktne ];
+   //   real f_BNE  = (D.f[TSW ])[ktsw ];
+   //   real f_BNW  = (D.f[TSE ])[ktse ];
+   //   real f_BSE  = (D.f[TNW ])[ktnw ];
+   //   real f_TSW  = (D.f[BNE ])[kbne ];
+   //   real f_TNE  = (D.f[BSW ])[kbsw ];
+   //   real f_TNW  = (D.f[BSE ])[kbse ];
+   //   real f_TSE  = (D.f[BNW ])[kbnw ];
    //   ////////////////////////////////////////////////////////////////////////////////
    //   // real feq, q;
    //   real vx1, vx2, vx3, drho;
    //   drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
    //             f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-   //             f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+   //             f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
    //   vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
    //             ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -2241,63 +2241,63 @@ extern "C" __global__ void ParticleNoSlipDeviceComp27(real* coordX,
    //   //////////////////////////////////////////////////////////////////////////
    //   if (isEvenTimestep==false)
    //   {
-   //      D.f[dirE   ] = &DD[dirE   *size_Mat];
-   //      D.f[dirW   ] = &DD[dirW   *size_Mat];
-   //      D.f[dirN   ] = &DD[dirN   *size_Mat];
-   //      D.f[dirS   ] = &DD[dirS   *size_Mat];
-   //      D.f[dirT   ] = &DD[dirT   *size_Mat];
-   //      D.f[dirB   ] = &DD[dirB   *size_Mat];
-   //      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   //      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   //      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   //      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   //      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   //      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   //      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   //      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   //      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   //      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   //      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   //      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   //      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   //      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   //      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   //      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   //      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   //      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   //      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   //      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   //      D.f[E   ] = &DD[E   *size_Mat];
+   //      D.f[W   ] = &DD[W   *size_Mat];
+   //      D.f[N   ] = &DD[N   *size_Mat];
+   //      D.f[S   ] = &DD[S   *size_Mat];
+   //      D.f[T   ] = &DD[T   *size_Mat];
+   //      D.f[B   ] = &DD[B   *size_Mat];
+   //      D.f[NE  ] = &DD[NE  *size_Mat];
+   //      D.f[SW  ] = &DD[SW  *size_Mat];
+   //      D.f[SE  ] = &DD[SE  *size_Mat];
+   //      D.f[NW  ] = &DD[NW  *size_Mat];
+   //      D.f[TE  ] = &DD[TE  *size_Mat];
+   //      D.f[BW  ] = &DD[BW  *size_Mat];
+   //      D.f[BE  ] = &DD[BE  *size_Mat];
+   //      D.f[TW  ] = &DD[TW  *size_Mat];
+   //      D.f[TN  ] = &DD[TN  *size_Mat];
+   //      D.f[BS  ] = &DD[BS  *size_Mat];
+   //      D.f[BN  ] = &DD[BN  *size_Mat];
+   //      D.f[TS  ] = &DD[TS  *size_Mat];
+   //      D.f[REST] = &DD[REST*size_Mat];
+   //      D.f[TNE ] = &DD[TNE *size_Mat];
+   //      D.f[TSW ] = &DD[TSW *size_Mat];
+   //      D.f[TSE ] = &DD[TSE *size_Mat];
+   //      D.f[TNW ] = &DD[TNW *size_Mat];
+   //      D.f[BNE ] = &DD[BNE *size_Mat];
+   //      D.f[BSW ] = &DD[BSW *size_Mat];
+   //      D.f[BSE ] = &DD[BSE *size_Mat];
+   //      D.f[BNW ] = &DD[BNW *size_Mat];
    //   } 
    //   else
    //   {
-   //      D.f[dirW   ] = &DD[dirE   *size_Mat];
-   //      D.f[dirE   ] = &DD[dirW   *size_Mat];
-   //      D.f[dirS   ] = &DD[dirN   *size_Mat];
-   //      D.f[dirN   ] = &DD[dirS   *size_Mat];
-   //      D.f[dirB   ] = &DD[dirT   *size_Mat];
-   //      D.f[dirT   ] = &DD[dirB   *size_Mat];
-   //      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-   //      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-   //      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-   //      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-   //      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-   //      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-   //      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-   //      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-   //      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-   //      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-   //      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-   //      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-   //      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-   //      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-   //      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-   //      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-   //      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-   //      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-   //      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-   //      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+   //      D.f[W   ] = &DD[E   *size_Mat];
+   //      D.f[E   ] = &DD[W   *size_Mat];
+   //      D.f[S   ] = &DD[N   *size_Mat];
+   //      D.f[N   ] = &DD[S   *size_Mat];
+   //      D.f[B   ] = &DD[T   *size_Mat];
+   //      D.f[T   ] = &DD[B   *size_Mat];
+   //      D.f[SW  ] = &DD[NE  *size_Mat];
+   //      D.f[NE  ] = &DD[SW  *size_Mat];
+   //      D.f[NW  ] = &DD[SE  *size_Mat];
+   //      D.f[SE  ] = &DD[NW  *size_Mat];
+   //      D.f[BW  ] = &DD[TE  *size_Mat];
+   //      D.f[TE  ] = &DD[BW  *size_Mat];
+   //      D.f[TW  ] = &DD[BE  *size_Mat];
+   //      D.f[BE  ] = &DD[TW  *size_Mat];
+   //      D.f[BS  ] = &DD[TN  *size_Mat];
+   //      D.f[TN  ] = &DD[BS  *size_Mat];
+   //      D.f[TS  ] = &DD[BN  *size_Mat];
+   //      D.f[BN  ] = &DD[TS  *size_Mat];
+   //      D.f[REST] = &DD[REST*size_Mat];
+   //      D.f[TNE ] = &DD[BSW *size_Mat];
+   //      D.f[TSW ] = &DD[BNE *size_Mat];
+   //      D.f[TSE ] = &DD[BNW *size_Mat];
+   //      D.f[TNW ] = &DD[BSE *size_Mat];
+   //      D.f[BNE ] = &DD[TSW *size_Mat];
+   //      D.f[BSW ] = &DD[TNE *size_Mat];
+   //      D.f[BSE ] = &DD[TNW *size_Mat];
+   //      D.f[BNW ] = &DD[TSE *size_Mat];
    //   }
    //}
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/PrecursorBC.cu b/src/gpu/VirtualFluids_GPU/GPU/PrecursorBC.cu
index e03d83055f83d89661c100a9613ec33635d59455..aa9bcfa160bea69d726e175e93945da6881eb55f 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/PrecursorBC.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/PrecursorBC.cu
@@ -1,18 +1,20 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
+#include <lbm/constants/D3Q27.h>
 #include <lbm/MacroscopicQuantities.h>
 
 #include "VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cuh"
+#include "VirtualFluids_GPU/GPU/KernelUtilities.h"
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
-extern "C" __global__ void QPrecursorDeviceCompZeroPress( 	int* k_Q,
-															int numberOfBCNodes,
+extern "C" __global__ void QPrecursorDeviceCompZeroPress( 	int* subgridDistanceIndices,
+															int numberOfBCnodes,
                                                             int sizeQ,
-                                                            real om1,
-															real* DD,
-                                                            real* QQ,
+                                                            real omega,
+															real* distributions,
+                                                            real* subgridDistances,
                                                             uint* neighborX, 
                                                             uint* neighborY, 
                                                             uint* neighborZ,
@@ -35,12 +37,12 @@ extern "C" __global__ void QPrecursorDeviceCompZeroPress( 	int* k_Q,
                                                             real velocityZ,
 															real tRatio,
                                                             real velocityRatio,
-															unsigned long long size_Mat,
+															unsigned long long numberOfLBnodes,
 															bool isEvenTimestep)
 {
     const unsigned k = vf::gpu::getNodeIndex();
 
-    if(k>=numberOfBCNodes) return;
+    if(k>=numberOfBCnodes) return;
 
     ////////////////////////////////////////////////////////////////////////////////
     // interpolation of velocity
@@ -49,6 +51,7 @@ extern "C" __global__ void QPrecursorDeviceCompZeroPress( 	int* k_Q,
 
     uint kNT = neighborsNT[k];
     real dNT = weightsNT[k];
+
     if(dNT < 1e6)
     {
         uint kNB = neighborsNB[k];
@@ -86,236 +89,330 @@ extern "C" __global__ void QPrecursorDeviceCompZeroPress( 	int* k_Q,
     real VeloZ = (velocityZ + (1.f-tRatio)*vzLastInterpd + tRatio*vzNextInterpd)/velocityRatio;
     // From here on just a copy of QVelDeviceCompZeroPress
     ////////////////////////////////////////////////////////////////////////////////
-    DistributionReferences27 Q = vf::gpu::getDistributionReferences27(QQ, sizeQ, true);
-    
-    vf::gpu::DistributionWrapper distWrapper = vf::gpu::DistributionWrapper(DD, size_Mat, !isEvenTimestep, k_Q[k], neighborX, neighborY, neighborZ);
-    real (&f)[27] = distWrapper.distribution.f;
+
+    Distributions27 dist;
+    getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+
+    unsigned int KQK  = subgridDistanceIndices[k];
+    unsigned int kzero= KQK;
+    unsigned int ke   = KQK;
+    unsigned int kw   = neighborX[KQK];
+    unsigned int kn   = KQK;
+    unsigned int ks   = neighborY[KQK];
+    unsigned int kt   = KQK;
+    unsigned int kb   = neighborZ[KQK];
+    unsigned int ksw  = neighborY[kw];
+    unsigned int kne  = KQK;
+    unsigned int kse  = ks;
+    unsigned int knw  = kw;
+    unsigned int kbw  = neighborZ[kw];
+    unsigned int kte  = KQK;
+    unsigned int kbe  = kb;
+    unsigned int ktw  = kw;
+    unsigned int kbs  = neighborZ[ks];
+    unsigned int ktn  = KQK;
+    unsigned int kbn  = kb;
+    unsigned int kts  = ks;
+    unsigned int ktse = ks;
+    unsigned int kbnw = kbw;
+    unsigned int ktnw = kw;
+    unsigned int kbse = kbs;
+    unsigned int ktsw = ksw;
+    unsigned int kbne = kb;
+    unsigned int ktne = KQK;
+    unsigned int kbsw = neighborZ[ksw];
 
     ////////////////////////////////////////////////////////////////////////////////
-    real drho = vf::lbm::getDensity(f);
-    real vx1 = vf::lbm::getCompressibleVelocityX1(f, drho);
-    real vx2 = vf::lbm::getCompressibleVelocityX2(f, drho);
-    real vx3 = vf::lbm::getCompressibleVelocityX3(f, drho);
-
-    if(k==16383 || k==0) printf("k %d kQ %d drho = %f u %f v %f w %f\n",k, k_Q[k], drho, vx1, vx2, vx3);
-    real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
-
-    // have to make a copy of the distributions so we can write to them later
-    real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-        f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
-
-    f_W    = f[vf::lbm::dir::W   ];
-    f_E    = f[vf::lbm::dir::E   ];
-    f_S    = f[vf::lbm::dir::S   ];
-    f_N    = f[vf::lbm::dir::N   ];
-    f_B    = f[vf::lbm::dir::B   ];
-    f_T    = f[vf::lbm::dir::T   ];
-    f_SW   = f[vf::lbm::dir::SW  ];
-    f_NE   = f[vf::lbm::dir::NE  ];
-    f_NW   = f[vf::lbm::dir::NW  ];
-    f_SE   = f[vf::lbm::dir::SE  ];
-    f_BW   = f[vf::lbm::dir::BW  ];
-    f_TE   = f[vf::lbm::dir::TE  ];
-    f_TW   = f[vf::lbm::dir::TW  ];
-    f_BE   = f[vf::lbm::dir::BE  ];
-    f_BS   = f[vf::lbm::dir::BS  ];
-    f_TN   = f[vf::lbm::dir::TN  ];
-    f_TS   = f[vf::lbm::dir::TS  ];
-    f_BN   = f[vf::lbm::dir::BN  ];
-    f_BSW  = f[vf::lbm::dir::BSW ];
-    f_BNE  = f[vf::lbm::dir::BNE ];
-    f_BNW  = f[vf::lbm::dir::BNW ];
-    f_BSE  = f[vf::lbm::dir::BSE ];
-    f_TSW  = f[vf::lbm::dir::TSW ];
-    f_TNE  = f[vf::lbm::dir::TNE ];
-    f_TNW  = f[vf::lbm::dir::TNW ];
-    f_TSE  = f[vf::lbm::dir::TSE ];
+    //! - Set local distributions
+    //!
+    real f_W    = (dist.f[E   ])[ke   ];
+    real f_E    = (dist.f[W   ])[kw   ];
+    real f_S    = (dist.f[N   ])[kn   ];
+    real f_N    = (dist.f[S   ])[ks   ];
+    real f_B    = (dist.f[T   ])[kt   ];
+    real f_T    = (dist.f[B   ])[kb   ];
+    real f_SW   = (dist.f[NE  ])[kne  ];
+    real f_NE   = (dist.f[SW  ])[ksw  ];
+    real f_NW   = (dist.f[SE  ])[kse  ];
+    real f_SE   = (dist.f[NW  ])[knw  ];
+    real f_BW   = (dist.f[TE  ])[kte  ];
+    real f_TE   = (dist.f[BW  ])[kbw  ];
+    real f_TW   = (dist.f[BE  ])[kbe  ];
+    real f_BE   = (dist.f[TW  ])[ktw  ];
+    real f_BS   = (dist.f[TN  ])[ktn  ];
+    real f_TN   = (dist.f[BS  ])[kbs  ];
+    real f_TS   = (dist.f[BN  ])[kbn  ];
+    real f_BN   = (dist.f[TS  ])[kts  ];
+    real f_BSW  = (dist.f[TNE ])[ktne ];
+    real f_BNE  = (dist.f[TSW ])[ktsw ];
+    real f_BNW  = (dist.f[TSE ])[ktse ];
+    real f_BSE  = (dist.f[TNW ])[ktnw ];
+    real f_TSW  = (dist.f[BNE ])[kbne ];
+    real f_TNE  = (dist.f[BSW ])[kbsw ];
+    real f_TNW  = (dist.f[BSE ])[kbse ];
+    real f_TSE  = (dist.f[BNW ])[kbnw ];
+    
+    SubgridDistances27 subgridD;
+    getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+    
     ////////////////////////////////////////////////////////////////////////////////
-    real feq, q;
+      real drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
+                     f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
+                     f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[REST])[kzero]); 
+
+      real vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                      ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
+                      (f_E - f_W)) / (c1o1 + drho); 
+         
 
+      real vx2    =   ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                       ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
+                       (f_N - f_S)) / (c1o1 + drho); 
+
+      real vx3    =   (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
+                       (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
+                       (f_T - f_B)) / (c1o1 + drho); 
+
+    
+    if(k==16383 || k==0) printf("k %d kQ %d drho = %f u %f v %f w %f\n",k, KQK, drho, vx1, vx2, vx3);
+      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
     //////////////////////////////////////////////////////////////////////////
-    q = Q.f[dirE][k];
-    if (q>=c0o1 && q<=c1o1)
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+    real feq, q, velocityLB, velocityBC;
+    q = (subgridD.q[E])[k];
+    if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
     {
-        feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::W]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
+        velocityLB = vx1;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+        velocityBC = VeloX;
+        (dist.f[W])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = Q.f[dirW][k];
+    q = (subgridD.q[W])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::E]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
+        velocityLB = -vx1;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+        velocityBC = -VeloX;
+        (dist.f[E])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = Q.f[dirN][k];
+    q = (subgridD.q[N])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::S]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
+        velocityLB = vx2;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+        velocityBC = VeloY;
+        (dist.f[S])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = Q.f[dirS][k];
+    q = (subgridD.q[S])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::N]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
+        velocityLB = -vx2;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+        velocityBC = -VeloY;
+        (dist.f[N])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = Q.f[dirT][k];
+    q = (subgridD.q[T])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::B]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
+        velocityLB = vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+        velocityBC = VeloZ;
+        (dist.f[B])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = Q.f[dirB][k];
+    q = (subgridD.q[B])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::T]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
+        velocityLB = -vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+        velocityBC = -VeloZ;
+        (dist.f[T])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, omega, drho, velocityBC, c2o27);
     }
 
-    q = Q.f[dirNE][k];
+    q = (subgridD.q[NE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::SW]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+        velocityLB = vx1 + vx2;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = VeloX + VeloY;
+        (dist.f[SW])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirSW][k];
+    q = (subgridD.q[SW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::NE]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+        velocityLB = -vx1 - vx2;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = -VeloX - VeloY;
+        (dist.f[NE])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirSE][k];
+    q = (subgridD.q[SE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::NW]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+        velocityLB = vx1 - vx2;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = VeloX - VeloY;
+        (dist.f[NW])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirNW][k];
+    q = (subgridD.q[NW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::SE]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+        velocityLB = -vx1 + vx2;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = -VeloX + VeloY;
+        (dist.f[SE])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirTE][k];
+    q = (subgridD.q[TE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BW]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = vx1 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = VeloX + VeloZ;
+        (dist.f[BW])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirBW][k];
+    q = (subgridD.q[BW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TE]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = -vx1 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = -VeloX - VeloZ;
+        (dist.f[TE])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirBE][k];
+    q = (subgridD.q[BE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TW]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = vx1 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = VeloX - VeloZ;
+        (dist.f[TW])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirTW][k];
+    q = (subgridD.q[TW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BE]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = -vx1 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = -VeloX + VeloZ;
+        (dist.f[BE])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirTN][k];
+    q = (subgridD.q[TN])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BS]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = vx2 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = VeloY + VeloZ;
+        (dist.f[BS])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirBS][k];
+    q = (subgridD.q[BS])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TN]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = -vx2 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = -VeloY - VeloZ;
+        (dist.f[TN])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirBN][k];
+    q = (subgridD.q[BN])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TS]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = vx2 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = VeloY - VeloZ;
+        (dist.f[TS])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirTS][k];
+    q = (subgridD.q[TS])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BN]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+        velocityLB = -vx2 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+        velocityBC = -VeloY + VeloZ;
+        (dist.f[BN])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, omega, drho, velocityBC, c1o54);
     }
 
-    q = Q.f[dirTNE][k];
+    q = (subgridD.q[TNE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BSW]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = vx1 + vx2 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = VeloX + VeloY + VeloZ;
+        (dist.f[BSW])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirBSW][k];
+    q = (subgridD.q[BSW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TNE]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = -vx1 - vx2 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = -VeloX - VeloY - VeloZ;
+        (dist.f[TNE])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirBNE][k];
+    q = (subgridD.q[BNE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TSW]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = vx1 + vx2 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = VeloX + VeloY - VeloZ;
+        (dist.f[TSW])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirTSW][k];
+    q = (subgridD.q[TSW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BNE]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = -vx1 - vx2 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = -VeloX - VeloY + VeloZ;
+        (dist.f[BNE])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirTSE][k];
+    q = (subgridD.q[TSE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BNW]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = vx1 - vx2 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = VeloX - VeloY + VeloZ;
+        (dist.f[BNW])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirBNW][k];
+    q = (subgridD.q[BNW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TSE]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = -vx1 + vx2 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = -VeloX + VeloY - VeloZ;
+        (dist.f[TSE])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirBSE][k];
+    q = (subgridD.q[BSE])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::TNW]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = vx1 - vx2 - vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = VeloX - VeloY - VeloZ;
+        (dist.f[TNW])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, omega, drho, velocityBC, c1o216);
     }
 
-    q = Q.f[dirTNW][k];
+    q = (subgridD.q[TNW])[k];
     if (q>=c0o1 && q<=c1o1)
     {
-        feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-        f[vf::lbm::dir::BSE]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+        velocityLB = -vx1 + vx2 + vx3;
+        feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+        velocityBC = -VeloX + VeloY + VeloZ;
+        (dist.f[BSE])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, omega, drho, velocityBC, c1o216);
     }
-    //////////////////////////////////////////////////////////////////////////
-    distWrapper.write();
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu
index c358fe184f32f0e778b913dc54a321e20e0ebadf..2c4959eed943b4b72493a0c36630d8bc7ec83586 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu
@@ -1,9 +1,11 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
-#include <lbm/constants/NumericConstants.h>
+#include "lbm/constants/D3Q27.h"
+#include "lbm/constants/NumericConstants.h"
+#include "KernelUtilities.h"
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void QInflowScaleByPressDevice27(  real* rhoBC,
@@ -95,120 +97,120 @@ extern "C" __global__ void QInflowScaleByPressDevice27(  real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real f1_E    = (D.f[dirE   ])[k1e   ];
-      real f1_W    = (D.f[dirW   ])[k1w   ];
-      real f1_N    = (D.f[dirN   ])[k1n   ];
-      real f1_S    = (D.f[dirS   ])[k1s   ];
-      real f1_T    = (D.f[dirT   ])[k1t   ];
-      real f1_B    = (D.f[dirB   ])[k1b   ];
-      real f1_NE   = (D.f[dirNE  ])[k1ne  ];
-      real f1_SW   = (D.f[dirSW  ])[k1sw  ];
-      real f1_SE   = (D.f[dirSE  ])[k1se  ];
-      real f1_NW   = (D.f[dirNW  ])[k1nw  ];
-      real f1_TE   = (D.f[dirTE  ])[k1te  ];
-      real f1_BW   = (D.f[dirBW  ])[k1bw  ];
-      real f1_BE   = (D.f[dirBE  ])[k1be  ];
-      real f1_TW   = (D.f[dirTW  ])[k1tw  ];
-      real f1_TN   = (D.f[dirTN  ])[k1tn  ];
-      real f1_BS   = (D.f[dirBS  ])[k1bs  ];
-      real f1_BN   = (D.f[dirBN  ])[k1bn  ];
-      real f1_TS   = (D.f[dirTS  ])[k1ts  ];
-      //real f1_ZERO = (D.f[dirZERO])[k1zero];
-      real f1_TNE  = (D.f[dirTNE ])[k1tne ];
-      real f1_TSW  = (D.f[dirTSW ])[k1tsw ];
-      real f1_TSE  = (D.f[dirTSE ])[k1tse ];
-      real f1_TNW  = (D.f[dirTNW ])[k1tnw ];
-      real f1_BNE  = (D.f[dirBNE ])[k1bne ];
-      real f1_BSW  = (D.f[dirBSW ])[k1bsw ];
-      real f1_BSE  = (D.f[dirBSE ])[k1bse ];
-      real f1_BNW  = (D.f[dirBNW ])[k1bnw ];
+      real f1_E    = (D.f[E   ])[k1e   ];
+      real f1_W    = (D.f[W   ])[k1w   ];
+      real f1_N    = (D.f[N   ])[k1n   ];
+      real f1_S    = (D.f[S   ])[k1s   ];
+      real f1_T    = (D.f[T   ])[k1t   ];
+      real f1_B    = (D.f[B   ])[k1b   ];
+      real f1_NE   = (D.f[NE  ])[k1ne  ];
+      real f1_SW   = (D.f[SW  ])[k1sw  ];
+      real f1_SE   = (D.f[SE  ])[k1se  ];
+      real f1_NW   = (D.f[NW  ])[k1nw  ];
+      real f1_TE   = (D.f[TE  ])[k1te  ];
+      real f1_BW   = (D.f[BW  ])[k1bw  ];
+      real f1_BE   = (D.f[BE  ])[k1be  ];
+      real f1_TW   = (D.f[TW  ])[k1tw  ];
+      real f1_TN   = (D.f[TN  ])[k1tn  ];
+      real f1_BS   = (D.f[BS  ])[k1bs  ];
+      real f1_BN   = (D.f[BN  ])[k1bn  ];
+      real f1_TS   = (D.f[TS  ])[k1ts  ];
+      //real f1_ZERO = (D.f[REST])[k1zero];
+      real f1_TNE  = (D.f[TNE ])[k1tne ];
+      real f1_TSW  = (D.f[TSW ])[k1tsw ];
+      real f1_TSE  = (D.f[TSE ])[k1tse ];
+      real f1_TNW  = (D.f[TNW ])[k1tnw ];
+      real f1_BNE  = (D.f[BNE ])[k1bne ];
+      real f1_BSW  = (D.f[BSW ])[k1bsw ];
+      real f1_BSE  = (D.f[BSE ])[k1bse ];
+      real f1_BNW  = (D.f[BNW ])[k1bnw ];
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real f_E    = (D.f[dirE   ])[ke   ];
-      real f_W    = (D.f[dirW   ])[kw   ];
-      real f_N    = (D.f[dirN   ])[kn   ];
-      real f_S    = (D.f[dirS   ])[ks   ];
-      real f_T    = (D.f[dirT   ])[kt   ];
-      real f_B    = (D.f[dirB   ])[kb   ];
-      real f_NE   = (D.f[dirNE  ])[kne  ];
-      real f_SW   = (D.f[dirSW  ])[ksw  ];
-      real f_SE   = (D.f[dirSE  ])[kse  ];
-      real f_NW   = (D.f[dirNW  ])[knw  ];
-      real f_TE   = (D.f[dirTE  ])[kte  ];
-      real f_BW   = (D.f[dirBW  ])[kbw  ];
-      real f_BE   = (D.f[dirBE  ])[kbe  ];
-      real f_TW   = (D.f[dirTW  ])[ktw  ];
-      real f_TN   = (D.f[dirTN  ])[ktn  ];
-      real f_BS   = (D.f[dirBS  ])[kbs  ];
-      real f_BN   = (D.f[dirBN  ])[kbn  ];
-      real f_TS   = (D.f[dirTS  ])[kts  ];
-      //real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_TNE  = (D.f[dirTNE ])[ktne ];
-      real f_TSW  = (D.f[dirTSW ])[ktsw ];
-      real f_TSE  = (D.f[dirTSE ])[ktse ];
-      real f_TNW  = (D.f[dirTNW ])[ktnw ];
-      real f_BNE  = (D.f[dirBNE ])[kbne ];
-      real f_BSW  = (D.f[dirBSW ])[kbsw ];
-      real f_BSE  = (D.f[dirBSE ])[kbse ];
-      real f_BNW  = (D.f[dirBNW ])[kbnw ];
+      real f_E    = (D.f[E   ])[ke   ];
+      real f_W    = (D.f[W   ])[kw   ];
+      real f_N    = (D.f[N   ])[kn   ];
+      real f_S    = (D.f[S   ])[ks   ];
+      real f_T    = (D.f[T   ])[kt   ];
+      real f_B    = (D.f[B   ])[kb   ];
+      real f_NE   = (D.f[NE  ])[kne  ];
+      real f_SW   = (D.f[SW  ])[ksw  ];
+      real f_SE   = (D.f[SE  ])[kse  ];
+      real f_NW   = (D.f[NW  ])[knw  ];
+      real f_TE   = (D.f[TE  ])[kte  ];
+      real f_BW   = (D.f[BW  ])[kbw  ];
+      real f_BE   = (D.f[BE  ])[kbe  ];
+      real f_TW   = (D.f[TW  ])[ktw  ];
+      real f_TN   = (D.f[TN  ])[ktn  ];
+      real f_BS   = (D.f[BS  ])[kbs  ];
+      real f_BN   = (D.f[BN  ])[kbn  ];
+      real f_TS   = (D.f[TS  ])[kts  ];
+      //real f_ZERO = (D.f[REST])[kzero];
+      real f_TNE  = (D.f[TNE ])[ktne ];
+      real f_TSW  = (D.f[TSW ])[ktsw ];
+      real f_TSE  = (D.f[TSE ])[ktse ];
+      real f_TNW  = (D.f[TNW ])[ktnw ];
+      real f_BNE  = (D.f[BNE ])[kbne ];
+      real f_BSW  = (D.f[BSW ])[kbsw ];
+      real f_BSE  = (D.f[BSE ])[kbse ];
+      real f_BNW  = (D.f[BNW ])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
       // real vx1, vx2, vx3;
       real drho, drho1;
@@ -216,10 +218,10 @@ extern "C" __global__ void QInflowScaleByPressDevice27(  real* rhoBC,
 	  //Dichte
       drho1  =  f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW +
                 f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + 
-                f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((D.f[dirZERO])[k1zero]); 
+                f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((D.f[REST])[k1zero]); 
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
       //////////////////////////////////////////////////////////////////////////
 	  //Schallgeschwindigkeit
 	  real cs = c1o1 / sqrtf(c3o1);
@@ -319,106 +321,106 @@ extern "C" __global__ void QInflowScaleByPressDevice27(  real* rhoBC,
 	  //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////
       //__syncthreads();
 	  // -X
-	  //(D.f[dirE   ])[ke   ] = f_E   ;
-	  //(D.f[dirSE  ])[kse  ] = f_SE  ;
-	  //(D.f[dirNE  ])[kne  ] = f_NE  ;
-	  //(D.f[dirBE  ])[kbe  ] = f_BE  ;
-	  //(D.f[dirTE  ])[kte  ] = f_TE  ;
-	  //(D.f[dirTSE ])[ktse ] = f_TSE ;
-	  //(D.f[dirTNE ])[ktne ] = f_TNE ;
-	  //(D.f[dirBSE ])[kbse ] = f_BSE ;
-	  //(D.f[dirBNE ])[kbne ] = f_BNE ;     
+	  //(D.f[E   ])[ke   ] = f_E   ;
+	  //(D.f[SE  ])[kse  ] = f_SE  ;
+	  //(D.f[NE  ])[kne  ] = f_NE  ;
+	  //(D.f[BE  ])[kbe  ] = f_BE  ;
+	  //(D.f[TE  ])[kte  ] = f_TE  ;
+	  //(D.f[TSE ])[ktse ] = f_TSE ;
+	  //(D.f[TNE ])[ktne ] = f_TNE ;
+	  //(D.f[BSE ])[kbse ] = f_BSE ;
+	  //(D.f[BNE ])[kbne ] = f_BNE ;     
 	  // X
-	  (D.f[dirW   ])[kw   ] = f_W   ;
-	  (D.f[dirSW  ])[ksw  ] = f_SW  ;
-	  (D.f[dirNW  ])[knw  ] = f_NW  ;
-	  (D.f[dirBW  ])[kbw  ] = f_BW  ;
-	  (D.f[dirTW  ])[ktw  ] = f_TW  ;
-	  (D.f[dirTSW ])[ktsw ] = f_TSW ;
-	  (D.f[dirTNW ])[ktnw ] = f_TNW ;
-	  (D.f[dirBSW ])[kbsw ] = f_BSW ;
-	  (D.f[dirBNW ])[kbnw ] = f_BNW ;     
+	  (D.f[W   ])[kw   ] = f_W   ;
+	  (D.f[SW  ])[ksw  ] = f_SW  ;
+	  (D.f[NW  ])[knw  ] = f_NW  ;
+	  (D.f[BW  ])[kbw  ] = f_BW  ;
+	  (D.f[TW  ])[ktw  ] = f_TW  ;
+	  (D.f[TSW ])[ktsw ] = f_TSW ;
+	  (D.f[TNW ])[ktnw ] = f_TNW ;
+	  (D.f[BSW ])[kbsw ] = f_BSW ;
+	  (D.f[BNW ])[kbnw ] = f_BNW ;     
 	  // Y
-	  //(D.f[dirS   ])[ks   ] = f_S   ;
-	  //(D.f[dirSE  ])[kse  ] = f_SE  ;
-	  //(D.f[dirSW  ])[ksw  ] = f_SW  ;
-	  //(D.f[dirTS  ])[kts  ] = f_TS  ;
-	  //(D.f[dirBS  ])[kbs  ] = f_BS  ;
-	  //(D.f[dirTSE ])[ktse ] = f_TSE ;
-	  //(D.f[dirTSW ])[ktsw ] = f_TSW ;
-	  //(D.f[dirBSE ])[kbse ] = f_BSE ;
-	  //(D.f[dirBSW ])[kbsw ] = f_BSW ;     
+	  //(D.f[S   ])[ks   ] = f_S   ;
+	  //(D.f[SE  ])[kse  ] = f_SE  ;
+	  //(D.f[SW  ])[ksw  ] = f_SW  ;
+	  //(D.f[TS  ])[kts  ] = f_TS  ;
+	  //(D.f[BS  ])[kbs  ] = f_BS  ;
+	  //(D.f[TSE ])[ktse ] = f_TSE ;
+	  //(D.f[TSW ])[ktsw ] = f_TSW ;
+	  //(D.f[BSE ])[kbse ] = f_BSE ;
+	  //(D.f[BSW ])[kbsw ] = f_BSW ;     
 	  // Z
-	  //(D.f[dirB   ])[kb   ] = f_B   ;
-	  //(D.f[dirBE  ])[kbe  ] = f_BE  ;
-	  //(D.f[dirBW  ])[kbw  ] = f_BW  ;
-	  //(D.f[dirBN  ])[kbn  ] = f_BN  ;
-	  //(D.f[dirBS  ])[kbs  ] = f_BS  ;
-	  //(D.f[dirBNE ])[kbne ] = f_BNE ;
-	  //(D.f[dirBNW ])[kbnw ] = f_BNW ;
-	  //(D.f[dirBSE ])[kbse ] = f_BSE ;
-	  //(D.f[dirBSW ])[kbsw ] = f_BSW ;     
+	  //(D.f[B   ])[kb   ] = f_B   ;
+	  //(D.f[BE  ])[kbe  ] = f_BE  ;
+	  //(D.f[BW  ])[kbw  ] = f_BW  ;
+	  //(D.f[BN  ])[kbn  ] = f_BN  ;
+	  //(D.f[BS  ])[kbs  ] = f_BS  ;
+	  //(D.f[BNE ])[kbne ] = f_BNE ;
+	  //(D.f[BNW ])[kbnw ] = f_BNW ;
+	  //(D.f[BSE ])[kbse ] = f_BSE ;
+	  //(D.f[BSW ])[kbsw ] = f_BSW ;     
       //////////////////////////////////////////////////////////////////////////
    }
 }
@@ -552,95 +554,95 @@ extern "C" __global__ void QPressDeviceIncompNEQ27( real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==true) //// ACHTUNG PREColl !!!!!!!!!!!!!!
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
                      f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_W    = (D.f[dirE   ])[k1e   ];
-      f1_E    = (D.f[dirW   ])[k1w   ];
-      f1_S    = (D.f[dirN   ])[k1n   ];
-      f1_N    = (D.f[dirS   ])[k1s   ];
-      f1_B    = (D.f[dirT   ])[k1t   ];
-      f1_T    = (D.f[dirB   ])[k1b   ];
-      f1_SW   = (D.f[dirNE  ])[k1ne  ];
-      f1_NE   = (D.f[dirSW  ])[k1sw  ];
-      f1_NW   = (D.f[dirSE  ])[k1se  ];
-      f1_SE   = (D.f[dirNW  ])[k1nw  ];
-      f1_BW   = (D.f[dirTE  ])[k1te  ];
-      f1_TE   = (D.f[dirBW  ])[k1bw  ];
-      f1_TW   = (D.f[dirBE  ])[k1be  ];
-      f1_BE   = (D.f[dirTW  ])[k1tw  ];
-      f1_BS   = (D.f[dirTN  ])[k1tn  ];
-      f1_TN   = (D.f[dirBS  ])[k1bs  ];
-      f1_TS   = (D.f[dirBN  ])[k1bn  ];
-      f1_BN   = (D.f[dirTS  ])[k1ts  ];
-      f1_ZERO = (D.f[dirZERO])[k1zero];
-      f1_BSW  = (D.f[dirTNE ])[k1tne ];
-      f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-      f1_BNW  = (D.f[dirTSE ])[k1tse ];
-      f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-      f1_TSW  = (D.f[dirBNE ])[k1bne ];
-      f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-      f1_TNW  = (D.f[dirBSE ])[k1bse ];
-      f1_TSE  = (D.f[dirBNW ])[k1bnw ];
+      f1_W    = (D.f[E   ])[k1e   ];
+      f1_E    = (D.f[W   ])[k1w   ];
+      f1_S    = (D.f[N   ])[k1n   ];
+      f1_N    = (D.f[S   ])[k1s   ];
+      f1_B    = (D.f[T   ])[k1t   ];
+      f1_T    = (D.f[B   ])[k1b   ];
+      f1_SW   = (D.f[NE  ])[k1ne  ];
+      f1_NE   = (D.f[SW  ])[k1sw  ];
+      f1_NW   = (D.f[SE  ])[k1se  ];
+      f1_SE   = (D.f[NW  ])[k1nw  ];
+      f1_BW   = (D.f[TE  ])[k1te  ];
+      f1_TE   = (D.f[BW  ])[k1bw  ];
+      f1_TW   = (D.f[BE  ])[k1be  ];
+      f1_BE   = (D.f[TW  ])[k1tw  ];
+      f1_BS   = (D.f[TN  ])[k1tn  ];
+      f1_TN   = (D.f[BS  ])[k1bs  ];
+      f1_TS   = (D.f[BN  ])[k1bn  ];
+      f1_BN   = (D.f[TS  ])[k1ts  ];
+      f1_ZERO = (D.f[REST])[k1zero];
+      f1_BSW  = (D.f[TNE ])[k1tne ];
+      f1_BNE  = (D.f[TSW ])[k1tsw ];
+      f1_BNW  = (D.f[TSE ])[k1tse ];
+      f1_BSE  = (D.f[TNW ])[k1tnw ];
+      f1_TSW  = (D.f[BNE ])[k1bne ];
+      f1_TNE  = (D.f[BSW ])[k1bsw ];
+      f1_TNW  = (D.f[BSE ])[k1bse ];
+      f1_TSE  = (D.f[BNW ])[k1bnw ];
 
       //////////////////////////////////////////////////////////////////////////
       real drho1    =  f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+
@@ -732,33 +734,33 @@ extern "C" __global__ void QPressDeviceIncompNEQ27( real* rhoBC,
 
       __syncthreads();
 
-      (D.f[dirE   ])[ke   ] = f1_W   ;  
-      (D.f[dirW   ])[kw   ] = f1_E   ;	
-      (D.f[dirN   ])[kn   ] = f1_S   ;	
-      (D.f[dirS   ])[ks   ] = f1_N   ;	
-      (D.f[dirT   ])[kt   ] = f1_B   ;	
-      (D.f[dirB   ])[kb   ] = f1_T   ;	
-      (D.f[dirNE  ])[kne  ] = f1_SW  ;	
-      (D.f[dirSW  ])[ksw  ] = f1_NE  ;	
-      (D.f[dirSE  ])[kse  ] = f1_NW  ;	
-      (D.f[dirNW  ])[knw  ] = f1_SE  ;	
-      (D.f[dirTE  ])[kte  ] = f1_BW  ;	
-      (D.f[dirBW  ])[kbw  ] = f1_TE  ;	
-      (D.f[dirBE  ])[kbe  ] = f1_TW  ;	
-      (D.f[dirTW  ])[ktw  ] = f1_BE  ;	
-      (D.f[dirTN  ])[ktn  ] = f1_BS  ;	
-      (D.f[dirBS  ])[kbs  ] = f1_TN  ;	
-      (D.f[dirBN  ])[kbn  ] = f1_TS  ;	
-      (D.f[dirTS  ])[kts  ] = f1_BN  ;	
-      (D.f[dirZERO])[kzero] = f1_ZERO;	
-      (D.f[dirTNE ])[ktne ] = f1_BSW ;	
-      (D.f[dirTSW ])[ktsw ] = f1_BNE ;	
-      (D.f[dirTSE ])[ktse ] = f1_BNW ;	
-      (D.f[dirTNW ])[ktnw ] = f1_BSE ;	
-      (D.f[dirBNE ])[kbne ] = f1_TSW ;	
-      (D.f[dirBSW ])[kbsw ] = f1_TNE ;	
-      (D.f[dirBSE ])[kbse ] = f1_TNW ;	
-      (D.f[dirBNW ])[kbnw ] = f1_TSE ;       
+      (D.f[E   ])[ke   ] = f1_W   ;  
+      (D.f[W   ])[kw   ] = f1_E   ;	
+      (D.f[N   ])[kn   ] = f1_S   ;	
+      (D.f[S   ])[ks   ] = f1_N   ;	
+      (D.f[T   ])[kt   ] = f1_B   ;	
+      (D.f[B   ])[kb   ] = f1_T   ;	
+      (D.f[NE  ])[kne  ] = f1_SW  ;	
+      (D.f[SW  ])[ksw  ] = f1_NE  ;	
+      (D.f[SE  ])[kse  ] = f1_NW  ;	
+      (D.f[NW  ])[knw  ] = f1_SE  ;	
+      (D.f[TE  ])[kte  ] = f1_BW  ;	
+      (D.f[BW  ])[kbw  ] = f1_TE  ;	
+      (D.f[BE  ])[kbe  ] = f1_TW  ;	
+      (D.f[TW  ])[ktw  ] = f1_BE  ;	
+      (D.f[TN  ])[ktn  ] = f1_BS  ;	
+      (D.f[BS  ])[kbs  ] = f1_TN  ;	
+      (D.f[BN  ])[kbn  ] = f1_TS  ;	
+      (D.f[TS  ])[kts  ] = f1_BN  ;	
+      (D.f[REST])[kzero] = f1_ZERO;	
+      (D.f[TNE ])[ktne ] = f1_BSW ;	
+      (D.f[TSW ])[ktsw ] = f1_BNE ;	
+      (D.f[TSE ])[ktse ] = f1_BNW ;	
+      (D.f[TNW ])[ktnw ] = f1_BSE ;	
+      (D.f[BNE ])[kbne ] = f1_TSW ;	
+      (D.f[BSW ])[kbsw ] = f1_TNE ;	
+      (D.f[BSE ])[kbse ] = f1_TNW ;	
+      (D.f[BNW ])[kbnw ] = f1_TSE ;       
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -803,33 +805,53 @@ extern "C" __global__ void QPressDeviceIncompNEQ27( real* rhoBC,
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void QPressDeviceNEQ27(real* rhoBC,
-                                             real* DD, 
-                                             int* k_Q, 
-                                             int* k_N, 
-                                             int numberOfBCnodes, 
-                                             real om1, 
+                                             real* distribution, 
+                                             int* bcNodeIndices,
+                                             int* bcNeighborIndices,
+                                             int numberOfBCnodes,
+                                             real omega1, 
                                              unsigned int* neighborX,
                                              unsigned int* neighborY,
                                              unsigned int* neighborZ,
-                                             unsigned int size_Mat, 
+                                             unsigned int numberOfLBnodes, 
                                              bool isEvenTimestep)
 {
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //////////////////////////////////////////////////////////////////////////
+	//! The pressure boundary condition is executed in the following steps
+	//!
+	////////////////////////////////////////////////////////////////////////////////
+	//! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+	//!
+   const unsigned x = threadIdx.x;    // global x-index 
+   const unsigned y = blockIdx.x;     // global y-index 
+   const unsigned z = blockIdx.y;     // global z-index 
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfBCnodes)
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(k < numberOfBCnodes)
    {
+      //////////////////////////////////////////////////////////////////////////
+      //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+      //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+      //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distribution, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int KQK  = k_Q[k];
+      //! - Set local pressure
+      //!
+      real rhoBClocal = rhoBC[k];
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int KQK  = bcNodeIndices[k];
       unsigned int kzero= KQK;
       unsigned int ke   = KQK;
       unsigned int kw   = neighborX[KQK];
@@ -858,8 +880,9 @@ extern "C" __global__ void QPressDeviceNEQ27(real* rhoBC,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      //index1
-      unsigned int K1QK  = k_N[k];
+      //! - Set neighbor indices (necessary for indirect addressing) for neighboring node
+      //!
+      unsigned int K1QK  = bcNeighborIndices[k];
       unsigned int k1zero= K1QK;
       unsigned int k1e   = K1QK;
       unsigned int k1w   = neighborX[K1QK];
@@ -887,123 +910,62 @@ extern "C" __global__ void QPressDeviceNEQ27(real* rhoBC,
       unsigned int k1bne = k1b;
       unsigned int k1tne = K1QK;
       unsigned int k1bsw = neighborZ[k1sw];
-      ////////////////////////////////////////////////////////////////////////////////
-      Distributions27 D;
-      if (isEvenTimestep==true) //// ACHTUNG PREColl !!!!!!!!!!!!!!
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-      //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
-                     f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_W    = (D.f[dirE   ])[k1e   ];
-      f1_E    = (D.f[dirW   ])[k1w   ];
-      f1_S    = (D.f[dirN   ])[k1n   ];
-      f1_N    = (D.f[dirS   ])[k1s   ];
-      f1_B    = (D.f[dirT   ])[k1t   ];
-      f1_T    = (D.f[dirB   ])[k1b   ];
-      f1_SW   = (D.f[dirNE  ])[k1ne  ];
-      f1_NE   = (D.f[dirSW  ])[k1sw  ];
-      f1_NW   = (D.f[dirSE  ])[k1se  ];
-      f1_SE   = (D.f[dirNW  ])[k1nw  ];
-      f1_BW   = (D.f[dirTE  ])[k1te  ];
-      f1_TE   = (D.f[dirBW  ])[k1bw  ];
-      f1_TW   = (D.f[dirBE  ])[k1be  ];
-      f1_BE   = (D.f[dirTW  ])[k1tw  ];
-      f1_BS   = (D.f[dirTN  ])[k1tn  ];
-      f1_TN   = (D.f[dirBS  ])[k1bs  ];
-      f1_TS   = (D.f[dirBN  ])[k1bn  ];
-      f1_BN   = (D.f[dirTS  ])[k1ts  ];
-      f1_ZERO = (D.f[dirZERO])[k1zero];
-      f1_BSW  = (D.f[dirTNE ])[k1tne ];
-      f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-      f1_BNW  = (D.f[dirTSE ])[k1tse ];
-      f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-      f1_TSW  = (D.f[dirBNE ])[k1bne ];
-      f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-      f1_TNW  = (D.f[dirBSE ])[k1bse ];
-      f1_TSE  = (D.f[dirBNW ])[k1bnw ];
-
-      //////////////////////////////////////////////////////////////////////////
-      real drho1    =  f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+
-                          f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW;
-
-      real vx1      =  ((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) +
-						  ((f1_BE - f1_TW)   + (f1_TE - f1_BW))   + ((f1_SE - f1_NW)   + (f1_NE - f1_SW)) +
-						  (f1_E - f1_W); 
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions for neighboring node
+      //!
+      real f1_W    = (dist.f[E   ])[k1e   ];
+      real f1_E    = (dist.f[W   ])[k1w   ];
+      real f1_S    = (dist.f[N   ])[k1n   ];
+      real f1_N    = (dist.f[S   ])[k1s   ];
+      real f1_B    = (dist.f[T   ])[k1t   ];
+      real f1_T    = (dist.f[B   ])[k1b   ];
+      real f1_SW   = (dist.f[NE  ])[k1ne  ];
+      real f1_NE   = (dist.f[SW  ])[k1sw  ];
+      real f1_NW   = (dist.f[SE  ])[k1se  ];
+      real f1_SE   = (dist.f[NW  ])[k1nw  ];
+      real f1_BW   = (dist.f[TE  ])[k1te  ];
+      real f1_TE   = (dist.f[BW  ])[k1bw  ];
+      real f1_TW   = (dist.f[BE  ])[k1be  ];
+      real f1_BE   = (dist.f[TW  ])[k1tw  ];
+      real f1_BS   = (dist.f[TN  ])[k1tn  ];
+      real f1_TN   = (dist.f[BS  ])[k1bs  ];
+      real f1_TS   = (dist.f[BN  ])[k1bn  ];
+      real f1_BN   = (dist.f[TS  ])[k1ts  ];
+      real f1_ZERO = (dist.f[REST])[k1zero];
+      real f1_BSW  = (dist.f[TNE ])[k1tne ];
+      real f1_BNE  = (dist.f[TSW ])[k1tsw ];
+      real f1_BNW  = (dist.f[TSE ])[k1tse ];
+      real f1_BSE  = (dist.f[TNW ])[k1tnw ];
+      real f1_TSW  = (dist.f[BNE ])[k1bne ];
+      real f1_TNE  = (dist.f[BSW ])[k1bsw ];
+      real f1_TNW  = (dist.f[BSE ])[k1bse ];
+      real f1_TSE  = (dist.f[BNW ])[k1bnw ];
 
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Calculate macroscopic quantities (for neighboring node)
+      //!
+      real drho1 = f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW +
+                   f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + 
+                   f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((dist.f[REST])[kzero]); 
 
-      real vx2    =   (-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) +
-						 ((f1_BN - f1_TS)   + (f1_TN - f1_BS))    + (-(f1_SE - f1_NW)  + (f1_NE - f1_SW)) +
-						 (f1_N - f1_S); 
+      real vx1  = (((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) +
+                   ((f1_BE - f1_TW)   + (f1_TE - f1_BW))   + ((f1_SE - f1_NW)   + (f1_NE - f1_SW)) +
+                   (f1_E - f1_W)) / (c1o1 + drho1);          
 
-      real vx3    =   ((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) +
-						 (-(f1_BN - f1_TS)  + (f1_TN - f1_BS))   + ((f1_TE - f1_BW)   - (f1_BE - f1_TW)) +
-						 (f1_T - f1_B); 
+      real vx2  = ((-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) +
+                   ((f1_BN - f1_TS)   + (f1_TN - f1_BS))    + (-(f1_SE - f1_NW)  + (f1_NE - f1_SW)) +
+                   (f1_N - f1_S)) / (c1o1 + drho1); 
 
-	  vx1 /= (drho1+c1o1);
-	  vx2 /= (drho1+c1o1);
-	  vx3 /= (drho1+c1o1);
+      real vx3  = (((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) +
+                   (-(f1_BN - f1_TS)  + (f1_TN - f1_BS))   + ((f1_TE - f1_BW)   - (f1_BE - f1_TW)) +
+                   (f1_T - f1_B)) / (c1o1 + drho1); 
 
-      real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
+      real cusq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3);
 
+      ////////////////////////////////////////////////////////////////////////////////
+      //! subtract the equilibrium (eq) to obtain the non-equilibrium (neq) (for neighboring node)
+      //!
       f1_ZERO  -= c8o27*  (drho1-(drho1+c1o1)*cusq);
       f1_E     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq));
       f1_W     -= c2o27*  (drho1+(drho1+c1o1)*(c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq));
@@ -1031,9 +993,15 @@ extern "C" __global__ void QPressDeviceNEQ27(real* rhoBC,
       f1_BNW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq));
       f1_BSE   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
       f1_TNW   -=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
-	   
-	  drho1 = rhoBC[k];
 
+      ////////////////////////////////////////////////////////////////////////////////
+      //! redefine drho1 with rhoBClocal
+      //!
+      drho1 = rhoBClocal;
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! add the equilibrium (eq), which is calculated with rhoBClocal (for neighboring node)
+      //!
       f1_ZERO  += c8o27*  (drho1-(drho1+c1o1)*cusq);
       f1_E     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cusq));
       f1_W     += c2o27*  (drho1+(drho1+c1o1)*(c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cusq));
@@ -1062,39 +1030,40 @@ extern "C" __global__ void QPressDeviceNEQ27(real* rhoBC,
       f1_BSE   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq));
       f1_TNW   +=  c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq));
 
-	  //drho1 = (drho1 + rhoBC[k])/2.f;
-	  //drho1 = drho1 - rhoBC[k];
       //////////////////////////////////////////////////////////////////////////
 
       __syncthreads();
 
-      (D.f[dirE   ])[ke   ] = f1_W   ;  
-      (D.f[dirW   ])[kw   ] = f1_E   ;	
-      (D.f[dirN   ])[kn   ] = f1_S   ;	
-      (D.f[dirS   ])[ks   ] = f1_N   ;	
-      (D.f[dirT   ])[kt   ] = f1_B   ;	
-      (D.f[dirB   ])[kb   ] = f1_T   ;	
-      (D.f[dirNE  ])[kne  ] = f1_SW  ;	
-      (D.f[dirSW  ])[ksw  ] = f1_NE  ;	
-      (D.f[dirSE  ])[kse  ] = f1_NW  ;	
-      (D.f[dirNW  ])[knw  ] = f1_SE  ;	
-      (D.f[dirTE  ])[kte  ] = f1_BW  ;	
-      (D.f[dirBW  ])[kbw  ] = f1_TE  ;	
-      (D.f[dirBE  ])[kbe  ] = f1_TW  ;	
-      (D.f[dirTW  ])[ktw  ] = f1_BE  ;	
-      (D.f[dirTN  ])[ktn  ] = f1_BS  ;	
-      (D.f[dirBS  ])[kbs  ] = f1_TN  ;	
-      (D.f[dirBN  ])[kbn  ] = f1_TS  ;	
-      (D.f[dirTS  ])[kts  ] = f1_BN  ;	
-      (D.f[dirZERO])[kzero] = f1_ZERO;	
-      (D.f[dirTNE ])[ktne ] = f1_BSW ;	
-      (D.f[dirTSW ])[ktsw ] = f1_BNE ;	
-      (D.f[dirTSE ])[ktse ] = f1_BNW ;	
-      (D.f[dirTNW ])[ktnw ] = f1_BSE ;	
-      (D.f[dirBNE ])[kbne ] = f1_TSW ;	
-      (D.f[dirBSW ])[kbsw ] = f1_TNE ;	
-      (D.f[dirBSE ])[kbse ] = f1_TNW ;	
-      (D.f[dirBNW ])[kbnw ] = f1_TSE ;       
+      ////////////////////////////////////////////////////////////////////////////////
+      //! write the new distributions to the bc nodes
+      //!
+      (dist.f[E   ])[ke   ] = f1_W   ;
+      (dist.f[W   ])[kw   ] = f1_E   ;
+      (dist.f[N   ])[kn   ] = f1_S   ;
+      (dist.f[S   ])[ks   ] = f1_N   ;
+      (dist.f[T   ])[kt   ] = f1_B   ;
+      (dist.f[B   ])[kb   ] = f1_T   ;
+      (dist.f[NE  ])[kne  ] = f1_SW  ;
+      (dist.f[SW  ])[ksw  ] = f1_NE  ;
+      (dist.f[SE  ])[kse  ] = f1_NW  ;
+      (dist.f[NW  ])[knw  ] = f1_SE  ;
+      (dist.f[TE  ])[kte  ] = f1_BW  ;
+      (dist.f[BW  ])[kbw  ] = f1_TE  ;
+      (dist.f[BE  ])[kbe  ] = f1_TW  ;
+      (dist.f[TW  ])[ktw  ] = f1_BE  ;
+      (dist.f[TN  ])[ktn  ] = f1_BS  ;
+      (dist.f[BS  ])[kbs  ] = f1_TN  ;
+      (dist.f[BN  ])[kbn  ] = f1_TS  ;
+      (dist.f[TS  ])[kts  ] = f1_BN  ;
+      (dist.f[REST])[kzero] = f1_ZERO;
+      (dist.f[TNE ])[ktne ] = f1_BSW ;
+      (dist.f[TSW ])[ktsw ] = f1_BNE ;
+      (dist.f[TSE ])[ktse ] = f1_BNW ;
+      (dist.f[TNW ])[ktnw ] = f1_BSE ;
+      (dist.f[BNE ])[kbne ] = f1_TSW ;
+      (dist.f[BSW ])[kbsw ] = f1_TNE ;
+      (dist.f[BSE ])[kbse ] = f1_TNW ;
+      (dist.f[BNW ])[kbnw ] = f1_TSE ;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1168,63 +1137,63 @@ extern "C" __global__ void LB_BC_Press_East27( int nx,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////
       ////////////////////////////////////////////////////////////////////////////////
@@ -1343,66 +1312,66 @@ extern "C" __global__ void LB_BC_Press_East27( int nx,
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
                    f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_W    = (D.f[dirE   ])[k1e   ];
-      f1_E    = (D.f[dirW   ])[k1w   ];
-      f1_S    = (D.f[dirN   ])[k1n   ];
-      f1_N    = (D.f[dirS   ])[k1s   ];
-      f1_B    = (D.f[dirT   ])[k1t   ];
-      f1_T    = (D.f[dirB   ])[k1b   ];
-      f1_SW   = (D.f[dirNE  ])[k1ne  ];
-      f1_NE   = (D.f[dirSW  ])[k1sw  ];
-      f1_NW   = (D.f[dirSE  ])[k1se  ];
-      f1_SE   = (D.f[dirNW  ])[k1nw  ];
-      f1_BW   = (D.f[dirTE  ])[k1te  ];
-      f1_TE   = (D.f[dirBW  ])[k1bw  ];
-      f1_TW   = (D.f[dirBE  ])[k1be  ];
-      f1_BE   = (D.f[dirTW  ])[k1tw  ];
-      f1_BS   = (D.f[dirTN  ])[k1tn  ];
-      f1_TN   = (D.f[dirBS  ])[k1bs  ];
-      f1_TS   = (D.f[dirBN  ])[k1bn  ];
-      f1_BN   = (D.f[dirTS  ])[k1ts  ];
-      f1_ZERO = (D.f[dirZERO])[k1zero];
-      f1_BSW  = (D.f[dirTNE ])[k1tne ];
-      f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-      f1_BNW  = (D.f[dirTSE ])[k1tse ];
-      f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-      f1_TSW  = (D.f[dirBNE ])[k1bne ];
-      f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-      f1_TNW  = (D.f[dirBSE ])[k1bse ];
-      f1_TSE  = (D.f[dirBNW ])[k1bnw ];
+      f1_W    = (D.f[E   ])[k1e   ];
+      f1_E    = (D.f[W   ])[k1w   ];
+      f1_S    = (D.f[N   ])[k1n   ];
+      f1_N    = (D.f[S   ])[k1s   ];
+      f1_B    = (D.f[T   ])[k1t   ];
+      f1_T    = (D.f[B   ])[k1b   ];
+      f1_SW   = (D.f[NE  ])[k1ne  ];
+      f1_NE   = (D.f[SW  ])[k1sw  ];
+      f1_NW   = (D.f[SE  ])[k1se  ];
+      f1_SE   = (D.f[NW  ])[k1nw  ];
+      f1_BW   = (D.f[TE  ])[k1te  ];
+      f1_TE   = (D.f[BW  ])[k1bw  ];
+      f1_TW   = (D.f[BE  ])[k1be  ];
+      f1_BE   = (D.f[TW  ])[k1tw  ];
+      f1_BS   = (D.f[TN  ])[k1tn  ];
+      f1_TN   = (D.f[BS  ])[k1bs  ];
+      f1_TS   = (D.f[BN  ])[k1bn  ];
+      f1_BN   = (D.f[TS  ])[k1ts  ];
+      f1_ZERO = (D.f[REST])[k1zero];
+      f1_BSW  = (D.f[TNE ])[k1tne ];
+      f1_BNE  = (D.f[TSW ])[k1tsw ];
+      f1_BNW  = (D.f[TSE ])[k1tse ];
+      f1_BSE  = (D.f[TNW ])[k1tnw ];
+      f1_TSW  = (D.f[BNE ])[k1bne ];
+      f1_TNE  = (D.f[BSW ])[k1bsw ];
+      f1_TNW  = (D.f[BSE ])[k1bse ];
+      f1_TSE  = (D.f[BNW ])[k1bnw ];
 
       real drho1    =  f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+
                         f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW;
 
       __syncthreads();
 
-      (D.f[dirE   ])[ke   ] = f1_W   -c2o27*drho1;
-      (D.f[dirW   ])[kw   ] = f1_E   -c2o27*drho1;
-      (D.f[dirN   ])[kn   ] = f1_S   -c2o27*drho1;
-      (D.f[dirS   ])[ks   ] = f1_N   -c2o27*drho1;
-      (D.f[dirT   ])[kt   ] = f1_B   -c2o27*drho1;
-      (D.f[dirB   ])[kb   ] = f1_T   -c2o27*drho1;
-      (D.f[dirNE  ])[kne  ] = f1_SW  -c1o54*drho1;
-      (D.f[dirSW  ])[ksw  ] = f1_NE  -c1o54*drho1;
-      (D.f[dirSE  ])[kse  ] = f1_NW  -c1o54*drho1;
-      (D.f[dirNW  ])[knw  ] = f1_SE  -c1o54*drho1;
-      (D.f[dirTE  ])[kte  ] = f1_BW  -c1o54*drho1;
-      (D.f[dirBW  ])[kbw  ] = f1_TE  -c1o54*drho1;
-      (D.f[dirBE  ])[kbe  ] = f1_TW  -c1o54*drho1;
-      (D.f[dirTW  ])[ktw  ] = f1_BE  -c1o54*drho1;
-      (D.f[dirTN  ])[ktn  ] = f1_BS  -c1o54*drho1;
-      (D.f[dirBS  ])[kbs  ] = f1_TN  -c1o54*drho1;
-      (D.f[dirBN  ])[kbn  ] = f1_TS  -c1o54*drho1;
-      (D.f[dirTS  ])[kts  ] = f1_BN  -c1o54*drho1;
-      (D.f[dirZERO])[kzero] = f1_ZERO-c8o27*drho1;
-      (D.f[dirTNE ])[ktne ] = f1_BSW -c1o216*drho1;
-      (D.f[dirTSW ])[ktsw ] = f1_BNE -c1o216*drho1;
-      (D.f[dirTSE ])[ktse ] = f1_BNW -c1o216*drho1;
-      (D.f[dirTNW ])[ktnw ] = f1_BSE -c1o216*drho1;
-      (D.f[dirBNE ])[kbne ] = f1_TSW -c1o216*drho1;
-      (D.f[dirBSW ])[kbsw ] = f1_TNE -c1o216*drho1;
-      (D.f[dirBSE ])[kbse ] = f1_TNW -c1o216*drho1;
-      (D.f[dirBNW ])[kbnw ] = f1_TSE -c1o216*drho1;       
+      (D.f[E   ])[ke   ] = f1_W   -c2o27*drho1;
+      (D.f[W   ])[kw   ] = f1_E   -c2o27*drho1;
+      (D.f[N   ])[kn   ] = f1_S   -c2o27*drho1;
+      (D.f[S   ])[ks   ] = f1_N   -c2o27*drho1;
+      (D.f[T   ])[kt   ] = f1_B   -c2o27*drho1;
+      (D.f[B   ])[kb   ] = f1_T   -c2o27*drho1;
+      (D.f[NE  ])[kne  ] = f1_SW  -c1o54*drho1;
+      (D.f[SW  ])[ksw  ] = f1_NE  -c1o54*drho1;
+      (D.f[SE  ])[kse  ] = f1_NW  -c1o54*drho1;
+      (D.f[NW  ])[knw  ] = f1_SE  -c1o54*drho1;
+      (D.f[TE  ])[kte  ] = f1_BW  -c1o54*drho1;
+      (D.f[BW  ])[kbw  ] = f1_TE  -c1o54*drho1;
+      (D.f[BE  ])[kbe  ] = f1_TW  -c1o54*drho1;
+      (D.f[TW  ])[ktw  ] = f1_BE  -c1o54*drho1;
+      (D.f[TN  ])[ktn  ] = f1_BS  -c1o54*drho1;
+      (D.f[BS  ])[kbs  ] = f1_TN  -c1o54*drho1;
+      (D.f[BN  ])[kbn  ] = f1_TS  -c1o54*drho1;
+      (D.f[TS  ])[kts  ] = f1_BN  -c1o54*drho1;
+      (D.f[REST])[kzero] = f1_ZERO-c8o27*drho1;
+      (D.f[TNE ])[ktne ] = f1_BSW -c1o216*drho1;
+      (D.f[TSW ])[ktsw ] = f1_BNE -c1o216*drho1;
+      (D.f[TSE ])[ktse ] = f1_BNW -c1o216*drho1;
+      (D.f[TNW ])[ktnw ] = f1_BSE -c1o216*drho1;
+      (D.f[BNE ])[kbne ] = f1_TSW -c1o216*drho1;
+      (D.f[BSW ])[kbsw ] = f1_TNE -c1o216*drho1;
+      (D.f[BSE ])[kbse ] = f1_TNW -c1o216*drho1;
+      (D.f[BNW ])[kbnw ] = f1_TSE -c1o216*drho1;       
    }
    __syncthreads();
 }          
@@ -1447,14 +1416,11 @@ extern "C" __global__ void LB_BC_Press_East27( int nx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QPressDevice27(int inx,
-                                           int iny,
-                                           real* rhoBC,
+extern "C" __global__ void QPressDevice27(real* rhoBC,
                                            real* DD, 
                                            int* k_Q, 
                                            real* QQ,
-                                           unsigned int sizeQ,
-                                           int numberOfBCnodes, 
+                                           unsigned int numberOfBCnodes, 
                                            real om1, 
                                            unsigned int* neighborX,
                                            unsigned int* neighborY,
@@ -1465,63 +1431,63 @@ extern "C" __global__ void QPressDevice27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1541,32 +1507,32 @@ extern "C" __global__ void QPressDevice27(int inx,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1601,32 +1567,32 @@ extern "C" __global__ void QPressDevice27(int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real q, vx1, vx2, vx3, drho;
       vx1    =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
@@ -1650,245 +1616,245 @@ extern "C" __global__ void QPressDevice27(int inx,
       ////////////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirW])[kw]=c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-         //(D.f[dirE])[ke]=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq); 
+         (D.f[W])[kw]=c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
+         //(D.f[E])[ke]=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq); 
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirE])[ke]=c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq); 
-         //(D.f[dirW])[kw]=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
+         (D.f[E])[ke]=c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq); 
+         //(D.f[W])[kw]=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirS])[ks]=c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         //(D.f[dirN])[kn]=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
+         (D.f[S])[ks]=c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
+         //(D.f[N])[kn]=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirN])[kn]=c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-         //(D.f[dirS])[ks]=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
+         (D.f[N])[kn]=c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
+         //(D.f[S])[ks]=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirB])[kb]=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-         //(D.f[dirT])[kt]=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq); 
+         (D.f[B])[kb]=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
+         //(D.f[T])[kt]=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq); 
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirT])[kt]=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
-         //(D.f[dirB])[kb]=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
+         (D.f[T])[kt]=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
+         //(D.f[B])[kb]=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSW])[ksw]=c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-         //(D.f[dirNE])[kne]=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
+         (D.f[SW])[ksw]=c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
+         //(D.f[NE])[kne]=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNE])[kne]=c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-         //(D.f[dirSW])[ksw]=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
+         (D.f[NE])[kne]=c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
+         //(D.f[SW])[ksw]=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNW])[knw]=c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-         //(D.f[dirSE])[kse]=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
+         (D.f[NW])[knw]=c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
+         //(D.f[SE])[kse]=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSE])[kse]=c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-         //(D.f[dirNW])[knw]=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
+         (D.f[SE])[kse]=c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
+         //(D.f[NW])[knw]=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBW])[kbw]=c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-         //(D.f[dirTE])[kte]=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
+         (D.f[BW])[kbw]=c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
+         //(D.f[TE])[kte]=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTE])[kte]=c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-         //(D.f[dirBW])[kbw]=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
+         (D.f[TE])[kte]=c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
+         //(D.f[BW])[kbw]=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTW])[ktw]=c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-         //(D.f[dirBE])[kbe]=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
+         (D.f[TW])[ktw]=c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
+         //(D.f[BE])[kbe]=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBE])[kbe]=c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-         //(D.f[dirTW])[ktw]=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
+         (D.f[BE])[kbe]=c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
+         //(D.f[TW])[ktw]=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBS])[kbs]=c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-         //(D.f[dirTN])[ktn]=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
+         (D.f[BS])[kbs]=c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
+         //(D.f[TN])[ktn]=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTN])[ktn]=c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-         //(D.f[dirBS])[kbs]=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
+         (D.f[TN])[ktn]=c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
+         //(D.f[BS])[kbs]=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTS])[kts]=c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-         //(D.f[dirBN])[kbn]=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
+         (D.f[TS])[kts]=c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
+         //(D.f[BN])[kbn]=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBN])[kbn]=c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-         //(D.f[dirTS])[kts]=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
+         (D.f[BN])[kbn]=c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
+         //(D.f[TS])[kts]=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSW])[kbsw]=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-         //(D.f[dirTNE])[ktne]=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
+         (D.f[BSW])[kbsw]=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
+         //(D.f[TNE])[ktne]=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNE])[ktne]=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-         //(D.f[dirBSW])[kbsw]=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
+         (D.f[TNE])[ktne]=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
+         //(D.f[BSW])[kbsw]=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSW])[ktsw]=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-         //(D.f[dirBNE])[kbne]=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
+         (D.f[TSW])[ktsw]=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
+         //(D.f[BNE])[kbne]=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNE])[kbne]=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-         //(D.f[dirTSW])[ktsw]=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
+         (D.f[BNE])[kbne]=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
+         //(D.f[TSW])[ktsw]=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNW])[kbnw]=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-         //(D.f[dirTSE])[ktse]=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
+         (D.f[BNW])[kbnw]=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
+         //(D.f[TSE])[ktse]=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSE])[ktse]=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-         //(D.f[dirBNW])[kbnw]=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
+         (D.f[TSE])[ktse]=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
+         //(D.f[BNW])[kbnw]=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNW])[ktnw]=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-         //(D.f[dirBSE])[kbse]=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
+         (D.f[TNW])[ktnw]=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
+         //(D.f[BSE])[kbse]=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSE])[kbse]=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-         //(D.f[dirTNW])[ktnw]=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
+         (D.f[BSE])[kbse]=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
+         //(D.f[TNW])[ktnw]=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
       }
    }
 }
@@ -1951,63 +1917,63 @@ extern "C" __global__ void QPressDeviceAntiBB27(   real* rhoBC,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2027,32 +1993,32 @@ extern "C" __global__ void QPressDeviceAntiBB27(   real* rhoBC,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *numberOfBCnodes];
-      q_dirW   = &QQ[dirW   *numberOfBCnodes];
-      q_dirN   = &QQ[dirN   *numberOfBCnodes];
-      q_dirS   = &QQ[dirS   *numberOfBCnodes];
-      q_dirT   = &QQ[dirT   *numberOfBCnodes];
-      q_dirB   = &QQ[dirB   *numberOfBCnodes];
-      q_dirNE  = &QQ[dirNE  *numberOfBCnodes];
-      q_dirSW  = &QQ[dirSW  *numberOfBCnodes];
-      q_dirSE  = &QQ[dirSE  *numberOfBCnodes];
-      q_dirNW  = &QQ[dirNW  *numberOfBCnodes];
-      q_dirTE  = &QQ[dirTE  *numberOfBCnodes];
-      q_dirBW  = &QQ[dirBW  *numberOfBCnodes];
-      q_dirBE  = &QQ[dirBE  *numberOfBCnodes];
-      q_dirTW  = &QQ[dirTW  *numberOfBCnodes];
-      q_dirTN  = &QQ[dirTN  *numberOfBCnodes];
-      q_dirBS  = &QQ[dirBS  *numberOfBCnodes];
-      q_dirBN  = &QQ[dirBN  *numberOfBCnodes];
-      q_dirTS  = &QQ[dirTS  *numberOfBCnodes];
-      q_dirTNE = &QQ[dirTNE *numberOfBCnodes];
-      q_dirTSW = &QQ[dirTSW *numberOfBCnodes];
-      q_dirTSE = &QQ[dirTSE *numberOfBCnodes];
-      q_dirTNW = &QQ[dirTNW *numberOfBCnodes];
-      q_dirBNE = &QQ[dirBNE *numberOfBCnodes];
-      q_dirBSW = &QQ[dirBSW *numberOfBCnodes];
-      q_dirBSE = &QQ[dirBSE *numberOfBCnodes];
-      q_dirBNW = &QQ[dirBNW *numberOfBCnodes];
+      q_dirE   = &QQ[E   *numberOfBCnodes];
+      q_dirW   = &QQ[W   *numberOfBCnodes];
+      q_dirN   = &QQ[N   *numberOfBCnodes];
+      q_dirS   = &QQ[S   *numberOfBCnodes];
+      q_dirT   = &QQ[T   *numberOfBCnodes];
+      q_dirB   = &QQ[B   *numberOfBCnodes];
+      q_dirNE  = &QQ[NE  *numberOfBCnodes];
+      q_dirSW  = &QQ[SW  *numberOfBCnodes];
+      q_dirSE  = &QQ[SE  *numberOfBCnodes];
+      q_dirNW  = &QQ[NW  *numberOfBCnodes];
+      q_dirTE  = &QQ[TE  *numberOfBCnodes];
+      q_dirBW  = &QQ[BW  *numberOfBCnodes];
+      q_dirBE  = &QQ[BE  *numberOfBCnodes];
+      q_dirTW  = &QQ[TW  *numberOfBCnodes];
+      q_dirTN  = &QQ[TN  *numberOfBCnodes];
+      q_dirBS  = &QQ[BS  *numberOfBCnodes];
+      q_dirBN  = &QQ[BN  *numberOfBCnodes];
+      q_dirTS  = &QQ[TS  *numberOfBCnodes];
+      q_dirTNE = &QQ[TNE *numberOfBCnodes];
+      q_dirTSW = &QQ[TSW *numberOfBCnodes];
+      q_dirTSE = &QQ[TSE *numberOfBCnodes];
+      q_dirTNW = &QQ[TNW *numberOfBCnodes];
+      q_dirBNE = &QQ[BNE *numberOfBCnodes];
+      q_dirBSW = &QQ[BSW *numberOfBCnodes];
+      q_dirBSE = &QQ[BSE *numberOfBCnodes];
+      q_dirBNW = &QQ[BNW *numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -2087,33 +2053,33 @@ extern "C" __global__ void QPressDeviceAntiBB27(   real* rhoBC,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW, f_ZERO;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
-      f_ZERO = (D.f[dirZERO])[kzero];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
+      f_ZERO = (D.f[REST])[kzero];
       ////////////////////////////////////////////////////////////////////////////////
       //real vx1, vx2, vx3, drho;
       //vx1    =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
@@ -2141,219 +2107,219 @@ extern "C" __global__ void QPressDeviceAntiBB27(   real* rhoBC,
       ////////////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirW])[kw]=f_W-c2o27*drho; 
+         (D.f[W])[kw]=f_W-c2o27*drho; 
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirE])[ke]=f_E-c2o27*drho;
+         (D.f[E])[ke]=f_E-c2o27*drho;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirS])[ks]=f_S-c2o27*drho; 
+         (D.f[S])[ks]=f_S-c2o27*drho; 
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirN])[kn]=f_N-c2o27*drho; 
+         (D.f[N])[kn]=f_N-c2o27*drho; 
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirB])[kb]=f_B-c2o27*drho; 
+         (D.f[B])[kb]=f_B-c2o27*drho; 
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirT])[kt]=f_T-c2o27*drho;
+         (D.f[T])[kt]=f_T-c2o27*drho;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSW])[ksw]=f_SW-c1o54*drho;
+         (D.f[SW])[ksw]=f_SW-c1o54*drho;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNE])[kne]=f_NE-c1o54*drho;
+         (D.f[NE])[kne]=f_NE-c1o54*drho;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNW])[knw]=f_NW-c1o54*drho;
+         (D.f[NW])[knw]=f_NW-c1o54*drho;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSE])[kse]=f_SE-c1o54*drho;
+         (D.f[SE])[kse]=f_SE-c1o54*drho;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBW])[kbw]=f_BW-c1o54*drho; 
+         (D.f[BW])[kbw]=f_BW-c1o54*drho; 
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTE])[kte]=f_TE-c1o54*drho; 
+         (D.f[TE])[kte]=f_TE-c1o54*drho; 
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTW])[ktw]=f_TW-c1o54*drho;
+         (D.f[TW])[ktw]=f_TW-c1o54*drho;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBE])[kbe]=f_BE-c1o54*drho;
+         (D.f[BE])[kbe]=f_BE-c1o54*drho;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBS])[kbs]=f_BS-c1o54*drho;
+         (D.f[BS])[kbs]=f_BS-c1o54*drho;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTN])[ktn]=f_TN-c1o54*drho;
+         (D.f[TN])[ktn]=f_TN-c1o54*drho;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTS])[kts]=f_TS-c1o54*drho;
+         (D.f[TS])[kts]=f_TS-c1o54*drho;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBN])[kbn]=f_BN-c1o54*drho;
+         (D.f[BN])[kbn]=f_BN-c1o54*drho;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSW])[kbsw]=f_BSW-c1o216*drho;
+         (D.f[BSW])[kbsw]=f_BSW-c1o216*drho;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNE])[ktne]=f_TNE-c1o216*drho;
+         (D.f[TNE])[ktne]=f_TNE-c1o216*drho;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSW])[ktsw]=f_TSW-c1o216*drho;
+         (D.f[TSW])[ktsw]=f_TSW-c1o216*drho;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNE])[kbne]=f_BNE-c1o216*drho;
+         (D.f[BNE])[kbne]=f_BNE-c1o216*drho;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNW])[kbnw]=f_BNW-c1o216*drho;
+         (D.f[BNW])[kbnw]=f_BNW-c1o216*drho;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSE])[ktse]=f_TSE-c1o216*drho;
+         (D.f[TSE])[ktse]=f_TSE-c1o216*drho;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNW])[ktnw]=f_TNW-c1o216*drho;
+         (D.f[TNW])[ktnw]=f_TNW-c1o216*drho;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSE])[kbse]=f_BSE-c1o216*drho;
+         (D.f[BSE])[kbse]=f_BSE-c1o216*drho;
       }
    }
 }
@@ -2460,92 +2426,92 @@ extern "C" __global__ void QPressDeviceFixBackflow27( real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-         (D.f[dirW])[kw]       = c2o27  * deltaRho;
-         (D.f[dirE])[ke]       = c2o27  * deltaRho;
-         (D.f[dirS])[ks]       = c2o27  * deltaRho;
-         (D.f[dirN])[kn]       = c2o27  * deltaRho;
-         (D.f[dirB])[kb]       = c2o27  * deltaRho;
-         (D.f[dirT])[kt]       = c2o27  * deltaRho;
-         (D.f[dirSW])[ksw]     = c1o54  * deltaRho;
-         (D.f[dirNE])[kne]     = c1o54  * deltaRho;
-         (D.f[dirNW])[knw]     = c1o54  * deltaRho;
-         (D.f[dirSE])[kse]     = c1o54  * deltaRho;
-         (D.f[dirBW])[kbw]     = c1o54  * deltaRho;
-         (D.f[dirTE])[kte]     = c1o54  * deltaRho;
-         (D.f[dirTW])[ktw]     = c1o54  * deltaRho;
-         (D.f[dirBE])[kbe]     = c1o54  * deltaRho;
-         (D.f[dirBS])[kbs]     = c1o54  * deltaRho;
-         (D.f[dirTN])[ktn]     = c1o54  * deltaRho;
-         (D.f[dirTS])[kts]     = c1o54  * deltaRho;
-         (D.f[dirBN])[kbn]     = c1o54  * deltaRho;
-         (D.f[dirBSW])[kbsw]   = c1o216 * deltaRho;
-         (D.f[dirTNE])[ktne]   = c1o216 * deltaRho;
-         (D.f[dirTSW])[ktsw]   = c1o216 * deltaRho;
-         (D.f[dirBNE])[kbne]   = c1o216 * deltaRho;
-         (D.f[dirBNW])[kbnw]   = c1o216 * deltaRho;
-         (D.f[dirTSE])[ktse]   = c1o216 * deltaRho;
-         (D.f[dirTNW])[ktnw]   = c1o216 * deltaRho;
-         (D.f[dirBSE])[kbse]   = c1o216 * deltaRho;
-         (D.f[dirZERO])[kzero] = c8o27  * deltaRho;
+         (D.f[W])[kw]       = c2o27  * deltaRho;
+         (D.f[E])[ke]       = c2o27  * deltaRho;
+         (D.f[S])[ks]       = c2o27  * deltaRho;
+         (D.f[N])[kn]       = c2o27  * deltaRho;
+         (D.f[B])[kb]       = c2o27  * deltaRho;
+         (D.f[T])[kt]       = c2o27  * deltaRho;
+         (D.f[SW])[ksw]     = c1o54  * deltaRho;
+         (D.f[NE])[kne]     = c1o54  * deltaRho;
+         (D.f[NW])[knw]     = c1o54  * deltaRho;
+         (D.f[SE])[kse]     = c1o54  * deltaRho;
+         (D.f[BW])[kbw]     = c1o54  * deltaRho;
+         (D.f[TE])[kte]     = c1o54  * deltaRho;
+         (D.f[TW])[ktw]     = c1o54  * deltaRho;
+         (D.f[BE])[kbe]     = c1o54  * deltaRho;
+         (D.f[BS])[kbs]     = c1o54  * deltaRho;
+         (D.f[TN])[ktn]     = c1o54  * deltaRho;
+         (D.f[TS])[kts]     = c1o54  * deltaRho;
+         (D.f[BN])[kbn]     = c1o54  * deltaRho;
+         (D.f[BSW])[kbsw]   = c1o216 * deltaRho;
+         (D.f[TNE])[ktne]   = c1o216 * deltaRho;
+         (D.f[TSW])[ktsw]   = c1o216 * deltaRho;
+         (D.f[BNE])[kbne]   = c1o216 * deltaRho;
+         (D.f[BNW])[kbnw]   = c1o216 * deltaRho;
+         (D.f[TSE])[ktse]   = c1o216 * deltaRho;
+         (D.f[TNW])[ktnw]   = c1o216 * deltaRho;
+         (D.f[BSE])[kbse]   = c1o216 * deltaRho;
+         (D.f[REST])[kzero] = c8o27  * deltaRho;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2651,86 +2617,86 @@ extern "C" __global__ void QPressDeviceDirDepBot27(  real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real f_E,f_W,f_N,f_S,f_T,f_NE,f_SW,f_SE,f_NW,f_TE,f_TW,f_TN,f_TS,f_ZERO,f_TNE,f_TSW,f_TSE,f_TNW;//,
             //f_B,f_BW,f_BE,f_BS,f_BN,f_BSW,f_BNE,f_BNW,f_BSE;
 
-      f_E    = (D.f[dirE   ])[ke   ];
-      f_W    = (D.f[dirW   ])[kw   ];
-      f_N    = (D.f[dirN   ])[kn   ];
-      f_S    = (D.f[dirS   ])[ks   ];
-      f_T    = (D.f[dirT   ])[kt   ];
-      f_NE   = (D.f[dirNE  ])[kne  ];
-      f_SW   = (D.f[dirSW  ])[ksw  ];
-      f_SE   = (D.f[dirSE  ])[kse  ];
-      f_NW   = (D.f[dirNW  ])[knw  ];
-      f_TE   = (D.f[dirTE  ])[kte  ];
-      f_TW   = (D.f[dirTW  ])[ktw  ];
-      f_TN   = (D.f[dirTN  ])[ktn  ];
-      f_TS   = (D.f[dirTS  ])[kts  ];
-      f_ZERO = (D.f[dirZERO])[kzero];
-      f_TNE  = (D.f[dirTNE ])[ktne ];
-      f_TSW  = (D.f[dirTSW ])[ktsw ];
-      f_TSE  = (D.f[dirTSE ])[ktse ];
-      f_TNW  = (D.f[dirTNW ])[ktnw ];
+      f_E    = (D.f[E   ])[ke   ];
+      f_W    = (D.f[W   ])[kw   ];
+      f_N    = (D.f[N   ])[kn   ];
+      f_S    = (D.f[S   ])[ks   ];
+      f_T    = (D.f[T   ])[kt   ];
+      f_NE   = (D.f[NE  ])[kne  ];
+      f_SW   = (D.f[SW  ])[ksw  ];
+      f_SE   = (D.f[SE  ])[kse  ];
+      f_NW   = (D.f[NW  ])[knw  ];
+      f_TE   = (D.f[TE  ])[kte  ];
+      f_TW   = (D.f[TW  ])[ktw  ];
+      f_TN   = (D.f[TN  ])[ktn  ];
+      f_TS   = (D.f[TS  ])[kts  ];
+      f_ZERO = (D.f[REST])[kzero];
+      f_TNE  = (D.f[TNE ])[ktne ];
+      f_TSW  = (D.f[TSW ])[ktsw ];
+      f_TSE  = (D.f[TSE ])[ktse ];
+      f_TNW  = (D.f[TNW ])[ktnw ];
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
       //f_B   = (four*rho- four*f_SW-     eight*f_TSW-four*f_W-   eight*f_TW- four*f_NW-     eight*f_TNW-four*f_S-   eight*f_TS-four*f_ZERO+     f_T-four*f_N-   eight*f_TN- four*f_SE-     eight*f_TSE-four*f_E-   eight*f_TE- four*f_NE-     eight*f_TNE)/nine;
@@ -2750,44 +2716,44 @@ extern "C" __global__ void QPressDeviceDirDepBot27(  real* rhoBC,
 
       //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      //(D.f[dirZERO])[kzero] = c8over27*  (drho-cusq);
-      //(D.f[dirE])[ke]    = c2over27*  (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);
-      //(D.f[dirW])[kw]    = c2over27*  (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);
-      //(D.f[dirN])[kn]     = c2over27*  (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
-      //(D.f[dirS])[ks]    = c2over27*  (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
-      //(D.f[dirT])[kt]    = c2over27*  (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
-      //(D.f[dirB])[kb]    = c2over27*  (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
-      //(D.f[dirNE])[kne]   = c1over54*  (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
-      //(D.f[dirSW])[ksw]   = c1over54*  (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
-      //(D.f[dirSE])[kse]   =  c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
-      //(D.f[dirNW])[knw]   =  c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
-      //(D.f[dirTE])[kte]   =  c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
-      //(D.f[dirBW])[kbw]   =  c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
-      //(D.f[dirBE])[kbe]   =  c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
-      //(D.f[dirTW])[ktw]   =  c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
-      //(D.f[dirTN])[ktn]   =  c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
-      //(D.f[dirBS])[kbs]   =  c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
-      //(D.f[dirBN])[kbn]   =  c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
-      //(D.f[dirTS])[kts]   =  c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
-      //(D.f[dirTNE])[ktne]  =  c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
-      //(D.f[dirBSW])[kbsw]  =  c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
-      //(D.f[dirBNE])[kbne]  =  c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
-      //(D.f[dirTSW])[ktsw]  =  c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
-      //(D.f[dirTSE])[ktse]  =  c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
-      //(D.f[dirBNW])[kbnw]  =  c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
-      //(D.f[dirBSE])[kbse]  =  c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
-      //(D.f[dirTNW])[ktnw]  =  c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq);
+      //(D.f[REST])[kzero] = c8over27*  (drho-cusq);
+      //(D.f[E])[ke]    = c2over27*  (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);
+      //(D.f[W])[kw]    = c2over27*  (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);
+      //(D.f[N])[kn]     = c2over27*  (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
+      //(D.f[S])[ks]    = c2over27*  (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
+      //(D.f[T])[kt]    = c2over27*  (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
+      //(D.f[B])[kb]    = c2over27*  (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
+      //(D.f[NE])[kne]   = c1over54*  (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
+      //(D.f[SW])[ksw]   = c1over54*  (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
+      //(D.f[SE])[kse]   =  c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
+      //(D.f[NW])[knw]   =  c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
+      //(D.f[TE])[kte]   =  c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
+      //(D.f[BW])[kbw]   =  c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
+      //(D.f[BE])[kbe]   =  c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
+      //(D.f[TW])[ktw]   =  c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
+      //(D.f[TN])[ktn]   =  c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
+      //(D.f[BS])[kbs]   =  c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
+      //(D.f[BN])[kbn]   =  c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
+      //(D.f[TS])[kts]   =  c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
+      //(D.f[TNE])[ktne]  =  c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
+      //(D.f[BSW])[kbsw]  =  c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
+      //(D.f[BNE])[kbne]  =  c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
+      //(D.f[TSW])[ktsw]  =  c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
+      //(D.f[TSE])[ktse]  =  c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
+      //(D.f[BNW])[kbnw]  =  c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
+      //(D.f[BSE])[kbse]  =  c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
+      //(D.f[TNW])[ktnw]  =  c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq);
       real drho   =    f_ZERO+f_E+f_W+f_N+f_S+f_T+f_NE+f_SW+f_SE+f_NW+f_TE+f_TW+f_TN+f_TS+f_TNE+f_TSW+f_TSE+f_TNW;
       real dTop   =    f_T+f_TE+f_TW+f_TN+f_TS+f_TNE+f_TSW+f_TSE+f_TNW;
-      (D.f[dirB])[kb]     = (f_T+c2o27)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c2o27;
-      (D.f[dirBW])[kbw]   = (f_TW+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[dirBE])[kbe]   = (f_TE+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[dirBS])[kbs]   = (f_TS+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[dirBN])[kbn]   = (f_TN+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
-      (D.f[dirBSW])[kbsw] = (f_TSW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-      (D.f[dirBNE])[kbne] = (f_TNE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-      (D.f[dirBNW])[kbnw] = (f_TNW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
-      (D.f[dirBSE])[kbse] = (f_TSE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[B])[kb]     = (f_T+c2o27)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c2o27;
+      (D.f[BW])[kbw]   = (f_TW+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[BE])[kbe]   = (f_TE+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[BS])[kbs]   = (f_TS+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[BN])[kbn]   = (f_TN+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54;
+      (D.f[BSW])[kbsw] = (f_TSW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[BNE])[kbne] = (f_TNE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[BNW])[kbnw] = (f_TNW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
+      (D.f[BSE])[kbse] = (f_TSE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2920,120 +2886,120 @@ extern "C" __global__ void QPressNoRhoDevice27(  real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real f1_E    = (D.f[dirE   ])[k1e   ];
-      real f1_W    = (D.f[dirW   ])[k1w   ];
-      real f1_N    = (D.f[dirN   ])[k1n   ];
-      real f1_S    = (D.f[dirS   ])[k1s   ];
-      real f1_T    = (D.f[dirT   ])[k1t   ];
-      real f1_B    = (D.f[dirB   ])[k1b   ];
-      real f1_NE   = (D.f[dirNE  ])[k1ne  ];
-      real f1_SW   = (D.f[dirSW  ])[k1sw  ];
-      real f1_SE   = (D.f[dirSE  ])[k1se  ];
-      real f1_NW   = (D.f[dirNW  ])[k1nw  ];
-      real f1_TE   = (D.f[dirTE  ])[k1te  ];
-      real f1_BW   = (D.f[dirBW  ])[k1bw  ];
-      real f1_BE   = (D.f[dirBE  ])[k1be  ];
-      real f1_TW   = (D.f[dirTW  ])[k1tw  ];
-      real f1_TN   = (D.f[dirTN  ])[k1tn  ];
-      real f1_BS   = (D.f[dirBS  ])[k1bs  ];
-      real f1_BN   = (D.f[dirBN  ])[k1bn  ];
-      real f1_TS   = (D.f[dirTS  ])[k1ts  ];
-      //real f1_ZERO = (D.f[dirZERO])[k1zero];
-      real f1_TNE  = (D.f[dirTNE ])[k1tne ];
-      real f1_TSW  = (D.f[dirTSW ])[k1tsw ];
-      real f1_TSE  = (D.f[dirTSE ])[k1tse ];
-      real f1_TNW  = (D.f[dirTNW ])[k1tnw ];
-      real f1_BNE  = (D.f[dirBNE ])[k1bne ];
-      real f1_BSW  = (D.f[dirBSW ])[k1bsw ];
-      real f1_BSE  = (D.f[dirBSE ])[k1bse ];
-      real f1_BNW  = (D.f[dirBNW ])[k1bnw ];
+      real f1_E    = (D.f[E   ])[k1e   ];
+      real f1_W    = (D.f[W   ])[k1w   ];
+      real f1_N    = (D.f[N   ])[k1n   ];
+      real f1_S    = (D.f[S   ])[k1s   ];
+      real f1_T    = (D.f[T   ])[k1t   ];
+      real f1_B    = (D.f[B   ])[k1b   ];
+      real f1_NE   = (D.f[NE  ])[k1ne  ];
+      real f1_SW   = (D.f[SW  ])[k1sw  ];
+      real f1_SE   = (D.f[SE  ])[k1se  ];
+      real f1_NW   = (D.f[NW  ])[k1nw  ];
+      real f1_TE   = (D.f[TE  ])[k1te  ];
+      real f1_BW   = (D.f[BW  ])[k1bw  ];
+      real f1_BE   = (D.f[BE  ])[k1be  ];
+      real f1_TW   = (D.f[TW  ])[k1tw  ];
+      real f1_TN   = (D.f[TN  ])[k1tn  ];
+      real f1_BS   = (D.f[BS  ])[k1bs  ];
+      real f1_BN   = (D.f[BN  ])[k1bn  ];
+      real f1_TS   = (D.f[TS  ])[k1ts  ];
+      //real f1_ZERO = (D.f[REST])[k1zero];
+      real f1_TNE  = (D.f[TNE ])[k1tne ];
+      real f1_TSW  = (D.f[TSW ])[k1tsw ];
+      real f1_TSE  = (D.f[TSE ])[k1tse ];
+      real f1_TNW  = (D.f[TNW ])[k1tnw ];
+      real f1_BNE  = (D.f[BNE ])[k1bne ];
+      real f1_BSW  = (D.f[BSW ])[k1bsw ];
+      real f1_BSE  = (D.f[BSE ])[k1bse ];
+      real f1_BNW  = (D.f[BNW ])[k1bnw ];
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      real f_E    = (D.f[dirE   ])[ke   ];
-      real f_W    = (D.f[dirW   ])[kw   ];
-      real f_N    = (D.f[dirN   ])[kn   ];
-      real f_S    = (D.f[dirS   ])[ks   ];
-      real f_T    = (D.f[dirT   ])[kt   ];
-      real f_B    = (D.f[dirB   ])[kb   ];
-      real f_NE   = (D.f[dirNE  ])[kne  ];
-      real f_SW   = (D.f[dirSW  ])[ksw  ];
-      real f_SE   = (D.f[dirSE  ])[kse  ];
-      real f_NW   = (D.f[dirNW  ])[knw  ];
-      real f_TE   = (D.f[dirTE  ])[kte  ];
-      real f_BW   = (D.f[dirBW  ])[kbw  ];
-      real f_BE   = (D.f[dirBE  ])[kbe  ];
-      real f_TW   = (D.f[dirTW  ])[ktw  ];
-      real f_TN   = (D.f[dirTN  ])[ktn  ];
-      real f_BS   = (D.f[dirBS  ])[kbs  ];
-      real f_BN   = (D.f[dirBN  ])[kbn  ];
-      real f_TS   = (D.f[dirTS  ])[kts  ];
-      //real f_ZERO = (D.f[dirZERO])[kzero];
-      real f_TNE  = (D.f[dirTNE ])[ktne ];
-      real f_TSW  = (D.f[dirTSW ])[ktsw ];
-      real f_TSE  = (D.f[dirTSE ])[ktse ];
-      real f_TNW  = (D.f[dirTNW ])[ktnw ];
-      real f_BNE  = (D.f[dirBNE ])[kbne ];
-      real f_BSW  = (D.f[dirBSW ])[kbsw ];
-      real f_BSE  = (D.f[dirBSE ])[kbse ];
-      real f_BNW  = (D.f[dirBNW ])[kbnw ];
+      real f_E    = (D.f[E   ])[ke   ];
+      real f_W    = (D.f[W   ])[kw   ];
+      real f_N    = (D.f[N   ])[kn   ];
+      real f_S    = (D.f[S   ])[ks   ];
+      real f_T    = (D.f[T   ])[kt   ];
+      real f_B    = (D.f[B   ])[kb   ];
+      real f_NE   = (D.f[NE  ])[kne  ];
+      real f_SW   = (D.f[SW  ])[ksw  ];
+      real f_SE   = (D.f[SE  ])[kse  ];
+      real f_NW   = (D.f[NW  ])[knw  ];
+      real f_TE   = (D.f[TE  ])[kte  ];
+      real f_BW   = (D.f[BW  ])[kbw  ];
+      real f_BE   = (D.f[BE  ])[kbe  ];
+      real f_TW   = (D.f[TW  ])[ktw  ];
+      real f_TN   = (D.f[TN  ])[ktn  ];
+      real f_BS   = (D.f[BS  ])[kbs  ];
+      real f_BN   = (D.f[BN  ])[kbn  ];
+      real f_TS   = (D.f[TS  ])[kts  ];
+      //real f_ZERO = (D.f[REST])[kzero];
+      real f_TNE  = (D.f[TNE ])[ktne ];
+      real f_TSW  = (D.f[TSW ])[ktsw ];
+      real f_TSE  = (D.f[TSE ])[ktse ];
+      real f_TNW  = (D.f[TNW ])[ktnw ];
+      real f_BNE  = (D.f[BNE ])[kbne ];
+      real f_BSW  = (D.f[BSW ])[kbsw ];
+      real f_BSE  = (D.f[BSE ])[kbse ];
+      real f_BNW  = (D.f[BNW ])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
 
       //real vx1, vx2, vx3, drho;
@@ -3042,10 +3008,10 @@ extern "C" __global__ void QPressNoRhoDevice27(  real* rhoBC,
 	  //Dichte
     //   drho1  =  f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW +
     //             f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + 
-    //             f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((D.f[dirZERO])[k1zero]); 
+    //             f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((D.f[REST])[k1zero]); 
     //   drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
     //             f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-    //             f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+    //             f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
       
       //////////////////////////////////////////////////////////////////////////
 	  //Ux
@@ -3204,106 +3170,106 @@ extern "C" __global__ void QPressNoRhoDevice27(  real* rhoBC,
 	  //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////
       //__syncthreads();
 	  // -X
-	  //(D.f[dirE   ])[ke   ] = f_E   ;
-	  //(D.f[dirSE  ])[kse  ] = f_SE  ;
-	  //(D.f[dirNE  ])[kne  ] = f_NE  ;
-	  //(D.f[dirBE  ])[kbe  ] = f_BE  ;
-	  //(D.f[dirTE  ])[kte  ] = f_TE  ;
-	  //(D.f[dirTSE ])[ktse ] = f_TSE ;
-	  //(D.f[dirTNE ])[ktne ] = f_TNE ;
-	  //(D.f[dirBSE ])[kbse ] = f_BSE ;
-	  //(D.f[dirBNE ])[kbne ] = f_BNE ;     
+	  //(D.f[E   ])[ke   ] = f_E   ;
+	  //(D.f[SE  ])[kse  ] = f_SE  ;
+	  //(D.f[NE  ])[kne  ] = f_NE  ;
+	  //(D.f[BE  ])[kbe  ] = f_BE  ;
+	  //(D.f[TE  ])[kte  ] = f_TE  ;
+	  //(D.f[TSE ])[ktse ] = f_TSE ;
+	  //(D.f[TNE ])[ktne ] = f_TNE ;
+	  //(D.f[BSE ])[kbse ] = f_BSE ;
+	  //(D.f[BNE ])[kbne ] = f_BNE ;     
 	  // X
-	  (D.f[dirW   ])[kw   ] = f_W   ;
-	  (D.f[dirSW  ])[ksw  ] = f_SW  ;
-	  (D.f[dirNW  ])[knw  ] = f_NW  ;
-	  (D.f[dirBW  ])[kbw  ] = f_BW  ;
-	  (D.f[dirTW  ])[ktw  ] = f_TW  ;
-	  (D.f[dirTSW ])[ktsw ] = f_TSW ;
-	  (D.f[dirTNW ])[ktnw ] = f_TNW ;
-	  (D.f[dirBSW ])[kbsw ] = f_BSW ;
-	  (D.f[dirBNW ])[kbnw ] = f_BNW ;     
+	  (D.f[W   ])[kw   ] = f_W   ;
+	  (D.f[SW  ])[ksw  ] = f_SW  ;
+	  (D.f[NW  ])[knw  ] = f_NW  ;
+	  (D.f[BW  ])[kbw  ] = f_BW  ;
+	  (D.f[TW  ])[ktw  ] = f_TW  ;
+	  (D.f[TSW ])[ktsw ] = f_TSW ;
+	  (D.f[TNW ])[ktnw ] = f_TNW ;
+	  (D.f[BSW ])[kbsw ] = f_BSW ;
+	  (D.f[BNW ])[kbnw ] = f_BNW ;     
 	  // Y
-	  //(D.f[dirS   ])[ks   ] = f_S   ;
-	  //(D.f[dirSE  ])[kse  ] = f_SE  ;
-	  //(D.f[dirSW  ])[ksw  ] = f_SW  ;
-	  //(D.f[dirTS  ])[kts  ] = f_TS  ;
-	  //(D.f[dirBS  ])[kbs  ] = f_BS  ;
-	  //(D.f[dirTSE ])[ktse ] = f_TSE ;
-	  //(D.f[dirTSW ])[ktsw ] = f_TSW ;
-	  //(D.f[dirBSE ])[kbse ] = f_BSE ;
-	  //(D.f[dirBSW ])[kbsw ] = f_BSW ;     
+	  //(D.f[S   ])[ks   ] = f_S   ;
+	  //(D.f[SE  ])[kse  ] = f_SE  ;
+	  //(D.f[SW  ])[ksw  ] = f_SW  ;
+	  //(D.f[TS  ])[kts  ] = f_TS  ;
+	  //(D.f[BS  ])[kbs  ] = f_BS  ;
+	  //(D.f[TSE ])[ktse ] = f_TSE ;
+	  //(D.f[TSW ])[ktsw ] = f_TSW ;
+	  //(D.f[BSE ])[kbse ] = f_BSE ;
+	  //(D.f[BSW ])[kbsw ] = f_BSW ;     
 	  // Z
-	  //(D.f[dirB   ])[kb   ] = f_B   ;
-	  //(D.f[dirBE  ])[kbe  ] = f_BE  ;
-	  //(D.f[dirBW  ])[kbw  ] = f_BW  ;
-	  //(D.f[dirBN  ])[kbn  ] = f_BN  ;
-	  //(D.f[dirBS  ])[kbs  ] = f_BS  ;
-	  //(D.f[dirBNE ])[kbne ] = f_BNE ;
-	  //(D.f[dirBNW ])[kbnw ] = f_BNW ;
-	  //(D.f[dirBSE ])[kbse ] = f_BSE ;
-	  //(D.f[dirBSW ])[kbsw ] = f_BSW ;     
+	  //(D.f[B   ])[kb   ] = f_B   ;
+	  //(D.f[BE  ])[kbe  ] = f_BE  ;
+	  //(D.f[BW  ])[kbw  ] = f_BW  ;
+	  //(D.f[BN  ])[kbn  ] = f_BN  ;
+	  //(D.f[BS  ])[kbs  ] = f_BS  ;
+	  //(D.f[BNE ])[kbne ] = f_BNE ;
+	  //(D.f[BNW ])[kbnw ] = f_BNW ;
+	  //(D.f[BSE ])[kbse ] = f_BSE ;
+	  //(D.f[BSW ])[kbsw ] = f_BSW ;     
       //////////////////////////////////////////////////////////////////////////
    }
 }
@@ -3437,95 +3403,95 @@ extern "C" __global__ void QPressDeviceOld27(real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
                      f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_W    = (D.f[dirE   ])[k1e   ];
-      f1_E    = (D.f[dirW   ])[k1w   ];
-      f1_S    = (D.f[dirN   ])[k1n   ];
-      f1_N    = (D.f[dirS   ])[k1s   ];
-      f1_B    = (D.f[dirT   ])[k1t   ];
-      f1_T    = (D.f[dirB   ])[k1b   ];
-      f1_SW   = (D.f[dirNE  ])[k1ne  ];
-      f1_NE   = (D.f[dirSW  ])[k1sw  ];
-      f1_NW   = (D.f[dirSE  ])[k1se  ];
-      f1_SE   = (D.f[dirNW  ])[k1nw  ];
-      f1_BW   = (D.f[dirTE  ])[k1te  ];
-      f1_TE   = (D.f[dirBW  ])[k1bw  ];
-      f1_TW   = (D.f[dirBE  ])[k1be  ];
-      f1_BE   = (D.f[dirTW  ])[k1tw  ];
-      f1_BS   = (D.f[dirTN  ])[k1tn  ];
-      f1_TN   = (D.f[dirBS  ])[k1bs  ];
-      f1_TS   = (D.f[dirBN  ])[k1bn  ];
-      f1_BN   = (D.f[dirTS  ])[k1ts  ];
-      f1_ZERO = (D.f[dirZERO])[k1zero];
-      f1_BSW  = (D.f[dirTNE ])[k1tne ];
-      f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-      f1_BNW  = (D.f[dirTSE ])[k1tse ];
-      f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-      f1_TSW  = (D.f[dirBNE ])[k1bne ];
-      f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-      f1_TNW  = (D.f[dirBSE ])[k1bse ];
-      f1_TSE  = (D.f[dirBNW ])[k1bnw ];
+      f1_W    = (D.f[E   ])[k1e   ];
+      f1_E    = (D.f[W   ])[k1w   ];
+      f1_S    = (D.f[N   ])[k1n   ];
+      f1_N    = (D.f[S   ])[k1s   ];
+      f1_B    = (D.f[T   ])[k1t   ];
+      f1_T    = (D.f[B   ])[k1b   ];
+      f1_SW   = (D.f[NE  ])[k1ne  ];
+      f1_NE   = (D.f[SW  ])[k1sw  ];
+      f1_NW   = (D.f[SE  ])[k1se  ];
+      f1_SE   = (D.f[NW  ])[k1nw  ];
+      f1_BW   = (D.f[TE  ])[k1te  ];
+      f1_TE   = (D.f[BW  ])[k1bw  ];
+      f1_TW   = (D.f[BE  ])[k1be  ];
+      f1_BE   = (D.f[TW  ])[k1tw  ];
+      f1_BS   = (D.f[TN  ])[k1tn  ];
+      f1_TN   = (D.f[BS  ])[k1bs  ];
+      f1_TS   = (D.f[BN  ])[k1bn  ];
+      f1_BN   = (D.f[TS  ])[k1ts  ];
+      f1_ZERO = (D.f[REST])[k1zero];
+      f1_BSW  = (D.f[TNE ])[k1tne ];
+      f1_BNE  = (D.f[TSW ])[k1tsw ];
+      f1_BNW  = (D.f[TSE ])[k1tse ];
+      f1_BSE  = (D.f[TNW ])[k1tnw ];
+      f1_TSW  = (D.f[BNE ])[k1bne ];
+      f1_TNE  = (D.f[BSW ])[k1bsw ];
+      f1_TNW  = (D.f[BSE ])[k1bse ];
+      f1_TSE  = (D.f[BNW ])[k1bnw ];
 
       //////////////////////////////////////////////////////////////////////////
       real drho1    =  f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+
@@ -3537,33 +3503,33 @@ extern "C" __global__ void QPressDeviceOld27(real* rhoBC,
 
       __syncthreads();
 
-      (D.f[dirE   ])[ke   ] = f1_W   -c2o27*drho1;   //  c1o100;  // zero;  //
-      (D.f[dirW   ])[kw   ] = f1_E   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirN   ])[kn   ] = f1_S   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirS   ])[ks   ] = f1_N   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirT   ])[kt   ] = f1_B   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirB   ])[kb   ] = f1_T   -c2o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirNE  ])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirSW  ])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirSE  ])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirNW  ])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTE  ])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBW  ])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBE  ])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTW  ])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTN  ])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBS  ])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBN  ])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTS  ])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirZERO])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTNE ])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTSW ])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTSE ])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTNW ])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBNE ])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBSW ])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBSE ])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBNW ])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //      
+      (D.f[E   ])[ke   ] = f1_W   -c2o27*drho1;   //  c1o100;  // zero;  //
+      (D.f[W   ])[kw   ] = f1_E   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[N   ])[kn   ] = f1_S   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[S   ])[ks   ] = f1_N   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[T   ])[kt   ] = f1_B   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[B   ])[kb   ] = f1_T   -c2o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[NE  ])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[SW  ])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[SE  ])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[NW  ])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TE  ])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BW  ])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BE  ])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TW  ])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TN  ])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BS  ])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BN  ])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TS  ])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[REST])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[TNE ])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[TSW ])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[TSE ])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[TNW ])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BNE ])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BSW ])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BSE ])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BNW ])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //      
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3697,153 +3663,153 @@ extern "C" __global__ void QPressDeviceEQZ27(real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////
     //   Distributions27 kDistTest;
-    //      kDistTest.f[dirE   ] = &kTestRE[dirE   *numberOfBCnodes];
-    //      kDistTest.f[dirW   ] = &kTestRE[dirW   *numberOfBCnodes];
-    //      kDistTest.f[dirN   ] = &kTestRE[dirN   *numberOfBCnodes];
-    //      kDistTest.f[dirS   ] = &kTestRE[dirS   *numberOfBCnodes];
-    //      kDistTest.f[dirT   ] = &kTestRE[dirT   *numberOfBCnodes];
-    //      kDistTest.f[dirB   ] = &kTestRE[dirB   *numberOfBCnodes];
-    //      kDistTest.f[dirNE  ] = &kTestRE[dirNE  *numberOfBCnodes];
-    //      kDistTest.f[dirSW  ] = &kTestRE[dirSW  *numberOfBCnodes];
-    //      kDistTest.f[dirSE  ] = &kTestRE[dirSE  *numberOfBCnodes];
-    //      kDistTest.f[dirNW  ] = &kTestRE[dirNW  *numberOfBCnodes];
-    //      kDistTest.f[dirTE  ] = &kTestRE[dirTE  *numberOfBCnodes];
-    //      kDistTest.f[dirBW  ] = &kTestRE[dirBW  *numberOfBCnodes];
-    //      kDistTest.f[dirBE  ] = &kTestRE[dirBE  *numberOfBCnodes];
-    //      kDistTest.f[dirTW  ] = &kTestRE[dirTW  *numberOfBCnodes];
-    //      kDistTest.f[dirTN  ] = &kTestRE[dirTN  *numberOfBCnodes];
-    //      kDistTest.f[dirBS  ] = &kTestRE[dirBS  *numberOfBCnodes];
-    //      kDistTest.f[dirBN  ] = &kTestRE[dirBN  *numberOfBCnodes];
-    //      kDistTest.f[dirTS  ] = &kTestRE[dirTS  *numberOfBCnodes];
-    //      kDistTest.f[dirZERO] = &kTestRE[dirZERO*numberOfBCnodes];
-    //      kDistTest.f[dirTNE ] = &kTestRE[dirTNE *numberOfBCnodes];
-    //      kDistTest.f[dirTSW ] = &kTestRE[dirTSW *numberOfBCnodes];
-    //      kDistTest.f[dirTSE ] = &kTestRE[dirTSE *numberOfBCnodes];
-    //      kDistTest.f[dirTNW ] = &kTestRE[dirTNW *numberOfBCnodes];
-    //      kDistTest.f[dirBNE ] = &kTestRE[dirBNE *numberOfBCnodes];
-    //      kDistTest.f[dirBSW ] = &kTestRE[dirBSW *numberOfBCnodes];
-    //      kDistTest.f[dirBSE ] = &kTestRE[dirBSE *numberOfBCnodes];
-    //      kDistTest.f[dirBNW ] = &kTestRE[dirBNW *numberOfBCnodes];
+    //      kDistTest.f[E   ] = &kTestRE[E   *numberOfBCnodes];
+    //      kDistTest.f[W   ] = &kTestRE[W   *numberOfBCnodes];
+    //      kDistTest.f[N   ] = &kTestRE[N   *numberOfBCnodes];
+    //      kDistTest.f[S   ] = &kTestRE[S   *numberOfBCnodes];
+    //      kDistTest.f[T   ] = &kTestRE[T   *numberOfBCnodes];
+    //      kDistTest.f[B   ] = &kTestRE[B   *numberOfBCnodes];
+    //      kDistTest.f[NE  ] = &kTestRE[NE  *numberOfBCnodes];
+    //      kDistTest.f[SW  ] = &kTestRE[SW  *numberOfBCnodes];
+    //      kDistTest.f[SE  ] = &kTestRE[SE  *numberOfBCnodes];
+    //      kDistTest.f[NW  ] = &kTestRE[NW  *numberOfBCnodes];
+    //      kDistTest.f[TE  ] = &kTestRE[TE  *numberOfBCnodes];
+    //      kDistTest.f[BW  ] = &kTestRE[BW  *numberOfBCnodes];
+    //      kDistTest.f[BE  ] = &kTestRE[BE  *numberOfBCnodes];
+    //      kDistTest.f[TW  ] = &kTestRE[TW  *numberOfBCnodes];
+    //      kDistTest.f[TN  ] = &kTestRE[TN  *numberOfBCnodes];
+    //      kDistTest.f[BS  ] = &kTestRE[BS  *numberOfBCnodes];
+    //      kDistTest.f[BN  ] = &kTestRE[BN  *numberOfBCnodes];
+    //      kDistTest.f[TS  ] = &kTestRE[TS  *numberOfBCnodes];
+    //      kDistTest.f[REST] = &kTestRE[REST*numberOfBCnodes];
+    //      kDistTest.f[TNE ] = &kTestRE[TNE *numberOfBCnodes];
+    //      kDistTest.f[TSW ] = &kTestRE[TSW *numberOfBCnodes];
+    //      kDistTest.f[TSE ] = &kTestRE[TSE *numberOfBCnodes];
+    //      kDistTest.f[TNW ] = &kTestRE[TNW *numberOfBCnodes];
+    //      kDistTest.f[BNE ] = &kTestRE[BNE *numberOfBCnodes];
+    //      kDistTest.f[BSW ] = &kTestRE[BSW *numberOfBCnodes];
+    //      kDistTest.f[BSE ] = &kTestRE[BSE *numberOfBCnodes];
+    //      kDistTest.f[BNW ] = &kTestRE[BNW *numberOfBCnodes];
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //   //real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
-   //   //f1_W    = (D.f[dirE   ])[k1e   ];
-   //   //f1_E    = (D.f[dirW   ])[k1w   ];
-   //   //f1_S    = (D.f[dirN   ])[k1n   ];
-   //   //f1_N    = (D.f[dirS   ])[k1s   ];
-   //   //f1_B    = (D.f[dirT   ])[k1t   ];
-   //   //f1_T    = (D.f[dirB   ])[k1b   ];
-   //   //f1_SW   = (D.f[dirNE  ])[k1ne  ];
-   //   //f1_NE   = (D.f[dirSW  ])[k1sw  ];
-   //   //f1_NW   = (D.f[dirSE  ])[k1se  ];
-   //   //f1_SE   = (D.f[dirNW  ])[k1nw  ];
-   //   //f1_BW   = (D.f[dirTE  ])[k1te  ];
-   //   //f1_TE   = (D.f[dirBW  ])[k1bw  ];
-   //   //f1_TW   = (D.f[dirBE  ])[k1be  ];
-   //   //f1_BE   = (D.f[dirTW  ])[k1tw  ];
-   //   //f1_BS   = (D.f[dirTN  ])[k1tn  ];
-   //   //f1_TN   = (D.f[dirBS  ])[k1bs  ];
-   //   //f1_TS   = (D.f[dirBN  ])[k1bn  ];
-   //   //f1_BN   = (D.f[dirTS  ])[k1ts  ];
-   //   //f1_ZERO = (D.f[dirZERO])[k1zero];
-   //   //f1_BSW  = (D.f[dirTNE ])[k1tne ];
-   //   //f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-   //   //f1_BNW  = (D.f[dirTSE ])[k1tse ];
-   //   //f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-   //   //f1_TSW  = (D.f[dirBNE ])[k1bne ];
-   //   //f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-   //   //f1_TNW  = (D.f[dirBSE ])[k1bse ];
-   //   //f1_TSE  = (D.f[dirBNW ])[k1bnw ];
+   //   //f1_W    = (D.f[E   ])[k1e   ];
+   //   //f1_E    = (D.f[W   ])[k1w   ];
+   //   //f1_S    = (D.f[N   ])[k1n   ];
+   //   //f1_N    = (D.f[S   ])[k1s   ];
+   //   //f1_B    = (D.f[T   ])[k1t   ];
+   //   //f1_T    = (D.f[B   ])[k1b   ];
+   //   //f1_SW   = (D.f[NE  ])[k1ne  ];
+   //   //f1_NE   = (D.f[SW  ])[k1sw  ];
+   //   //f1_NW   = (D.f[SE  ])[k1se  ];
+   //   //f1_SE   = (D.f[NW  ])[k1nw  ];
+   //   //f1_BW   = (D.f[TE  ])[k1te  ];
+   //   //f1_TE   = (D.f[BW  ])[k1bw  ];
+   //   //f1_TW   = (D.f[BE  ])[k1be  ];
+   //   //f1_BE   = (D.f[TW  ])[k1tw  ];
+   //   //f1_BS   = (D.f[TN  ])[k1tn  ];
+   //   //f1_TN   = (D.f[BS  ])[k1bs  ];
+   //   //f1_TS   = (D.f[BN  ])[k1bn  ];
+   //   //f1_BN   = (D.f[TS  ])[k1ts  ];
+   //   //f1_ZERO = (D.f[REST])[k1zero];
+   //   //f1_BSW  = (D.f[TNE ])[k1tne ];
+   //   //f1_BNE  = (D.f[TSW ])[k1tsw ];
+   //   //f1_BNW  = (D.f[TSE ])[k1tse ];
+   //   //f1_BSE  = (D.f[TNW ])[k1tnw ];
+   //   //f1_TSW  = (D.f[BNE ])[k1bne ];
+   //   //f1_TNE  = (D.f[BSW ])[k1bsw ];
+   //   //f1_TNW  = (D.f[BSE ])[k1bse ];
+   //   //f1_TSE  = (D.f[BNW ])[k1bnw ];
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    //   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //   real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
-   //   f1_E    = (D.f[dirE   ])[k1e   ];
-   //   f1_W    = (D.f[dirW   ])[k1w   ];
-   //   f1_N    = (D.f[dirN   ])[k1n   ];
-   //   f1_S    = (D.f[dirS   ])[k1s   ];
-   //   f1_T    = (D.f[dirT   ])[k1t   ];
-   //   f1_B    = (D.f[dirB   ])[k1b   ];
-   //   f1_NE   = (D.f[dirNE  ])[k1ne  ];
-   //   f1_SW   = (D.f[dirSW  ])[k1sw  ];
-   //   f1_SE   = (D.f[dirSE  ])[k1se  ];
-   //   f1_NW   = (D.f[dirNW  ])[k1nw  ];
-   //   f1_TE   = (D.f[dirTE  ])[k1te  ];
-   //   f1_BW   = (D.f[dirBW  ])[k1bw  ];
-   //   f1_BE   = (D.f[dirBE  ])[k1be  ];
-   //   f1_TW   = (D.f[dirTW  ])[k1tw  ];
-   //   f1_TN   = (D.f[dirTN  ])[k1tn  ];
-   //   f1_BS   = (D.f[dirBS  ])[k1bs  ];
-   //   f1_BN   = (D.f[dirBN  ])[k1bn  ];
-   //   f1_TS   = (D.f[dirTS  ])[k1ts  ];
-   //   f1_ZERO = (D.f[dirZERO])[k1zero];
-   //   f1_TNE  = (D.f[dirTNE ])[k1tne ];
-   //   f1_TSW  = (D.f[dirTSW ])[k1tsw ];
-   //   f1_TSE  = (D.f[dirTSE ])[k1tse ];
-   //   f1_TNW  = (D.f[dirTNW ])[k1tnw ];
-   //   f1_BNE  = (D.f[dirBNE ])[k1bne ];
-   //   f1_BSW  = (D.f[dirBSW ])[k1bsw ];
-   //   f1_BSE  = (D.f[dirBSE ])[k1bse ];
-   //   f1_BNW  = (D.f[dirBNW ])[k1bnw ];
+   //   f1_E    = (D.f[E   ])[k1e   ];
+   //   f1_W    = (D.f[W   ])[k1w   ];
+   //   f1_N    = (D.f[N   ])[k1n   ];
+   //   f1_S    = (D.f[S   ])[k1s   ];
+   //   f1_T    = (D.f[T   ])[k1t   ];
+   //   f1_B    = (D.f[B   ])[k1b   ];
+   //   f1_NE   = (D.f[NE  ])[k1ne  ];
+   //   f1_SW   = (D.f[SW  ])[k1sw  ];
+   //   f1_SE   = (D.f[SE  ])[k1se  ];
+   //   f1_NW   = (D.f[NW  ])[k1nw  ];
+   //   f1_TE   = (D.f[TE  ])[k1te  ];
+   //   f1_BW   = (D.f[BW  ])[k1bw  ];
+   //   f1_BE   = (D.f[BE  ])[k1be  ];
+   //   f1_TW   = (D.f[TW  ])[k1tw  ];
+   //   f1_TN   = (D.f[TN  ])[k1tn  ];
+   //   f1_BS   = (D.f[BS  ])[k1bs  ];
+   //   f1_BN   = (D.f[BN  ])[k1bn  ];
+   //   f1_TS   = (D.f[TS  ])[k1ts  ];
+   //   f1_ZERO = (D.f[REST])[k1zero];
+   //   f1_TNE  = (D.f[TNE ])[k1tne ];
+   //   f1_TSW  = (D.f[TSW ])[k1tsw ];
+   //   f1_TSE  = (D.f[TSE ])[k1tse ];
+   //   f1_TNW  = (D.f[TNW ])[k1tnw ];
+   //   f1_BNE  = (D.f[BNE ])[k1bne ];
+   //   f1_BSW  = (D.f[BSW ])[k1bsw ];
+   //   f1_BSE  = (D.f[BSE ])[k1bse ];
+   //   f1_BNW  = (D.f[BNW ])[k1bnw ];
    //   //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    //   //////////////////////////////////////////////////////////////////////////
@@ -3948,88 +3914,88 @@ extern "C" __global__ void QPressDeviceEQZ27(real* rhoBC,
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
             // based on BGK Plus Comp
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			//double mfabb = (D.f[dirE   ])[k1e   ];
-			//double mfcbb = (D.f[dirW   ])[k1w   ];
-			//double mfbab = (D.f[dirN   ])[k1n   ];
-			//double mfbcb = (D.f[dirS   ])[k1s   ];
-			//double mfbba = (D.f[dirT   ])[k1t   ];
-			//double mfbbc = (D.f[dirB   ])[k1b   ];
-			//double mfaab = (D.f[dirNE  ])[k1ne  ];
-			//double mfccb = (D.f[dirSW  ])[k1sw  ];
-			//double mfacb = (D.f[dirSE  ])[k1se  ];
-			//double mfcab = (D.f[dirNW  ])[k1nw  ];
-			//double mfaba = (D.f[dirTE  ])[k1te  ];
-			//double mfcbc = (D.f[dirBW  ])[k1bw  ];
-			//double mfabc = (D.f[dirBE  ])[k1be  ];
-			//double mfcba = (D.f[dirTW  ])[k1tw  ];
-			//double mfbaa = (D.f[dirTN  ])[k1tn  ];
-			//double mfbcc = (D.f[dirBS  ])[k1bs  ];
-			//double mfbac = (D.f[dirBN  ])[k1bn  ];
-			//double mfbca = (D.f[dirTS  ])[k1ts  ];
-			//double mfbbb = (D.f[dirZERO])[k1zero];
-			//double mfaaa = (D.f[dirTNE ])[k1tne ];
-			//double mfcca = (D.f[dirTSW ])[k1tsw ];
-			//double mfaca = (D.f[dirTSE ])[k1tse ];
-			//double mfcaa = (D.f[dirTNW ])[k1tnw ];
-			//double mfaac = (D.f[dirBNE ])[k1bne ];
-			//double mfccc = (D.f[dirBSW ])[k1bsw ];
-			//double mfacc = (D.f[dirBSE ])[k1bse ];
-			//double mfcac = (D.f[dirBNW ])[k1bnw ];
-			real mfabb = (D.f[dirE   ])[k1e   ];
-			real mfcbb = (D.f[dirW   ])[k1w   ];
-			real mfbab = (D.f[dirN   ])[k1n   ];
-			real mfbcb = (D.f[dirS   ])[k1s   ];
-			real mfbba = (D.f[dirT   ])[k1t   ];
-			real mfbbc = (D.f[dirB   ])[k1b   ];
-			real mfaab = (D.f[dirNE  ])[k1ne  ];
-			real mfccb = (D.f[dirSW  ])[k1sw  ];
-			real mfacb = (D.f[dirSE  ])[k1se  ];
-			real mfcab = (D.f[dirNW  ])[k1nw  ];
-			real mfaba = (D.f[dirTE  ])[k1te  ];
-			real mfcbc = (D.f[dirBW  ])[k1bw  ];
-			real mfabc = (D.f[dirBE  ])[k1be  ];
-			real mfcba = (D.f[dirTW  ])[k1tw  ];
-			real mfbaa = (D.f[dirTN  ])[k1tn  ];
-			real mfbcc = (D.f[dirBS  ])[k1bs  ];
-			real mfbac = (D.f[dirBN  ])[k1bn  ];
-			real mfbca = (D.f[dirTS  ])[k1ts  ];
-			real mfbbb = (D.f[dirZERO])[k1zero];
-			real mfaaa = (D.f[dirTNE ])[k1tne ];
-			real mfcca = (D.f[dirTSW ])[k1tsw ];
-			real mfaca = (D.f[dirTSE ])[k1tse ];
-			real mfcaa = (D.f[dirTNW ])[k1tnw ];
-			real mfaac = (D.f[dirBNE ])[k1bne ];
-			real mfccc = (D.f[dirBSW ])[k1bsw ];
-			real mfacc = (D.f[dirBSE ])[k1bse ];
-			real mfcac = (D.f[dirBNW ])[k1bnw ];
-
-			//real mfcbb = (D.f[dirE   ])[ke   ];
-			//real mfabb = (D.f[dirW   ])[kw   ];
-			//real mfbcb = (D.f[dirN   ])[kn   ];
-			//real mfbab = (D.f[dirS   ])[ks   ];
-			//real mfbbc = (D.f[dirT   ])[kt   ];
-			//real mfbba = (D.f[dirB   ])[kb   ];
-			//real mfccb = (D.f[dirNE  ])[kne  ];
-			//real mfaab = (D.f[dirSW  ])[ksw  ];
-			//real mfcab = (D.f[dirSE  ])[kse  ];
-			//real mfacb = (D.f[dirNW  ])[knw  ];
-			//real mfcbc = (D.f[dirTE  ])[kte  ];
-			//real mfaba = (D.f[dirBW  ])[kbw  ];
-			//real mfcba = (D.f[dirBE  ])[kbe  ];
-			//real mfabc = (D.f[dirTW  ])[ktw  ];
-			//real mfbcc = (D.f[dirTN  ])[ktn  ];
-			//real mfbaa = (D.f[dirBS  ])[kbs  ];
-			//real mfbca = (D.f[dirBN  ])[kbn  ];
-			//real mfbac = (D.f[dirTS  ])[kts  ];
-			//real mfbbb = (D.f[dirZERO])[kzero];
-			//real mfccc = (D.f[dirTNE ])[ktne ];
-			//real mfaac = (D.f[dirTSW ])[ktsw ];
-			//real mfcac = (D.f[dirTSE ])[ktse ];
-			//real mfacc = (D.f[dirTNW ])[ktnw ];
-			//real mfcca = (D.f[dirBNE ])[kbne ];
-			//real mfaaa = (D.f[dirBSW ])[kbsw ];
-			//real mfcaa = (D.f[dirBSE ])[kbse ];
-			//real mfaca = (D.f[dirBNW ])[kbnw ];
+			//double mfabb = (D.f[E   ])[k1e   ];
+			//double mfcbb = (D.f[W   ])[k1w   ];
+			//double mfbab = (D.f[N   ])[k1n   ];
+			//double mfbcb = (D.f[S   ])[k1s   ];
+			//double mfbba = (D.f[T   ])[k1t   ];
+			//double mfbbc = (D.f[B   ])[k1b   ];
+			//double mfaab = (D.f[NE  ])[k1ne  ];
+			//double mfccb = (D.f[SW  ])[k1sw  ];
+			//double mfacb = (D.f[SE  ])[k1se  ];
+			//double mfcab = (D.f[NW  ])[k1nw  ];
+			//double mfaba = (D.f[TE  ])[k1te  ];
+			//double mfcbc = (D.f[BW  ])[k1bw  ];
+			//double mfabc = (D.f[BE  ])[k1be  ];
+			//double mfcba = (D.f[TW  ])[k1tw  ];
+			//double mfbaa = (D.f[TN  ])[k1tn  ];
+			//double mfbcc = (D.f[BS  ])[k1bs  ];
+			//double mfbac = (D.f[BN  ])[k1bn  ];
+			//double mfbca = (D.f[TS  ])[k1ts  ];
+			//double mfbbb = (D.f[REST])[k1zero];
+			//double mfaaa = (D.f[TNE ])[k1tne ];
+			//double mfcca = (D.f[TSW ])[k1tsw ];
+			//double mfaca = (D.f[TSE ])[k1tse ];
+			//double mfcaa = (D.f[TNW ])[k1tnw ];
+			//double mfaac = (D.f[BNE ])[k1bne ];
+			//double mfccc = (D.f[BSW ])[k1bsw ];
+			//double mfacc = (D.f[BSE ])[k1bse ];
+			//double mfcac = (D.f[BNW ])[k1bnw ];
+			real mfabb = (D.f[E   ])[k1e   ];
+			real mfcbb = (D.f[W   ])[k1w   ];
+			real mfbab = (D.f[N   ])[k1n   ];
+			real mfbcb = (D.f[S   ])[k1s   ];
+			real mfbba = (D.f[T   ])[k1t   ];
+			real mfbbc = (D.f[B   ])[k1b   ];
+			real mfaab = (D.f[NE  ])[k1ne  ];
+			real mfccb = (D.f[SW  ])[k1sw  ];
+			real mfacb = (D.f[SE  ])[k1se  ];
+			real mfcab = (D.f[NW  ])[k1nw  ];
+			real mfaba = (D.f[TE  ])[k1te  ];
+			real mfcbc = (D.f[BW  ])[k1bw  ];
+			real mfabc = (D.f[BE  ])[k1be  ];
+			real mfcba = (D.f[TW  ])[k1tw  ];
+			real mfbaa = (D.f[TN  ])[k1tn  ];
+			real mfbcc = (D.f[BS  ])[k1bs  ];
+			real mfbac = (D.f[BN  ])[k1bn  ];
+			real mfbca = (D.f[TS  ])[k1ts  ];
+			real mfbbb = (D.f[REST])[k1zero];
+			real mfaaa = (D.f[TNE ])[k1tne ];
+			real mfcca = (D.f[TSW ])[k1tsw ];
+			real mfaca = (D.f[TSE ])[k1tse ];
+			real mfcaa = (D.f[TNW ])[k1tnw ];
+			real mfaac = (D.f[BNE ])[k1bne ];
+			real mfccc = (D.f[BSW ])[k1bsw ];
+			real mfacc = (D.f[BSE ])[k1bse ];
+			real mfcac = (D.f[BNW ])[k1bnw ];
+
+			//real mfcbb = (D.f[E   ])[ke   ];
+			//real mfabb = (D.f[W   ])[kw   ];
+			//real mfbcb = (D.f[N   ])[kn   ];
+			//real mfbab = (D.f[S   ])[ks   ];
+			//real mfbbc = (D.f[T   ])[kt   ];
+			//real mfbba = (D.f[B   ])[kb   ];
+			//real mfccb = (D.f[NE  ])[kne  ];
+			//real mfaab = (D.f[SW  ])[ksw  ];
+			//real mfcab = (D.f[SE  ])[kse  ];
+			//real mfacb = (D.f[NW  ])[knw  ];
+			//real mfcbc = (D.f[TE  ])[kte  ];
+			//real mfaba = (D.f[BW  ])[kbw  ];
+			//real mfcba = (D.f[BE  ])[kbe  ];
+			//real mfabc = (D.f[TW  ])[ktw  ];
+			//real mfbcc = (D.f[TN  ])[ktn  ];
+			//real mfbaa = (D.f[BS  ])[kbs  ];
+			//real mfbca = (D.f[BN  ])[kbn  ];
+			//real mfbac = (D.f[TS  ])[kts  ];
+			//real mfbbb = (D.f[REST])[kzero];
+			//real mfccc = (D.f[TNE ])[ktne ];
+			//real mfaac = (D.f[TSW ])[ktsw ];
+			//real mfcac = (D.f[TSE ])[ktse ];
+			//real mfacc = (D.f[TNW ])[ktnw ];
+			//real mfcca = (D.f[BNE ])[kbne ];
+			//real mfaaa = (D.f[BSW ])[kbsw ];
+			//real mfcaa = (D.f[BSE ])[kbse ];
+			//real mfaca = (D.f[BNW ])[kbnw ];
 			////////////////////////////////////////////////////////////////////////////////////
 			//real rho   = (((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 			//				(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -4056,61 +4022,61 @@ extern "C" __global__ void QPressDeviceEQZ27(real* rhoBC,
 			////////////////////////////////////////////////////////////////////////////////////////
 			////round off error test
 			//if(vvx!=zero){
-			//	(kDistTest.f[dirE   ])[k] = mfabb;
-			//	(kDistTest.f[dirW   ])[k] = mfcbb;
-			//	(kDistTest.f[dirN   ])[k] = mfbab;
-			//	(kDistTest.f[dirS   ])[k] = mfbcb;
-			//	(kDistTest.f[dirT   ])[k] = mfbba;
-			//	(kDistTest.f[dirB   ])[k] = mfbbc;
-			//	(kDistTest.f[dirNE  ])[k] = mfaab;
-			//	(kDistTest.f[dirSW  ])[k] = mfccb;
-			//	(kDistTest.f[dirSE  ])[k] = mfacb;
-			//	(kDistTest.f[dirNW  ])[k] = mfcab;
-			//	(kDistTest.f[dirTE  ])[k] = mfaba;
-			//	(kDistTest.f[dirBW  ])[k] = mfcbc;
-			//	(kDistTest.f[dirBE  ])[k] = mfabc;
-			//	(kDistTest.f[dirTW  ])[k] = mfcba;
-			//	(kDistTest.f[dirTN  ])[k] = mfbaa;
-			//	(kDistTest.f[dirBS  ])[k] = mfbcc;
-			//	(kDistTest.f[dirBN  ])[k] = mfbac;
-			//	(kDistTest.f[dirTS  ])[k] = mfbca;
-			//	(kDistTest.f[dirZERO])[k] = KQK;
-			//	(kDistTest.f[dirTNE ])[k] = mfaaa;
-			//	(kDistTest.f[dirTSW ])[k] = mfcca;
-			//	(kDistTest.f[dirTSE ])[k] = mfaca;
-			//	(kDistTest.f[dirTNW ])[k] = mfcaa;
-			//	(kDistTest.f[dirBNE ])[k] = mfaac;
-			//	(kDistTest.f[dirBSW ])[k] = mfccc;
-			//	(kDistTest.f[dirBSE ])[k] = mfacc;
-			//	(kDistTest.f[dirBNW ])[k] = mfcac;
+			//	(kDistTest.f[E   ])[k] = mfabb;
+			//	(kDistTest.f[W   ])[k] = mfcbb;
+			//	(kDistTest.f[N   ])[k] = mfbab;
+			//	(kDistTest.f[S   ])[k] = mfbcb;
+			//	(kDistTest.f[T   ])[k] = mfbba;
+			//	(kDistTest.f[B   ])[k] = mfbbc;
+			//	(kDistTest.f[NE  ])[k] = mfaab;
+			//	(kDistTest.f[SW  ])[k] = mfccb;
+			//	(kDistTest.f[SE  ])[k] = mfacb;
+			//	(kDistTest.f[NW  ])[k] = mfcab;
+			//	(kDistTest.f[TE  ])[k] = mfaba;
+			//	(kDistTest.f[BW  ])[k] = mfcbc;
+			//	(kDistTest.f[BE  ])[k] = mfabc;
+			//	(kDistTest.f[TW  ])[k] = mfcba;
+			//	(kDistTest.f[TN  ])[k] = mfbaa;
+			//	(kDistTest.f[BS  ])[k] = mfbcc;
+			//	(kDistTest.f[BN  ])[k] = mfbac;
+			//	(kDistTest.f[TS  ])[k] = mfbca;
+			//	(kDistTest.f[REST])[k] = KQK;
+			//	(kDistTest.f[TNE ])[k] = mfaaa;
+			//	(kDistTest.f[TSW ])[k] = mfcca;
+			//	(kDistTest.f[TSE ])[k] = mfaca;
+			//	(kDistTest.f[TNW ])[k] = mfcaa;
+			//	(kDistTest.f[BNE ])[k] = mfaac;
+			//	(kDistTest.f[BSW ])[k] = mfccc;
+			//	(kDistTest.f[BSE ])[k] = mfacc;
+			//	(kDistTest.f[BNW ])[k] = mfcac;
 			//}else{
-			//	(kDistTest.f[dirE   ])[k] = zero;
-			//	(kDistTest.f[dirW   ])[k] = zero;
-			//	(kDistTest.f[dirN   ])[k] = zero;
-			//	(kDistTest.f[dirS   ])[k] = zero;
-			//	(kDistTest.f[dirT   ])[k] = zero;
-			//	(kDistTest.f[dirB   ])[k] = zero;
-			//	(kDistTest.f[dirNE  ])[k] = zero;
-			//	(kDistTest.f[dirSW  ])[k] = zero;
-			//	(kDistTest.f[dirSE  ])[k] = zero;
-			//	(kDistTest.f[dirNW  ])[k] = zero;
-			//	(kDistTest.f[dirTE  ])[k] = zero;
-			//	(kDistTest.f[dirBW  ])[k] = zero;
-			//	(kDistTest.f[dirBE  ])[k] = zero;
-			//	(kDistTest.f[dirTW  ])[k] = zero;
-			//	(kDistTest.f[dirTN  ])[k] = zero;
-			//	(kDistTest.f[dirBS  ])[k] = zero;
-			//	(kDistTest.f[dirBN  ])[k] = zero;
-			//	(kDistTest.f[dirTS  ])[k] = zero;
-			//	(kDistTest.f[dirZERO])[k] = zero;
-			//	(kDistTest.f[dirTNE ])[k] = zero;
-			//	(kDistTest.f[dirTSW ])[k] = zero;
-			//	(kDistTest.f[dirTSE ])[k] = zero;
-			//	(kDistTest.f[dirTNW ])[k] = zero;
-			//	(kDistTest.f[dirBNE ])[k] = zero;
-			//	(kDistTest.f[dirBSW ])[k] = zero;
-			//	(kDistTest.f[dirBSE ])[k] = zero;
-			//	(kDistTest.f[dirBNW ])[k] = zero;
+			//	(kDistTest.f[E   ])[k] = zero;
+			//	(kDistTest.f[W   ])[k] = zero;
+			//	(kDistTest.f[N   ])[k] = zero;
+			//	(kDistTest.f[S   ])[k] = zero;
+			//	(kDistTest.f[T   ])[k] = zero;
+			//	(kDistTest.f[B   ])[k] = zero;
+			//	(kDistTest.f[NE  ])[k] = zero;
+			//	(kDistTest.f[SW  ])[k] = zero;
+			//	(kDistTest.f[SE  ])[k] = zero;
+			//	(kDistTest.f[NW  ])[k] = zero;
+			//	(kDistTest.f[TE  ])[k] = zero;
+			//	(kDistTest.f[BW  ])[k] = zero;
+			//	(kDistTest.f[BE  ])[k] = zero;
+			//	(kDistTest.f[TW  ])[k] = zero;
+			//	(kDistTest.f[TN  ])[k] = zero;
+			//	(kDistTest.f[BS  ])[k] = zero;
+			//	(kDistTest.f[BN  ])[k] = zero;
+			//	(kDistTest.f[TS  ])[k] = zero;
+			//	(kDistTest.f[REST])[k] = zero;
+			//	(kDistTest.f[TNE ])[k] = zero;
+			//	(kDistTest.f[TSW ])[k] = zero;
+			//	(kDistTest.f[TSE ])[k] = zero;
+			//	(kDistTest.f[TNW ])[k] = zero;
+			//	(kDistTest.f[BNE ])[k] = zero;
+			//	(kDistTest.f[BSW ])[k] = zero;
+			//	(kDistTest.f[BSE ])[k] = zero;
+			//	(kDistTest.f[BNW ])[k] = zero;
 			//}
 
 			//////////////////////////////////////////////////////////////////////////////////////
@@ -4202,149 +4168,149 @@ extern "C" __global__ void QPressDeviceEQZ27(real* rhoBC,
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //if (isEvenTimestep==true)
       //{
-      //   D.f[dirE   ] = &DD[dirE   *size_Mat];
-      //   D.f[dirW   ] = &DD[dirW   *size_Mat];
-      //   D.f[dirN   ] = &DD[dirN   *size_Mat];
-      //   D.f[dirS   ] = &DD[dirS   *size_Mat];
-      //   D.f[dirT   ] = &DD[dirT   *size_Mat];
-      //   D.f[dirB   ] = &DD[dirB   *size_Mat];
-      //   D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      //   D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      //   D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      //   D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      //   D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      //   D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      //   D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      //   D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      //   D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      //   D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      //   D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      //   D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      //   D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      //   D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      //   D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      //   D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      //   D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      //   D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      //   D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      //   D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      //   D.f[E   ] = &DD[E   *size_Mat];
+      //   D.f[W   ] = &DD[W   *size_Mat];
+      //   D.f[N   ] = &DD[N   *size_Mat];
+      //   D.f[S   ] = &DD[S   *size_Mat];
+      //   D.f[T   ] = &DD[T   *size_Mat];
+      //   D.f[B   ] = &DD[B   *size_Mat];
+      //   D.f[NE  ] = &DD[NE  *size_Mat];
+      //   D.f[SW  ] = &DD[SW  *size_Mat];
+      //   D.f[SE  ] = &DD[SE  *size_Mat];
+      //   D.f[NW  ] = &DD[NW  *size_Mat];
+      //   D.f[TE  ] = &DD[TE  *size_Mat];
+      //   D.f[BW  ] = &DD[BW  *size_Mat];
+      //   D.f[BE  ] = &DD[BE  *size_Mat];
+      //   D.f[TW  ] = &DD[TW  *size_Mat];
+      //   D.f[TN  ] = &DD[TN  *size_Mat];
+      //   D.f[BS  ] = &DD[BS  *size_Mat];
+      //   D.f[BN  ] = &DD[BN  *size_Mat];
+      //   D.f[TS  ] = &DD[TS  *size_Mat];
+      //   D.f[REST] = &DD[REST*size_Mat];
+      //   D.f[TNE ] = &DD[TNE *size_Mat];
+      //   D.f[TSW ] = &DD[TSW *size_Mat];
+      //   D.f[TSE ] = &DD[TSE *size_Mat];
+      //   D.f[TNW ] = &DD[TNW *size_Mat];
+      //   D.f[BNE ] = &DD[BNE *size_Mat];
+      //   D.f[BSW ] = &DD[BSW *size_Mat];
+      //   D.f[BSE ] = &DD[BSE *size_Mat];
+      //   D.f[BNW ] = &DD[BNW *size_Mat];
       //} 
       //else
       //{
-      //   D.f[dirW   ] = &DD[dirE   *size_Mat];
-      //   D.f[dirE   ] = &DD[dirW   *size_Mat];
-      //   D.f[dirS   ] = &DD[dirN   *size_Mat];
-      //   D.f[dirN   ] = &DD[dirS   *size_Mat];
-      //   D.f[dirB   ] = &DD[dirT   *size_Mat];
-      //   D.f[dirT   ] = &DD[dirB   *size_Mat];
-      //   D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      //   D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      //   D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      //   D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      //   D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      //   D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      //   D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      //   D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      //   D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      //   D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      //   D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      //   D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      //   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      //   D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      //   D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      //   D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      //   D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      //   D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      //   D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      //   D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      //   D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      //   D.f[W   ] = &DD[E   *size_Mat];
+      //   D.f[E   ] = &DD[W   *size_Mat];
+      //   D.f[S   ] = &DD[N   *size_Mat];
+      //   D.f[N   ] = &DD[S   *size_Mat];
+      //   D.f[B   ] = &DD[T   *size_Mat];
+      //   D.f[T   ] = &DD[B   *size_Mat];
+      //   D.f[SW  ] = &DD[NE  *size_Mat];
+      //   D.f[NE  ] = &DD[SW  *size_Mat];
+      //   D.f[NW  ] = &DD[SE  *size_Mat];
+      //   D.f[SE  ] = &DD[NW  *size_Mat];
+      //   D.f[BW  ] = &DD[TE  *size_Mat];
+      //   D.f[TE  ] = &DD[BW  *size_Mat];
+      //   D.f[TW  ] = &DD[BE  *size_Mat];
+      //   D.f[BE  ] = &DD[TW  *size_Mat];
+      //   D.f[BS  ] = &DD[TN  *size_Mat];
+      //   D.f[TN  ] = &DD[BS  *size_Mat];
+      //   D.f[TS  ] = &DD[BN  *size_Mat];
+      //   D.f[BN  ] = &DD[TS  *size_Mat];
+      //   D.f[REST] = &DD[REST*size_Mat];
+      //   D.f[TNE ] = &DD[BSW *size_Mat];
+      //   D.f[TSW ] = &DD[BNE *size_Mat];
+      //   D.f[TSE ] = &DD[BNW *size_Mat];
+      //   D.f[TNW ] = &DD[BSE *size_Mat];
+      //   D.f[BNE ] = &DD[TSW *size_Mat];
+      //   D.f[BSW ] = &DD[TNE *size_Mat];
+      //   D.f[BSE ] = &DD[TNW *size_Mat];
+      //   D.f[BNW ] = &DD[TSE *size_Mat];
       //}
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //__syncthreads();
 
-			(D.f[dirE   ])[ke   ] = mfabb;//mfcbb;
-			(D.f[dirW   ])[kw   ] = mfcbb;//mfabb;
-			(D.f[dirN   ])[kn   ] = mfbab;//mfbcb;
-			(D.f[dirS   ])[ks   ] = mfbcb;//mfbab;
-			(D.f[dirT   ])[kt   ] = mfbba;//mfbbc;
-			(D.f[dirB   ])[kb   ] = mfbbc;//mfbba;
-			(D.f[dirNE  ])[kne  ] = mfaab;//mfccb;
-			(D.f[dirSW  ])[ksw  ] = mfccb;//mfaab;
-			(D.f[dirSE  ])[kse  ] = mfacb;//mfcab;
-			(D.f[dirNW  ])[knw  ] = mfcab;//mfacb;
-			(D.f[dirTE  ])[kte  ] = mfaba;//mfcbc;
-			(D.f[dirBW  ])[kbw  ] = mfcbc;//mfaba;
-			(D.f[dirBE  ])[kbe  ] = mfabc;//mfcba;
-			(D.f[dirTW  ])[ktw  ] = mfcba;//mfabc;
-			(D.f[dirTN  ])[ktn  ] = mfbaa;//mfbcc;
-			(D.f[dirBS  ])[kbs  ] = mfbcc;//mfbaa;
-			(D.f[dirBN  ])[kbn  ] = mfbac;//mfbca;
-			(D.f[dirTS  ])[kts  ] = mfbca;//mfbac;
-			(D.f[dirZERO])[kzero] = mfbbb;//mfbbb;
-			(D.f[dirTNE ])[ktne ] = mfaaa;//mfccc;
-			(D.f[dirTSW ])[ktsw ] = mfcca;//mfaac;
-			(D.f[dirTSE ])[ktse ] = mfaca;//mfcac;
-			(D.f[dirTNW ])[ktnw ] = mfcaa;//mfacc;
-			(D.f[dirBNE ])[kbne ] = mfaac;//mfcca;
-			(D.f[dirBSW ])[kbsw ] = mfccc;//mfaaa;
-			(D.f[dirBSE ])[kbse ] = mfacc;//mfcaa;
-			(D.f[dirBNW ])[kbnw ] = mfcac;//mfaca;
-			//(D.f[dirE   ])[ke   ] = mfcbb;
-			//(D.f[dirW   ])[kw   ] = mfabb;
-			//(D.f[dirN   ])[kn   ] = mfbcb;
-			//(D.f[dirS   ])[ks   ] = mfbab;
-			//(D.f[dirT   ])[kt   ] = mfbbc;
-			//(D.f[dirB   ])[kb   ] = mfbba;
-			//(D.f[dirNE  ])[kne  ] = mfccb;
-			//(D.f[dirSW  ])[ksw  ] = mfaab;
-			//(D.f[dirSE  ])[kse  ] = mfcab;
-			//(D.f[dirNW  ])[knw  ] = mfacb;
-			//(D.f[dirTE  ])[kte  ] = mfcbc;
-			//(D.f[dirBW  ])[kbw  ] = mfaba;
-			//(D.f[dirBE  ])[kbe  ] = mfcba;
-			//(D.f[dirTW  ])[ktw  ] = mfabc;
-			//(D.f[dirTN  ])[ktn  ] = mfbcc;
-			//(D.f[dirBS  ])[kbs  ] = mfbaa;
-			//(D.f[dirBN  ])[kbn  ] = mfbca;
-			//(D.f[dirTS  ])[kts  ] = mfbac;
-			//(D.f[dirZERO])[kzero] = mfbbb;
-			//(D.f[dirTNE ])[ktne ] = mfccc;
-			//(D.f[dirTSW ])[ktsw ] = mfaac;
-			//(D.f[dirTSE ])[ktse ] = mfcac;
-			//(D.f[dirTNW ])[ktnw ] = mfacc;
-			//(D.f[dirBNE ])[kbne ] = mfcca;
-			//(D.f[dirBSW ])[kbsw ] = mfaaa;
-			//(D.f[dirBSE ])[kbse ] = mfcaa;
-			//(D.f[dirBNW ])[kbnw ] = mfaca;
-
-      //(D.f[dirE   ])[ke   ] = fE ;  //f1_E ;   //fW;    //fE ;  
-      //(D.f[dirW   ])[kw   ] = fW ;  //f1_W ;   //fE;    //fW ;  
-      //(D.f[dirN   ])[kn   ] = fN ;  //f1_N ;   //fS;    //fN ;  
-      //(D.f[dirS   ])[ks   ] = fS ;  //f1_S ;   //fN;    //fS ;  
-      //(D.f[dirT   ])[kt   ] = fT ;  //f1_T ;   //fB;    //fT ;  
-      //(D.f[dirB   ])[kb   ] = fB ;  //f1_B ;   //fT;    //fB ;  
-      //(D.f[dirNE  ])[kne  ] = fNE;  //f1_NE;   //fSW;   //fNE;  
-      //(D.f[dirSW  ])[ksw  ] = fSW;  //f1_SW;   //fNE;   //fSW;  
-      //(D.f[dirSE  ])[kse  ] = fSE;  //f1_SE;   //fNW;   //fSE;  
-      //(D.f[dirNW  ])[knw  ] = fNW;  //f1_NW;   //fSE;   //fNW;  
-      //(D.f[dirTE  ])[kte  ] = fTE;  //f1_TE;   //fBW;   //fTE;  
-      //(D.f[dirBW  ])[kbw  ] = fBW;  //f1_BW;   //fTE;   //fBW;  
-      //(D.f[dirBE  ])[kbe  ] = fBE;  //f1_BE;   //fTW;   //fBE;  
-      //(D.f[dirTW  ])[ktw  ] = fTW;  //f1_TW;   //fBE;   //fTW;  
-      //(D.f[dirTN  ])[ktn  ] = fTN;  //f1_TN;   //fBS;   //fTN;  
-      //(D.f[dirBS  ])[kbs  ] = fBS;  //f1_BS;   //fTN;   //fBS;  
-      //(D.f[dirBN  ])[kbn  ] = fBN;  //f1_BN;   //fTS;   //fBN;  
-      //(D.f[dirTS  ])[kts  ] = fTS;  //f1_TS;   //fBN;   //fTS;  
-      //(D.f[dirZERO])[kzero] = fZERO;//f1_ZERO; //fZERO; //fZERO;
-      //(D.f[dirTNE ])[ktne ] = fTNE; //f1_TNE;  //fBSW;  //fTNE; 
-      //(D.f[dirBSW ])[kbsw ] = fBSW; //f1_BSW;  //fTNE;  //fBSW; 
-      //(D.f[dirBNE ])[kbne ] = fBNE; //f1_BNE;  //fTSW;  //fBNE; 
-      //(D.f[dirTSW ])[ktsw ] = fTSW; //f1_TSW;  //fBNE;  //fTSW; 
-      //(D.f[dirTSE ])[ktse ] = fTSE; //f1_TSE;  //fBNW;  //fTSE; 
-      //(D.f[dirBNW ])[kbnw ] = fBNW; //f1_BNW;  //fTSE;  //fBNW; 
-      //(D.f[dirBSE ])[kbse ] = fBSE; //f1_BSE;  //fTNW;  //fBSE; 
-      //(D.f[dirTNW ])[ktnw ] = fTNW; //f1_TNW;  //fBSE;  //fTNW; 
+			(D.f[E   ])[ke   ] = mfabb;//mfcbb;
+			(D.f[W   ])[kw   ] = mfcbb;//mfabb;
+			(D.f[N   ])[kn   ] = mfbab;//mfbcb;
+			(D.f[S   ])[ks   ] = mfbcb;//mfbab;
+			(D.f[T   ])[kt   ] = mfbba;//mfbbc;
+			(D.f[B   ])[kb   ] = mfbbc;//mfbba;
+			(D.f[NE  ])[kne  ] = mfaab;//mfccb;
+			(D.f[SW  ])[ksw  ] = mfccb;//mfaab;
+			(D.f[SE  ])[kse  ] = mfacb;//mfcab;
+			(D.f[NW  ])[knw  ] = mfcab;//mfacb;
+			(D.f[TE  ])[kte  ] = mfaba;//mfcbc;
+			(D.f[BW  ])[kbw  ] = mfcbc;//mfaba;
+			(D.f[BE  ])[kbe  ] = mfabc;//mfcba;
+			(D.f[TW  ])[ktw  ] = mfcba;//mfabc;
+			(D.f[TN  ])[ktn  ] = mfbaa;//mfbcc;
+			(D.f[BS  ])[kbs  ] = mfbcc;//mfbaa;
+			(D.f[BN  ])[kbn  ] = mfbac;//mfbca;
+			(D.f[TS  ])[kts  ] = mfbca;//mfbac;
+			(D.f[REST])[kzero] = mfbbb;//mfbbb;
+			(D.f[TNE ])[ktne ] = mfaaa;//mfccc;
+			(D.f[TSW ])[ktsw ] = mfcca;//mfaac;
+			(D.f[TSE ])[ktse ] = mfaca;//mfcac;
+			(D.f[TNW ])[ktnw ] = mfcaa;//mfacc;
+			(D.f[BNE ])[kbne ] = mfaac;//mfcca;
+			(D.f[BSW ])[kbsw ] = mfccc;//mfaaa;
+			(D.f[BSE ])[kbse ] = mfacc;//mfcaa;
+			(D.f[BNW ])[kbnw ] = mfcac;//mfaca;
+			//(D.f[E   ])[ke   ] = mfcbb;
+			//(D.f[W   ])[kw   ] = mfabb;
+			//(D.f[N   ])[kn   ] = mfbcb;
+			//(D.f[S   ])[ks   ] = mfbab;
+			//(D.f[T   ])[kt   ] = mfbbc;
+			//(D.f[B   ])[kb   ] = mfbba;
+			//(D.f[NE  ])[kne  ] = mfccb;
+			//(D.f[SW  ])[ksw  ] = mfaab;
+			//(D.f[SE  ])[kse  ] = mfcab;
+			//(D.f[NW  ])[knw  ] = mfacb;
+			//(D.f[TE  ])[kte  ] = mfcbc;
+			//(D.f[BW  ])[kbw  ] = mfaba;
+			//(D.f[BE  ])[kbe  ] = mfcba;
+			//(D.f[TW  ])[ktw  ] = mfabc;
+			//(D.f[TN  ])[ktn  ] = mfbcc;
+			//(D.f[BS  ])[kbs  ] = mfbaa;
+			//(D.f[BN  ])[kbn  ] = mfbca;
+			//(D.f[TS  ])[kts  ] = mfbac;
+			//(D.f[REST])[kzero] = mfbbb;
+			//(D.f[TNE ])[ktne ] = mfccc;
+			//(D.f[TSW ])[ktsw ] = mfaac;
+			//(D.f[TSE ])[ktse ] = mfcac;
+			//(D.f[TNW ])[ktnw ] = mfacc;
+			//(D.f[BNE ])[kbne ] = mfcca;
+			//(D.f[BSW ])[kbsw ] = mfaaa;
+			//(D.f[BSE ])[kbse ] = mfcaa;
+			//(D.f[BNW ])[kbnw ] = mfaca;
+
+      //(D.f[E   ])[ke   ] = fE ;  //f1_E ;   //fW;    //fE ;  
+      //(D.f[W   ])[kw   ] = fW ;  //f1_W ;   //fE;    //fW ;  
+      //(D.f[N   ])[kn   ] = fN ;  //f1_N ;   //fS;    //fN ;  
+      //(D.f[S   ])[ks   ] = fS ;  //f1_S ;   //fN;    //fS ;  
+      //(D.f[T   ])[kt   ] = fT ;  //f1_T ;   //fB;    //fT ;  
+      //(D.f[B   ])[kb   ] = fB ;  //f1_B ;   //fT;    //fB ;  
+      //(D.f[NE  ])[kne  ] = fNE;  //f1_NE;   //fSW;   //fNE;  
+      //(D.f[SW  ])[ksw  ] = fSW;  //f1_SW;   //fNE;   //fSW;  
+      //(D.f[SE  ])[kse  ] = fSE;  //f1_SE;   //fNW;   //fSE;  
+      //(D.f[NW  ])[knw  ] = fNW;  //f1_NW;   //fSE;   //fNW;  
+      //(D.f[TE  ])[kte  ] = fTE;  //f1_TE;   //fBW;   //fTE;  
+      //(D.f[BW  ])[kbw  ] = fBW;  //f1_BW;   //fTE;   //fBW;  
+      //(D.f[BE  ])[kbe  ] = fBE;  //f1_BE;   //fTW;   //fBE;  
+      //(D.f[TW  ])[ktw  ] = fTW;  //f1_TW;   //fBE;   //fTW;  
+      //(D.f[TN  ])[ktn  ] = fTN;  //f1_TN;   //fBS;   //fTN;  
+      //(D.f[BS  ])[kbs  ] = fBS;  //f1_BS;   //fTN;   //fBS;  
+      //(D.f[BN  ])[kbn  ] = fBN;  //f1_BN;   //fTS;   //fBN;  
+      //(D.f[TS  ])[kts  ] = fTS;  //f1_TS;   //fBN;   //fTS;  
+      //(D.f[REST])[kzero] = fZERO;//f1_ZERO; //fZERO; //fZERO;
+      //(D.f[TNE ])[ktne ] = fTNE; //f1_TNE;  //fBSW;  //fTNE; 
+      //(D.f[BSW ])[kbsw ] = fBSW; //f1_BSW;  //fTNE;  //fBSW; 
+      //(D.f[BNE ])[kbne ] = fBNE; //f1_BNE;  //fTSW;  //fBNE; 
+      //(D.f[TSW ])[ktsw ] = fTSW; //f1_TSW;  //fBNE;  //fTSW; 
+      //(D.f[TSE ])[ktse ] = fTSE; //f1_TSE;  //fBNW;  //fTSE; 
+      //(D.f[BNW ])[kbnw ] = fBNW; //f1_BNW;  //fTSE;  //fBNW; 
+      //(D.f[BSE ])[kbse ] = fBSE; //f1_BSE;  //fTNW;  //fBSE; 
+      //(D.f[TNW ])[ktnw ] = fTNW; //f1_TNW;  //fBSE;  //fTNW; 
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -4444,94 +4410,94 @@ extern "C" __global__ void QPressDeviceZero27(	 real* DD,
       Distributions27 D;
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //__syncthreads();
 	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      (D.f[dirE   ])[ke   ] =c0o1;
-      (D.f[dirW   ])[kw   ] =c0o1;
-      (D.f[dirN   ])[kn   ] =c0o1;
-      (D.f[dirS   ])[ks   ] =c0o1;
-      (D.f[dirT   ])[kt   ] =c0o1;
-      (D.f[dirB   ])[kb   ] =c0o1;
-      (D.f[dirNE  ])[kne  ] =c0o1;
-      (D.f[dirSW  ])[ksw  ] =c0o1;
-      (D.f[dirSE  ])[kse  ] =c0o1;
-      (D.f[dirNW  ])[knw  ] =c0o1;
-      (D.f[dirTE  ])[kte  ] =c0o1;
-      (D.f[dirBW  ])[kbw  ] =c0o1;
-      (D.f[dirBE  ])[kbe  ] =c0o1;
-      (D.f[dirTW  ])[ktw  ] =c0o1;
-      (D.f[dirTN  ])[ktn  ] =c0o1;
-      (D.f[dirBS  ])[kbs  ] =c0o1;
-      (D.f[dirBN  ])[kbn  ] =c0o1;
-      (D.f[dirTS  ])[kts  ] =c0o1;
-      (D.f[dirZERO])[kzero] =c0o1;
-      (D.f[dirTNE ])[ktne ] =c0o1;
-      (D.f[dirTSW ])[ktsw ] =c0o1;
-      (D.f[dirTSE ])[ktse ] =c0o1;
-      (D.f[dirTNW ])[ktnw ] =c0o1;
-      (D.f[dirBNE ])[kbne ] =c0o1;
-      (D.f[dirBSW ])[kbsw ] =c0o1;
-      (D.f[dirBSE ])[kbse ] =c0o1;
-      (D.f[dirBNW ])[kbnw ] =c0o1;
+      (D.f[E   ])[ke   ] =c0o1;
+      (D.f[W   ])[kw   ] =c0o1;
+      (D.f[N   ])[kn   ] =c0o1;
+      (D.f[S   ])[ks   ] =c0o1;
+      (D.f[T   ])[kt   ] =c0o1;
+      (D.f[B   ])[kb   ] =c0o1;
+      (D.f[NE  ])[kne  ] =c0o1;
+      (D.f[SW  ])[ksw  ] =c0o1;
+      (D.f[SE  ])[kse  ] =c0o1;
+      (D.f[NW  ])[knw  ] =c0o1;
+      (D.f[TE  ])[kte  ] =c0o1;
+      (D.f[BW  ])[kbw  ] =c0o1;
+      (D.f[BE  ])[kbe  ] =c0o1;
+      (D.f[TW  ])[ktw  ] =c0o1;
+      (D.f[TN  ])[ktn  ] =c0o1;
+      (D.f[BS  ])[kbs  ] =c0o1;
+      (D.f[BN  ])[kbn  ] =c0o1;
+      (D.f[TS  ])[kts  ] =c0o1;
+      (D.f[REST])[kzero] =c0o1;
+      (D.f[TNE ])[ktne ] =c0o1;
+      (D.f[TSW ])[ktsw ] =c0o1;
+      (D.f[TSE ])[ktse ] =c0o1;
+      (D.f[TNW ])[ktnw ] =c0o1;
+      (D.f[BNE ])[kbne ] =c0o1;
+      (D.f[BSW ])[kbsw ] =c0o1;
+      (D.f[BSE ])[kbse ] =c0o1;
+      (D.f[BNW ])[kbnw ] =c0o1;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -4664,95 +4630,95 @@ extern "C" __global__ void QPressDeviceFake27(	 real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
          f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_W    = (D.f[dirE   ])[k1e   ];
-      f1_E    = (D.f[dirW   ])[k1w   ];
-      f1_S    = (D.f[dirN   ])[k1n   ];
-      f1_N    = (D.f[dirS   ])[k1s   ];
-      f1_B    = (D.f[dirT   ])[k1t   ];
-      f1_T    = (D.f[dirB   ])[k1b   ];
-      f1_SW   = (D.f[dirNE  ])[k1ne  ];
-      f1_NE   = (D.f[dirSW  ])[k1sw  ];
-      f1_NW   = (D.f[dirSE  ])[k1se  ];
-      f1_SE   = (D.f[dirNW  ])[k1nw  ];
-      f1_BW   = (D.f[dirTE  ])[k1te  ];
-      f1_TE   = (D.f[dirBW  ])[k1bw  ];
-      f1_TW   = (D.f[dirBE  ])[k1be  ];
-      f1_BE   = (D.f[dirTW  ])[k1tw  ];
-      f1_BS   = (D.f[dirTN  ])[k1tn  ];
-      f1_TN   = (D.f[dirBS  ])[k1bs  ];
-      f1_TS   = (D.f[dirBN  ])[k1bn  ];
-      f1_BN   = (D.f[dirTS  ])[k1ts  ];
-      f1_ZERO = (D.f[dirZERO])[k1zero];
-      f1_BSW  = (D.f[dirTNE ])[k1tne ];
-      f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-      f1_BNW  = (D.f[dirTSE ])[k1tse ];
-      f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-      f1_TSW  = (D.f[dirBNE ])[k1bne ];
-      f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-      f1_TNW  = (D.f[dirBSE ])[k1bse ];
-      f1_TSE  = (D.f[dirBNW ])[k1bnw ];
+      f1_W    = (D.f[E   ])[k1e   ];
+      f1_E    = (D.f[W   ])[k1w   ];
+      f1_S    = (D.f[N   ])[k1n   ];
+      f1_N    = (D.f[S   ])[k1s   ];
+      f1_B    = (D.f[T   ])[k1t   ];
+      f1_T    = (D.f[B   ])[k1b   ];
+      f1_SW   = (D.f[NE  ])[k1ne  ];
+      f1_NE   = (D.f[SW  ])[k1sw  ];
+      f1_NW   = (D.f[SE  ])[k1se  ];
+      f1_SE   = (D.f[NW  ])[k1nw  ];
+      f1_BW   = (D.f[TE  ])[k1te  ];
+      f1_TE   = (D.f[BW  ])[k1bw  ];
+      f1_TW   = (D.f[BE  ])[k1be  ];
+      f1_BE   = (D.f[TW  ])[k1tw  ];
+      f1_BS   = (D.f[TN  ])[k1tn  ];
+      f1_TN   = (D.f[BS  ])[k1bs  ];
+      f1_TS   = (D.f[BN  ])[k1bn  ];
+      f1_BN   = (D.f[TS  ])[k1ts  ];
+      f1_ZERO = (D.f[REST])[k1zero];
+      f1_BSW  = (D.f[TNE ])[k1tne ];
+      f1_BNE  = (D.f[TSW ])[k1tsw ];
+      f1_BNW  = (D.f[TSE ])[k1tse ];
+      f1_BSE  = (D.f[TNW ])[k1tnw ];
+      f1_TSW  = (D.f[BNE ])[k1bne ];
+      f1_TNE  = (D.f[BSW ])[k1bsw ];
+      f1_TNW  = (D.f[BSE ])[k1bse ];
+      f1_TSE  = (D.f[BNW ])[k1bnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3;
@@ -4779,33 +4745,33 @@ extern "C" __global__ void QPressDeviceFake27(	 real* rhoBC,
 
       __syncthreads();
 
-      (D.f[dirE   ])[ke   ] = c2o27* (rhoBC[k]+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      (D.f[dirW   ])[kw   ] = c2o27* (rhoBC[k]+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      (D.f[dirN   ])[kn   ] = c2o27* (rhoBC[k]+c3o1*(    -vx2    )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      (D.f[dirS   ])[ks   ] = c2o27* (rhoBC[k]+c3o1*(     vx2    )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      (D.f[dirT   ])[kt   ] = c2o27* (rhoBC[k]+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      (D.f[dirB   ])[kb   ] = c2o27* (rhoBC[k]+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      (D.f[dirNE  ])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirSW  ])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirSE  ])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirNW  ])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTE  ])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBW  ])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBE  ])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTW  ])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTN  ])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBS  ])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBN  ])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTS  ])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirZERO])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTNE ])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTSW ])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTSE ])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirTNW ])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBNE ])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBSW ])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBSE ])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
-      (D.f[dirBNW ])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //      
+      (D.f[E   ])[ke   ] = c2o27* (rhoBC[k]+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      (D.f[W   ])[kw   ] = c2o27* (rhoBC[k]+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      (D.f[N   ])[kn   ] = c2o27* (rhoBC[k]+c3o1*(    -vx2    )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      (D.f[S   ])[ks   ] = c2o27* (rhoBC[k]+c3o1*(     vx2    )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      (D.f[T   ])[kt   ] = c2o27* (rhoBC[k]+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      (D.f[B   ])[kb   ] = c2o27* (rhoBC[k]+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      (D.f[NE  ])[kne  ] = f1_SW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[SW  ])[ksw  ] = f1_NE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[SE  ])[kse  ] = f1_NW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[NW  ])[knw  ] = f1_SE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TE  ])[kte  ] = f1_BW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BW  ])[kbw  ] = f1_TE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BE  ])[kbe  ] = f1_TW  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TW  ])[ktw  ] = f1_BE  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TN  ])[ktn  ] = f1_BS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BS  ])[kbs  ] = f1_TN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[BN  ])[kbn  ] = f1_TS  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[TS  ])[kts  ] = f1_BN  -c1o54*drho1;	//  c1o100;  // zero;  //
+      (D.f[REST])[kzero] = f1_ZERO-c8o27*drho1;	//  c1o100;  // zero;  //
+      (D.f[TNE ])[ktne ] = f1_BSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[TSW ])[ktsw ] = f1_BNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[TSE ])[ktse ] = f1_BNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[TNW ])[ktnw ] = f1_BSE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BNE ])[kbne ] = f1_TSW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BSW ])[kbsw ] = f1_TNE -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BSE ])[kbse ] = f1_TNW -c1o216*drho1;	//  c1o100;  // zero;  //
+      (D.f[BNW ])[kbnw ] = f1_TSE -c1o216*drho1;  //  c1o100;  // zero;  //      
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -4853,8 +4819,7 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 												real* DD, 
 												int* k_Q, 
 												real* QQ,
-												unsigned int sizeQ,
-												int numberOfBCnodes, 
+												unsigned int numberOfBCnodes, 
 												real om1, 
 												unsigned int* neighborX,
 												unsigned int* neighborY,
@@ -4865,63 +4830,63 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -4934,7 +4899,7 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 	const unsigned k = nx*(ny*z + y) + x;
 	//////////////////////////////////////////////////////////////////////////
 
-	if(k<numberOfBCnodes)
+	if(k < numberOfBCnodes)
 	{
 		////////////////////////////////////////////////////////////////////////////////
 		//real VeloX = vx[k];
@@ -4946,32 +4911,32 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 			*q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
 			*q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 			*q_dirBSE, *q_dirBNW; 
-		q_dirE   = &QQ[dirE   *sizeQ];
-		q_dirW   = &QQ[dirW   *sizeQ];
-		q_dirN   = &QQ[dirN   *sizeQ];
-		q_dirS   = &QQ[dirS   *sizeQ];
-		q_dirT   = &QQ[dirT   *sizeQ];
-		q_dirB   = &QQ[dirB   *sizeQ];
-		q_dirNE  = &QQ[dirNE  *sizeQ];
-		q_dirSW  = &QQ[dirSW  *sizeQ];
-		q_dirSE  = &QQ[dirSE  *sizeQ];
-		q_dirNW  = &QQ[dirNW  *sizeQ];
-		q_dirTE  = &QQ[dirTE  *sizeQ];
-		q_dirBW  = &QQ[dirBW  *sizeQ];
-		q_dirBE  = &QQ[dirBE  *sizeQ];
-		q_dirTW  = &QQ[dirTW  *sizeQ];
-		q_dirTN  = &QQ[dirTN  *sizeQ];
-		q_dirBS  = &QQ[dirBS  *sizeQ];
-		q_dirBN  = &QQ[dirBN  *sizeQ];
-		q_dirTS  = &QQ[dirTS  *sizeQ];
-		q_dirTNE = &QQ[dirTNE *sizeQ];
-		q_dirTSW = &QQ[dirTSW *sizeQ];
-		q_dirTSE = &QQ[dirTSE *sizeQ];
-		q_dirTNW = &QQ[dirTNW *sizeQ];
-		q_dirBNE = &QQ[dirBNE *sizeQ];
-		q_dirBSW = &QQ[dirBSW *sizeQ];
-		q_dirBSE = &QQ[dirBSE *sizeQ];
-		q_dirBNW = &QQ[dirBNW *sizeQ];
+		q_dirE   = &QQ[E   * numberOfBCnodes];
+		q_dirW   = &QQ[W   * numberOfBCnodes];
+		q_dirN   = &QQ[N   * numberOfBCnodes];
+		q_dirS   = &QQ[S   * numberOfBCnodes];
+		q_dirT   = &QQ[T   * numberOfBCnodes];
+		q_dirB   = &QQ[B   * numberOfBCnodes];
+		q_dirNE  = &QQ[NE  * numberOfBCnodes];
+		q_dirSW  = &QQ[SW  * numberOfBCnodes];
+		q_dirSE  = &QQ[SE  * numberOfBCnodes];
+		q_dirNW  = &QQ[NW  * numberOfBCnodes];
+		q_dirTE  = &QQ[TE  * numberOfBCnodes];
+		q_dirBW  = &QQ[BW  * numberOfBCnodes];
+		q_dirBE  = &QQ[BE  * numberOfBCnodes];
+		q_dirTW  = &QQ[TW  * numberOfBCnodes];
+		q_dirTN  = &QQ[TN  * numberOfBCnodes];
+		q_dirBS  = &QQ[BS  * numberOfBCnodes];
+		q_dirBN  = &QQ[BN  * numberOfBCnodes];
+		q_dirTS  = &QQ[TS  * numberOfBCnodes];
+		q_dirTNE = &QQ[TNE * numberOfBCnodes];
+		q_dirTSW = &QQ[TSW * numberOfBCnodes];
+		q_dirTSE = &QQ[TSE * numberOfBCnodes];
+		q_dirTNW = &QQ[TNW * numberOfBCnodes];
+		q_dirBNE = &QQ[BNE * numberOfBCnodes];
+		q_dirBSW = &QQ[BSW * numberOfBCnodes];
+		q_dirBSE = &QQ[BSE * numberOfBCnodes];
+		q_dirBNW = &QQ[BNW * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK  = k_Q[k];
@@ -5006,37 +4971,37 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 		real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
 			f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-		f_W    = (D.f[dirE   ])[ke   ];
-		f_E    = (D.f[dirW   ])[kw   ];
-		f_S    = (D.f[dirN   ])[kn   ];
-		f_N    = (D.f[dirS   ])[ks   ];
-		f_B    = (D.f[dirT   ])[kt   ];
-		f_T    = (D.f[dirB   ])[kb   ];
-		f_SW   = (D.f[dirNE  ])[kne  ];
-		f_NE   = (D.f[dirSW  ])[ksw  ];
-		f_NW   = (D.f[dirSE  ])[kse  ];
-		f_SE   = (D.f[dirNW  ])[knw  ];
-		f_BW   = (D.f[dirTE  ])[kte  ];
-		f_TE   = (D.f[dirBW  ])[kbw  ];
-		f_TW   = (D.f[dirBE  ])[kbe  ];
-		f_BE   = (D.f[dirTW  ])[ktw  ];
-		f_BS   = (D.f[dirTN  ])[ktn  ];
-		f_TN   = (D.f[dirBS  ])[kbs  ];
-		f_TS   = (D.f[dirBN  ])[kbn  ];
-		f_BN   = (D.f[dirTS  ])[kts  ];
-		f_BSW  = (D.f[dirTNE ])[ktne ];
-		f_BNE  = (D.f[dirTSW ])[ktsw ];
-		f_BNW  = (D.f[dirTSE ])[ktse ];
-		f_BSE  = (D.f[dirTNW ])[ktnw ];
-		f_TSW  = (D.f[dirBNE ])[kbne ];
-		f_TNE  = (D.f[dirBSW ])[kbsw ];
-		f_TNW  = (D.f[dirBSE ])[kbse ];
-		f_TSE  = (D.f[dirBNW ])[kbnw ];
+		f_W    = (D.f[E   ])[ke   ];
+		f_E    = (D.f[W   ])[kw   ];
+		f_S    = (D.f[N   ])[kn   ];
+		f_N    = (D.f[S   ])[ks   ];
+		f_B    = (D.f[T   ])[kt   ];
+		f_T    = (D.f[B   ])[kb   ];
+		f_SW   = (D.f[NE  ])[kne  ];
+		f_NE   = (D.f[SW  ])[ksw  ];
+		f_NW   = (D.f[SE  ])[kse  ];
+		f_SE   = (D.f[NW  ])[knw  ];
+		f_BW   = (D.f[TE  ])[kte  ];
+		f_TE   = (D.f[BW  ])[kbw  ];
+		f_TW   = (D.f[BE  ])[kbe  ];
+		f_BE   = (D.f[TW  ])[ktw  ];
+		f_BS   = (D.f[TN  ])[ktn  ];
+		f_TN   = (D.f[BS  ])[kbs  ];
+		f_TS   = (D.f[BN  ])[kbn  ];
+		f_BN   = (D.f[TS  ])[kts  ];
+		f_BSW  = (D.f[TNE ])[ktne ];
+		f_BNE  = (D.f[TSW ])[ktsw ];
+		f_BNW  = (D.f[TSE ])[ktse ];
+		f_BSE  = (D.f[TNW ])[ktnw ];
+		f_TSW  = (D.f[BNE ])[kbne ];
+		f_TNE  = (D.f[BSW ])[kbsw ];
+		f_TNW  = (D.f[BSE ])[kbse ];
+		f_TSE  = (D.f[BNW ])[kbnw ];
 		////////////////////////////////////////////////////////////////////////////////
 		real vx1, vx2, vx3, drho, feq, q;
 		drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 			f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-			f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+			f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
 		vx1    = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
 			((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -5056,67 +5021,67 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 		//////////////////////////////////////////////////////////////////////////
 		if (isEvenTimestep==false)
 		{
-			D.f[dirE   ] = &DD[dirE   *size_Mat];
-			D.f[dirW   ] = &DD[dirW   *size_Mat];
-			D.f[dirN   ] = &DD[dirN   *size_Mat];
-			D.f[dirS   ] = &DD[dirS   *size_Mat];
-			D.f[dirT   ] = &DD[dirT   *size_Mat];
-			D.f[dirB   ] = &DD[dirB   *size_Mat];
-			D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-			D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-			D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-			D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-			D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-			D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-			D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-			D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-			D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-			D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-			D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-			D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-			D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-			D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-			D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-			D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-			D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+			D.f[E   ] = &DD[E   *size_Mat];
+			D.f[W   ] = &DD[W   *size_Mat];
+			D.f[N   ] = &DD[N   *size_Mat];
+			D.f[S   ] = &DD[S   *size_Mat];
+			D.f[T   ] = &DD[T   *size_Mat];
+			D.f[B   ] = &DD[B   *size_Mat];
+			D.f[NE  ] = &DD[NE  *size_Mat];
+			D.f[SW  ] = &DD[SW  *size_Mat];
+			D.f[SE  ] = &DD[SE  *size_Mat];
+			D.f[NW  ] = &DD[NW  *size_Mat];
+			D.f[TE  ] = &DD[TE  *size_Mat];
+			D.f[BW  ] = &DD[BW  *size_Mat];
+			D.f[BE  ] = &DD[BE  *size_Mat];
+			D.f[TW  ] = &DD[TW  *size_Mat];
+			D.f[TN  ] = &DD[TN  *size_Mat];
+			D.f[BS  ] = &DD[BS  *size_Mat];
+			D.f[BN  ] = &DD[BN  *size_Mat];
+			D.f[TS  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[TNE *size_Mat];
+			D.f[TSW ] = &DD[TSW *size_Mat];
+			D.f[TSE ] = &DD[TSE *size_Mat];
+			D.f[TNW ] = &DD[TNW *size_Mat];
+			D.f[BNE ] = &DD[BNE *size_Mat];
+			D.f[BSW ] = &DD[BSW *size_Mat];
+			D.f[BSE ] = &DD[BSE *size_Mat];
+			D.f[BNW ] = &DD[BNW *size_Mat];
 		} 
 		else
 		{
-			D.f[dirW   ] = &DD[dirE   *size_Mat];
-			D.f[dirE   ] = &DD[dirW   *size_Mat];
-			D.f[dirS   ] = &DD[dirN   *size_Mat];
-			D.f[dirN   ] = &DD[dirS   *size_Mat];
-			D.f[dirB   ] = &DD[dirT   *size_Mat];
-			D.f[dirT   ] = &DD[dirB   *size_Mat];
-			D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-			D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-			D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-			D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-			D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-			D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-			D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-			D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-			D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-			D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-			D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-			D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-			D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-			D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-			D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-			D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-			D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+			D.f[W   ] = &DD[E   *size_Mat];
+			D.f[E   ] = &DD[W   *size_Mat];
+			D.f[S   ] = &DD[N   *size_Mat];
+			D.f[N   ] = &DD[S   *size_Mat];
+			D.f[B   ] = &DD[T   *size_Mat];
+			D.f[T   ] = &DD[B   *size_Mat];
+			D.f[SW  ] = &DD[NE  *size_Mat];
+			D.f[NE  ] = &DD[SW  *size_Mat];
+			D.f[NW  ] = &DD[SE  *size_Mat];
+			D.f[SE  ] = &DD[NW  *size_Mat];
+			D.f[BW  ] = &DD[TE  *size_Mat];
+			D.f[TE  ] = &DD[BW  *size_Mat];
+			D.f[TW  ] = &DD[BE  *size_Mat];
+			D.f[BE  ] = &DD[TW  *size_Mat];
+			D.f[BS  ] = &DD[TN  *size_Mat];
+			D.f[TN  ] = &DD[BS  *size_Mat];
+			D.f[TS  ] = &DD[BN  *size_Mat];
+			D.f[BN  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[BSW *size_Mat];
+			D.f[TSW ] = &DD[BNE *size_Mat];
+			D.f[TSE ] = &DD[BNW *size_Mat];
+			D.f[TNW ] = &DD[BSE *size_Mat];
+			D.f[BNE ] = &DD[TSW *size_Mat];
+			D.f[BSW ] = &DD[TNE *size_Mat];
+			D.f[BSE ] = &DD[TNW *size_Mat];
+			D.f[BNW ] = &DD[TSE *size_Mat];
 		}
 		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		//Test
-		//(D.f[dirZERO])[k]=c1o10;
+		//(D.f[REST])[k]=c1o10;
 		real rhoDiff = drho - rho[k];
 		real VeloX = vx1;
 		real VeloY = vx2;
@@ -5127,182 +5092,182 @@ extern "C" __global__ void QPressDevice27_IntBB(real* rho,
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c9o2*( vx1        )*( vx1        )-cu_sq); 
-			(D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c2o27*(rhoDiff + c6o1*( VeloX     )))/(c1o1+q);
+			(D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c2o27*(rhoDiff + c6o1*( VeloX     )))/(c1o1+q);
 		}
 
 		q = q_dirW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-			(D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c2o27*(rhoDiff + c6o1*(-VeloX     )))/(c1o1+q);
+			(D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c2o27*(rhoDiff + c6o1*(-VeloX     )))/(c1o1+q);
 		}
 
 		q = q_dirN[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-			(D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c2o27*(rhoDiff + c6o1*( VeloY     )))/(c1o1+q);
+			(D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c2o27*(rhoDiff + c6o1*( VeloY     )))/(c1o1+q);
 		}
 
 		q = q_dirS[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-			(D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c2o27*(rhoDiff + c6o1*(-VeloY     )))/(c1o1+q);
+			(D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c2o27*(rhoDiff + c6o1*(-VeloY     )))/(c1o1+q);
 		}
 
 		q = q_dirT[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c9o2*(         vx3)*(         vx3)-cu_sq); 
-			(D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c2o27*(rhoDiff + c6o1*( VeloZ     )))/(c1o1+q);
+			(D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c2o27*(rhoDiff + c6o1*( VeloZ     )))/(c1o1+q);
 		}
 
 		q = q_dirB[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-			(D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c2o27*(rhoDiff + c6o1*(-VeloZ     )))/(c1o1+q);
+			(D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c2o27*(rhoDiff + c6o1*(-VeloZ     )))/(c1o1+q);
 		}
 
 		q = q_dirNE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-			(D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c1o54*(rhoDiff + c6o1*(VeloX+VeloY)))/(c1o1+q);
+			(D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c1o54*(rhoDiff + c6o1*(VeloX+VeloY)))/(c1o1+q);
 		}
 
 		q = q_dirSW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-			(D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloY)))/(c1o1+q);
+			(D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloY)))/(c1o1+q);
 		}
 
 		q = q_dirSE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-			(D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloY)))/(c1o1+q);
+			(D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloY)))/(c1o1+q);
 		}
 
 		q = q_dirNW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-			(D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloY)))/(c1o1+q);
+			(D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloY)))/(c1o1+q);
 		}
 
 		q = q_dirTE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-			(D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c1o54*(rhoDiff + c6o1*( VeloX+VeloZ)))/(c1o1+q);
+			(D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c1o54*(rhoDiff + c6o1*( VeloX+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-			(D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloZ)))/(c1o1+q);
+			(D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-			(D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloZ)))/(c1o1+q);
+			(D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-			(D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloZ)))/(c1o1+q);
+			(D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTN[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-			(D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c1o54*(rhoDiff + c6o1*( VeloY+VeloZ)))/(c1o1+q);
+			(D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c1o54*(rhoDiff + c6o1*( VeloY+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBS[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-			(D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c1o54*(rhoDiff + c6o1*( -VeloY-VeloZ)))/(c1o1+q);
+			(D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c1o54*(rhoDiff + c6o1*( -VeloY-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBN[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-			(D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c1o54*(rhoDiff + c6o1*( VeloY-VeloZ)))/(c1o1+q);
+			(D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c1o54*(rhoDiff + c6o1*( VeloY-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTS[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-			(D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c1o54*(rhoDiff + c6o1*( -VeloY+VeloZ)))/(c1o1+q);
+			(D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c1o54*(rhoDiff + c6o1*( -VeloY+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTNE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-			(D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY+VeloZ)))/(c1o1+q);
+			(D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBSW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-			(D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY-VeloZ)))/(c1o1+q);
+			(D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBNE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-			(D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY-VeloZ)))/(c1o1+q);
+			(D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTSW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-			(D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY+VeloZ)))/(c1o1+q);
+			(D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTSE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-			(D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY+VeloZ)))/(c1o1+q);
+			(D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY+VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBNW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-			(D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY-VeloZ)))/(c1o1+q);
+			(D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirBSE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-			(D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY-VeloZ)))/(c1o1+q);
+			(D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY-VeloZ)))/(c1o1+q);
 		}
 
 		q = q_dirTNW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-			(D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY+VeloZ)))/(c1o1+q);
+			(D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY+VeloZ)))/(c1o1+q);
 		}
 	}
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/Random.cu b/src/gpu/VirtualFluids_GPU/GPU/Random.cu
index 702021f8145f2456a0d405814615b56d7d575422..04e3d3aba2f168043fecb3b83498671cd8474de7 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/Random.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/Random.cu
@@ -1,9 +1,11 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
 //random numbers
 #include <curand.h>
 #include <curand_kernel.h>
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ScaleCF27.cu b/src/gpu/VirtualFluids_GPU/GPU/ScaleCF27.cu
index 0ca4db3ca310ecaa58962d1a8d3c3196b2ce5a5f..1347f8dd0e5031d55a4417b3ba59493d0f6db311 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/ScaleCF27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/ScaleCF27.cu
@@ -7,10 +7,11 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void scaleCF_0817_comp_27( real* DC, 
@@ -42,33 +43,33 @@ extern "C" __global__ void scaleCF_0817_comp_27( real* DC,
 		*f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest;
 
 
-	fP00dest = &DF[dirE   *size_MatF];
-	fM00dest = &DF[dirW   *size_MatF];
-	f0P0dest = &DF[dirN   *size_MatF];
-	f0M0dest = &DF[dirS   *size_MatF];
-	f00Pdest = &DF[dirT   *size_MatF];
-	f00Mdest = &DF[dirB   *size_MatF];
-	fPP0dest = &DF[dirNE  *size_MatF];
-	fMM0dest = &DF[dirSW  *size_MatF];
-	fPM0dest = &DF[dirSE  *size_MatF];
-	fMP0dest = &DF[dirNW  *size_MatF];
-	fP0Pdest = &DF[dirTE  *size_MatF];
-	fM0Mdest = &DF[dirBW  *size_MatF];
-	fP0Mdest = &DF[dirBE  *size_MatF];
-	fM0Pdest = &DF[dirTW  *size_MatF];
-	f0PPdest = &DF[dirTN  *size_MatF];
-	f0MMdest = &DF[dirBS  *size_MatF];
-	f0PMdest = &DF[dirBN  *size_MatF];
-	f0MPdest = &DF[dirTS  *size_MatF];
-	f000dest = &DF[dirZERO*size_MatF];
-	fMMMdest = &DF[dirBSW *size_MatF];
-	fMMPdest = &DF[dirTSW *size_MatF];
-	fMPPdest = &DF[dirTNW *size_MatF];
-	fMPMdest = &DF[dirBNW *size_MatF];
-	fPPMdest = &DF[dirBNE *size_MatF];
-	fPPPdest = &DF[dirTNE *size_MatF];
-	fPMPdest = &DF[dirTSE *size_MatF];
-	fPMMdest = &DF[dirBSE *size_MatF];
+	fP00dest = &DF[E   *size_MatF];
+	fM00dest = &DF[W   *size_MatF];
+	f0P0dest = &DF[N   *size_MatF];
+	f0M0dest = &DF[S   *size_MatF];
+	f00Pdest = &DF[T   *size_MatF];
+	f00Mdest = &DF[B   *size_MatF];
+	fPP0dest = &DF[NE  *size_MatF];
+	fMM0dest = &DF[SW  *size_MatF];
+	fPM0dest = &DF[SE  *size_MatF];
+	fMP0dest = &DF[NW  *size_MatF];
+	fP0Pdest = &DF[TE  *size_MatF];
+	fM0Mdest = &DF[BW  *size_MatF];
+	fP0Mdest = &DF[BE  *size_MatF];
+	fM0Pdest = &DF[TW  *size_MatF];
+	f0PPdest = &DF[TN  *size_MatF];
+	f0MMdest = &DF[BS  *size_MatF];
+	f0PMdest = &DF[BN  *size_MatF];
+	f0MPdest = &DF[TS  *size_MatF];
+	f000dest = &DF[REST*size_MatF];
+	fMMMdest = &DF[BSW *size_MatF];
+	fMMPdest = &DF[TSW *size_MatF];
+	fMPPdest = &DF[TNW *size_MatF];
+	fMPMdest = &DF[BNW *size_MatF];
+	fPPMdest = &DF[BNE *size_MatF];
+	fPPPdest = &DF[TNE *size_MatF];
+	fPMPdest = &DF[TSE *size_MatF];
+	fPMMdest = &DF[BSE *size_MatF];
 
 	real
 		*fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source,
@@ -77,63 +78,63 @@ extern "C" __global__ void scaleCF_0817_comp_27( real* DC,
 
 	if (isEvenTimestep == true)
 	{
-		fP00source = &DC[dirE   *size_MatC];
-		fM00source = &DC[dirW   *size_MatC];
-		f0P0source = &DC[dirN   *size_MatC];
-		f0M0source = &DC[dirS   *size_MatC];
-		f00Psource = &DC[dirT   *size_MatC];
-		f00Msource = &DC[dirB   *size_MatC];
-		fPP0source = &DC[dirNE  *size_MatC];
-		fMM0source = &DC[dirSW  *size_MatC];
-		fPM0source = &DC[dirSE  *size_MatC];
-		fMP0source = &DC[dirNW  *size_MatC];
-		fP0Psource = &DC[dirTE  *size_MatC];
-		fM0Msource = &DC[dirBW  *size_MatC];
-		fP0Msource = &DC[dirBE  *size_MatC];
-		fM0Psource = &DC[dirTW  *size_MatC];
-		f0PPsource = &DC[dirTN  *size_MatC];
-		f0MMsource = &DC[dirBS  *size_MatC];
-		f0PMsource = &DC[dirBN  *size_MatC];
-		f0MPsource = &DC[dirTS  *size_MatC];
-		f000source = &DC[dirZERO*size_MatC];
-		fMMMsource = &DC[dirBSW *size_MatC];
-		fMMPsource = &DC[dirTSW *size_MatC];
-		fMPPsource = &DC[dirTNW *size_MatC];
-		fMPMsource = &DC[dirBNW *size_MatC];
-		fPPMsource = &DC[dirBNE *size_MatC];
-		fPPPsource = &DC[dirTNE *size_MatC];
-		fPMPsource = &DC[dirTSE *size_MatC];
-		fPMMsource = &DC[dirBSE *size_MatC];
+		fP00source = &DC[E   *size_MatC];
+		fM00source = &DC[W   *size_MatC];
+		f0P0source = &DC[N   *size_MatC];
+		f0M0source = &DC[S   *size_MatC];
+		f00Psource = &DC[T   *size_MatC];
+		f00Msource = &DC[B   *size_MatC];
+		fPP0source = &DC[NE  *size_MatC];
+		fMM0source = &DC[SW  *size_MatC];
+		fPM0source = &DC[SE  *size_MatC];
+		fMP0source = &DC[NW  *size_MatC];
+		fP0Psource = &DC[TE  *size_MatC];
+		fM0Msource = &DC[BW  *size_MatC];
+		fP0Msource = &DC[BE  *size_MatC];
+		fM0Psource = &DC[TW  *size_MatC];
+		f0PPsource = &DC[TN  *size_MatC];
+		f0MMsource = &DC[BS  *size_MatC];
+		f0PMsource = &DC[BN  *size_MatC];
+		f0MPsource = &DC[TS  *size_MatC];
+		f000source = &DC[REST*size_MatC];
+		fMMMsource = &DC[BSW *size_MatC];
+		fMMPsource = &DC[TSW *size_MatC];
+		fMPPsource = &DC[TNW *size_MatC];
+		fMPMsource = &DC[BNW *size_MatC];
+		fPPMsource = &DC[BNE *size_MatC];
+		fPPPsource = &DC[TNE *size_MatC];
+		fPMPsource = &DC[TSE *size_MatC];
+		fPMMsource = &DC[BSE *size_MatC];
 	}
 	else
 	{
-		fP00source = &DC[dirW   *size_MatC];
-		fM00source = &DC[dirE   *size_MatC];
-		f0P0source = &DC[dirS   *size_MatC];
-		f0M0source = &DC[dirN   *size_MatC];
-		f00Psource = &DC[dirB   *size_MatC];
-		f00Msource = &DC[dirT   *size_MatC];
-		fPP0source = &DC[dirSW  *size_MatC];
-		fMM0source = &DC[dirNE  *size_MatC];
-		fPM0source = &DC[dirNW  *size_MatC];
-		fMP0source = &DC[dirSE  *size_MatC];
-		fP0Psource = &DC[dirBW  *size_MatC];
-		fM0Msource = &DC[dirTE  *size_MatC];
-		fP0Msource = &DC[dirTW  *size_MatC];
-		fM0Psource = &DC[dirBE  *size_MatC];
-		f0PPsource = &DC[dirBS  *size_MatC];
-		f0MMsource = &DC[dirTN  *size_MatC];
-		f0PMsource = &DC[dirTS  *size_MatC];
-		f0MPsource = &DC[dirBN  *size_MatC];
-		f000source = &DC[dirZERO*size_MatC];
-		fMMMsource = &DC[dirTNE *size_MatC];
-		fMMPsource = &DC[dirBNE *size_MatC];
-		fMPPsource = &DC[dirBSE *size_MatC];
-		fMPMsource = &DC[dirTSE *size_MatC];
-		fPPMsource = &DC[dirTSW *size_MatC];
-		fPPPsource = &DC[dirBSW *size_MatC];
-		fPMPsource = &DC[dirBNW *size_MatC];
-		fPMMsource = &DC[dirTNW *size_MatC];
+		fP00source = &DC[W   *size_MatC];
+		fM00source = &DC[E   *size_MatC];
+		f0P0source = &DC[S   *size_MatC];
+		f0M0source = &DC[N   *size_MatC];
+		f00Psource = &DC[B   *size_MatC];
+		f00Msource = &DC[T   *size_MatC];
+		fPP0source = &DC[SW  *size_MatC];
+		fMM0source = &DC[NE  *size_MatC];
+		fPM0source = &DC[NW  *size_MatC];
+		fMP0source = &DC[SE  *size_MatC];
+		fP0Psource = &DC[BW  *size_MatC];
+		fM0Msource = &DC[TE  *size_MatC];
+		fP0Msource = &DC[TW  *size_MatC];
+		fM0Psource = &DC[BE  *size_MatC];
+		f0PPsource = &DC[BS  *size_MatC];
+		f0MMsource = &DC[TN  *size_MatC];
+		f0PMsource = &DC[TS  *size_MatC];
+		f0MPsource = &DC[BN  *size_MatC];
+		f000source = &DC[REST*size_MatC];
+		fMMMsource = &DC[TNE *size_MatC];
+		fMMPsource = &DC[BNE *size_MatC];
+		fMPPsource = &DC[BSE *size_MatC];
+		fMPMsource = &DC[TSE *size_MatC];
+		fPPMsource = &DC[TSW *size_MatC];
+		fPPPsource = &DC[BSW *size_MatC];
+		fPMPsource = &DC[BNW *size_MatC];
+		fPMMsource = &DC[TNW *size_MatC];
 	}
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -4108,96 +4109,96 @@ extern "C" __global__ void scaleCF_AA2016_comp_27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -10991,96 +10992,96 @@ extern "C" __global__ void scaleCF_RhoSq_3rdMom_comp_27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -17866,96 +17867,96 @@ extern "C" __global__ void scaleCF_RhoSq_comp_27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -22114,96 +22115,96 @@ extern "C" __global__ void scaleCF_staggered_time_comp_27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -26350,96 +26351,96 @@ extern "C" __global__ void scaleCF_Fix_comp_27(  real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -31117,96 +31118,96 @@ extern "C" __global__ void scaleCF_NSPress_27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -35061,96 +35062,96 @@ extern "C" __global__ void scaleCF_Fix_27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -39319,96 +39320,96 @@ extern "C" __global__ void scaleCFpress27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -40993,96 +40994,96 @@ extern "C" __global__ void scaleCFLast27( real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -43224,96 +43225,96 @@ extern "C" __global__ void scaleCFThSMG7(    real* DC,
 {
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, /**fzeroF,*/ *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   //fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   //fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
 
@@ -44450,96 +44451,96 @@ extern "C" __global__ void scaleCFThS7(   real* DC,
 {
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, /**fzeroF,*/ *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   //fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   //fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
 
@@ -45574,188 +45575,188 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 {
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, /**fzeroF,*/ *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   //fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   //fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
 
    Distributions27 D27F;
-   D27F.f[dirE   ] = &DD27F[dirE   *size_MatF];
-   D27F.f[dirW   ] = &DD27F[dirW   *size_MatF];
-   D27F.f[dirN   ] = &DD27F[dirN   *size_MatF];
-   D27F.f[dirS   ] = &DD27F[dirS   *size_MatF];
-   D27F.f[dirT   ] = &DD27F[dirT   *size_MatF];
-   D27F.f[dirB   ] = &DD27F[dirB   *size_MatF];
-   D27F.f[dirNE  ] = &DD27F[dirNE  *size_MatF];
-   D27F.f[dirSW  ] = &DD27F[dirSW  *size_MatF];
-   D27F.f[dirSE  ] = &DD27F[dirSE  *size_MatF];
-   D27F.f[dirNW  ] = &DD27F[dirNW  *size_MatF];
-   D27F.f[dirTE  ] = &DD27F[dirTE  *size_MatF];
-   D27F.f[dirBW  ] = &DD27F[dirBW  *size_MatF];
-   D27F.f[dirBE  ] = &DD27F[dirBE  *size_MatF];
-   D27F.f[dirTW  ] = &DD27F[dirTW  *size_MatF];
-   D27F.f[dirTN  ] = &DD27F[dirTN  *size_MatF];
-   D27F.f[dirBS  ] = &DD27F[dirBS  *size_MatF];
-   D27F.f[dirBN  ] = &DD27F[dirBN  *size_MatF];
-   D27F.f[dirTS  ] = &DD27F[dirTS  *size_MatF];
-   D27F.f[dirZERO] = &DD27F[dirZERO*size_MatF];
-   D27F.f[dirTNE ] = &DD27F[dirTNE *size_MatF];
-   D27F.f[dirTSW ] = &DD27F[dirTSW *size_MatF];
-   D27F.f[dirTSE ] = &DD27F[dirTSE *size_MatF];
-   D27F.f[dirTNW ] = &DD27F[dirTNW *size_MatF];
-   D27F.f[dirBNE ] = &DD27F[dirBNE *size_MatF];
-   D27F.f[dirBSW ] = &DD27F[dirBSW *size_MatF];
-   D27F.f[dirBSE ] = &DD27F[dirBSE *size_MatF];
-   D27F.f[dirBNW ] = &DD27F[dirBNW *size_MatF];
+   D27F.f[E   ] = &DD27F[E   *size_MatF];
+   D27F.f[W   ] = &DD27F[W   *size_MatF];
+   D27F.f[N   ] = &DD27F[N   *size_MatF];
+   D27F.f[S   ] = &DD27F[S   *size_MatF];
+   D27F.f[T   ] = &DD27F[T   *size_MatF];
+   D27F.f[B   ] = &DD27F[B   *size_MatF];
+   D27F.f[NE  ] = &DD27F[NE  *size_MatF];
+   D27F.f[SW  ] = &DD27F[SW  *size_MatF];
+   D27F.f[SE  ] = &DD27F[SE  *size_MatF];
+   D27F.f[NW  ] = &DD27F[NW  *size_MatF];
+   D27F.f[TE  ] = &DD27F[TE  *size_MatF];
+   D27F.f[BW  ] = &DD27F[BW  *size_MatF];
+   D27F.f[BE  ] = &DD27F[BE  *size_MatF];
+   D27F.f[TW  ] = &DD27F[TW  *size_MatF];
+   D27F.f[TN  ] = &DD27F[TN  *size_MatF];
+   D27F.f[BS  ] = &DD27F[BS  *size_MatF];
+   D27F.f[BN  ] = &DD27F[BN  *size_MatF];
+   D27F.f[TS  ] = &DD27F[TS  *size_MatF];
+   D27F.f[REST] = &DD27F[REST*size_MatF];
+   D27F.f[TNE ] = &DD27F[TNE *size_MatF];
+   D27F.f[TSW ] = &DD27F[TSW *size_MatF];
+   D27F.f[TSE ] = &DD27F[TSE *size_MatF];
+   D27F.f[TNW ] = &DD27F[TNW *size_MatF];
+   D27F.f[BNE ] = &DD27F[BNE *size_MatF];
+   D27F.f[BSW ] = &DD27F[BSW *size_MatF];
+   D27F.f[BSE ] = &DD27F[BSE *size_MatF];
+   D27F.f[BNW ] = &DD27F[BNW *size_MatF];
 
    Distributions27 D27C;
    if (isEvenTimestep==true)
    {
-      D27C.f[dirE   ] = &DD27C[dirE   *size_MatC];
-      D27C.f[dirW   ] = &DD27C[dirW   *size_MatC];
-      D27C.f[dirN   ] = &DD27C[dirN   *size_MatC];
-      D27C.f[dirS   ] = &DD27C[dirS   *size_MatC];
-      D27C.f[dirT   ] = &DD27C[dirT   *size_MatC];
-      D27C.f[dirB   ] = &DD27C[dirB   *size_MatC];
-      D27C.f[dirNE  ] = &DD27C[dirNE  *size_MatC];
-      D27C.f[dirSW  ] = &DD27C[dirSW  *size_MatC];
-      D27C.f[dirSE  ] = &DD27C[dirSE  *size_MatC];
-      D27C.f[dirNW  ] = &DD27C[dirNW  *size_MatC];
-      D27C.f[dirTE  ] = &DD27C[dirTE  *size_MatC];
-      D27C.f[dirBW  ] = &DD27C[dirBW  *size_MatC];
-      D27C.f[dirBE  ] = &DD27C[dirBE  *size_MatC];
-      D27C.f[dirTW  ] = &DD27C[dirTW  *size_MatC];
-      D27C.f[dirTN  ] = &DD27C[dirTN  *size_MatC];
-      D27C.f[dirBS  ] = &DD27C[dirBS  *size_MatC];
-      D27C.f[dirBN  ] = &DD27C[dirBN  *size_MatC];
-      D27C.f[dirTS  ] = &DD27C[dirTS  *size_MatC];
-      D27C.f[dirZERO] = &DD27C[dirZERO*size_MatC];
-      D27C.f[dirTNE ] = &DD27C[dirTNE *size_MatC];
-      D27C.f[dirTSW ] = &DD27C[dirTSW *size_MatC];
-      D27C.f[dirTSE ] = &DD27C[dirTSE *size_MatC];
-      D27C.f[dirTNW ] = &DD27C[dirTNW *size_MatC];
-      D27C.f[dirBNE ] = &DD27C[dirBNE *size_MatC];
-      D27C.f[dirBSW ] = &DD27C[dirBSW *size_MatC];
-      D27C.f[dirBSE ] = &DD27C[dirBSE *size_MatC];
-      D27C.f[dirBNW ] = &DD27C[dirBNW *size_MatC];
+      D27C.f[E   ] = &DD27C[E   *size_MatC];
+      D27C.f[W   ] = &DD27C[W   *size_MatC];
+      D27C.f[N   ] = &DD27C[N   *size_MatC];
+      D27C.f[S   ] = &DD27C[S   *size_MatC];
+      D27C.f[T   ] = &DD27C[T   *size_MatC];
+      D27C.f[B   ] = &DD27C[B   *size_MatC];
+      D27C.f[NE  ] = &DD27C[NE  *size_MatC];
+      D27C.f[SW  ] = &DD27C[SW  *size_MatC];
+      D27C.f[SE  ] = &DD27C[SE  *size_MatC];
+      D27C.f[NW  ] = &DD27C[NW  *size_MatC];
+      D27C.f[TE  ] = &DD27C[TE  *size_MatC];
+      D27C.f[BW  ] = &DD27C[BW  *size_MatC];
+      D27C.f[BE  ] = &DD27C[BE  *size_MatC];
+      D27C.f[TW  ] = &DD27C[TW  *size_MatC];
+      D27C.f[TN  ] = &DD27C[TN  *size_MatC];
+      D27C.f[BS  ] = &DD27C[BS  *size_MatC];
+      D27C.f[BN  ] = &DD27C[BN  *size_MatC];
+      D27C.f[TS  ] = &DD27C[TS  *size_MatC];
+      D27C.f[REST] = &DD27C[REST*size_MatC];
+      D27C.f[TNE ] = &DD27C[TNE *size_MatC];
+      D27C.f[TSW ] = &DD27C[TSW *size_MatC];
+      D27C.f[TSE ] = &DD27C[TSE *size_MatC];
+      D27C.f[TNW ] = &DD27C[TNW *size_MatC];
+      D27C.f[BNE ] = &DD27C[BNE *size_MatC];
+      D27C.f[BSW ] = &DD27C[BSW *size_MatC];
+      D27C.f[BSE ] = &DD27C[BSE *size_MatC];
+      D27C.f[BNW ] = &DD27C[BNW *size_MatC];
    }
    else
    {
-      D27C.f[dirW   ] = &DD27C[dirE   *size_MatC];
-      D27C.f[dirE   ] = &DD27C[dirW   *size_MatC];
-      D27C.f[dirS   ] = &DD27C[dirN   *size_MatC];
-      D27C.f[dirN   ] = &DD27C[dirS   *size_MatC];
-      D27C.f[dirB   ] = &DD27C[dirT   *size_MatC];
-      D27C.f[dirT   ] = &DD27C[dirB   *size_MatC];
-      D27C.f[dirSW  ] = &DD27C[dirNE  *size_MatC];
-      D27C.f[dirNE  ] = &DD27C[dirSW  *size_MatC];
-      D27C.f[dirNW  ] = &DD27C[dirSE  *size_MatC];
-      D27C.f[dirSE  ] = &DD27C[dirNW  *size_MatC];
-      D27C.f[dirBW  ] = &DD27C[dirTE  *size_MatC];
-      D27C.f[dirTE  ] = &DD27C[dirBW  *size_MatC];
-      D27C.f[dirTW  ] = &DD27C[dirBE  *size_MatC];
-      D27C.f[dirBE  ] = &DD27C[dirTW  *size_MatC];
-      D27C.f[dirBS  ] = &DD27C[dirTN  *size_MatC];
-      D27C.f[dirTN  ] = &DD27C[dirBS  *size_MatC];
-      D27C.f[dirTS  ] = &DD27C[dirBN  *size_MatC];
-      D27C.f[dirBN  ] = &DD27C[dirTS  *size_MatC];
-      D27C.f[dirZERO] = &DD27C[dirZERO*size_MatC];
-      D27C.f[dirBSW ] = &DD27C[dirTNE *size_MatC];
-      D27C.f[dirBNE ] = &DD27C[dirTSW *size_MatC];
-      D27C.f[dirBNW ] = &DD27C[dirTSE *size_MatC];
-      D27C.f[dirBSE ] = &DD27C[dirTNW *size_MatC];
-      D27C.f[dirTSW ] = &DD27C[dirBNE *size_MatC];
-      D27C.f[dirTNE ] = &DD27C[dirBSW *size_MatC];
-      D27C.f[dirTNW ] = &DD27C[dirBSE *size_MatC];
-      D27C.f[dirTSE ] = &DD27C[dirBNW *size_MatC];
+      D27C.f[W   ] = &DD27C[E   *size_MatC];
+      D27C.f[E   ] = &DD27C[W   *size_MatC];
+      D27C.f[S   ] = &DD27C[N   *size_MatC];
+      D27C.f[N   ] = &DD27C[S   *size_MatC];
+      D27C.f[B   ] = &DD27C[T   *size_MatC];
+      D27C.f[T   ] = &DD27C[B   *size_MatC];
+      D27C.f[SW  ] = &DD27C[NE  *size_MatC];
+      D27C.f[NE  ] = &DD27C[SW  *size_MatC];
+      D27C.f[NW  ] = &DD27C[SE  *size_MatC];
+      D27C.f[SE  ] = &DD27C[NW  *size_MatC];
+      D27C.f[BW  ] = &DD27C[TE  *size_MatC];
+      D27C.f[TE  ] = &DD27C[BW  *size_MatC];
+      D27C.f[TW  ] = &DD27C[BE  *size_MatC];
+      D27C.f[BE  ] = &DD27C[TW  *size_MatC];
+      D27C.f[BS  ] = &DD27C[TN  *size_MatC];
+      D27C.f[TN  ] = &DD27C[BS  *size_MatC];
+      D27C.f[TS  ] = &DD27C[BN  *size_MatC];
+      D27C.f[BN  ] = &DD27C[TS  *size_MatC];
+      D27C.f[REST] = &DD27C[REST*size_MatC];
+      D27C.f[BSW ] = &DD27C[TNE *size_MatC];
+      D27C.f[BNE ] = &DD27C[TSW *size_MatC];
+      D27C.f[BNW ] = &DD27C[TSE *size_MatC];
+      D27C.f[BSE ] = &DD27C[TNW *size_MatC];
+      D27C.f[TSW ] = &DD27C[BNE *size_MatC];
+      D27C.f[TNE ] = &DD27C[BSW *size_MatC];
+      D27C.f[TNW ] = &DD27C[BSE *size_MatC];
+      D27C.f[TSE ] = &DD27C[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -45855,33 +45856,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_SWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -45942,33 +45943,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_SWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46029,33 +46030,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_SET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46116,33 +46117,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_SEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46213,33 +46214,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_NWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46300,33 +46301,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_NWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46387,33 +46388,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_NET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46474,33 +46475,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
       f_BSE  = fbseC[kbs];
       f_BNW  = fbnwC[kbw];
       ////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27C.f[dirE   ])[kzero];//ke
-      f27W    =  (D27C.f[dirW   ])[kw   ];
-      f27N    =  (D27C.f[dirN   ])[kzero];//kn
-      f27S    =  (D27C.f[dirS   ])[ks   ];
-      f27T    =  (D27C.f[dirT   ])[kzero];//kt
-      f27B    =  (D27C.f[dirB   ])[kb   ];
-      f27NE   =  (D27C.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27C.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27C.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27C.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27C.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27C.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27C.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27C.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27C.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27C.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27C.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27C.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27C.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27C.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27C.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27C.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27C.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27C.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27C.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27C.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27C.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27C.f[E   ])[kzero];//ke
+      f27W    =  (D27C.f[W   ])[kw   ];
+      f27N    =  (D27C.f[N   ])[kzero];//kn
+      f27S    =  (D27C.f[S   ])[ks   ];
+      f27T    =  (D27C.f[T   ])[kzero];//kt
+      f27B    =  (D27C.f[B   ])[kb   ];
+      f27NE   =  (D27C.f[NE  ])[kzero];//kne
+      f27SW   =  (D27C.f[SW  ])[ksw  ];
+      f27SE   =  (D27C.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27C.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27C.f[TE  ])[kzero];//kte
+      f27BW   =  (D27C.f[BW  ])[kbw  ];
+      f27BE   =  (D27C.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27C.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27C.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27C.f[BS  ])[kbs  ];
+      f27BN   =  (D27C.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27C.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27C.f[REST])[kzero];//kzero
+      f27TNE   = (D27C.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27C.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27C.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27C.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27C.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27C.f[BSW ])[kbsw ];
+      f27BSE   = (D27C.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27C.f[BNW ])[kbw  ];//kbnw
 
       Conc_C_NEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -46618,33 +46619,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46696,33 +46697,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46774,33 +46775,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46852,33 +46853,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -46940,33 +46941,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -47018,33 +47019,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -47096,33 +47097,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
 
 
@@ -47174,33 +47175,33 @@ extern "C" __global__ void scaleCFThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27F.f[dirZERO])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
-      (D27F.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27F.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27F.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27F.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27F.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27F.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27F.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27F.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27F.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27F.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27F.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27F.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27F.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27F.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27F.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27F.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27F.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27F.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27F.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27F.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27F.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27F.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27F.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27F.f[REST])[kzero] =   c8o27* Conc_F*(c1o1-cu_sq);
+      (D27F.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_F*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27F.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_F*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27F.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_F*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27F.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_F*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27F.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_F*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27F.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_F*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27F.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_F*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27F.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_F*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27F.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_F*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27F.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_F*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27F.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_F*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27F.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_F*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27F.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_F*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27F.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_F*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27F.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_F*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27F.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_F*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27F.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_F*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27F.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_F*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27F.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27F.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27F.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27F.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27F.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27F.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27F.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27F.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -47268,96 +47269,96 @@ extern "C" __global__ void scaleCFEff27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -48977,96 +48978,96 @@ extern "C" __global__ void scaleCF27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ScaleCF_F3_27.cu b/src/gpu/VirtualFluids_GPU/GPU/ScaleCF_F3_27.cu
index 3ebc142105eadd985de8ab652485d2df73d6a7c3..14e36971c87df7d83ab899cb141979ae9707bad9 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/ScaleCF_F3_27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/ScaleCF_F3_27.cu
@@ -7,10 +7,11 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
@@ -43,33 +44,33 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 		*f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest;
 
 
-	fP00dest = &DF[dirE   *size_MatF];
-	fM00dest = &DF[dirW   *size_MatF];
-	f0P0dest = &DF[dirN   *size_MatF];
-	f0M0dest = &DF[dirS   *size_MatF];
-	f00Pdest = &DF[dirT   *size_MatF];
-	f00Mdest = &DF[dirB   *size_MatF];
-	fPP0dest = &DF[dirNE  *size_MatF];
-	fMM0dest = &DF[dirSW  *size_MatF];
-	fPM0dest = &DF[dirSE  *size_MatF];
-	fMP0dest = &DF[dirNW  *size_MatF];
-	fP0Pdest = &DF[dirTE  *size_MatF];
-	fM0Mdest = &DF[dirBW  *size_MatF];
-	fP0Mdest = &DF[dirBE  *size_MatF];
-	fM0Pdest = &DF[dirTW  *size_MatF];
-	f0PPdest = &DF[dirTN  *size_MatF];
-	f0MMdest = &DF[dirBS  *size_MatF];
-	f0PMdest = &DF[dirBN  *size_MatF];
-	f0MPdest = &DF[dirTS  *size_MatF];
-	f000dest = &DF[dirZERO*size_MatF];
-	fMMMdest = &DF[dirBSW *size_MatF];
-	fMMPdest = &DF[dirTSW *size_MatF];
-	fMPPdest = &DF[dirTNW *size_MatF];
-	fMPMdest = &DF[dirBNW *size_MatF];
-	fPPMdest = &DF[dirBNE *size_MatF];
-	fPPPdest = &DF[dirTNE *size_MatF];
-	fPMPdest = &DF[dirTSE *size_MatF];
-	fPMMdest = &DF[dirBSE *size_MatF];
+	fP00dest = &DF[E   *size_MatF];
+	fM00dest = &DF[W   *size_MatF];
+	f0P0dest = &DF[N   *size_MatF];
+	f0M0dest = &DF[S   *size_MatF];
+	f00Pdest = &DF[T   *size_MatF];
+	f00Mdest = &DF[B   *size_MatF];
+	fPP0dest = &DF[NE  *size_MatF];
+	fMM0dest = &DF[SW  *size_MatF];
+	fPM0dest = &DF[SE  *size_MatF];
+	fMP0dest = &DF[NW  *size_MatF];
+	fP0Pdest = &DF[TE  *size_MatF];
+	fM0Mdest = &DF[BW  *size_MatF];
+	fP0Mdest = &DF[BE  *size_MatF];
+	fM0Pdest = &DF[TW  *size_MatF];
+	f0PPdest = &DF[TN  *size_MatF];
+	f0MMdest = &DF[BS  *size_MatF];
+	f0PMdest = &DF[BN  *size_MatF];
+	f0MPdest = &DF[TS  *size_MatF];
+	f000dest = &DF[REST*size_MatF];
+	fMMMdest = &DF[BSW *size_MatF];
+	fMMPdest = &DF[TSW *size_MatF];
+	fMPPdest = &DF[TNW *size_MatF];
+	fMPMdest = &DF[BNW *size_MatF];
+	fPPMdest = &DF[BNE *size_MatF];
+	fPPPdest = &DF[TNE *size_MatF];
+	fPMPdest = &DF[TSE *size_MatF];
+	fPMMdest = &DF[BSE *size_MatF];
 
 	real
 		*fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source,
@@ -78,72 +79,72 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 
 	if (isEvenTimestep == true)
 	{
-		fP00source = &DC[dirE   *size_MatC];
-		fM00source = &DC[dirW   *size_MatC];
-		f0P0source = &DC[dirN   *size_MatC];
-		f0M0source = &DC[dirS   *size_MatC];
-		f00Psource = &DC[dirT   *size_MatC];
-		f00Msource = &DC[dirB   *size_MatC];
-		fPP0source = &DC[dirNE  *size_MatC];
-		fMM0source = &DC[dirSW  *size_MatC];
-		fPM0source = &DC[dirSE  *size_MatC];
-		fMP0source = &DC[dirNW  *size_MatC];
-		fP0Psource = &DC[dirTE  *size_MatC];
-		fM0Msource = &DC[dirBW  *size_MatC];
-		fP0Msource = &DC[dirBE  *size_MatC];
-		fM0Psource = &DC[dirTW  *size_MatC];
-		f0PPsource = &DC[dirTN  *size_MatC];
-		f0MMsource = &DC[dirBS  *size_MatC];
-		f0PMsource = &DC[dirBN  *size_MatC];
-		f0MPsource = &DC[dirTS  *size_MatC];
-		f000source = &DC[dirZERO*size_MatC];
-		fMMMsource = &DC[dirBSW *size_MatC];
-		fMMPsource = &DC[dirTSW *size_MatC];
-		fMPPsource = &DC[dirTNW *size_MatC];
-		fMPMsource = &DC[dirBNW *size_MatC];
-		fPPMsource = &DC[dirBNE *size_MatC];
-		fPPPsource = &DC[dirTNE *size_MatC];
-		fPMPsource = &DC[dirTSE *size_MatC];
-		fPMMsource = &DC[dirBSE *size_MatC];
+		fP00source = &DC[E   *size_MatC];
+		fM00source = &DC[W   *size_MatC];
+		f0P0source = &DC[N   *size_MatC];
+		f0M0source = &DC[S   *size_MatC];
+		f00Psource = &DC[T   *size_MatC];
+		f00Msource = &DC[B   *size_MatC];
+		fPP0source = &DC[NE  *size_MatC];
+		fMM0source = &DC[SW  *size_MatC];
+		fPM0source = &DC[SE  *size_MatC];
+		fMP0source = &DC[NW  *size_MatC];
+		fP0Psource = &DC[TE  *size_MatC];
+		fM0Msource = &DC[BW  *size_MatC];
+		fP0Msource = &DC[BE  *size_MatC];
+		fM0Psource = &DC[TW  *size_MatC];
+		f0PPsource = &DC[TN  *size_MatC];
+		f0MMsource = &DC[BS  *size_MatC];
+		f0PMsource = &DC[BN  *size_MatC];
+		f0MPsource = &DC[TS  *size_MatC];
+		f000source = &DC[REST*size_MatC];
+		fMMMsource = &DC[BSW *size_MatC];
+		fMMPsource = &DC[TSW *size_MatC];
+		fMPPsource = &DC[TNW *size_MatC];
+		fMPMsource = &DC[BNW *size_MatC];
+		fPPMsource = &DC[BNE *size_MatC];
+		fPPPsource = &DC[TNE *size_MatC];
+		fPMPsource = &DC[TSE *size_MatC];
+		fPMMsource = &DC[BSE *size_MatC];
 	}
 	else
 	{
-		fP00source = &DC[dirW   *size_MatC];
-		fM00source = &DC[dirE   *size_MatC];
-		f0P0source = &DC[dirS   *size_MatC];
-		f0M0source = &DC[dirN   *size_MatC];
-		f00Psource = &DC[dirB   *size_MatC];
-		f00Msource = &DC[dirT   *size_MatC];
-		fPP0source = &DC[dirSW  *size_MatC];
-		fMM0source = &DC[dirNE  *size_MatC];
-		fPM0source = &DC[dirNW  *size_MatC];
-		fMP0source = &DC[dirSE  *size_MatC];
-		fP0Psource = &DC[dirBW  *size_MatC];
-		fM0Msource = &DC[dirTE  *size_MatC];
-		fP0Msource = &DC[dirTW  *size_MatC];
-		fM0Psource = &DC[dirBE  *size_MatC];
-		f0PPsource = &DC[dirBS  *size_MatC];
-		f0MMsource = &DC[dirTN  *size_MatC];
-		f0PMsource = &DC[dirTS  *size_MatC];
-		f0MPsource = &DC[dirBN  *size_MatC];
-		f000source = &DC[dirZERO*size_MatC];
-		fMMMsource = &DC[dirTNE *size_MatC];
-		fMMPsource = &DC[dirBNE *size_MatC];
-		fMPPsource = &DC[dirBSE *size_MatC];
-		fMPMsource = &DC[dirTSE *size_MatC];
-		fPPMsource = &DC[dirTSW *size_MatC];
-		fPPPsource = &DC[dirBSW *size_MatC];
-		fPMPsource = &DC[dirBNW *size_MatC];
-		fPMMsource = &DC[dirTNW *size_MatC];
+		fP00source = &DC[W   *size_MatC];
+		fM00source = &DC[E   *size_MatC];
+		f0P0source = &DC[S   *size_MatC];
+		f0M0source = &DC[N   *size_MatC];
+		f00Psource = &DC[B   *size_MatC];
+		f00Msource = &DC[T   *size_MatC];
+		fPP0source = &DC[SW  *size_MatC];
+		fMM0source = &DC[NE  *size_MatC];
+		fPM0source = &DC[NW  *size_MatC];
+		fMP0source = &DC[SE  *size_MatC];
+		fP0Psource = &DC[BW  *size_MatC];
+		fM0Msource = &DC[TE  *size_MatC];
+		fP0Msource = &DC[TW  *size_MatC];
+		fM0Psource = &DC[BE  *size_MatC];
+		f0PPsource = &DC[BS  *size_MatC];
+		f0MMsource = &DC[TN  *size_MatC];
+		f0PMsource = &DC[TS  *size_MatC];
+		f0MPsource = &DC[BN  *size_MatC];
+		f000source = &DC[REST*size_MatC];
+		fMMMsource = &DC[TNE *size_MatC];
+		fMMPsource = &DC[BNE *size_MatC];
+		fMPPsource = &DC[BSE *size_MatC];
+		fMPMsource = &DC[TSE *size_MatC];
+		fPPMsource = &DC[TSW *size_MatC];
+		fPPPsource = &DC[BSW *size_MatC];
+		fPMPsource = &DC[BNW *size_MatC];
+		fPMMsource = &DC[TNW *size_MatC];
 	}
 
 	Distributions6 G;
-	G.g[dirE] = &G6[dirE   *size_MatF];
-	G.g[dirW] = &G6[dirW   *size_MatF];
-	G.g[dirN] = &G6[dirN   *size_MatF];
-	G.g[dirS] = &G6[dirS   *size_MatF];
-	G.g[dirT] = &G6[dirT   *size_MatF];
-	G.g[dirB] = &G6[dirB   *size_MatF];
+	G.g[E] = &G6[E   *size_MatF];
+	G.g[W] = &G6[W   *size_MatF];
+	G.g[N] = &G6[N   *size_MatF];
+	G.g[S] = &G6[S   *size_MatF];
+	G.g[T] = &G6[T   *size_MatF];
+	G.g[B] = &G6[B   *size_MatF];
 
 	////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -1186,12 +1187,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -1622,12 +1623,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -2061,12 +2062,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -2500,12 +2501,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -2949,12 +2950,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -3388,12 +3389,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -3827,12 +3828,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -4266,12 +4267,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -4390,33 +4391,33 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 		*f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest;
 
 
-	fP00dest = &DF[dirE   *size_MatF];
-	fM00dest = &DF[dirW   *size_MatF];
-	f0P0dest = &DF[dirN   *size_MatF];
-	f0M0dest = &DF[dirS   *size_MatF];
-	f00Pdest = &DF[dirT   *size_MatF];
-	f00Mdest = &DF[dirB   *size_MatF];
-	fPP0dest = &DF[dirNE  *size_MatF];
-	fMM0dest = &DF[dirSW  *size_MatF];
-	fPM0dest = &DF[dirSE  *size_MatF];
-	fMP0dest = &DF[dirNW  *size_MatF];
-	fP0Pdest = &DF[dirTE  *size_MatF];
-	fM0Mdest = &DF[dirBW  *size_MatF];
-	fP0Mdest = &DF[dirBE  *size_MatF];
-	fM0Pdest = &DF[dirTW  *size_MatF];
-	f0PPdest = &DF[dirTN  *size_MatF];
-	f0MMdest = &DF[dirBS  *size_MatF];
-	f0PMdest = &DF[dirBN  *size_MatF];
-	f0MPdest = &DF[dirTS  *size_MatF];
-	f000dest = &DF[dirZERO*size_MatF];
-	fMMMdest = &DF[dirBSW *size_MatF];
-	fMMPdest = &DF[dirTSW *size_MatF];
-	fMPPdest = &DF[dirTNW *size_MatF];
-	fMPMdest = &DF[dirBNW *size_MatF];
-	fPPMdest = &DF[dirBNE *size_MatF];
-	fPPPdest = &DF[dirTNE *size_MatF];
-	fPMPdest = &DF[dirTSE *size_MatF];
-	fPMMdest = &DF[dirBSE *size_MatF];
+	fP00dest = &DF[E   *size_MatF];
+	fM00dest = &DF[W   *size_MatF];
+	f0P0dest = &DF[N   *size_MatF];
+	f0M0dest = &DF[S   *size_MatF];
+	f00Pdest = &DF[T   *size_MatF];
+	f00Mdest = &DF[B   *size_MatF];
+	fPP0dest = &DF[NE  *size_MatF];
+	fMM0dest = &DF[SW  *size_MatF];
+	fPM0dest = &DF[SE  *size_MatF];
+	fMP0dest = &DF[NW  *size_MatF];
+	fP0Pdest = &DF[TE  *size_MatF];
+	fM0Mdest = &DF[BW  *size_MatF];
+	fP0Mdest = &DF[BE  *size_MatF];
+	fM0Pdest = &DF[TW  *size_MatF];
+	f0PPdest = &DF[TN  *size_MatF];
+	f0MMdest = &DF[BS  *size_MatF];
+	f0PMdest = &DF[BN  *size_MatF];
+	f0MPdest = &DF[TS  *size_MatF];
+	f000dest = &DF[REST*size_MatF];
+	fMMMdest = &DF[BSW *size_MatF];
+	fMMPdest = &DF[TSW *size_MatF];
+	fMPPdest = &DF[TNW *size_MatF];
+	fMPMdest = &DF[BNW *size_MatF];
+	fPPMdest = &DF[BNE *size_MatF];
+	fPPPdest = &DF[TNE *size_MatF];
+	fPMPdest = &DF[TSE *size_MatF];
+	fPMMdest = &DF[BSE *size_MatF];
 
 	real
 		*fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source,
@@ -4425,72 +4426,72 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 
 	if (isEvenTimestep == true)
 	{
-		fP00source = &DC[dirE   *size_MatC];
-		fM00source = &DC[dirW   *size_MatC];
-		f0P0source = &DC[dirN   *size_MatC];
-		f0M0source = &DC[dirS   *size_MatC];
-		f00Psource = &DC[dirT   *size_MatC];
-		f00Msource = &DC[dirB   *size_MatC];
-		fPP0source = &DC[dirNE  *size_MatC];
-		fMM0source = &DC[dirSW  *size_MatC];
-		fPM0source = &DC[dirSE  *size_MatC];
-		fMP0source = &DC[dirNW  *size_MatC];
-		fP0Psource = &DC[dirTE  *size_MatC];
-		fM0Msource = &DC[dirBW  *size_MatC];
-		fP0Msource = &DC[dirBE  *size_MatC];
-		fM0Psource = &DC[dirTW  *size_MatC];
-		f0PPsource = &DC[dirTN  *size_MatC];
-		f0MMsource = &DC[dirBS  *size_MatC];
-		f0PMsource = &DC[dirBN  *size_MatC];
-		f0MPsource = &DC[dirTS  *size_MatC];
-		f000source = &DC[dirZERO*size_MatC];
-		fMMMsource = &DC[dirBSW *size_MatC];
-		fMMPsource = &DC[dirTSW *size_MatC];
-		fMPPsource = &DC[dirTNW *size_MatC];
-		fMPMsource = &DC[dirBNW *size_MatC];
-		fPPMsource = &DC[dirBNE *size_MatC];
-		fPPPsource = &DC[dirTNE *size_MatC];
-		fPMPsource = &DC[dirTSE *size_MatC];
-		fPMMsource = &DC[dirBSE *size_MatC];
+		fP00source = &DC[E   *size_MatC];
+		fM00source = &DC[W   *size_MatC];
+		f0P0source = &DC[N   *size_MatC];
+		f0M0source = &DC[S   *size_MatC];
+		f00Psource = &DC[T   *size_MatC];
+		f00Msource = &DC[B   *size_MatC];
+		fPP0source = &DC[NE  *size_MatC];
+		fMM0source = &DC[SW  *size_MatC];
+		fPM0source = &DC[SE  *size_MatC];
+		fMP0source = &DC[NW  *size_MatC];
+		fP0Psource = &DC[TE  *size_MatC];
+		fM0Msource = &DC[BW  *size_MatC];
+		fP0Msource = &DC[BE  *size_MatC];
+		fM0Psource = &DC[TW  *size_MatC];
+		f0PPsource = &DC[TN  *size_MatC];
+		f0MMsource = &DC[BS  *size_MatC];
+		f0PMsource = &DC[BN  *size_MatC];
+		f0MPsource = &DC[TS  *size_MatC];
+		f000source = &DC[REST*size_MatC];
+		fMMMsource = &DC[BSW *size_MatC];
+		fMMPsource = &DC[TSW *size_MatC];
+		fMPPsource = &DC[TNW *size_MatC];
+		fMPMsource = &DC[BNW *size_MatC];
+		fPPMsource = &DC[BNE *size_MatC];
+		fPPPsource = &DC[TNE *size_MatC];
+		fPMPsource = &DC[TSE *size_MatC];
+		fPMMsource = &DC[BSE *size_MatC];
 	}
 	else
 	{
-		fP00source = &DC[dirW   *size_MatC];
-		fM00source = &DC[dirE   *size_MatC];
-		f0P0source = &DC[dirS   *size_MatC];
-		f0M0source = &DC[dirN   *size_MatC];
-		f00Psource = &DC[dirB   *size_MatC];
-		f00Msource = &DC[dirT   *size_MatC];
-		fPP0source = &DC[dirSW  *size_MatC];
-		fMM0source = &DC[dirNE  *size_MatC];
-		fPM0source = &DC[dirNW  *size_MatC];
-		fMP0source = &DC[dirSE  *size_MatC];
-		fP0Psource = &DC[dirBW  *size_MatC];
-		fM0Msource = &DC[dirTE  *size_MatC];
-		fP0Msource = &DC[dirTW  *size_MatC];
-		fM0Psource = &DC[dirBE  *size_MatC];
-		f0PPsource = &DC[dirBS  *size_MatC];
-		f0MMsource = &DC[dirTN  *size_MatC];
-		f0PMsource = &DC[dirTS  *size_MatC];
-		f0MPsource = &DC[dirBN  *size_MatC];
-		f000source = &DC[dirZERO*size_MatC];
-		fMMMsource = &DC[dirTNE *size_MatC];
-		fMMPsource = &DC[dirBNE *size_MatC];
-		fMPPsource = &DC[dirBSE *size_MatC];
-		fMPMsource = &DC[dirTSE *size_MatC];
-		fPPMsource = &DC[dirTSW *size_MatC];
-		fPPPsource = &DC[dirBSW *size_MatC];
-		fPMPsource = &DC[dirBNW *size_MatC];
-		fPMMsource = &DC[dirTNW *size_MatC];
+		fP00source = &DC[W   *size_MatC];
+		fM00source = &DC[E   *size_MatC];
+		f0P0source = &DC[S   *size_MatC];
+		f0M0source = &DC[N   *size_MatC];
+		f00Psource = &DC[B   *size_MatC];
+		f00Msource = &DC[T   *size_MatC];
+		fPP0source = &DC[SW  *size_MatC];
+		fMM0source = &DC[NE  *size_MatC];
+		fPM0source = &DC[NW  *size_MatC];
+		fMP0source = &DC[SE  *size_MatC];
+		fP0Psource = &DC[BW  *size_MatC];
+		fM0Msource = &DC[TE  *size_MatC];
+		fP0Msource = &DC[TW  *size_MatC];
+		fM0Psource = &DC[BE  *size_MatC];
+		f0PPsource = &DC[BS  *size_MatC];
+		f0MMsource = &DC[TN  *size_MatC];
+		f0PMsource = &DC[TS  *size_MatC];
+		f0MPsource = &DC[BN  *size_MatC];
+		f000source = &DC[REST*size_MatC];
+		fMMMsource = &DC[TNE *size_MatC];
+		fMMPsource = &DC[BNE *size_MatC];
+		fMPPsource = &DC[BSE *size_MatC];
+		fMPMsource = &DC[TSE *size_MatC];
+		fPPMsource = &DC[TSW *size_MatC];
+		fPPPsource = &DC[BSW *size_MatC];
+		fPMPsource = &DC[BNW *size_MatC];
+		fPMMsource = &DC[TNW *size_MatC];
 	}
 
 	Distributions6 G;
-	G.g[dirE] = &G6[dirE   *size_MatF];
-	G.g[dirW] = &G6[dirW   *size_MatF];
-	G.g[dirN] = &G6[dirN   *size_MatF];
-	G.g[dirS] = &G6[dirS   *size_MatF];
-	G.g[dirT] = &G6[dirT   *size_MatF];
-	G.g[dirB] = &G6[dirB   *size_MatF];
+	G.g[E] = &G6[E   *size_MatF];
+	G.g[W] = &G6[W   *size_MatF];
+	G.g[N] = &G6[N   *size_MatF];
+	G.g[S] = &G6[S   *size_MatF];
+	G.g[T] = &G6[T   *size_MatF];
+	G.g[B] = &G6[B   *size_MatF];
 
 	////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -5521,12 +5522,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -5948,12 +5949,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -6378,12 +6379,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -6808,12 +6809,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -7248,12 +7249,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -7678,12 +7679,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -8108,12 +8109,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
@@ -8538,12 +8539,12 @@ extern "C" __global__ void scaleCF_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;
 	  fM00dest[kM00] = mfabb;
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ScaleFC27.cu b/src/gpu/VirtualFluids_GPU/GPU/ScaleFC27.cu
index ef4ff8dc84a385c9de869f619d30fd803d841903..773a5829d53be7966008758e1271c4754348287c 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/ScaleFC27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/ScaleFC27.cu
@@ -7,10 +7,11 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void scaleFC_0817_comp_27( real* DC, 
@@ -42,33 +43,33 @@ extern "C" __global__ void scaleFC_0817_comp_27( real* DC,
 	   *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource;
 
 
-   fP00source = &DF[dirE   *size_MatF];
-   fM00source = &DF[dirW   *size_MatF];
-   f0P0source = &DF[dirN   *size_MatF];
-   f0M0source = &DF[dirS   *size_MatF];
-   f00Psource = &DF[dirT   *size_MatF];
-   f00Msource = &DF[dirB   *size_MatF];
-   fPP0source = &DF[dirNE  *size_MatF];
-   fMM0source = &DF[dirSW  *size_MatF];
-   fPM0source = &DF[dirSE  *size_MatF];
-   fMP0source = &DF[dirNW  *size_MatF];
-   fP0Psource = &DF[dirTE  *size_MatF];
-   fM0Msource = &DF[dirBW  *size_MatF];
-   fP0Msource = &DF[dirBE  *size_MatF];
-   fM0Psource = &DF[dirTW  *size_MatF];
-   f0PPsource = &DF[dirTN  *size_MatF];
-   f0MMsource = &DF[dirBS  *size_MatF];
-   f0PMsource = &DF[dirBN  *size_MatF];
-   f0MPsource = &DF[dirTS  *size_MatF];
-   f000source = &DF[dirZERO*size_MatF];
-   fMMMsource = &DF[dirBSW *size_MatF];
-   fMMPsource = &DF[dirTSW *size_MatF];
-   fMPPsource = &DF[dirTNW *size_MatF];
-   fMPMsource = &DF[dirBNW *size_MatF];
-   fPPMsource = &DF[dirBNE *size_MatF];
-   fPPPsource = &DF[dirTNE *size_MatF];
-   fPMPsource = &DF[dirTSE *size_MatF];
-   fPMMsource = &DF[dirBSE *size_MatF];
+   fP00source = &DF[E   *size_MatF];
+   fM00source = &DF[W   *size_MatF];
+   f0P0source = &DF[N   *size_MatF];
+   f0M0source = &DF[S   *size_MatF];
+   f00Psource = &DF[T   *size_MatF];
+   f00Msource = &DF[B   *size_MatF];
+   fPP0source = &DF[NE  *size_MatF];
+   fMM0source = &DF[SW  *size_MatF];
+   fPM0source = &DF[SE  *size_MatF];
+   fMP0source = &DF[NW  *size_MatF];
+   fP0Psource = &DF[TE  *size_MatF];
+   fM0Msource = &DF[BW  *size_MatF];
+   fP0Msource = &DF[BE  *size_MatF];
+   fM0Psource = &DF[TW  *size_MatF];
+   f0PPsource = &DF[TN  *size_MatF];
+   f0MMsource = &DF[BS  *size_MatF];
+   f0PMsource = &DF[BN  *size_MatF];
+   f0MPsource = &DF[TS  *size_MatF];
+   f000source = &DF[REST*size_MatF];
+   fMMMsource = &DF[BSW *size_MatF];
+   fMMPsource = &DF[TSW *size_MatF];
+   fMPPsource = &DF[TNW *size_MatF];
+   fMPMsource = &DF[BNW *size_MatF];
+   fPPMsource = &DF[BNE *size_MatF];
+   fPPPsource = &DF[TNE *size_MatF];
+   fPMPsource = &DF[TSE *size_MatF];
+   fPMMsource = &DF[BSE *size_MatF];
 
    real
 	   *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest,
@@ -77,63 +78,63 @@ extern "C" __global__ void scaleFC_0817_comp_27( real* DC,
 
    if (isEvenTimestep==true)
    {
-	   fP00dest = &DC[dirE   *size_MatC];
-	   fM00dest = &DC[dirW   *size_MatC];
-	   f0P0dest = &DC[dirN   *size_MatC];
-	   f0M0dest = &DC[dirS   *size_MatC];
-	   f00Pdest = &DC[dirT   *size_MatC];
-	   f00Mdest = &DC[dirB   *size_MatC];
-	   fPP0dest = &DC[dirNE  *size_MatC];
-	   fMM0dest = &DC[dirSW  *size_MatC];
-	   fPM0dest = &DC[dirSE  *size_MatC];
-	   fMP0dest = &DC[dirNW  *size_MatC];
-	   fP0Pdest = &DC[dirTE  *size_MatC];
-	   fM0Mdest = &DC[dirBW  *size_MatC];
-	   fP0Mdest = &DC[dirBE  *size_MatC];
-	   fM0Pdest = &DC[dirTW  *size_MatC];
-	   f0PPdest = &DC[dirTN  *size_MatC];
-	   f0MMdest = &DC[dirBS  *size_MatC];
-	   f0PMdest = &DC[dirBN  *size_MatC];
-	   f0MPdest = &DC[dirTS  *size_MatC];
-	   f000dest = &DC[dirZERO*size_MatC];
-	   fMMMdest = &DC[dirBSW *size_MatC];
-	   fMMPdest = &DC[dirTSW *size_MatC];
-	   fMPPdest = &DC[dirTNW *size_MatC];
-	   fMPMdest = &DC[dirBNW *size_MatC];
-	   fPPMdest = &DC[dirBNE *size_MatC];
-	   fPPPdest = &DC[dirTNE *size_MatC];
-	   fPMPdest = &DC[dirTSE *size_MatC];
-	   fPMMdest = &DC[dirBSE *size_MatC];
+	   fP00dest = &DC[E   *size_MatC];
+	   fM00dest = &DC[W   *size_MatC];
+	   f0P0dest = &DC[N   *size_MatC];
+	   f0M0dest = &DC[S   *size_MatC];
+	   f00Pdest = &DC[T   *size_MatC];
+	   f00Mdest = &DC[B   *size_MatC];
+	   fPP0dest = &DC[NE  *size_MatC];
+	   fMM0dest = &DC[SW  *size_MatC];
+	   fPM0dest = &DC[SE  *size_MatC];
+	   fMP0dest = &DC[NW  *size_MatC];
+	   fP0Pdest = &DC[TE  *size_MatC];
+	   fM0Mdest = &DC[BW  *size_MatC];
+	   fP0Mdest = &DC[BE  *size_MatC];
+	   fM0Pdest = &DC[TW  *size_MatC];
+	   f0PPdest = &DC[TN  *size_MatC];
+	   f0MMdest = &DC[BS  *size_MatC];
+	   f0PMdest = &DC[BN  *size_MatC];
+	   f0MPdest = &DC[TS  *size_MatC];
+	   f000dest = &DC[REST*size_MatC];
+	   fMMMdest = &DC[BSW *size_MatC];
+	   fMMPdest = &DC[TSW *size_MatC];
+	   fMPPdest = &DC[TNW *size_MatC];
+	   fMPMdest = &DC[BNW *size_MatC];
+	   fPPMdest = &DC[BNE *size_MatC];
+	   fPPPdest = &DC[TNE *size_MatC];
+	   fPMPdest = &DC[TSE *size_MatC];
+	   fPMMdest = &DC[BSE *size_MatC];
    } 
    else
    {
-	   fP00dest = &DC[dirW   *size_MatC];
-	   fM00dest = &DC[dirE   *size_MatC];
-	   f0P0dest = &DC[dirS   *size_MatC];
-	   f0M0dest = &DC[dirN   *size_MatC];
-	   f00Pdest = &DC[dirB   *size_MatC];
-	   f00Mdest = &DC[dirT   *size_MatC];
-	   fPP0dest = &DC[dirSW  *size_MatC];
-	   fMM0dest = &DC[dirNE  *size_MatC];
-	   fPM0dest = &DC[dirNW  *size_MatC];
-	   fMP0dest = &DC[dirSE  *size_MatC];
-	   fP0Pdest = &DC[dirBW  *size_MatC];
-	   fM0Mdest = &DC[dirTE  *size_MatC];
-	   fP0Mdest = &DC[dirTW  *size_MatC];
-	   fM0Pdest = &DC[dirBE  *size_MatC];
-	   f0PPdest = &DC[dirBS  *size_MatC];
-	   f0MMdest = &DC[dirTN  *size_MatC];
-	   f0PMdest = &DC[dirTS  *size_MatC];
-	   f0MPdest = &DC[dirBN  *size_MatC];
-	   f000dest = &DC[dirZERO*size_MatC];
-	   fMMMdest = &DC[dirTNE *size_MatC];
-	   fMMPdest = &DC[dirBNE *size_MatC];
-	   fMPPdest = &DC[dirBSE *size_MatC];
-	   fMPMdest = &DC[dirTSE *size_MatC];
-	   fPPMdest = &DC[dirTSW *size_MatC];
-	   fPPPdest = &DC[dirBSW *size_MatC];
-	   fPMPdest = &DC[dirBNW *size_MatC];
-	   fPMMdest = &DC[dirTNW *size_MatC];
+	   fP00dest = &DC[W   *size_MatC];
+	   fM00dest = &DC[E   *size_MatC];
+	   f0P0dest = &DC[S   *size_MatC];
+	   f0M0dest = &DC[N   *size_MatC];
+	   f00Pdest = &DC[B   *size_MatC];
+	   f00Mdest = &DC[T   *size_MatC];
+	   fPP0dest = &DC[SW  *size_MatC];
+	   fMM0dest = &DC[NE  *size_MatC];
+	   fPM0dest = &DC[NW  *size_MatC];
+	   fMP0dest = &DC[SE  *size_MatC];
+	   fP0Pdest = &DC[BW  *size_MatC];
+	   fM0Mdest = &DC[TE  *size_MatC];
+	   fP0Mdest = &DC[TW  *size_MatC];
+	   fM0Pdest = &DC[BE  *size_MatC];
+	   f0PPdest = &DC[BS  *size_MatC];
+	   f0MMdest = &DC[TN  *size_MatC];
+	   f0PMdest = &DC[TS  *size_MatC];
+	   f0MPdest = &DC[BN  *size_MatC];
+	   f000dest = &DC[REST*size_MatC];
+	   fMMMdest = &DC[TNE *size_MatC];
+	   fMMPdest = &DC[BNE *size_MatC];
+	   fMPPdest = &DC[BSE *size_MatC];
+	   fMPMdest = &DC[TSE *size_MatC];
+	   fPPMdest = &DC[TSW *size_MatC];
+	   fPPPdest = &DC[BSW *size_MatC];
+	   fPMPdest = &DC[BNW *size_MatC];
+	   fPMMdest = &DC[TNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -1235,96 +1236,96 @@ extern "C" __global__ void scaleFC_AA2016_comp_27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -5424,96 +5425,96 @@ extern "C" __global__ void scaleFC_RhoSq_3rdMom_comp_27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -9596,93 +9597,93 @@ __device__ void scaleFC_RhoSq_comp_27_Calculation(real *DC, real *DF, unsigned i
     real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF,
         *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-    feF    = &DF[dirE * size_MatF];
-    fwF    = &DF[dirW * size_MatF];
-    fnF    = &DF[dirN * size_MatF];
-    fsF    = &DF[dirS * size_MatF];
-    ftF    = &DF[dirT * size_MatF];
-    fbF    = &DF[dirB * size_MatF];
-    fneF   = &DF[dirNE * size_MatF];
-    fswF   = &DF[dirSW * size_MatF];
-    fseF   = &DF[dirSE * size_MatF];
-    fnwF   = &DF[dirNW * size_MatF];
-    fteF   = &DF[dirTE * size_MatF];
-    fbwF   = &DF[dirBW * size_MatF];
-    fbeF   = &DF[dirBE * size_MatF];
-    ftwF   = &DF[dirTW * size_MatF];
-    ftnF   = &DF[dirTN * size_MatF];
-    fbsF   = &DF[dirBS * size_MatF];
-    fbnF   = &DF[dirBN * size_MatF];
-    ftsF   = &DF[dirTS * size_MatF];
-    fzeroF = &DF[dirZERO * size_MatF];
-    ftneF  = &DF[dirTNE * size_MatF];
-    ftswF  = &DF[dirTSW * size_MatF];
-    ftseF  = &DF[dirTSE * size_MatF];
-    ftnwF  = &DF[dirTNW * size_MatF];
-    fbneF  = &DF[dirBNE * size_MatF];
-    fbswF  = &DF[dirBSW * size_MatF];
-    fbseF  = &DF[dirBSE * size_MatF];
-    fbnwF  = &DF[dirBNW * size_MatF];
+    feF    = &DF[E * size_MatF];
+    fwF    = &DF[W * size_MatF];
+    fnF    = &DF[N * size_MatF];
+    fsF    = &DF[S * size_MatF];
+    ftF    = &DF[T * size_MatF];
+    fbF    = &DF[B * size_MatF];
+    fneF   = &DF[NE * size_MatF];
+    fswF   = &DF[SW * size_MatF];
+    fseF   = &DF[SE * size_MatF];
+    fnwF   = &DF[NW * size_MatF];
+    fteF   = &DF[TE * size_MatF];
+    fbwF   = &DF[BW * size_MatF];
+    fbeF   = &DF[BE * size_MatF];
+    ftwF   = &DF[TW * size_MatF];
+    ftnF   = &DF[TN * size_MatF];
+    fbsF   = &DF[BS * size_MatF];
+    fbnF   = &DF[BN * size_MatF];
+    ftsF   = &DF[TS * size_MatF];
+    fzeroF = &DF[REST * size_MatF];
+    ftneF  = &DF[TNE * size_MatF];
+    ftswF  = &DF[TSW * size_MatF];
+    ftseF  = &DF[TSE * size_MatF];
+    ftnwF  = &DF[TNW * size_MatF];
+    fbneF  = &DF[BNE * size_MatF];
+    fbswF  = &DF[BSW * size_MatF];
+    fbseF  = &DF[BSE * size_MatF];
+    fbnwF  = &DF[BNW * size_MatF];
 
     real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC,
         *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
     if (isEvenTimestep == true) {
-        feC    = &DC[dirE * size_MatC];
-        fwC    = &DC[dirW * size_MatC];
-        fnC    = &DC[dirN * size_MatC];
-        fsC    = &DC[dirS * size_MatC];
-        ftC    = &DC[dirT * size_MatC];
-        fbC    = &DC[dirB * size_MatC];
-        fneC   = &DC[dirNE * size_MatC];
-        fswC   = &DC[dirSW * size_MatC];
-        fseC   = &DC[dirSE * size_MatC];
-        fnwC   = &DC[dirNW * size_MatC];
-        fteC   = &DC[dirTE * size_MatC];
-        fbwC   = &DC[dirBW * size_MatC];
-        fbeC   = &DC[dirBE * size_MatC];
-        ftwC   = &DC[dirTW * size_MatC];
-        ftnC   = &DC[dirTN * size_MatC];
-        fbsC   = &DC[dirBS * size_MatC];
-        fbnC   = &DC[dirBN * size_MatC];
-        ftsC   = &DC[dirTS * size_MatC];
-        fzeroC = &DC[dirZERO * size_MatC];
-        ftneC  = &DC[dirTNE * size_MatC];
-        ftswC  = &DC[dirTSW * size_MatC];
-        ftseC  = &DC[dirTSE * size_MatC];
-        ftnwC  = &DC[dirTNW * size_MatC];
-        fbneC  = &DC[dirBNE * size_MatC];
-        fbswC  = &DC[dirBSW * size_MatC];
-        fbseC  = &DC[dirBSE * size_MatC];
-        fbnwC  = &DC[dirBNW * size_MatC];
+        feC    = &DC[E * size_MatC];
+        fwC    = &DC[W * size_MatC];
+        fnC    = &DC[N * size_MatC];
+        fsC    = &DC[S * size_MatC];
+        ftC    = &DC[T * size_MatC];
+        fbC    = &DC[B * size_MatC];
+        fneC   = &DC[NE * size_MatC];
+        fswC   = &DC[SW * size_MatC];
+        fseC   = &DC[SE * size_MatC];
+        fnwC   = &DC[NW * size_MatC];
+        fteC   = &DC[TE * size_MatC];
+        fbwC   = &DC[BW * size_MatC];
+        fbeC   = &DC[BE * size_MatC];
+        ftwC   = &DC[TW * size_MatC];
+        ftnC   = &DC[TN * size_MatC];
+        fbsC   = &DC[BS * size_MatC];
+        fbnC   = &DC[BN * size_MatC];
+        ftsC   = &DC[TS * size_MatC];
+        fzeroC = &DC[REST * size_MatC];
+        ftneC  = &DC[TNE * size_MatC];
+        ftswC  = &DC[TSW * size_MatC];
+        ftseC  = &DC[TSE * size_MatC];
+        ftnwC  = &DC[TNW * size_MatC];
+        fbneC  = &DC[BNE * size_MatC];
+        fbswC  = &DC[BSW * size_MatC];
+        fbseC  = &DC[BSE * size_MatC];
+        fbnwC  = &DC[BNW * size_MatC];
     } else {
-        fwC    = &DC[dirE * size_MatC];
-        feC    = &DC[dirW * size_MatC];
-        fsC    = &DC[dirN * size_MatC];
-        fnC    = &DC[dirS * size_MatC];
-        fbC    = &DC[dirT * size_MatC];
-        ftC    = &DC[dirB * size_MatC];
-        fswC   = &DC[dirNE * size_MatC];
-        fneC   = &DC[dirSW * size_MatC];
-        fnwC   = &DC[dirSE * size_MatC];
-        fseC   = &DC[dirNW * size_MatC];
-        fbwC   = &DC[dirTE * size_MatC];
-        fteC   = &DC[dirBW * size_MatC];
-        ftwC   = &DC[dirBE * size_MatC];
-        fbeC   = &DC[dirTW * size_MatC];
-        fbsC   = &DC[dirTN * size_MatC];
-        ftnC   = &DC[dirBS * size_MatC];
-        ftsC   = &DC[dirBN * size_MatC];
-        fbnC   = &DC[dirTS * size_MatC];
-        fzeroC = &DC[dirZERO * size_MatC];
-        fbswC  = &DC[dirTNE * size_MatC];
-        fbneC  = &DC[dirTSW * size_MatC];
-        fbnwC  = &DC[dirTSE * size_MatC];
-        fbseC  = &DC[dirTNW * size_MatC];
-        ftswC  = &DC[dirBNE * size_MatC];
-        ftneC  = &DC[dirBSW * size_MatC];
-        ftnwC  = &DC[dirBSE * size_MatC];
-        ftseC  = &DC[dirBNW * size_MatC];
+        fwC    = &DC[E * size_MatC];
+        feC    = &DC[W * size_MatC];
+        fsC    = &DC[N * size_MatC];
+        fnC    = &DC[S * size_MatC];
+        fbC    = &DC[T * size_MatC];
+        ftC    = &DC[B * size_MatC];
+        fswC   = &DC[NE * size_MatC];
+        fneC   = &DC[SW * size_MatC];
+        fnwC   = &DC[SE * size_MatC];
+        fseC   = &DC[NW * size_MatC];
+        fbwC   = &DC[TE * size_MatC];
+        fteC   = &DC[BW * size_MatC];
+        ftwC   = &DC[BE * size_MatC];
+        fbeC   = &DC[TW * size_MatC];
+        fbsC   = &DC[TN * size_MatC];
+        ftnC   = &DC[BS * size_MatC];
+        ftsC   = &DC[BN * size_MatC];
+        fbnC   = &DC[TS * size_MatC];
+        fzeroC = &DC[REST * size_MatC];
+        fbswC  = &DC[TNE * size_MatC];
+        fbneC  = &DC[TSW * size_MatC];
+        fbnwC  = &DC[TSE * size_MatC];
+        fbseC  = &DC[TNW * size_MatC];
+        ftswC  = &DC[BNE * size_MatC];
+        ftneC  = &DC[BSW * size_MatC];
+        ftnwC  = &DC[BSE * size_MatC];
+        ftseC  = &DC[BNW * size_MatC];
     }
 
     ////////////////////////////////////////////////////////////////////////////////
@@ -11174,96 +11175,96 @@ extern "C" __global__ void scaleFC_staggered_time_comp_27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -11758,63 +11759,63 @@ extern "C" __global__ void scaleFC_staggered_time_comp_27(   real* DC,
 	  ////pointertausch
 	  // if (isEvenTimestep==false)
 	  // {
-		 // feC    = &DC[dirE   *size_MatC];
-		 // fwC    = &DC[dirW   *size_MatC];
-		 // fnC    = &DC[dirN   *size_MatC];
-		 // fsC    = &DC[dirS   *size_MatC];
-		 // ftC    = &DC[dirT   *size_MatC];
-		 // fbC    = &DC[dirB   *size_MatC];
-		 // fneC   = &DC[dirNE  *size_MatC];
-		 // fswC   = &DC[dirSW  *size_MatC];
-		 // fseC   = &DC[dirSE  *size_MatC];
-		 // fnwC   = &DC[dirNW  *size_MatC];
-		 // fteC   = &DC[dirTE  *size_MatC];
-		 // fbwC   = &DC[dirBW  *size_MatC];
-		 // fbeC   = &DC[dirBE  *size_MatC];
-		 // ftwC   = &DC[dirTW  *size_MatC];
-		 // ftnC   = &DC[dirTN  *size_MatC];
-		 // fbsC   = &DC[dirBS  *size_MatC];
-		 // fbnC   = &DC[dirBN  *size_MatC];
-		 // ftsC   = &DC[dirTS  *size_MatC];
-		 // fzeroC = &DC[dirZERO*size_MatC];
-		 // ftneC  = &DC[dirTNE *size_MatC];
-		 // ftswC  = &DC[dirTSW *size_MatC];
-		 // ftseC  = &DC[dirTSE *size_MatC];
-		 // ftnwC  = &DC[dirTNW *size_MatC];
-		 // fbneC  = &DC[dirBNE *size_MatC];
-		 // fbswC  = &DC[dirBSW *size_MatC];
-		 // fbseC  = &DC[dirBSE *size_MatC];
-		 // fbnwC  = &DC[dirBNW *size_MatC];
+		 // feC    = &DC[E   *size_MatC];
+		 // fwC    = &DC[W   *size_MatC];
+		 // fnC    = &DC[N   *size_MatC];
+		 // fsC    = &DC[S   *size_MatC];
+		 // ftC    = &DC[T   *size_MatC];
+		 // fbC    = &DC[B   *size_MatC];
+		 // fneC   = &DC[NE  *size_MatC];
+		 // fswC   = &DC[SW  *size_MatC];
+		 // fseC   = &DC[SE  *size_MatC];
+		 // fnwC   = &DC[NW  *size_MatC];
+		 // fteC   = &DC[TE  *size_MatC];
+		 // fbwC   = &DC[BW  *size_MatC];
+		 // fbeC   = &DC[BE  *size_MatC];
+		 // ftwC   = &DC[TW  *size_MatC];
+		 // ftnC   = &DC[TN  *size_MatC];
+		 // fbsC   = &DC[BS  *size_MatC];
+		 // fbnC   = &DC[BN  *size_MatC];
+		 // ftsC   = &DC[TS  *size_MatC];
+		 // fzeroC = &DC[REST*size_MatC];
+		 // ftneC  = &DC[TNE *size_MatC];
+		 // ftswC  = &DC[TSW *size_MatC];
+		 // ftseC  = &DC[TSE *size_MatC];
+		 // ftnwC  = &DC[TNW *size_MatC];
+		 // fbneC  = &DC[BNE *size_MatC];
+		 // fbswC  = &DC[BSW *size_MatC];
+		 // fbseC  = &DC[BSE *size_MatC];
+		 // fbnwC  = &DC[BNW *size_MatC];
 	  // } 
 	  // else
 	  // {
-		 // fwC    = &DC[dirE   *size_MatC];
-		 // feC    = &DC[dirW   *size_MatC];
-		 // fsC    = &DC[dirN   *size_MatC];
-		 // fnC    = &DC[dirS   *size_MatC];
-		 // fbC    = &DC[dirT   *size_MatC];
-		 // ftC    = &DC[dirB   *size_MatC];
-		 // fswC   = &DC[dirNE  *size_MatC];
-		 // fneC   = &DC[dirSW  *size_MatC];
-		 // fnwC   = &DC[dirSE  *size_MatC];
-		 // fseC   = &DC[dirNW  *size_MatC];
-		 // fbwC   = &DC[dirTE  *size_MatC];
-		 // fteC   = &DC[dirBW  *size_MatC];
-		 // ftwC   = &DC[dirBE  *size_MatC];
-		 // fbeC   = &DC[dirTW  *size_MatC];
-		 // fbsC   = &DC[dirTN  *size_MatC];
-		 // ftnC   = &DC[dirBS  *size_MatC];
-		 // ftsC   = &DC[dirBN  *size_MatC];
-		 // fbnC   = &DC[dirTS  *size_MatC];
-		 // fzeroC = &DC[dirZERO*size_MatC];
-		 // fbswC  = &DC[dirTNE *size_MatC];
-		 // fbneC  = &DC[dirTSW *size_MatC];
-		 // fbnwC  = &DC[dirTSE *size_MatC];
-		 // fbseC  = &DC[dirTNW *size_MatC];
-		 // ftswC  = &DC[dirBNE *size_MatC];
-		 // ftneC  = &DC[dirBSW *size_MatC];
-		 // ftnwC  = &DC[dirBSE *size_MatC];
-		 // ftseC  = &DC[dirBNW *size_MatC];
+		 // fwC    = &DC[E   *size_MatC];
+		 // feC    = &DC[W   *size_MatC];
+		 // fsC    = &DC[N   *size_MatC];
+		 // fnC    = &DC[S   *size_MatC];
+		 // fbC    = &DC[T   *size_MatC];
+		 // ftC    = &DC[B   *size_MatC];
+		 // fswC   = &DC[NE  *size_MatC];
+		 // fneC   = &DC[SW  *size_MatC];
+		 // fnwC   = &DC[SE  *size_MatC];
+		 // fseC   = &DC[NW  *size_MatC];
+		 // fbwC   = &DC[TE  *size_MatC];
+		 // fteC   = &DC[BW  *size_MatC];
+		 // ftwC   = &DC[BE  *size_MatC];
+		 // fbeC   = &DC[TW  *size_MatC];
+		 // fbsC   = &DC[TN  *size_MatC];
+		 // ftnC   = &DC[BS  *size_MatC];
+		 // ftsC   = &DC[BN  *size_MatC];
+		 // fbnC   = &DC[TS  *size_MatC];
+		 // fzeroC = &DC[REST*size_MatC];
+		 // fbswC  = &DC[TNE *size_MatC];
+		 // fbneC  = &DC[TSW *size_MatC];
+		 // fbnwC  = &DC[TSE *size_MatC];
+		 // fbseC  = &DC[TNW *size_MatC];
+		 // ftswC  = &DC[BNE *size_MatC];
+		 // ftneC  = &DC[BSW *size_MatC];
+		 // ftnwC  = &DC[BSE *size_MatC];
+		 // ftseC  = &DC[BNW *size_MatC];
 	  // }
 
  	 // real rho_tmp;
@@ -13295,96 +13296,96 @@ extern "C" __global__ void scaleFC_Fix_comp_27(  real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -15155,96 +15156,96 @@ extern "C" __global__ void scaleFC_NSPress_27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -16361,96 +16362,96 @@ extern "C" __global__ void scaleFC_Fix_27(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -17721,96 +17722,96 @@ extern "C" __global__ void scaleFCpress27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -18646,96 +18647,96 @@ extern "C" __global__ void scaleFCLast27( real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -20039,96 +20040,96 @@ extern "C" __global__ void scaleFCThSMG7(    real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, //*fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   //fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   //fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    Distributions7 D7F;
@@ -20911,96 +20912,96 @@ extern "C" __global__ void scaleFCThS7(   real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, //*fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   //fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   //fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    Distributions7 D7F;
@@ -21703,187 +21704,187 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, //*fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   //fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   //fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      //fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      //fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
 
    Distributions27 D27F;
-   D27F.f[dirE   ] = &DD27F[dirE   *size_MatF];
-   D27F.f[dirW   ] = &DD27F[dirW   *size_MatF];
-   D27F.f[dirN   ] = &DD27F[dirN   *size_MatF];
-   D27F.f[dirS   ] = &DD27F[dirS   *size_MatF];
-   D27F.f[dirT   ] = &DD27F[dirT   *size_MatF];
-   D27F.f[dirB   ] = &DD27F[dirB   *size_MatF];
-   D27F.f[dirNE  ] = &DD27F[dirNE  *size_MatF];
-   D27F.f[dirSW  ] = &DD27F[dirSW  *size_MatF];
-   D27F.f[dirSE  ] = &DD27F[dirSE  *size_MatF];
-   D27F.f[dirNW  ] = &DD27F[dirNW  *size_MatF];
-   D27F.f[dirTE  ] = &DD27F[dirTE  *size_MatF];
-   D27F.f[dirBW  ] = &DD27F[dirBW  *size_MatF];
-   D27F.f[dirBE  ] = &DD27F[dirBE  *size_MatF];
-   D27F.f[dirTW  ] = &DD27F[dirTW  *size_MatF];
-   D27F.f[dirTN  ] = &DD27F[dirTN  *size_MatF];
-   D27F.f[dirBS  ] = &DD27F[dirBS  *size_MatF];
-   D27F.f[dirBN  ] = &DD27F[dirBN  *size_MatF];
-   D27F.f[dirTS  ] = &DD27F[dirTS  *size_MatF];
-   D27F.f[dirZERO] = &DD27F[dirZERO*size_MatF];
-   D27F.f[dirTNE ] = &DD27F[dirTNE *size_MatF];
-   D27F.f[dirTSW ] = &DD27F[dirTSW *size_MatF];
-   D27F.f[dirTSE ] = &DD27F[dirTSE *size_MatF];
-   D27F.f[dirTNW ] = &DD27F[dirTNW *size_MatF];
-   D27F.f[dirBNE ] = &DD27F[dirBNE *size_MatF];
-   D27F.f[dirBSW ] = &DD27F[dirBSW *size_MatF];
-   D27F.f[dirBSE ] = &DD27F[dirBSE *size_MatF];
-   D27F.f[dirBNW ] = &DD27F[dirBNW *size_MatF];
+   D27F.f[E   ] = &DD27F[E   *size_MatF];
+   D27F.f[W   ] = &DD27F[W   *size_MatF];
+   D27F.f[N   ] = &DD27F[N   *size_MatF];
+   D27F.f[S   ] = &DD27F[S   *size_MatF];
+   D27F.f[T   ] = &DD27F[T   *size_MatF];
+   D27F.f[B   ] = &DD27F[B   *size_MatF];
+   D27F.f[NE  ] = &DD27F[NE  *size_MatF];
+   D27F.f[SW  ] = &DD27F[SW  *size_MatF];
+   D27F.f[SE  ] = &DD27F[SE  *size_MatF];
+   D27F.f[NW  ] = &DD27F[NW  *size_MatF];
+   D27F.f[TE  ] = &DD27F[TE  *size_MatF];
+   D27F.f[BW  ] = &DD27F[BW  *size_MatF];
+   D27F.f[BE  ] = &DD27F[BE  *size_MatF];
+   D27F.f[TW  ] = &DD27F[TW  *size_MatF];
+   D27F.f[TN  ] = &DD27F[TN  *size_MatF];
+   D27F.f[BS  ] = &DD27F[BS  *size_MatF];
+   D27F.f[BN  ] = &DD27F[BN  *size_MatF];
+   D27F.f[TS  ] = &DD27F[TS  *size_MatF];
+   D27F.f[REST] = &DD27F[REST*size_MatF];
+   D27F.f[TNE ] = &DD27F[TNE *size_MatF];
+   D27F.f[TSW ] = &DD27F[TSW *size_MatF];
+   D27F.f[TSE ] = &DD27F[TSE *size_MatF];
+   D27F.f[TNW ] = &DD27F[TNW *size_MatF];
+   D27F.f[BNE ] = &DD27F[BNE *size_MatF];
+   D27F.f[BSW ] = &DD27F[BSW *size_MatF];
+   D27F.f[BSE ] = &DD27F[BSE *size_MatF];
+   D27F.f[BNW ] = &DD27F[BNW *size_MatF];
 
    Distributions27 D27C;
    if (isEvenTimestep==true)
    {
-      D27C.f[dirE   ] = &DD27C[dirE   *size_MatC];
-      D27C.f[dirW   ] = &DD27C[dirW   *size_MatC];
-      D27C.f[dirN   ] = &DD27C[dirN   *size_MatC];
-      D27C.f[dirS   ] = &DD27C[dirS   *size_MatC];
-      D27C.f[dirT   ] = &DD27C[dirT   *size_MatC];
-      D27C.f[dirB   ] = &DD27C[dirB   *size_MatC];
-      D27C.f[dirNE  ] = &DD27C[dirNE  *size_MatC];
-      D27C.f[dirSW  ] = &DD27C[dirSW  *size_MatC];
-      D27C.f[dirSE  ] = &DD27C[dirSE  *size_MatC];
-      D27C.f[dirNW  ] = &DD27C[dirNW  *size_MatC];
-      D27C.f[dirTE  ] = &DD27C[dirTE  *size_MatC];
-      D27C.f[dirBW  ] = &DD27C[dirBW  *size_MatC];
-      D27C.f[dirBE  ] = &DD27C[dirBE  *size_MatC];
-      D27C.f[dirTW  ] = &DD27C[dirTW  *size_MatC];
-      D27C.f[dirTN  ] = &DD27C[dirTN  *size_MatC];
-      D27C.f[dirBS  ] = &DD27C[dirBS  *size_MatC];
-      D27C.f[dirBN  ] = &DD27C[dirBN  *size_MatC];
-      D27C.f[dirTS  ] = &DD27C[dirTS  *size_MatC];
-      D27C.f[dirZERO] = &DD27C[dirZERO*size_MatC];
-      D27C.f[dirTNE ] = &DD27C[dirTNE *size_MatC];
-      D27C.f[dirTSW ] = &DD27C[dirTSW *size_MatC];
-      D27C.f[dirTSE ] = &DD27C[dirTSE *size_MatC];
-      D27C.f[dirTNW ] = &DD27C[dirTNW *size_MatC];
-      D27C.f[dirBNE ] = &DD27C[dirBNE *size_MatC];
-      D27C.f[dirBSW ] = &DD27C[dirBSW *size_MatC];
-      D27C.f[dirBSE ] = &DD27C[dirBSE *size_MatC];
-      D27C.f[dirBNW ] = &DD27C[dirBNW *size_MatC];
+      D27C.f[E   ] = &DD27C[E   *size_MatC];
+      D27C.f[W   ] = &DD27C[W   *size_MatC];
+      D27C.f[N   ] = &DD27C[N   *size_MatC];
+      D27C.f[S   ] = &DD27C[S   *size_MatC];
+      D27C.f[T   ] = &DD27C[T   *size_MatC];
+      D27C.f[B   ] = &DD27C[B   *size_MatC];
+      D27C.f[NE  ] = &DD27C[NE  *size_MatC];
+      D27C.f[SW  ] = &DD27C[SW  *size_MatC];
+      D27C.f[SE  ] = &DD27C[SE  *size_MatC];
+      D27C.f[NW  ] = &DD27C[NW  *size_MatC];
+      D27C.f[TE  ] = &DD27C[TE  *size_MatC];
+      D27C.f[BW  ] = &DD27C[BW  *size_MatC];
+      D27C.f[BE  ] = &DD27C[BE  *size_MatC];
+      D27C.f[TW  ] = &DD27C[TW  *size_MatC];
+      D27C.f[TN  ] = &DD27C[TN  *size_MatC];
+      D27C.f[BS  ] = &DD27C[BS  *size_MatC];
+      D27C.f[BN  ] = &DD27C[BN  *size_MatC];
+      D27C.f[TS  ] = &DD27C[TS  *size_MatC];
+      D27C.f[REST] = &DD27C[REST*size_MatC];
+      D27C.f[TNE ] = &DD27C[TNE *size_MatC];
+      D27C.f[TSW ] = &DD27C[TSW *size_MatC];
+      D27C.f[TSE ] = &DD27C[TSE *size_MatC];
+      D27C.f[TNW ] = &DD27C[TNW *size_MatC];
+      D27C.f[BNE ] = &DD27C[BNE *size_MatC];
+      D27C.f[BSW ] = &DD27C[BSW *size_MatC];
+      D27C.f[BSE ] = &DD27C[BSE *size_MatC];
+      D27C.f[BNW ] = &DD27C[BNW *size_MatC];
    }
    else
    {
-      D27C.f[dirW   ] = &DD27C[dirE   *size_MatC];
-      D27C.f[dirE   ] = &DD27C[dirW   *size_MatC];
-      D27C.f[dirS   ] = &DD27C[dirN   *size_MatC];
-      D27C.f[dirN   ] = &DD27C[dirS   *size_MatC];
-      D27C.f[dirB   ] = &DD27C[dirT   *size_MatC];
-      D27C.f[dirT   ] = &DD27C[dirB   *size_MatC];
-      D27C.f[dirSW  ] = &DD27C[dirNE  *size_MatC];
-      D27C.f[dirNE  ] = &DD27C[dirSW  *size_MatC];
-      D27C.f[dirNW  ] = &DD27C[dirSE  *size_MatC];
-      D27C.f[dirSE  ] = &DD27C[dirNW  *size_MatC];
-      D27C.f[dirBW  ] = &DD27C[dirTE  *size_MatC];
-      D27C.f[dirTE  ] = &DD27C[dirBW  *size_MatC];
-      D27C.f[dirTW  ] = &DD27C[dirBE  *size_MatC];
-      D27C.f[dirBE  ] = &DD27C[dirTW  *size_MatC];
-      D27C.f[dirBS  ] = &DD27C[dirTN  *size_MatC];
-      D27C.f[dirTN  ] = &DD27C[dirBS  *size_MatC];
-      D27C.f[dirTS  ] = &DD27C[dirBN  *size_MatC];
-      D27C.f[dirBN  ] = &DD27C[dirTS  *size_MatC];
-      D27C.f[dirZERO] = &DD27C[dirZERO*size_MatC];
-      D27C.f[dirBSW ] = &DD27C[dirTNE *size_MatC];
-      D27C.f[dirBNE ] = &DD27C[dirTSW *size_MatC];
-      D27C.f[dirBNW ] = &DD27C[dirTSE *size_MatC];
-      D27C.f[dirBSE ] = &DD27C[dirTNW *size_MatC];
-      D27C.f[dirTSW ] = &DD27C[dirBNE *size_MatC];
-      D27C.f[dirTNE ] = &DD27C[dirBSW *size_MatC];
-      D27C.f[dirTNW ] = &DD27C[dirBSE *size_MatC];
-      D27C.f[dirTSE ] = &DD27C[dirBNW *size_MatC];
+      D27C.f[W   ] = &DD27C[E   *size_MatC];
+      D27C.f[E   ] = &DD27C[W   *size_MatC];
+      D27C.f[S   ] = &DD27C[N   *size_MatC];
+      D27C.f[N   ] = &DD27C[S   *size_MatC];
+      D27C.f[B   ] = &DD27C[T   *size_MatC];
+      D27C.f[T   ] = &DD27C[B   *size_MatC];
+      D27C.f[SW  ] = &DD27C[NE  *size_MatC];
+      D27C.f[NE  ] = &DD27C[SW  *size_MatC];
+      D27C.f[NW  ] = &DD27C[SE  *size_MatC];
+      D27C.f[SE  ] = &DD27C[NW  *size_MatC];
+      D27C.f[BW  ] = &DD27C[TE  *size_MatC];
+      D27C.f[TE  ] = &DD27C[BW  *size_MatC];
+      D27C.f[TW  ] = &DD27C[BE  *size_MatC];
+      D27C.f[BE  ] = &DD27C[TW  *size_MatC];
+      D27C.f[BS  ] = &DD27C[TN  *size_MatC];
+      D27C.f[TN  ] = &DD27C[BS  *size_MatC];
+      D27C.f[TS  ] = &DD27C[BN  *size_MatC];
+      D27C.f[BN  ] = &DD27C[TS  *size_MatC];
+      D27C.f[REST] = &DD27C[REST*size_MatC];
+      D27C.f[BSW ] = &DD27C[TNE *size_MatC];
+      D27C.f[BNE ] = &DD27C[TSW *size_MatC];
+      D27C.f[BNW ] = &DD27C[TSE *size_MatC];
+      D27C.f[BSE ] = &DD27C[TNW *size_MatC];
+      D27C.f[TSW ] = &DD27C[BNE *size_MatC];
+      D27C.f[TNE ] = &DD27C[BSW *size_MatC];
+      D27C.f[TNW ] = &DD27C[BSE *size_MatC];
+      D27C.f[TSE ] = &DD27C[BNW *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -21979,33 +21980,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_SWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22066,33 +22067,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_SWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22153,33 +22154,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_SET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22240,33 +22241,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_SEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22337,33 +22338,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_NWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22424,33 +22425,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_NWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22511,33 +22512,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_NET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22598,33 +22599,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
       f_BSE  = fbseF[kbs];
       f_BNW  = fbnwF[kbw];
       //////////////////////////////////////////////////////////////////////////////////
-      f27E    =  (D27F.f[dirE   ])[kzero];//ke
-      f27W    =  (D27F.f[dirW   ])[kw   ];
-      f27N    =  (D27F.f[dirN   ])[kzero];//kn
-      f27S    =  (D27F.f[dirS   ])[ks   ];
-      f27T    =  (D27F.f[dirT   ])[kzero];//kt
-      f27B    =  (D27F.f[dirB   ])[kb   ];
-      f27NE   =  (D27F.f[dirNE  ])[kzero];//kne
-      f27SW   =  (D27F.f[dirSW  ])[ksw  ];
-      f27SE   =  (D27F.f[dirSE  ])[ks   ];//kse
-      f27NW   =  (D27F.f[dirNW  ])[kw   ];//knw
-      f27TE   =  (D27F.f[dirTE  ])[kzero];//kte
-      f27BW   =  (D27F.f[dirBW  ])[kbw  ];
-      f27BE   =  (D27F.f[dirBE  ])[kb   ];//kbe
-      f27TW   =  (D27F.f[dirTW  ])[kw   ];//ktw
-      f27TN   =  (D27F.f[dirTN  ])[kzero];//ktn
-      f27BS   =  (D27F.f[dirBS  ])[kbs  ];
-      f27BN   =  (D27F.f[dirBN  ])[kb   ];//kbn
-      f27TS   =  (D27F.f[dirTS  ])[ks   ];//kts
-      f27ZERO =  (D27F.f[dirZERO])[kzero];//kzero
-      f27TNE   = (D27F.f[dirTNE ])[kzero];//ktne
-      f27TSW   = (D27F.f[dirTSW ])[ksw  ];//ktsw
-      f27TSE   = (D27F.f[dirTSE ])[ks   ];//ktse
-      f27TNW   = (D27F.f[dirTNW ])[kw   ];//ktnw
-      f27BNE   = (D27F.f[dirBNE ])[kb   ];//kbne
-      f27BSW   = (D27F.f[dirBSW ])[kbsw ];
-      f27BSE   = (D27F.f[dirBSE ])[kbs  ];//kbse
-      f27BNW   = (D27F.f[dirBNW ])[kbw  ];//kbnw
+      f27E    =  (D27F.f[E   ])[kzero];//ke
+      f27W    =  (D27F.f[W   ])[kw   ];
+      f27N    =  (D27F.f[N   ])[kzero];//kn
+      f27S    =  (D27F.f[S   ])[ks   ];
+      f27T    =  (D27F.f[T   ])[kzero];//kt
+      f27B    =  (D27F.f[B   ])[kb   ];
+      f27NE   =  (D27F.f[NE  ])[kzero];//kne
+      f27SW   =  (D27F.f[SW  ])[ksw  ];
+      f27SE   =  (D27F.f[SE  ])[ks   ];//kse
+      f27NW   =  (D27F.f[NW  ])[kw   ];//knw
+      f27TE   =  (D27F.f[TE  ])[kzero];//kte
+      f27BW   =  (D27F.f[BW  ])[kbw  ];
+      f27BE   =  (D27F.f[BE  ])[kb   ];//kbe
+      f27TW   =  (D27F.f[TW  ])[kw   ];//ktw
+      f27TN   =  (D27F.f[TN  ])[kzero];//ktn
+      f27BS   =  (D27F.f[BS  ])[kbs  ];
+      f27BN   =  (D27F.f[BN  ])[kb   ];//kbn
+      f27TS   =  (D27F.f[TS  ])[ks   ];//kts
+      f27ZERO =  (D27F.f[REST])[kzero];//kzero
+      f27TNE   = (D27F.f[TNE ])[kzero];//ktne
+      f27TSW   = (D27F.f[TSW ])[ksw  ];//ktsw
+      f27TSE   = (D27F.f[TSE ])[ks   ];//ktse
+      f27TNW   = (D27F.f[TNW ])[kw   ];//ktnw
+      f27BNE   = (D27F.f[BNE ])[kb   ];//kbne
+      f27BSW   = (D27F.f[BSW ])[kbsw ];
+      f27BSE   = (D27F.f[BSE ])[kbs  ];//kbse
+      f27BNW   = (D27F.f[BNW ])[kbw  ];//kbnw
 
       Conc_F_NEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + 
                    f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + 
@@ -22737,33 +22738,33 @@ extern "C" __global__ void scaleFCThS27(     real* DC,
 
       cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D27C.f[dirZERO])[kzero] =   c8o27* Conc_C*(c1o1-cu_sq);
-      (D27C.f[dirE   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_C*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
-      (D27C.f[dirW   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_C*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-      (D27C.f[dirN   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_C*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-      (D27C.f[dirS   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_C*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-      (D27C.f[dirT   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_C*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
-      (D27C.f[dirB   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_C*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-      (D27C.f[dirNE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_C*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-      (D27C.f[dirSW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_C*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-      (D27C.f[dirSE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_C*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-      (D27C.f[dirNW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_C*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-      (D27C.f[dirTE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_C*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-      (D27C.f[dirBW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_C*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-      (D27C.f[dirBE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_C*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-      (D27C.f[dirTW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_C*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-      (D27C.f[dirTN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_C*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-      (D27C.f[dirBS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_C*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-      (D27C.f[dirBN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_C*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-      (D27C.f[dirTS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_C*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-      (D27C.f[dirTNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-      (D27C.f[dirBSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-      (D27C.f[dirBNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-      (D27C.f[dirTSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-      (D27C.f[dirTSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-      (D27C.f[dirBNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-      (D27C.f[dirBSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-      (D27C.f[dirTNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+      (D27C.f[REST])[kzero] =   c8o27* Conc_C*(c1o1-cu_sq);
+      (D27C.f[E   ])[kzero] =   c2o27* (c3o1*( Mx        )+Conc_C*(c1o1+c9o2*( vx1        )*( vx1        )-cu_sq));
+      (D27C.f[W   ])[kw   ] =   c2o27* (c3o1*(-Mx        )+Conc_C*(c1o1+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+      (D27C.f[N   ])[kzero] =   c2o27* (c3o1*(     My    )+Conc_C*(c1o1+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+      (D27C.f[S   ])[ks   ] =   c2o27* (c3o1*(    -My    )+Conc_C*(c1o1+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+      (D27C.f[T   ])[kzero] =   c2o27* (c3o1*(         Mz)+Conc_C*(c1o1+c9o2*(         vx3)*(         vx3)-cu_sq));
+      (D27C.f[B   ])[kb   ] =   c2o27* (c3o1*(        -Mz)+Conc_C*(c1o1+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+      (D27C.f[NE  ])[kzero] =   c1o54* (c3o1*( Mx +My    )+Conc_C*(c1o1+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+      (D27C.f[SW  ])[ksw  ] =   c1o54* (c3o1*(-Mx -My    )+Conc_C*(c1o1+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+      (D27C.f[SE  ])[ks   ] =   c1o54* (c3o1*( Mx -My    )+Conc_C*(c1o1+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+      (D27C.f[NW  ])[kw   ] =   c1o54* (c3o1*(-Mx +My    )+Conc_C*(c1o1+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+      (D27C.f[TE  ])[kzero] =   c1o54* (c3o1*( Mx     +Mz)+Conc_C*(c1o1+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+      (D27C.f[BW  ])[kbw  ] =   c1o54* (c3o1*(-Mx     -Mz)+Conc_C*(c1o1+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+      (D27C.f[BE  ])[kb   ] =   c1o54* (c3o1*( Mx     -Mz)+Conc_C*(c1o1+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+      (D27C.f[TW  ])[kw   ] =   c1o54* (c3o1*(-Mx     +Mz)+Conc_C*(c1o1+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+      (D27C.f[TN  ])[kzero] =   c1o54* (c3o1*(     My +Mz)+Conc_C*(c1o1+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+      (D27C.f[BS  ])[kbs  ] =   c1o54* (c3o1*(    -My -Mz)+Conc_C*(c1o1+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+      (D27C.f[BN  ])[kb   ] =   c1o54* (c3o1*(     My -Mz)+Conc_C*(c1o1+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+      (D27C.f[TS  ])[ks   ] =   c1o54* (c3o1*(    -My +Mz)+Conc_C*(c1o1+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+      (D27C.f[TNE ])[kzero] =   c1o216*(c3o1*( Mx +My +Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+      (D27C.f[BSW ])[kbsw ] =   c1o216*(c3o1*(-Mx -My -Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+      (D27C.f[BNE ])[kb   ] =   c1o216*(c3o1*( Mx +My -Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+      (D27C.f[TSW ])[ksw  ] =   c1o216*(c3o1*(-Mx -My +Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+      (D27C.f[TSE ])[ks   ] =   c1o216*(c3o1*( Mx -My +Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+      (D27C.f[BNW ])[kbw  ] =   c1o216*(c3o1*(-Mx +My -Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+      (D27C.f[BSE ])[kbs  ] =   c1o216*(c3o1*( Mx -My -Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+      (D27C.f[TNW ])[kw   ] =   c1o216*(c3o1*(-Mx +My +Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
    }
 }
@@ -22829,96 +22830,96 @@ extern "C" __global__ void scaleFCEff27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
       *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
       *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
@@ -23807,96 +23808,96 @@ extern "C" __global__ void scaleFC27(real* DC,
    real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, 
          *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF;
 
-   feF    = &DF[dirE   *size_MatF];
-   fwF    = &DF[dirW   *size_MatF];
-   fnF    = &DF[dirN   *size_MatF];
-   fsF    = &DF[dirS   *size_MatF];
-   ftF    = &DF[dirT   *size_MatF];
-   fbF    = &DF[dirB   *size_MatF];
-   fneF   = &DF[dirNE  *size_MatF];
-   fswF   = &DF[dirSW  *size_MatF];
-   fseF   = &DF[dirSE  *size_MatF];
-   fnwF   = &DF[dirNW  *size_MatF];
-   fteF   = &DF[dirTE  *size_MatF];
-   fbwF   = &DF[dirBW  *size_MatF];
-   fbeF   = &DF[dirBE  *size_MatF];
-   ftwF   = &DF[dirTW  *size_MatF];
-   ftnF   = &DF[dirTN  *size_MatF];
-   fbsF   = &DF[dirBS  *size_MatF];
-   fbnF   = &DF[dirBN  *size_MatF];
-   ftsF   = &DF[dirTS  *size_MatF];
-   fzeroF = &DF[dirZERO*size_MatF];
-   ftneF  = &DF[dirTNE *size_MatF];
-   ftswF  = &DF[dirTSW *size_MatF];
-   ftseF  = &DF[dirTSE *size_MatF];
-   ftnwF  = &DF[dirTNW *size_MatF];
-   fbneF  = &DF[dirBNE *size_MatF];
-   fbswF  = &DF[dirBSW *size_MatF];
-   fbseF  = &DF[dirBSE *size_MatF];
-   fbnwF  = &DF[dirBNW *size_MatF];
+   feF    = &DF[E   *size_MatF];
+   fwF    = &DF[W   *size_MatF];
+   fnF    = &DF[N   *size_MatF];
+   fsF    = &DF[S   *size_MatF];
+   ftF    = &DF[T   *size_MatF];
+   fbF    = &DF[B   *size_MatF];
+   fneF   = &DF[NE  *size_MatF];
+   fswF   = &DF[SW  *size_MatF];
+   fseF   = &DF[SE  *size_MatF];
+   fnwF   = &DF[NW  *size_MatF];
+   fteF   = &DF[TE  *size_MatF];
+   fbwF   = &DF[BW  *size_MatF];
+   fbeF   = &DF[BE  *size_MatF];
+   ftwF   = &DF[TW  *size_MatF];
+   ftnF   = &DF[TN  *size_MatF];
+   fbsF   = &DF[BS  *size_MatF];
+   fbnF   = &DF[BN  *size_MatF];
+   ftsF   = &DF[TS  *size_MatF];
+   fzeroF = &DF[REST*size_MatF];
+   ftneF  = &DF[TNE *size_MatF];
+   ftswF  = &DF[TSW *size_MatF];
+   ftseF  = &DF[TSE *size_MatF];
+   ftnwF  = &DF[TNW *size_MatF];
+   fbneF  = &DF[BNE *size_MatF];
+   fbswF  = &DF[BSW *size_MatF];
+   fbseF  = &DF[BSE *size_MatF];
+   fbnwF  = &DF[BNW *size_MatF];
 
    real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC,
          *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC;
 
    if (isEvenTimestep==true)
    {
-      feC    = &DC[dirE   *size_MatC];
-      fwC    = &DC[dirW   *size_MatC];
-      fnC    = &DC[dirN   *size_MatC];
-      fsC    = &DC[dirS   *size_MatC];
-      ftC    = &DC[dirT   *size_MatC];
-      fbC    = &DC[dirB   *size_MatC];
-      fneC   = &DC[dirNE  *size_MatC];
-      fswC   = &DC[dirSW  *size_MatC];
-      fseC   = &DC[dirSE  *size_MatC];
-      fnwC   = &DC[dirNW  *size_MatC];
-      fteC   = &DC[dirTE  *size_MatC];
-      fbwC   = &DC[dirBW  *size_MatC];
-      fbeC   = &DC[dirBE  *size_MatC];
-      ftwC   = &DC[dirTW  *size_MatC];
-      ftnC   = &DC[dirTN  *size_MatC];
-      fbsC   = &DC[dirBS  *size_MatC];
-      fbnC   = &DC[dirBN  *size_MatC];
-      ftsC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      ftneC  = &DC[dirTNE *size_MatC];
-      ftswC  = &DC[dirTSW *size_MatC];
-      ftseC  = &DC[dirTSE *size_MatC];
-      ftnwC  = &DC[dirTNW *size_MatC];
-      fbneC  = &DC[dirBNE *size_MatC];
-      fbswC  = &DC[dirBSW *size_MatC];
-      fbseC  = &DC[dirBSE *size_MatC];
-      fbnwC  = &DC[dirBNW *size_MatC];
+      feC    = &DC[E   *size_MatC];
+      fwC    = &DC[W   *size_MatC];
+      fnC    = &DC[N   *size_MatC];
+      fsC    = &DC[S   *size_MatC];
+      ftC    = &DC[T   *size_MatC];
+      fbC    = &DC[B   *size_MatC];
+      fneC   = &DC[NE  *size_MatC];
+      fswC   = &DC[SW  *size_MatC];
+      fseC   = &DC[SE  *size_MatC];
+      fnwC   = &DC[NW  *size_MatC];
+      fteC   = &DC[TE  *size_MatC];
+      fbwC   = &DC[BW  *size_MatC];
+      fbeC   = &DC[BE  *size_MatC];
+      ftwC   = &DC[TW  *size_MatC];
+      ftnC   = &DC[TN  *size_MatC];
+      fbsC   = &DC[BS  *size_MatC];
+      fbnC   = &DC[BN  *size_MatC];
+      ftsC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      ftneC  = &DC[TNE *size_MatC];
+      ftswC  = &DC[TSW *size_MatC];
+      ftseC  = &DC[TSE *size_MatC];
+      ftnwC  = &DC[TNW *size_MatC];
+      fbneC  = &DC[BNE *size_MatC];
+      fbswC  = &DC[BSW *size_MatC];
+      fbseC  = &DC[BSE *size_MatC];
+      fbnwC  = &DC[BNW *size_MatC];
    } 
    else
    {
-      fwC    = &DC[dirE   *size_MatC];
-      feC    = &DC[dirW   *size_MatC];
-      fsC    = &DC[dirN   *size_MatC];
-      fnC    = &DC[dirS   *size_MatC];
-      fbC    = &DC[dirT   *size_MatC];
-      ftC    = &DC[dirB   *size_MatC];
-      fswC   = &DC[dirNE  *size_MatC];
-      fneC   = &DC[dirSW  *size_MatC];
-      fnwC   = &DC[dirSE  *size_MatC];
-      fseC   = &DC[dirNW  *size_MatC];
-      fbwC   = &DC[dirTE  *size_MatC];
-      fteC   = &DC[dirBW  *size_MatC];
-      ftwC   = &DC[dirBE  *size_MatC];
-      fbeC   = &DC[dirTW  *size_MatC];
-      fbsC   = &DC[dirTN  *size_MatC];
-      ftnC   = &DC[dirBS  *size_MatC];
-      ftsC   = &DC[dirBN  *size_MatC];
-      fbnC   = &DC[dirTS  *size_MatC];
-      fzeroC = &DC[dirZERO*size_MatC];
-      fbswC  = &DC[dirTNE *size_MatC];
-      fbneC  = &DC[dirTSW *size_MatC];
-      fbnwC  = &DC[dirTSE *size_MatC];
-      fbseC  = &DC[dirTNW *size_MatC];
-      ftswC  = &DC[dirBNE *size_MatC];
-      ftneC  = &DC[dirBSW *size_MatC];
-      ftnwC  = &DC[dirBSE *size_MatC];
-      ftseC  = &DC[dirBNW *size_MatC];
+      fwC    = &DC[E   *size_MatC];
+      feC    = &DC[W   *size_MatC];
+      fsC    = &DC[N   *size_MatC];
+      fnC    = &DC[S   *size_MatC];
+      fbC    = &DC[T   *size_MatC];
+      ftC    = &DC[B   *size_MatC];
+      fswC   = &DC[NE  *size_MatC];
+      fneC   = &DC[SW  *size_MatC];
+      fnwC   = &DC[SE  *size_MatC];
+      fseC   = &DC[NW  *size_MatC];
+      fbwC   = &DC[TE  *size_MatC];
+      fteC   = &DC[BW  *size_MatC];
+      ftwC   = &DC[BE  *size_MatC];
+      fbeC   = &DC[TW  *size_MatC];
+      fbsC   = &DC[TN  *size_MatC];
+      ftnC   = &DC[BS  *size_MatC];
+      ftsC   = &DC[BN  *size_MatC];
+      fbnC   = &DC[TS  *size_MatC];
+      fzeroC = &DC[REST*size_MatC];
+      fbswC  = &DC[TNE *size_MatC];
+      fbneC  = &DC[TSW *size_MatC];
+      fbnwC  = &DC[TSE *size_MatC];
+      fbseC  = &DC[TNW *size_MatC];
+      ftswC  = &DC[BNE *size_MatC];
+      ftneC  = &DC[BSW *size_MatC];
+      ftnwC  = &DC[BSE *size_MatC];
+      ftseC  = &DC[BNW *size_MatC];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  ix = threadIdx.x;  // Globaler x-Index 
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ScaleFC_F3_27.cu b/src/gpu/VirtualFluids_GPU/GPU/ScaleFC_F3_27.cu
index 12ed63399f52a6bad0db3fd9b6d338e2d27744e7..4e55569b1b296476af782a1176e8e4420d3e2022 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/ScaleFC_F3_27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/ScaleFC_F3_27.cu
@@ -7,10 +7,11 @@
 //////////////////////////////////////////////////////////////////////////
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
@@ -43,33 +44,33 @@ extern "C" __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
 	   *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource;
 
 
-   fP00source = &DF[dirE   *size_MatF];
-   fM00source = &DF[dirW   *size_MatF];
-   f0P0source = &DF[dirN   *size_MatF];
-   f0M0source = &DF[dirS   *size_MatF];
-   f00Psource = &DF[dirT   *size_MatF];
-   f00Msource = &DF[dirB   *size_MatF];
-   fPP0source = &DF[dirNE  *size_MatF];
-   fMM0source = &DF[dirSW  *size_MatF];
-   fPM0source = &DF[dirSE  *size_MatF];
-   fMP0source = &DF[dirNW  *size_MatF];
-   fP0Psource = &DF[dirTE  *size_MatF];
-   fM0Msource = &DF[dirBW  *size_MatF];
-   fP0Msource = &DF[dirBE  *size_MatF];
-   fM0Psource = &DF[dirTW  *size_MatF];
-   f0PPsource = &DF[dirTN  *size_MatF];
-   f0MMsource = &DF[dirBS  *size_MatF];
-   f0PMsource = &DF[dirBN  *size_MatF];
-   f0MPsource = &DF[dirTS  *size_MatF];
-   f000source = &DF[dirZERO*size_MatF];
-   fMMMsource = &DF[dirBSW *size_MatF];
-   fMMPsource = &DF[dirTSW *size_MatF];
-   fMPPsource = &DF[dirTNW *size_MatF];
-   fMPMsource = &DF[dirBNW *size_MatF];
-   fPPMsource = &DF[dirBNE *size_MatF];
-   fPPPsource = &DF[dirTNE *size_MatF];
-   fPMPsource = &DF[dirTSE *size_MatF];
-   fPMMsource = &DF[dirBSE *size_MatF];
+   fP00source = &DF[E   *size_MatF];
+   fM00source = &DF[W   *size_MatF];
+   f0P0source = &DF[N   *size_MatF];
+   f0M0source = &DF[S   *size_MatF];
+   f00Psource = &DF[T   *size_MatF];
+   f00Msource = &DF[B   *size_MatF];
+   fPP0source = &DF[NE  *size_MatF];
+   fMM0source = &DF[SW  *size_MatF];
+   fPM0source = &DF[SE  *size_MatF];
+   fMP0source = &DF[NW  *size_MatF];
+   fP0Psource = &DF[TE  *size_MatF];
+   fM0Msource = &DF[BW  *size_MatF];
+   fP0Msource = &DF[BE  *size_MatF];
+   fM0Psource = &DF[TW  *size_MatF];
+   f0PPsource = &DF[TN  *size_MatF];
+   f0MMsource = &DF[BS  *size_MatF];
+   f0PMsource = &DF[BN  *size_MatF];
+   f0MPsource = &DF[TS  *size_MatF];
+   f000source = &DF[REST*size_MatF];
+   fMMMsource = &DF[BSW *size_MatF];
+   fMMPsource = &DF[TSW *size_MatF];
+   fMPPsource = &DF[TNW *size_MatF];
+   fMPMsource = &DF[BNW *size_MatF];
+   fPPMsource = &DF[BNE *size_MatF];
+   fPPPsource = &DF[TNE *size_MatF];
+   fPMPsource = &DF[TSE *size_MatF];
+   fPMMsource = &DF[BSE *size_MatF];
 
    real
 	   *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest,
@@ -78,83 +79,83 @@ extern "C" __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
 
    if (isEvenTimestep==true)
    {
-	   fP00dest = &DC[dirE   *size_MatC];
-	   fM00dest = &DC[dirW   *size_MatC];
-	   f0P0dest = &DC[dirN   *size_MatC];
-	   f0M0dest = &DC[dirS   *size_MatC];
-	   f00Pdest = &DC[dirT   *size_MatC];
-	   f00Mdest = &DC[dirB   *size_MatC];
-	   fPP0dest = &DC[dirNE  *size_MatC];
-	   fMM0dest = &DC[dirSW  *size_MatC];
-	   fPM0dest = &DC[dirSE  *size_MatC];
-	   fMP0dest = &DC[dirNW  *size_MatC];
-	   fP0Pdest = &DC[dirTE  *size_MatC];
-	   fM0Mdest = &DC[dirBW  *size_MatC];
-	   fP0Mdest = &DC[dirBE  *size_MatC];
-	   fM0Pdest = &DC[dirTW  *size_MatC];
-	   f0PPdest = &DC[dirTN  *size_MatC];
-	   f0MMdest = &DC[dirBS  *size_MatC];
-	   f0PMdest = &DC[dirBN  *size_MatC];
-	   f0MPdest = &DC[dirTS  *size_MatC];
-	   f000dest = &DC[dirZERO*size_MatC];
-	   fMMMdest = &DC[dirBSW *size_MatC];
-	   fMMPdest = &DC[dirTSW *size_MatC];
-	   fMPPdest = &DC[dirTNW *size_MatC];
-	   fMPMdest = &DC[dirBNW *size_MatC];
-	   fPPMdest = &DC[dirBNE *size_MatC];
-	   fPPPdest = &DC[dirTNE *size_MatC];
-	   fPMPdest = &DC[dirTSE *size_MatC];
-	   fPMMdest = &DC[dirBSE *size_MatC];
+	   fP00dest = &DC[E   *size_MatC];
+	   fM00dest = &DC[W   *size_MatC];
+	   f0P0dest = &DC[N   *size_MatC];
+	   f0M0dest = &DC[S   *size_MatC];
+	   f00Pdest = &DC[T   *size_MatC];
+	   f00Mdest = &DC[B   *size_MatC];
+	   fPP0dest = &DC[NE  *size_MatC];
+	   fMM0dest = &DC[SW  *size_MatC];
+	   fPM0dest = &DC[SE  *size_MatC];
+	   fMP0dest = &DC[NW  *size_MatC];
+	   fP0Pdest = &DC[TE  *size_MatC];
+	   fM0Mdest = &DC[BW  *size_MatC];
+	   fP0Mdest = &DC[BE  *size_MatC];
+	   fM0Pdest = &DC[TW  *size_MatC];
+	   f0PPdest = &DC[TN  *size_MatC];
+	   f0MMdest = &DC[BS  *size_MatC];
+	   f0PMdest = &DC[BN  *size_MatC];
+	   f0MPdest = &DC[TS  *size_MatC];
+	   f000dest = &DC[REST*size_MatC];
+	   fMMMdest = &DC[BSW *size_MatC];
+	   fMMPdest = &DC[TSW *size_MatC];
+	   fMPPdest = &DC[TNW *size_MatC];
+	   fMPMdest = &DC[BNW *size_MatC];
+	   fPPMdest = &DC[BNE *size_MatC];
+	   fPPPdest = &DC[TNE *size_MatC];
+	   fPMPdest = &DC[TSE *size_MatC];
+	   fPMMdest = &DC[BSE *size_MatC];
    } 
    else
    {
-	   fP00dest = &DC[dirW   *size_MatC];
-	   fM00dest = &DC[dirE   *size_MatC];
-	   f0P0dest = &DC[dirS   *size_MatC];
-	   f0M0dest = &DC[dirN   *size_MatC];
-	   f00Pdest = &DC[dirB   *size_MatC];
-	   f00Mdest = &DC[dirT   *size_MatC];
-	   fPP0dest = &DC[dirSW  *size_MatC];
-	   fMM0dest = &DC[dirNE  *size_MatC];
-	   fPM0dest = &DC[dirNW  *size_MatC];
-	   fMP0dest = &DC[dirSE  *size_MatC];
-	   fP0Pdest = &DC[dirBW  *size_MatC];
-	   fM0Mdest = &DC[dirTE  *size_MatC];
-	   fP0Mdest = &DC[dirTW  *size_MatC];
-	   fM0Pdest = &DC[dirBE  *size_MatC];
-	   f0PPdest = &DC[dirBS  *size_MatC];
-	   f0MMdest = &DC[dirTN  *size_MatC];
-	   f0PMdest = &DC[dirTS  *size_MatC];
-	   f0MPdest = &DC[dirBN  *size_MatC];
-	   f000dest = &DC[dirZERO*size_MatC];
-	   fMMMdest = &DC[dirTNE *size_MatC];
-	   fMMPdest = &DC[dirBNE *size_MatC];
-	   fMPPdest = &DC[dirBSE *size_MatC];
-	   fMPMdest = &DC[dirTSE *size_MatC];
-	   fPPMdest = &DC[dirTSW *size_MatC];
-	   fPPPdest = &DC[dirBSW *size_MatC];
-	   fPMPdest = &DC[dirBNW *size_MatC];
-	   fPMMdest = &DC[dirTNW *size_MatC];
+	   fP00dest = &DC[W   *size_MatC];
+	   fM00dest = &DC[E   *size_MatC];
+	   f0P0dest = &DC[S   *size_MatC];
+	   f0M0dest = &DC[N   *size_MatC];
+	   f00Pdest = &DC[B   *size_MatC];
+	   f00Mdest = &DC[T   *size_MatC];
+	   fPP0dest = &DC[SW  *size_MatC];
+	   fMM0dest = &DC[NE  *size_MatC];
+	   fPM0dest = &DC[NW  *size_MatC];
+	   fMP0dest = &DC[SE  *size_MatC];
+	   fP0Pdest = &DC[BW  *size_MatC];
+	   fM0Mdest = &DC[TE  *size_MatC];
+	   fP0Mdest = &DC[TW  *size_MatC];
+	   fM0Pdest = &DC[BE  *size_MatC];
+	   f0PPdest = &DC[BS  *size_MatC];
+	   f0MMdest = &DC[TN  *size_MatC];
+	   f0PMdest = &DC[TS  *size_MatC];
+	   f0MPdest = &DC[BN  *size_MatC];
+	   f000dest = &DC[REST*size_MatC];
+	   fMMMdest = &DC[TNE *size_MatC];
+	   fMMPdest = &DC[BNE *size_MatC];
+	   fMPPdest = &DC[BSE *size_MatC];
+	   fMPMdest = &DC[TSE *size_MatC];
+	   fPPMdest = &DC[TSW *size_MatC];
+	   fPPPdest = &DC[BSW *size_MatC];
+	   fPMPdest = &DC[BNW *size_MatC];
+	   fPMMdest = &DC[TNW *size_MatC];
    }
 
    Distributions6 G;
    if (isEvenTimestep == true)
    {
-	   G.g[dirE] = &G6[dirE   *size_MatC];
-	   G.g[dirW] = &G6[dirW   *size_MatC];
-	   G.g[dirN] = &G6[dirN   *size_MatC];
-	   G.g[dirS] = &G6[dirS   *size_MatC];
-	   G.g[dirT] = &G6[dirT   *size_MatC];
-	   G.g[dirB] = &G6[dirB   *size_MatC];
+	   G.g[E] = &G6[E   *size_MatC];
+	   G.g[W] = &G6[W   *size_MatC];
+	   G.g[N] = &G6[N   *size_MatC];
+	   G.g[S] = &G6[S   *size_MatC];
+	   G.g[T] = &G6[T   *size_MatC];
+	   G.g[B] = &G6[B   *size_MatC];
    }
    else
    {
-	   G.g[dirW] = &G6[dirE   *size_MatC];
-	   G.g[dirE] = &G6[dirW   *size_MatC];
-	   G.g[dirS] = &G6[dirN   *size_MatC];
-	   G.g[dirN] = &G6[dirS   *size_MatC];
-	   G.g[dirB] = &G6[dirT   *size_MatC];
-	   G.g[dirT] = &G6[dirB   *size_MatC];
+	   G.g[W] = &G6[E   *size_MatC];
+	   G.g[E] = &G6[W   *size_MatC];
+	   G.g[S] = &G6[N   *size_MatC];
+	   G.g[N] = &G6[S   *size_MatC];
+	   G.g[B] = &G6[T   *size_MatC];
+	   G.g[T] = &G6[B   *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -1167,12 +1168,12 @@ extern "C" __global__ void scaleFC_comp_D3Q27F3_2018(real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;                                                                 
 	  fM00dest[kM00] = mfabb;                                                               
@@ -1290,33 +1291,33 @@ extern "C" __global__ void scaleFC_comp_D3Q27F3( real* DC,
 	   *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource;
 
 
-   fP00source = &DF[dirE   *size_MatF];
-   fM00source = &DF[dirW   *size_MatF];
-   f0P0source = &DF[dirN   *size_MatF];
-   f0M0source = &DF[dirS   *size_MatF];
-   f00Psource = &DF[dirT   *size_MatF];
-   f00Msource = &DF[dirB   *size_MatF];
-   fPP0source = &DF[dirNE  *size_MatF];
-   fMM0source = &DF[dirSW  *size_MatF];
-   fPM0source = &DF[dirSE  *size_MatF];
-   fMP0source = &DF[dirNW  *size_MatF];
-   fP0Psource = &DF[dirTE  *size_MatF];
-   fM0Msource = &DF[dirBW  *size_MatF];
-   fP0Msource = &DF[dirBE  *size_MatF];
-   fM0Psource = &DF[dirTW  *size_MatF];
-   f0PPsource = &DF[dirTN  *size_MatF];
-   f0MMsource = &DF[dirBS  *size_MatF];
-   f0PMsource = &DF[dirBN  *size_MatF];
-   f0MPsource = &DF[dirTS  *size_MatF];
-   f000source = &DF[dirZERO*size_MatF];
-   fMMMsource = &DF[dirBSW *size_MatF];
-   fMMPsource = &DF[dirTSW *size_MatF];
-   fMPPsource = &DF[dirTNW *size_MatF];
-   fMPMsource = &DF[dirBNW *size_MatF];
-   fPPMsource = &DF[dirBNE *size_MatF];
-   fPPPsource = &DF[dirTNE *size_MatF];
-   fPMPsource = &DF[dirTSE *size_MatF];
-   fPMMsource = &DF[dirBSE *size_MatF];
+   fP00source = &DF[E   *size_MatF];
+   fM00source = &DF[W   *size_MatF];
+   f0P0source = &DF[N   *size_MatF];
+   f0M0source = &DF[S   *size_MatF];
+   f00Psource = &DF[T   *size_MatF];
+   f00Msource = &DF[B   *size_MatF];
+   fPP0source = &DF[NE  *size_MatF];
+   fMM0source = &DF[SW  *size_MatF];
+   fPM0source = &DF[SE  *size_MatF];
+   fMP0source = &DF[NW  *size_MatF];
+   fP0Psource = &DF[TE  *size_MatF];
+   fM0Msource = &DF[BW  *size_MatF];
+   fP0Msource = &DF[BE  *size_MatF];
+   fM0Psource = &DF[TW  *size_MatF];
+   f0PPsource = &DF[TN  *size_MatF];
+   f0MMsource = &DF[BS  *size_MatF];
+   f0PMsource = &DF[BN  *size_MatF];
+   f0MPsource = &DF[TS  *size_MatF];
+   f000source = &DF[REST*size_MatF];
+   fMMMsource = &DF[BSW *size_MatF];
+   fMMPsource = &DF[TSW *size_MatF];
+   fMPPsource = &DF[TNW *size_MatF];
+   fMPMsource = &DF[BNW *size_MatF];
+   fPPMsource = &DF[BNE *size_MatF];
+   fPPPsource = &DF[TNE *size_MatF];
+   fPMPsource = &DF[TSE *size_MatF];
+   fPMMsource = &DF[BSE *size_MatF];
 
    real
 	   *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest,
@@ -1325,83 +1326,83 @@ extern "C" __global__ void scaleFC_comp_D3Q27F3( real* DC,
 
    if (isEvenTimestep==true)
    {
-	   fP00dest = &DC[dirE   *size_MatC];
-	   fM00dest = &DC[dirW   *size_MatC];
-	   f0P0dest = &DC[dirN   *size_MatC];
-	   f0M0dest = &DC[dirS   *size_MatC];
-	   f00Pdest = &DC[dirT   *size_MatC];
-	   f00Mdest = &DC[dirB   *size_MatC];
-	   fPP0dest = &DC[dirNE  *size_MatC];
-	   fMM0dest = &DC[dirSW  *size_MatC];
-	   fPM0dest = &DC[dirSE  *size_MatC];
-	   fMP0dest = &DC[dirNW  *size_MatC];
-	   fP0Pdest = &DC[dirTE  *size_MatC];
-	   fM0Mdest = &DC[dirBW  *size_MatC];
-	   fP0Mdest = &DC[dirBE  *size_MatC];
-	   fM0Pdest = &DC[dirTW  *size_MatC];
-	   f0PPdest = &DC[dirTN  *size_MatC];
-	   f0MMdest = &DC[dirBS  *size_MatC];
-	   f0PMdest = &DC[dirBN  *size_MatC];
-	   f0MPdest = &DC[dirTS  *size_MatC];
-	   f000dest = &DC[dirZERO*size_MatC];
-	   fMMMdest = &DC[dirBSW *size_MatC];
-	   fMMPdest = &DC[dirTSW *size_MatC];
-	   fMPPdest = &DC[dirTNW *size_MatC];
-	   fMPMdest = &DC[dirBNW *size_MatC];
-	   fPPMdest = &DC[dirBNE *size_MatC];
-	   fPPPdest = &DC[dirTNE *size_MatC];
-	   fPMPdest = &DC[dirTSE *size_MatC];
-	   fPMMdest = &DC[dirBSE *size_MatC];
+	   fP00dest = &DC[E   *size_MatC];
+	   fM00dest = &DC[W   *size_MatC];
+	   f0P0dest = &DC[N   *size_MatC];
+	   f0M0dest = &DC[S   *size_MatC];
+	   f00Pdest = &DC[T   *size_MatC];
+	   f00Mdest = &DC[B   *size_MatC];
+	   fPP0dest = &DC[NE  *size_MatC];
+	   fMM0dest = &DC[SW  *size_MatC];
+	   fPM0dest = &DC[SE  *size_MatC];
+	   fMP0dest = &DC[NW  *size_MatC];
+	   fP0Pdest = &DC[TE  *size_MatC];
+	   fM0Mdest = &DC[BW  *size_MatC];
+	   fP0Mdest = &DC[BE  *size_MatC];
+	   fM0Pdest = &DC[TW  *size_MatC];
+	   f0PPdest = &DC[TN  *size_MatC];
+	   f0MMdest = &DC[BS  *size_MatC];
+	   f0PMdest = &DC[BN  *size_MatC];
+	   f0MPdest = &DC[TS  *size_MatC];
+	   f000dest = &DC[REST*size_MatC];
+	   fMMMdest = &DC[BSW *size_MatC];
+	   fMMPdest = &DC[TSW *size_MatC];
+	   fMPPdest = &DC[TNW *size_MatC];
+	   fMPMdest = &DC[BNW *size_MatC];
+	   fPPMdest = &DC[BNE *size_MatC];
+	   fPPPdest = &DC[TNE *size_MatC];
+	   fPMPdest = &DC[TSE *size_MatC];
+	   fPMMdest = &DC[BSE *size_MatC];
    } 
    else
    {
-	   fP00dest = &DC[dirW   *size_MatC];
-	   fM00dest = &DC[dirE   *size_MatC];
-	   f0P0dest = &DC[dirS   *size_MatC];
-	   f0M0dest = &DC[dirN   *size_MatC];
-	   f00Pdest = &DC[dirB   *size_MatC];
-	   f00Mdest = &DC[dirT   *size_MatC];
-	   fPP0dest = &DC[dirSW  *size_MatC];
-	   fMM0dest = &DC[dirNE  *size_MatC];
-	   fPM0dest = &DC[dirNW  *size_MatC];
-	   fMP0dest = &DC[dirSE  *size_MatC];
-	   fP0Pdest = &DC[dirBW  *size_MatC];
-	   fM0Mdest = &DC[dirTE  *size_MatC];
-	   fP0Mdest = &DC[dirTW  *size_MatC];
-	   fM0Pdest = &DC[dirBE  *size_MatC];
-	   f0PPdest = &DC[dirBS  *size_MatC];
-	   f0MMdest = &DC[dirTN  *size_MatC];
-	   f0PMdest = &DC[dirTS  *size_MatC];
-	   f0MPdest = &DC[dirBN  *size_MatC];
-	   f000dest = &DC[dirZERO*size_MatC];
-	   fMMMdest = &DC[dirTNE *size_MatC];
-	   fMMPdest = &DC[dirBNE *size_MatC];
-	   fMPPdest = &DC[dirBSE *size_MatC];
-	   fMPMdest = &DC[dirTSE *size_MatC];
-	   fPPMdest = &DC[dirTSW *size_MatC];
-	   fPPPdest = &DC[dirBSW *size_MatC];
-	   fPMPdest = &DC[dirBNW *size_MatC];
-	   fPMMdest = &DC[dirTNW *size_MatC];
+	   fP00dest = &DC[W   *size_MatC];
+	   fM00dest = &DC[E   *size_MatC];
+	   f0P0dest = &DC[S   *size_MatC];
+	   f0M0dest = &DC[N   *size_MatC];
+	   f00Pdest = &DC[B   *size_MatC];
+	   f00Mdest = &DC[T   *size_MatC];
+	   fPP0dest = &DC[SW  *size_MatC];
+	   fMM0dest = &DC[NE  *size_MatC];
+	   fPM0dest = &DC[NW  *size_MatC];
+	   fMP0dest = &DC[SE  *size_MatC];
+	   fP0Pdest = &DC[BW  *size_MatC];
+	   fM0Mdest = &DC[TE  *size_MatC];
+	   fP0Mdest = &DC[TW  *size_MatC];
+	   fM0Pdest = &DC[BE  *size_MatC];
+	   f0PPdest = &DC[BS  *size_MatC];
+	   f0MMdest = &DC[TN  *size_MatC];
+	   f0PMdest = &DC[TS  *size_MatC];
+	   f0MPdest = &DC[BN  *size_MatC];
+	   f000dest = &DC[REST*size_MatC];
+	   fMMMdest = &DC[TNE *size_MatC];
+	   fMMPdest = &DC[BNE *size_MatC];
+	   fMPPdest = &DC[BSE *size_MatC];
+	   fMPMdest = &DC[TSE *size_MatC];
+	   fPPMdest = &DC[TSW *size_MatC];
+	   fPPPdest = &DC[BSW *size_MatC];
+	   fPMPdest = &DC[BNW *size_MatC];
+	   fPMMdest = &DC[TNW *size_MatC];
    }
 
    Distributions6 G;
    if (isEvenTimestep == true)
    {
-	   G.g[dirE] = &G6[dirE   *size_MatC];
-	   G.g[dirW] = &G6[dirW   *size_MatC];
-	   G.g[dirN] = &G6[dirN   *size_MatC];
-	   G.g[dirS] = &G6[dirS   *size_MatC];
-	   G.g[dirT] = &G6[dirT   *size_MatC];
-	   G.g[dirB] = &G6[dirB   *size_MatC];
+	   G.g[E] = &G6[E   *size_MatC];
+	   G.g[W] = &G6[W   *size_MatC];
+	   G.g[N] = &G6[N   *size_MatC];
+	   G.g[S] = &G6[S   *size_MatC];
+	   G.g[T] = &G6[T   *size_MatC];
+	   G.g[B] = &G6[B   *size_MatC];
    }
    else
    {
-	   G.g[dirW] = &G6[dirE   *size_MatC];
-	   G.g[dirE] = &G6[dirW   *size_MatC];
-	   G.g[dirS] = &G6[dirN   *size_MatC];
-	   G.g[dirN] = &G6[dirS   *size_MatC];
-	   G.g[dirB] = &G6[dirT   *size_MatC];
-	   G.g[dirT] = &G6[dirB   *size_MatC];
+	   G.g[W] = &G6[E   *size_MatC];
+	   G.g[E] = &G6[W   *size_MatC];
+	   G.g[S] = &G6[N   *size_MatC];
+	   G.g[N] = &G6[S   *size_MatC];
+	   G.g[B] = &G6[T   *size_MatC];
+	   G.g[T] = &G6[B   *size_MatC];
    }
 
    ////////////////////////////////////////////////////////////////////////////////
@@ -2408,12 +2409,12 @@ extern "C" __global__ void scaleFC_comp_D3Q27F3( real* DC,
 	  ////////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////////
-	  (G.g[dirE])[k000] = mgcbb;
-	  (G.g[dirW])[kM00] = mgabb;
-	  (G.g[dirN])[k000] = mgbcb;
-	  (G.g[dirS])[k0M0] = mgbab;
-	  (G.g[dirT])[k000] = mgbbc;
-	  (G.g[dirB])[k00M] = mgbba;
+	  (G.g[E])[k000] = mgcbb;
+	  (G.g[W])[kM00] = mgabb;
+	  (G.g[N])[k000] = mgbcb;
+	  (G.g[S])[k0M0] = mgbab;
+	  (G.g[T])[k000] = mgbbc;
+	  (G.g[B])[k00M] = mgbba;
 	  ////////////////////////////////////////////////////////////////////////////////////
 	  fP00dest[k000] = mfcbb;                                                                 
 	  fM00dest[kM00] = mfabb;                                                               
diff --git a/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu
index 899a31a6e266b3889a2b37b9fa9087e28e1ff2c0..d90cfab98cea27f6d3e5d18f772377326cbc5f6d 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu
@@ -1,9 +1,10 @@
 /* Device code */
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 // TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -70,94 +71,94 @@ extern "C" __global__ void PressSchlaff27(real* rhoBC,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       }
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_E    = (D.f[dirE   ])[ke   ];
-      f1_W    = (D.f[dirW   ])[kw   ];
-      f1_N    = (D.f[dirN   ])[kn   ];
-      f1_S    = (D.f[dirS   ])[ks   ];
-      f1_T    = (D.f[dirT   ])[kt   ];
-      f1_B    = (D.f[dirB   ])[kb   ];
-      f1_NE   = (D.f[dirNE  ])[kne  ];
-      f1_SW   = (D.f[dirSW  ])[ksw  ];
-      f1_SE   = (D.f[dirSE  ])[kse  ];
-      f1_NW   = (D.f[dirNW  ])[knw  ];
-      f1_TE   = (D.f[dirTE  ])[kte  ];
-      f1_BW   = (D.f[dirBW  ])[kbw  ];
-      f1_BE   = (D.f[dirBE  ])[kbe  ];
-      f1_TW   = (D.f[dirTW  ])[ktw  ];
-      f1_TN   = (D.f[dirTN  ])[ktn  ];
-      f1_BS   = (D.f[dirBS  ])[kbs  ];
-      f1_BN   = (D.f[dirBN  ])[kbn  ];
-      f1_TS   = (D.f[dirTS  ])[kts  ];
-      f1_ZERO = (D.f[dirZERO])[kzero];
-      f1_TNE  = (D.f[dirTNE ])[ktne ];
-      f1_TSW  = (D.f[dirTSW ])[ktsw ];
-      f1_TSE  = (D.f[dirTSE ])[ktse ];
-      f1_TNW  = (D.f[dirTNW ])[ktnw ];
-      f1_BNE  = (D.f[dirBNE ])[kbne ];
-      f1_BSW  = (D.f[dirBSW ])[kbsw ];
-      f1_BSE  = (D.f[dirBSE ])[kbse ];
-      f1_BNW  = (D.f[dirBNW ])[kbnw ];
+      f1_E    = (D.f[E   ])[ke   ];
+      f1_W    = (D.f[W   ])[kw   ];
+      f1_N    = (D.f[N   ])[kn   ];
+      f1_S    = (D.f[S   ])[ks   ];
+      f1_T    = (D.f[T   ])[kt   ];
+      f1_B    = (D.f[B   ])[kb   ];
+      f1_NE   = (D.f[NE  ])[kne  ];
+      f1_SW   = (D.f[SW  ])[ksw  ];
+      f1_SE   = (D.f[SE  ])[kse  ];
+      f1_NW   = (D.f[NW  ])[knw  ];
+      f1_TE   = (D.f[TE  ])[kte  ];
+      f1_BW   = (D.f[BW  ])[kbw  ];
+      f1_BE   = (D.f[BE  ])[kbe  ];
+      f1_TW   = (D.f[TW  ])[ktw  ];
+      f1_TN   = (D.f[TN  ])[ktn  ];
+      f1_BS   = (D.f[BS  ])[kbs  ];
+      f1_BN   = (D.f[BN  ])[kbn  ];
+      f1_TS   = (D.f[TS  ])[kts  ];
+      f1_ZERO = (D.f[REST])[kzero];
+      f1_TNE  = (D.f[TNE ])[ktne ];
+      f1_TSW  = (D.f[TSW ])[ktsw ];
+      f1_TSE  = (D.f[TSE ])[ktse ];
+      f1_TNW  = (D.f[TNW ])[ktnw ];
+      f1_BNE  = (D.f[BNE ])[kbne ];
+      f1_BSW  = (D.f[BSW ])[kbsw ];
+      f1_BSE  = (D.f[BSE ])[kbse ];
+      f1_BNW  = (D.f[BNW ])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
       real cs       = c1o1/sqrt(c3o1);
       real csp1     = cs + c1o1;
@@ -221,15 +222,15 @@ extern "C" __global__ void PressSchlaff27(real* rhoBC,
 
       deltaVz0[k] = tempDeltaV;
 
-      (D.f[dirB   ])[kb   ] = f1_B   ;
-      (D.f[dirBW  ])[kbw  ] = f1_BW  ;
-      (D.f[dirBE  ])[kbe  ] = f1_BE  ;
-      (D.f[dirBS  ])[kbs  ] = f1_BS  ;
-      (D.f[dirBN  ])[kbn  ] = f1_BN  ;
-      (D.f[dirBNE ])[kbne ] = f1_BNE ;
-      (D.f[dirBSW ])[kbsw ] = f1_BSW ;
-      (D.f[dirBSE ])[kbse ] = f1_BSE ;
-      (D.f[dirBNW ])[kbnw ] = f1_BNW ;
+      (D.f[B   ])[kb   ] = f1_B   ;
+      (D.f[BW  ])[kbw  ] = f1_BW  ;
+      (D.f[BE  ])[kbe  ] = f1_BE  ;
+      (D.f[BS  ])[kbs  ] = f1_BS  ;
+      (D.f[BN  ])[kbn  ] = f1_BN  ;
+      (D.f[BNE ])[kbne ] = f1_BNE ;
+      (D.f[BSW ])[kbsw ] = f1_BSW ;
+      (D.f[BSE ])[kbse ] = f1_BSE ;
+      (D.f[BNW ])[kbnw ] = f1_BNW ;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -334,122 +335,122 @@ extern "C" __global__ void VelSchlaff27(  int t,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       }
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
                      f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_E    = (D.f[dirE   ])[ke   ];
-      f1_W    = (D.f[dirW   ])[kw   ];
-      f1_N    = (D.f[dirN   ])[kn   ];
-      f1_S    = (D.f[dirS   ])[ks   ];
-      f1_T    = (D.f[dirT   ])[kt   ];
-      f1_B    = (D.f[dirB   ])[kb   ];
-      f1_NE   = (D.f[dirNE  ])[kne  ];
-      f1_SW   = (D.f[dirSW  ])[ksw  ];
-      f1_SE   = (D.f[dirSE  ])[kse  ];
-      f1_NW   = (D.f[dirNW  ])[knw  ];
-      f1_TE   = (D.f[dirTE  ])[kte  ];
-      f1_BW   = (D.f[dirBW  ])[kbw  ];
-      f1_BE   = (D.f[dirBE  ])[kbe  ];
-      f1_TW   = (D.f[dirTW  ])[ktw  ];
-      f1_TN   = (D.f[dirTN  ])[ktn  ];
-      f1_BS   = (D.f[dirBS  ])[kbs  ];
-      f1_BN   = (D.f[dirBN  ])[kbn  ];
-      f1_TS   = (D.f[dirTS  ])[kts  ];
-      f1_ZERO = (D.f[dirZERO])[kzero];
-      f1_TNE  = (D.f[dirTNE ])[ktne ];
-      f1_TSW  = (D.f[dirTSW ])[ktsw ];
-      f1_TSE  = (D.f[dirTSE ])[ktse ];
-      f1_TNW  = (D.f[dirTNW ])[ktnw ];
-      f1_BNE  = (D.f[dirBNE ])[kbne ];
-      f1_BSW  = (D.f[dirBSW ])[kbsw ];
-      f1_BSE  = (D.f[dirBSE ])[kbse ];
-      f1_BNW  = (D.f[dirBNW ])[kbnw ];
-      //f1_W    = (D.f[dirE   ])[ke   ];
-      //f1_E    = (D.f[dirW   ])[kw   ];
-      //f1_S    = (D.f[dirN   ])[kn   ];
-      //f1_N    = (D.f[dirS   ])[ks   ];
-      //f1_B    = (D.f[dirT   ])[kt   ];
-      //f1_T    = (D.f[dirB   ])[kb   ];
-      //f1_SW   = (D.f[dirNE  ])[kne  ];
-      //f1_NE   = (D.f[dirSW  ])[ksw  ];
-      //f1_NW   = (D.f[dirSE  ])[kse  ];
-      //f1_SE   = (D.f[dirNW  ])[knw  ];
-      //f1_BW   = (D.f[dirTE  ])[kte  ];
-      //f1_TE   = (D.f[dirBW  ])[kbw  ];
-      //f1_TW   = (D.f[dirBE  ])[kbe  ];
-      //f1_BE   = (D.f[dirTW  ])[ktw  ];
-      //f1_BS   = (D.f[dirTN  ])[ktn  ];
-      //f1_TN   = (D.f[dirBS  ])[kbs  ];
-      //f1_TS   = (D.f[dirBN  ])[kbn  ];
-      //f1_BN   = (D.f[dirTS  ])[kts  ];
-      //f1_ZERO = (D.f[dirZERO])[kzero];
-      //f1_BSW  = (D.f[dirTNE ])[ktne ];
-      //f1_BNE  = (D.f[dirTSW ])[ktsw ];
-      //f1_BNW  = (D.f[dirTSE ])[ktse ];
-      //f1_BSE  = (D.f[dirTNW ])[ktnw ];
-      //f1_TSW  = (D.f[dirBNE ])[kbne ];
-      //f1_TNE  = (D.f[dirBSW ])[kbsw ];
-      //f1_TNW  = (D.f[dirBSE ])[kbse ];
-      //f1_TSE  = (D.f[dirBNW ])[kbnw ];
+      f1_E    = (D.f[E   ])[ke   ];
+      f1_W    = (D.f[W   ])[kw   ];
+      f1_N    = (D.f[N   ])[kn   ];
+      f1_S    = (D.f[S   ])[ks   ];
+      f1_T    = (D.f[T   ])[kt   ];
+      f1_B    = (D.f[B   ])[kb   ];
+      f1_NE   = (D.f[NE  ])[kne  ];
+      f1_SW   = (D.f[SW  ])[ksw  ];
+      f1_SE   = (D.f[SE  ])[kse  ];
+      f1_NW   = (D.f[NW  ])[knw  ];
+      f1_TE   = (D.f[TE  ])[kte  ];
+      f1_BW   = (D.f[BW  ])[kbw  ];
+      f1_BE   = (D.f[BE  ])[kbe  ];
+      f1_TW   = (D.f[TW  ])[ktw  ];
+      f1_TN   = (D.f[TN  ])[ktn  ];
+      f1_BS   = (D.f[BS  ])[kbs  ];
+      f1_BN   = (D.f[BN  ])[kbn  ];
+      f1_TS   = (D.f[TS  ])[kts  ];
+      f1_ZERO = (D.f[REST])[kzero];
+      f1_TNE  = (D.f[TNE ])[ktne ];
+      f1_TSW  = (D.f[TSW ])[ktsw ];
+      f1_TSE  = (D.f[TSE ])[ktse ];
+      f1_TNW  = (D.f[TNW ])[ktnw ];
+      f1_BNE  = (D.f[BNE ])[kbne ];
+      f1_BSW  = (D.f[BSW ])[kbsw ];
+      f1_BSE  = (D.f[BSE ])[kbse ];
+      f1_BNW  = (D.f[BNW ])[kbnw ];
+      //f1_W    = (D.f[E   ])[ke   ];
+      //f1_E    = (D.f[W   ])[kw   ];
+      //f1_S    = (D.f[N   ])[kn   ];
+      //f1_N    = (D.f[S   ])[ks   ];
+      //f1_B    = (D.f[T   ])[kt   ];
+      //f1_T    = (D.f[B   ])[kb   ];
+      //f1_SW   = (D.f[NE  ])[kne  ];
+      //f1_NE   = (D.f[SW  ])[ksw  ];
+      //f1_NW   = (D.f[SE  ])[kse  ];
+      //f1_SE   = (D.f[NW  ])[knw  ];
+      //f1_BW   = (D.f[TE  ])[kte  ];
+      //f1_TE   = (D.f[BW  ])[kbw  ];
+      //f1_TW   = (D.f[BE  ])[kbe  ];
+      //f1_BE   = (D.f[TW  ])[ktw  ];
+      //f1_BS   = (D.f[TN  ])[ktn  ];
+      //f1_TN   = (D.f[BS  ])[kbs  ];
+      //f1_TS   = (D.f[BN  ])[kbn  ];
+      //f1_BN   = (D.f[TS  ])[kts  ];
+      //f1_ZERO = (D.f[REST])[kzero];
+      //f1_BSW  = (D.f[TNE ])[ktne ];
+      //f1_BNE  = (D.f[TSW ])[ktsw ];
+      //f1_BNW  = (D.f[TSE ])[ktse ];
+      //f1_BSE  = (D.f[TNW ])[ktnw ];
+      //f1_TSW  = (D.f[BNE ])[kbne ];
+      //f1_TNE  = (D.f[BSW ])[kbsw ];
+      //f1_TNW  = (D.f[BSE ])[kbse ];
+      //f1_TSE  = (D.f[BNW ])[kbnw ];
       //////////////////////////////////////////////////////////////////////////
       real cs       = c1o1/sqrt(c3o1);
       real csp1     = cs + c1o1;
@@ -521,64 +522,64 @@ extern "C" __global__ void VelSchlaff27(  int t,
       f1_TNW = f1_BSE - c1o36 * (VX - VY - VZ);
 
       deltaVz0[k] = tempDeltaV;
-      (D.f[dirT   ])[kt   ] = f1_T  ;
-      (D.f[dirTE  ])[kte  ] = f1_TE ;
-      (D.f[dirTW  ])[ktw  ] = f1_TW ;
-      (D.f[dirTN  ])[ktn  ] = f1_TN ;
-      (D.f[dirTS  ])[kts  ] = f1_TS ;
-      (D.f[dirTNE ])[ktne ] = f1_TNE;
-      (D.f[dirTSW ])[ktsw ] = f1_TSW;
-      (D.f[dirTSE ])[ktse ] = f1_TSE;
-      (D.f[dirTNW ])[ktnw ] = f1_TNW;
-
-      //(D.f[dirB   ])[kb   ] = f1_B   ;
-      //(D.f[dirBW  ])[kbw  ] = f1_BW  ;
-      //(D.f[dirBE  ])[kbe  ] = f1_BE  ;
-      //(D.f[dirBS  ])[kbs  ] = f1_BS  ;
-      //(D.f[dirBN  ])[kbn  ] = f1_BN  ;
-      //(D.f[dirBNE ])[kbne ] = f1_BNE ;
-      //(D.f[dirBSW ])[kbsw ] = f1_BSW ;
-      //(D.f[dirBSE ])[kbse ] = f1_BSE ;
-      //(D.f[dirBNW ])[kbnw ] = f1_BNW ;
-
-
-      //(D.f[dirT   ])[kt   ] = f1_B  ;
-      //(D.f[dirTE  ])[kte  ] = f1_BW ;
-      //(D.f[dirTW  ])[ktw  ] = f1_BE ;
-      //(D.f[dirTN  ])[ktn  ] = f1_BS ;
-      //(D.f[dirTS  ])[kts  ] = f1_BN ;
-      //(D.f[dirTNE ])[ktne ] = f1_BSW;
-      //(D.f[dirTSW ])[ktsw ] = f1_BNE;
-      //(D.f[dirTSE ])[ktse ] = f1_BNW;
-      //(D.f[dirTNW ])[ktnw ] = f1_BSE;
-
-      //(D.f[dirE   ])[ke   ] = f1_W   -c2over27*drho1;
-      //(D.f[dirW   ])[kw   ] = f1_E   -c2over27*drho1;
-      //(D.f[dirN   ])[kn   ] = f1_S   -c2over27*drho1;
-      //(D.f[dirS   ])[ks   ] = f1_N   -c2over27*drho1;
-      //(D.f[dirT   ])[kt   ] = f1_B   -c2over27*drho1;
-      //(D.f[dirB   ])[kb   ] = f1_T   -c2over27*drho1;
-      //(D.f[dirNE  ])[kne  ] = f1_SW  -c1over54*drho1;
-      //(D.f[dirSW  ])[ksw  ] = f1_NE  -c1over54*drho1;
-      //(D.f[dirSE  ])[kse  ] = f1_NW  -c1over54*drho1;
-      //(D.f[dirNW  ])[knw  ] = f1_SE  -c1over54*drho1;
-      //(D.f[dirTE  ])[kte  ] = f1_BW  -c1over54*drho1;
-      //(D.f[dirBW  ])[kbw  ] = f1_TE  -c1over54*drho1;
-      //(D.f[dirBE  ])[kbe  ] = f1_TW  -c1over54*drho1;
-      //(D.f[dirTW  ])[ktw  ] = f1_BE  -c1over54*drho1;
-      //(D.f[dirTN  ])[ktn  ] = f1_BS  -c1over54*drho1;
-      //(D.f[dirBS  ])[kbs  ] = f1_TN  -c1over54*drho1;
-      //(D.f[dirBN  ])[kbn  ] = f1_TS  -c1over54*drho1;
-      //(D.f[dirTS  ])[kts  ] = f1_BN  -c1over54*drho1;
-      //(D.f[dirZERO])[kzero] = f1_ZERO-c8over27*drho1;
-      //(D.f[dirTNE ])[ktne ] = f1_BSW -c1over216*drho1;
-      //(D.f[dirTSW ])[ktsw ] = f1_BNE -c1over216*drho1;
-      //(D.f[dirTSE ])[ktse ] = f1_BNW -c1over216*drho1;
-      //(D.f[dirTNW ])[ktnw ] = f1_BSE -c1over216*drho1;
-      //(D.f[dirBNE ])[kbne ] = f1_TSW -c1over216*drho1;
-      //(D.f[dirBSW ])[kbsw ] = f1_TNE -c1over216*drho1;
-      //(D.f[dirBSE ])[kbse ] = f1_TNW -c1over216*drho1;
-      //(D.f[dirBNW ])[kbnw ] = f1_TSE -c1over216*drho1;
+      (D.f[T   ])[kt   ] = f1_T  ;
+      (D.f[TE  ])[kte  ] = f1_TE ;
+      (D.f[TW  ])[ktw  ] = f1_TW ;
+      (D.f[TN  ])[ktn  ] = f1_TN ;
+      (D.f[TS  ])[kts  ] = f1_TS ;
+      (D.f[TNE ])[ktne ] = f1_TNE;
+      (D.f[TSW ])[ktsw ] = f1_TSW;
+      (D.f[TSE ])[ktse ] = f1_TSE;
+      (D.f[TNW ])[ktnw ] = f1_TNW;
+
+      //(D.f[B   ])[kb   ] = f1_B   ;
+      //(D.f[BW  ])[kbw  ] = f1_BW  ;
+      //(D.f[BE  ])[kbe  ] = f1_BE  ;
+      //(D.f[BS  ])[kbs  ] = f1_BS  ;
+      //(D.f[BN  ])[kbn  ] = f1_BN  ;
+      //(D.f[BNE ])[kbne ] = f1_BNE ;
+      //(D.f[BSW ])[kbsw ] = f1_BSW ;
+      //(D.f[BSE ])[kbse ] = f1_BSE ;
+      //(D.f[BNW ])[kbnw ] = f1_BNW ;
+
+
+      //(D.f[T   ])[kt   ] = f1_B  ;
+      //(D.f[TE  ])[kte  ] = f1_BW ;
+      //(D.f[TW  ])[ktw  ] = f1_BE ;
+      //(D.f[TN  ])[ktn  ] = f1_BS ;
+      //(D.f[TS  ])[kts  ] = f1_BN ;
+      //(D.f[TNE ])[ktne ] = f1_BSW;
+      //(D.f[TSW ])[ktsw ] = f1_BNE;
+      //(D.f[TSE ])[ktse ] = f1_BNW;
+      //(D.f[TNW ])[ktnw ] = f1_BSE;
+
+      //(D.f[E   ])[ke   ] = f1_W   -c2over27*drho1;
+      //(D.f[W   ])[kw   ] = f1_E   -c2over27*drho1;
+      //(D.f[N   ])[kn   ] = f1_S   -c2over27*drho1;
+      //(D.f[S   ])[ks   ] = f1_N   -c2over27*drho1;
+      //(D.f[T   ])[kt   ] = f1_B   -c2over27*drho1;
+      //(D.f[B   ])[kb   ] = f1_T   -c2over27*drho1;
+      //(D.f[NE  ])[kne  ] = f1_SW  -c1over54*drho1;
+      //(D.f[SW  ])[ksw  ] = f1_NE  -c1over54*drho1;
+      //(D.f[SE  ])[kse  ] = f1_NW  -c1over54*drho1;
+      //(D.f[NW  ])[knw  ] = f1_SE  -c1over54*drho1;
+      //(D.f[TE  ])[kte  ] = f1_BW  -c1over54*drho1;
+      //(D.f[BW  ])[kbw  ] = f1_TE  -c1over54*drho1;
+      //(D.f[BE  ])[kbe  ] = f1_TW  -c1over54*drho1;
+      //(D.f[TW  ])[ktw  ] = f1_BE  -c1over54*drho1;
+      //(D.f[TN  ])[ktn  ] = f1_BS  -c1over54*drho1;
+      //(D.f[BS  ])[kbs  ] = f1_TN  -c1over54*drho1;
+      //(D.f[BN  ])[kbn  ] = f1_TS  -c1over54*drho1;
+      //(D.f[TS  ])[kts  ] = f1_BN  -c1over54*drho1;
+      //(D.f[REST])[kzero] = f1_ZERO-c8over27*drho1;
+      //(D.f[TNE ])[ktne ] = f1_BSW -c1over216*drho1;
+      //(D.f[TSW ])[ktsw ] = f1_BNE -c1over216*drho1;
+      //(D.f[TSE ])[ktse ] = f1_BNW -c1over216*drho1;
+      //(D.f[TNW ])[ktnw ] = f1_BSE -c1over216*drho1;
+      //(D.f[BNE ])[kbne ] = f1_TSW -c1over216*drho1;
+      //(D.f[BSW ])[kbsw ] = f1_TNE -c1over216*drho1;
+      //(D.f[BSE ])[kbse ] = f1_TNW -c1over216*drho1;
+      //(D.f[BNW ])[kbnw ] = f1_TSE -c1over216*drho1;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu b/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu
index 97c351b8bf58b3bf9f141af31b1a2172c3edd0a6..303cf6424607e0f3427ed3735cc0137d7a54028e 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu
@@ -1,9 +1,10 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 ////////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void GetVeloforForcing27( real* DD, 
@@ -21,63 +22,63 @@ extern "C" __global__ void GetVeloforForcing27( real* DD,
 	Distributions27 D;
 	if (isEvenTimestep==false)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -122,33 +123,33 @@ extern "C" __global__ void GetVeloforForcing27( real* DD,
 		unsigned int ktne = KQK;
 		unsigned int kbsw = neighborZ[ksw];
 		////////////////////////////////////////////////////////////////////////////////
-		real mfcbb = (D.f[dirE   ])[ke   ];
-		real mfabb = (D.f[dirW   ])[kw   ];
-		real mfbcb = (D.f[dirN   ])[kn   ];
-		real mfbab = (D.f[dirS   ])[ks   ];
-		real mfbbc = (D.f[dirT   ])[kt   ];
-		real mfbba = (D.f[dirB   ])[kb   ];
-		real mfccb = (D.f[dirNE  ])[kne  ];
-		real mfaab = (D.f[dirSW  ])[ksw  ];
-		real mfcab = (D.f[dirSE  ])[kse  ];
-		real mfacb = (D.f[dirNW  ])[knw  ];
-		real mfcbc = (D.f[dirTE  ])[kte  ];
-		real mfaba = (D.f[dirBW  ])[kbw  ];
-		real mfcba = (D.f[dirBE  ])[kbe  ];
-		real mfabc = (D.f[dirTW  ])[ktw  ];
-		real mfbcc = (D.f[dirTN  ])[ktn  ];
-		real mfbaa = (D.f[dirBS  ])[kbs  ];
-		real mfbca = (D.f[dirBN  ])[kbn  ];
-		real mfbac = (D.f[dirTS  ])[kts  ];
-		real mfbbb = (D.f[dirZERO])[kzero];
-		real mfccc = (D.f[dirTNE ])[ktne ];
-		real mfaac = (D.f[dirTSW ])[ktsw ];
-		real mfcac = (D.f[dirTSE ])[ktse ];
-		real mfacc = (D.f[dirTNW ])[ktnw ];
-		real mfcca = (D.f[dirBNE ])[kbne ];
-		real mfaaa = (D.f[dirBSW ])[kbsw ];
-		real mfcaa = (D.f[dirBSE ])[kbse ];
-		real mfaca = (D.f[dirBNW ])[kbnw ];
+		real mfcbb = (D.f[E   ])[ke   ];
+		real mfabb = (D.f[W   ])[kw   ];
+		real mfbcb = (D.f[N   ])[kn   ];
+		real mfbab = (D.f[S   ])[ks   ];
+		real mfbbc = (D.f[T   ])[kt   ];
+		real mfbba = (D.f[B   ])[kb   ];
+		real mfccb = (D.f[NE  ])[kne  ];
+		real mfaab = (D.f[SW  ])[ksw  ];
+		real mfcab = (D.f[SE  ])[kse  ];
+		real mfacb = (D.f[NW  ])[knw  ];
+		real mfcbc = (D.f[TE  ])[kte  ];
+		real mfaba = (D.f[BW  ])[kbw  ];
+		real mfcba = (D.f[BE  ])[kbe  ];
+		real mfabc = (D.f[TW  ])[ktw  ];
+		real mfbcc = (D.f[TN  ])[ktn  ];
+		real mfbaa = (D.f[BS  ])[kbs  ];
+		real mfbca = (D.f[BN  ])[kbn  ];
+		real mfbac = (D.f[TS  ])[kts  ];
+		real mfbbb = (D.f[REST])[kzero];
+		real mfccc = (D.f[TNE ])[ktne ];
+		real mfaac = (D.f[TSW ])[ktsw ];
+		real mfcac = (D.f[TSE ])[ktse ];
+		real mfacc = (D.f[TNW ])[ktnw ];
+		real mfcca = (D.f[BNE ])[kbne ];
+		real mfaaa = (D.f[BSW ])[kbsw ];
+		real mfcaa = (D.f[BSE ])[kbse ];
+		real mfaca = (D.f[BNW ])[kbnw ];
 		////////////////////////////////////////////////////////////////////////////////////
 		real rho   = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
 					 	 mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
diff --git a/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu
index bae041bcdbaf56c86c0f16a3f622784f870fab87..9b35d0e0ed9365112766f3ae4f46927b77361621 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu
@@ -1,15 +1,16 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void QSlipDevice27(real* DD, 
                                          int* k_Q, 
                                          real* QQ,
-                                         unsigned int sizeQ,
+                                         unsigned int numberOfBCnodes,
                                          real om1, 
                                          unsigned int* neighborX,
                                          unsigned int* neighborY,
@@ -20,63 +21,63 @@ extern "C" __global__ void QSlipDevice27(real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -89,7 +90,7 @@ extern "C" __global__ void QSlipDevice27(real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ)
+   if(k<numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -97,32 +98,32 @@ extern "C" __global__ void QSlipDevice27(real* DD,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -154,37 +155,37 @@ extern "C" __global__ void QSlipDevice27(real* DD,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -204,67 +205,67 @@ extern "C" __global__ void QSlipDevice27(real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real fac = c1o1;//c99o100;
 	  real VeloX = fac*vx1;
@@ -282,8 +283,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-feq*om1)/(c1o1-om1)+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);
-         //(D.f[dirW])[kw]=zero;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-feq*om1)/(c1o1-om1)+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
@@ -294,8 +295,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-feq*om1)/(c1o1-om1)+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);
-         //(D.f[dirE])[ke]=zero;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-feq*om1)/(c1o1-om1)+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
@@ -306,8 +307,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-feq*om1)/(c1o1-om1)+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);
-         //(D.f[dirS])[ks]=zero;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-feq*om1)/(c1o1-om1)+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
@@ -318,8 +319,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-feq*om1)/(c1o1-om1)+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);
-         //(D.f[dirN])[kn]=zero;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-feq*om1)/(c1o1-om1)+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
@@ -330,8 +331,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-feq*om1)/(c1o1-om1)+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);
-         //(D.f[dirB])[kb]=one;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-feq*om1)/(c1o1-om1)+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
@@ -342,8 +343,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-feq*om1)/(c1o1-om1)+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
-         //(D.f[dirT])[kt]=zero;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-feq*om1)/(c1o1-om1)+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
@@ -355,8 +356,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-feq*om1)/(c1o1-om1)+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
-         //(D.f[dirSW])[ksw]=zero;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-feq*om1)/(c1o1-om1)+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
@@ -368,8 +369,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-feq*om1)/(c1o1-om1)+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
-         //(D.f[dirNE])[kne]=zero;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-feq*om1)/(c1o1-om1)+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
@@ -381,8 +382,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-feq*om1)/(c1o1-om1)+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
-         //(D.f[dirNW])[knw]=zero;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-feq*om1)/(c1o1-om1)+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
@@ -394,8 +395,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-feq*om1)/(c1o1-om1)+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
-         //(D.f[dirSE])[kse]=zero;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-feq*om1)/(c1o1-om1)+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
@@ -407,8 +408,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-feq*om1)/(c1o1-om1)+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
-         //(D.f[dirBW])[kbw]=zero;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-feq*om1)/(c1o1-om1)+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
@@ -420,8 +421,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-feq*om1)/(c1o1-om1)+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
-         //(D.f[dirTE])[kte]=zero;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-feq*om1)/(c1o1-om1)+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
@@ -433,8 +434,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-feq*om1)/(c1o1-om1)+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
-         //(D.f[dirTW])[ktw]=zero;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-feq*om1)/(c1o1-om1)+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
@@ -446,8 +447,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-feq*om1)/(c1o1-om1)+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
-         //(D.f[dirBE])[kbe]=zero;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-feq*om1)/(c1o1-om1)+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
@@ -459,8 +460,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-feq*om1)/(c1o1-om1)+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBS])[kbs]=zero;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-feq*om1)/(c1o1-om1)+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
@@ -472,8 +473,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-feq*om1)/(c1o1-om1)+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTN])[ktn]=zero;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-feq*om1)/(c1o1-om1)+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
@@ -485,8 +486,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-feq*om1)/(c1o1-om1)+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTS])[kts]=zero;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-feq*om1)/(c1o1-om1)+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
@@ -498,8 +499,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-feq*om1)/(c1o1-om1)+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBN])[kbn]=zero;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-feq*om1)/(c1o1-om1)+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
@@ -512,8 +513,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-feq*om1)/(c1o1-om1)+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBSW])[kbsw]=zero;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-feq*om1)/(c1o1-om1)+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
@@ -526,8 +527,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-feq*om1)/(c1o1-om1)+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTNE])[ktne]=zero;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-feq*om1)/(c1o1-om1)+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
@@ -540,8 +541,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-feq*om1)/(c1o1-om1)+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTSW])[ktsw]=zero;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-feq*om1)/(c1o1-om1)+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
@@ -554,8 +555,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-feq*om1)/(c1o1-om1)+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBNE])[kbne]=zero;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-feq*om1)/(c1o1-om1)+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
@@ -568,8 +569,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-feq*om1)/(c1o1-om1)+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBNW])[kbnw]=zero;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-feq*om1)/(c1o1-om1)+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
@@ -582,8 +583,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-feq*om1)/(c1o1-om1)+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTSE])[ktse]=zero;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-feq*om1)/(c1o1-om1)+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
@@ -596,8 +597,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-feq*om1)/(c1o1-om1)+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTNW])[ktnw]=zero;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-feq*om1)/(c1o1-om1)+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
@@ -610,8 +611,8 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-feq*om1)/(c1o1-om1)+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBSE])[kbse]=zero;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-feq*om1)/(c1o1-om1)+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -659,7 +660,7 @@ extern "C" __global__ void QSlipDevice27(real* DD,
 extern "C" __global__ void QSlipDeviceComp27(real* DD, 
 											 int* k_Q, 
 											 real* QQ,
-											 unsigned int sizeQ,
+											 unsigned int numberOfBCnodes,
 											 real om1, 
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -670,63 +671,63 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -739,7 +740,7 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ)
+   if(k < numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -747,32 +748,32 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -805,37 +806,37 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
       unsigned int kbsw = neighborZ[ksw];
       
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -855,67 +856,67 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real fac = c1o1;//c99o100;
 	  real VeloX = fac*vx1;
@@ -933,10 +934,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq); 
-         //(D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
-         //(D.f[dirW])[kw]=zero;
+         //(D.f[W])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
@@ -947,10 +948,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
-         //(D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-feq*om1)/(one-om1)+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);
-         //(D.f[dirE])[ke]=zero;
+         //(D.f[E])[ke]=(one-q)/(one+q)*(f_W-feq*om1)/(one-om1)+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
@@ -961,10 +962,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
-         //(D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-feq*om1)/(one-om1)+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);
-         //(D.f[dirS])[ks]=zero;
+         //(D.f[S])[ks]=(one-q)/(one+q)*(f_N-feq*om1)/(one-om1)+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
@@ -975,10 +976,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         //(D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-feq*om1)/(one-om1)+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);
-         //(D.f[dirN])[kn]=zero;
+         //(D.f[N])[kn]=(one-q)/(one+q)*(f_S-feq*om1)/(one-om1)+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
@@ -989,10 +990,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq); 
-         //(D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-feq*om1)/(one-om1)+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);
-         //(D.f[dirB])[kb]=one;
+         //(D.f[B])[kb]=(one-q)/(one+q)*(f_T-feq*om1)/(one-om1)+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
@@ -1003,10 +1004,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
-         //(D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-feq*om1)/(one-om1)+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);
-         //(D.f[dirT])[kt]=zero;
+         //(D.f[T])[kt]=(one-q)/(one+q)*(f_B-feq*om1)/(one-om1)+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
@@ -1018,10 +1019,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-         //(D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-feq*om1)/(one-om1)+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);
-         //(D.f[dirSW])[ksw]=zero;
+         //(D.f[SW])[ksw]=(one-q)/(one+q)*(f_NE-feq*om1)/(one-om1)+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
@@ -1033,10 +1034,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-         //(D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-feq*om1)/(one-om1)+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);
-         //(D.f[dirNE])[kne]=zero;
+         //(D.f[NE])[kne]=(one-q)/(one+q)*(f_SW-feq*om1)/(one-om1)+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
@@ -1048,10 +1049,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-         //(D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-feq*om1)/(one-om1)+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);
-         //(D.f[dirNW])[knw]=zero;
+         //(D.f[NW])[knw]=(one-q)/(one+q)*(f_SE-feq*om1)/(one-om1)+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
@@ -1063,10 +1064,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-         //(D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-feq*om1)/(one-om1)+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);
-         //(D.f[dirSE])[kse]=zero;
+         //(D.f[SE])[kse]=(one-q)/(one+q)*(f_NW-feq*om1)/(one-om1)+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
@@ -1079,10 +1080,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (z == true) VeloZ = c0o1;
       //  if (k==10000) printf("AFTER x: %u \t  y: %u \t z: %u \n  VeloX: %f \t VeloY: %f \t VeloZ: %f \n\n", x,y,z, VeloX,VeloY,VeloZ);
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-         //(D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-feq*om1)/(one-om1)+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);
-         //(D.f[dirBW])[kbw]=zero;
+         //(D.f[BW])[kbw]=(one-q)/(one+q)*(f_TE-feq*om1)/(one-om1)+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
@@ -1094,10 +1095,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-         //(D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-feq*om1)/(one-om1)+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);
-         //(D.f[dirTE])[kte]=zero;
+         //(D.f[TE])[kte]=(one-q)/(one+q)*(f_BW-feq*om1)/(one-om1)+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
@@ -1109,10 +1110,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-         //(D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-feq*om1)/(one-om1)+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);
-         //(D.f[dirTW])[ktw]=zero;
+         //(D.f[TW])[ktw]=(one-q)/(one+q)*(f_BE-feq*om1)/(one-om1)+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
@@ -1124,10 +1125,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-         //(D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-feq*om1)/(one-om1)+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);
-         //(D.f[dirBE])[kbe]=zero;
+         //(D.f[BE])[kbe]=(one-q)/(one+q)*(f_TW-feq*om1)/(one-om1)+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
@@ -1139,10 +1140,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-         //(D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-feq*om1)/(one-om1)+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);
-         //(D.f[dirBS])[kbs]=zero;
+         //(D.f[BS])[kbs]=(one-q)/(one+q)*(f_TN-feq*om1)/(one-om1)+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
@@ -1154,10 +1155,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-         //(D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-feq*om1)/(one-om1)+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);
-         //(D.f[dirTN])[ktn]=zero;
+         //(D.f[TN])[ktn]=(one-q)/(one+q)*(f_BS-feq*om1)/(one-om1)+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
@@ -1169,10 +1170,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-         //(D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-feq*om1)/(one-om1)+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);
-         //(D.f[dirTS])[kts]=zero;
+         //(D.f[TS])[kts]=(one-q)/(one+q)*(f_BN-feq*om1)/(one-om1)+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
@@ -1184,10 +1185,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-         //(D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-feq*om1)/(one-om1)+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);
-         //(D.f[dirBN])[kbn]=zero;
+         //(D.f[BN])[kbn]=(one-q)/(one+q)*(f_TS-feq*om1)/(one-om1)+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
@@ -1200,10 +1201,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-         //(D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om1)/(one-om1)+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);
-         //(D.f[dirBSW])[kbsw]=zero;
+         //(D.f[BSW])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om1)/(one-om1)+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
@@ -1216,10 +1217,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-         //(D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om1)/(one-om1)+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);
-         //(D.f[dirTNE])[ktne]=zero;
+         //(D.f[TNE])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om1)/(one-om1)+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
@@ -1232,10 +1233,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-         //(D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om1)/(one-om1)+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);
-         //(D.f[dirTSW])[ktsw]=zero;
+         //(D.f[TSW])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om1)/(one-om1)+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
@@ -1248,10 +1249,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-         //(D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om1)/(one-om1)+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);
-         //(D.f[dirBNE])[kbne]=zero;
+         //(D.f[BNE])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om1)/(one-om1)+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
@@ -1264,10 +1265,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-         //(D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om1)/(one-om1)+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);
-         //(D.f[dirBNW])[kbnw]=zero;
+         //(D.f[BNW])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om1)/(one-om1)+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
@@ -1280,10 +1281,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-         //(D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om1)/(one-om1)+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);
-         //(D.f[dirTSE])[ktse]=zero;
+         //(D.f[TSE])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om1)/(one-om1)+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
@@ -1296,10 +1297,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-         //(D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om1)/(one-om1)+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);
-         //(D.f[dirTNW])[ktnw]=zero;
+         //(D.f[TNW])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om1)/(one-om1)+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
@@ -1312,10 +1313,10 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-         //(D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om1)/(one-om1)+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);
-         //(D.f[dirBSE])[kbse]=zero;
+         //(D.f[BSE])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om1)/(one-om1)+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -1324,7 +1325,7 @@ extern "C" __global__ void QSlipDeviceComp27(real* DD,
 extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD, 
 											 int* k_Q, 
 											 real* QQ,
-											 unsigned int sizeQ,
+											 unsigned int numberOfBCnodes,
 											 real om1, 
 											 unsigned int* neighborX,
 											 unsigned int* neighborY,
@@ -1336,63 +1337,63 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1405,7 +1406,7 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ)
+   if(k<numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -1413,32 +1414,32 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1471,37 +1472,37 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
       unsigned int kbsw = neighborZ[ksw];
       
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -1521,67 +1522,67 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real om_turb = om1 / (c1o1 + c3o1*om1*max(c0o1, turbViscosity[k_Q[k]]));
      
@@ -1601,10 +1602,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq); 
-         //(D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
-         //(D.f[dirW])[kw]=zero;
+         //(D.f[W])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
@@ -1615,10 +1616,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 	     VeloZ = fac*vx3;
 		 x = true;
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
-         //(D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-feq*om_turb)/(one-om_turb)+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);
-         //(D.f[dirE])[ke]=zero;
+         //(D.f[E])[ke]=(one-q)/(one+q)*(f_W-feq*om_turb)/(one-om_turb)+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
@@ -1629,10 +1630,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
-         //(D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-feq*om_turb)/(one-om_turb)+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);
-         //(D.f[dirS])[ks]=zero;
+         //(D.f[S])[ks]=(one-q)/(one+q)*(f_N-feq*om_turb)/(one-om_turb)+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
@@ -1643,10 +1644,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 	     VeloZ = fac*vx3;
 		 y = true;
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         //(D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-feq*om_turb)/(one-om_turb)+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);
-         //(D.f[dirN])[kn]=zero;
+         //(D.f[N])[kn]=(one-q)/(one+q)*(f_S-feq*om_turb)/(one-om_turb)+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
@@ -1657,10 +1658,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq); 
-         //(D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-feq*om_turb)/(one-om_turb)+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);
-         //(D.f[dirB])[kb]=one;
+         //(D.f[B])[kb]=(one-q)/(one+q)*(f_T-feq*om_turb)/(one-om_turb)+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
@@ -1671,10 +1672,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 VeloZ = c0o1;
 		 z = true;
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
          //feq=c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
-         //(D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-feq*om_turb)/(one-om_turb)+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);
-         //(D.f[dirT])[kt]=zero;
+         //(D.f[T])[kt]=(one-q)/(one+q)*(f_B-feq*om_turb)/(one-om_turb)+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
@@ -1686,10 +1687,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-         //(D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-feq*om_turb)/(one-om_turb)+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);
-         //(D.f[dirSW])[ksw]=zero;
+         //(D.f[SW])[ksw]=(one-q)/(one+q)*(f_NE-feq*om_turb)/(one-om_turb)+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
@@ -1701,10 +1702,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-         //(D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-feq*om_turb)/(one-om_turb)+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);
-         //(D.f[dirNE])[kne]=zero;
+         //(D.f[NE])[kne]=(one-q)/(one+q)*(f_SW-feq*om_turb)/(one-om_turb)+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
@@ -1716,10 +1717,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-         //(D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-feq*om_turb)/(one-om_turb)+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);
-         //(D.f[dirNW])[knw]=zero;
+         //(D.f[NW])[knw]=(one-q)/(one+q)*(f_SE-feq*om_turb)/(one-om_turb)+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
@@ -1731,10 +1732,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (y == true) VeloY = c0o1;
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-         //(D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-feq*om_turb)/(one-om_turb)+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);
-         //(D.f[dirSE])[kse]=zero;
+         //(D.f[SE])[kse]=(one-q)/(one+q)*(f_NW-feq*om_turb)/(one-om_turb)+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
@@ -1747,10 +1748,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (z == true) VeloZ = c0o1;
       //  if (k==10000) printf("AFTER x: %u \t  y: %u \t z: %u \n  VeloX: %f \t VeloY: %f \t VeloZ: %f \n\n", x,y,z, VeloX,VeloY,VeloZ);
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-         //(D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-feq*om_turb)/(one-om_turb)+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);
-         //(D.f[dirBW])[kbw]=zero;
+         //(D.f[BW])[kbw]=(one-q)/(one+q)*(f_TE-feq*om_turb)/(one-om_turb)+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
@@ -1762,10 +1763,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-         //(D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-feq*om_turb)/(one-om_turb)+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);
-         //(D.f[dirTE])[kte]=zero;
+         //(D.f[TE])[kte]=(one-q)/(one+q)*(f_BW-feq*om_turb)/(one-om_turb)+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
@@ -1777,10 +1778,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-         //(D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-feq*om_turb)/(one-om_turb)+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);
-         //(D.f[dirTW])[ktw]=zero;
+         //(D.f[TW])[ktw]=(one-q)/(one+q)*(f_BE-feq*om_turb)/(one-om_turb)+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
@@ -1792,10 +1793,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (x == true) VeloX = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-         //(D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-feq*om_turb)/(one-om_turb)+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);
-         //(D.f[dirBE])[kbe]=zero;
+         //(D.f[BE])[kbe]=(one-q)/(one+q)*(f_TW-feq*om_turb)/(one-om_turb)+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
@@ -1807,10 +1808,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-         //(D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-feq*om_turb)/(one-om_turb)+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);
-         //(D.f[dirBS])[kbs]=zero;
+         //(D.f[BS])[kbs]=(one-q)/(one+q)*(f_TN-feq*om_turb)/(one-om_turb)+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
@@ -1822,10 +1823,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-         //(D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-feq*om_turb)/(one-om_turb)+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);
-         //(D.f[dirTN])[ktn]=zero;
+         //(D.f[TN])[ktn]=(one-q)/(one+q)*(f_BS-feq*om_turb)/(one-om_turb)+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
@@ -1837,10 +1838,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-         //(D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-feq*om_turb)/(one-om_turb)+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);
-         //(D.f[dirTS])[kts]=zero;
+         //(D.f[TS])[kts]=(one-q)/(one+q)*(f_BN-feq*om_turb)/(one-om_turb)+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
@@ -1852,10 +1853,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
          //feq=c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-         //(D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-feq*om_turb)/(one-om_turb)+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);
-         //(D.f[dirBN])[kbn]=zero;
+         //(D.f[BN])[kbn]=(one-q)/(one+q)*(f_TS-feq*om_turb)/(one-om_turb)+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
@@ -1868,10 +1869,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-         //(D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om_turb)/(one-om_turb)+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);
-         //(D.f[dirBSW])[kbsw]=zero;
+         //(D.f[BSW])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om_turb)/(one-om_turb)+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
@@ -1884,10 +1885,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-         //(D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om_turb)/(one-om_turb)+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);
-         //(D.f[dirTNE])[ktne]=zero;
+         //(D.f[TNE])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om_turb)/(one-om_turb)+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
@@ -1900,10 +1901,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-         //(D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om_turb)/(one-om_turb)+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);
-         //(D.f[dirTSW])[ktsw]=zero;
+         //(D.f[TSW])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om_turb)/(one-om_turb)+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
@@ -1916,10 +1917,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-         //(D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om_turb)/(one-om_turb)+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);
-         //(D.f[dirBNE])[kbne]=zero;
+         //(D.f[BNE])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om_turb)/(one-om_turb)+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
@@ -1932,10 +1933,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-         //(D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om_turb)/(one-om_turb)+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);
-         //(D.f[dirBNW])[kbnw]=zero;
+         //(D.f[BNW])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om_turb)/(one-om_turb)+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
@@ -1948,10 +1949,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-         //(D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om_turb)/(one-om_turb)+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);
-         //(D.f[dirTSE])[ktse]=zero;
+         //(D.f[TSE])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om_turb)/(one-om_turb)+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
@@ -1964,10 +1965,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-         //(D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om_turb)/(one-om_turb)+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);
-         //(D.f[dirTNW])[ktnw]=zero;
+         //(D.f[TNW])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om_turb)/(one-om_turb)+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
@@ -1980,10 +1981,10 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 		 if (y == true) VeloY = c0o1;
 		 if (z == true) VeloZ = c0o1;
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
          //feq=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-         //(D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om_turb)/(one-om_turb)+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);
-         //(D.f[dirBSE])[kbse]=zero;
+         //(D.f[BSE])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om_turb)/(one-om_turb)+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -2029,7 +2030,7 @@ extern "C" __global__ void QSlipDeviceComp27TurbViscosity(real* DD,
 extern "C" __global__ void QSlipGeomDeviceComp27(real* DD, 
 												 int* k_Q, 
 												 real* QQ,
-												 unsigned int sizeQ,
+												 unsigned int  numberOfBCnodes,
 												 real om1, 
 												 real* NormalX,
 												 real* NormalY,
@@ -2043,63 +2044,63 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2112,7 +2113,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ)
+   if(k< numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -2120,128 +2121,128 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       real *nx_dirE,   *nx_dirW,   *nx_dirN,   *nx_dirS,   *nx_dirT,   *nx_dirB, 
               *nx_dirNE,  *nx_dirSW,  *nx_dirSE,  *nx_dirNW,  *nx_dirTE,  *nx_dirBW,
               *nx_dirBE,  *nx_dirTW,  *nx_dirTN,  *nx_dirBS,  *nx_dirBN,  *nx_dirTS,
               *nx_dirTNE, *nx_dirTSW, *nx_dirTSE, *nx_dirTNW, *nx_dirBNE, *nx_dirBSW,
               *nx_dirBSE, *nx_dirBNW; 
-      nx_dirE   = &NormalX[dirE   *sizeQ];
-      nx_dirW   = &NormalX[dirW   *sizeQ];
-      nx_dirN   = &NormalX[dirN   *sizeQ];
-      nx_dirS   = &NormalX[dirS   *sizeQ];
-      nx_dirT   = &NormalX[dirT   *sizeQ];
-      nx_dirB   = &NormalX[dirB   *sizeQ];
-      nx_dirNE  = &NormalX[dirNE  *sizeQ];
-      nx_dirSW  = &NormalX[dirSW  *sizeQ];
-      nx_dirSE  = &NormalX[dirSE  *sizeQ];
-      nx_dirNW  = &NormalX[dirNW  *sizeQ];
-      nx_dirTE  = &NormalX[dirTE  *sizeQ];
-      nx_dirBW  = &NormalX[dirBW  *sizeQ];
-      nx_dirBE  = &NormalX[dirBE  *sizeQ];
-      nx_dirTW  = &NormalX[dirTW  *sizeQ];
-      nx_dirTN  = &NormalX[dirTN  *sizeQ];
-      nx_dirBS  = &NormalX[dirBS  *sizeQ];
-      nx_dirBN  = &NormalX[dirBN  *sizeQ];
-      nx_dirTS  = &NormalX[dirTS  *sizeQ];
-      nx_dirTNE = &NormalX[dirTNE *sizeQ];
-      nx_dirTSW = &NormalX[dirTSW *sizeQ];
-      nx_dirTSE = &NormalX[dirTSE *sizeQ];
-      nx_dirTNW = &NormalX[dirTNW *sizeQ];
-      nx_dirBNE = &NormalX[dirBNE *sizeQ];
-      nx_dirBSW = &NormalX[dirBSW *sizeQ];
-      nx_dirBSE = &NormalX[dirBSE *sizeQ];
-      nx_dirBNW = &NormalX[dirBNW *sizeQ];
+      nx_dirE   = &NormalX[E   * numberOfBCnodes];
+      nx_dirW   = &NormalX[W   * numberOfBCnodes];
+      nx_dirN   = &NormalX[N   * numberOfBCnodes];
+      nx_dirS   = &NormalX[S   * numberOfBCnodes];
+      nx_dirT   = &NormalX[T   * numberOfBCnodes];
+      nx_dirB   = &NormalX[B   * numberOfBCnodes];
+      nx_dirNE  = &NormalX[NE  * numberOfBCnodes];
+      nx_dirSW  = &NormalX[SW  * numberOfBCnodes];
+      nx_dirSE  = &NormalX[SE  * numberOfBCnodes];
+      nx_dirNW  = &NormalX[NW  * numberOfBCnodes];
+      nx_dirTE  = &NormalX[TE  * numberOfBCnodes];
+      nx_dirBW  = &NormalX[BW  * numberOfBCnodes];
+      nx_dirBE  = &NormalX[BE  * numberOfBCnodes];
+      nx_dirTW  = &NormalX[TW  * numberOfBCnodes];
+      nx_dirTN  = &NormalX[TN  * numberOfBCnodes];
+      nx_dirBS  = &NormalX[BS  * numberOfBCnodes];
+      nx_dirBN  = &NormalX[BN  * numberOfBCnodes];
+      nx_dirTS  = &NormalX[TS  * numberOfBCnodes];
+      nx_dirTNE = &NormalX[TNE * numberOfBCnodes];
+      nx_dirTSW = &NormalX[TSW * numberOfBCnodes];
+      nx_dirTSE = &NormalX[TSE * numberOfBCnodes];
+      nx_dirTNW = &NormalX[TNW * numberOfBCnodes];
+      nx_dirBNE = &NormalX[BNE * numberOfBCnodes];
+      nx_dirBSW = &NormalX[BSW * numberOfBCnodes];
+      nx_dirBSE = &NormalX[BSE * numberOfBCnodes];
+      nx_dirBNW = &NormalX[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       real *ny_dirE,   *ny_dirW,   *ny_dirN,   *ny_dirS,   *ny_dirT,   *ny_dirB, 
               *ny_dirNE,  *ny_dirSW,  *ny_dirSE,  *ny_dirNW,  *ny_dirTE,  *ny_dirBW,
               *ny_dirBE,  *ny_dirTW,  *ny_dirTN,  *ny_dirBS,  *ny_dirBN,  *ny_dirTS,
               *ny_dirTNE, *ny_dirTSW, *ny_dirTSE, *ny_dirTNW, *ny_dirBNE, *ny_dirBSW,
               *ny_dirBSE, *ny_dirBNW; 
-      ny_dirE   = &NormalY[dirE   *sizeQ];
-      ny_dirW   = &NormalY[dirW   *sizeQ];
-      ny_dirN   = &NormalY[dirN   *sizeQ];
-      ny_dirS   = &NormalY[dirS   *sizeQ];
-      ny_dirT   = &NormalY[dirT   *sizeQ];
-      ny_dirB   = &NormalY[dirB   *sizeQ];
-      ny_dirNE  = &NormalY[dirNE  *sizeQ];
-      ny_dirSW  = &NormalY[dirSW  *sizeQ];
-      ny_dirSE  = &NormalY[dirSE  *sizeQ];
-      ny_dirNW  = &NormalY[dirNW  *sizeQ];
-      ny_dirTE  = &NormalY[dirTE  *sizeQ];
-      ny_dirBW  = &NormalY[dirBW  *sizeQ];
-      ny_dirBE  = &NormalY[dirBE  *sizeQ];
-      ny_dirTW  = &NormalY[dirTW  *sizeQ];
-      ny_dirTN  = &NormalY[dirTN  *sizeQ];
-      ny_dirBS  = &NormalY[dirBS  *sizeQ];
-      ny_dirBN  = &NormalY[dirBN  *sizeQ];
-      ny_dirTS  = &NormalY[dirTS  *sizeQ];
-      ny_dirTNE = &NormalY[dirTNE *sizeQ];
-      ny_dirTSW = &NormalY[dirTSW *sizeQ];
-      ny_dirTSE = &NormalY[dirTSE *sizeQ];
-      ny_dirTNW = &NormalY[dirTNW *sizeQ];
-      ny_dirBNE = &NormalY[dirBNE *sizeQ];
-      ny_dirBSW = &NormalY[dirBSW *sizeQ];
-      ny_dirBSE = &NormalY[dirBSE *sizeQ];
-      ny_dirBNW = &NormalY[dirBNW *sizeQ];
+      ny_dirE   = &NormalY[E   * numberOfBCnodes];
+      ny_dirW   = &NormalY[W   * numberOfBCnodes];
+      ny_dirN   = &NormalY[N   * numberOfBCnodes];
+      ny_dirS   = &NormalY[S   * numberOfBCnodes];
+      ny_dirT   = &NormalY[T   * numberOfBCnodes];
+      ny_dirB   = &NormalY[B   * numberOfBCnodes];
+      ny_dirNE  = &NormalY[NE  * numberOfBCnodes];
+      ny_dirSW  = &NormalY[SW  * numberOfBCnodes];
+      ny_dirSE  = &NormalY[SE  * numberOfBCnodes];
+      ny_dirNW  = &NormalY[NW  * numberOfBCnodes];
+      ny_dirTE  = &NormalY[TE  * numberOfBCnodes];
+      ny_dirBW  = &NormalY[BW  * numberOfBCnodes];
+      ny_dirBE  = &NormalY[BE  * numberOfBCnodes];
+      ny_dirTW  = &NormalY[TW  * numberOfBCnodes];
+      ny_dirTN  = &NormalY[TN  * numberOfBCnodes];
+      ny_dirBS  = &NormalY[BS  * numberOfBCnodes];
+      ny_dirBN  = &NormalY[BN  * numberOfBCnodes];
+      ny_dirTS  = &NormalY[TS  * numberOfBCnodes];
+      ny_dirTNE = &NormalY[TNE * numberOfBCnodes];
+      ny_dirTSW = &NormalY[TSW * numberOfBCnodes];
+      ny_dirTSE = &NormalY[TSE * numberOfBCnodes];
+      ny_dirTNW = &NormalY[TNW * numberOfBCnodes];
+      ny_dirBNE = &NormalY[BNE * numberOfBCnodes];
+      ny_dirBSW = &NormalY[BSW * numberOfBCnodes];
+      ny_dirBSE = &NormalY[BSE * numberOfBCnodes];
+      ny_dirBNW = &NormalY[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       real *nz_dirE,   *nz_dirW,   *nz_dirN,   *nz_dirS,   *nz_dirT,   *nz_dirB, 
               *nz_dirNE,  *nz_dirSW,  *nz_dirSE,  *nz_dirNW,  *nz_dirTE,  *nz_dirBW,
               *nz_dirBE,  *nz_dirTW,  *nz_dirTN,  *nz_dirBS,  *nz_dirBN,  *nz_dirTS,
               *nz_dirTNE, *nz_dirTSW, *nz_dirTSE, *nz_dirTNW, *nz_dirBNE, *nz_dirBSW,
               *nz_dirBSE, *nz_dirBNW; 
-      nz_dirE   = &NormalZ[dirE   *sizeQ];
-      nz_dirW   = &NormalZ[dirW   *sizeQ];
-      nz_dirN   = &NormalZ[dirN   *sizeQ];
-      nz_dirS   = &NormalZ[dirS   *sizeQ];
-      nz_dirT   = &NormalZ[dirT   *sizeQ];
-      nz_dirB   = &NormalZ[dirB   *sizeQ];
-      nz_dirNE  = &NormalZ[dirNE  *sizeQ];
-      nz_dirSW  = &NormalZ[dirSW  *sizeQ];
-      nz_dirSE  = &NormalZ[dirSE  *sizeQ];
-      nz_dirNW  = &NormalZ[dirNW  *sizeQ];
-      nz_dirTE  = &NormalZ[dirTE  *sizeQ];
-      nz_dirBW  = &NormalZ[dirBW  *sizeQ];
-      nz_dirBE  = &NormalZ[dirBE  *sizeQ];
-      nz_dirTW  = &NormalZ[dirTW  *sizeQ];
-      nz_dirTN  = &NormalZ[dirTN  *sizeQ];
-      nz_dirBS  = &NormalZ[dirBS  *sizeQ];
-      nz_dirBN  = &NormalZ[dirBN  *sizeQ];
-      nz_dirTS  = &NormalZ[dirTS  *sizeQ];
-      nz_dirTNE = &NormalZ[dirTNE *sizeQ];
-      nz_dirTSW = &NormalZ[dirTSW *sizeQ];
-      nz_dirTSE = &NormalZ[dirTSE *sizeQ];
-      nz_dirTNW = &NormalZ[dirTNW *sizeQ];
-      nz_dirBNE = &NormalZ[dirBNE *sizeQ];
-      nz_dirBSW = &NormalZ[dirBSW *sizeQ];
-      nz_dirBSE = &NormalZ[dirBSE *sizeQ];
-      nz_dirBNW = &NormalZ[dirBNW *sizeQ];
+      nz_dirE   = &NormalZ[E   * numberOfBCnodes];
+      nz_dirW   = &NormalZ[W   * numberOfBCnodes];
+      nz_dirN   = &NormalZ[N   * numberOfBCnodes];
+      nz_dirS   = &NormalZ[S   * numberOfBCnodes];
+      nz_dirT   = &NormalZ[T   * numberOfBCnodes];
+      nz_dirB   = &NormalZ[B   * numberOfBCnodes];
+      nz_dirNE  = &NormalZ[NE  * numberOfBCnodes];
+      nz_dirSW  = &NormalZ[SW  * numberOfBCnodes];
+      nz_dirSE  = &NormalZ[SE  * numberOfBCnodes];
+      nz_dirNW  = &NormalZ[NW  * numberOfBCnodes];
+      nz_dirTE  = &NormalZ[TE  * numberOfBCnodes];
+      nz_dirBW  = &NormalZ[BW  * numberOfBCnodes];
+      nz_dirBE  = &NormalZ[BE  * numberOfBCnodes];
+      nz_dirTW  = &NormalZ[TW  * numberOfBCnodes];
+      nz_dirTN  = &NormalZ[TN  * numberOfBCnodes];
+      nz_dirBS  = &NormalZ[BS  * numberOfBCnodes];
+      nz_dirBN  = &NormalZ[BN  * numberOfBCnodes];
+      nz_dirTS  = &NormalZ[TS  * numberOfBCnodes];
+      nz_dirTNE = &NormalZ[TNE * numberOfBCnodes];
+      nz_dirTSW = &NormalZ[TSW * numberOfBCnodes];
+      nz_dirTSE = &NormalZ[TSE * numberOfBCnodes];
+      nz_dirTNW = &NormalZ[TNW * numberOfBCnodes];
+      nz_dirBNE = &NormalZ[BNE * numberOfBCnodes];
+      nz_dirBSW = &NormalZ[BSW * numberOfBCnodes];
+      nz_dirBSE = &NormalZ[BSE * numberOfBCnodes];
+      nz_dirBNW = &NormalZ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -2273,37 +2274,37 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -2323,63 +2324,63 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real VeloX = vx1;
@@ -2401,11 +2402,11 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 
 	  //fac = fac * magS / (c1o3 * (one / om1 - c1o2));
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  //real *facAst = &QQ[dirZERO *sizeQ];
+	  //real *facAst = &QQ[REST * numberOfBCnodes];
 
 	  //fac = fac * alpha + facAst[k] * (one - alpha);
 	  //facAst[k] = fac;
-	  //(&QQ[dirZERO *sizeQ])[KQK] = fac;
+	  //(&QQ[REST * numberOfBCnodes])[KQK] = fac;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  ////real uk = sqrtf(vx1*vx1 + vx2*vx2 + vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2461,7 +2462,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 phi = fac / (q * fabs( nx_dirE[k]) + fac);
 		 VeloX *= phi;
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirW[k];
@@ -2475,7 +2476,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 phi = fac / (q * fabs(-nx_dirW[k]) + fac);
 		 VeloX *= phi;
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirN[k];
@@ -2489,7 +2490,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 phi = fac / (q * fabs( ny_dirN[k]) + fac);
 		 VeloY *= phi;
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirS[k];
@@ -2503,7 +2504,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 phi = fac / (q * fabs(-ny_dirS[k]) + fac);
 		 VeloY *= phi;
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirT[k];
@@ -2517,7 +2518,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 phi = fac / (q * fabs( nz_dirT[k]) + fac);
 		 VeloZ *= phi;
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirB[k];
@@ -2531,7 +2532,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 phi = fac / (q * fabs(-nz_dirB[k]) + fac);
 		 VeloZ *= phi;
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirNE[k];
@@ -2547,7 +2548,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirSW[k];
@@ -2563,7 +2564,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirSE[k];
@@ -2579,7 +2580,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirNW[k];
@@ -2595,7 +2596,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloY *= phi;
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTE[k];
@@ -2611,7 +2612,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBW[k];
@@ -2627,7 +2628,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBE[k];
@@ -2643,7 +2644,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTW[k];
@@ -2659,7 +2660,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloX *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTN[k];
@@ -2675,7 +2676,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBS[k];
@@ -2691,7 +2692,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBN[k];
@@ -2707,7 +2708,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTS[k];
@@ -2723,7 +2724,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTNE[k];
@@ -2741,7 +2742,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBSW[k];
@@ -2759,7 +2760,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBNE[k];
@@ -2777,7 +2778,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirTSW[k];
@@ -2795,7 +2796,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirTSE[k];
@@ -2813,7 +2814,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBNW[k];
@@ -2831,7 +2832,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBSE[k];
@@ -2849,7 +2850,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirTNW[k];
@@ -2867,7 +2868,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 		 VeloY *= phi;
 		 VeloZ *= phi;
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
       }
    }
 }
@@ -2915,7 +2916,7 @@ extern "C" __global__ void QSlipGeomDeviceComp27(real* DD,
 extern "C" __global__ void QSlipNormDeviceComp27(real* DD, 
 												 int* k_Q, 
 												 real* QQ,
-												 unsigned int sizeQ,
+												 unsigned int  numberOfBCnodes,
 												 real om1, 
 												 real* NormalX,
 												 real* NormalY,
@@ -2929,63 +2930,63 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2998,7 +2999,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ)
+   if(k< numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
@@ -3006,128 +3007,128 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       real *nx_dirE,   *nx_dirW,   *nx_dirN,   *nx_dirS,   *nx_dirT,   *nx_dirB, 
               *nx_dirNE,  *nx_dirSW,  *nx_dirSE,  *nx_dirNW,  *nx_dirTE,  *nx_dirBW,
               *nx_dirBE,  *nx_dirTW,  *nx_dirTN,  *nx_dirBS,  *nx_dirBN,  *nx_dirTS,
               *nx_dirTNE, *nx_dirTSW, *nx_dirTSE, *nx_dirTNW, *nx_dirBNE, *nx_dirBSW,
               *nx_dirBSE, *nx_dirBNW; 
-      nx_dirE   = &NormalX[dirE   *sizeQ];
-      nx_dirW   = &NormalX[dirW   *sizeQ];
-      nx_dirN   = &NormalX[dirN   *sizeQ];
-      nx_dirS   = &NormalX[dirS   *sizeQ];
-      nx_dirT   = &NormalX[dirT   *sizeQ];
-      nx_dirB   = &NormalX[dirB   *sizeQ];
-      nx_dirNE  = &NormalX[dirNE  *sizeQ];
-      nx_dirSW  = &NormalX[dirSW  *sizeQ];
-      nx_dirSE  = &NormalX[dirSE  *sizeQ];
-      nx_dirNW  = &NormalX[dirNW  *sizeQ];
-      nx_dirTE  = &NormalX[dirTE  *sizeQ];
-      nx_dirBW  = &NormalX[dirBW  *sizeQ];
-      nx_dirBE  = &NormalX[dirBE  *sizeQ];
-      nx_dirTW  = &NormalX[dirTW  *sizeQ];
-      nx_dirTN  = &NormalX[dirTN  *sizeQ];
-      nx_dirBS  = &NormalX[dirBS  *sizeQ];
-      nx_dirBN  = &NormalX[dirBN  *sizeQ];
-      nx_dirTS  = &NormalX[dirTS  *sizeQ];
-      nx_dirTNE = &NormalX[dirTNE *sizeQ];
-      nx_dirTSW = &NormalX[dirTSW *sizeQ];
-      nx_dirTSE = &NormalX[dirTSE *sizeQ];
-      nx_dirTNW = &NormalX[dirTNW *sizeQ];
-      nx_dirBNE = &NormalX[dirBNE *sizeQ];
-      nx_dirBSW = &NormalX[dirBSW *sizeQ];
-      nx_dirBSE = &NormalX[dirBSE *sizeQ];
-      nx_dirBNW = &NormalX[dirBNW *sizeQ];
+      nx_dirE   = &NormalX[E   * numberOfBCnodes];
+      nx_dirW   = &NormalX[W   * numberOfBCnodes];
+      nx_dirN   = &NormalX[N   * numberOfBCnodes];
+      nx_dirS   = &NormalX[S   * numberOfBCnodes];
+      nx_dirT   = &NormalX[T   * numberOfBCnodes];
+      nx_dirB   = &NormalX[B   * numberOfBCnodes];
+      nx_dirNE  = &NormalX[NE  * numberOfBCnodes];
+      nx_dirSW  = &NormalX[SW  * numberOfBCnodes];
+      nx_dirSE  = &NormalX[SE  * numberOfBCnodes];
+      nx_dirNW  = &NormalX[NW  * numberOfBCnodes];
+      nx_dirTE  = &NormalX[TE  * numberOfBCnodes];
+      nx_dirBW  = &NormalX[BW  * numberOfBCnodes];
+      nx_dirBE  = &NormalX[BE  * numberOfBCnodes];
+      nx_dirTW  = &NormalX[TW  * numberOfBCnodes];
+      nx_dirTN  = &NormalX[TN  * numberOfBCnodes];
+      nx_dirBS  = &NormalX[BS  * numberOfBCnodes];
+      nx_dirBN  = &NormalX[BN  * numberOfBCnodes];
+      nx_dirTS  = &NormalX[TS  * numberOfBCnodes];
+      nx_dirTNE = &NormalX[TNE * numberOfBCnodes];
+      nx_dirTSW = &NormalX[TSW * numberOfBCnodes];
+      nx_dirTSE = &NormalX[TSE * numberOfBCnodes];
+      nx_dirTNW = &NormalX[TNW * numberOfBCnodes];
+      nx_dirBNE = &NormalX[BNE * numberOfBCnodes];
+      nx_dirBSW = &NormalX[BSW * numberOfBCnodes];
+      nx_dirBSE = &NormalX[BSE * numberOfBCnodes];
+      nx_dirBNW = &NormalX[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       real *ny_dirE,   *ny_dirW,   *ny_dirN,   *ny_dirS,   *ny_dirT,   *ny_dirB, 
               *ny_dirNE,  *ny_dirSW,  *ny_dirSE,  *ny_dirNW,  *ny_dirTE,  *ny_dirBW,
               *ny_dirBE,  *ny_dirTW,  *ny_dirTN,  *ny_dirBS,  *ny_dirBN,  *ny_dirTS,
               *ny_dirTNE, *ny_dirTSW, *ny_dirTSE, *ny_dirTNW, *ny_dirBNE, *ny_dirBSW,
               *ny_dirBSE, *ny_dirBNW; 
-      ny_dirE   = &NormalY[dirE   *sizeQ];
-      ny_dirW   = &NormalY[dirW   *sizeQ];
-      ny_dirN   = &NormalY[dirN   *sizeQ];
-      ny_dirS   = &NormalY[dirS   *sizeQ];
-      ny_dirT   = &NormalY[dirT   *sizeQ];
-      ny_dirB   = &NormalY[dirB   *sizeQ];
-      ny_dirNE  = &NormalY[dirNE  *sizeQ];
-      ny_dirSW  = &NormalY[dirSW  *sizeQ];
-      ny_dirSE  = &NormalY[dirSE  *sizeQ];
-      ny_dirNW  = &NormalY[dirNW  *sizeQ];
-      ny_dirTE  = &NormalY[dirTE  *sizeQ];
-      ny_dirBW  = &NormalY[dirBW  *sizeQ];
-      ny_dirBE  = &NormalY[dirBE  *sizeQ];
-      ny_dirTW  = &NormalY[dirTW  *sizeQ];
-      ny_dirTN  = &NormalY[dirTN  *sizeQ];
-      ny_dirBS  = &NormalY[dirBS  *sizeQ];
-      ny_dirBN  = &NormalY[dirBN  *sizeQ];
-      ny_dirTS  = &NormalY[dirTS  *sizeQ];
-      ny_dirTNE = &NormalY[dirTNE *sizeQ];
-      ny_dirTSW = &NormalY[dirTSW *sizeQ];
-      ny_dirTSE = &NormalY[dirTSE *sizeQ];
-      ny_dirTNW = &NormalY[dirTNW *sizeQ];
-      ny_dirBNE = &NormalY[dirBNE *sizeQ];
-      ny_dirBSW = &NormalY[dirBSW *sizeQ];
-      ny_dirBSE = &NormalY[dirBSE *sizeQ];
-      ny_dirBNW = &NormalY[dirBNW *sizeQ];
+      ny_dirE   = &NormalY[E   * numberOfBCnodes];
+      ny_dirW   = &NormalY[W   * numberOfBCnodes];
+      ny_dirN   = &NormalY[N   * numberOfBCnodes];
+      ny_dirS   = &NormalY[S   * numberOfBCnodes];
+      ny_dirT   = &NormalY[T   * numberOfBCnodes];
+      ny_dirB   = &NormalY[B   * numberOfBCnodes];
+      ny_dirNE  = &NormalY[NE  * numberOfBCnodes];
+      ny_dirSW  = &NormalY[SW  * numberOfBCnodes];
+      ny_dirSE  = &NormalY[SE  * numberOfBCnodes];
+      ny_dirNW  = &NormalY[NW  * numberOfBCnodes];
+      ny_dirTE  = &NormalY[TE  * numberOfBCnodes];
+      ny_dirBW  = &NormalY[BW  * numberOfBCnodes];
+      ny_dirBE  = &NormalY[BE  * numberOfBCnodes];
+      ny_dirTW  = &NormalY[TW  * numberOfBCnodes];
+      ny_dirTN  = &NormalY[TN  * numberOfBCnodes];
+      ny_dirBS  = &NormalY[BS  * numberOfBCnodes];
+      ny_dirBN  = &NormalY[BN  * numberOfBCnodes];
+      ny_dirTS  = &NormalY[TS  * numberOfBCnodes];
+      ny_dirTNE = &NormalY[TNE * numberOfBCnodes];
+      ny_dirTSW = &NormalY[TSW * numberOfBCnodes];
+      ny_dirTSE = &NormalY[TSE * numberOfBCnodes];
+      ny_dirTNW = &NormalY[TNW * numberOfBCnodes];
+      ny_dirBNE = &NormalY[BNE * numberOfBCnodes];
+      ny_dirBSW = &NormalY[BSW * numberOfBCnodes];
+      ny_dirBSE = &NormalY[BSE * numberOfBCnodes];
+      ny_dirBNW = &NormalY[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       real *nz_dirE,   *nz_dirW,   *nz_dirN,   *nz_dirS,   *nz_dirT,   *nz_dirB, 
               *nz_dirNE,  *nz_dirSW,  *nz_dirSE,  *nz_dirNW,  *nz_dirTE,  *nz_dirBW,
               *nz_dirBE,  *nz_dirTW,  *nz_dirTN,  *nz_dirBS,  *nz_dirBN,  *nz_dirTS,
               *nz_dirTNE, *nz_dirTSW, *nz_dirTSE, *nz_dirTNW, *nz_dirBNE, *nz_dirBSW,
               *nz_dirBSE, *nz_dirBNW; 
-      nz_dirE   = &NormalZ[dirE   *sizeQ];
-      nz_dirW   = &NormalZ[dirW   *sizeQ];
-      nz_dirN   = &NormalZ[dirN   *sizeQ];
-      nz_dirS   = &NormalZ[dirS   *sizeQ];
-      nz_dirT   = &NormalZ[dirT   *sizeQ];
-      nz_dirB   = &NormalZ[dirB   *sizeQ];
-      nz_dirNE  = &NormalZ[dirNE  *sizeQ];
-      nz_dirSW  = &NormalZ[dirSW  *sizeQ];
-      nz_dirSE  = &NormalZ[dirSE  *sizeQ];
-      nz_dirNW  = &NormalZ[dirNW  *sizeQ];
-      nz_dirTE  = &NormalZ[dirTE  *sizeQ];
-      nz_dirBW  = &NormalZ[dirBW  *sizeQ];
-      nz_dirBE  = &NormalZ[dirBE  *sizeQ];
-      nz_dirTW  = &NormalZ[dirTW  *sizeQ];
-      nz_dirTN  = &NormalZ[dirTN  *sizeQ];
-      nz_dirBS  = &NormalZ[dirBS  *sizeQ];
-      nz_dirBN  = &NormalZ[dirBN  *sizeQ];
-      nz_dirTS  = &NormalZ[dirTS  *sizeQ];
-      nz_dirTNE = &NormalZ[dirTNE *sizeQ];
-      nz_dirTSW = &NormalZ[dirTSW *sizeQ];
-      nz_dirTSE = &NormalZ[dirTSE *sizeQ];
-      nz_dirTNW = &NormalZ[dirTNW *sizeQ];
-      nz_dirBNE = &NormalZ[dirBNE *sizeQ];
-      nz_dirBSW = &NormalZ[dirBSW *sizeQ];
-      nz_dirBSE = &NormalZ[dirBSE *sizeQ];
-      nz_dirBNW = &NormalZ[dirBNW *sizeQ];
+      nz_dirE   = &NormalZ[E   * numberOfBCnodes];
+      nz_dirW   = &NormalZ[W   * numberOfBCnodes];
+      nz_dirN   = &NormalZ[N   * numberOfBCnodes];
+      nz_dirS   = &NormalZ[S   * numberOfBCnodes];
+      nz_dirT   = &NormalZ[T   * numberOfBCnodes];
+      nz_dirB   = &NormalZ[B   * numberOfBCnodes];
+      nz_dirNE  = &NormalZ[NE  * numberOfBCnodes];
+      nz_dirSW  = &NormalZ[SW  * numberOfBCnodes];
+      nz_dirSE  = &NormalZ[SE  * numberOfBCnodes];
+      nz_dirNW  = &NormalZ[NW  * numberOfBCnodes];
+      nz_dirTE  = &NormalZ[TE  * numberOfBCnodes];
+      nz_dirBW  = &NormalZ[BW  * numberOfBCnodes];
+      nz_dirBE  = &NormalZ[BE  * numberOfBCnodes];
+      nz_dirTW  = &NormalZ[TW  * numberOfBCnodes];
+      nz_dirTN  = &NormalZ[TN  * numberOfBCnodes];
+      nz_dirBS  = &NormalZ[BS  * numberOfBCnodes];
+      nz_dirBN  = &NormalZ[BN  * numberOfBCnodes];
+      nz_dirTS  = &NormalZ[TS  * numberOfBCnodes];
+      nz_dirTNE = &NormalZ[TNE * numberOfBCnodes];
+      nz_dirTSW = &NormalZ[TSW * numberOfBCnodes];
+      nz_dirTSE = &NormalZ[TSE * numberOfBCnodes];
+      nz_dirTNW = &NormalZ[TNW * numberOfBCnodes];
+      nz_dirBNE = &NormalZ[BNE * numberOfBCnodes];
+      nz_dirBSW = &NormalZ[BSW * numberOfBCnodes];
+      nz_dirBSE = &NormalZ[BSE * numberOfBCnodes];
+      nz_dirBNW = &NormalZ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -3159,37 +3160,37 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -3209,63 +3210,63 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real VeloX = vx1;
@@ -3287,11 +3288,11 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 
 	  fac = fac * magS / (c1o3 * (c1o1 / om1 - c1o2));
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-	  real *facAst = &QQ[dirZERO *sizeQ];
+	  real *facAst = &QQ[REST * numberOfBCnodes];
 
 	  fac = fac * alpha + facAst[k] * (c1o1 - alpha);
 	  facAst[k] = fac;
-	  //(&QQ[dirZERO *sizeQ])[KQK] = fac;
+	  //(&QQ[REST * numberOfBCnodes])[KQK] = fac;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  ////real uk = sqrtf(vx1*vx1 + vx2*vx2 + vx3*vx3);
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3353,7 +3354,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q) - c2o27 * drho;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirW[k];
@@ -3368,7 +3369,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q) - c2o27 * drho;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirN[k];
@@ -3383,7 +3384,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q) - c2o27 * drho;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirS[k];
@@ -3398,7 +3399,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q) - c2o27 * drho;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirT[k];
@@ -3413,7 +3414,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q) - c2o27 * drho;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirB[k];
@@ -3428,7 +3429,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q) - c2o27 * drho;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q) - c2o27 * drho;
       }
 
       q = q_dirNE[k];
@@ -3444,7 +3445,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q) - c1o54 * drho;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirSW[k];
@@ -3460,7 +3461,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q) - c1o54 * drho;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirSE[k];
@@ -3476,7 +3477,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q) - c1o54 * drho;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirNW[k];
@@ -3492,7 +3493,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q) - c1o54 * drho;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTE[k];
@@ -3508,7 +3509,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q) - c1o54 * drho;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBW[k];
@@ -3524,7 +3525,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q) - c1o54 * drho;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBE[k];
@@ -3540,7 +3541,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q) - c1o54 * drho;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTW[k];
@@ -3556,7 +3557,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q) - c1o54 * drho;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTN[k];
@@ -3572,7 +3573,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q) - c1o54 * drho;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBS[k];
@@ -3588,7 +3589,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q) - c1o54 * drho;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirBN[k];
@@ -3604,7 +3605,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q) - c1o54 * drho;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTS[k];
@@ -3620,7 +3621,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q) - c1o54 * drho;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q) - c1o54 * drho;
       }
 
       q = q_dirTNE[k];
@@ -3639,7 +3640,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBSW[k];
@@ -3658,7 +3659,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBNE[k];
@@ -3677,7 +3678,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirTSW[k];
@@ -3696,7 +3697,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirTSE[k];
@@ -3715,7 +3716,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q) - c1o216 * drho;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBNW[k];
@@ -3734,7 +3735,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q) - c1o216 * drho;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirBSE[k];
@@ -3753,7 +3754,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q) - c1o216 * drho;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q) - c1o216 * drho;
       }
 
       q = q_dirTNW[k];
@@ -3772,7 +3773,7 @@ extern "C" __global__ void QSlipNormDeviceComp27(real* DD,
 		 //tangential = (tangential > one) ? one:tangential;
 		 q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q));
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q) - c1o216 * drho;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q) - c1o216 * drho;
       }
    }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu
index 129011139e14f3b49af7254253648b011b3c2ae4..6a966e46f7a2e21bd825801bbe6be1df207303d2 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu
@@ -41,10 +41,11 @@
 //=======================================================================================
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
 extern "C" __host__ __device__ __forceinline__ void iMEM(uint k, uint kN,
@@ -138,7 +139,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
 											   int* k_Q,
                                     int* k_N,
 											   real* QQ,
-                                    unsigned int sizeQ,
+                                    unsigned int numberOfBCnodes,
                                     real om1,
                                     real* turbViscosity,
                                     real* vx,
@@ -170,63 +171,63 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)//get right array of post coll f's
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    }
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index
@@ -239,7 +240,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ/*numberOfBCnodes*/)
+   if(k< numberOfBCnodes/*numberOfBCnodes*/)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB,
@@ -247,32 +248,32 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW;
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -307,38 +308,38 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];     //post-coll f's
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];     //post-coll f's
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW +
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]);
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]);
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -359,63 +360,63 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)      //get adress where incoming f's should be written to
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       }
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Compute incoming f's with zero wall velocity
@@ -694,49 +695,49 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirW])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ))/(c1o1+q);
+         (D.f[W])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ))/(c1o1+q);
          wallMomentumX += -(c6o1*c2o27*( VeloX     ))/(c1o1+q);
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirE])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ))/(c1o1+q);
+         (D.f[E])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c2o27*(-VeloX     ))/(c1o1+q);
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirS])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ))/(c1o1+q);
+         (D.f[S])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ))/(c1o1+q);
          wallMomentumY += - (c6o1*c2o27*( VeloY     ))/(c1o1+q);
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirN])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ))/(c1o1+q);
+         (D.f[N])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ))/(c1o1+q);
          wallMomentumY -=  -(c6o1*c2o27*(-VeloY     ))/(c1o1+q);
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirB])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ))/(c1o1+q);
+         (D.f[B])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c2o27*( VeloZ     ))/(c1o1+q);
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirT])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
+         (D.f[T])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
          wallMomentumZ -= -(c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSW])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
+         (D.f[SW])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
          wallMomentumX +=  -(c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
          wallMomentumY +=  -(c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
       }
@@ -744,7 +745,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNE])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
+         (D.f[NE])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
       }
@@ -752,7 +753,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNW])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
+         (D.f[NW])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
          wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
          wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
       }
@@ -760,7 +761,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSE])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
+         (D.f[SE])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
       }
@@ -768,7 +769,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBW])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
+         (D.f[BW])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
       }
@@ -776,7 +777,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTE])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
+         (D.f[TE])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
       }
@@ -784,7 +785,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTW])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
+         (D.f[TW])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
       }
@@ -792,7 +793,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBE])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
+         (D.f[BE])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
       }
@@ -800,7 +801,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBS])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
+         (D.f[BS])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
       }
@@ -808,7 +809,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTN])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
+         (D.f[TN])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
       }
@@ -816,7 +817,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTS])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
+         (D.f[TS])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
       }
@@ -824,7 +825,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBN])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
+         (D.f[BN])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
       }
@@ -832,7 +833,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSW])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
+         (D.f[BSW])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
@@ -841,7 +842,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNE])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
+         (D.f[TNE])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
@@ -850,7 +851,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSW])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
+         (D.f[TSW])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
@@ -859,7 +860,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNE])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
+         (D.f[BNE])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
@@ -868,7 +869,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNW])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
+         (D.f[BNW])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
@@ -877,7 +878,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSE])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
+         (D.f[TSE])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
@@ -886,7 +887,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNW])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
+         (D.f[TNW])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
          wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
          wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
          wallMomentumZ -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
@@ -895,7 +896,7 @@ extern "C" __global__ void QStressDeviceComp27(real* DD,
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSE])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
+         (D.f[BSE])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
          wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
          wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
          wallMomentumZ += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
@@ -916,7 +917,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
 											            int* k_Q,
                                              int* k_N,
                                              real* QQ,
-                                             unsigned int sizeQ,
+                                             unsigned int  numberOfBCnodes,
                                              real* vx,
                                              real* vy,
                                              real* vz,
@@ -945,63 +946,63 @@ extern "C" __global__ void BBStressDevice27( real* DD,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    }
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index
@@ -1014,7 +1015,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
    const unsigned k = nx*(ny*z + y) + x;
    //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ)
+   if(k< numberOfBCnodes)
    {
       ////////////////////////////////////////////////////////////////////////////////
       real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB,
@@ -1022,32 +1023,32 @@ extern "C" __global__ void BBStressDevice27( real* DD,
          *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
          *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
          *q_dirBSE, *q_dirBNW;
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1083,38 +1084,38 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
 
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW +
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]);
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]);
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -1132,63 +1133,63 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       }
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       real f_E_in,  f_W_in,  f_N_in,  f_S_in,  f_T_in,  f_B_in,   f_NE_in,  f_SW_in,  f_SE_in,  f_NW_in,  f_TE_in,  f_BW_in,  f_BE_in,
@@ -1440,49 +1441,49 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirW])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ));
+         (D.f[W])[kw] = f_W_in - (c6o1*c2o27*( VeloX     ));
          wallMomentumX += -(c6o1*c2o27*( VeloX     ));
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirE])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ));
+         (D.f[E])[ke] = f_E_in - (c6o1*c2o27*(-VeloX     ));
          wallMomentumX -= - (c6o1*c2o27*(-VeloX     ));
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirS])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ));
+         (D.f[S])[ks] = f_S_in - (c6o1*c2o27*( VeloY     ));
          wallMomentumY += - (c6o1*c2o27*( VeloY     ));
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirN])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ));
+         (D.f[N])[kn] = f_N_in - (c6o1*c2o27*(-VeloY     ));
          wallMomentumY -=  -(c6o1*c2o27*(-VeloY     ));
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirB])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ));
+         (D.f[B])[kb] = f_B_in - (c6o1*c2o27*( VeloZ     ));
          wallMomentumZ += - (c6o1*c2o27*( VeloZ     ));
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirT])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ));
+         (D.f[T])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ     ));
          wallMomentumZ -= -(c6o1*c2o27*(-VeloZ     ));
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSW])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY));
+         (D.f[SW])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY));
          wallMomentumX +=  -(c6o1*c1o54*(VeloX+VeloY));
          wallMomentumY +=  -(c6o1*c1o54*(VeloX+VeloY));
       }
@@ -1490,7 +1491,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNE])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY));
+         (D.f[NE])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY));
          wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY));
       }
@@ -1498,7 +1499,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirNW])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY));
+         (D.f[NW])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY));
          wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY));
          wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY));
       }
@@ -1506,7 +1507,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirSE])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY));
+         (D.f[SE])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY));
          wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY));
       }
@@ -1514,7 +1515,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBW])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ));
+         (D.f[BW])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ));
          wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ));
       }
@@ -1522,7 +1523,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTE])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ));
+         (D.f[TE])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ));
       }
@@ -1530,7 +1531,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTW])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ));
+         (D.f[TW])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ));
          wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ));
       }
@@ -1538,7 +1539,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBE])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ));
+         (D.f[BE])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ));
          wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ));
       }
@@ -1546,7 +1547,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBS])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ));
+         (D.f[BS])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ));
          wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ));
       }
@@ -1554,7 +1555,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTN])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ));
+         (D.f[TN])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ));
          wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ));
       }
@@ -1562,7 +1563,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTS])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ));
+         (D.f[TS])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ));
          wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ));
       }
@@ -1570,7 +1571,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBN])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ));
+         (D.f[BN])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ));
          wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ));
       }
@@ -1578,7 +1579,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSW])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
+         (D.f[BSW])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
          wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
          wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o216*( VeloX+VeloY+VeloZ));
@@ -1587,7 +1588,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNE])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
+         (D.f[TNE])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
          wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
          wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ));
@@ -1596,7 +1597,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSW])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
+         (D.f[TSW])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
          wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
          wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o216*( VeloX+VeloY-VeloZ));
@@ -1605,7 +1606,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNE])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
+         (D.f[BNE])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
          wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
          wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o216*(-VeloX-VeloY+VeloZ));
@@ -1614,7 +1615,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBNW])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
+         (D.f[BNW])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
          wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
          wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o216*( VeloX-VeloY+VeloZ));
@@ -1623,7 +1624,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTSE])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
+         (D.f[TSE])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
          wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
          wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ));
@@ -1632,7 +1633,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirTNW])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
+         (D.f[TNW])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
          wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
          wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
          wallMomentumZ -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ));
@@ -1641,7 +1642,7 @@ extern "C" __global__ void BBStressDevice27( real* DD,
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         (D.f[dirBSE])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
+         (D.f[BSE])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
          wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
          wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
          wallMomentumZ += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ));
diff --git a/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu
index 97d1afe99b39c3530fad5185c8ea4b98b2e647bf..9df139b63ab4d7e636c8e976ee92bb8d38b595c6 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu
@@ -8,10 +8,11 @@
 
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 /////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
@@ -21,7 +22,6 @@ extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
 	real* DD, 
 	int* k_Q, 
 	real* QQ,
-	uint sizeQ,
 	int numberOfBCnodes, 
 	real om1, 
 	uint* neighborX,
@@ -33,63 +33,63 @@ extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -114,32 +114,32 @@ extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       uint KQK  = k_Q[k];
@@ -174,37 +174,37 @@ extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -227,182 +227,182 @@ extern "C" __global__ void QVelDeviceCompThinWallsPartOne27(
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho + c9o2 * ( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq);
-		 (D.f[dirW])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W) - c6o1*c2o27*(VeloX)) / (c1o1 + q);
+		 (D.f[W])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W) - c6o1*c2o27*(VeloX)) / (c1o1 + q);
 	  }
 
 	  q = q_dirW[k];
 	  if (q >= c0o1 && q <= c1o1)
 	  {
 		  feq = c2o27* (drho + c9o2 * (-vx1)*(-vx1) * (c1o1 + drho) - cu_sq);
-		  (D.f[dirE])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E) - c6o1*c2o27*(-VeloX)) / (c1o1 + q);
+		  (D.f[E])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E) - c6o1*c2o27*(-VeloX)) / (c1o1 + q);
 	  }
 
 	  q = q_dirN[k];
 	  if (q >= c0o1 && q <= c1o1)
 	  {
 		  feq = c2o27* (drho + c9o2 * (vx2)*(vx2) * (c1o1 + drho) - cu_sq);
-		  (D.f[dirS])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S) - c6o1*c2o27*(VeloY)) / (c1o1 + q);
+		  (D.f[S])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S) - c6o1*c2o27*(VeloY)) / (c1o1 + q);
 	  }
 
 	  q = q_dirS[k];
 	  if (q >= c0o1 && q <= c1o1)
 	  {
 		  feq = c2o27* (drho + c9o2 * (-vx2)*(-vx2) * (c1o1 + drho) - cu_sq);
-		  (D.f[dirN])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N) - c6o1*c2o27*(-VeloY)) / (c1o1 + q);
+		  (D.f[N])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N) - c6o1*c2o27*(-VeloY)) / (c1o1 + q);
 	  }
 
 	  q = q_dirT[k];
 	  if (q >= c0o1 && q <= c1o1)
 	  {
 		  feq = c2o27* (drho + c9o2 * (vx3)*(vx3) * (c1o1 + drho) - cu_sq);
-		  (D.f[dirB])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B) - c6o1*c2o27*(VeloZ)) / (c1o1 + q);
+		  (D.f[B])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B) - c6o1*c2o27*(VeloZ)) / (c1o1 + q);
 	  }
 
 	  q = q_dirB[k];
 	  if (q >= c0o1 && q <= c1o1)
 	  {
 		  feq = c2o27* (drho + c9o2 * (-vx3)*(-vx3) * (c1o1 + drho) - cu_sq);
-		  (D.f[dirT])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T) - c6o1*c2o27*(-VeloZ)) / (c1o1 + q);
+		  (D.f[T])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T) - c6o1*c2o27*(-VeloZ)) / (c1o1 + q);
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * ( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq);
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*( VeloX+VeloY))/(c1o1+q);
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*( VeloX+VeloY))/(c1o1+q);
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq);
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * ( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq);
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq);
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * ( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * ( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*(-VeloY-VeloZ))/(c1o1+q);
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*(-VeloY-VeloZ))/(c1o1+q);
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho + c9o2 * (    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq);
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*(-VeloY+VeloZ))/(c1o1+q);
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*(-VeloY+VeloZ))/(c1o1+q);
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * ( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * (-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * ( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * (-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * ( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * (-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * ( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho + c9o2 * (-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
       }
    }
 }
@@ -451,8 +451,7 @@ extern "C" __global__ void QDeviceCompThinWallsPartOne27(
 	real* DD,
 	int* k_Q,
 	real* QQ,
-	unsigned int sizeQ,
-	int numberOfBCnodes,
+	unsigned int numberOfBCnodes,
 	real om1,
 	unsigned int* neighborX,
 	unsigned int* neighborY,
@@ -463,63 +462,63 @@ extern "C" __global__ void QDeviceCompThinWallsPartOne27(
 	Distributions27 D;
 	if (isEvenTimestep == true)
 	{
-		D.f[dirE] = &DD[dirE   *size_Mat];
-		D.f[dirW] = &DD[dirW   *size_Mat];
-		D.f[dirN] = &DD[dirN   *size_Mat];
-		D.f[dirS] = &DD[dirS   *size_Mat];
-		D.f[dirT] = &DD[dirT   *size_Mat];
-		D.f[dirB] = &DD[dirB   *size_Mat];
-		D.f[dirNE] = &DD[dirNE  *size_Mat];
-		D.f[dirSW] = &DD[dirSW  *size_Mat];
-		D.f[dirSE] = &DD[dirSE  *size_Mat];
-		D.f[dirNW] = &DD[dirNW  *size_Mat];
-		D.f[dirTE] = &DD[dirTE  *size_Mat];
-		D.f[dirBW] = &DD[dirBW  *size_Mat];
-		D.f[dirBE] = &DD[dirBE  *size_Mat];
-		D.f[dirTW] = &DD[dirTW  *size_Mat];
-		D.f[dirTN] = &DD[dirTN  *size_Mat];
-		D.f[dirBS] = &DD[dirBS  *size_Mat];
-		D.f[dirBN] = &DD[dirBN  *size_Mat];
-		D.f[dirTS] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW] = &DD[dirBNW *size_Mat];
+		D.f[E] = &DD[E   *size_Mat];
+		D.f[W] = &DD[W   *size_Mat];
+		D.f[N] = &DD[N   *size_Mat];
+		D.f[S] = &DD[S   *size_Mat];
+		D.f[T] = &DD[T   *size_Mat];
+		D.f[B] = &DD[B   *size_Mat];
+		D.f[NE] = &DD[NE  *size_Mat];
+		D.f[SW] = &DD[SW  *size_Mat];
+		D.f[SE] = &DD[SE  *size_Mat];
+		D.f[NW] = &DD[NW  *size_Mat];
+		D.f[TE] = &DD[TE  *size_Mat];
+		D.f[BW] = &DD[BW  *size_Mat];
+		D.f[BE] = &DD[BE  *size_Mat];
+		D.f[TW] = &DD[TW  *size_Mat];
+		D.f[TN] = &DD[TN  *size_Mat];
+		D.f[BS] = &DD[BS  *size_Mat];
+		D.f[BN] = &DD[BN  *size_Mat];
+		D.f[TS] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE] = &DD[TNE *size_Mat];
+		D.f[TSW] = &DD[TSW *size_Mat];
+		D.f[TSE] = &DD[TSE *size_Mat];
+		D.f[TNW] = &DD[TNW *size_Mat];
+		D.f[BNE] = &DD[BNE *size_Mat];
+		D.f[BSW] = &DD[BSW *size_Mat];
+		D.f[BSE] = &DD[BSE *size_Mat];
+		D.f[BNW] = &DD[BNW *size_Mat];
 	}
 	else
 	{
-		D.f[dirW] = &DD[dirE   *size_Mat];
-		D.f[dirE] = &DD[dirW   *size_Mat];
-		D.f[dirS] = &DD[dirN   *size_Mat];
-		D.f[dirN] = &DD[dirS   *size_Mat];
-		D.f[dirB] = &DD[dirT   *size_Mat];
-		D.f[dirT] = &DD[dirB   *size_Mat];
-		D.f[dirSW] = &DD[dirNE  *size_Mat];
-		D.f[dirNE] = &DD[dirSW  *size_Mat];
-		D.f[dirNW] = &DD[dirSE  *size_Mat];
-		D.f[dirSE] = &DD[dirNW  *size_Mat];
-		D.f[dirBW] = &DD[dirTE  *size_Mat];
-		D.f[dirTE] = &DD[dirBW  *size_Mat];
-		D.f[dirTW] = &DD[dirBE  *size_Mat];
-		D.f[dirBE] = &DD[dirTW  *size_Mat];
-		D.f[dirBS] = &DD[dirTN  *size_Mat];
-		D.f[dirTN] = &DD[dirBS  *size_Mat];
-		D.f[dirTS] = &DD[dirBN  *size_Mat];
-		D.f[dirBN] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW] = &DD[dirTSE *size_Mat];
+		D.f[W] = &DD[E   *size_Mat];
+		D.f[E] = &DD[W   *size_Mat];
+		D.f[S] = &DD[N   *size_Mat];
+		D.f[N] = &DD[S   *size_Mat];
+		D.f[B] = &DD[T   *size_Mat];
+		D.f[T] = &DD[B   *size_Mat];
+		D.f[SW] = &DD[NE  *size_Mat];
+		D.f[NE] = &DD[SW  *size_Mat];
+		D.f[NW] = &DD[SE  *size_Mat];
+		D.f[SE] = &DD[NW  *size_Mat];
+		D.f[BW] = &DD[TE  *size_Mat];
+		D.f[TE] = &DD[BW  *size_Mat];
+		D.f[TW] = &DD[BE  *size_Mat];
+		D.f[BE] = &DD[TW  *size_Mat];
+		D.f[BS] = &DD[TN  *size_Mat];
+		D.f[TN] = &DD[BS  *size_Mat];
+		D.f[TS] = &DD[BN  *size_Mat];
+		D.f[BN] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE] = &DD[BSW *size_Mat];
+		D.f[TSW] = &DD[BNE *size_Mat];
+		D.f[TSE] = &DD[BNW *size_Mat];
+		D.f[TNW] = &DD[BSE *size_Mat];
+		D.f[BNE] = &DD[TSW *size_Mat];
+		D.f[BSW] = &DD[TNE *size_Mat];
+		D.f[BSE] = &DD[TNW *size_Mat];
+		D.f[BNW] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -540,32 +539,32 @@ extern "C" __global__ void QDeviceCompThinWallsPartOne27(
 			*q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS,
 			*q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 			*q_dirBSE, *q_dirBNW;
-		q_dirE = &QQ[dirE   *sizeQ];
-		q_dirW = &QQ[dirW   *sizeQ];
-		q_dirN = &QQ[dirN   *sizeQ];
-		q_dirS = &QQ[dirS   *sizeQ];
-		q_dirT = &QQ[dirT   *sizeQ];
-		q_dirB = &QQ[dirB   *sizeQ];
-		q_dirNE = &QQ[dirNE  *sizeQ];
-		q_dirSW = &QQ[dirSW  *sizeQ];
-		q_dirSE = &QQ[dirSE  *sizeQ];
-		q_dirNW = &QQ[dirNW  *sizeQ];
-		q_dirTE = &QQ[dirTE  *sizeQ];
-		q_dirBW = &QQ[dirBW  *sizeQ];
-		q_dirBE = &QQ[dirBE  *sizeQ];
-		q_dirTW = &QQ[dirTW  *sizeQ];
-		q_dirTN = &QQ[dirTN  *sizeQ];
-		q_dirBS = &QQ[dirBS  *sizeQ];
-		q_dirBN = &QQ[dirBN  *sizeQ];
-		q_dirTS = &QQ[dirTS  *sizeQ];
-		q_dirTNE = &QQ[dirTNE *sizeQ];
-		q_dirTSW = &QQ[dirTSW *sizeQ];
-		q_dirTSE = &QQ[dirTSE *sizeQ];
-		q_dirTNW = &QQ[dirTNW *sizeQ];
-		q_dirBNE = &QQ[dirBNE *sizeQ];
-		q_dirBSW = &QQ[dirBSW *sizeQ];
-		q_dirBSE = &QQ[dirBSE *sizeQ];
-		q_dirBNW = &QQ[dirBNW *sizeQ];
+		q_dirE = &QQ[E   * numberOfBCnodes];
+		q_dirW = &QQ[W   * numberOfBCnodes];
+		q_dirN = &QQ[N   * numberOfBCnodes];
+		q_dirS = &QQ[S   * numberOfBCnodes];
+		q_dirT = &QQ[T   * numberOfBCnodes];
+		q_dirB = &QQ[B   * numberOfBCnodes];
+		q_dirNE = &QQ[NE  * numberOfBCnodes];
+		q_dirSW = &QQ[SW  * numberOfBCnodes];
+		q_dirSE = &QQ[SE  * numberOfBCnodes];
+		q_dirNW = &QQ[NW  * numberOfBCnodes];
+		q_dirTE = &QQ[TE  * numberOfBCnodes];
+		q_dirBW = &QQ[BW  * numberOfBCnodes];
+		q_dirBE = &QQ[BE  * numberOfBCnodes];
+		q_dirTW = &QQ[TW  * numberOfBCnodes];
+		q_dirTN = &QQ[TN  * numberOfBCnodes];
+		q_dirBS = &QQ[BS  * numberOfBCnodes];
+		q_dirBN = &QQ[BN  * numberOfBCnodes];
+		q_dirTS = &QQ[TS  * numberOfBCnodes];
+		q_dirTNE = &QQ[TNE * numberOfBCnodes];
+		q_dirTSW = &QQ[TSW * numberOfBCnodes];
+		q_dirTSE = &QQ[TSE * numberOfBCnodes];
+		q_dirTNW = &QQ[TNW * numberOfBCnodes];
+		q_dirBNE = &QQ[BNE * numberOfBCnodes];
+		q_dirBSW = &QQ[BSW * numberOfBCnodes];
+		q_dirBSE = &QQ[BSE * numberOfBCnodes];
+		q_dirBNW = &QQ[BNW * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK = k_Q[k];
@@ -600,37 +599,37 @@ extern "C" __global__ void QDeviceCompThinWallsPartOne27(
 		real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE,
 			f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-		f_W = (D.f[dirE])[ke];
-		f_E = (D.f[dirW])[kw];
-		f_S = (D.f[dirN])[kn];
-		f_N = (D.f[dirS])[ks];
-		f_B = (D.f[dirT])[kt];
-		f_T = (D.f[dirB])[kb];
-		f_SW = (D.f[dirNE])[kne];
-		f_NE = (D.f[dirSW])[ksw];
-		f_NW = (D.f[dirSE])[kse];
-		f_SE = (D.f[dirNW])[knw];
-		f_BW = (D.f[dirTE])[kte];
-		f_TE = (D.f[dirBW])[kbw];
-		f_TW = (D.f[dirBE])[kbe];
-		f_BE = (D.f[dirTW])[ktw];
-		f_BS = (D.f[dirTN])[ktn];
-		f_TN = (D.f[dirBS])[kbs];
-		f_TS = (D.f[dirBN])[kbn];
-		f_BN = (D.f[dirTS])[kts];
-		f_BSW = (D.f[dirTNE])[ktne];
-		f_BNE = (D.f[dirTSW])[ktsw];
-		f_BNW = (D.f[dirTSE])[ktse];
-		f_BSE = (D.f[dirTNW])[ktnw];
-		f_TSW = (D.f[dirBNE])[kbne];
-		f_TNE = (D.f[dirBSW])[kbsw];
-		f_TNW = (D.f[dirBSE])[kbse];
-		f_TSE = (D.f[dirBNW])[kbnw];
+		f_W = (D.f[E])[ke];
+		f_E = (D.f[W])[kw];
+		f_S = (D.f[N])[kn];
+		f_N = (D.f[S])[ks];
+		f_B = (D.f[T])[kt];
+		f_T = (D.f[B])[kb];
+		f_SW = (D.f[NE])[kne];
+		f_NE = (D.f[SW])[ksw];
+		f_NW = (D.f[SE])[kse];
+		f_SE = (D.f[NW])[knw];
+		f_BW = (D.f[TE])[kte];
+		f_TE = (D.f[BW])[kbw];
+		f_TW = (D.f[BE])[kbe];
+		f_BE = (D.f[TW])[ktw];
+		f_BS = (D.f[TN])[ktn];
+		f_TN = (D.f[BS])[kbs];
+		f_TS = (D.f[BN])[kbn];
+		f_BN = (D.f[TS])[kts];
+		f_BSW = (D.f[TNE])[ktne];
+		f_BNE = (D.f[TSW])[ktsw];
+		f_BNW = (D.f[TSE])[ktse];
+		f_BSE = (D.f[TNW])[ktnw];
+		f_TSW = (D.f[BNE])[kbne];
+		f_TNE = (D.f[BSW])[kbsw];
+		f_TNW = (D.f[BSE])[kbse];
+		f_TSE = (D.f[BNW])[kbnw];
 		////////////////////////////////////////////////////////////////////////////////
 		real vx1, vx2, vx3, drho, feq, q;
 		drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 			f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW +
-			f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]);
+			f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]);
 
 		vx1 = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
 			((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) +
@@ -653,182 +652,182 @@ extern "C" __global__ void QDeviceCompThinWallsPartOne27(
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c2o27* (drho + c9o2*(vx1)*(vx1) * (c1o1 + drho) - cu_sq);
-			(D.f[dirW])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W)) / (c1o1 + q);
+			(D.f[W])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W)) / (c1o1 + q);
 		}
 
 		q = q_dirW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c2o27* (drho + c9o2*(-vx1)*(-vx1) * (c1o1 + drho) - cu_sq);
-			(D.f[dirE])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E)) / (c1o1 + q);
+			(D.f[E])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E)) / (c1o1 + q);
 		}
 
 		q = q_dirN[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c2o27* (drho + c9o2*(vx2)*(vx2) * (c1o1 + drho) - cu_sq);
-			(D.f[dirS])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S)) / (c1o1 + q);
+			(D.f[S])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S)) / (c1o1 + q);
 		}
 
 		q = q_dirS[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c2o27* (drho + c9o2*(-vx2)*(-vx2) * (c1o1 + drho) - cu_sq);
-			(D.f[dirN])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N)) / (c1o1 + q);
+			(D.f[N])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N)) / (c1o1 + q);
 		}
 
 		q = q_dirT[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c2o27* (drho + c9o2*(vx3)*(vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirB])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B)) / (c1o1 + q);
+			(D.f[B])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B)) / (c1o1 + q);
 		}
 
 		q = q_dirB[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c2o27* (drho + c9o2*(-vx3)*(-vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirT])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T)) / (c1o1 + q);
+			(D.f[T])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T)) / (c1o1 + q);
 		}
 
 		q = q_dirNE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(vx1 + vx2)*(vx1 + vx2) * (c1o1 + drho) - cu_sq);
-			(D.f[dirSW])[ksw] = (c1o1 - q) / (c1o1 + q)*(f_NE - f_SW + (f_NE + f_SW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NE + f_SW)) / (c1o1 + q);
+			(D.f[SW])[ksw] = (c1o1 - q) / (c1o1 + q)*(f_NE - f_SW + (f_NE + f_SW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NE + f_SW)) / (c1o1 + q);
 		}
 
 		q = q_dirSW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(-vx1 - vx2)*(-vx1 - vx2) * (c1o1 + drho) - cu_sq);
-			(D.f[dirNE])[kne] = (c1o1 - q) / (c1o1 + q)*(f_SW - f_NE + (f_SW + f_NE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SW + f_NE)) / (c1o1 + q);
+			(D.f[NE])[kne] = (c1o1 - q) / (c1o1 + q)*(f_SW - f_NE + (f_SW + f_NE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SW + f_NE)) / (c1o1 + q);
 		}
 
 		q = q_dirSE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(vx1 - vx2)*(vx1 - vx2) * (c1o1 + drho) - cu_sq);
-			(D.f[dirNW])[knw] = (c1o1 - q) / (c1o1 + q)*(f_SE - f_NW + (f_SE + f_NW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SE + f_NW)) / (c1o1 + q);
+			(D.f[NW])[knw] = (c1o1 - q) / (c1o1 + q)*(f_SE - f_NW + (f_SE + f_NW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SE + f_NW)) / (c1o1 + q);
 		}
 
 		q = q_dirNW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(-vx1 + vx2)*(-vx1 + vx2) * (c1o1 + drho) - cu_sq);
-			(D.f[dirSE])[kse] = (c1o1 - q) / (c1o1 + q)*(f_NW - f_SE + (f_NW + f_SE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NW + f_SE)) / (c1o1 + q);
+			(D.f[SE])[kse] = (c1o1 - q) / (c1o1 + q)*(f_NW - f_SE + (f_NW + f_SE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NW + f_SE)) / (c1o1 + q);
 		}
 
 		q = q_dirTE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(vx1 + vx3)*(vx1 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBW])[kbw] = (c1o1 - q) / (c1o1 + q)*(f_TE - f_BW + (f_TE + f_BW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TE + f_BW)) / (c1o1 + q);
+			(D.f[BW])[kbw] = (c1o1 - q) / (c1o1 + q)*(f_TE - f_BW + (f_TE + f_BW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TE + f_BW)) / (c1o1 + q);
 		}
 
 		q = q_dirBW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(-vx1 - vx3)*(-vx1 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTE])[kte] = (c1o1 - q) / (c1o1 + q)*(f_BW - f_TE + (f_BW + f_TE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BW + f_TE)) / (c1o1 + q);
+			(D.f[TE])[kte] = (c1o1 - q) / (c1o1 + q)*(f_BW - f_TE + (f_BW + f_TE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BW + f_TE)) / (c1o1 + q);
 		}
 
 		q = q_dirBE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(vx1 - vx3)*(vx1 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTW])[ktw] = (c1o1 - q) / (c1o1 + q)*(f_BE - f_TW + (f_BE + f_TW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BE + f_TW)) / (c1o1 + q);
+			(D.f[TW])[ktw] = (c1o1 - q) / (c1o1 + q)*(f_BE - f_TW + (f_BE + f_TW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BE + f_TW)) / (c1o1 + q);
 		}
 
 		q = q_dirTW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(-vx1 + vx3)*(-vx1 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBE])[kbe] = (c1o1 - q) / (c1o1 + q)*(f_TW - f_BE + (f_TW + f_BE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TW + f_BE)) / (c1o1 + q);
+			(D.f[BE])[kbe] = (c1o1 - q) / (c1o1 + q)*(f_TW - f_BE + (f_TW + f_BE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TW + f_BE)) / (c1o1 + q);
 		}
 
 		q = q_dirTN[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(vx2 + vx3)*(vx2 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBS])[kbs] = (c1o1 - q) / (c1o1 + q)*(f_TN - f_BS + (f_TN + f_BS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TN + f_BS)) / (c1o1 + q);
+			(D.f[BS])[kbs] = (c1o1 - q) / (c1o1 + q)*(f_TN - f_BS + (f_TN + f_BS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TN + f_BS)) / (c1o1 + q);
 		}
 
 		q = q_dirBS[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(-vx2 - vx3)*(-vx2 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTN])[ktn] = (c1o1 - q) / (c1o1 + q)*(f_BS - f_TN + (f_BS + f_TN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BS + f_TN)) / (c1o1 + q);
+			(D.f[TN])[ktn] = (c1o1 - q) / (c1o1 + q)*(f_BS - f_TN + (f_BS + f_TN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BS + f_TN)) / (c1o1 + q);
 		}
 
 		q = q_dirBN[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(vx2 - vx3)*(vx2 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTS])[kts] = (c1o1 - q) / (c1o1 + q)*(f_BN - f_TS + (f_BN + f_TS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BN + f_TS)) / (c1o1 + q);
+			(D.f[TS])[kts] = (c1o1 - q) / (c1o1 + q)*(f_BN - f_TS + (f_BN + f_TS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BN + f_TS)) / (c1o1 + q);
 		}
 
 		q = q_dirTS[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o54* (drho + c9o2*(-vx2 + vx3)*(-vx2 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBN])[kbn] = (c1o1 - q) / (c1o1 + q)*(f_TS - f_BN + (f_TS + f_BN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TS + f_BN)) / (c1o1 + q);
+			(D.f[BN])[kbn] = (c1o1 - q) / (c1o1 + q)*(f_TS - f_BN + (f_TS + f_BN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TS + f_BN)) / (c1o1 + q);
 		}
 
 		q = q_dirTNE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBSW])[kbsw] = (c1o1 - q) / (c1o1 + q)*(f_TNE - f_BSW + (f_TNE + f_BSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNE + f_BSW)) / (c1o1 + q);
+			(D.f[BSW])[kbsw] = (c1o1 - q) / (c1o1 + q)*(f_TNE - f_BSW + (f_TNE + f_BSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNE + f_BSW)) / (c1o1 + q);
 		}
 
 		q = q_dirBSW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTNE])[ktne] = (c1o1 - q) / (c1o1 + q)*(f_BSW - f_TNE + (f_BSW + f_TNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSW + f_TNE)) / (c1o1 + q);
+			(D.f[TNE])[ktne] = (c1o1 - q) / (c1o1 + q)*(f_BSW - f_TNE + (f_BSW + f_TNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSW + f_TNE)) / (c1o1 + q);
 		}
 
 		q = q_dirBNE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTSW])[ktsw] = (c1o1 - q) / (c1o1 + q)*(f_BNE - f_TSW + (f_BNE + f_TSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNE + f_TSW)) / (c1o1 + q);
+			(D.f[TSW])[ktsw] = (c1o1 - q) / (c1o1 + q)*(f_BNE - f_TSW + (f_BNE + f_TSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNE + f_TSW)) / (c1o1 + q);
 		}
 
 		q = q_dirTSW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBNE])[kbne] = (c1o1 - q) / (c1o1 + q)*(f_TSW - f_BNE + (f_TSW + f_BNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSW + f_BNE)) / (c1o1 + q);
+			(D.f[BNE])[kbne] = (c1o1 - q) / (c1o1 + q)*(f_TSW - f_BNE + (f_TSW + f_BNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSW + f_BNE)) / (c1o1 + q);
 		}
 
 		q = q_dirTSE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBNW])[kbnw] = (c1o1 - q) / (c1o1 + q)*(f_TSE - f_BNW + (f_TSE + f_BNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSE + f_BNW)) / (c1o1 + q);
+			(D.f[BNW])[kbnw] = (c1o1 - q) / (c1o1 + q)*(f_TSE - f_BNW + (f_TSE + f_BNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSE + f_BNW)) / (c1o1 + q);
 		}
 
 		q = q_dirBNW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTSE])[ktse] = (c1o1 - q) / (c1o1 + q)*(f_BNW - f_TSE + (f_BNW + f_TSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNW + f_TSE)) / (c1o1 + q);
+			(D.f[TSE])[ktse] = (c1o1 - q) / (c1o1 + q)*(f_BNW - f_TSE + (f_BNW + f_TSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNW + f_TSE)) / (c1o1 + q);
 		}
 
 		q = q_dirBSE[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirTNW])[ktnw] = (c1o1 - q) / (c1o1 + q)*(f_BSE - f_TNW + (f_BSE + f_TNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSE + f_TNW)) / (c1o1 + q);
+			(D.f[TNW])[ktnw] = (c1o1 - q) / (c1o1 + q)*(f_BSE - f_TNW + (f_BSE + f_TNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSE + f_TNW)) / (c1o1 + q);
 		}
 
 		q = q_dirTNW[k];
 		if (q >= c0o1 && q <= c1o1)
 		{
 			feq = c1o216*(drho + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) * (c1o1 + drho) - cu_sq);
-			(D.f[dirBSE])[kbse] = (c1o1 - q) / (c1o1 + q)*(f_TNW - f_BSE + (f_TNW + f_BSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNW + f_BSE)) / (c1o1 + q);
+			(D.f[BSE])[kbse] = (c1o1 - q) / (c1o1 + q)*(f_TNW - f_BSE + (f_TNW + f_BSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNW + f_BSE)) / (c1o1 + q);
 		}
 	}
 }
@@ -877,8 +876,7 @@ extern "C" __global__ void QThinWallsPartTwo27(
 	real* DD, 
 	int* k_Q, 
 	real* QQ,
-	uint sizeQ,
-	int numberOfBCnodes, 
+	uint numberOfBCnodes, 
 	uint* geom,
 	uint* neighborX,
 	uint* neighborY,
@@ -906,32 +904,32 @@ extern "C" __global__ void QThinWallsPartTwo27(
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       uint KQK  = k_Q[k];
@@ -982,123 +980,123 @@ extern "C" __global__ void QThinWallsPartTwo27(
 	  Distributions27 D, DN;
 	  if (isEvenTimestep == true)
 	  {
-		  D.f[dirE] = &DD[dirE   *size_Mat];
-		  D.f[dirW] = &DD[dirW   *size_Mat];
-		  D.f[dirN] = &DD[dirN   *size_Mat];
-		  D.f[dirS] = &DD[dirS   *size_Mat];
-		  D.f[dirT] = &DD[dirT   *size_Mat];
-		  D.f[dirB] = &DD[dirB   *size_Mat];
-		  D.f[dirNE] = &DD[dirNE  *size_Mat];
-		  D.f[dirSW] = &DD[dirSW  *size_Mat];
-		  D.f[dirSE] = &DD[dirSE  *size_Mat];
-		  D.f[dirNW] = &DD[dirNW  *size_Mat];
-		  D.f[dirTE] = &DD[dirTE  *size_Mat];
-		  D.f[dirBW] = &DD[dirBW  *size_Mat];
-		  D.f[dirBE] = &DD[dirBE  *size_Mat];
-		  D.f[dirTW] = &DD[dirTW  *size_Mat];
-		  D.f[dirTN] = &DD[dirTN  *size_Mat];
-		  D.f[dirBS] = &DD[dirBS  *size_Mat];
-		  D.f[dirBN] = &DD[dirBN  *size_Mat];
-		  D.f[dirTS] = &DD[dirTS  *size_Mat];
-		  D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		  D.f[dirTNE] = &DD[dirTNE *size_Mat];
-		  D.f[dirTSW] = &DD[dirTSW *size_Mat];
-		  D.f[dirTSE] = &DD[dirTSE *size_Mat];
-		  D.f[dirTNW] = &DD[dirTNW *size_Mat];
-		  D.f[dirBNE] = &DD[dirBNE *size_Mat];
-		  D.f[dirBSW] = &DD[dirBSW *size_Mat];
-		  D.f[dirBSE] = &DD[dirBSE *size_Mat];
-		  D.f[dirBNW] = &DD[dirBNW *size_Mat];
+		  D.f[E] = &DD[E   *size_Mat];
+		  D.f[W] = &DD[W   *size_Mat];
+		  D.f[N] = &DD[N   *size_Mat];
+		  D.f[S] = &DD[S   *size_Mat];
+		  D.f[T] = &DD[T   *size_Mat];
+		  D.f[B] = &DD[B   *size_Mat];
+		  D.f[NE] = &DD[NE  *size_Mat];
+		  D.f[SW] = &DD[SW  *size_Mat];
+		  D.f[SE] = &DD[SE  *size_Mat];
+		  D.f[NW] = &DD[NW  *size_Mat];
+		  D.f[TE] = &DD[TE  *size_Mat];
+		  D.f[BW] = &DD[BW  *size_Mat];
+		  D.f[BE] = &DD[BE  *size_Mat];
+		  D.f[TW] = &DD[TW  *size_Mat];
+		  D.f[TN] = &DD[TN  *size_Mat];
+		  D.f[BS] = &DD[BS  *size_Mat];
+		  D.f[BN] = &DD[BN  *size_Mat];
+		  D.f[TS] = &DD[TS  *size_Mat];
+		  D.f[REST] = &DD[REST*size_Mat];
+		  D.f[TNE] = &DD[TNE *size_Mat];
+		  D.f[TSW] = &DD[TSW *size_Mat];
+		  D.f[TSE] = &DD[TSE *size_Mat];
+		  D.f[TNW] = &DD[TNW *size_Mat];
+		  D.f[BNE] = &DD[BNE *size_Mat];
+		  D.f[BSW] = &DD[BSW *size_Mat];
+		  D.f[BSE] = &DD[BSE *size_Mat];
+		  D.f[BNW] = &DD[BNW *size_Mat];
 	  }
 	  else
 	  {
-		  D.f[dirW] = &DD[dirE   *size_Mat];
-		  D.f[dirE] = &DD[dirW   *size_Mat];
-		  D.f[dirS] = &DD[dirN   *size_Mat];
-		  D.f[dirN] = &DD[dirS   *size_Mat];
-		  D.f[dirB] = &DD[dirT   *size_Mat];
-		  D.f[dirT] = &DD[dirB   *size_Mat];
-		  D.f[dirSW] = &DD[dirNE  *size_Mat];
-		  D.f[dirNE] = &DD[dirSW  *size_Mat];
-		  D.f[dirNW] = &DD[dirSE  *size_Mat];
-		  D.f[dirSE] = &DD[dirNW  *size_Mat];
-		  D.f[dirBW] = &DD[dirTE  *size_Mat];
-		  D.f[dirTE] = &DD[dirBW  *size_Mat];
-		  D.f[dirTW] = &DD[dirBE  *size_Mat];
-		  D.f[dirBE] = &DD[dirTW  *size_Mat];
-		  D.f[dirBS] = &DD[dirTN  *size_Mat];
-		  D.f[dirTN] = &DD[dirBS  *size_Mat];
-		  D.f[dirTS] = &DD[dirBN  *size_Mat];
-		  D.f[dirBN] = &DD[dirTS  *size_Mat];
-		  D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		  D.f[dirTNE] = &DD[dirBSW *size_Mat];
-		  D.f[dirTSW] = &DD[dirBNE *size_Mat];
-		  D.f[dirTSE] = &DD[dirBNW *size_Mat];
-		  D.f[dirTNW] = &DD[dirBSE *size_Mat];
-		  D.f[dirBNE] = &DD[dirTSW *size_Mat];
-		  D.f[dirBSW] = &DD[dirTNE *size_Mat];
-		  D.f[dirBSE] = &DD[dirTNW *size_Mat];
-		  D.f[dirBNW] = &DD[dirTSE *size_Mat];
+		  D.f[W] = &DD[E   *size_Mat];
+		  D.f[E] = &DD[W   *size_Mat];
+		  D.f[S] = &DD[N   *size_Mat];
+		  D.f[N] = &DD[S   *size_Mat];
+		  D.f[B] = &DD[T   *size_Mat];
+		  D.f[T] = &DD[B   *size_Mat];
+		  D.f[SW] = &DD[NE  *size_Mat];
+		  D.f[NE] = &DD[SW  *size_Mat];
+		  D.f[NW] = &DD[SE  *size_Mat];
+		  D.f[SE] = &DD[NW  *size_Mat];
+		  D.f[BW] = &DD[TE  *size_Mat];
+		  D.f[TE] = &DD[BW  *size_Mat];
+		  D.f[TW] = &DD[BE  *size_Mat];
+		  D.f[BE] = &DD[TW  *size_Mat];
+		  D.f[BS] = &DD[TN  *size_Mat];
+		  D.f[TN] = &DD[BS  *size_Mat];
+		  D.f[TS] = &DD[BN  *size_Mat];
+		  D.f[BN] = &DD[TS  *size_Mat];
+		  D.f[REST] = &DD[REST*size_Mat];
+		  D.f[TNE] = &DD[BSW *size_Mat];
+		  D.f[TSW] = &DD[BNE *size_Mat];
+		  D.f[TSE] = &DD[BNW *size_Mat];
+		  D.f[TNW] = &DD[BSE *size_Mat];
+		  D.f[BNE] = &DD[TSW *size_Mat];
+		  D.f[BSW] = &DD[TNE *size_Mat];
+		  D.f[BSE] = &DD[TNW *size_Mat];
+		  D.f[BNW] = &DD[TSE *size_Mat];
 	  }
 	  if (isEvenTimestep==false)
       {
-         DN.f[dirE   ] = &DD[dirE   *size_Mat];
-         DN.f[dirW   ] = &DD[dirW   *size_Mat];
-         DN.f[dirN   ] = &DD[dirN   *size_Mat];
-         DN.f[dirS   ] = &DD[dirS   *size_Mat];
-         DN.f[dirT   ] = &DD[dirT   *size_Mat];
-         DN.f[dirB   ] = &DD[dirB   *size_Mat];
-         DN.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         DN.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         DN.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         DN.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         DN.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         DN.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         DN.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         DN.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         DN.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         DN.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         DN.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         DN.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         DN.f[dirZERO] = &DD[dirZERO*size_Mat];
-         DN.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         DN.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         DN.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         DN.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         DN.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         DN.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         DN.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         DN.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         DN.f[E   ] = &DD[E   *size_Mat];
+         DN.f[W   ] = &DD[W   *size_Mat];
+         DN.f[N   ] = &DD[N   *size_Mat];
+         DN.f[S   ] = &DD[S   *size_Mat];
+         DN.f[T   ] = &DD[T   *size_Mat];
+         DN.f[B   ] = &DD[B   *size_Mat];
+         DN.f[NE  ] = &DD[NE  *size_Mat];
+         DN.f[SW  ] = &DD[SW  *size_Mat];
+         DN.f[SE  ] = &DD[SE  *size_Mat];
+         DN.f[NW  ] = &DD[NW  *size_Mat];
+         DN.f[TE  ] = &DD[TE  *size_Mat];
+         DN.f[BW  ] = &DD[BW  *size_Mat];
+         DN.f[BE  ] = &DD[BE  *size_Mat];
+         DN.f[TW  ] = &DD[TW  *size_Mat];
+         DN.f[TN  ] = &DD[TN  *size_Mat];
+         DN.f[BS  ] = &DD[BS  *size_Mat];
+         DN.f[BN  ] = &DD[BN  *size_Mat];
+         DN.f[TS  ] = &DD[TS  *size_Mat];
+         DN.f[REST] = &DD[REST*size_Mat];
+         DN.f[TNE ] = &DD[TNE *size_Mat];
+         DN.f[TSW ] = &DD[TSW *size_Mat];
+         DN.f[TSE ] = &DD[TSE *size_Mat];
+         DN.f[TNW ] = &DD[TNW *size_Mat];
+         DN.f[BNE ] = &DD[BNE *size_Mat];
+         DN.f[BSW ] = &DD[BSW *size_Mat];
+         DN.f[BSE ] = &DD[BSE *size_Mat];
+         DN.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         DN.f[dirW   ] = &DD[dirE   *size_Mat];
-         DN.f[dirE   ] = &DD[dirW   *size_Mat];
-         DN.f[dirS   ] = &DD[dirN   *size_Mat];
-         DN.f[dirN   ] = &DD[dirS   *size_Mat];
-         DN.f[dirB   ] = &DD[dirT   *size_Mat];
-         DN.f[dirT   ] = &DD[dirB   *size_Mat];
-         DN.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         DN.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         DN.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         DN.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         DN.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         DN.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         DN.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         DN.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         DN.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         DN.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         DN.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         DN.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         DN.f[dirZERO] = &DD[dirZERO*size_Mat];
-         DN.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         DN.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         DN.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         DN.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         DN.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         DN.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         DN.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         DN.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         DN.f[W   ] = &DD[E   *size_Mat];
+         DN.f[E   ] = &DD[W   *size_Mat];
+         DN.f[S   ] = &DD[N   *size_Mat];
+         DN.f[N   ] = &DD[S   *size_Mat];
+         DN.f[B   ] = &DD[T   *size_Mat];
+         DN.f[T   ] = &DD[B   *size_Mat];
+         DN.f[SW  ] = &DD[NE  *size_Mat];
+         DN.f[NE  ] = &DD[SW  *size_Mat];
+         DN.f[NW  ] = &DD[SE  *size_Mat];
+         DN.f[SE  ] = &DD[NW  *size_Mat];
+         DN.f[BW  ] = &DD[TE  *size_Mat];
+         DN.f[TE  ] = &DD[BW  *size_Mat];
+         DN.f[TW  ] = &DD[BE  *size_Mat];
+         DN.f[BE  ] = &DD[TW  *size_Mat];
+         DN.f[BS  ] = &DD[TN  *size_Mat];
+         DN.f[TN  ] = &DD[BS  *size_Mat];
+         DN.f[TS  ] = &DD[BN  *size_Mat];
+         DN.f[BN  ] = &DD[TS  *size_Mat];
+         DN.f[REST] = &DD[REST*size_Mat];
+         DN.f[TNE ] = &DD[BSW *size_Mat];
+         DN.f[TSW ] = &DD[BNE *size_Mat];
+         DN.f[TSE ] = &DD[BNW *size_Mat];
+         DN.f[TNW ] = &DD[BSE *size_Mat];
+         DN.f[BNE ] = &DD[TSW *size_Mat];
+         DN.f[BSW ] = &DD[TNE *size_Mat];
+         DN.f[BSE ] = &DD[TNW *size_Mat];
+         DN.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //directions allways exchange
@@ -1108,32 +1106,32 @@ extern "C" __global__ void QThinWallsPartTwo27(
 	  //( 1  1  1) ( 1  0  0) ( 0  1  0) ( 0  0  1) ( 1  1  0) ( 1  0  1) ( 0  1  1) (-1 -1  1) (-1  1 -1) ( 1 -1 -1) (-1  1  0) (-1  0  1) ( 0 -1  1)
 	  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real q, tmp;
-      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1){ if (geom[kw  ] < GEO_FLUID){tmp = (DN.f[dirW  ])[kw  ]; (DN.f[dirW  ])[kw  ]=(D.f[dirW  ])[kw  ]; (D.f[dirW  ])[kw  ]=tmp;}}
-	  q = q_dirW[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirE  ])[ke  ]; (DN.f[dirE  ])[ke  ]=(D.f[dirE  ])[ke  ]; (D.f[dirE  ])[ke  ]=tmp;}}
-      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1){ if (geom[ks  ] < GEO_FLUID){tmp = (DN.f[dirS  ])[ks  ]; (DN.f[dirS  ])[ks  ]=(D.f[dirS  ])[ks  ]; (D.f[dirS  ])[ks  ]=tmp;}}
-      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirN  ])[kn  ]; (DN.f[dirN  ])[kn  ]=(D.f[dirN  ])[kn  ]; (D.f[dirN  ])[kn  ]=tmp;}}
-      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1){ if (geom[kb  ] < GEO_FLUID){tmp = (DN.f[dirB  ])[kb  ]; (DN.f[dirB  ])[kb  ]=(D.f[dirB  ])[kb  ]; (D.f[dirB  ])[kb  ]=tmp;}}
-      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirT  ])[kt  ]; (DN.f[dirT  ])[kt  ]=(D.f[dirT  ])[kt  ]; (D.f[dirT  ])[kt  ]=tmp;}}
-      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[ksw ] < GEO_FLUID){tmp = (DN.f[dirSW ])[ksw ]; (DN.f[dirSW ])[ksw ]=(D.f[dirSW ])[ksw ]; (D.f[dirSW ])[ksw ]=tmp;}}
-      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirNE ])[kne ]; (DN.f[dirNE ])[kne ]=(D.f[dirNE ])[kne ]; (D.f[dirNE ])[kne ]=tmp;}}
-      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirNW ])[knw ]; (DN.f[dirNW ])[knw ]=(D.f[dirNW ])[knw ]; (D.f[dirNW ])[knw ]=tmp;}}
-      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kmp0] < GEO_FLUID){tmp = (DN.f[dirSE ])[kse ]; (DN.f[dirSE ])[kse ]=(D.f[dirSE ])[kse ]; (D.f[dirSE ])[kse ]=tmp;}}
-      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbw ] < GEO_FLUID){tmp = (DN.f[dirBW ])[kbw ]; (DN.f[dirBW ])[kbw ]=(D.f[dirBW ])[kbw ]; (D.f[dirBW ])[kbw ]=tmp;}}
-      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirTE ])[kte ]; (DN.f[dirTE ])[kte ]=(D.f[dirTE ])[kte ]; (D.f[dirTE ])[kte ]=tmp;}}
-      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirTW ])[ktw ]; (DN.f[dirTW ])[ktw ]=(D.f[dirTW ])[ktw ]; (D.f[dirTW ])[ktw ]=tmp;}}
-      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[km0p] < GEO_FLUID){tmp = (DN.f[dirBE ])[kbe ]; (DN.f[dirBE ])[kbe ]=(D.f[dirBE ])[kbe ]; (D.f[dirBE ])[kbe ]=tmp;}}
-      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbs ] < GEO_FLUID){tmp = (DN.f[dirBS ])[kbs ]; (DN.f[dirBS ])[kbs ]=(D.f[dirBS ])[kbs ]; (D.f[dirBS ])[kbs ]=tmp;}}
-      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirTN ])[ktn ]; (DN.f[dirTN ])[ktn ]=(D.f[dirTN ])[ktn ]; (D.f[dirTN ])[ktn ]=tmp;}}
-      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirTS ])[kts ]; (DN.f[dirTS ])[kts ]=(D.f[dirTS ])[kts ]; (D.f[dirTS ])[kts ]=tmp;}}
-      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1){ if (geom[k0mp] < GEO_FLUID){tmp = (DN.f[dirBN ])[kbn ]; (DN.f[dirBN ])[kbn ]=(D.f[dirBN ])[kbn ]; (D.f[dirBN ])[kbn ]=tmp;}}
-      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbsw] < GEO_FLUID){tmp = (DN.f[dirBSW])[kbsw]; (DN.f[dirBSW])[kbsw]=(D.f[dirBSW])[kbsw]; (D.f[dirBSW])[kbsw]=tmp;}}
-      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirTNE])[ktne]; (DN.f[dirTNE])[ktne]=(D.f[dirTNE])[ktne]; (D.f[dirTNE])[ktne]=tmp;}}
-      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirTSW])[ktsw]; (DN.f[dirTSW])[ktsw]=(D.f[dirTSW])[ktsw]; (D.f[dirTSW])[ktsw]=tmp;}}
-      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmmp] < GEO_FLUID){tmp = (DN.f[dirBNE])[kbne]; (DN.f[dirBNE])[kbne]=(D.f[dirBNE])[kbne]; (D.f[dirBNE])[kbne]=tmp;}}
-      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirBNW])[kbnw]; (DN.f[dirBNW])[kbnw]=(D.f[dirBNW])[kbnw]; (D.f[dirBNW])[kbnw]=tmp;}}
-      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmpm] < GEO_FLUID){tmp = (DN.f[dirTSE])[ktse]; (DN.f[dirTSE])[ktse]=(D.f[dirTSE])[ktse]; (D.f[dirTSE])[ktse]=tmp;}}
-      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kpmm] < GEO_FLUID){tmp = (DN.f[dirTNW])[ktnw]; (DN.f[dirTNW])[ktnw]=(D.f[dirTNW])[ktnw]; (D.f[dirTNW])[ktnw]=tmp;}}
-      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[dirBSE])[kbse]; (DN.f[dirBSE])[kbse]=(D.f[dirBSE])[kbse]; (D.f[dirBSE])[kbse]=tmp;}}
+      q = q_dirE[k];   if (q>=c0o1 && q<=c1o1){ if (geom[kw  ] < GEO_FLUID){tmp = (DN.f[W  ])[kw  ]; (DN.f[W  ])[kw  ]=(D.f[W  ])[kw  ]; (D.f[W  ])[kw  ]=tmp;}}
+	  q = q_dirW[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[E  ])[ke  ]; (DN.f[E  ])[ke  ]=(D.f[E  ])[ke  ]; (D.f[E  ])[ke  ]=tmp;}}
+      q = q_dirN[k];   if (q>=c0o1 && q<=c1o1){ if (geom[ks  ] < GEO_FLUID){tmp = (DN.f[S  ])[ks  ]; (DN.f[S  ])[ks  ]=(D.f[S  ])[ks  ]; (D.f[S  ])[ks  ]=tmp;}}
+      q = q_dirS[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[N  ])[kn  ]; (DN.f[N  ])[kn  ]=(D.f[N  ])[kn  ]; (D.f[N  ])[kn  ]=tmp;}}
+      q = q_dirT[k];   if (q>=c0o1 && q<=c1o1){ if (geom[kb  ] < GEO_FLUID){tmp = (DN.f[B  ])[kb  ]; (DN.f[B  ])[kb  ]=(D.f[B  ])[kb  ]; (D.f[B  ])[kb  ]=tmp;}}
+      q = q_dirB[k];   if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[T  ])[kt  ]; (DN.f[T  ])[kt  ]=(D.f[T  ])[kt  ]; (D.f[T  ])[kt  ]=tmp;}}
+      q = q_dirNE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[ksw ] < GEO_FLUID){tmp = (DN.f[SW ])[ksw ]; (DN.f[SW ])[ksw ]=(D.f[SW ])[ksw ]; (D.f[SW ])[ksw ]=tmp;}}
+      q = q_dirSW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[NE ])[kne ]; (DN.f[NE ])[kne ]=(D.f[NE ])[kne ]; (D.f[NE ])[kne ]=tmp;}}
+      q = q_dirSE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[NW ])[knw ]; (DN.f[NW ])[knw ]=(D.f[NW ])[knw ]; (D.f[NW ])[knw ]=tmp;}}
+      q = q_dirNW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kmp0] < GEO_FLUID){tmp = (DN.f[SE ])[kse ]; (DN.f[SE ])[kse ]=(D.f[SE ])[kse ]; (D.f[SE ])[kse ]=tmp;}}
+      q = q_dirTE[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbw ] < GEO_FLUID){tmp = (DN.f[BW ])[kbw ]; (DN.f[BW ])[kbw ]=(D.f[BW ])[kbw ]; (D.f[BW ])[kbw ]=tmp;}}
+      q = q_dirBW[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[TE ])[kte ]; (DN.f[TE ])[kte ]=(D.f[TE ])[kte ]; (D.f[TE ])[kte ]=tmp;}}
+      q = q_dirBE[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[TW ])[ktw ]; (DN.f[TW ])[ktw ]=(D.f[TW ])[ktw ]; (D.f[TW ])[ktw ]=tmp;}}
+      q = q_dirTW[k];  if (q>=c0o1 && q<=c1o1){ if (geom[km0p] < GEO_FLUID){tmp = (DN.f[BE ])[kbe ]; (DN.f[BE ])[kbe ]=(D.f[BE ])[kbe ]; (D.f[BE ])[kbe ]=tmp;}}
+      q = q_dirTN[k];  if (q>=c0o1 && q<=c1o1){ if (geom[kbs ] < GEO_FLUID){tmp = (DN.f[BS ])[kbs ]; (DN.f[BS ])[kbs ]=(D.f[BS ])[kbs ]; (D.f[BS ])[kbs ]=tmp;}}
+      q = q_dirBS[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[TN ])[ktn ]; (DN.f[TN ])[ktn ]=(D.f[TN ])[ktn ]; (D.f[TN ])[ktn ]=tmp;}}
+      q = q_dirBN[k];  if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[TS ])[kts ]; (DN.f[TS ])[kts ]=(D.f[TS ])[kts ]; (D.f[TS ])[kts ]=tmp;}}
+      q = q_dirTS[k];  if (q>=c0o1 && q<=c1o1){ if (geom[k0mp] < GEO_FLUID){tmp = (DN.f[BN ])[kbn ]; (DN.f[BN ])[kbn ]=(D.f[BN ])[kbn ]; (D.f[BN ])[kbn ]=tmp;}}
+      q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbsw] < GEO_FLUID){tmp = (DN.f[BSW])[kbsw]; (DN.f[BSW])[kbsw]=(D.f[BSW])[kbsw]; (D.f[BSW])[kbsw]=tmp;}}
+      q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[TNE])[ktne]; (DN.f[TNE])[ktne]=(D.f[TNE])[ktne]; (D.f[TNE])[ktne]=tmp;}}
+      q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[TSW])[ktsw]; (DN.f[TSW])[ktsw]=(D.f[TSW])[ktsw]; (D.f[TSW])[ktsw]=tmp;}}
+      q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmmp] < GEO_FLUID){tmp = (DN.f[BNE])[kbne]; (DN.f[BNE])[kbne]=(D.f[BNE])[kbne]; (D.f[BNE])[kbne]=tmp;}}
+      q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[BNW])[kbnw]; (DN.f[BNW])[kbnw]=(D.f[BNW])[kbnw]; (D.f[BNW])[kbnw]=tmp;}}
+      q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmpm] < GEO_FLUID){tmp = (DN.f[TSE])[ktse]; (DN.f[TSE])[ktse]=(D.f[TSE])[ktse]; (D.f[TSE])[ktse]=tmp;}}
+      q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kpmm] < GEO_FLUID){tmp = (DN.f[TNW])[ktnw]; (DN.f[TNW])[ktnw]=(D.f[TNW])[ktnw]; (D.f[TNW])[ktnw]=tmp;}}
+      q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1){                            {tmp = (DN.f[BSE])[kbse]; (DN.f[BSE])[kbse]=(D.f[BSE])[kbse]; (D.f[BSE])[kbse]=tmp;}}
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu b/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu
index 42ac0cd4ffc6da19e67f88cbf430677dcfa8a826..2c81a9588ef36d225bec67ee1c764f2e2fc7665e 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu
@@ -8,15 +8,15 @@
 
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
-using namespace vf::lbm::constant;
 #include "lbm/MacroscopicQuantities.h"
 #include "../Kernel/Utilities/DistributionHelper.cuh"
 
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
 extern "C" __global__ void CalcTurbulenceIntensity(
diff --git a/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu
index 8fc049f0d37ca32de9c5ce990a92e48ab43f303c..31cf9947e3112222d07a32a58abb9c7da9aed4c0 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu
@@ -8,22 +8,22 @@
 
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
-#include <lbm/constants/NumericConstants.h>
+#include "lbm/constants/D3Q27.h"
+#include "lbm/constants/NumericConstants.h"
+#include "KernelUtilities.h"
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
-													int iny,
+extern "C" __global__ void QVelDeviceCompPlusSlip27(
 													real* vx,
 													real* vy,
 													real* vz,
 													real* DD, 
 													int* k_Q, 
 													real* QQ,
-													unsigned int sizeQ,
-													int numberOfBCnodes, 
+													unsigned int numberOfBCnodes, 
 													real om1, 
 													unsigned int* neighborX,
 													unsigned int* neighborY,
@@ -34,63 +34,63 @@ extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -115,32 +115,32 @@ extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
 		   *q_dirBE, *q_dirTW, *q_dirTN, *q_dirBS, *q_dirBN, *q_dirTS,
 		   *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 		   *q_dirBSE, *q_dirBNW;
-	   q_dirE = &QQ[dirE   *sizeQ];
-	   q_dirW = &QQ[dirW   *sizeQ];
-	   q_dirN = &QQ[dirN   *sizeQ];
-	   q_dirS = &QQ[dirS   *sizeQ];
-	   q_dirT = &QQ[dirT   *sizeQ];
-	   q_dirB = &QQ[dirB   *sizeQ];
-	   q_dirNE = &QQ[dirNE  *sizeQ];
-	   q_dirSW = &QQ[dirSW  *sizeQ];
-	   q_dirSE = &QQ[dirSE  *sizeQ];
-	   q_dirNW = &QQ[dirNW  *sizeQ];
-	   q_dirTE = &QQ[dirTE  *sizeQ];
-	   q_dirBW = &QQ[dirBW  *sizeQ];
-	   q_dirBE = &QQ[dirBE  *sizeQ];
-	   q_dirTW = &QQ[dirTW  *sizeQ];
-	   q_dirTN = &QQ[dirTN  *sizeQ];
-	   q_dirBS = &QQ[dirBS  *sizeQ];
-	   q_dirBN = &QQ[dirBN  *sizeQ];
-	   q_dirTS = &QQ[dirTS  *sizeQ];
-	   q_dirTNE = &QQ[dirTNE *sizeQ];
-	   q_dirTSW = &QQ[dirTSW *sizeQ];
-	   q_dirTSE = &QQ[dirTSE *sizeQ];
-	   q_dirTNW = &QQ[dirTNW *sizeQ];
-	   q_dirBNE = &QQ[dirBNE *sizeQ];
-	   q_dirBSW = &QQ[dirBSW *sizeQ];
-	   q_dirBSE = &QQ[dirBSE *sizeQ];
-	   q_dirBNW = &QQ[dirBNW *sizeQ];
+	   q_dirE = &QQ[E   * numberOfBCnodes];
+	   q_dirW = &QQ[W   * numberOfBCnodes];
+	   q_dirN = &QQ[N   * numberOfBCnodes];
+	   q_dirS = &QQ[S   * numberOfBCnodes];
+	   q_dirT = &QQ[T   * numberOfBCnodes];
+	   q_dirB = &QQ[B   * numberOfBCnodes];
+	   q_dirNE = &QQ[NE  * numberOfBCnodes];
+	   q_dirSW = &QQ[SW  * numberOfBCnodes];
+	   q_dirSE = &QQ[SE  * numberOfBCnodes];
+	   q_dirNW = &QQ[NW  * numberOfBCnodes];
+	   q_dirTE = &QQ[TE  * numberOfBCnodes];
+	   q_dirBW = &QQ[BW  * numberOfBCnodes];
+	   q_dirBE = &QQ[BE  * numberOfBCnodes];
+	   q_dirTW = &QQ[TW  * numberOfBCnodes];
+	   q_dirTN = &QQ[TN  * numberOfBCnodes];
+	   q_dirBS = &QQ[BS  * numberOfBCnodes];
+	   q_dirBN = &QQ[BN  * numberOfBCnodes];
+	   q_dirTS = &QQ[TS  * numberOfBCnodes];
+	   q_dirTNE = &QQ[TNE * numberOfBCnodes];
+	   q_dirTSW = &QQ[TSW * numberOfBCnodes];
+	   q_dirTSE = &QQ[TSE * numberOfBCnodes];
+	   q_dirTNW = &QQ[TNW * numberOfBCnodes];
+	   q_dirBNE = &QQ[BNE * numberOfBCnodes];
+	   q_dirBSW = &QQ[BSW * numberOfBCnodes];
+	   q_dirBSE = &QQ[BSE * numberOfBCnodes];
+	   q_dirBNW = &QQ[BNW * numberOfBCnodes];
 	   ////////////////////////////////////////////////////////////////////////////////
 	   //index
 	   unsigned int KQK = k_Q[k];
@@ -175,37 +175,37 @@ extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
 	   real f_E, f_W, f_N, f_S, f_T, f_B, f_NE, f_SW, f_SE, f_NW, f_TE, f_BW, f_BE,
 		   f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-	   f_W = (D.f[dirE])[ke];
-	   f_E = (D.f[dirW])[kw];
-	   f_S = (D.f[dirN])[kn];
-	   f_N = (D.f[dirS])[ks];
-	   f_B = (D.f[dirT])[kt];
-	   f_T = (D.f[dirB])[kb];
-	   f_SW = (D.f[dirNE])[kne];
-	   f_NE = (D.f[dirSW])[ksw];
-	   f_NW = (D.f[dirSE])[kse];
-	   f_SE = (D.f[dirNW])[knw];
-	   f_BW = (D.f[dirTE])[kte];
-	   f_TE = (D.f[dirBW])[kbw];
-	   f_TW = (D.f[dirBE])[kbe];
-	   f_BE = (D.f[dirTW])[ktw];
-	   f_BS = (D.f[dirTN])[ktn];
-	   f_TN = (D.f[dirBS])[kbs];
-	   f_TS = (D.f[dirBN])[kbn];
-	   f_BN = (D.f[dirTS])[kts];
-	   f_BSW = (D.f[dirTNE])[ktne];
-	   f_BNE = (D.f[dirTSW])[ktsw];
-	   f_BNW = (D.f[dirTSE])[ktse];
-	   f_BSE = (D.f[dirTNW])[ktnw];
-	   f_TSW = (D.f[dirBNE])[kbne];
-	   f_TNE = (D.f[dirBSW])[kbsw];
-	   f_TNW = (D.f[dirBSE])[kbse];
-	   f_TSE = (D.f[dirBNW])[kbnw];
+	   f_W = (D.f[E])[ke];
+	   f_E = (D.f[W])[kw];
+	   f_S = (D.f[N])[kn];
+	   f_N = (D.f[S])[ks];
+	   f_B = (D.f[T])[kt];
+	   f_T = (D.f[B])[kb];
+	   f_SW = (D.f[NE])[kne];
+	   f_NE = (D.f[SW])[ksw];
+	   f_NW = (D.f[SE])[kse];
+	   f_SE = (D.f[NW])[knw];
+	   f_BW = (D.f[TE])[kte];
+	   f_TE = (D.f[BW])[kbw];
+	   f_TW = (D.f[BE])[kbe];
+	   f_BE = (D.f[TW])[ktw];
+	   f_BS = (D.f[TN])[ktn];
+	   f_TN = (D.f[BS])[kbs];
+	   f_TS = (D.f[BN])[kbn];
+	   f_BN = (D.f[TS])[kts];
+	   f_BSW = (D.f[TNE])[ktne];
+	   f_BNE = (D.f[TSW])[ktsw];
+	   f_BNW = (D.f[TSE])[ktse];
+	   f_BSE = (D.f[TNW])[ktnw];
+	   f_TSW = (D.f[BNE])[kbne];
+	   f_TNE = (D.f[BSW])[kbsw];
+	   f_TNW = (D.f[BSE])[kbse];
+	   f_TSE = (D.f[BNW])[kbnw];
 	   ////////////////////////////////////////////////////////////////////////////////
 	   real vx1, vx2, vx3, drho, feq, q;
 	   drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 		   f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW +
-		   f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]);
+		   f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]);
 
 	   vx1 = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
 		   ((f_BE - f_TW) + (f_TE - f_BW)) + ((f_SE - f_NW) + (f_NE - f_SW)) +
@@ -225,67 +225,67 @@ extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
 	   //////////////////////////////////////////////////////////////////////////
 	   if (isEvenTimestep == false)
 	   {
-		   D.f[dirE] = &DD[dirE   *size_Mat];
-		   D.f[dirW] = &DD[dirW   *size_Mat];
-		   D.f[dirN] = &DD[dirN   *size_Mat];
-		   D.f[dirS] = &DD[dirS   *size_Mat];
-		   D.f[dirT] = &DD[dirT   *size_Mat];
-		   D.f[dirB] = &DD[dirB   *size_Mat];
-		   D.f[dirNE] = &DD[dirNE  *size_Mat];
-		   D.f[dirSW] = &DD[dirSW  *size_Mat];
-		   D.f[dirSE] = &DD[dirSE  *size_Mat];
-		   D.f[dirNW] = &DD[dirNW  *size_Mat];
-		   D.f[dirTE] = &DD[dirTE  *size_Mat];
-		   D.f[dirBW] = &DD[dirBW  *size_Mat];
-		   D.f[dirBE] = &DD[dirBE  *size_Mat];
-		   D.f[dirTW] = &DD[dirTW  *size_Mat];
-		   D.f[dirTN] = &DD[dirTN  *size_Mat];
-		   D.f[dirBS] = &DD[dirBS  *size_Mat];
-		   D.f[dirBN] = &DD[dirBN  *size_Mat];
-		   D.f[dirTS] = &DD[dirTS  *size_Mat];
-		   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		   D.f[dirTNE] = &DD[dirTNE *size_Mat];
-		   D.f[dirTSW] = &DD[dirTSW *size_Mat];
-		   D.f[dirTSE] = &DD[dirTSE *size_Mat];
-		   D.f[dirTNW] = &DD[dirTNW *size_Mat];
-		   D.f[dirBNE] = &DD[dirBNE *size_Mat];
-		   D.f[dirBSW] = &DD[dirBSW *size_Mat];
-		   D.f[dirBSE] = &DD[dirBSE *size_Mat];
-		   D.f[dirBNW] = &DD[dirBNW *size_Mat];
+		   D.f[E] = &DD[E   *size_Mat];
+		   D.f[W] = &DD[W   *size_Mat];
+		   D.f[N] = &DD[N   *size_Mat];
+		   D.f[S] = &DD[S   *size_Mat];
+		   D.f[T] = &DD[T   *size_Mat];
+		   D.f[B] = &DD[B   *size_Mat];
+		   D.f[NE] = &DD[NE  *size_Mat];
+		   D.f[SW] = &DD[SW  *size_Mat];
+		   D.f[SE] = &DD[SE  *size_Mat];
+		   D.f[NW] = &DD[NW  *size_Mat];
+		   D.f[TE] = &DD[TE  *size_Mat];
+		   D.f[BW] = &DD[BW  *size_Mat];
+		   D.f[BE] = &DD[BE  *size_Mat];
+		   D.f[TW] = &DD[TW  *size_Mat];
+		   D.f[TN] = &DD[TN  *size_Mat];
+		   D.f[BS] = &DD[BS  *size_Mat];
+		   D.f[BN] = &DD[BN  *size_Mat];
+		   D.f[TS] = &DD[TS  *size_Mat];
+		   D.f[REST] = &DD[REST*size_Mat];
+		   D.f[TNE] = &DD[TNE *size_Mat];
+		   D.f[TSW] = &DD[TSW *size_Mat];
+		   D.f[TSE] = &DD[TSE *size_Mat];
+		   D.f[TNW] = &DD[TNW *size_Mat];
+		   D.f[BNE] = &DD[BNE *size_Mat];
+		   D.f[BSW] = &DD[BSW *size_Mat];
+		   D.f[BSE] = &DD[BSE *size_Mat];
+		   D.f[BNW] = &DD[BNW *size_Mat];
 	   }
 	   else
 	   {
-		   D.f[dirW] = &DD[dirE   *size_Mat];
-		   D.f[dirE] = &DD[dirW   *size_Mat];
-		   D.f[dirS] = &DD[dirN   *size_Mat];
-		   D.f[dirN] = &DD[dirS   *size_Mat];
-		   D.f[dirB] = &DD[dirT   *size_Mat];
-		   D.f[dirT] = &DD[dirB   *size_Mat];
-		   D.f[dirSW] = &DD[dirNE  *size_Mat];
-		   D.f[dirNE] = &DD[dirSW  *size_Mat];
-		   D.f[dirNW] = &DD[dirSE  *size_Mat];
-		   D.f[dirSE] = &DD[dirNW  *size_Mat];
-		   D.f[dirBW] = &DD[dirTE  *size_Mat];
-		   D.f[dirTE] = &DD[dirBW  *size_Mat];
-		   D.f[dirTW] = &DD[dirBE  *size_Mat];
-		   D.f[dirBE] = &DD[dirTW  *size_Mat];
-		   D.f[dirBS] = &DD[dirTN  *size_Mat];
-		   D.f[dirTN] = &DD[dirBS  *size_Mat];
-		   D.f[dirTS] = &DD[dirBN  *size_Mat];
-		   D.f[dirBN] = &DD[dirTS  *size_Mat];
-		   D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		   D.f[dirTNE] = &DD[dirBSW *size_Mat];
-		   D.f[dirTSW] = &DD[dirBNE *size_Mat];
-		   D.f[dirTSE] = &DD[dirBNW *size_Mat];
-		   D.f[dirTNW] = &DD[dirBSE *size_Mat];
-		   D.f[dirBNE] = &DD[dirTSW *size_Mat];
-		   D.f[dirBSW] = &DD[dirTNE *size_Mat];
-		   D.f[dirBSE] = &DD[dirTNW *size_Mat];
-		   D.f[dirBNW] = &DD[dirTSE *size_Mat];
+		   D.f[W] = &DD[E   *size_Mat];
+		   D.f[E] = &DD[W   *size_Mat];
+		   D.f[S] = &DD[N   *size_Mat];
+		   D.f[N] = &DD[S   *size_Mat];
+		   D.f[B] = &DD[T   *size_Mat];
+		   D.f[T] = &DD[B   *size_Mat];
+		   D.f[SW] = &DD[NE  *size_Mat];
+		   D.f[NE] = &DD[SW  *size_Mat];
+		   D.f[NW] = &DD[SE  *size_Mat];
+		   D.f[SE] = &DD[NW  *size_Mat];
+		   D.f[BW] = &DD[TE  *size_Mat];
+		   D.f[TE] = &DD[BW  *size_Mat];
+		   D.f[TW] = &DD[BE  *size_Mat];
+		   D.f[BE] = &DD[TW  *size_Mat];
+		   D.f[BS] = &DD[TN  *size_Mat];
+		   D.f[TN] = &DD[BS  *size_Mat];
+		   D.f[TS] = &DD[BN  *size_Mat];
+		   D.f[BN] = &DD[TS  *size_Mat];
+		   D.f[REST] = &DD[REST*size_Mat];
+		   D.f[TNE] = &DD[BSW *size_Mat];
+		   D.f[TSW] = &DD[BNE *size_Mat];
+		   D.f[TSE] = &DD[BNW *size_Mat];
+		   D.f[TNW] = &DD[BSE *size_Mat];
+		   D.f[BNE] = &DD[TSW *size_Mat];
+		   D.f[BSW] = &DD[TNE *size_Mat];
+		   D.f[BSE] = &DD[TNW *size_Mat];
+		   D.f[BNW] = &DD[TSE *size_Mat];
 	   }
 	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	   //Test
-	   //(D.f[dirZERO])[k]=c1o10;
+	   //(D.f[REST])[k]=c1o10;
 	   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 	   //ToDo anders Klammern
@@ -307,208 +307,208 @@ extern "C" __global__ void QVelDeviceCompPlusSlip27(int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirW])[kw]=zero;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);// - c2over27 * drho;
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirE])[ke]=zero;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);// - c2over27 * drho;
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirS])[ks]=zero;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);// - c2over27 * drho;
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirN])[kn]=zero;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);// - c2over27 * drho;
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirB])[kb]=one;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);// - c2over27 * drho;
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirT])[kt]=zero;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);// - c2over27 * drho;
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirSW])[ksw]=zero;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirNE])[kne]=zero;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirNW])[knw]=zero;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirSE])[kse]=zero;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBW])[kbw]=zero;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTE])[kte]=zero;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTW])[ktw]=zero;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBE])[kbe]=zero;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBS])[kbs]=zero;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTN])[ktn]=zero;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTS])[kts]=zero;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBN])[kbn]=zero;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho;
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBSW])[kbsw]=zero;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTNE])[ktne]=zero;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTSW])[ktsw]=zero;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBNE])[kbne]=zero;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBNW])[kbnw]=zero;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTSE])[ktse]=zero;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTNW])[ktnw]=zero;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBSE])[kbse]=zero;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho;
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -613,95 +613,95 @@ extern "C" __global__ void QVeloDeviceEQ27(real* VeloX,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
             // based on BGK Plus Comp
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[ke   ];
-			real mfabb = (D.f[dirW   ])[kw   ];
-			real mfbcb = (D.f[dirN   ])[kn   ];
-			real mfbab = (D.f[dirS   ])[ks   ];
-			real mfbbc = (D.f[dirT   ])[kt   ];
-			real mfbba = (D.f[dirB   ])[kb   ];
-			real mfccb = (D.f[dirNE  ])[kne  ];
-			real mfaab = (D.f[dirSW  ])[ksw  ];
-			real mfcab = (D.f[dirSE  ])[kse  ];
-			real mfacb = (D.f[dirNW  ])[knw  ];
-			real mfcbc = (D.f[dirTE  ])[kte  ];
-			real mfaba = (D.f[dirBW  ])[kbw  ];
-			real mfcba = (D.f[dirBE  ])[kbe  ];
-			real mfabc = (D.f[dirTW  ])[ktw  ];
-			real mfbcc = (D.f[dirTN  ])[ktn  ];
-			real mfbaa = (D.f[dirBS  ])[kbs  ];
-			real mfbca = (D.f[dirBN  ])[kbn  ];
-			real mfbac = (D.f[dirTS  ])[kts  ];
-			real mfbbb = (D.f[dirZERO])[kzero];
-			real mfccc = (D.f[dirTNE ])[ktne ];
-			real mfaac = (D.f[dirTSW ])[ktsw ];
-			real mfcac = (D.f[dirTSE ])[ktse ];
-			real mfacc = (D.f[dirTNW ])[ktnw ];
-			real mfcca = (D.f[dirBNE ])[kbne ];
-			real mfaaa = (D.f[dirBSW ])[kbsw ];
-			real mfcaa = (D.f[dirBSE ])[kbse ];
-			real mfaca = (D.f[dirBNW ])[kbnw ];
+			real mfcbb = (D.f[E   ])[ke   ];
+			real mfabb = (D.f[W   ])[kw   ];
+			real mfbcb = (D.f[N   ])[kn   ];
+			real mfbab = (D.f[S   ])[ks   ];
+			real mfbbc = (D.f[T   ])[kt   ];
+			real mfbba = (D.f[B   ])[kb   ];
+			real mfccb = (D.f[NE  ])[kne  ];
+			real mfaab = (D.f[SW  ])[ksw  ];
+			real mfcab = (D.f[SE  ])[kse  ];
+			real mfacb = (D.f[NW  ])[knw  ];
+			real mfcbc = (D.f[TE  ])[kte  ];
+			real mfaba = (D.f[BW  ])[kbw  ];
+			real mfcba = (D.f[BE  ])[kbe  ];
+			real mfabc = (D.f[TW  ])[ktw  ];
+			real mfbcc = (D.f[TN  ])[ktn  ];
+			real mfbaa = (D.f[BS  ])[kbs  ];
+			real mfbca = (D.f[BN  ])[kbn  ];
+			real mfbac = (D.f[TS  ])[kts  ];
+			real mfbbb = (D.f[REST])[kzero];
+			real mfccc = (D.f[TNE ])[ktne ];
+			real mfaac = (D.f[TSW ])[ktsw ];
+			real mfcac = (D.f[TSE ])[ktse ];
+			real mfacc = (D.f[TNW ])[ktnw ];
+			real mfcca = (D.f[BNE ])[kbne ];
+			real mfaaa = (D.f[BSW ])[kbsw ];
+			real mfcaa = (D.f[BSE ])[kbse ];
+			real mfaca = (D.f[BNW ])[kbnw ];
 			////////////////////////////////////////////////////////////////////////////////////
 			real rho   = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
 							 mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
@@ -763,33 +763,33 @@ extern "C" __global__ void QVeloDeviceEQ27(real* VeloX,
 			mfcaa = -rho * XXc * YYa * ZZa - c1o216;
 			mfaca = -rho * XXa * YYc * ZZa - c1o216;
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE   ])[ke   ] = mfabb;//mfcbb;
-			(D.f[dirW   ])[kw   ] = mfcbb;//mfabb;
-			(D.f[dirN   ])[kn   ] = mfbab;//mfbcb;
-			(D.f[dirS   ])[ks   ] = mfbcb;//mfbab;
-			(D.f[dirT   ])[kt   ] = mfbba;//mfbbc;
-			(D.f[dirB   ])[kb   ] = mfbbc;//mfbba;
-			(D.f[dirNE  ])[kne  ] = mfaab;//mfccb;
-			(D.f[dirSW  ])[ksw  ] = mfccb;//mfaab;
-			(D.f[dirSE  ])[kse  ] = mfacb;//mfcab;
-			(D.f[dirNW  ])[knw  ] = mfcab;//mfacb;
-			(D.f[dirTE  ])[kte  ] = mfaba;//mfcbc;
-			(D.f[dirBW  ])[kbw  ] = mfcbc;//mfaba;
-			(D.f[dirBE  ])[kbe  ] = mfabc;//mfcba;
-			(D.f[dirTW  ])[ktw  ] = mfcba;//mfabc;
-			(D.f[dirTN  ])[ktn  ] = mfbaa;//mfbcc;
-			(D.f[dirBS  ])[kbs  ] = mfbcc;//mfbaa;
-			(D.f[dirBN  ])[kbn  ] = mfbac;//mfbca;
-			(D.f[dirTS  ])[kts  ] = mfbca;//mfbac;
-			(D.f[dirZERO])[kzero] = mfbbb;//mfbbb;
-			(D.f[dirTNE ])[ktne ] = mfaaa;//mfccc;
-			(D.f[dirTSW ])[ktsw ] = mfcca;//mfaac;
-			(D.f[dirTSE ])[ktse ] = mfaca;//mfcac;
-			(D.f[dirTNW ])[ktnw ] = mfcaa;//mfacc;
-			(D.f[dirBNE ])[kbne ] = mfaac;//mfcca;
-			(D.f[dirBSW ])[kbsw ] = mfccc;//mfaaa;
-			(D.f[dirBSE ])[kbse ] = mfacc;//mfcaa;
-			(D.f[dirBNW ])[kbnw ] = mfcac;//mfaca;
+			(D.f[E   ])[ke   ] = mfabb;//mfcbb;
+			(D.f[W   ])[kw   ] = mfcbb;//mfabb;
+			(D.f[N   ])[kn   ] = mfbab;//mfbcb;
+			(D.f[S   ])[ks   ] = mfbcb;//mfbab;
+			(D.f[T   ])[kt   ] = mfbba;//mfbbc;
+			(D.f[B   ])[kb   ] = mfbbc;//mfbba;
+			(D.f[NE  ])[kne  ] = mfaab;//mfccb;
+			(D.f[SW  ])[ksw  ] = mfccb;//mfaab;
+			(D.f[SE  ])[kse  ] = mfacb;//mfcab;
+			(D.f[NW  ])[knw  ] = mfcab;//mfacb;
+			(D.f[TE  ])[kte  ] = mfaba;//mfcbc;
+			(D.f[BW  ])[kbw  ] = mfcbc;//mfaba;
+			(D.f[BE  ])[kbe  ] = mfabc;//mfcba;
+			(D.f[TW  ])[ktw  ] = mfcba;//mfabc;
+			(D.f[TN  ])[ktn  ] = mfbaa;//mfbcc;
+			(D.f[BS  ])[kbs  ] = mfbcc;//mfbaa;
+			(D.f[BN  ])[kbn  ] = mfbac;//mfbca;
+			(D.f[TS  ])[kts  ] = mfbca;//mfbac;
+			(D.f[REST])[kzero] = mfbbb;//mfbbb;
+			(D.f[TNE ])[ktne ] = mfaaa;//mfccc;
+			(D.f[TSW ])[ktsw ] = mfcca;//mfaac;
+			(D.f[TSE ])[ktse ] = mfaca;//mfcac;
+			(D.f[TNW ])[ktnw ] = mfcaa;//mfacc;
+			(D.f[BNE ])[kbne ] = mfaac;//mfcca;
+			(D.f[BSW ])[kbsw ] = mfccc;//mfaaa;
+			(D.f[BSE ])[kbse ] = mfacc;//mfcaa;
+			(D.f[BNW ])[kbnw ] = mfcac;//mfaca;
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -894,95 +894,95 @@ extern "C" __global__ void QVeloStreetDeviceEQ27(
 		Distributions27 D;
 		if (isEvenTimestep == true)
 		{
-			D.f[dirE   ] = &DD[dirE   *size_Mat];
-			D.f[dirW   ] = &DD[dirW   *size_Mat];
-			D.f[dirN   ] = &DD[dirN   *size_Mat];
-			D.f[dirS   ] = &DD[dirS   *size_Mat];
-			D.f[dirT   ] = &DD[dirT   *size_Mat];
-			D.f[dirB   ] = &DD[dirB   *size_Mat];
-			D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-			D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-			D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-			D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-			D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-			D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-			D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-			D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-			D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-			D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-			D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-			D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-			D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-			D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-			D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-			D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-			D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+			D.f[E   ] = &DD[E   *size_Mat];
+			D.f[W   ] = &DD[W   *size_Mat];
+			D.f[N   ] = &DD[N   *size_Mat];
+			D.f[S   ] = &DD[S   *size_Mat];
+			D.f[T   ] = &DD[T   *size_Mat];
+			D.f[B   ] = &DD[B   *size_Mat];
+			D.f[NE  ] = &DD[NE  *size_Mat];
+			D.f[SW  ] = &DD[SW  *size_Mat];
+			D.f[SE  ] = &DD[SE  *size_Mat];
+			D.f[NW  ] = &DD[NW  *size_Mat];
+			D.f[TE  ] = &DD[TE  *size_Mat];
+			D.f[BW  ] = &DD[BW  *size_Mat];
+			D.f[BE  ] = &DD[BE  *size_Mat];
+			D.f[TW  ] = &DD[TW  *size_Mat];
+			D.f[TN  ] = &DD[TN  *size_Mat];
+			D.f[BS  ] = &DD[BS  *size_Mat];
+			D.f[BN  ] = &DD[BN  *size_Mat];
+			D.f[TS  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[TNE *size_Mat];
+			D.f[TSW ] = &DD[TSW *size_Mat];
+			D.f[TSE ] = &DD[TSE *size_Mat];
+			D.f[TNW ] = &DD[TNW *size_Mat];
+			D.f[BNE ] = &DD[BNE *size_Mat];
+			D.f[BSW ] = &DD[BSW *size_Mat];
+			D.f[BSE ] = &DD[BSE *size_Mat];
+			D.f[BNW ] = &DD[BNW *size_Mat];
 		}
 		else
 		{
-			D.f[dirW   ] = &DD[dirE   *size_Mat];
-			D.f[dirE   ] = &DD[dirW   *size_Mat];
-			D.f[dirS   ] = &DD[dirN   *size_Mat];
-			D.f[dirN   ] = &DD[dirS   *size_Mat];
-			D.f[dirB   ] = &DD[dirT   *size_Mat];
-			D.f[dirT   ] = &DD[dirB   *size_Mat];
-			D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-			D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-			D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-			D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-			D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-			D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-			D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-			D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-			D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-			D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-			D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-			D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-			D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-			D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-			D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-			D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-			D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+			D.f[W   ] = &DD[E   *size_Mat];
+			D.f[E   ] = &DD[W   *size_Mat];
+			D.f[S   ] = &DD[N   *size_Mat];
+			D.f[N   ] = &DD[S   *size_Mat];
+			D.f[B   ] = &DD[T   *size_Mat];
+			D.f[T   ] = &DD[B   *size_Mat];
+			D.f[SW  ] = &DD[NE  *size_Mat];
+			D.f[NE  ] = &DD[SW  *size_Mat];
+			D.f[NW  ] = &DD[SE  *size_Mat];
+			D.f[SE  ] = &DD[NW  *size_Mat];
+			D.f[BW  ] = &DD[TE  *size_Mat];
+			D.f[TE  ] = &DD[BW  *size_Mat];
+			D.f[TW  ] = &DD[BE  *size_Mat];
+			D.f[BE  ] = &DD[TW  *size_Mat];
+			D.f[BS  ] = &DD[TN  *size_Mat];
+			D.f[TN  ] = &DD[BS  *size_Mat];
+			D.f[TS  ] = &DD[BN  *size_Mat];
+			D.f[BN  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[BSW *size_Mat];
+			D.f[TSW ] = &DD[BNE *size_Mat];
+			D.f[TSE ] = &DD[BNW *size_Mat];
+			D.f[TNW ] = &DD[BSE *size_Mat];
+			D.f[BNE ] = &DD[TSW *size_Mat];
+			D.f[BSW ] = &DD[TNE *size_Mat];
+			D.f[BSE ] = &DD[TNW *size_Mat];
+			D.f[BNW ] = &DD[TSE *size_Mat];
 		}
 
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		// based on BGK Plus Comp
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		real mfcbb = (D.f[dirE   ])[ke   ];
-		real mfabb = (D.f[dirW   ])[kw   ];
-		real mfbcb = (D.f[dirN   ])[kn   ];
-		real mfbab = (D.f[dirS   ])[ks   ];
-		real mfbbc = (D.f[dirT   ])[kt   ];
-		real mfbba = (D.f[dirB   ])[kb   ];
-		real mfccb = (D.f[dirNE  ])[kne  ];
-		real mfaab = (D.f[dirSW  ])[ksw  ];
-		real mfcab = (D.f[dirSE  ])[kse  ];
-		real mfacb = (D.f[dirNW  ])[knw  ];
-		real mfcbc = (D.f[dirTE  ])[kte  ];
-		real mfaba = (D.f[dirBW  ])[kbw  ];
-		real mfcba = (D.f[dirBE  ])[kbe  ];
-		real mfabc = (D.f[dirTW  ])[ktw  ];
-		real mfbcc = (D.f[dirTN  ])[ktn  ];
-		real mfbaa = (D.f[dirBS  ])[kbs  ];
-		real mfbca = (D.f[dirBN  ])[kbn  ];
-		real mfbac = (D.f[dirTS  ])[kts  ];
-		real mfbbb = (D.f[dirZERO])[kzero];
-		real mfccc = (D.f[dirTNE ])[ktne ];
-		real mfaac = (D.f[dirTSW ])[ktsw ];
-		real mfcac = (D.f[dirTSE ])[ktse ];
-		real mfacc = (D.f[dirTNW ])[ktnw ];
-		real mfcca = (D.f[dirBNE ])[kbne ];
-		real mfaaa = (D.f[dirBSW ])[kbsw ];
-		real mfcaa = (D.f[dirBSE ])[kbse ];
-		real mfaca = (D.f[dirBNW ])[kbnw ];
+		real mfcbb = (D.f[E   ])[ke   ];
+		real mfabb = (D.f[W   ])[kw   ];
+		real mfbcb = (D.f[N   ])[kn   ];
+		real mfbab = (D.f[S   ])[ks   ];
+		real mfbbc = (D.f[T   ])[kt   ];
+		real mfbba = (D.f[B   ])[kb   ];
+		real mfccb = (D.f[NE  ])[kne  ];
+		real mfaab = (D.f[SW  ])[ksw  ];
+		real mfcab = (D.f[SE  ])[kse  ];
+		real mfacb = (D.f[NW  ])[knw  ];
+		real mfcbc = (D.f[TE  ])[kte  ];
+		real mfaba = (D.f[BW  ])[kbw  ];
+		real mfcba = (D.f[BE  ])[kbe  ];
+		real mfabc = (D.f[TW  ])[ktw  ];
+		real mfbcc = (D.f[TN  ])[ktn  ];
+		real mfbaa = (D.f[BS  ])[kbs  ];
+		real mfbca = (D.f[BN  ])[kbn  ];
+		real mfbac = (D.f[TS  ])[kts  ];
+		real mfbbb = (D.f[REST])[kzero];
+		real mfccc = (D.f[TNE ])[ktne ];
+		real mfaac = (D.f[TSW ])[ktsw ];
+		real mfcac = (D.f[TSE ])[ktse ];
+		real mfacc = (D.f[TNW ])[ktnw ];
+		real mfcca = (D.f[BNE ])[kbne ];
+		real mfaaa = (D.f[BSW ])[kbsw ];
+		real mfcaa = (D.f[BSE ])[kbse ];
+		real mfaca = (D.f[BNW ])[kbnw ];
 		////////////////////////////////////////////////////////////////////////////////////
 		real rho = (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca +
 			        mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb +
@@ -1049,33 +1049,33 @@ extern "C" __global__ void QVeloStreetDeviceEQ27(
 		mfcaa = -rho * XXc * YYa * ZZa - c1o216;
 		mfaca = -rho * XXa * YYc * ZZa - c1o216;
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		(D.f[dirE   ])[ke   ] = mfabb;//mfcbb;
-		(D.f[dirW   ])[kw   ] = mfcbb;//mfabb;
-		(D.f[dirN   ])[kn   ] = mfbab;//mfbcb;
-		(D.f[dirS   ])[ks   ] = mfbcb;//mfbab;
-		(D.f[dirT   ])[kt   ] = mfbba;//mfbbc;
-		(D.f[dirB   ])[kb   ] = mfbbc;//mfbba;
-		(D.f[dirNE  ])[kne  ] = mfaab;//mfccb;
-		(D.f[dirSW  ])[ksw  ] = mfccb;//mfaab;
-		(D.f[dirSE  ])[kse  ] = mfacb;//mfcab;
-		(D.f[dirNW  ])[knw  ] = mfcab;//mfacb;
-		(D.f[dirTE  ])[kte  ] = mfaba;//mfcbc;
-		(D.f[dirBW  ])[kbw  ] = mfcbc;//mfaba;
-		(D.f[dirBE  ])[kbe  ] = mfabc;//mfcba;
-		(D.f[dirTW  ])[ktw  ] = mfcba;//mfabc;
-		(D.f[dirTN  ])[ktn  ] = mfbaa;//mfbcc;
-		(D.f[dirBS  ])[kbs  ] = mfbcc;//mfbaa;
-		(D.f[dirBN  ])[kbn  ] = mfbac;//mfbca;
-		(D.f[dirTS  ])[kts  ] = mfbca;//mfbac;
-		(D.f[dirZERO])[kzero] = mfbbb;//mfbbb;
-		(D.f[dirTNE ])[ktne ] = mfaaa;//mfccc;
-		(D.f[dirTSW ])[ktsw ] = mfcca;//mfaac;
-		(D.f[dirTSE ])[ktse ] = mfaca;//mfcac;
-		(D.f[dirTNW ])[ktnw ] = mfcaa;//mfacc;
-		(D.f[dirBNE ])[kbne ] = mfaac;//mfcca;
-		(D.f[dirBSW ])[kbsw ] = mfccc;//mfaaa;
-		(D.f[dirBSE ])[kbse ] = mfacc;//mfcaa;
-		(D.f[dirBNW ])[kbnw ] = mfcac;//mfaca;
+		(D.f[E   ])[ke   ] = mfabb;//mfcbb;
+		(D.f[W   ])[kw   ] = mfcbb;//mfabb;
+		(D.f[N   ])[kn   ] = mfbab;//mfbcb;
+		(D.f[S   ])[ks   ] = mfbcb;//mfbab;
+		(D.f[T   ])[kt   ] = mfbba;//mfbbc;
+		(D.f[B   ])[kb   ] = mfbbc;//mfbba;
+		(D.f[NE  ])[kne  ] = mfaab;//mfccb;
+		(D.f[SW  ])[ksw  ] = mfccb;//mfaab;
+		(D.f[SE  ])[kse  ] = mfacb;//mfcab;
+		(D.f[NW  ])[knw  ] = mfcab;//mfacb;
+		(D.f[TE  ])[kte  ] = mfaba;//mfcbc;
+		(D.f[BW  ])[kbw  ] = mfcbc;//mfaba;
+		(D.f[BE  ])[kbe  ] = mfabc;//mfcba;
+		(D.f[TW  ])[ktw  ] = mfcba;//mfabc;
+		(D.f[TN  ])[ktn  ] = mfbaa;//mfbcc;
+		(D.f[BS  ])[kbs  ] = mfbcc;//mfbaa;
+		(D.f[BN  ])[kbn  ] = mfbac;//mfbca;
+		(D.f[TS  ])[kts  ] = mfbca;//mfbac;
+		(D.f[REST])[kzero] = mfbbb;//mfbbb;
+		(D.f[TNE ])[ktne ] = mfaaa;//mfccc;
+		(D.f[TSW ])[ktsw ] = mfcca;//mfaac;
+		(D.f[TSE ])[ktse ] = mfaca;//mfcac;
+		(D.f[TNW ])[ktnw ] = mfcaa;//mfacc;
+		(D.f[BNE ])[kbne ] = mfaac;//mfcca;
+		(D.f[BSW ])[kbsw ] = mfccc;//mfaaa;
+		(D.f[BSE ])[kbse ] = mfacc;//mfcaa;
+		(D.f[BNW ])[kbnw ] = mfcac;//mfaca;
 	}
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1127,8 +1127,7 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
 													real* DD, 
 													int* k_Q, 
 													real* QQ,
-													unsigned int sizeQ,
-													int numberOfBCnodes, 
+													unsigned int numberOfBCnodes, 
 													real om1, 
 													unsigned int* neighborX,
 													unsigned int* neighborY,
@@ -1139,63 +1138,63 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1220,32 +1219,32 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1280,37 +1279,37 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_E   = (D.f[dirE   ])[ke   ];
-      f_W   = (D.f[dirW   ])[kw   ];
-      f_N   = (D.f[dirN   ])[kn   ];
-      f_S   = (D.f[dirS   ])[ks   ];
-      f_T   = (D.f[dirT   ])[kt   ];
-      f_B   = (D.f[dirB   ])[kb   ];
-      f_NE  = (D.f[dirNE  ])[kne  ];
-      f_SW  = (D.f[dirSW  ])[ksw  ];
-      f_SE  = (D.f[dirSE  ])[kse  ];
-      f_NW  = (D.f[dirNW  ])[knw  ];
-      f_TE  = (D.f[dirTE  ])[kte  ];
-      f_BW  = (D.f[dirBW  ])[kbw  ];
-      f_BE  = (D.f[dirBE  ])[kbe  ];
-      f_TW  = (D.f[dirTW  ])[ktw  ];
-      f_TN  = (D.f[dirTN  ])[ktn  ];
-      f_BS  = (D.f[dirBS  ])[kbs  ];
-      f_BN  = (D.f[dirBN  ])[kbn  ];
-      f_TS  = (D.f[dirTS  ])[kts  ];
-      f_TNE = (D.f[dirTNE ])[ktne ];
-      f_TSW = (D.f[dirTSW ])[ktsw ];
-      f_TSE = (D.f[dirTSE ])[ktse ];
-      f_TNW = (D.f[dirTNW ])[ktnw ];
-      f_BNE = (D.f[dirBNE ])[kbne ];
-      f_BSW = (D.f[dirBSW ])[kbsw ];
-      f_BSE = (D.f[dirBSE ])[kbse ];
-      f_BNW = (D.f[dirBNW ])[kbnw ];
+      f_E   = (D.f[E   ])[ke   ];
+      f_W   = (D.f[W   ])[kw   ];
+      f_N   = (D.f[N   ])[kn   ];
+      f_S   = (D.f[S   ])[ks   ];
+      f_T   = (D.f[T   ])[kt   ];
+      f_B   = (D.f[B   ])[kb   ];
+      f_NE  = (D.f[NE  ])[kne  ];
+      f_SW  = (D.f[SW  ])[ksw  ];
+      f_SE  = (D.f[SE  ])[kse  ];
+      f_NW  = (D.f[NW  ])[knw  ];
+      f_TE  = (D.f[TE  ])[kte  ];
+      f_BW  = (D.f[BW  ])[kbw  ];
+      f_BE  = (D.f[BE  ])[kbe  ];
+      f_TW  = (D.f[TW  ])[ktw  ];
+      f_TN  = (D.f[TN  ])[ktn  ];
+      f_BS  = (D.f[BS  ])[kbs  ];
+      f_BN  = (D.f[BN  ])[kbn  ];
+      f_TS  = (D.f[TS  ])[kts  ];
+      f_TNE = (D.f[TNE ])[ktne ];
+      f_TSW = (D.f[TSW ])[ktsw ];
+      f_TSE = (D.f[TSE ])[ktse ];
+      f_TNW = (D.f[TNW ])[ktnw ];
+      f_BNE = (D.f[BNE ])[kbne ];
+      f_BSW = (D.f[BSW ])[kbsw ];
+      f_BSE = (D.f[BSE ])[kbse ];
+      f_BNW = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -1330,67 +1329,67 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 	  //ToDo anders Klammern
@@ -1399,182 +1398,182 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirW])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
+         (D.f[W])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirE])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
+         (D.f[E])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirS])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
+         (D.f[S])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirN])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
+         (D.f[N])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirB])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
+         (D.f[B])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirT])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
+         (D.f[T])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirSW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
+         (D.f[SW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirNE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
+         (D.f[NE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirNW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
+         (D.f[NW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) /** (one + drho)*/-cu_sq); 
-         (D.f[dirSE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
+         (D.f[SE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
+         (D.f[BW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
+         (D.f[TE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
+         (D.f[TW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
+         (D.f[BE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirTNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         (D.f[TNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) /** (one + drho)*/-cu_sq); 
-         (D.f[dirBSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         (D.f[BSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
       }
    }
 }
@@ -1619,17 +1618,15 @@ extern "C" __global__ void QVelDeviceIncompHighNu27(int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
-													int iny,
+extern "C" __global__ void QVelDeviceCompHighNu27(
 													real* vx,
 													real* vy,
 													real* vz,
-													real* DD, 
-													int* k_Q, 
+													real* DD,
+													int* k_Q,
 													real* QQ,
-													unsigned int sizeQ,
-													int numberOfBCnodes, 
-													real om1, 
+													unsigned int numberOfBCnodes, 
+													real om1,
 													unsigned int* neighborX,
 													unsigned int* neighborY,
 													unsigned int* neighborZ,
@@ -1639,63 +1636,63 @@ extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -1720,32 +1717,32 @@ extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -1780,63 +1777,63 @@ extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_E   = (D.f[dirE   ])[ke   ];
-      f_W   = (D.f[dirW   ])[kw   ];
-      f_N   = (D.f[dirN   ])[kn   ];
-      f_S   = (D.f[dirS   ])[ks   ];
-      f_T   = (D.f[dirT   ])[kt   ];
-      f_B   = (D.f[dirB   ])[kb   ];
-      f_NE  = (D.f[dirNE  ])[kne  ];
-      f_SW  = (D.f[dirSW  ])[ksw  ];
-      f_SE  = (D.f[dirSE  ])[kse  ];
-      f_NW  = (D.f[dirNW  ])[knw  ];
-      f_TE  = (D.f[dirTE  ])[kte  ];
-      f_BW  = (D.f[dirBW  ])[kbw  ];
-      f_BE  = (D.f[dirBE  ])[kbe  ];
-      f_TW  = (D.f[dirTW  ])[ktw  ];
-      f_TN  = (D.f[dirTN  ])[ktn  ];
-      f_BS  = (D.f[dirBS  ])[kbs  ];
-      f_BN  = (D.f[dirBN  ])[kbn  ];
-      f_TS  = (D.f[dirTS  ])[kts  ];
-      f_TNE = (D.f[dirTNE ])[ktne ];
-      f_TSW = (D.f[dirTSW ])[ktsw ];
-      f_TSE = (D.f[dirTSE ])[ktse ];
-      f_TNW = (D.f[dirTNW ])[ktnw ];
-      f_BNE = (D.f[dirBNE ])[kbne ];
-      f_BSW = (D.f[dirBSW ])[kbsw ];
-      f_BSE = (D.f[dirBSE ])[kbse ];
-      f_BNW = (D.f[dirBNW ])[kbnw ];
-      //f_W    = (D.f[dirE   ])[ke   ];
-      //f_E    = (D.f[dirW   ])[kw   ];
-      //f_S    = (D.f[dirN   ])[kn   ];
-      //f_N    = (D.f[dirS   ])[ks   ];
-      //f_B    = (D.f[dirT   ])[kt   ];
-      //f_T    = (D.f[dirB   ])[kb   ];
-      //f_SW   = (D.f[dirNE  ])[kne  ];
-      //f_NE   = (D.f[dirSW  ])[ksw  ];
-      //f_NW   = (D.f[dirSE  ])[kse  ];
-      //f_SE   = (D.f[dirNW  ])[knw  ];
-      //f_BW   = (D.f[dirTE  ])[kte  ];
-      //f_TE   = (D.f[dirBW  ])[kbw  ];
-      //f_TW   = (D.f[dirBE  ])[kbe  ];
-      //f_BE   = (D.f[dirTW  ])[ktw  ];
-      //f_BS   = (D.f[dirTN  ])[ktn  ];
-      //f_TN   = (D.f[dirBS  ])[kbs  ];
-      //f_TS   = (D.f[dirBN  ])[kbn  ];
-      //f_BN   = (D.f[dirTS  ])[kts  ];
-      //f_BSW  = (D.f[dirTNE ])[ktne ];
-      //f_BNE  = (D.f[dirTSW ])[ktsw ];
-      //f_BNW  = (D.f[dirTSE ])[ktse ];
-      //f_BSE  = (D.f[dirTNW ])[ktnw ];
-      //f_TSW  = (D.f[dirBNE ])[kbne ];
-      //f_TNE  = (D.f[dirBSW ])[kbsw ];
-      //f_TNW  = (D.f[dirBSE ])[kbse ];
-      //f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_E   = (D.f[E   ])[ke   ];
+      f_W   = (D.f[W   ])[kw   ];
+      f_N   = (D.f[N   ])[kn   ];
+      f_S   = (D.f[S   ])[ks   ];
+      f_T   = (D.f[T   ])[kt   ];
+      f_B   = (D.f[B   ])[kb   ];
+      f_NE  = (D.f[NE  ])[kne  ];
+      f_SW  = (D.f[SW  ])[ksw  ];
+      f_SE  = (D.f[SE  ])[kse  ];
+      f_NW  = (D.f[NW  ])[knw  ];
+      f_TE  = (D.f[TE  ])[kte  ];
+      f_BW  = (D.f[BW  ])[kbw  ];
+      f_BE  = (D.f[BE  ])[kbe  ];
+      f_TW  = (D.f[TW  ])[ktw  ];
+      f_TN  = (D.f[TN  ])[ktn  ];
+      f_BS  = (D.f[BS  ])[kbs  ];
+      f_BN  = (D.f[BN  ])[kbn  ];
+      f_TS  = (D.f[TS  ])[kts  ];
+      f_TNE = (D.f[TNE ])[ktne ];
+      f_TSW = (D.f[TSW ])[ktsw ];
+      f_TSE = (D.f[TSE ])[ktse ];
+      f_TNW = (D.f[TNW ])[ktnw ];
+      f_BNE = (D.f[BNE ])[kbne ];
+      f_BSW = (D.f[BSW ])[kbsw ];
+      f_BSE = (D.f[BSE ])[kbse ];
+      f_BNW = (D.f[BNW ])[kbnw ];
+      //f_W    = (D.f[E   ])[ke   ];
+      //f_E    = (D.f[W   ])[kw   ];
+      //f_S    = (D.f[N   ])[kn   ];
+      //f_N    = (D.f[S   ])[ks   ];
+      //f_B    = (D.f[T   ])[kt   ];
+      //f_T    = (D.f[B   ])[kb   ];
+      //f_SW   = (D.f[NE  ])[kne  ];
+      //f_NE   = (D.f[SW  ])[ksw  ];
+      //f_NW   = (D.f[SE  ])[kse  ];
+      //f_SE   = (D.f[NW  ])[knw  ];
+      //f_BW   = (D.f[TE  ])[kte  ];
+      //f_TE   = (D.f[BW  ])[kbw  ];
+      //f_TW   = (D.f[BE  ])[kbe  ];
+      //f_BE   = (D.f[TW  ])[ktw  ];
+      //f_BS   = (D.f[TN  ])[ktn  ];
+      //f_TN   = (D.f[BS  ])[kbs  ];
+      //f_TS   = (D.f[BN  ])[kbn  ];
+      //f_BN   = (D.f[TS  ])[kts  ];
+      //f_BSW  = (D.f[TNE ])[ktne ];
+      //f_BNE  = (D.f[TSW ])[ktsw ];
+      //f_BNW  = (D.f[TSE ])[ktse ];
+      //f_BSE  = (D.f[TNW ])[ktnw ];
+      //f_TSW  = (D.f[BNE ])[kbne ];
+      //f_TNE  = (D.f[BSW ])[kbsw ];
+      //f_TNW  = (D.f[BSE ])[kbse ];
+      //f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -1856,67 +1853,67 @@ extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 	  //ToDo anders Klammern
@@ -1925,234 +1922,234 @@ extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
-         //(D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirW])[kw]=zero;
+         (D.f[W])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX     )) / (q + c1o1) ;
+         //(D.f[W])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q) - c2over27 * drho;
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
-         //(D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirE])[ke]=zero;
+         (D.f[E])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX     )) / (q + c1o1) ;
+         //(D.f[E])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q) - c2over27 * drho;
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
-         //(D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirS])[ks]=zero;
+         (D.f[S])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY     )) / (q + c1o1) ;
+         //(D.f[S])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q) - c2over27 * drho;
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
-         //(D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirN])[kn]=zero;
+         (D.f[N])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY     )) / (q + c1o1) ;
+         //(D.f[N])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q) - c2over27 * drho;
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
-         //(D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirB])[kb]=one;
+         (D.f[B])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ     )) / (q + c1o1) ;
+         //(D.f[B])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q) - c2over27 * drho;
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
-         //(D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q) - c2over27 * drho;
-         //(D.f[dirT])[kt]=zero;
+         (D.f[T])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ     )) / (q + c1o1) ;
+         //(D.f[T])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q) - c2over27 * drho;
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirSW])[ksw]=zero;
+         (D.f[SW])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[SW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirNE])[kne]=zero;
+         (D.f[NE])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[NE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
-         //(D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirNW])[knw]=zero;
+         (D.f[NW])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ;
+         //(D.f[NW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
-         //(D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho;
-         //(D.f[dirSE])[kse]=zero;
+         (D.f[SE])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ;
+         //(D.f[SE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho;
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBW])[kbw]=zero;
+         (D.f[BW])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[BW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTE])[kte]=zero;
+         (D.f[TE])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[TE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTW])[ktw]=zero;
+         (D.f[TW])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ;
+         //(D.f[TW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBE])[kbe]=zero;
+         (D.f[BE])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ;
+         //(D.f[BE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBS])[kbs]=zero;
+         (D.f[BS])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTN])[ktn]=zero;
+         (D.f[TN])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirTS])[kts]=zero;
+         (D.f[TS])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho;
-         //(D.f[dirBN])[kbn]=zero;
+         (D.f[BN])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho;
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBSW])[kbsw]=zero;
+         (D.f[BSW])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTNE])[ktne]=zero;
+         (D.f[TNE])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTSW])[ktsw]=zero;
+         (D.f[TSW])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBNE])[kbne]=zero;
+         (D.f[BNE])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBNW])[kbnw]=zero;
+         (D.f[BNW])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTSE])[ktse]=zero;
+         (D.f[TSE])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
-         //(D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirTNW])[ktnw]=zero;
+         (D.f[TNW])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ;
+         //(D.f[TNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
-         //(D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
-         //(D.f[dirBSE])[kbse]=zero;
+         (D.f[BSE])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ;
+         //(D.f[BSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho;
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -2197,136 +2194,67 @@ extern "C" __global__ void QVelDeviceCompHighNu27(  int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QVelDeviceCompZeroPress27(   int inx,
-														int iny,
-														real* vx,
-														real* vy,
-														real* vz,
-														real* DD, 
-														int* k_Q, 
-														real* QQ,
-														unsigned int sizeQ,
-														//int numberOfBCnodes, 
-														real om1, 
+extern "C" __global__ void QVelDeviceCompZeroPress27(
+														real* velocityX,
+														real* velocityY,
+														real* velocityZ,
+														real* distribution, 
+														int* subgridDistanceIndices, 
+														real* subgridDistances,
+														unsigned int numberOfBCnodes, 
+														real omega, 
 														unsigned int* neighborX,
 														unsigned int* neighborY,
 														unsigned int* neighborZ,
-														unsigned int size_Mat, 
+														unsigned int numberOfLBnodes, 
 														bool isEvenTimestep)
 {
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-   } 
-   else
-   {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-   }
-   ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //////////////////////////////////////////////////////////////////////////
+	//! The velocity boundary condition is executed in the following steps
+	//!
+	////////////////////////////////////////////////////////////////////////////////
+	//! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+	//!
+   const unsigned  x = threadIdx.x;  // global x-index 
+   const unsigned  y = blockIdx.x;   // global y-index 
+   const unsigned  z = blockIdx.y;   // global z-index 
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<sizeQ/*numberOfBCnodes*/)
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(k < numberOfBCnodes)
    {
+
+      //////////////////////////////////////////////////////////////////////////
+      //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+      //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+      //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distribution, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real VeloX = vx[k];
-      real VeloY = vy[k];
-      real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny)
+      //! - Set local velocities
+      //!
+      real VeloX = velocityX[k];
+      real VeloY = velocityY[k];
+      real VeloZ = velocityZ[k];
+
+
       ////////////////////////////////////////////////////////////////////////////////
-      real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
-            *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-            *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-            *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-            *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+     
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int KQK  = k_Q[k];
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int KQK  = subgridDistanceIndices[k];
       unsigned int kzero= KQK;
       unsigned int ke   = KQK;
       unsigned int kw   = neighborX[KQK];
@@ -2354,331 +2282,299 @@ extern "C" __global__ void QVelDeviceCompZeroPress27(   int inx,
       unsigned int kbne = kb;
       unsigned int ktne = KQK;
       unsigned int kbsw = neighborZ[ksw];
-      ////////////////////////////////////////////////////////////////////////////////
-      real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-         f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
-      real vx1, vx2, vx3, drho, feq, q;
-      drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
-                f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[E   ])[ke   ];
+      real f_E    = (dist.f[W   ])[kw   ];
+      real f_S    = (dist.f[N   ])[kn   ];
+      real f_N    = (dist.f[S   ])[ks   ];
+      real f_B    = (dist.f[T   ])[kt   ];
+      real f_T    = (dist.f[B   ])[kb   ];
+      real f_SW   = (dist.f[NE  ])[kne  ];
+      real f_NE   = (dist.f[SW  ])[ksw  ];
+      real f_NW   = (dist.f[SE  ])[kse  ];
+      real f_SE   = (dist.f[NW  ])[knw  ];
+      real f_BW   = (dist.f[TE  ])[kte  ];
+      real f_TE   = (dist.f[BW  ])[kbw  ];
+      real f_TW   = (dist.f[BE  ])[kbe  ];
+      real f_BE   = (dist.f[TW  ])[ktw  ];
+      real f_BS   = (dist.f[TN  ])[ktn  ];
+      real f_TN   = (dist.f[BS  ])[kbs  ];
+      real f_TS   = (dist.f[BN  ])[kbn  ];
+      real f_BN   = (dist.f[TS  ])[kts  ];
+      real f_BSW  = (dist.f[TNE ])[ktne ];
+      real f_BNE  = (dist.f[TSW ])[ktsw ];
+      real f_BNW  = (dist.f[TSE ])[ktse ];
+      real f_BSE  = (dist.f[TNW ])[ktnw ];
+      real f_TSW  = (dist.f[BNE ])[kbne ];
+      real f_TNE  = (dist.f[BSW ])[kbsw ];
+      real f_TNW  = (dist.f[BSE ])[kbse ];
+      real f_TSE  = (dist.f[BNW ])[kbnw ];
 
-      vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
-                (f_E - f_W)) / (c1o1 + drho); 
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Calculate macroscopic quantities
+      //!
+      real drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
+                     f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
+                     f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[REST])[kzero]); 
+
+      real vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                      ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
+                      (f_E - f_W)) / (c1o1 + drho); 
          
 
-      vx2    =   ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                 ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
-                 (f_N - f_S)) / (c1o1 + drho); 
-
-      vx3    =   (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
-                 (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
-                 (f_T - f_B)) / (c1o1 + drho); 
+      real vx2    =   ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                       ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
+                       (f_N - f_S)) / (c1o1 + drho); 
 
+      real vx3    =   (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
+                       (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
+                       (f_T - f_B)) / (c1o1 + drho); 
+    
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
 
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[dirZERO])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-
-	  //ToDo anders Klammern
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - change the pointer to write the results in the correct array
+      //!
+      getPointersToDistributions(dist, distribution, numberOfLBnodes, !isEvenTimestep);
 
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      real feq, q, velocityLB, velocityBC;
+      q = (subgridD.q[E])[k];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
       {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q) - c2o27 * drho;
-         //(D.f[dirW])[kw]=zero;
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloX;
+         (dist.f[W])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, omega, drho, velocityBC, c2o27);
       }
 
-      q = q_dirW[k];
+      q = (subgridD.q[W])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q) - c2o27 * drho;
-         //(D.f[dirE])[ke]=zero;
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloX;
+         (dist.f[E])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, omega, drho, velocityBC, c2o27);
       }
 
-      q = q_dirN[k];
+      q = (subgridD.q[N])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q) - c2o27 * drho;
-         //(D.f[dirS])[ks]=zero;
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloY;
+         (dist.f[S])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, omega, drho, velocityBC, c2o27);
       }
 
-      q = q_dirS[k];
+      q = (subgridD.q[S])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q) - c2o27 * drho;
-         //(D.f[dirN])[kn]=zero;
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloY;
+         (dist.f[N])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, omega, drho, velocityBC, c2o27);
       }
 
-      q = q_dirT[k];
+      q = (subgridD.q[T])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q) - c2o27 * drho;
-         //(D.f[dirB])[kb]=one;
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloZ;
+         (dist.f[B])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, omega, drho, velocityBC, c2o27);
       }
 
-      q = q_dirB[k];
+      q = (subgridD.q[B])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q) - c2o27 * drho;
-         //(D.f[dirT])[kt]=zero;
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloZ;
+         (dist.f[T])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, omega, drho, velocityBC, c2o27);
       }
 
-      q = q_dirNE[k];
+      q = (subgridD.q[NE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirSW])[ksw]=zero;
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloY;
+         (dist.f[SW])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirSW[k];
+      q = (subgridD.q[SW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirNE])[kne]=zero;
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloY;
+         (dist.f[NE])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirSE[k];
+      q = (subgridD.q[SE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirNW])[knw]=zero;
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloY;
+         (dist.f[NW])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirNW[k];
+      q = (subgridD.q[NW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirSE])[kse]=zero;
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloY;
+         (dist.f[SE])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirTE[k];
+      q = (subgridD.q[TE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirBW])[kbw]=zero;
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloZ;
+         (dist.f[BW])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirBW[k];
+      q = (subgridD.q[BW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirTE])[kte]=zero;
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloZ;
+         (dist.f[TE])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirBE[k];
+      q = (subgridD.q[BE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirTW])[ktw]=zero;
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloZ;
+         (dist.f[TW])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirTW[k];
+      q = (subgridD.q[TW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirBE])[kbe]=zero;
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloZ;
+         (dist.f[BE])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirTN[k];
+      q = (subgridD.q[TN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirBS])[kbs]=zero;
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY + VeloZ;
+         (dist.f[BS])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirBS[k];
+      q = (subgridD.q[BS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirTN])[ktn]=zero;
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY - VeloZ;
+         (dist.f[TN])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirBN[k];
+      q = (subgridD.q[BN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirTS])[kts]=zero;
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY - VeloZ;
+         (dist.f[TS])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirTS[k];
+      q = (subgridD.q[TS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho;
-         //(D.f[dirBN])[kbn]=zero;
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY + VeloZ;
+         (dist.f[BN])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, omega, drho, velocityBC, c1o54);
       }
 
-      q = q_dirTNE[k];
+      q = (subgridD.q[TNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirBSW])[kbsw]=zero;
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY + VeloZ;
+         (dist.f[BSW])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirBSW[k];
+      q = (subgridD.q[BSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirTNE])[ktne]=zero;
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY - VeloZ;
+         (dist.f[TNE])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirBNE[k];
+      q = (subgridD.q[BNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirTSW])[ktsw]=zero;
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY - VeloZ;
+         (dist.f[TSW])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirTSW[k];
+      q = (subgridD.q[TSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirBNE])[kbne]=zero;
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY + VeloZ;
+         (dist.f[BNE])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirTSE[k];
+      q = (subgridD.q[TSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirBNW])[kbnw]=zero;
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY + VeloZ;
+         (dist.f[BNW])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirBNW[k];
+      q = (subgridD.q[BNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirTSE])[ktse]=zero;
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY - VeloZ;
+         (dist.f[TSE])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirBSE[k];
+      q = (subgridD.q[BSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirTNW])[ktnw]=zero;
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY - VeloZ;
+         (dist.f[TNW])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, omega, drho, velocityBC, c1o216);
       }
 
-      q = q_dirTNW[k];
+      q = (subgridD.q[TNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho;
-         //(D.f[dirBSE])[kbse]=zero;
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY + VeloZ;
+         (dist.f[BSE])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, omega, drho, velocityBC, c1o216);
       }
    }
 }
@@ -2720,6 +2616,7 @@ extern "C" __global__ void QVelDeviceCompZeroPress27(   int inx,
 
 
 
+
 
 
 //////////////////////////////////////////////////////////////////////////////
@@ -2731,8 +2628,7 @@ extern "C" __global__ void QVelDeviceCompZeroPress1h27( int inx,
 														real* DD, 
 														int* k_Q, 
 														real* QQ,
-														unsigned int sizeQ,
-														int numberOfBCnodes, 
+														unsigned int numberOfBCnodes,
 														real om1, 
 														real Phi,
 														real angularVelocity,
@@ -2748,63 +2644,63 @@ extern "C" __global__ void QVelDeviceCompZeroPress1h27( int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -2843,32 +2739,32 @@ extern "C" __global__ void QVelDeviceCompZeroPress1h27( int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -2902,63 +2798,63 @@ extern "C" __global__ void QVelDeviceCompZeroPress1h27( int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  real vx1, vx2, vx3, drho, feq, q, cu_sq;
@@ -2975,182 +2871,182 @@ extern "C" __global__ void QVelDeviceCompZeroPress1h27( int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho+c3o1*( VeloXpur        )+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]= feq - c2o27 * drho;
+         (D.f[W])[kw]= feq - c2o27 * drho;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho+c3o1*(-VeloXpur        )+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]= feq - c2o27 * drho;
+         (D.f[E])[ke]= feq - c2o27 * drho;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho+c3o1*(    VeloYpur     )+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]= feq - c2o27 * drho;
+         (D.f[S])[ks]= feq - c2o27 * drho;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho+c3o1*(   -VeloYpur     )+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]= feq - c2o27 * drho;
+         (D.f[N])[kn]= feq - c2o27 * drho;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]= feq - c2o27 * drho;
+         (D.f[B])[kb]= feq - c2o27 * drho;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]= feq - c2o27 * drho;
+         (D.f[T])[kt]= feq - c2o27 * drho;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*( VeloXpur+VeloYpur    )+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]= feq - c1o54 * drho;
+         (D.f[SW])[ksw]= feq - c1o54 * drho;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(-VeloXpur-VeloYpur    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]= feq - c1o54 * drho;
+         (D.f[NE])[kne]= feq - c1o54 * drho;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*( VeloXpur-VeloYpur    )+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]= feq - c1o54 * drho;
+         (D.f[NW])[knw]= feq - c1o54 * drho;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(-VeloXpur+VeloYpur    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]= feq - c1o54 * drho;
+         (D.f[SE])[kse]= feq - c1o54 * drho;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*( VeloXpur    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]= feq - c1o54 * drho;
+         (D.f[BW])[kbw]= feq - c1o54 * drho;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(-VeloXpur    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]= feq - c1o54 * drho;
+         (D.f[TE])[kte]= feq - c1o54 * drho;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*( VeloXpur    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]= feq - c1o54 * drho;
+         (D.f[TW])[ktw]= feq - c1o54 * drho;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(-VeloXpur    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]= feq - c1o54 * drho;
+         (D.f[BE])[kbe]= feq - c1o54 * drho;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(     VeloYpur+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]= feq - c1o54 * drho;
+         (D.f[BS])[kbs]= feq - c1o54 * drho;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(    -VeloYpur-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]= feq - c1o54 * drho;
+         (D.f[TN])[ktn]= feq - c1o54 * drho;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(     VeloYpur-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]= feq - c1o54 * drho;
+         (D.f[TS])[kts]= feq - c1o54 * drho;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho+c3o1*(    -VeloYpur+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]= feq - c1o54 * drho;
+         (D.f[BN])[kbn]= feq - c1o54 * drho;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]= feq - c1o216 * drho;
+         (D.f[BSW])[kbsw]= feq - c1o216 * drho;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]= feq - c1o216 * drho;
+         (D.f[TNE])[ktne]= feq - c1o216 * drho;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]= feq - c1o216 * drho;
+         (D.f[TSW])[ktsw]= feq - c1o216 * drho;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]= feq - c1o216 * drho;
+         (D.f[BNE])[kbne]= feq - c1o216 * drho;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]= feq - c1o216 * drho;
+         (D.f[BNW])[kbnw]= feq - c1o216 * drho;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]= feq - c1o216 * drho;
+         (D.f[TSE])[ktse]= feq - c1o216 * drho;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]= feq - c1o216 * drho;
+         (D.f[TNW])[ktnw]= feq - c1o216 * drho;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]= feq - c1o216 * drho;
+         (D.f[BSE])[kbse]= feq - c1o216 * drho;
       }
    }
 }
@@ -3230,63 +3126,63 @@ extern "C" __global__ void LB_BC_Vel_West_27( int nx,
       Distributions27 D;
       if (isEvenTimestep==true)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
 
       ////////////////////////////////////////////////////////////////////////////////
@@ -3405,33 +3301,33 @@ extern "C" __global__ void LB_BC_Vel_West_27( int nx,
       real        f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,
          f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW;
 
-      f1_W    = (D.f[dirE   ])[k1e   ];
-      f1_E    = (D.f[dirW   ])[k1w   ];
-      f1_S    = (D.f[dirN   ])[k1n   ];
-      f1_N    = (D.f[dirS   ])[k1s   ];
-      f1_B    = (D.f[dirT   ])[k1t   ];
-      f1_T    = (D.f[dirB   ])[k1b   ];
-      f1_SW   = (D.f[dirNE  ])[k1ne  ];
-      f1_NE   = (D.f[dirSW  ])[k1sw  ];
-      f1_NW   = (D.f[dirSE  ])[k1se  ];
-      f1_SE   = (D.f[dirNW  ])[k1nw  ];
-      f1_BW   = (D.f[dirTE  ])[k1te  ];
-      f1_TE   = (D.f[dirBW  ])[k1bw  ];
-      f1_TW   = (D.f[dirBE  ])[k1be  ];
-      f1_BE   = (D.f[dirTW  ])[k1tw  ];
-      f1_BS   = (D.f[dirTN  ])[k1tn  ];
-      f1_TN   = (D.f[dirBS  ])[k1bs  ];
-      f1_TS   = (D.f[dirBN  ])[k1bn  ];
-      f1_BN   = (D.f[dirTS  ])[k1ts  ];
-      f1_ZERO = (D.f[dirZERO])[k1zero];
-      f1_BSW  = (D.f[dirTNE ])[k1tne ];
-      f1_BNE  = (D.f[dirTSW ])[k1tsw ];
-      f1_BNW  = (D.f[dirTSE ])[k1tse ];
-      f1_BSE  = (D.f[dirTNW ])[k1tnw ];
-      f1_TSW  = (D.f[dirBNE ])[k1bne ];
-      f1_TNE  = (D.f[dirBSW ])[k1bsw ];
-      f1_TNW  = (D.f[dirBSE ])[k1bse ];
-      f1_TSE  = (D.f[dirBNW ])[k1bnw ];
+      f1_W    = (D.f[E   ])[k1e   ];
+      f1_E    = (D.f[W   ])[k1w   ];
+      f1_S    = (D.f[N   ])[k1n   ];
+      f1_N    = (D.f[S   ])[k1s   ];
+      f1_B    = (D.f[T   ])[k1t   ];
+      f1_T    = (D.f[B   ])[k1b   ];
+      f1_SW   = (D.f[NE  ])[k1ne  ];
+      f1_NE   = (D.f[SW  ])[k1sw  ];
+      f1_NW   = (D.f[SE  ])[k1se  ];
+      f1_SE   = (D.f[NW  ])[k1nw  ];
+      f1_BW   = (D.f[TE  ])[k1te  ];
+      f1_TE   = (D.f[BW  ])[k1bw  ];
+      f1_TW   = (D.f[BE  ])[k1be  ];
+      f1_BE   = (D.f[TW  ])[k1tw  ];
+      f1_BS   = (D.f[TN  ])[k1tn  ];
+      f1_TN   = (D.f[BS  ])[k1bs  ];
+      f1_TS   = (D.f[BN  ])[k1bn  ];
+      f1_BN   = (D.f[TS  ])[k1ts  ];
+      f1_ZERO = (D.f[REST])[k1zero];
+      f1_BSW  = (D.f[TNE ])[k1tne ];
+      f1_BNE  = (D.f[TSW ])[k1tsw ];
+      f1_BNW  = (D.f[TSE ])[k1tse ];
+      f1_BSE  = (D.f[TNW ])[k1tnw ];
+      f1_TSW  = (D.f[BNE ])[k1bne ];
+      f1_TNE  = (D.f[BSW ])[k1bsw ];
+      f1_TNW  = (D.f[BSE ])[k1bse ];
+      f1_TSE  = (D.f[BNW ])[k1bnw ];
 
       real drho1    =  f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+
          f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW;
@@ -3447,33 +3343,33 @@ extern "C" __global__ void LB_BC_Vel_West_27( int nx,
 
       real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-      (D.f[dirZERO])[kzero] =   c8o27* (drho-cu_sq);
-      (D.f[dirE   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-      (D.f[dirW   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-      (D.f[dirN   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-      (D.f[dirS   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-      (D.f[dirT   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-      (D.f[dirB   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-      (D.f[dirNE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-      (D.f[dirSW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-      (D.f[dirSE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-      (D.f[dirNW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-      (D.f[dirTE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-      (D.f[dirBW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-      (D.f[dirBE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-      (D.f[dirTW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-      (D.f[dirTN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-      (D.f[dirBS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-      (D.f[dirBN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-      (D.f[dirTS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-      (D.f[dirTNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-      (D.f[dirBSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-      (D.f[dirBNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-      (D.f[dirTSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-      (D.f[dirTSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-      (D.f[dirBNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-      (D.f[dirBSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-      (D.f[dirTNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+      (D.f[REST])[kzero] =   c8o27* (drho-cu_sq);
+      (D.f[E   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+      (D.f[W   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+      (D.f[N   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+      (D.f[S   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+      (D.f[T   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+      (D.f[B   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+      (D.f[NE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+      (D.f[SW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+      (D.f[SE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+      (D.f[NW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+      (D.f[TE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+      (D.f[BW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+      (D.f[BE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+      (D.f[TW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+      (D.f[TN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+      (D.f[BS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+      (D.f[BN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+      (D.f[TS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+      (D.f[TNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+      (D.f[BSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+      (D.f[BNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+      (D.f[TSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+      (D.f[TSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+      (D.f[BNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+      (D.f[BSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+      (D.f[TNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
    }
    __syncthreads();
 }          
@@ -3518,282 +3414,154 @@ extern "C" __global__ void LB_BC_Vel_West_27( int nx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QVelDevPlainBB27(real* vx,
-											real* vy,
-	 										real* vz,
-											real* DD,
-											int* k_Q, 
-											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes, 
-											real om1, 
-											unsigned int* neighborX,
-											unsigned int* neighborY,
-											unsigned int* neighborZ,
-											unsigned int size_Mat, 
-											bool isEvenTimestep)
+extern "C" __global__ void QVelDevPlainBB27(
+   real* velocityX,
+   real* velocityY,
+   real* velocityZ,
+   real* distributions,
+   int* subgridDistanceIndices,
+   real* subgridDistances,
+   uint numberOfBCnodes,
+   uint* neighborX,
+   uint* neighborY,
+   uint* neighborZ,
+   uint numberOfLBnodes,
+   bool isEvenTimestep)
 {
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-   } 
-   else
-   {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-   }
+   //////////////////////////////////////////////////////////////////////////
+   //! The velocity boundary condition is executed in the following steps
+   //!
    ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned  x = threadIdx.x;   // global x-index
+   const unsigned  y = blockIdx.x;    // global y-index
+   const unsigned  z = blockIdx.y;    // global z-index
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfBCnodes)
+   //////////////////////////////////////////////////////////////////////////
+   // run for all indices in size of boundary condition (numberOfBCnodes)
+   if(k < numberOfBCnodes)
    {
-	  ////////////////////////////////////////////////////////////////////////////////
-	  real VeloX = vx[k];
-	  real VeloY = vy[k];
-	  real VeloZ = vz[k];
+       //////////////////////////////////////////////////////////////////////////
+       //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+       //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+       //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real*q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
-			 *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-			 *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-			 *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-			 *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      //! - Set local velocities
+      //!
+      real VeloX = velocityX[k];
+      real VeloY = velocityY[k];
+      real VeloZ = velocityZ[k];
+
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int KQK  = k_Q[k];
-      //unsigned int kzero= KQK;
-      unsigned int ke   = KQK;
-      unsigned int kw   = neighborX[KQK];
-      unsigned int kn   = KQK;
-      unsigned int ks   = neighborY[KQK];
-      unsigned int kt   = KQK;
-      unsigned int kb   = neighborZ[KQK];
-      unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = KQK;
-      unsigned int kse  = ks;
-      unsigned int knw  = kw;
-      unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = KQK;
-      unsigned int kbe  = kb;
-      unsigned int ktw  = kw;
-      unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = KQK;
-      unsigned int kbn  = kb;
-      unsigned int kts  = ks;
-      unsigned int ktse = ks;
-      unsigned int kbnw = kbw;
-      unsigned int ktnw = kw;
-      unsigned int kbse = kbs;
-      unsigned int ktsw = ksw;
-      unsigned int kbne = kb;
-      unsigned int ktne = KQK;
-      unsigned int kbsw = neighborZ[ksw];
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+
       ////////////////////////////////////////////////////////////////////////////////
-     
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      uint indexOfBCnode = subgridDistanceIndices[k];
+      uint ke   = indexOfBCnode;
+      uint kw   = neighborX[indexOfBCnode];
+      uint kn   = indexOfBCnode;
+      uint ks   = neighborY[indexOfBCnode];
+      uint kt   = indexOfBCnode;
+      uint kb   = neighborZ[indexOfBCnode];
+      uint ksw  = neighborY[kw];
+      uint kne  = indexOfBCnode;
+      uint kse  = ks;
+      uint knw  = kw;
+      uint kbw  = neighborZ[kw];
+      uint kte  = indexOfBCnode;
+      uint kbe  = kb;
+      uint ktw  = kw;
+      uint kbs  = neighborZ[ks];
+      uint ktn  = indexOfBCnode;
+      uint kbn  = kb;
+      uint kts  = ks;
+      uint ktse = ks;
+      uint kbnw = kbw;
+      uint ktnw = kw;
+      uint kbse = kbs;
+      uint ktsw = ksw;
+      uint kbne = kb;
+      uint ktne = indexOfBCnode;
+      uint kbsw = neighborZ[ksw];
+
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
-	  ////////////////////////////////////////////////////////////////////////////////
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[E   ])[ke   ];
+      real f_E    = (dist.f[W   ])[kw   ];
+      real f_S    = (dist.f[N   ])[kn   ];
+      real f_N    = (dist.f[S   ])[ks   ];
+      real f_B    = (dist.f[T   ])[kt   ];
+      real f_T    = (dist.f[B   ])[kb   ];
+      real f_SW   = (dist.f[NE  ])[kne  ];
+      real f_NE   = (dist.f[SW  ])[ksw  ];
+      real f_NW   = (dist.f[SE  ])[kse  ];
+      real f_SE   = (dist.f[NW  ])[knw  ];
+      real f_BW   = (dist.f[TE  ])[kte  ];
+      real f_TE   = (dist.f[BW  ])[kbw  ];
+      real f_TW   = (dist.f[BE  ])[kbe  ];
+      real f_BE   = (dist.f[TW  ])[ktw  ];
+      real f_BS   = (dist.f[TN  ])[ktn  ];
+      real f_TN   = (dist.f[BS  ])[kbs  ];
+      real f_TS   = (dist.f[BN  ])[kbn  ];
+      real f_BN   = (dist.f[TS  ])[kts  ];
+      real f_BSW  = (dist.f[TNE ])[ktne ];
+      real f_BNE  = (dist.f[TSW ])[ktsw ];
+      real f_BNW  = (dist.f[TSE ])[ktse ];
+      real f_BSE  = (dist.f[TNW ])[ktnw ];
+      real f_TSW  = (dist.f[BNE ])[kbne ];
+      real f_TNE  = (dist.f[BSW ])[kbsw ];
+      real f_TNW  = (dist.f[BSE ])[kbse ];
+      real f_TSE  = (dist.f[BNW ])[kbnw ];
 
-	  ////////////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-	  ////////////////////////////////////////////////////////////////////////////////
-	  real q;
-      q = q_dirE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirW  ])[kw  ]=f_E   - c6o1 * c2o27  * VeloX;	
-      q = q_dirW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirE  ])[ke  ]=f_W   + c6o1 * c2o27  * VeloX;	
-      q = q_dirN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirS  ])[ks  ]=f_N   - c6o1 * c2o27  * VeloY;	
-      q = q_dirS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirN  ])[kn  ]=f_S   + c6o1 * c2o27  * VeloY;	
-      q = q_dirT[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirB  ])[kb  ]=f_T   - c6o1 * c2o27  * VeloZ;
-      q = q_dirB[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirT  ])[kt  ]=f_B   + c6o1 * c2o27  * VeloZ;
-      q = q_dirNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirSW ])[ksw ]=f_NE  - c6o1 * c1o54  * VeloX - c1o54  * VeloY;
-	  q = q_dirSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirNE ])[kne ]=f_SW  + c6o1 * c1o54  * VeloX + c1o54  * VeloY;
-	  q = q_dirSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirNW ])[knw ]=f_SE  - c6o1 * c1o54  * VeloX + c1o54  * VeloY;
-	  q = q_dirNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirSE ])[kse ]=f_NW  + c6o1 * c1o54  * VeloX - c1o54  * VeloY;
-	  q = q_dirTE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBW ])[kbw ]=f_TE  - c6o1 * c1o54  * VeloX - c1o54  * VeloZ;
-	  q = q_dirBW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTE ])[kte ]=f_BW  + c6o1 * c1o54  * VeloX + c1o54  * VeloZ;
-	  q = q_dirBE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTW ])[ktw ]=f_BE  - c6o1 * c1o54  * VeloX + c1o54  * VeloZ;
-	  q = q_dirTW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBE ])[kbe ]=f_TW  + c6o1 * c1o54  * VeloX - c1o54  * VeloZ;
-	  q = q_dirTN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBS ])[kbs ]=f_TN  - c6o1 * c1o54  * VeloY - c1o54  * VeloZ;
-	  q = q_dirBS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTN ])[ktn ]=f_BS  + c6o1 * c1o54  * VeloY + c1o54  * VeloZ;
-	  q = q_dirBN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTS ])[kts ]=f_BN  - c6o1 * c1o54  * VeloY + c1o54  * VeloZ;
-	  q = q_dirTS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBN ])[kbn ]=f_TS  + c6o1 * c1o54  * VeloY - c1o54  * VeloZ;
-      q = q_dirTNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBSW])[kbsw]=f_TNE - c6o1 * c1o216 * VeloX - c1o216 * VeloY - c1o216 * VeloZ;
-      q = q_dirBSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTNE])[ktne]=f_BSW + c6o1 * c1o216 * VeloX + c1o216 * VeloY + c1o216 * VeloZ;
-      q = q_dirBNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTSW])[ktsw]=f_BNE - c6o1 * c1o216 * VeloX - c1o216 * VeloY + c1o216 * VeloZ;
-      q = q_dirTSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBNE])[kbne]=f_TSW + c6o1 * c1o216 * VeloX + c1o216 * VeloY - c1o216 * VeloZ;
-      q = q_dirTSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBNW])[kbnw]=f_TSE - c6o1 * c1o216 * VeloX + c1o216 * VeloY - c1o216 * VeloZ;
-      q = q_dirBNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTSE])[ktse]=f_BNW + c6o1 * c1o216 * VeloX - c1o216 * VeloY + c1o216 * VeloZ;
-      q = q_dirBSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTNW])[ktnw]=f_BSE - c6o1 * c1o216 * VeloX + c1o216 * VeloY + c1o216 * VeloZ;
-      q = q_dirTNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBSE])[kbse]=f_TNW + c6o1 * c1o216 * VeloX - c1o216 * VeloY - c1o216 * VeloZ;
-	  ////////////////////////////////////////////////////////////////////////////////
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - change the pointer to write the results in the correct array
+      //!
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
+
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - rewrite distributions if there is a sub-grid distance (q) in same direction
+      real q;
+      q = (subgridD.q[E  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[W  ])[kw  ]=f_E   + c4o9  * (-VeloX);
+      q = (subgridD.q[W  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[E  ])[ke  ]=f_W   + c4o9  * ( VeloX);
+      q = (subgridD.q[N  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[S  ])[ks  ]=f_N   + c4o9  * (-VeloY);
+      q = (subgridD.q[S  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[N  ])[kn  ]=f_S   + c4o9  * ( VeloY);
+      q = (subgridD.q[T  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[B  ])[kb  ]=f_T   + c4o9  * (-VeloZ);
+      q = (subgridD.q[B  ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[T  ])[kt  ]=f_B   + c4o9  * ( VeloZ);
+      q = (subgridD.q[NE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[SW ])[ksw ]=f_NE  + c1o9  * (-VeloX - VeloY);
+      q = (subgridD.q[SW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[NE ])[kne ]=f_SW  + c1o9  * ( VeloX + VeloY);
+      q = (subgridD.q[SE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[NW ])[knw ]=f_SE  + c1o9  * (-VeloX + VeloY);
+      q = (subgridD.q[NW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[SE ])[kse ]=f_NW  + c1o9  * ( VeloX - VeloY);
+      q = (subgridD.q[TE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BW ])[kbw ]=f_TE  + c1o9  * (-VeloX - VeloZ);
+      q = (subgridD.q[BW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TE ])[kte ]=f_BW  + c1o9  * ( VeloX + VeloZ);
+      q = (subgridD.q[BE ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TW ])[ktw ]=f_BE  + c1o9  * (-VeloX + VeloZ);
+      q = (subgridD.q[TW ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BE ])[kbe ]=f_TW  + c1o9  * ( VeloX - VeloZ);
+      q = (subgridD.q[TN ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BS ])[kbs ]=f_TN  + c1o9  * (-VeloY - VeloZ);
+      q = (subgridD.q[BS ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TN ])[ktn ]=f_BS  + c1o9  * ( VeloY + VeloZ);
+      q = (subgridD.q[BN ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TS ])[kts ]=f_BN  + c1o9  * (-VeloY + VeloZ);
+      q = (subgridD.q[TS ])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BN ])[kbn ]=f_TS  + c1o9  * ( VeloY - VeloZ);
+      q = (subgridD.q[TNE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BSW])[kbsw]=f_TNE + c1o36 * (-VeloX - VeloY - VeloZ);
+      q = (subgridD.q[BSW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TNE])[ktne]=f_BSW + c1o36 * ( VeloX + VeloY + VeloZ);
+      q = (subgridD.q[BNE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TSW])[ktsw]=f_BNE + c1o36 * (-VeloX - VeloY + VeloZ);
+      q = (subgridD.q[TSW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BNE])[kbne]=f_TSW + c1o36 * ( VeloX + VeloY - VeloZ);
+      q = (subgridD.q[TSE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BNW])[kbnw]=f_TSE + c1o36 * (-VeloX + VeloY - VeloZ);
+      q = (subgridD.q[BNW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TSE])[ktse]=f_BNW + c1o36 * ( VeloX - VeloY + VeloZ);
+      q = (subgridD.q[BSE])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[TNW])[ktnw]=f_BSE + c1o36 * (-VeloX + VeloY + VeloZ);
+      q = (subgridD.q[TNW])[k];   if (q>=c0o1 && q<=c1o1)    (dist.f[BSE])[kbse]=f_TNW + c1o36 * ( VeloX - VeloY - VeloZ);
    }
 }
 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -3837,14 +3605,13 @@ extern "C" __global__ void QVelDevPlainBB27(real* vx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QVelDevCouhette27(real* vx,
+extern "C" __global__ void QVelDevCouette27(real* vx,
 											real* vy,
 	 										real* vz,
 											real* DD,
 											int* k_Q, 
 											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes, 
+											unsigned int numberOfBCnodes, 
 											real om1, 
 											unsigned int* neighborX,
 											unsigned int* neighborY,
@@ -3855,63 +3622,63 @@ extern "C" __global__ void QVelDevCouhette27(real* vx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -3936,32 +3703,32 @@ extern "C" __global__ void QVelDevCouhette27(real* vx,
 			 *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
 			 *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 			 *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -3995,94 +3762,94 @@ extern "C" __global__ void QVelDevCouhette27(real* vx,
       ////////////////////////////////////////////////////////////////////////////////
      
       ////////////////////////////////////////////////////////////////////////////////
-      real f_W    = (D.f[dirE   ])[ke   ];
-      real f_E    = (D.f[dirW   ])[kw   ];
-      real f_S    = (D.f[dirN   ])[kn   ];
-      real f_N    = (D.f[dirS   ])[ks   ];
-      real f_B    = (D.f[dirT   ])[kt   ];
-      real f_T    = (D.f[dirB   ])[kb   ];
-      real f_SW   = (D.f[dirNE  ])[kne  ];
-      real f_NE   = (D.f[dirSW  ])[ksw  ];
-      real f_NW   = (D.f[dirSE  ])[kse  ];
-      real f_SE   = (D.f[dirNW  ])[knw  ];
-      real f_BW   = (D.f[dirTE  ])[kte  ];
-      real f_TE   = (D.f[dirBW  ])[kbw  ];
-      real f_TW   = (D.f[dirBE  ])[kbe  ];
-      real f_BE   = (D.f[dirTW  ])[ktw  ];
-      real f_BS   = (D.f[dirTN  ])[ktn  ];
-      real f_TN   = (D.f[dirBS  ])[kbs  ];
-      real f_TS   = (D.f[dirBN  ])[kbn  ];
-      real f_BN   = (D.f[dirTS  ])[kts  ];
-      real f_BSW  = (D.f[dirTNE ])[ktne ];
-      real f_BNE  = (D.f[dirTSW ])[ktsw ];
-      real f_BNW  = (D.f[dirTSE ])[ktse ];
-      real f_BSE  = (D.f[dirTNW ])[ktnw ];
-      real f_TSW  = (D.f[dirBNE ])[kbne ];
-      real f_TNE  = (D.f[dirBSW ])[kbsw ];
-      real f_TNW  = (D.f[dirBSE ])[kbse ];
-      real f_TSE  = (D.f[dirBNW ])[kbnw ];
+      real f_W    = (D.f[E   ])[ke   ];
+      real f_E    = (D.f[W   ])[kw   ];
+      real f_S    = (D.f[N   ])[kn   ];
+      real f_N    = (D.f[S   ])[ks   ];
+      real f_B    = (D.f[T   ])[kt   ];
+      real f_T    = (D.f[B   ])[kb   ];
+      real f_SW   = (D.f[NE  ])[kne  ];
+      real f_NE   = (D.f[SW  ])[ksw  ];
+      real f_NW   = (D.f[SE  ])[kse  ];
+      real f_SE   = (D.f[NW  ])[knw  ];
+      real f_BW   = (D.f[TE  ])[kte  ];
+      real f_TE   = (D.f[BW  ])[kbw  ];
+      real f_TW   = (D.f[BE  ])[kbe  ];
+      real f_BE   = (D.f[TW  ])[ktw  ];
+      real f_BS   = (D.f[TN  ])[ktn  ];
+      real f_TN   = (D.f[BS  ])[kbs  ];
+      real f_TS   = (D.f[BN  ])[kbn  ];
+      real f_BN   = (D.f[TS  ])[kts  ];
+      real f_BSW  = (D.f[TNE ])[ktne ];
+      real f_BNE  = (D.f[TSW ])[ktsw ];
+      real f_BNW  = (D.f[TSE ])[ktse ];
+      real f_BSE  = (D.f[TNW ])[ktnw ];
+      real f_TSW  = (D.f[BNE ])[kbne ];
+      real f_TNE  = (D.f[BSW ])[kbsw ];
+      real f_TNW  = (D.f[BSE ])[kbse ];
+      real f_TSE  = (D.f[BNW ])[kbnw ];
 	  ////////////////////////////////////////////////////////////////////////////////
 
 	  ////////////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
 	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  ///////               FlowDirection Y !!!!!!!!!!                                                           ///////////////////////////////////
@@ -4102,58 +3869,58 @@ extern "C" __global__ void QVelDevCouhette27(real* vx,
 	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 	  //set distributions
       real q;
-      q = q_dirE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirW  ])[kw  ]=f_E   + ms*c2o27  * VeloX;	
-      q = q_dirW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirE  ])[ke  ]=f_W   - ms*c2o27  * VeloX;	
-      q = q_dirN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirS  ])[ks  ]=f_N   + ms*c2o27  * VeloY;	
-      q = q_dirS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirN  ])[kn  ]=f_S   - ms*c2o27  * VeloY;	
-	  q = q_dirT[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirB  ])[kb  ]=f_T   + ms*c2o27  * VeloZ - c3o2*c2o27*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
-      q = q_dirB[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirT  ])[kt  ]=f_B   - ms*c2o27  * VeloZ;
-      q = q_dirNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirSW ])[ksw ]=f_NE  + ms*c1o54  * VeloX + ms*c1o54  * VeloY;
-	  q = q_dirSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirNE ])[kne ]=f_SW  - ms*c1o54  * VeloX - ms*c1o54  * VeloY;
-	  q = q_dirSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirNW ])[knw ]=f_SE  + ms*c1o54  * VeloX - ms*c1o54  * VeloY;
-	  q = q_dirNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirSE ])[kse ]=f_NW  - ms*c1o54  * VeloX + ms*c1o54  * VeloY;
-	  q = q_dirTE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBW ])[kbw ]=f_TE  + ms*c1o54  * VeloX + ms*c1o54  * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ;
-	  q = q_dirBW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTE ])[kte ]=f_BW  - ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
-	  q = q_dirBE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTW ])[ktw ]=f_BE  + ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
-	  q = q_dirTW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBE ])[kbe ]=f_TW  - ms*c1o54  * VeloX + ms*c1o54  * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ;
-	  q = q_dirTN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBS ])[kbs ]=f_TN  + ms*c1o54  * VeloY + ms*c1o54  * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ;
-	  q = q_dirBS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTN ])[ktn ]=f_BS  - ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
-	  q = q_dirBN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTS ])[kts ]=f_BN  + ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
-	  q = q_dirTS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBN ])[kbn ]=f_TS  - ms*c1o54  * VeloY + ms*c1o54  * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ;
-      q = q_dirTNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBSW])[kbsw]=f_TNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
-      q = q_dirBSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTNE])[ktne]=f_BSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirBNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTSW])[ktsw]=f_BNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirTSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBNE])[kbne]=f_TSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
-      q = q_dirTSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBNW])[kbnw]=f_TSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
-      q = q_dirBNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTSE])[ktse]=f_BNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirBSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirTNW])[ktnw]=f_BSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
-      q = q_dirTNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[dirBSE])[kbse]=f_TNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
-      //q = q_dirE[k];	if (q>=zero && q<=one)	(D.f[dirW  ])[kw  ]=f_E   + ms*c2over27  * VeloX;	
-   //   q = q_dirW[k];	if (q>=zero && q<=one)	(D.f[dirE  ])[ke  ]=f_W   - ms*c2over27  * VeloX;	
-   //   q = q_dirN[k];	if (q>=zero && q<=one)	(D.f[dirS  ])[ks  ]=f_N   + ms*c2over27  * VeloY;	
-   //   q = q_dirS[k];	if (q>=zero && q<=one)	(D.f[dirN  ])[kn  ]=f_S   - ms*c2over27  * VeloY;	
-	  //q = q_dirT[k];	if (q>=zero && q<=one)	(D.f[dirB  ])[kb  ]=f_T   + ms*c2over27  * VeloZ - c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-   //   q = q_dirB[k];	if (q>=zero && q<=one)	(D.f[dirT  ])[kt  ]=f_B   - ms*c2over27  * VeloZ;
-   //   q = q_dirNE[k];	if (q>=zero && q<=one)	(D.f[dirSW ])[ksw ]=f_NE  + ms*c1over54  * VeloX + ms*c1over54  * VeloY;
-	  //q = q_dirSW[k];	if (q>=zero && q<=one)	(D.f[dirNE ])[kne ]=f_SW  - ms*c1over54  * VeloX - ms*c1over54  * VeloY;
-	  //q = q_dirSE[k];	if (q>=zero && q<=one)	(D.f[dirNW ])[knw ]=f_SE  + ms*c1over54  * VeloX - ms*c1over54  * VeloY;
-	  //q = q_dirNW[k];	if (q>=zero && q<=one)	(D.f[dirSE ])[kse ]=f_NW  - ms*c1over54  * VeloX + ms*c1over54  * VeloY;
-	  //q = q_dirTE[k];	if (q>=zero && q<=one)	(D.f[dirBW ])[kbw ]=f_TE  + ms*c1over54  * VeloX + ms*c1over54  * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-	  //q = q_dirBW[k];	if (q>=zero && q<=one)	(D.f[dirTE ])[kte ]=f_BW  - ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
-	  //q = q_dirBE[k];	if (q>=zero && q<=one)	(D.f[dirTW ])[ktw ]=f_BE  + ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
-	  //q = q_dirTW[k];	if (q>=zero && q<=one)	(D.f[dirBE ])[kbe ]=f_TW  - ms*c1over54  * VeloX + ms*c1over54  * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-	  //q = q_dirTN[k];	if (q>=zero && q<=one)	(D.f[dirBS ])[kbs ]=f_TN  + ms*c1over54  * VeloY + ms*c1over54  * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-	  //q = q_dirBS[k];	if (q>=zero && q<=one)	(D.f[dirTN ])[ktn ]=f_BS  - ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
-	  //q = q_dirBN[k];	if (q>=zero && q<=one)	(D.f[dirTS ])[kts ]=f_BN  + ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
-	  //q = q_dirTS[k];	if (q>=zero && q<=one)	(D.f[dirBN ])[kbn ]=f_TS  - ms*c1over54  * VeloY + ms*c1over54  * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-   //   q = q_dirTNE[k];	if (q>=zero && q<=one)	(D.f[dirBSW])[kbsw]=f_TNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-   //   q = q_dirBSW[k];	if (q>=zero && q<=one)	(D.f[dirTNE])[ktne]=f_BSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirBNE[k];	if (q>=zero && q<=one)	(D.f[dirTSW])[ktsw]=f_BNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirTSW[k];	if (q>=zero && q<=one)	(D.f[dirBNE])[kbne]=f_TSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-   //   q = q_dirTSE[k];	if (q>=zero && q<=one)	(D.f[dirBNW])[kbnw]=f_TSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
-   //   q = q_dirBNW[k];	if (q>=zero && q<=one)	(D.f[dirTSE])[ktse]=f_BNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirBSE[k];	if (q>=zero && q<=one)	(D.f[dirTNW])[ktnw]=f_BSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
-   //   q = q_dirTNW[k];	if (q>=zero && q<=one)	(D.f[dirBSE])[kbse]=f_TNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+      q = q_dirE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[W  ])[kw  ]=f_E   + ms*c2o27  * VeloX;	
+      q = q_dirW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[E  ])[ke  ]=f_W   - ms*c2o27  * VeloX;	
+      q = q_dirN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[S  ])[ks  ]=f_N   + ms*c2o27  * VeloY;	
+      q = q_dirS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[N  ])[kn  ]=f_S   - ms*c2o27  * VeloY;	
+	  q = q_dirT[k];	if (q>=c0o1 && q<=c1o1)	(D.f[B  ])[kb  ]=f_T   + ms*c2o27  * VeloZ - c3o2*c2o27*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
+      q = q_dirB[k];	if (q>=c0o1 && q<=c1o1)	(D.f[T  ])[kt  ]=f_B   - ms*c2o27  * VeloZ;
+      q = q_dirNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[SW ])[ksw ]=f_NE  + ms*c1o54  * VeloX + ms*c1o54  * VeloY;
+	  q = q_dirSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[NE ])[kne ]=f_SW  - ms*c1o54  * VeloX - ms*c1o54  * VeloY;
+	  q = q_dirSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[NW ])[knw ]=f_SE  + ms*c1o54  * VeloX - ms*c1o54  * VeloY;
+	  q = q_dirNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[SE ])[kse ]=f_NW  - ms*c1o54  * VeloX + ms*c1o54  * VeloY;
+	  q = q_dirTE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BW ])[kbw ]=f_TE  + ms*c1o54  * VeloX + ms*c1o54  * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ;
+	  q = q_dirBW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TE ])[kte ]=f_BW  - ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
+	  q = q_dirBE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TW ])[ktw ]=f_BE  + ms*c1o54  * VeloX - ms*c1o54  * VeloZ;
+	  q = q_dirTW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BE ])[kbe ]=f_TW  - ms*c1o54  * VeloX + ms*c1o54  * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ;
+	  q = q_dirTN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BS ])[kbs ]=f_TN  + ms*c1o54  * VeloY + ms*c1o54  * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ;
+	  q = q_dirBS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TN ])[ktn ]=f_BS  - ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
+	  q = q_dirBN[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TS ])[kts ]=f_BN  + ms*c1o54  * VeloY - ms*c1o54  * VeloZ;
+	  q = q_dirTS[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BN ])[kbn ]=f_TS  - ms*c1o54  * VeloY + ms*c1o54  * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ;
+      q = q_dirTNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BSW])[kbsw]=f_TNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
+      q = q_dirBSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TNE])[ktne]=f_BSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirBNE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TSW])[ktsw]=f_BNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirTSW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BNE])[kbne]=f_TSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
+      q = q_dirTSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BNW])[kbnw]=f_TSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
+      q = q_dirBNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TSE])[ktse]=f_BNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirBSE[k];	if (q>=c0o1 && q<=c1o1)	(D.f[TNW])[ktnw]=f_BSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ;
+      q = q_dirTNW[k];	if (q>=c0o1 && q<=c1o1)	(D.f[BSE])[kbse]=f_TNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on;
+      //q = q_dirE[k];	if (q>=zero && q<=one)	(D.f[W  ])[kw  ]=f_E   + ms*c2over27  * VeloX;	
+   //   q = q_dirW[k];	if (q>=zero && q<=one)	(D.f[E  ])[ke  ]=f_W   - ms*c2over27  * VeloX;	
+   //   q = q_dirN[k];	if (q>=zero && q<=one)	(D.f[S  ])[ks  ]=f_N   + ms*c2over27  * VeloY;	
+   //   q = q_dirS[k];	if (q>=zero && q<=one)	(D.f[N  ])[kn  ]=f_S   - ms*c2over27  * VeloY;	
+	  //q = q_dirT[k];	if (q>=zero && q<=one)	(D.f[B  ])[kb  ]=f_T   + ms*c2over27  * VeloZ - c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+   //   q = q_dirB[k];	if (q>=zero && q<=one)	(D.f[T  ])[kt  ]=f_B   - ms*c2over27  * VeloZ;
+   //   q = q_dirNE[k];	if (q>=zero && q<=one)	(D.f[SW ])[ksw ]=f_NE  + ms*c1over54  * VeloX + ms*c1over54  * VeloY;
+	  //q = q_dirSW[k];	if (q>=zero && q<=one)	(D.f[NE ])[kne ]=f_SW  - ms*c1over54  * VeloX - ms*c1over54  * VeloY;
+	  //q = q_dirSE[k];	if (q>=zero && q<=one)	(D.f[NW ])[knw ]=f_SE  + ms*c1over54  * VeloX - ms*c1over54  * VeloY;
+	  //q = q_dirNW[k];	if (q>=zero && q<=one)	(D.f[SE ])[kse ]=f_NW  - ms*c1over54  * VeloX + ms*c1over54  * VeloY;
+	  //q = q_dirTE[k];	if (q>=zero && q<=one)	(D.f[BW ])[kbw ]=f_TE  + ms*c1over54  * VeloX + ms*c1over54  * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+	  //q = q_dirBW[k];	if (q>=zero && q<=one)	(D.f[TE ])[kte ]=f_BW  - ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
+	  //q = q_dirBE[k];	if (q>=zero && q<=one)	(D.f[TW ])[ktw ]=f_BE  + ms*c1over54  * VeloX - ms*c1over54  * VeloZ;
+	  //q = q_dirTW[k];	if (q>=zero && q<=one)	(D.f[BE ])[kbe ]=f_TW  - ms*c1over54  * VeloX + ms*c1over54  * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+	  //q = q_dirTN[k];	if (q>=zero && q<=one)	(D.f[BS ])[kbs ]=f_TN  + ms*c1over54  * VeloY + ms*c1over54  * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+	  //q = q_dirBS[k];	if (q>=zero && q<=one)	(D.f[TN ])[ktn ]=f_BS  - ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
+	  //q = q_dirBN[k];	if (q>=zero && q<=one)	(D.f[TS ])[kts ]=f_BN  + ms*c1over54  * VeloY - ms*c1over54  * VeloZ;
+	  //q = q_dirTS[k];	if (q>=zero && q<=one)	(D.f[BN ])[kbn ]=f_TS  - ms*c1over54  * VeloY + ms*c1over54  * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+   //   q = q_dirTNE[k];	if (q>=zero && q<=one)	(D.f[BSW])[kbsw]=f_TNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+   //   q = q_dirBSW[k];	if (q>=zero && q<=one)	(D.f[TNE])[ktne]=f_BSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirBNE[k];	if (q>=zero && q<=one)	(D.f[TSW])[ktsw]=f_BNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirTSW[k];	if (q>=zero && q<=one)	(D.f[BNE])[kbne]=f_TSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+   //   q = q_dirTSE[k];	if (q>=zero && q<=one)	(D.f[BNW])[kbnw]=f_TSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
+   //   q = q_dirBNW[k];	if (q>=zero && q<=one)	(D.f[TSE])[ktse]=f_BNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirBSE[k];	if (q>=zero && q<=one)	(D.f[TNW])[ktnw]=f_BSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ;
+   //   q = q_dirTNW[k];	if (q>=zero && q<=one)	(D.f[BSE])[kbse]=f_TNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on;
 	  //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    }
 }
@@ -4206,8 +3973,7 @@ extern "C" __global__ void QVelDev1h27( int inx,
 										real* DD, 
 										int* k_Q, 
 										real* QQ,
-										unsigned int sizeQ,
-										int numberOfBCnodes, 
+										unsigned int numberOfBCnodes, 
 										real om1,
 										real Phi,
 										real angularVelocity,
@@ -4223,63 +3989,63 @@ extern "C" __global__ void QVelDev1h27( int inx,
 	Distributions27 D;
 	if (isEvenTimestep==true)
 	{
-		D.f[dirE   ] = &DD[dirE   *size_Mat];
-		D.f[dirW   ] = &DD[dirW   *size_Mat];
-		D.f[dirN   ] = &DD[dirN   *size_Mat];
-		D.f[dirS   ] = &DD[dirS   *size_Mat];
-		D.f[dirT   ] = &DD[dirT   *size_Mat];
-		D.f[dirB   ] = &DD[dirB   *size_Mat];
-		D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-		D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-		D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-		D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-		D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-		D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-		D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-		D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-		D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-		D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-		D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-		D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-		D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-		D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-		D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-		D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-		D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+		D.f[E   ] = &DD[E   *size_Mat];
+		D.f[W   ] = &DD[W   *size_Mat];
+		D.f[N   ] = &DD[N   *size_Mat];
+		D.f[S   ] = &DD[S   *size_Mat];
+		D.f[T   ] = &DD[T   *size_Mat];
+		D.f[B   ] = &DD[B   *size_Mat];
+		D.f[NE  ] = &DD[NE  *size_Mat];
+		D.f[SW  ] = &DD[SW  *size_Mat];
+		D.f[SE  ] = &DD[SE  *size_Mat];
+		D.f[NW  ] = &DD[NW  *size_Mat];
+		D.f[TE  ] = &DD[TE  *size_Mat];
+		D.f[BW  ] = &DD[BW  *size_Mat];
+		D.f[BE  ] = &DD[BE  *size_Mat];
+		D.f[TW  ] = &DD[TW  *size_Mat];
+		D.f[TN  ] = &DD[TN  *size_Mat];
+		D.f[BS  ] = &DD[BS  *size_Mat];
+		D.f[BN  ] = &DD[BN  *size_Mat];
+		D.f[TS  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[TNE *size_Mat];
+		D.f[TSW ] = &DD[TSW *size_Mat];
+		D.f[TSE ] = &DD[TSE *size_Mat];
+		D.f[TNW ] = &DD[TNW *size_Mat];
+		D.f[BNE ] = &DD[BNE *size_Mat];
+		D.f[BSW ] = &DD[BSW *size_Mat];
+		D.f[BSE ] = &DD[BSE *size_Mat];
+		D.f[BNW ] = &DD[BNW *size_Mat];
 	} 
 	else
 	{
-		D.f[dirW   ] = &DD[dirE   *size_Mat];
-		D.f[dirE   ] = &DD[dirW   *size_Mat];
-		D.f[dirS   ] = &DD[dirN   *size_Mat];
-		D.f[dirN   ] = &DD[dirS   *size_Mat];
-		D.f[dirB   ] = &DD[dirT   *size_Mat];
-		D.f[dirT   ] = &DD[dirB   *size_Mat];
-		D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-		D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-		D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-		D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-		D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-		D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-		D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-		D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-		D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-		D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-		D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-		D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-		D.f[dirZERO] = &DD[dirZERO*size_Mat];
-		D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-		D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-		D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-		D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-		D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-		D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-		D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-		D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+		D.f[W   ] = &DD[E   *size_Mat];
+		D.f[E   ] = &DD[W   *size_Mat];
+		D.f[S   ] = &DD[N   *size_Mat];
+		D.f[N   ] = &DD[S   *size_Mat];
+		D.f[B   ] = &DD[T   *size_Mat];
+		D.f[T   ] = &DD[B   *size_Mat];
+		D.f[SW  ] = &DD[NE  *size_Mat];
+		D.f[NE  ] = &DD[SW  *size_Mat];
+		D.f[NW  ] = &DD[SE  *size_Mat];
+		D.f[SE  ] = &DD[NW  *size_Mat];
+		D.f[BW  ] = &DD[TE  *size_Mat];
+		D.f[TE  ] = &DD[BW  *size_Mat];
+		D.f[TW  ] = &DD[BE  *size_Mat];
+		D.f[BE  ] = &DD[TW  *size_Mat];
+		D.f[BS  ] = &DD[TN  *size_Mat];
+		D.f[TN  ] = &DD[BS  *size_Mat];
+		D.f[TS  ] = &DD[BN  *size_Mat];
+		D.f[BN  ] = &DD[TS  *size_Mat];
+		D.f[REST] = &DD[REST*size_Mat];
+		D.f[TNE ] = &DD[BSW *size_Mat];
+		D.f[TSW ] = &DD[BNE *size_Mat];
+		D.f[TSE ] = &DD[BNW *size_Mat];
+		D.f[TNW ] = &DD[BSE *size_Mat];
+		D.f[BNE ] = &DD[TSW *size_Mat];
+		D.f[BSW ] = &DD[TNE *size_Mat];
+		D.f[BSE ] = &DD[TNW *size_Mat];
+		D.f[BNW ] = &DD[TSE *size_Mat];
 	}
 	////////////////////////////////////////////////////////////////////////////////
 	const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -4314,32 +4080,32 @@ extern "C" __global__ void QVelDev1h27( int inx,
 			*q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
 			*q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
 			*q_dirBSE, *q_dirBNW; 
-		q_dirE   = &QQ[dirE   *sizeQ];
-		q_dirW   = &QQ[dirW   *sizeQ];
-		q_dirN   = &QQ[dirN   *sizeQ];
-		q_dirS   = &QQ[dirS   *sizeQ];
-		q_dirT   = &QQ[dirT   *sizeQ];
-		q_dirB   = &QQ[dirB   *sizeQ];
-		q_dirNE  = &QQ[dirNE  *sizeQ];
-		q_dirSW  = &QQ[dirSW  *sizeQ];
-		q_dirSE  = &QQ[dirSE  *sizeQ];
-		q_dirNW  = &QQ[dirNW  *sizeQ];
-		q_dirTE  = &QQ[dirTE  *sizeQ];
-		q_dirBW  = &QQ[dirBW  *sizeQ];
-		q_dirBE  = &QQ[dirBE  *sizeQ];
-		q_dirTW  = &QQ[dirTW  *sizeQ];
-		q_dirTN  = &QQ[dirTN  *sizeQ];
-		q_dirBS  = &QQ[dirBS  *sizeQ];
-		q_dirBN  = &QQ[dirBN  *sizeQ];
-		q_dirTS  = &QQ[dirTS  *sizeQ];
-		q_dirTNE = &QQ[dirTNE *sizeQ];
-		q_dirTSW = &QQ[dirTSW *sizeQ];
-		q_dirTSE = &QQ[dirTSE *sizeQ];
-		q_dirTNW = &QQ[dirTNW *sizeQ];
-		q_dirBNE = &QQ[dirBNE *sizeQ];
-		q_dirBSW = &QQ[dirBSW *sizeQ];
-		q_dirBSE = &QQ[dirBSE *sizeQ];
-		q_dirBNW = &QQ[dirBNW *sizeQ];
+		q_dirE   = &QQ[E   * numberOfBCnodes];
+		q_dirW   = &QQ[W   * numberOfBCnodes];
+		q_dirN   = &QQ[N   * numberOfBCnodes];
+		q_dirS   = &QQ[S   * numberOfBCnodes];
+		q_dirT   = &QQ[T   * numberOfBCnodes];
+		q_dirB   = &QQ[B   * numberOfBCnodes];
+		q_dirNE  = &QQ[NE  * numberOfBCnodes];
+		q_dirSW  = &QQ[SW  * numberOfBCnodes];
+		q_dirSE  = &QQ[SE  * numberOfBCnodes];
+		q_dirNW  = &QQ[NW  * numberOfBCnodes];
+		q_dirTE  = &QQ[TE  * numberOfBCnodes];
+		q_dirBW  = &QQ[BW  * numberOfBCnodes];
+		q_dirBE  = &QQ[BE  * numberOfBCnodes];
+		q_dirTW  = &QQ[TW  * numberOfBCnodes];
+		q_dirTN  = &QQ[TN  * numberOfBCnodes];
+		q_dirBS  = &QQ[BS  * numberOfBCnodes];
+		q_dirBN  = &QQ[BN  * numberOfBCnodes];
+		q_dirTS  = &QQ[TS  * numberOfBCnodes];
+		q_dirTNE = &QQ[TNE * numberOfBCnodes];
+		q_dirTSW = &QQ[TSW * numberOfBCnodes];
+		q_dirTSE = &QQ[TSE * numberOfBCnodes];
+		q_dirTNW = &QQ[TNW * numberOfBCnodes];
+		q_dirBNE = &QQ[BNE * numberOfBCnodes];
+		q_dirBSW = &QQ[BSW * numberOfBCnodes];
+		q_dirBSE = &QQ[BSE * numberOfBCnodes];
+		q_dirBNW = &QQ[BNW * numberOfBCnodes];
 		////////////////////////////////////////////////////////////////////////////////
 		//index
 		unsigned int KQK  = k_Q[k];
@@ -4402,37 +4168,37 @@ extern "C" __global__ void QVelDev1h27( int inx,
 		//real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
 		//	f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-		//f_W    = (D.f[dirE   ])[ke   ];
-		//f_E    = (D.f[dirW   ])[kw   ];
-		//f_S    = (D.f[dirN   ])[kn   ];
-		//f_N    = (D.f[dirS   ])[ks   ];
-		//f_B    = (D.f[dirT   ])[kt   ];
-		//f_T    = (D.f[dirB   ])[kb   ];
-		//f_SW   = (D.f[dirNE  ])[kne  ];
-		//f_NE   = (D.f[dirSW  ])[ksw  ];
-		//f_NW   = (D.f[dirSE  ])[kse  ];
-		//f_SE   = (D.f[dirNW  ])[knw  ];
-		//f_BW   = (D.f[dirTE  ])[kte  ];
-		//f_TE   = (D.f[dirBW  ])[kbw  ];
-		//f_TW   = (D.f[dirBE  ])[kbe  ];
-		//f_BE   = (D.f[dirTW  ])[ktw  ];
-		//f_BS   = (D.f[dirTN  ])[ktn  ];
-		//f_TN   = (D.f[dirBS  ])[kbs  ];
-		//f_TS   = (D.f[dirBN  ])[kbn  ];
-		//f_BN   = (D.f[dirTS  ])[kts  ];
-		//f_BSW  = (D.f[dirTNE ])[ktne ];
-		//f_BNE  = (D.f[dirTSW ])[ktsw ];
-		//f_BNW  = (D.f[dirTSE ])[ktse ];
-		//f_BSE  = (D.f[dirTNW ])[ktnw ];
-		//f_TSW  = (D.f[dirBNE ])[kbne ];
-		//f_TNE  = (D.f[dirBSW ])[kbsw ];
-		//f_TNW  = (D.f[dirBSE ])[kbse ];
-		//f_TSE  = (D.f[dirBNW ])[kbnw ];
+		//f_W    = (D.f[E   ])[ke   ];
+		//f_E    = (D.f[W   ])[kw   ];
+		//f_S    = (D.f[N   ])[kn   ];
+		//f_N    = (D.f[S   ])[ks   ];
+		//f_B    = (D.f[T   ])[kt   ];
+		//f_T    = (D.f[B   ])[kb   ];
+		//f_SW   = (D.f[NE  ])[kne  ];
+		//f_NE   = (D.f[SW  ])[ksw  ];
+		//f_NW   = (D.f[SE  ])[kse  ];
+		//f_SE   = (D.f[NW  ])[knw  ];
+		//f_BW   = (D.f[TE  ])[kte  ];
+		//f_TE   = (D.f[BW  ])[kbw  ];
+		//f_TW   = (D.f[BE  ])[kbe  ];
+		//f_BE   = (D.f[TW  ])[ktw  ];
+		//f_BS   = (D.f[TN  ])[ktn  ];
+		//f_TN   = (D.f[BS  ])[kbs  ];
+		//f_TS   = (D.f[BN  ])[kbn  ];
+		//f_BN   = (D.f[TS  ])[kts  ];
+		//f_BSW  = (D.f[TNE ])[ktne ];
+		//f_BNE  = (D.f[TSW ])[ktsw ];
+		//f_BNW  = (D.f[TSE ])[ktse ];
+		//f_BSE  = (D.f[TNW ])[ktnw ];
+		//f_TSW  = (D.f[BNE ])[kbne ];
+		//f_TNE  = (D.f[BSW ])[kbsw ];
+		//f_TNW  = (D.f[BSE ])[kbse ];
+		//f_TSE  = (D.f[BNW ])[kbnw ];
 		////////////////////////////////////////////////////////////////////////////////
 		real /*vx1, vx2,*/ vx3, drho, feq, q, cu_sq;
 		//drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
 		//	f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-		//	f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+		//	f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
 		//vx1    =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
 		//	((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -4452,67 +4218,67 @@ extern "C" __global__ void QVelDev1h27( int inx,
 		//////////////////////////////////////////////////////////////////////////
 		if (isEvenTimestep==false)
 		{
-			D.f[dirE   ] = &DD[dirE   *size_Mat];
-			D.f[dirW   ] = &DD[dirW   *size_Mat];
-			D.f[dirN   ] = &DD[dirN   *size_Mat];
-			D.f[dirS   ] = &DD[dirS   *size_Mat];
-			D.f[dirT   ] = &DD[dirT   *size_Mat];
-			D.f[dirB   ] = &DD[dirB   *size_Mat];
-			D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-			D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-			D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-			D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-			D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-			D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-			D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-			D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-			D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-			D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-			D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-			D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-			D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-			D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-			D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-			D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-			D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+			D.f[E   ] = &DD[E   *size_Mat];
+			D.f[W   ] = &DD[W   *size_Mat];
+			D.f[N   ] = &DD[N   *size_Mat];
+			D.f[S   ] = &DD[S   *size_Mat];
+			D.f[T   ] = &DD[T   *size_Mat];
+			D.f[B   ] = &DD[B   *size_Mat];
+			D.f[NE  ] = &DD[NE  *size_Mat];
+			D.f[SW  ] = &DD[SW  *size_Mat];
+			D.f[SE  ] = &DD[SE  *size_Mat];
+			D.f[NW  ] = &DD[NW  *size_Mat];
+			D.f[TE  ] = &DD[TE  *size_Mat];
+			D.f[BW  ] = &DD[BW  *size_Mat];
+			D.f[BE  ] = &DD[BE  *size_Mat];
+			D.f[TW  ] = &DD[TW  *size_Mat];
+			D.f[TN  ] = &DD[TN  *size_Mat];
+			D.f[BS  ] = &DD[BS  *size_Mat];
+			D.f[BN  ] = &DD[BN  *size_Mat];
+			D.f[TS  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[TNE *size_Mat];
+			D.f[TSW ] = &DD[TSW *size_Mat];
+			D.f[TSE ] = &DD[TSE *size_Mat];
+			D.f[TNW ] = &DD[TNW *size_Mat];
+			D.f[BNE ] = &DD[BNE *size_Mat];
+			D.f[BSW ] = &DD[BSW *size_Mat];
+			D.f[BSE ] = &DD[BSE *size_Mat];
+			D.f[BNW ] = &DD[BNW *size_Mat];
 		} 
 		else
 		{
-			D.f[dirW   ] = &DD[dirE   *size_Mat];
-			D.f[dirE   ] = &DD[dirW   *size_Mat];
-			D.f[dirS   ] = &DD[dirN   *size_Mat];
-			D.f[dirN   ] = &DD[dirS   *size_Mat];
-			D.f[dirB   ] = &DD[dirT   *size_Mat];
-			D.f[dirT   ] = &DD[dirB   *size_Mat];
-			D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-			D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-			D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-			D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-			D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-			D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-			D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-			D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-			D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-			D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-			D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-			D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-			D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-			D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-			D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-			D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-			D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+			D.f[W   ] = &DD[E   *size_Mat];
+			D.f[E   ] = &DD[W   *size_Mat];
+			D.f[S   ] = &DD[N   *size_Mat];
+			D.f[N   ] = &DD[S   *size_Mat];
+			D.f[B   ] = &DD[T   *size_Mat];
+			D.f[T   ] = &DD[B   *size_Mat];
+			D.f[SW  ] = &DD[NE  *size_Mat];
+			D.f[NE  ] = &DD[SW  *size_Mat];
+			D.f[NW  ] = &DD[SE  *size_Mat];
+			D.f[SE  ] = &DD[NW  *size_Mat];
+			D.f[BW  ] = &DD[TE  *size_Mat];
+			D.f[TE  ] = &DD[BW  *size_Mat];
+			D.f[TW  ] = &DD[BE  *size_Mat];
+			D.f[BE  ] = &DD[TW  *size_Mat];
+			D.f[BS  ] = &DD[TN  *size_Mat];
+			D.f[TN  ] = &DD[BS  *size_Mat];
+			D.f[TS  ] = &DD[BN  *size_Mat];
+			D.f[BN  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[BSW *size_Mat];
+			D.f[TSW ] = &DD[BNE *size_Mat];
+			D.f[TSE ] = &DD[BNW *size_Mat];
+			D.f[TNW ] = &DD[BSE *size_Mat];
+			D.f[BNE ] = &DD[TSW *size_Mat];
+			D.f[BSW ] = &DD[TNE *size_Mat];
+			D.f[BSE ] = &DD[TNW *size_Mat];
+			D.f[BNW ] = &DD[TSE *size_Mat];
 		}
 		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		//Test
-		//(D.f[dirZERO])[k]=c1o10;
+		//(D.f[REST])[k]=c1o10;
 		////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 		//ToDo anders Klammern
@@ -4521,208 +4287,208 @@ extern "C" __global__ void QVelDev1h27( int inx,
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c2over27* (drho/*+three*( vx1        )*/+c9over2*( vx1        )*( vx1        )-cu_sq); 
-		//	(D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
-		//	//(D.f[dirW])[kw]=zero;
+		//	(D.f[W])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);
+		//	//(D.f[W])[kw]=zero;
 		//}
 
 		//q = q_dirW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c2over27* (drho/*+three*(-vx1        )*/+c9over2*(-vx1        )*(-vx1        )-cu_sq); 
-		//	(D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);
-		//	//(D.f[dirE])[ke]=zero;
+		//	(D.f[E])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);
+		//	//(D.f[E])[ke]=zero;
 		//}
 
 		//q = q_dirN[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c2over27* (drho/*+three*(    vx2     )*/+c9over2*(     vx2    )*(     vx2    )-cu_sq); 
-		//	(D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);
-		//	//(D.f[dirS])[ks]=zero;
+		//	(D.f[S])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);
+		//	//(D.f[S])[ks]=zero;
 		//}
 
 		//q = q_dirS[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c2over27* (drho/*+three*(   -vx2     )*/+c9over2*(    -vx2    )*(    -vx2    )-cu_sq); 
-		//	(D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);
-		//	//(D.f[dirN])[kn]=zero;
+		//	(D.f[N])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);
+		//	//(D.f[N])[kn]=zero;
 		//}
 
 		//q = q_dirT[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c2over27* (drho/*+three*(         vx3)*/+c9over2*(         vx3)*(         vx3)-cu_sq); 
-		//	(D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);
-		//	//(D.f[dirB])[kb]=one;
+		//	(D.f[B])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);
+		//	//(D.f[B])[kb]=one;
 		//}
 
 		//q = q_dirB[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c2over27* (drho/*+three*(        -vx3)*/+c9over2*(        -vx3)*(        -vx3)-cu_sq); 
-		//	(D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);
-		//	//(D.f[dirT])[kt]=zero;
+		//	(D.f[T])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);
+		//	//(D.f[T])[kt]=zero;
 		//}
 
 		//q = q_dirNE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*( vx1+vx2    )*/+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-		//	(D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);
-		//	//(D.f[dirSW])[ksw]=zero;
+		//	(D.f[SW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);
+		//	//(D.f[SW])[ksw]=zero;
 		//}
 
 		//q = q_dirSW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(-vx1-vx2    )*/+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-		//	(D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);
-		//	//(D.f[dirNE])[kne]=zero;
+		//	(D.f[NE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);
+		//	//(D.f[NE])[kne]=zero;
 		//}
 
 		//q = q_dirSE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*( vx1-vx2    )*/+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-		//	(D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);
-		//	//(D.f[dirNW])[knw]=zero;
+		//	(D.f[NW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);
+		//	//(D.f[NW])[knw]=zero;
 		//}
 
 		//q = q_dirNW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(-vx1+vx2    )*/+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-		//	(D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);
-		//	//(D.f[dirSE])[kse]=zero;
+		//	(D.f[SE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);
+		//	//(D.f[SE])[kse]=zero;
 		//}
 
 		//q = q_dirTE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*( vx1    +vx3)*/+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-		//	(D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);
-		//	//(D.f[dirBW])[kbw]=zero;
+		//	(D.f[BW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);
+		//	//(D.f[BW])[kbw]=zero;
 		//}
 
 		//q = q_dirBW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(-vx1    -vx3)*/+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-		//	(D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);
-		//	//(D.f[dirTE])[kte]=zero;
+		//	(D.f[TE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);
+		//	//(D.f[TE])[kte]=zero;
 		//}
 
 		//q = q_dirBE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*( vx1    -vx3)*/+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-		//	(D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);
-		//	//(D.f[dirTW])[ktw]=zero;
+		//	(D.f[TW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);
+		//	//(D.f[TW])[ktw]=zero;
 		//}
 
 		//q = q_dirTW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(-vx1    +vx3)*/+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-		//	(D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);
-		//	//(D.f[dirBE])[kbe]=zero;
+		//	(D.f[BE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);
+		//	//(D.f[BE])[kbe]=zero;
 		//}
 
 		//q = q_dirTN[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(     vx2+vx3)*/+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-		//	(D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);
-		//	//(D.f[dirBS])[kbs]=zero;
+		//	(D.f[BS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);
+		//	//(D.f[BS])[kbs]=zero;
 		//}
 
 		//q = q_dirBS[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(    -vx2-vx3)*/+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-		//	(D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);
-		//	//(D.f[dirTN])[ktn]=zero;
+		//	(D.f[TN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);
+		//	//(D.f[TN])[ktn]=zero;
 		//}
 
 		//q = q_dirBN[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(     vx2-vx3)*/+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-		//	(D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);
-		//	//(D.f[dirTS])[kts]=zero;
+		//	(D.f[TS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);
+		//	//(D.f[TS])[kts]=zero;
 		//}
 
 		//q = q_dirTS[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over54* (drho/*+three*(    -vx2+vx3)*/+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-		//	(D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);
-		//	//(D.f[dirBN])[kbn]=zero;
+		//	(D.f[BN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);
+		//	//(D.f[BN])[kbn]=zero;
 		//}
 
 		//q = q_dirTNE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*( vx1+vx2+vx3)*/+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-		//	(D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);
-		//	//(D.f[dirBSW])[kbsw]=zero;
+		//	(D.f[BSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);
+		//	//(D.f[BSW])[kbsw]=zero;
 		//}
 
 		//q = q_dirBSW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*(-vx1-vx2-vx3)*/+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-		//	(D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);
-		//	//(D.f[dirTNE])[ktne]=zero;
+		//	(D.f[TNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);
+		//	//(D.f[TNE])[ktne]=zero;
 		//}
 
 		//q = q_dirBNE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*( vx1+vx2-vx3)*/+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-		//	(D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);
-		//	//(D.f[dirTSW])[ktsw]=zero;
+		//	(D.f[TSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);
+		//	//(D.f[TSW])[ktsw]=zero;
 		//}
 
 		//q = q_dirTSW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*(-vx1-vx2+vx3)*/+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-		//	(D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);
-		//	//(D.f[dirBNE])[kbne]=zero;
+		//	(D.f[BNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);
+		//	//(D.f[BNE])[kbne]=zero;
 		//}
 
 		//q = q_dirTSE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*( vx1-vx2+vx3)*/+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-		//	(D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);
-		//	//(D.f[dirBNW])[kbnw]=zero;
+		//	(D.f[BNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);
+		//	//(D.f[BNW])[kbnw]=zero;
 		//}
 
 		//q = q_dirBNW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*(-vx1+vx2-vx3)*/+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-		//	(D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);
-		//	//(D.f[dirTSE])[ktse]=zero;
+		//	(D.f[TSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);
+		//	//(D.f[TSE])[ktse]=zero;
 		//}
 
 		//q = q_dirBSE[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*( vx1-vx2-vx3)*/+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-		//	(D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);
-		//	//(D.f[dirTNW])[ktnw]=zero;
+		//	(D.f[TNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);
+		//	//(D.f[TNW])[ktnw]=zero;
 		//}
 
 		//q = q_dirTNW[k];
 		//if (q>=zero && q<=one)
 		//{
 		//	feq=c1over216*(drho/*+three*(-vx1+vx2+vx3)*/+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-		//	(D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);
-		//	//(D.f[dirBSE])[kbse]=zero;
+		//	(D.f[BSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);
+		//	//(D.f[BSE])[kbse]=zero;
 		//}
 
 		///////// equilibrium BC
@@ -4735,208 +4501,208 @@ extern "C" __global__ void QVelDev1h27( int inx,
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c3o1*( VeloXpur        )+c9o2*( VeloX        )*( VeloX        )-cu_sq); 
-			(D.f[dirW])[kw]=feq;
-			//(D.f[dirW])[kw]=zero;
+			(D.f[W])[kw]=feq;
+			//(D.f[W])[kw]=zero;
 		}
 
 		q = q_dirW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c3o1*(-VeloXpur        )+c9o2*(-VeloX        )*(-VeloX        )-cu_sq); 
-			(D.f[dirE])[ke]=feq;
-			//(D.f[dirE])[ke]=zero;
+			(D.f[E])[ke]=feq;
+			//(D.f[E])[ke]=zero;
 		}
 
 		q = q_dirN[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c3o1*(    VeloYpur     )+c9o2*(     VeloY    )*(     VeloY    )-cu_sq); 
-			(D.f[dirS])[ks]=feq;
-			//(D.f[dirS])[ks]=zero;
+			(D.f[S])[ks]=feq;
+			//(D.f[S])[ks]=zero;
 		}
 
 		q = q_dirS[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c3o1*(   -VeloYpur     )+c9o2*(    -VeloY    )*(    -VeloY    )-cu_sq); 
-			(D.f[dirN])[kn]=feq;
-			//(D.f[dirN])[kn]=zero;
+			(D.f[N])[kn]=feq;
+			//(D.f[N])[kn]=zero;
 		}
 
 		q = q_dirT[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq); 
-			(D.f[dirB])[kb]=feq;
-			//(D.f[dirB])[kb]=one;
+			(D.f[B])[kb]=feq;
+			//(D.f[B])[kb]=one;
 		}
 
 		q = q_dirB[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-			(D.f[dirT])[kt]=feq;
-			//(D.f[dirT])[kt]=zero;
+			(D.f[T])[kt]=feq;
+			//(D.f[T])[kt]=zero;
 		}
 
 		q = q_dirNE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*( VeloXpur+VeloYpur    )+c9o2*( VeloX+VeloY    )*( VeloX+VeloY    )-cu_sq); 
-			(D.f[dirSW])[ksw]=feq;
-			//(D.f[dirSW])[ksw]=zero;
+			(D.f[SW])[ksw]=feq;
+			//(D.f[SW])[ksw]=zero;
 		}
 
 		q = q_dirSW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(-VeloXpur-VeloYpur    )+c9o2*(-VeloX-VeloY    )*(-VeloX-VeloY    )-cu_sq); 
-			(D.f[dirNE])[kne]=feq;
-			//(D.f[dirNE])[kne]=zero;
+			(D.f[NE])[kne]=feq;
+			//(D.f[NE])[kne]=zero;
 		}
 
 		q = q_dirSE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*( VeloXpur-VeloYpur    )+c9o2*( VeloX-VeloY    )*( VeloX-VeloY    )-cu_sq); 
-			(D.f[dirNW])[knw]=feq;
-			//(D.f[dirNW])[knw]=zero;
+			(D.f[NW])[knw]=feq;
+			//(D.f[NW])[knw]=zero;
 		}
 
 		q = q_dirNW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(-VeloXpur+VeloYpur    )+c9o2*(-VeloX+VeloY    )*(-VeloX+VeloY    )-cu_sq); 
-			(D.f[dirSE])[kse]=feq;
-			//(D.f[dirSE])[kse]=zero;
+			(D.f[SE])[kse]=feq;
+			//(D.f[SE])[kse]=zero;
 		}
 
 		q = q_dirTE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*( VeloXpur    +vx3)+c9o2*( VeloX    +vx3)*( VeloX    +vx3)-cu_sq); 
-			(D.f[dirBW])[kbw]=feq;
-			//(D.f[dirBW])[kbw]=zero;
+			(D.f[BW])[kbw]=feq;
+			//(D.f[BW])[kbw]=zero;
 		}
 
 		q = q_dirBW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(-VeloXpur    -vx3)+c9o2*(-VeloX    -vx3)*(-VeloX    -vx3)-cu_sq); 
-			(D.f[dirTE])[kte]=feq;
-			//(D.f[dirTE])[kte]=zero;
+			(D.f[TE])[kte]=feq;
+			//(D.f[TE])[kte]=zero;
 		}
 
 		q = q_dirBE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*( VeloXpur    -vx3)+c9o2*( VeloX    -vx3)*( VeloX    -vx3)-cu_sq); 
-			(D.f[dirTW])[ktw]=feq;
-			//(D.f[dirTW])[ktw]=zero;
+			(D.f[TW])[ktw]=feq;
+			//(D.f[TW])[ktw]=zero;
 		}
 
 		q = q_dirTW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(-VeloXpur    +vx3)+c9o2*(-VeloX    +vx3)*(-VeloX    +vx3)-cu_sq); 
-			(D.f[dirBE])[kbe]=feq;
-			//(D.f[dirBE])[kbe]=zero;
+			(D.f[BE])[kbe]=feq;
+			//(D.f[BE])[kbe]=zero;
 		}
 
 		q = q_dirTN[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(     VeloYpur+vx3)+c9o2*(     VeloY+vx3)*(     VeloY+vx3)-cu_sq); 
-			(D.f[dirBS])[kbs]=feq;
-			//(D.f[dirBS])[kbs]=zero;
+			(D.f[BS])[kbs]=feq;
+			//(D.f[BS])[kbs]=zero;
 		}
 
 		q = q_dirBS[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(    -VeloYpur-vx3)+c9o2*(    -VeloY-vx3)*(    -VeloY-vx3)-cu_sq); 
-			(D.f[dirTN])[ktn]=feq;
-			//(D.f[dirTN])[ktn]=zero;
+			(D.f[TN])[ktn]=feq;
+			//(D.f[TN])[ktn]=zero;
 		}
 
 		q = q_dirBN[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(     VeloYpur-vx3)+c9o2*(     VeloY-vx3)*(     VeloY-vx3)-cu_sq); 
-			(D.f[dirTS])[kts]=feq;
-			//(D.f[dirTS])[kts]=zero;
+			(D.f[TS])[kts]=feq;
+			//(D.f[TS])[kts]=zero;
 		}
 
 		q = q_dirTS[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o54* (drho+c3o1*(    -VeloYpur+vx3)+c9o2*(    -VeloY+vx3)*(    -VeloY+vx3)-cu_sq); 
-			(D.f[dirBN])[kbn]=feq;
-			//(D.f[dirBN])[kbn]=zero;
+			(D.f[BN])[kbn]=feq;
+			//(D.f[BN])[kbn]=zero;
 		}
 
 		q = q_dirTNE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur+vx3)+c9o2*( VeloX+VeloY+vx3)*( VeloX+VeloY+vx3)-cu_sq); 
-			(D.f[dirBSW])[kbsw]=feq;
-			//(D.f[dirBSW])[kbsw]=zero;
+			(D.f[BSW])[kbsw]=feq;
+			//(D.f[BSW])[kbsw]=zero;
 		}
 
 		q = q_dirBSW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur-vx3)+c9o2*(-VeloX-VeloY-vx3)*(-VeloX-VeloY-vx3)-cu_sq); 
-			(D.f[dirTNE])[ktne]=feq;
-			//(D.f[dirTNE])[ktne]=zero;
+			(D.f[TNE])[ktne]=feq;
+			//(D.f[TNE])[ktne]=zero;
 		}
 
 		q = q_dirBNE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur-vx3)+c9o2*( VeloX+VeloY-vx3)*( VeloX+VeloY-vx3)-cu_sq); 
-			(D.f[dirTSW])[ktsw]=feq;
-			//(D.f[dirTSW])[ktsw]=zero;
+			(D.f[TSW])[ktsw]=feq;
+			//(D.f[TSW])[ktsw]=zero;
 		}
 
 		q = q_dirTSW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur+vx3)+c9o2*(-VeloX-VeloY+vx3)*(-VeloX-VeloY+vx3)-cu_sq); 
-			(D.f[dirBNE])[kbne]=feq;
-			//(D.f[dirBNE])[kbne]=zero;
+			(D.f[BNE])[kbne]=feq;
+			//(D.f[BNE])[kbne]=zero;
 		}
 
 		q = q_dirTSE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur+vx3)+c9o2*( VeloX-VeloY+vx3)*( VeloX-VeloY+vx3)-cu_sq); 
-			(D.f[dirBNW])[kbnw]=feq;
-			//(D.f[dirBNW])[kbnw]=zero;
+			(D.f[BNW])[kbnw]=feq;
+			//(D.f[BNW])[kbnw]=zero;
 		}
 
 		q = q_dirBNW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur-vx3)+c9o2*(-VeloX+VeloY-vx3)*(-VeloX+VeloY-vx3)-cu_sq); 
-			(D.f[dirTSE])[ktse]=feq;
-			//(D.f[dirTSE])[ktse]=zero;
+			(D.f[TSE])[ktse]=feq;
+			//(D.f[TSE])[ktse]=zero;
 		}
 
 		q = q_dirBSE[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur-vx3)+c9o2*( VeloX-VeloY-vx3)*( VeloX-VeloY-vx3)-cu_sq); 
-			(D.f[dirTNW])[ktnw]=feq;
-			//(D.f[dirTNW])[ktnw]=zero;
+			(D.f[TNW])[ktnw]=feq;
+			//(D.f[TNW])[ktnw]=zero;
 		}
 
 		q = q_dirTNW[k];
 		if (q>=c0o1 && q<=c1o1)
 		{
 			feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur+vx3)+c9o2*(-VeloX+VeloY+vx3)*(-VeloX+VeloY+vx3)-cu_sq); 
-			(D.f[dirBSE])[kbse]=feq;
-			//(D.f[dirBSE])[kbse]=zero;
+			(D.f[BSE])[kbse]=feq;
+			//(D.f[BSE])[kbse]=zero;
 		}
 	
 	}
@@ -4982,153 +4748,82 @@ extern "C" __global__ void QVelDev1h27( int inx,
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void QVelDeviceComp27(int inx,
-											int iny,
-											real* vx,
-											real* vy,
-											real* vz,
-											real* DD, 
-											int* k_Q, 
-											real* QQ,
-											unsigned int sizeQ,
-											int numberOfBCnodes, 
-											real om1, 
+extern "C" __global__ void QVelDeviceComp27(
+											real* velocityX,
+											real* velocityY,
+											real* velocityZ,
+											real* distributions,
+											int* subgridDistanceIndices,
+											real* subgridDistances,
+											unsigned int numberOfBCnodes,
+											real omega,
 											unsigned int* neighborX,
 											unsigned int* neighborY,
 											unsigned int* neighborZ,
-											unsigned int size_Mat, 
+											unsigned int numberOfLBnodes,
 											bool isEvenTimestep)
 {
-   Distributions27 D;
-   if (isEvenTimestep==true)
-   {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-   } 
-   else
-   {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-   }
+   //////////////////////////////////////////////////////////////////////////
+   //! The velocity boundary condition is executed in the following steps
+   //!
    ////////////////////////////////////////////////////////////////////////////////
-   const unsigned  x = threadIdx.x;  // Globaler x-Index 
-   const unsigned  y = blockIdx.x;   // Globaler y-Index 
-   const unsigned  z = blockIdx.y;   // Globaler z-Index 
+   //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
+   //!
+   const unsigned  x = threadIdx.x;  // global x-index 
+   const unsigned  y = blockIdx.x;   // global y-index 
+   const unsigned  z = blockIdx.y;   // global z-index 
 
    const unsigned nx = blockDim.x;
    const unsigned ny = gridDim.x;
 
    const unsigned k = nx*(ny*z + y) + x;
-   //////////////////////////////////////////////////////////////////////////
 
-   if(k<numberOfBCnodes)
+   //////////////////////////////////////////////////////////////////////////
+   //! - Run for all indices in size of boundary condition (numberOfBCnodes)
+   //!
+   if(k < numberOfBCnodes)
    {
+      //////////////////////////////////////////////////////////////////////////
+      //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref
+      //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a>
+      //!
+      Distributions27 dist;
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep);
+
       ////////////////////////////////////////////////////////////////////////////////
-      real VeloX = vx[k];
-      real VeloY = vy[k];
-      real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny)
+      //! - Set local velocities
+      //!
+      real VeloX = velocityX[k];
+      real VeloY = velocityY[k];
+      real VeloZ = velocityZ[k];
+
       ////////////////////////////////////////////////////////////////////////////////
-      real *q_dirE,   *q_dirW,   *q_dirN,   *q_dirS,   *q_dirT,   *q_dirB, 
-            *q_dirNE,  *q_dirSW,  *q_dirSE,  *q_dirNW,  *q_dirTE,  *q_dirBW,
-            *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
-            *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
-            *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      //! - Set local subgrid distances (q's)
+      //!
+      SubgridDistances27 subgridD;
+      getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes);
+      
       ////////////////////////////////////////////////////////////////////////////////
-      //index
-      unsigned int KQK  = k_Q[k];
-      unsigned int kzero= KQK;
-      unsigned int ke   = KQK;
-      unsigned int kw   = neighborX[KQK];
-      unsigned int kn   = KQK;
-      unsigned int ks   = neighborY[KQK];
-      unsigned int kt   = KQK;
-      unsigned int kb   = neighborZ[KQK];
+      //! - Set neighbor indices (necessary for indirect addressing)
+      //!
+      unsigned int indexOfBCnode  = subgridDistanceIndices[k];
+      unsigned int kzero= indexOfBCnode;
+      unsigned int ke   = indexOfBCnode;
+      unsigned int kw   = neighborX[indexOfBCnode];
+      unsigned int kn   = indexOfBCnode;
+      unsigned int ks   = neighborY[indexOfBCnode];
+      unsigned int kt   = indexOfBCnode;
+      unsigned int kb   = neighborZ[indexOfBCnode];
       unsigned int ksw  = neighborY[kw];
-      unsigned int kne  = KQK;
+      unsigned int kne  = indexOfBCnode;
       unsigned int kse  = ks;
       unsigned int knw  = kw;
       unsigned int kbw  = neighborZ[kw];
-      unsigned int kte  = KQK;
+      unsigned int kte  = indexOfBCnode;
       unsigned int kbe  = kb;
       unsigned int ktw  = kw;
       unsigned int kbs  = neighborZ[ks];
-      unsigned int ktn  = KQK;
+      unsigned int ktn  = indexOfBCnode;
       unsigned int kbn  = kb;
       unsigned int kts  = ks;
       unsigned int ktse = ks;
@@ -5137,333 +4832,301 @@ extern "C" __global__ void QVelDeviceComp27(int inx,
       unsigned int kbse = kbs;
       unsigned int ktsw = ksw;
       unsigned int kbne = kb;
-      unsigned int ktne = KQK;
+      unsigned int ktne = indexOfBCnode;
       unsigned int kbsw = neighborZ[ksw];
+
       ////////////////////////////////////////////////////////////////////////////////
-      real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
-         f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
+      //! - Set local distributions
+      //!
+      real f_W    = (dist.f[E   ])[ke   ];
+      real f_E    = (dist.f[W   ])[kw   ];
+      real f_S    = (dist.f[N   ])[kn   ];
+      real f_N    = (dist.f[S   ])[ks   ];
+      real f_B    = (dist.f[T   ])[kt   ];
+      real f_T    = (dist.f[B   ])[kb   ];
+      real f_SW   = (dist.f[NE  ])[kne  ];
+      real f_NE   = (dist.f[SW  ])[ksw  ];
+      real f_NW   = (dist.f[SE  ])[kse  ];
+      real f_SE   = (dist.f[NW  ])[knw  ];
+      real f_BW   = (dist.f[TE  ])[kte  ];
+      real f_TE   = (dist.f[BW  ])[kbw  ];
+      real f_TW   = (dist.f[BE  ])[kbe  ];
+      real f_BE   = (dist.f[TW  ])[ktw  ];
+      real f_BS   = (dist.f[TN  ])[ktn  ];
+      real f_TN   = (dist.f[BS  ])[kbs  ];
+      real f_TS   = (dist.f[BN  ])[kbn  ];
+      real f_BN   = (dist.f[TS  ])[kts  ];
+      real f_BSW  = (dist.f[TNE ])[ktne ];
+      real f_BNE  = (dist.f[TSW ])[ktsw ];
+      real f_BNW  = (dist.f[TSE ])[ktse ];
+      real f_BSE  = (dist.f[TNW ])[ktnw ];
+      real f_TSW  = (dist.f[BNE ])[kbne ];
+      real f_TNE  = (dist.f[BSW ])[kbsw ];
+      real f_TNW  = (dist.f[BSE ])[kbse ];
+      real f_TSE  = (dist.f[BNW ])[kbnw ];
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
-      real vx1, vx2, vx3, drho, feq, q;
-      drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
-                f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+      //! - Calculate macroscopic quantities
+      //!
+      real drho = f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
+                  f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
+                  f_T + f_B + f_N + f_S + f_E + f_W + ((dist.f[REST])[kzero]); 
 
-      vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
-                (f_E - f_W)) / (c1o1 + drho); 
-         
+      real vx1  = (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                   ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
+                   (f_E - f_W)) / (c1o1 + drho);          
 
-      vx2    =   ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
-                 ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
-                 (f_N - f_S)) / (c1o1 + drho); 
-
-      vx3    =   (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
-                 (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
-                 (f_T - f_B)) / (c1o1 + drho); 
+      real vx2  = ((-(f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
+                   ((f_BN - f_TS)   + (f_TN - f_BS))    + (-(f_SE - f_NW)  + (f_NE - f_SW)) +
+                   (f_N - f_S)) / (c1o1 + drho); 
 
-      real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho);
+      real vx3  = (((f_TSE - f_BNW) + (f_TNW - f_BSE)) + ((f_TNE - f_BSW) + (f_TSW - f_BNE)) +
+                   (-(f_BN - f_TS)  + (f_TN - f_BS))   + ((f_TE - f_BW)   - (f_BE - f_TW)) +
+                   (f_T - f_B)) / (c1o1 + drho); 
 
-      //////////////////////////////////////////////////////////////////////////
-      if (isEvenTimestep==false)
-      {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
-      } 
-      else
-      {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-      }
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-      //Test
-      //(D.f[dirZERO])[k]=c1o10;
-      ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+      real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho);
 
-	  //ToDo anders Klammern
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - change the pointer to write the results in the correct array
+      //!
+      getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep);
 
-      q = q_dirE[k];
-      if (q>=c0o1 && q<=c1o1)
+      ////////////////////////////////////////////////////////////////////////////////
+      //! - Update distributions with subgrid distance (q) between zero and one
+      //!
+      real feq, q, velocityLB, velocityBC;
+      q = (subgridD.q[E])[k];
+      if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one
       {
-         feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ) /** (one + drho)*/)/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirW])[kw]=zero;
+         velocityLB = vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloX;
+         (dist.f[W])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27);
       }
 
-      q = q_dirW[k];
+      q = (subgridD.q[W])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ) /** (one + drho)*/)/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirE])[ke]=zero;
+         velocityLB = -vx1;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloX;
+         (dist.f[E])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27);
       }
 
-      q = q_dirN[k];
+      q = (subgridD.q[N])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ) /** (one + drho)*/)/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirS])[ks]=zero;
+         velocityLB = vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloY;
+         (dist.f[S])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27);
       }
 
-      q = q_dirS[k];
+      q = (subgridD.q[S])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ) /** (one + drho)*/)/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirN])[kn]=zero;
+         velocityLB = -vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloY;
+         (dist.f[N])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27);
       }
 
-      q = q_dirT[k];
+      q = (subgridD.q[T])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     )/* * (one + drho)*/)/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirB])[kb]=one;
+         velocityLB = vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = VeloZ;
+         (dist.f[B])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27);
       }
 
-      q = q_dirB[k];
+      q = (subgridD.q[B])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ) /** (one + drho)*/)/(c1o1+q);// - c2over27 * drho;
-         //(D.f[dirT])[kt]=zero;
+         velocityLB = -vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27);
+         velocityBC = -VeloZ;
+         (dist.f[T])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27);
       }
 
-      q = q_dirNE[k];
+      q = (subgridD.q[NE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirSW])[ksw]=zero;
+         velocityLB = vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloY;
+         (dist.f[SW])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirSW[k];
+      q = (subgridD.q[SW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirNE])[kne]=zero;
+         velocityLB = -vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloY;
+         (dist.f[NE])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirSE[k];
+      q = (subgridD.q[SE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirNW])[knw]=zero;
+         velocityLB = vx1 - vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloY;
+         (dist.f[NW])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirNW[k];
+      q = (subgridD.q[NW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    ) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirSE])[kse]=zero;
+         velocityLB = -vx1 + vx2;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloY;
+         (dist.f[SE])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirTE[k];
+      q = (subgridD.q[TE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBW])[kbw]=zero;
+         velocityLB = vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX + VeloZ;
+         (dist.f[BW])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirBW[k];
+      q = (subgridD.q[BW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTE])[kte]=zero;
+         velocityLB = -vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX - VeloZ;
+         (dist.f[TE])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirBE[k];
+      q = (subgridD.q[BE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTW])[ktw]=zero;
+         velocityLB = vx1 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloX - VeloZ;
+         (dist.f[TW])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirTW[k];
+      q = (subgridD.q[TW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBE])[kbe]=zero;
+         velocityLB = -vx1 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloX + VeloZ;
+         (dist.f[BE])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirTN[k];
+      q = (subgridD.q[TN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBS])[kbs]=zero;
+         velocityLB = vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY + VeloZ;
+         (dist.f[BS])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirBS[k];
+      q = (subgridD.q[BS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTN])[ktn]=zero;
+         velocityLB = -vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY - VeloZ;
+         (dist.f[TN])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirBN[k];
+      q = (subgridD.q[BN])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirTS])[kts]=zero;
+         velocityLB = vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = VeloY - VeloZ;
+         (dist.f[TS])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirTS[k];
+      q = (subgridD.q[TS])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over54 * drho;
-         //(D.f[dirBN])[kbn]=zero;
+         velocityLB = -vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54);
+         velocityBC = -VeloY + VeloZ;
+         (dist.f[BN])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54);
       }
 
-      q = q_dirTNE[k];
+      q = (subgridD.q[TNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBSW])[kbsw]=zero;
+         velocityLB = vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY + VeloZ;
+         (dist.f[BSW])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirBSW[k];
+      q = (subgridD.q[BSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTNE])[ktne]=zero;
+         velocityLB = -vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY - VeloZ;
+         (dist.f[TNE])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirBNE[k];
+      q = (subgridD.q[BNE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTSW])[ktsw]=zero;
+         velocityLB = vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX + VeloY - VeloZ;
+         (dist.f[TSW])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirTSW[k];
+      q = (subgridD.q[TSW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBNE])[kbne]=zero;
+         velocityLB = -vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX - VeloY + VeloZ;
+         (dist.f[BNE])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirTSE[k];
+      q = (subgridD.q[TSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBNW])[kbnw]=zero;
+         velocityLB = vx1 - vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY + VeloZ;
+         (dist.f[BNW])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirBNW[k];
+      q = (subgridD.q[BNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTSE])[ktse]=zero;
+         velocityLB = -vx1 + vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY - VeloZ;
+         (dist.f[TSE])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirBSE[k];
+      q = (subgridD.q[BSE])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirTNW])[ktnw]=zero;
+         velocityLB = vx1 - vx2 - vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = VeloX - VeloY - VeloZ;
+         (dist.f[TNW])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216);
       }
 
-      q = q_dirTNW[k];
+      q = (subgridD.q[TNW])[k];
       if (q>=c0o1 && q<=c1o1)
       {
-         feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ) /** (one + drho)*/)/(c1o1+q);// - c1over216 * drho;
-         //(D.f[dirBSE])[kbse]=zero;
+         velocityLB = -vx1 + vx2 + vx3;
+         feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216);
+         velocityBC = -VeloX + VeloY + VeloZ;
+         (dist.f[BSE])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216);
       }
    }
 }
@@ -5516,8 +5179,7 @@ extern "C" __global__ void QVelDevice27(int inx,
                                         real* DD, 
                                         int* k_Q, 
                                         real* QQ,
-                                        unsigned int sizeQ,
-                                        int numberOfBCnodes, 
+                                        unsigned int numberOfBCnodes, 
                                         real om1, 
                                         unsigned int* neighborX,
                                         unsigned int* neighborY,
@@ -5528,63 +5190,63 @@ extern "C" __global__ void QVelDevice27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -5609,32 +5271,32 @@ extern "C" __global__ void QVelDevice27(int inx,
             *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
             *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
             *q_dirBSE, *q_dirBNW; 
-      q_dirE   = &QQ[dirE   *sizeQ];
-      q_dirW   = &QQ[dirW   *sizeQ];
-      q_dirN   = &QQ[dirN   *sizeQ];
-      q_dirS   = &QQ[dirS   *sizeQ];
-      q_dirT   = &QQ[dirT   *sizeQ];
-      q_dirB   = &QQ[dirB   *sizeQ];
-      q_dirNE  = &QQ[dirNE  *sizeQ];
-      q_dirSW  = &QQ[dirSW  *sizeQ];
-      q_dirSE  = &QQ[dirSE  *sizeQ];
-      q_dirNW  = &QQ[dirNW  *sizeQ];
-      q_dirTE  = &QQ[dirTE  *sizeQ];
-      q_dirBW  = &QQ[dirBW  *sizeQ];
-      q_dirBE  = &QQ[dirBE  *sizeQ];
-      q_dirTW  = &QQ[dirTW  *sizeQ];
-      q_dirTN  = &QQ[dirTN  *sizeQ];
-      q_dirBS  = &QQ[dirBS  *sizeQ];
-      q_dirBN  = &QQ[dirBN  *sizeQ];
-      q_dirTS  = &QQ[dirTS  *sizeQ];
-      q_dirTNE = &QQ[dirTNE *sizeQ];
-      q_dirTSW = &QQ[dirTSW *sizeQ];
-      q_dirTSE = &QQ[dirTSE *sizeQ];
-      q_dirTNW = &QQ[dirTNW *sizeQ];
-      q_dirBNE = &QQ[dirBNE *sizeQ];
-      q_dirBSW = &QQ[dirBSW *sizeQ];
-      q_dirBSE = &QQ[dirBSE *sizeQ];
-      q_dirBNW = &QQ[dirBNW *sizeQ];
+      q_dirE   = &QQ[E   * numberOfBCnodes];
+      q_dirW   = &QQ[W   * numberOfBCnodes];
+      q_dirN   = &QQ[N   * numberOfBCnodes];
+      q_dirS   = &QQ[S   * numberOfBCnodes];
+      q_dirT   = &QQ[T   * numberOfBCnodes];
+      q_dirB   = &QQ[B   * numberOfBCnodes];
+      q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -5697,37 +5359,37 @@ extern "C" __global__ void QVelDevice27(int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       real vx1, vx2, vx3, drho, feq, q;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
       vx1    =  ((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                 ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -5747,67 +5409,67 @@ extern "C" __global__ void QVelDevice27(int inx,
       //////////////////////////////////////////////////////////////////////////
       if (isEvenTimestep==false)
       {
-         D.f[dirE   ] = &DD[dirE   *size_Mat];
-         D.f[dirW   ] = &DD[dirW   *size_Mat];
-         D.f[dirN   ] = &DD[dirN   *size_Mat];
-         D.f[dirS   ] = &DD[dirS   *size_Mat];
-         D.f[dirT   ] = &DD[dirT   *size_Mat];
-         D.f[dirB   ] = &DD[dirB   *size_Mat];
-         D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-         D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-         D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-         D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-         D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-         D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-         D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-         D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-         D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-         D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-         D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-         D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-         D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-         D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-         D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-         D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-         D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+         D.f[E   ] = &DD[E   *size_Mat];
+         D.f[W   ] = &DD[W   *size_Mat];
+         D.f[N   ] = &DD[N   *size_Mat];
+         D.f[S   ] = &DD[S   *size_Mat];
+         D.f[T   ] = &DD[T   *size_Mat];
+         D.f[B   ] = &DD[B   *size_Mat];
+         D.f[NE  ] = &DD[NE  *size_Mat];
+         D.f[SW  ] = &DD[SW  *size_Mat];
+         D.f[SE  ] = &DD[SE  *size_Mat];
+         D.f[NW  ] = &DD[NW  *size_Mat];
+         D.f[TE  ] = &DD[TE  *size_Mat];
+         D.f[BW  ] = &DD[BW  *size_Mat];
+         D.f[BE  ] = &DD[BE  *size_Mat];
+         D.f[TW  ] = &DD[TW  *size_Mat];
+         D.f[TN  ] = &DD[TN  *size_Mat];
+         D.f[BS  ] = &DD[BS  *size_Mat];
+         D.f[BN  ] = &DD[BN  *size_Mat];
+         D.f[TS  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[TNE *size_Mat];
+         D.f[TSW ] = &DD[TSW *size_Mat];
+         D.f[TSE ] = &DD[TSE *size_Mat];
+         D.f[TNW ] = &DD[TNW *size_Mat];
+         D.f[BNE ] = &DD[BNE *size_Mat];
+         D.f[BSW ] = &DD[BSW *size_Mat];
+         D.f[BSE ] = &DD[BSE *size_Mat];
+         D.f[BNW ] = &DD[BNW *size_Mat];
       } 
       else
       {
-         D.f[dirW   ] = &DD[dirE   *size_Mat];
-         D.f[dirE   ] = &DD[dirW   *size_Mat];
-         D.f[dirS   ] = &DD[dirN   *size_Mat];
-         D.f[dirN   ] = &DD[dirS   *size_Mat];
-         D.f[dirB   ] = &DD[dirT   *size_Mat];
-         D.f[dirT   ] = &DD[dirB   *size_Mat];
-         D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-         D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-         D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-         D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-         D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-         D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-         D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-         D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-         D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-         D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-         D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-         D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-         D.f[dirZERO] = &DD[dirZERO*size_Mat];
-         D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-         D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-         D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-         D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-         D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-         D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-         D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-         D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+         D.f[W   ] = &DD[E   *size_Mat];
+         D.f[E   ] = &DD[W   *size_Mat];
+         D.f[S   ] = &DD[N   *size_Mat];
+         D.f[N   ] = &DD[S   *size_Mat];
+         D.f[B   ] = &DD[T   *size_Mat];
+         D.f[T   ] = &DD[B   *size_Mat];
+         D.f[SW  ] = &DD[NE  *size_Mat];
+         D.f[NE  ] = &DD[SW  *size_Mat];
+         D.f[NW  ] = &DD[SE  *size_Mat];
+         D.f[SE  ] = &DD[NW  *size_Mat];
+         D.f[BW  ] = &DD[TE  *size_Mat];
+         D.f[TE  ] = &DD[BW  *size_Mat];
+         D.f[TW  ] = &DD[BE  *size_Mat];
+         D.f[BE  ] = &DD[TW  *size_Mat];
+         D.f[BS  ] = &DD[TN  *size_Mat];
+         D.f[TN  ] = &DD[BS  *size_Mat];
+         D.f[TS  ] = &DD[BN  *size_Mat];
+         D.f[BN  ] = &DD[TS  *size_Mat];
+         D.f[REST] = &DD[REST*size_Mat];
+         D.f[TNE ] = &DD[BSW *size_Mat];
+         D.f[TSW ] = &DD[BNE *size_Mat];
+         D.f[TSE ] = &DD[BNW *size_Mat];
+         D.f[TNW ] = &DD[BSE *size_Mat];
+         D.f[BNE ] = &DD[TSW *size_Mat];
+         D.f[BSW ] = &DD[TNE *size_Mat];
+         D.f[BSE ] = &DD[TNW *size_Mat];
+         D.f[BNW ] = &DD[TSE *size_Mat];
       }
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       //Test
-      //(D.f[dirZERO])[k]=c1o10;
+      //(D.f[REST])[k]=c1o10;
       ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 	  //ToDo anders Klammern
@@ -5816,208 +5478,208 @@ extern "C" __global__ void QVelDevice27(int inx,
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*( vx1        )*/+c9o2*( vx1        )*( vx1        )-cu_sq); 
-         (D.f[dirW])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);
-         //(D.f[dirW])[kw]=zero;
+         (D.f[W])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX     ))/(c1o1+q);
+         //(D.f[W])[kw]=zero;
       }
 
       q = q_dirW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(-vx1        )*/+c9o2*(-vx1        )*(-vx1        )-cu_sq); 
-         (D.f[dirE])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);
-         //(D.f[dirE])[ke]=zero;
+         (D.f[E])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX     ))/(c1o1+q);
+         //(D.f[E])[ke]=zero;
       }
 
       q = q_dirN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(    vx2     )*/+c9o2*(     vx2    )*(     vx2    )-cu_sq); 
-         (D.f[dirS])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);
-         //(D.f[dirS])[ks]=zero;
+         (D.f[S])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY     ))/(c1o1+q);
+         //(D.f[S])[ks]=zero;
       }
 
       q = q_dirS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(   -vx2     )*/+c9o2*(    -vx2    )*(    -vx2    )-cu_sq); 
-         (D.f[dirN])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);
-         //(D.f[dirN])[kn]=zero;
+         (D.f[N])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY     ))/(c1o1+q);
+         //(D.f[N])[kn]=zero;
       }
 
       q = q_dirT[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(         vx3)*/+c9o2*(         vx3)*(         vx3)-cu_sq); 
-         (D.f[dirB])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);
-         //(D.f[dirB])[kb]=one;
+         (D.f[B])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ     ))/(c1o1+q);
+         //(D.f[B])[kb]=one;
       }
 
       q = q_dirB[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c2o27* (drho/*+three*(        -vx3)*/+c9o2*(        -vx3)*(        -vx3)-cu_sq); 
-         (D.f[dirT])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
-         //(D.f[dirT])[kt]=zero;
+         (D.f[T])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ     ))/(c1o1+q);
+         //(D.f[T])[kt]=zero;
       }
 
       q = q_dirNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1+vx2    )*/+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq); 
-         (D.f[dirSW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
-         //(D.f[dirSW])[ksw]=zero;
+         (D.f[SW])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);
+         //(D.f[SW])[ksw]=zero;
       }
 
       q = q_dirSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1-vx2    )*/+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq); 
-         (D.f[dirNE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
-         //(D.f[dirNE])[kne]=zero;
+         (D.f[NE])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);
+         //(D.f[NE])[kne]=zero;
       }
 
       q = q_dirSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1-vx2    )*/+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq); 
-         (D.f[dirNW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
-         //(D.f[dirNW])[knw]=zero;
+         (D.f[NW])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);
+         //(D.f[NW])[knw]=zero;
       }
 
       q = q_dirNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1+vx2    )*/+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq); 
-         (D.f[dirSE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
-         //(D.f[dirSE])[kse]=zero;
+         (D.f[SE])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);
+         //(D.f[SE])[kse]=zero;
       }
 
       q = q_dirTE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    +vx3)*/+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq); 
-         (D.f[dirBW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
-         //(D.f[dirBW])[kbw]=zero;
+         (D.f[BW])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);
+         //(D.f[BW])[kbw]=zero;
       }
 
       q = q_dirBW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    -vx3)*/+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq); 
-         (D.f[dirTE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
-         //(D.f[dirTE])[kte]=zero;
+         (D.f[TE])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);
+         //(D.f[TE])[kte]=zero;
       }
 
       q = q_dirBE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*( vx1    -vx3)*/+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq); 
-         (D.f[dirTW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
-         //(D.f[dirTW])[ktw]=zero;
+         (D.f[TW])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);
+         //(D.f[TW])[ktw]=zero;
       }
 
       q = q_dirTW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(-vx1    +vx3)*/+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq); 
-         (D.f[dirBE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
-         //(D.f[dirBE])[kbe]=zero;
+         (D.f[BE])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);
+         //(D.f[BE])[kbe]=zero;
       }
 
       q = q_dirTN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2+vx3)*/+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq); 
-         (D.f[dirBS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBS])[kbs]=zero;
+         (D.f[BS])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BS])[kbs]=zero;
       }
 
       q = q_dirBS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2-vx3)*/+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq); 
-         (D.f[dirTN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTN])[ktn]=zero;
+         (D.f[TN])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TN])[ktn]=zero;
       }
 
       q = q_dirBN[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(     vx2-vx3)*/+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq); 
-         (D.f[dirTS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTS])[kts]=zero;
+         (D.f[TS])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TS])[kts]=zero;
       }
 
       q = q_dirTS[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o54* (drho/*+three*(    -vx2+vx3)*/+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq); 
-         (D.f[dirBN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBN])[kbn]=zero;
+         (D.f[BN])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BN])[kbn]=zero;
       }
 
       q = q_dirTNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); 
-         (D.f[dirBSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBSW])[kbsw]=zero;
+         (D.f[BSW])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BSW])[kbsw]=zero;
       }
 
       q = q_dirBSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); 
-         (D.f[dirTNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTNE])[ktne]=zero;
+         (D.f[TNE])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TNE])[ktne]=zero;
       }
 
       q = q_dirBNE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); 
-         (D.f[dirTSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTSW])[ktsw]=zero;
+         (D.f[TSW])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TSW])[ktsw]=zero;
       }
 
       q = q_dirTSW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); 
-         (D.f[dirBNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBNE])[kbne]=zero;
+         (D.f[BNE])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BNE])[kbne]=zero;
       }
 
       q = q_dirTSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); 
-         (D.f[dirBNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBNW])[kbnw]=zero;
+         (D.f[BNW])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BNW])[kbnw]=zero;
       }
 
       q = q_dirBNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); 
-         (D.f[dirTSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTSE])[ktse]=zero;
+         (D.f[TSE])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TSE])[ktse]=zero;
       }
 
       q = q_dirBSE[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); 
-         (D.f[dirTNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
-         //(D.f[dirTNW])[ktnw]=zero;
+         (D.f[TNW])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);
+         //(D.f[TNW])[ktnw]=zero;
       }
 
       q = q_dirTNW[k];
       if (q>=c0o1 && q<=c1o1)
       {
          feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); 
-         (D.f[dirBSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
-         //(D.f[dirBSE])[kbse]=zero;
+         (D.f[BSE])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);
+         //(D.f[BSE])[kbse]=zero;
       }
    }
 }
@@ -6093,63 +5755,63 @@ extern "C" __global__ void PropellerBC(unsigned int* neighborX,
         Distributions27 D;
         if (EvenOrOdd==true)
         {
-			D.f[dirE   ] = &DD[dirE   *size_Mat];
-			D.f[dirW   ] = &DD[dirW   *size_Mat];
-			D.f[dirN   ] = &DD[dirN   *size_Mat];
-			D.f[dirS   ] = &DD[dirS   *size_Mat];
-			D.f[dirT   ] = &DD[dirT   *size_Mat];
-			D.f[dirB   ] = &DD[dirB   *size_Mat];
-			D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-			D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-			D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-			D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-			D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-			D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-			D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-			D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-			D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-			D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-			D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-			D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-			D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-			D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-			D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-			D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-			D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-			D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-			D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+			D.f[E   ] = &DD[E   *size_Mat];
+			D.f[W   ] = &DD[W   *size_Mat];
+			D.f[N   ] = &DD[N   *size_Mat];
+			D.f[S   ] = &DD[S   *size_Mat];
+			D.f[T   ] = &DD[T   *size_Mat];
+			D.f[B   ] = &DD[B   *size_Mat];
+			D.f[NE  ] = &DD[NE  *size_Mat];
+			D.f[SW  ] = &DD[SW  *size_Mat];
+			D.f[SE  ] = &DD[SE  *size_Mat];
+			D.f[NW  ] = &DD[NW  *size_Mat];
+			D.f[TE  ] = &DD[TE  *size_Mat];
+			D.f[BW  ] = &DD[BW  *size_Mat];
+			D.f[BE  ] = &DD[BE  *size_Mat];
+			D.f[TW  ] = &DD[TW  *size_Mat];
+			D.f[TN  ] = &DD[TN  *size_Mat];
+			D.f[BS  ] = &DD[BS  *size_Mat];
+			D.f[BN  ] = &DD[BN  *size_Mat];
+			D.f[TS  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[TNE ] = &DD[TNE *size_Mat];
+			D.f[TSW ] = &DD[TSW *size_Mat];
+			D.f[TSE ] = &DD[TSE *size_Mat];
+			D.f[TNW ] = &DD[TNW *size_Mat];
+			D.f[BNE ] = &DD[BNE *size_Mat];
+			D.f[BSW ] = &DD[BSW *size_Mat];
+			D.f[BSE ] = &DD[BSE *size_Mat];
+			D.f[BNW ] = &DD[BNW *size_Mat];
         }
         else
         {
-			D.f[dirW   ] = &DD[dirE   *size_Mat];
-			D.f[dirE   ] = &DD[dirW   *size_Mat];
-			D.f[dirS   ] = &DD[dirN   *size_Mat];
-			D.f[dirN   ] = &DD[dirS   *size_Mat];
-			D.f[dirB   ] = &DD[dirT   *size_Mat];
-			D.f[dirT   ] = &DD[dirB   *size_Mat];
-			D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-			D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-			D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-			D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-			D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-			D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-			D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-			D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-			D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-			D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-			D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-			D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-			D.f[dirZERO] = &DD[dirZERO*size_Mat];
-			D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-			D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-			D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-			D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-			D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-			D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-			D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-			D.f[dirTSE ] = &DD[dirBNW *size_Mat];
+			D.f[W   ] = &DD[E   *size_Mat];
+			D.f[E   ] = &DD[W   *size_Mat];
+			D.f[S   ] = &DD[N   *size_Mat];
+			D.f[N   ] = &DD[S   *size_Mat];
+			D.f[B   ] = &DD[T   *size_Mat];
+			D.f[T   ] = &DD[B   *size_Mat];
+			D.f[SW  ] = &DD[NE  *size_Mat];
+			D.f[NE  ] = &DD[SW  *size_Mat];
+			D.f[NW  ] = &DD[SE  *size_Mat];
+			D.f[SE  ] = &DD[NW  *size_Mat];
+			D.f[BW  ] = &DD[TE  *size_Mat];
+			D.f[TE  ] = &DD[BW  *size_Mat];
+			D.f[TW  ] = &DD[BE  *size_Mat];
+			D.f[BE  ] = &DD[TW  *size_Mat];
+			D.f[BS  ] = &DD[TN  *size_Mat];
+			D.f[TN  ] = &DD[BS  *size_Mat];
+			D.f[TS  ] = &DD[BN  *size_Mat];
+			D.f[BN  ] = &DD[TS  *size_Mat];
+			D.f[REST] = &DD[REST*size_Mat];
+			D.f[BSW ] = &DD[TNE *size_Mat];
+			D.f[BNE ] = &DD[TSW *size_Mat];
+			D.f[BNW ] = &DD[TSE *size_Mat];
+			D.f[BSE ] = &DD[TNW *size_Mat];
+			D.f[TSW ] = &DD[BNE *size_Mat];
+			D.f[TNE ] = &DD[BSW *size_Mat];
+			D.f[TNW ] = &DD[BSE *size_Mat];
+			D.f[TSE ] = &DD[BNW *size_Mat];
         }
         //////////////////////////////////////////////////////////////////////////
 		unsigned int KQK = k_Q[k];
@@ -6197,59 +5859,59 @@ extern "C" __global__ void PropellerBC(unsigned int* neighborX,
 		real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
 		f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW, f_ZERO;
 
-		f_ZERO= (D.f[dirZERO])[kzero];
-		f_E   = (D.f[dirE   ])[ke   ];
-		f_W   = (D.f[dirW   ])[kw   ];
-		f_N   = (D.f[dirN   ])[kn   ];
-		f_S   = (D.f[dirS   ])[ks   ];
-		f_T   = (D.f[dirT   ])[kt   ];
-		f_B   = (D.f[dirB   ])[kb   ];
-		f_NE  = (D.f[dirNE  ])[kne  ];
-		f_SW  = (D.f[dirSW  ])[ksw  ];
-		f_SE  = (D.f[dirSE  ])[kse  ];
-		f_NW  = (D.f[dirNW  ])[knw  ];
-		f_TE  = (D.f[dirTE  ])[kte  ];
-		f_BW  = (D.f[dirBW  ])[kbw  ];
-		f_BE  = (D.f[dirBE  ])[kbe  ];
-		f_TW  = (D.f[dirTW  ])[ktw  ];
-		f_TN  = (D.f[dirTN  ])[ktn  ];
-		f_BS  = (D.f[dirBS  ])[kbs  ];
-		f_BN  = (D.f[dirBN  ])[kbn  ];
-		f_TS  = (D.f[dirTS  ])[kts  ];
-		f_TNE = (D.f[dirTNE ])[ktne ];
-		f_BSW = (D.f[dirBSW ])[kbsw ];
-		f_BNE = (D.f[dirBNE ])[kbne ];
-		f_TSW = (D.f[dirTSW ])[ktsw ];
-		f_TSE = (D.f[dirTSE ])[ktse ];
-		f_BNW = (D.f[dirBNW ])[kbnw ];
-		f_BSE = (D.f[dirBSE ])[kbse ];
-		f_TNW = (D.f[dirTNW ])[ktnw ];
-		//f_W    = (D.f[dirE   ])[ke   ];
-		//f_E    = (D.f[dirW   ])[kw   ];
-		//f_S    = (D.f[dirN   ])[kn   ];
-		//f_N    = (D.f[dirS   ])[ks   ];
-		//f_B    = (D.f[dirT   ])[kt   ];
-		//f_T    = (D.f[dirB   ])[kb   ];
-		//f_SW   = (D.f[dirNE  ])[kne  ];
-		//f_NE   = (D.f[dirSW  ])[ksw  ];
-		//f_NW   = (D.f[dirSE  ])[kse  ];
-		//f_SE   = (D.f[dirNW  ])[knw  ];
-		//f_BW   = (D.f[dirTE  ])[kte  ];
-		//f_TE   = (D.f[dirBW  ])[kbw  ];
-		//f_TW   = (D.f[dirBE  ])[kbe  ];
-		//f_BE   = (D.f[dirTW  ])[ktw  ];
-		//f_BS   = (D.f[dirTN  ])[ktn  ];
-		//f_TN   = (D.f[dirBS  ])[kbs  ];
-		//f_TS   = (D.f[dirBN  ])[kbn  ];
-		//f_BN   = (D.f[dirTS  ])[kts  ];
-		//f_BSW  = (D.f[dirTNE ])[ktne ];
-		//f_TNE  = (D.f[dirBSW ])[kbsw ];
-		//f_TSW  = (D.f[dirBNE ])[kbne ];
-		//f_BNE  = (D.f[dirTSW ])[ktsw ];
-		//f_BNW  = (D.f[dirTSE ])[ktse ];
-		//f_TSE  = (D.f[dirBNW ])[kbnw ];
-		//f_TNW  = (D.f[dirBSE ])[kbse ];
-		//f_BSE  = (D.f[dirTNW ])[ktnw ];
+		f_ZERO= (D.f[REST])[kzero];
+		f_E   = (D.f[E   ])[ke   ];
+		f_W   = (D.f[W   ])[kw   ];
+		f_N   = (D.f[N   ])[kn   ];
+		f_S   = (D.f[S   ])[ks   ];
+		f_T   = (D.f[T   ])[kt   ];
+		f_B   = (D.f[B   ])[kb   ];
+		f_NE  = (D.f[NE  ])[kne  ];
+		f_SW  = (D.f[SW  ])[ksw  ];
+		f_SE  = (D.f[SE  ])[kse  ];
+		f_NW  = (D.f[NW  ])[knw  ];
+		f_TE  = (D.f[TE  ])[kte  ];
+		f_BW  = (D.f[BW  ])[kbw  ];
+		f_BE  = (D.f[BE  ])[kbe  ];
+		f_TW  = (D.f[TW  ])[ktw  ];
+		f_TN  = (D.f[TN  ])[ktn  ];
+		f_BS  = (D.f[BS  ])[kbs  ];
+		f_BN  = (D.f[BN  ])[kbn  ];
+		f_TS  = (D.f[TS  ])[kts  ];
+		f_TNE = (D.f[TNE ])[ktne ];
+		f_BSW = (D.f[BSW ])[kbsw ];
+		f_BNE = (D.f[BNE ])[kbne ];
+		f_TSW = (D.f[TSW ])[ktsw ];
+		f_TSE = (D.f[TSE ])[ktse ];
+		f_BNW = (D.f[BNW ])[kbnw ];
+		f_BSE = (D.f[BSE ])[kbse ];
+		f_TNW = (D.f[TNW ])[ktnw ];
+		//f_W    = (D.f[E   ])[ke   ];
+		//f_E    = (D.f[W   ])[kw   ];
+		//f_S    = (D.f[N   ])[kn   ];
+		//f_N    = (D.f[S   ])[ks   ];
+		//f_B    = (D.f[T   ])[kt   ];
+		//f_T    = (D.f[B   ])[kb   ];
+		//f_SW   = (D.f[NE  ])[kne  ];
+		//f_NE   = (D.f[SW  ])[ksw  ];
+		//f_NW   = (D.f[SE  ])[kse  ];
+		//f_SE   = (D.f[NW  ])[knw  ];
+		//f_BW   = (D.f[TE  ])[kte  ];
+		//f_TE   = (D.f[BW  ])[kbw  ];
+		//f_TW   = (D.f[BE  ])[kbe  ];
+		//f_BE   = (D.f[TW  ])[ktw  ];
+		//f_BS   = (D.f[TN  ])[ktn  ];
+		//f_TN   = (D.f[BS  ])[kbs  ];
+		//f_TS   = (D.f[BN  ])[kbn  ];
+		//f_BN   = (D.f[TS  ])[kts  ];
+		//f_BSW  = (D.f[TNE ])[ktne ];
+		//f_TNE  = (D.f[BSW ])[kbsw ];
+		//f_TSW  = (D.f[BNE ])[kbne ];
+		//f_BNE  = (D.f[TSW ])[ktsw ];
+		//f_BNW  = (D.f[TSE ])[ktse ];
+		//f_TSE  = (D.f[BNW ])[kbnw ];
+		//f_TNW  = (D.f[BSE ])[kbse ];
+		//f_BSE  = (D.f[TNW ])[ktnw ];
 		//////////////////////////////////////////////////////////////////////////////////
 		real vxo1, vxo2, vxo3, drho;
 		drho   =  /*zero;*/f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
@@ -6330,89 +5992,89 @@ extern "C" __global__ void PropellerBC(unsigned int* neighborX,
          f_BSE  = f_BSE  + ((c1o1+drho) * (-  c1o216*(c3o1*( vxo1-vxo2-vxo3)+c9o2*( vxo1-vxo2-vxo3)*( vxo1-vxo2-vxo3)-cusq) +   c1o216*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2)));
          f_TNW  = f_TNW  + ((c1o1+drho) * (-  c1o216*(c3o1*(-vxo1+vxo2+vxo3)+c9o2*(-vxo1+vxo2+vxo3)*(-vxo1+vxo2+vxo3)-cusq) +   c1o216*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2)));
 
-		(D.f[dirZERO])[kzero] =  f_ZERO;
-        (D.f[dirE   ])[ke   ] =  f_E   ;	// f_W   ;//    	
-        (D.f[dirW   ])[kw   ] =  f_W   ;	// f_E   ;//    	
-        (D.f[dirN   ])[kn   ] =  f_N   ;	// f_S   ;//    	
-        (D.f[dirS   ])[ks   ] =  f_S   ;	// f_N   ;//    	
-        (D.f[dirT   ])[kt   ] =  f_T   ;	// f_B   ;//    	
-        (D.f[dirB   ])[kb   ] =  f_B   ;	// f_T   ;//    	
-        (D.f[dirNE  ])[kne  ] =  f_NE  ;	// f_SW  ;//    	
-        (D.f[dirSW  ])[ksw  ] =  f_SW  ;	// f_NE  ;//    	
-        (D.f[dirSE  ])[kse  ] =  f_SE  ;	// f_NW  ;//    	
-        (D.f[dirNW  ])[knw  ] =  f_NW  ;	// f_SE  ;//    	
-        (D.f[dirTE  ])[kte  ] =  f_TE  ;	// f_BW  ;//    	
-        (D.f[dirBW  ])[kbw  ] =  f_BW  ;	// f_TE  ;//    	
-        (D.f[dirBE  ])[kbe  ] =  f_BE  ;	// f_TW  ;//    	
-        (D.f[dirTW  ])[ktw  ] =  f_TW  ;	// f_BE  ;//    	
-        (D.f[dirTN  ])[ktn  ] =  f_TN  ;	// f_BS  ;//    	
-        (D.f[dirBS  ])[kbs  ] =  f_BS  ;	// f_TN  ;//    	
-        (D.f[dirBN  ])[kbn  ] =  f_BN  ;	// f_TS  ;//    	
-        (D.f[dirTS  ])[kts  ] =  f_TS  ;	// f_BN  ;//    	
-        (D.f[dirTNE ])[ktne ] =  f_TNE ;	// f_BSW ;//    	
-        (D.f[dirBSW ])[kbsw ] =  f_BSW ;	// f_BNE ;//    	
-        (D.f[dirBNE ])[kbne ] =  f_BNE ;	// f_BNW ;//    	
-        (D.f[dirTSW ])[ktsw ] =  f_TSW ;	// f_BSE ;//    	
-        (D.f[dirTSE ])[ktse ] =  f_TSE ;	// f_TSW ;//    	
-        (D.f[dirBNW ])[kbnw ] =  f_BNW ;	// f_TNE ;//    	
-        (D.f[dirBSE ])[kbse ] =  f_BSE ;	// f_TNW ;//    	
-        (D.f[dirTNW ])[ktnw ] =  f_TNW ;	// f_TSE ;//    	
+		(D.f[REST])[kzero] =  f_ZERO;
+        (D.f[E   ])[ke   ] =  f_E   ;	// f_W   ;//    	
+        (D.f[W   ])[kw   ] =  f_W   ;	// f_E   ;//    	
+        (D.f[N   ])[kn   ] =  f_N   ;	// f_S   ;//    	
+        (D.f[S   ])[ks   ] =  f_S   ;	// f_N   ;//    	
+        (D.f[T   ])[kt   ] =  f_T   ;	// f_B   ;//    	
+        (D.f[B   ])[kb   ] =  f_B   ;	// f_T   ;//    	
+        (D.f[NE  ])[kne  ] =  f_NE  ;	// f_SW  ;//    	
+        (D.f[SW  ])[ksw  ] =  f_SW  ;	// f_NE  ;//    	
+        (D.f[SE  ])[kse  ] =  f_SE  ;	// f_NW  ;//    	
+        (D.f[NW  ])[knw  ] =  f_NW  ;	// f_SE  ;//    	
+        (D.f[TE  ])[kte  ] =  f_TE  ;	// f_BW  ;//    	
+        (D.f[BW  ])[kbw  ] =  f_BW  ;	// f_TE  ;//    	
+        (D.f[BE  ])[kbe  ] =  f_BE  ;	// f_TW  ;//    	
+        (D.f[TW  ])[ktw  ] =  f_TW  ;	// f_BE  ;//    	
+        (D.f[TN  ])[ktn  ] =  f_TN  ;	// f_BS  ;//    	
+        (D.f[BS  ])[kbs  ] =  f_BS  ;	// f_TN  ;//    	
+        (D.f[BN  ])[kbn  ] =  f_BN  ;	// f_TS  ;//    	
+        (D.f[TS  ])[kts  ] =  f_TS  ;	// f_BN  ;//    	
+        (D.f[TNE ])[ktne ] =  f_TNE ;	// f_BSW ;//    	
+        (D.f[BSW ])[kbsw ] =  f_BSW ;	// f_BNE ;//    	
+        (D.f[BNE ])[kbne ] =  f_BNE ;	// f_BNW ;//    	
+        (D.f[TSW ])[ktsw ] =  f_TSW ;	// f_BSE ;//    	
+        (D.f[TSE ])[ktse ] =  f_TSE ;	// f_TSW ;//    	
+        (D.f[BNW ])[kbnw ] =  f_BNW ;	// f_TNE ;//    	
+        (D.f[BSE ])[kbse ] =  f_BSE ;	// f_TNW ;//    	
+        (D.f[TNW ])[ktnw ] =  f_TNW ;	// f_TSE ;//    	
 
 		//////////////////////////////////////////////////////////////////////////
-        ////(D.f[dirZERO])[kzero] =   c8over27* (drho-cu_sq);
-        //(D.f[dirE   ])[ke   ] =   three*c2over27* ( vx1        );		//six
-        //(D.f[dirW   ])[kw   ] =   three*c2over27* (-vx1        );		//six
-        //(D.f[dirN   ])[kn   ] =   three*c2over27* (     vx2    );		//six
-        //(D.f[dirS   ])[ks   ] =   three*c2over27* (    -vx2    );		//six
-        //(D.f[dirT   ])[kt   ] =   three*c2over27* (         vx3);		//six
-        //(D.f[dirB   ])[kb   ] =   three*c2over27* (        -vx3);		//six
-        //(D.f[dirNE  ])[kne  ] =   three*c1over54* ( vx1+vx2    );		//six
-        //(D.f[dirSW  ])[ksw  ] =   three*c1over54* (-vx1-vx2    );		//six
-        //(D.f[dirSE  ])[kse  ] =   three*c1over54* ( vx1-vx2    );		//six
-        //(D.f[dirNW  ])[knw  ] =   three*c1over54* (-vx1+vx2    );		//six
-        //(D.f[dirTE  ])[kte  ] =   three*c1over54* ( vx1    +vx3);		//six
-        //(D.f[dirBW  ])[kbw  ] =   three*c1over54* (-vx1    -vx3);		//six
-        //(D.f[dirBE  ])[kbe  ] =   three*c1over54* ( vx1    -vx3);		//six
-        //(D.f[dirTW  ])[ktw  ] =   three*c1over54* (-vx1    +vx3);		//six
-        //(D.f[dirTN  ])[ktn  ] =   three*c1over54* (     vx2+vx3);		//six
-        //(D.f[dirBS  ])[kbs  ] =   three*c1over54* (    -vx2-vx3);		//six
-        //(D.f[dirBN  ])[kbn  ] =   three*c1over54* (     vx2-vx3);		//six
-        //(D.f[dirTS  ])[kts  ] =   three*c1over54* (    -vx2+vx3);		//six
-        //(D.f[dirTNE ])[ktne ] =   three*c1over216*( vx1+vx2+vx3);		//six
-        //(D.f[dirBSW ])[kbsw ] =   three*c1over216*(-vx1-vx2-vx3);		//six
-        //(D.f[dirBNE ])[kbne ] =   three*c1over216*( vx1+vx2-vx3);		//six
-        //(D.f[dirTSW ])[ktsw ] =   three*c1over216*(-vx1-vx2+vx3);		//six
-        //(D.f[dirTSE ])[ktse ] =   three*c1over216*( vx1-vx2+vx3);		//six
-        //(D.f[dirBNW ])[kbnw ] =   three*c1over216*(-vx1+vx2-vx3);		//six
-        //(D.f[dirBSE ])[kbse ] =   three*c1over216*( vx1-vx2-vx3);		//six
-        //(D.f[dirTNW ])[ktnw ] =   three*c1over216*(-vx1+vx2+vx3);		//six
-        //(D.f[dirZERO])[kzero] =   c8over27* (drho-cu_sq);
-        //(D.f[dirE   ])[ke   ] =   c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
-        //(D.f[dirW   ])[kw   ] =   c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
-        //(D.f[dirN   ])[kn   ] =   c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
-        //(D.f[dirS   ])[ks   ] =   c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
-        //(D.f[dirT   ])[kt   ] =   c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
-        //(D.f[dirB   ])[kb   ] =   c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
-        //(D.f[dirNE  ])[kne  ] =   c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-        //(D.f[dirSW  ])[ksw  ] =   c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-        //(D.f[dirSE  ])[kse  ] =   c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-        //(D.f[dirNW  ])[knw  ] =   c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-        //(D.f[dirTE  ])[kte  ] =   c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-        //(D.f[dirBW  ])[kbw  ] =   c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-        //(D.f[dirBE  ])[kbe  ] =   c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-        //(D.f[dirTW  ])[ktw  ] =   c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-        //(D.f[dirTN  ])[ktn  ] =   c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-        //(D.f[dirBS  ])[kbs  ] =   c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-        //(D.f[dirBN  ])[kbn  ] =   c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-        //(D.f[dirTS  ])[kts  ] =   c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-        //(D.f[dirTNE ])[ktne ] =   c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-        //(D.f[dirBSW ])[kbsw ] =   c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-        //(D.f[dirBNE ])[kbne ] =   c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-        //(D.f[dirTSW ])[ktsw ] =   c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-        //(D.f[dirTSE ])[ktse ] =   c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-        //(D.f[dirBNW ])[kbnw ] =   c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-        //(D.f[dirBSE ])[kbse ] =   c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-        //(D.f[dirTNW ])[ktnw ] =   c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+        ////(D.f[REST])[kzero] =   c8over27* (drho-cu_sq);
+        //(D.f[E   ])[ke   ] =   three*c2over27* ( vx1        );		//six
+        //(D.f[W   ])[kw   ] =   three*c2over27* (-vx1        );		//six
+        //(D.f[N   ])[kn   ] =   three*c2over27* (     vx2    );		//six
+        //(D.f[S   ])[ks   ] =   three*c2over27* (    -vx2    );		//six
+        //(D.f[T   ])[kt   ] =   three*c2over27* (         vx3);		//six
+        //(D.f[B   ])[kb   ] =   three*c2over27* (        -vx3);		//six
+        //(D.f[NE  ])[kne  ] =   three*c1over54* ( vx1+vx2    );		//six
+        //(D.f[SW  ])[ksw  ] =   three*c1over54* (-vx1-vx2    );		//six
+        //(D.f[SE  ])[kse  ] =   three*c1over54* ( vx1-vx2    );		//six
+        //(D.f[NW  ])[knw  ] =   three*c1over54* (-vx1+vx2    );		//six
+        //(D.f[TE  ])[kte  ] =   three*c1over54* ( vx1    +vx3);		//six
+        //(D.f[BW  ])[kbw  ] =   three*c1over54* (-vx1    -vx3);		//six
+        //(D.f[BE  ])[kbe  ] =   three*c1over54* ( vx1    -vx3);		//six
+        //(D.f[TW  ])[ktw  ] =   three*c1over54* (-vx1    +vx3);		//six
+        //(D.f[TN  ])[ktn  ] =   three*c1over54* (     vx2+vx3);		//six
+        //(D.f[BS  ])[kbs  ] =   three*c1over54* (    -vx2-vx3);		//six
+        //(D.f[BN  ])[kbn  ] =   three*c1over54* (     vx2-vx3);		//six
+        //(D.f[TS  ])[kts  ] =   three*c1over54* (    -vx2+vx3);		//six
+        //(D.f[TNE ])[ktne ] =   three*c1over216*( vx1+vx2+vx3);		//six
+        //(D.f[BSW ])[kbsw ] =   three*c1over216*(-vx1-vx2-vx3);		//six
+        //(D.f[BNE ])[kbne ] =   three*c1over216*( vx1+vx2-vx3);		//six
+        //(D.f[TSW ])[ktsw ] =   three*c1over216*(-vx1-vx2+vx3);		//six
+        //(D.f[TSE ])[ktse ] =   three*c1over216*( vx1-vx2+vx3);		//six
+        //(D.f[BNW ])[kbnw ] =   three*c1over216*(-vx1+vx2-vx3);		//six
+        //(D.f[BSE ])[kbse ] =   three*c1over216*( vx1-vx2-vx3);		//six
+        //(D.f[TNW ])[ktnw ] =   three*c1over216*(-vx1+vx2+vx3);		//six
+        //(D.f[REST])[kzero] =   c8over27* (drho-cu_sq);
+        //(D.f[E   ])[ke   ] =   c2over27* (drho+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cu_sq);
+        //(D.f[W   ])[kw   ] =   c2over27* (drho+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cu_sq);
+        //(D.f[N   ])[kn   ] =   c2over27* (drho+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cu_sq);
+        //(D.f[S   ])[ks   ] =   c2over27* (drho+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cu_sq);
+        //(D.f[T   ])[kt   ] =   c2over27* (drho+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cu_sq);
+        //(D.f[B   ])[kb   ] =   c2over27* (drho+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cu_sq);
+        //(D.f[NE  ])[kne  ] =   c1over54* (drho+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+        //(D.f[SW  ])[ksw  ] =   c1over54* (drho+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+        //(D.f[SE  ])[kse  ] =   c1over54* (drho+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+        //(D.f[NW  ])[knw  ] =   c1over54* (drho+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+        //(D.f[TE  ])[kte  ] =   c1over54* (drho+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+        //(D.f[BW  ])[kbw  ] =   c1over54* (drho+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+        //(D.f[BE  ])[kbe  ] =   c1over54* (drho+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+        //(D.f[TW  ])[ktw  ] =   c1over54* (drho+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+        //(D.f[TN  ])[ktn  ] =   c1over54* (drho+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+        //(D.f[BS  ])[kbs  ] =   c1over54* (drho+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+        //(D.f[BN  ])[kbn  ] =   c1over54* (drho+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+        //(D.f[TS  ])[kts  ] =   c1over54* (drho+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+        //(D.f[TNE ])[ktne ] =   c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+        //(D.f[BSW ])[kbsw ] =   c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+        //(D.f[BNE ])[kbne ] =   c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+        //(D.f[TSW ])[ktsw ] =   c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+        //(D.f[TSE ])[ktse ] =   c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+        //(D.f[BNW ])[kbnw ] =   c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+        //(D.f[BSE ])[kbse ] =   c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+        //(D.f[TNW ])[ktnw ] =   c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
 		}
     }
 }
diff --git a/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu b/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu
index e911a716ce74c3f4ff8c323a733269dc7d260dc7..064e9415ccd32c291fbee980b41a3b187d470eee 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu
@@ -1,9 +1,11 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
 #include "math.h"
 
 
@@ -48,63 +50,63 @@ extern "C" __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -118,33 +120,33 @@ extern "C" __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];
-			real mfabb = (D.f[dirW])[kw];
-			real mfbcb = (D.f[dirN])[k];
-			real mfbab = (D.f[dirS])[ks];
-			real mfbbc = (D.f[dirT])[k];
-			real mfbba = (D.f[dirB])[kb];
-			real mfccb = (D.f[dirNE])[k];
-			real mfaab = (D.f[dirSW])[ksw];
-			real mfcab = (D.f[dirSE])[ks];
-			real mfacb = (D.f[dirNW])[kw];
-			real mfcbc = (D.f[dirTE])[k];
-			real mfaba = (D.f[dirBW])[kbw];
-			real mfcba = (D.f[dirBE])[kb];
-			real mfabc = (D.f[dirTW])[kw];
-			real mfbcc = (D.f[dirTN])[k];
-			real mfbaa = (D.f[dirBS])[kbs];
-			real mfbca = (D.f[dirBN])[kb];
-			real mfbac = (D.f[dirTS])[ks];
-			real mfbbb = (D.f[dirZERO])[k];
-			real mfccc = (D.f[dirTNE])[k];
-			real mfaac = (D.f[dirTSW])[ksw];
-			real mfcac = (D.f[dirTSE])[ks];
-			real mfacc = (D.f[dirTNW])[kw];
-			real mfcca = (D.f[dirBNE])[kb];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];
-			real mfaca = (D.f[dirBNW])[kbw];
+			real mfcbb = (D.f[E])[k];
+			real mfabb = (D.f[W])[kw];
+			real mfbcb = (D.f[N])[k];
+			real mfbab = (D.f[S])[ks];
+			real mfbbc = (D.f[T])[k];
+			real mfbba = (D.f[B])[kb];
+			real mfccb = (D.f[NE])[k];
+			real mfaab = (D.f[SW])[ksw];
+			real mfcab = (D.f[SE])[ks];
+			real mfacb = (D.f[NW])[kw];
+			real mfcbc = (D.f[TE])[k];
+			real mfaba = (D.f[BW])[kbw];
+			real mfcba = (D.f[BE])[kb];
+			real mfabc = (D.f[TW])[kw];
+			real mfbcc = (D.f[TN])[k];
+			real mfbaa = (D.f[BS])[kbs];
+			real mfbca = (D.f[BN])[kb];
+			real mfbac = (D.f[TS])[ks];
+			real mfbbb = (D.f[REST])[k];
+			real mfccc = (D.f[TNE])[k];
+			real mfaac = (D.f[TSW])[ksw];
+			real mfcac = (D.f[TSE])[ks];
+			real mfacc = (D.f[TNW])[kw];
+			real mfcca = (D.f[BNE])[kb];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];
+			real mfaca = (D.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1005,33 +1007,33 @@ extern "C" __global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;
-			(D.f[dirW])[kw] = mfcbb;
-			(D.f[dirN])[k] = mfbab;
-			(D.f[dirS])[ks] = mfbcb;
-			(D.f[dirT])[k] = mfbba;
-			(D.f[dirB])[kb] = mfbbc;
-			(D.f[dirNE])[k] = mfaab;
-			(D.f[dirSW])[ksw] = mfccb;
-			(D.f[dirSE])[ks] = mfacb;
-			(D.f[dirNW])[kw] = mfcab;
-			(D.f[dirTE])[k] = mfaba;
-			(D.f[dirBW])[kbw] = mfcbc;
-			(D.f[dirBE])[kb] = mfabc;
-			(D.f[dirTW])[kw] = mfcba;
-			(D.f[dirTN])[k] = mfbaa;
-			(D.f[dirBS])[kbs] = mfbcc;
-			(D.f[dirBN])[kb] = mfbac;
-			(D.f[dirTS])[ks] = mfbca;
-			(D.f[dirZERO])[k] = mfbbb;
-			(D.f[dirTNE])[k] = mfaaa;
-			(D.f[dirTSE])[ks] = mfaca;
-			(D.f[dirBNE])[kb] = mfaac;
-			(D.f[dirBSE])[kbs] = mfacc;
-			(D.f[dirTNW])[kw] = mfcaa;
-			(D.f[dirTSW])[ksw] = mfcca;
-			(D.f[dirBNW])[kbw] = mfcac;
-			(D.f[dirBSW])[kbsw] = mfccc;
+			(D.f[E])[k] = mfabb;
+			(D.f[W])[kw] = mfcbb;
+			(D.f[N])[k] = mfbab;
+			(D.f[S])[ks] = mfbcb;
+			(D.f[T])[k] = mfbba;
+			(D.f[B])[kb] = mfbbc;
+			(D.f[NE])[k] = mfaab;
+			(D.f[SW])[ksw] = mfccb;
+			(D.f[SE])[ks] = mfacb;
+			(D.f[NW])[kw] = mfcab;
+			(D.f[TE])[k] = mfaba;
+			(D.f[BW])[kbw] = mfcbc;
+			(D.f[BE])[kb] = mfabc;
+			(D.f[TW])[kw] = mfcba;
+			(D.f[TN])[k] = mfbaa;
+			(D.f[BS])[kbs] = mfbcc;
+			(D.f[BN])[kb] = mfbac;
+			(D.f[TS])[ks] = mfbca;
+			(D.f[REST])[k] = mfbbb;
+			(D.f[TNE])[k] = mfaaa;
+			(D.f[TSE])[ks] = mfaca;
+			(D.f[BNE])[kb] = mfaac;
+			(D.f[BSE])[kbs] = mfacc;
+			(D.f[TNW])[kw] = mfcaa;
+			(D.f[TSW])[ksw] = mfcca;
+			(D.f[BNW])[kbw] = mfcac;
+			(D.f[BSW])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu b/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu
index 50e3df869f96794e9d8240361b1d828365d61470..6da362fafcd67e8a4ddadf9405f92e66bba4c7b4 100644
--- a/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu
+++ b/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu
@@ -1,22 +1,21 @@
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 
 
 //////////////////////////////////////////////////////////////////////////////
-extern "C" __global__ void WallFunction27(int inx,
-										  int iny,
+extern "C" __global__ void WallFunction27(
 										  real* vx,
 										  real* vy,
 										  real* vz,
 										  real* DD, 
 										  int* k_Q, 
 										  real* QQ,
-										  unsigned int sizeQ,
-									      int numberOfBCnodes, 
+										  unsigned int numberOfBCnodes, 
 										  real om1, 
 										  unsigned int* neighborX,
 										  unsigned int* neighborY,
@@ -27,63 +26,63 @@ extern "C" __global__ void WallFunction27(int inx,
    Distributions27 D;
    if (isEvenTimestep==true)
    {
-      D.f[dirE   ] = &DD[dirE   *size_Mat];
-      D.f[dirW   ] = &DD[dirW   *size_Mat];
-      D.f[dirN   ] = &DD[dirN   *size_Mat];
-      D.f[dirS   ] = &DD[dirS   *size_Mat];
-      D.f[dirT   ] = &DD[dirT   *size_Mat];
-      D.f[dirB   ] = &DD[dirB   *size_Mat];
-      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+      D.f[E   ] = &DD[E   *size_Mat];
+      D.f[W   ] = &DD[W   *size_Mat];
+      D.f[N   ] = &DD[N   *size_Mat];
+      D.f[S   ] = &DD[S   *size_Mat];
+      D.f[T   ] = &DD[T   *size_Mat];
+      D.f[B   ] = &DD[B   *size_Mat];
+      D.f[NE  ] = &DD[NE  *size_Mat];
+      D.f[SW  ] = &DD[SW  *size_Mat];
+      D.f[SE  ] = &DD[SE  *size_Mat];
+      D.f[NW  ] = &DD[NW  *size_Mat];
+      D.f[TE  ] = &DD[TE  *size_Mat];
+      D.f[BW  ] = &DD[BW  *size_Mat];
+      D.f[BE  ] = &DD[BE  *size_Mat];
+      D.f[TW  ] = &DD[TW  *size_Mat];
+      D.f[TN  ] = &DD[TN  *size_Mat];
+      D.f[BS  ] = &DD[BS  *size_Mat];
+      D.f[BN  ] = &DD[BN  *size_Mat];
+      D.f[TS  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[TNE *size_Mat];
+      D.f[TSW ] = &DD[TSW *size_Mat];
+      D.f[TSE ] = &DD[TSE *size_Mat];
+      D.f[TNW ] = &DD[TNW *size_Mat];
+      D.f[BNE ] = &DD[BNE *size_Mat];
+      D.f[BSW ] = &DD[BSW *size_Mat];
+      D.f[BSE ] = &DD[BSE *size_Mat];
+      D.f[BNW ] = &DD[BNW *size_Mat];
    } 
    else
    {
-      D.f[dirW   ] = &DD[dirE   *size_Mat];
-      D.f[dirE   ] = &DD[dirW   *size_Mat];
-      D.f[dirS   ] = &DD[dirN   *size_Mat];
-      D.f[dirN   ] = &DD[dirS   *size_Mat];
-      D.f[dirB   ] = &DD[dirT   *size_Mat];
-      D.f[dirT   ] = &DD[dirB   *size_Mat];
-      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+      D.f[W   ] = &DD[E   *size_Mat];
+      D.f[E   ] = &DD[W   *size_Mat];
+      D.f[S   ] = &DD[N   *size_Mat];
+      D.f[N   ] = &DD[S   *size_Mat];
+      D.f[B   ] = &DD[T   *size_Mat];
+      D.f[T   ] = &DD[B   *size_Mat];
+      D.f[SW  ] = &DD[NE  *size_Mat];
+      D.f[NE  ] = &DD[SW  *size_Mat];
+      D.f[NW  ] = &DD[SE  *size_Mat];
+      D.f[SE  ] = &DD[NW  *size_Mat];
+      D.f[BW  ] = &DD[TE  *size_Mat];
+      D.f[TE  ] = &DD[BW  *size_Mat];
+      D.f[TW  ] = &DD[BE  *size_Mat];
+      D.f[BE  ] = &DD[TW  *size_Mat];
+      D.f[BS  ] = &DD[TN  *size_Mat];
+      D.f[TN  ] = &DD[BS  *size_Mat];
+      D.f[TS  ] = &DD[BN  *size_Mat];
+      D.f[BN  ] = &DD[TS  *size_Mat];
+      D.f[REST] = &DD[REST*size_Mat];
+      D.f[TNE ] = &DD[BSW *size_Mat];
+      D.f[TSW ] = &DD[BNE *size_Mat];
+      D.f[TSE ] = &DD[BNW *size_Mat];
+      D.f[TNW ] = &DD[BSE *size_Mat];
+      D.f[BNE ] = &DD[TSW *size_Mat];
+      D.f[BSW ] = &DD[TNE *size_Mat];
+      D.f[BSE ] = &DD[TNW *size_Mat];
+      D.f[BNW ] = &DD[TSE *size_Mat];
    }
    ////////////////////////////////////////////////////////////////////////////////
    const unsigned  x = threadIdx.x;  // Globaler x-Index 
@@ -108,32 +107,32 @@ extern "C" __global__ void WallFunction27(int inx,
       //      *q_dirBE,  *q_dirTW,  *q_dirTN,  *q_dirBS,  *q_dirBN,  *q_dirTS,
       //      *q_dirTNE, *q_dirTSW, *q_dirTSE, *q_dirTNW, *q_dirBNE, *q_dirBSW,
       //      *q_dirBSE, *q_dirBNW; 
-      //q_dirE   = &QQ[dirE   *sizeQ];
-      //q_dirW   = &QQ[dirW   *sizeQ];
-      //q_dirN   = &QQ[dirN   *sizeQ];
-      //q_dirS   = &QQ[dirS   *sizeQ];
-      //q_dirT   = &QQ[dirT   *sizeQ];
-      //q_dirB   = &QQ[dirB   *sizeQ];
-      //q_dirNE  = &QQ[dirNE  *sizeQ];
-      //q_dirSW  = &QQ[dirSW  *sizeQ];
-      //q_dirSE  = &QQ[dirSE  *sizeQ];
-      //q_dirNW  = &QQ[dirNW  *sizeQ];
-      //q_dirTE  = &QQ[dirTE  *sizeQ];
-      //q_dirBW  = &QQ[dirBW  *sizeQ];
-      //q_dirBE  = &QQ[dirBE  *sizeQ];
-      //q_dirTW  = &QQ[dirTW  *sizeQ];
-      //q_dirTN  = &QQ[dirTN  *sizeQ];
-      //q_dirBS  = &QQ[dirBS  *sizeQ];
-      //q_dirBN  = &QQ[dirBN  *sizeQ];
-      //q_dirTS  = &QQ[dirTS  *sizeQ];
-      //q_dirTNE = &QQ[dirTNE *sizeQ];
-      //q_dirTSW = &QQ[dirTSW *sizeQ];
-      //q_dirTSE = &QQ[dirTSE *sizeQ];
-      //q_dirTNW = &QQ[dirTNW *sizeQ];
-      //q_dirBNE = &QQ[dirBNE *sizeQ];
-      //q_dirBSW = &QQ[dirBSW *sizeQ];
-      //q_dirBSE = &QQ[dirBSE *sizeQ];
-      //q_dirBNW = &QQ[dirBNW *sizeQ];
+      //q_dirE   = &QQ[E   * numberOfBCnodes];
+      //q_dirW   = &QQ[W   * numberOfBCnodes];
+      //q_dirN   = &QQ[N   * numberOfBCnodes];
+      //q_dirS   = &QQ[S   * numberOfBCnodes];
+      //q_dirT   = &QQ[T   * numberOfBCnodes];
+      //q_dirB   = &QQ[B   * numberOfBCnodes];
+      //q_dirNE  = &QQ[NE  * numberOfBCnodes];
+      //q_dirSW  = &QQ[SW  * numberOfBCnodes];
+      //q_dirSE  = &QQ[SE  * numberOfBCnodes];
+      //q_dirNW  = &QQ[NW  * numberOfBCnodes];
+      //q_dirTE  = &QQ[TE  * numberOfBCnodes];
+      //q_dirBW  = &QQ[BW  * numberOfBCnodes];
+      //q_dirBE  = &QQ[BE  * numberOfBCnodes];
+      //q_dirTW  = &QQ[TW  * numberOfBCnodes];
+      //q_dirTN  = &QQ[TN  * numberOfBCnodes];
+      //q_dirBS  = &QQ[BS  * numberOfBCnodes];
+      //q_dirBN  = &QQ[BN  * numberOfBCnodes];
+      //q_dirTS  = &QQ[TS  * numberOfBCnodes];
+      //q_dirTNE = &QQ[TNE * numberOfBCnodes];
+      //q_dirTSW = &QQ[TSW * numberOfBCnodes];
+      //q_dirTSE = &QQ[TSE * numberOfBCnodes];
+      //q_dirTNW = &QQ[TNW * numberOfBCnodes];
+      //q_dirBNE = &QQ[BNE * numberOfBCnodes];
+      //q_dirBSW = &QQ[BSW * numberOfBCnodes];
+      //q_dirBSE = &QQ[BSE * numberOfBCnodes];
+      //q_dirBNW = &QQ[BNW * numberOfBCnodes];
       ////////////////////////////////////////////////////////////////////////////////
       //index
       unsigned int KQK  = k_Q[k];
@@ -168,38 +167,38 @@ extern "C" __global__ void WallFunction27(int inx,
       real f_E,  f_W,  f_N,  f_S,  f_T,  f_B,   f_NE,  f_SW,  f_SE,  f_NW,  f_TE,  f_BW,  f_BE,
          f_TW, f_TN, f_BS, f_BN, f_TS, f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW;
 
-      f_W    = (D.f[dirE   ])[ke   ];
-      f_E    = (D.f[dirW   ])[kw   ];
-      f_S    = (D.f[dirN   ])[kn   ];
-      f_N    = (D.f[dirS   ])[ks   ];
-      f_B    = (D.f[dirT   ])[kt   ];
-      f_T    = (D.f[dirB   ])[kb   ];
-      f_SW   = (D.f[dirNE  ])[kne  ];
-      f_NE   = (D.f[dirSW  ])[ksw  ];
-      f_NW   = (D.f[dirSE  ])[kse  ];
-      f_SE   = (D.f[dirNW  ])[knw  ];
-      f_BW   = (D.f[dirTE  ])[kte  ];
-      f_TE   = (D.f[dirBW  ])[kbw  ];
-      f_TW   = (D.f[dirBE  ])[kbe  ];
-      f_BE   = (D.f[dirTW  ])[ktw  ];
-      f_BS   = (D.f[dirTN  ])[ktn  ];
-      f_TN   = (D.f[dirBS  ])[kbs  ];
-      f_TS   = (D.f[dirBN  ])[kbn  ];
-      f_BN   = (D.f[dirTS  ])[kts  ];
-      f_BSW  = (D.f[dirTNE ])[ktne ];
-      f_BNE  = (D.f[dirTSW ])[ktsw ];
-      f_BNW  = (D.f[dirTSE ])[ktse ];
-      f_BSE  = (D.f[dirTNW ])[ktnw ];
-      f_TSW  = (D.f[dirBNE ])[kbne ];
-      f_TNE  = (D.f[dirBSW ])[kbsw ];
-      f_TNW  = (D.f[dirBSE ])[kbse ];
-      f_TSE  = (D.f[dirBNW ])[kbnw ];
+      f_W    = (D.f[E   ])[ke   ];
+      f_E    = (D.f[W   ])[kw   ];
+      f_S    = (D.f[N   ])[kn   ];
+      f_N    = (D.f[S   ])[ks   ];
+      f_B    = (D.f[T   ])[kt   ];
+      f_T    = (D.f[B   ])[kb   ];
+      f_SW   = (D.f[NE  ])[kne  ];
+      f_NE   = (D.f[SW  ])[ksw  ];
+      f_NW   = (D.f[SE  ])[kse  ];
+      f_SE   = (D.f[NW  ])[knw  ];
+      f_BW   = (D.f[TE  ])[kte  ];
+      f_TE   = (D.f[BW  ])[kbw  ];
+      f_TW   = (D.f[BE  ])[kbe  ];
+      f_BE   = (D.f[TW  ])[ktw  ];
+      f_BS   = (D.f[TN  ])[ktn  ];
+      f_TN   = (D.f[BS  ])[kbs  ];
+      f_TS   = (D.f[BN  ])[kbn  ];
+      f_BN   = (D.f[TS  ])[kts  ];
+      f_BSW  = (D.f[TNE ])[ktne ];
+      f_BNE  = (D.f[TSW ])[ktsw ];
+      f_BNW  = (D.f[TSE ])[ktse ];
+      f_BSE  = (D.f[TNW ])[ktnw ];
+      f_TSW  = (D.f[BNE ])[kbne ];
+      f_TNE  = (D.f[BSW ])[kbsw ];
+      f_TNW  = (D.f[BSE ])[kbse ];
+      f_TSE  = (D.f[BNW ])[kbnw ];
       ////////////////////////////////////////////////////////////////////////////////
       // real vx2, vx3, feq, q;
       real vx1, drho;
       drho   =  f_TSE + f_TNW + f_TNE + f_TSW + f_BSE + f_BNW + f_BNE + f_BSW +
                 f_BN + f_TS + f_TN + f_BS + f_BE + f_TW + f_TE + f_BW + f_SE + f_NW + f_NE + f_SW + 
-                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[dirZERO])[kzero]); 
+                f_T + f_B + f_N + f_S + f_E + f_W + ((D.f[REST])[kzero]); 
 
        vx1    =  (((f_TSE - f_BNW) - (f_TNW - f_BSE)) + ((f_TNE - f_BSW) - (f_TSW - f_BNE)) +
                  ((f_BE - f_TW)   + (f_TE - f_BW))   + ((f_SE - f_NW)   + (f_NE - f_SW)) +
@@ -235,67 +234,67 @@ extern "C" __global__ void WallFunction27(int inx,
    //   //////////////////////////////////////////////////////////////////////////
    //   if (isEvenTimestep==false)
    //   {
-   //      D.f[dirE   ] = &DD[dirE   *size_Mat];
-   //      D.f[dirW   ] = &DD[dirW   *size_Mat];
-   //      D.f[dirN   ] = &DD[dirN   *size_Mat];
-   //      D.f[dirS   ] = &DD[dirS   *size_Mat];
-   //      D.f[dirT   ] = &DD[dirT   *size_Mat];
-   //      D.f[dirB   ] = &DD[dirB   *size_Mat];
-   //      D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-   //      D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-   //      D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-   //      D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-   //      D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-   //      D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-   //      D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-   //      D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-   //      D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-   //      D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-   //      D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-   //      D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-   //      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //      D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-   //      D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-   //      D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-   //      D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-   //      D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-   //      D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-   //      D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-   //      D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+   //      D.f[E   ] = &DD[E   *size_Mat];
+   //      D.f[W   ] = &DD[W   *size_Mat];
+   //      D.f[N   ] = &DD[N   *size_Mat];
+   //      D.f[S   ] = &DD[S   *size_Mat];
+   //      D.f[T   ] = &DD[T   *size_Mat];
+   //      D.f[B   ] = &DD[B   *size_Mat];
+   //      D.f[NE  ] = &DD[NE  *size_Mat];
+   //      D.f[SW  ] = &DD[SW  *size_Mat];
+   //      D.f[SE  ] = &DD[SE  *size_Mat];
+   //      D.f[NW  ] = &DD[NW  *size_Mat];
+   //      D.f[TE  ] = &DD[TE  *size_Mat];
+   //      D.f[BW  ] = &DD[BW  *size_Mat];
+   //      D.f[BE  ] = &DD[BE  *size_Mat];
+   //      D.f[TW  ] = &DD[TW  *size_Mat];
+   //      D.f[TN  ] = &DD[TN  *size_Mat];
+   //      D.f[BS  ] = &DD[BS  *size_Mat];
+   //      D.f[BN  ] = &DD[BN  *size_Mat];
+   //      D.f[TS  ] = &DD[TS  *size_Mat];
+   //      D.f[REST] = &DD[REST*size_Mat];
+   //      D.f[TNE ] = &DD[TNE *size_Mat];
+   //      D.f[TSW ] = &DD[TSW *size_Mat];
+   //      D.f[TSE ] = &DD[TSE *size_Mat];
+   //      D.f[TNW ] = &DD[TNW *size_Mat];
+   //      D.f[BNE ] = &DD[BNE *size_Mat];
+   //      D.f[BSW ] = &DD[BSW *size_Mat];
+   //      D.f[BSE ] = &DD[BSE *size_Mat];
+   //      D.f[BNW ] = &DD[BNW *size_Mat];
    //   } 
    //   else
    //   {
-   //      D.f[dirW   ] = &DD[dirE   *size_Mat];
-   //      D.f[dirE   ] = &DD[dirW   *size_Mat];
-   //      D.f[dirS   ] = &DD[dirN   *size_Mat];
-   //      D.f[dirN   ] = &DD[dirS   *size_Mat];
-   //      D.f[dirB   ] = &DD[dirT   *size_Mat];
-   //      D.f[dirT   ] = &DD[dirB   *size_Mat];
-   //      D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-   //      D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-   //      D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-   //      D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-   //      D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-   //      D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-   //      D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-   //      D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-   //      D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-   //      D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-   //      D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-   //      D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-   //      D.f[dirZERO] = &DD[dirZERO*size_Mat];
-   //      D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-   //      D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-   //      D.f[dirTSE ] = &DD[dirBNW *size_Mat];
-   //      D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-   //      D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-   //      D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-   //      D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-   //      D.f[dirBNW ] = &DD[dirTSE *size_Mat];
+   //      D.f[W   ] = &DD[E   *size_Mat];
+   //      D.f[E   ] = &DD[W   *size_Mat];
+   //      D.f[S   ] = &DD[N   *size_Mat];
+   //      D.f[N   ] = &DD[S   *size_Mat];
+   //      D.f[B   ] = &DD[T   *size_Mat];
+   //      D.f[T   ] = &DD[B   *size_Mat];
+   //      D.f[SW  ] = &DD[NE  *size_Mat];
+   //      D.f[NE  ] = &DD[SW  *size_Mat];
+   //      D.f[NW  ] = &DD[SE  *size_Mat];
+   //      D.f[SE  ] = &DD[NW  *size_Mat];
+   //      D.f[BW  ] = &DD[TE  *size_Mat];
+   //      D.f[TE  ] = &DD[BW  *size_Mat];
+   //      D.f[TW  ] = &DD[BE  *size_Mat];
+   //      D.f[BE  ] = &DD[TW  *size_Mat];
+   //      D.f[BS  ] = &DD[TN  *size_Mat];
+   //      D.f[TN  ] = &DD[BS  *size_Mat];
+   //      D.f[TS  ] = &DD[BN  *size_Mat];
+   //      D.f[BN  ] = &DD[TS  *size_Mat];
+   //      D.f[REST] = &DD[REST*size_Mat];
+   //      D.f[TNE ] = &DD[BSW *size_Mat];
+   //      D.f[TSW ] = &DD[BNE *size_Mat];
+   //      D.f[TSE ] = &DD[BNW *size_Mat];
+   //      D.f[TNW ] = &DD[BSE *size_Mat];
+   //      D.f[BNE ] = &DD[TSW *size_Mat];
+   //      D.f[BSW ] = &DD[TNE *size_Mat];
+   //      D.f[BSE ] = &DD[TNW *size_Mat];
+   //      D.f[BNW ] = &DD[TSE *size_Mat];
    //   }
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //   //Test
-   //   //(D.f[dirZERO])[k]=c1o10;
+   //   //(D.f[REST])[k]=c1o10;
    //   ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 	  ////ToDo anders Klammern
@@ -304,208 +303,208 @@ extern "C" __global__ void WallFunction27(int inx,
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c2over27* (drho/*+three*( vx1        )*/+c9over2*( vx1        )*( vx1        ) * (one + drho)-cu_sq); 
-   //      (D.f[dirW])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);// - c2over27 * drho;
-   //      //(D.f[dirW])[kw]=zero;
+   //      (D.f[W])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX     ))/(one+q);// - c2over27 * drho;
+   //      //(D.f[W])[kw]=zero;
    //   }
 
    //   q = q_dirW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c2over27* (drho/*+three*(-vx1        )*/+c9over2*(-vx1        )*(-vx1        ) * (one + drho)-cu_sq); 
-   //      (D.f[dirE])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);// - c2over27 * drho;
-   //      //(D.f[dirE])[ke]=zero;
+   //      (D.f[E])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX     ))/(one+q);// - c2over27 * drho;
+   //      //(D.f[E])[ke]=zero;
    //   }
 
    //   q = q_dirN[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c2over27* (drho/*+three*(    vx2     )*/+c9over2*(     vx2    )*(     vx2    ) * (one + drho)-cu_sq); 
-   //      (D.f[dirS])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);// - c2over27 * drho;
-   //      //(D.f[dirS])[ks]=zero;
+   //      (D.f[S])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY     ))/(one+q);// - c2over27 * drho;
+   //      //(D.f[S])[ks]=zero;
    //   }
 
    //   q = q_dirS[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c2over27* (drho/*+three*(   -vx2     )*/+c9over2*(    -vx2    )*(    -vx2    ) * (one + drho)-cu_sq); 
-   //      (D.f[dirN])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);// - c2over27 * drho;
-   //      //(D.f[dirN])[kn]=zero;
+   //      (D.f[N])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY     ))/(one+q);// - c2over27 * drho;
+   //      //(D.f[N])[kn]=zero;
    //   }
 
    //   q = q_dirT[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c2over27* (drho/*+three*(         vx3)*/+c9over2*(         vx3)*(         vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirB])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);// - c2over27 * drho;
-   //      //(D.f[dirB])[kb]=one;
+   //      (D.f[B])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ     ))/(one+q);// - c2over27 * drho;
+   //      //(D.f[B])[kb]=one;
    //   }
 
    //   q = q_dirB[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c2over27* (drho/*+three*(        -vx3)*/+c9over2*(        -vx3)*(        -vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirT])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);// - c2over27 * drho;
-   //      //(D.f[dirT])[kt]=zero;
+   //      (D.f[T])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ     ))/(one+q);// - c2over27 * drho;
+   //      //(D.f[T])[kt]=zero;
    //   }
 
    //   q = q_dirNE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*( vx1+vx2    )*/+c9over2*( vx1+vx2    )*( vx1+vx2    ) * (one + drho)-cu_sq); 
-   //      (D.f[dirSW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirSW])[ksw]=zero;
+   //      (D.f[SW])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);// - c1over54 * drho;
+   //      //(D.f[SW])[ksw]=zero;
    //   }
 
    //   q = q_dirSW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(-vx1-vx2    )*/+c9over2*(-vx1-vx2    )*(-vx1-vx2    ) * (one + drho)-cu_sq); 
-   //      (D.f[dirNE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirNE])[kne]=zero;
+   //      (D.f[NE])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);// - c1over54 * drho;
+   //      //(D.f[NE])[kne]=zero;
    //   }
 
    //   q = q_dirSE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*( vx1-vx2    )*/+c9over2*( vx1-vx2    )*( vx1-vx2    ) * (one + drho)-cu_sq); 
-   //      (D.f[dirNW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirNW])[knw]=zero;
+   //      (D.f[NW])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);// - c1over54 * drho;
+   //      //(D.f[NW])[knw]=zero;
    //   }
 
    //   q = q_dirNW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(-vx1+vx2    )*/+c9over2*(-vx1+vx2    )*(-vx1+vx2    ) * (one + drho)-cu_sq); 
-   //      (D.f[dirSE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirSE])[kse]=zero;
+   //      (D.f[SE])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);// - c1over54 * drho;
+   //      //(D.f[SE])[kse]=zero;
    //   }
 
    //   q = q_dirTE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*( vx1    +vx3)*/+c9over2*( vx1    +vx3)*( vx1    +vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirBW])[kbw]=zero;
+   //      (D.f[BW])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[BW])[kbw]=zero;
    //   }
 
    //   q = q_dirBW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(-vx1    -vx3)*/+c9over2*(-vx1    -vx3)*(-vx1    -vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirTE])[kte]=zero;
+   //      (D.f[TE])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[TE])[kte]=zero;
    //   }
 
    //   q = q_dirBE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*( vx1    -vx3)*/+c9over2*( vx1    -vx3)*( vx1    -vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirTW])[ktw]=zero;
+   //      (D.f[TW])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[TW])[ktw]=zero;
    //   }
 
    //   q = q_dirTW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(-vx1    +vx3)*/+c9over2*(-vx1    +vx3)*(-vx1    +vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirBE])[kbe]=zero;
+   //      (D.f[BE])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[BE])[kbe]=zero;
    //   }
 
    //   q = q_dirTN[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(     vx2+vx3)*/+c9over2*(     vx2+vx3)*(     vx2+vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirBS])[kbs]=zero;
+   //      (D.f[BS])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[BS])[kbs]=zero;
    //   }
 
    //   q = q_dirBS[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(    -vx2-vx3)*/+c9over2*(    -vx2-vx3)*(    -vx2-vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirTN])[ktn]=zero;
+   //      (D.f[TN])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[TN])[ktn]=zero;
    //   }
 
    //   q = q_dirBN[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(     vx2-vx3)*/+c9over2*(     vx2-vx3)*(     vx2-vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirTS])[kts]=zero;
+   //      (D.f[TS])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[TS])[kts]=zero;
    //   }
 
    //   q = q_dirTS[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over54* (drho/*+three*(    -vx2+vx3)*/+c9over2*(    -vx2+vx3)*(    -vx2+vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);// - c1over54 * drho;
-   //      //(D.f[dirBN])[kbn]=zero;
+   //      (D.f[BN])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);// - c1over54 * drho;
+   //      //(D.f[BN])[kbn]=zero;
    //   }
 
    //   q = q_dirTNE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*( vx1+vx2+vx3)*/+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirBSW])[kbsw]=zero;
+   //      (D.f[BSW])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[BSW])[kbsw]=zero;
    //   }
 
    //   q = q_dirBSW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*(-vx1-vx2-vx3)*/+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirTNE])[ktne]=zero;
+   //      (D.f[TNE])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[TNE])[ktne]=zero;
    //   }
 
    //   q = q_dirBNE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*( vx1+vx2-vx3)*/+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirTSW])[ktsw]=zero;
+   //      (D.f[TSW])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[TSW])[ktsw]=zero;
    //   }
 
    //   q = q_dirTSW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*(-vx1-vx2+vx3)*/+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirBNE])[kbne]=zero;
+   //      (D.f[BNE])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[BNE])[kbne]=zero;
    //   }
 
    //   q = q_dirTSE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*( vx1-vx2+vx3)*/+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirBNW])[kbnw]=zero;
+   //      (D.f[BNW])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[BNW])[kbnw]=zero;
    //   }
 
    //   q = q_dirBNW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*(-vx1+vx2-vx3)*/+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirTSE])[ktse]=zero;
+   //      (D.f[TSE])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[TSE])[ktse]=zero;
    //   }
 
    //   q = q_dirBSE[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*( vx1-vx2-vx3)*/+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirTNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirTNW])[ktnw]=zero;
+   //      (D.f[TNW])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[TNW])[ktnw]=zero;
    //   }
 
    //   q = q_dirTNW[k];
    //   if (q>=zero && q<=one)
    //   {
    //      feq=c1over216*(drho/*+three*(-vx1+vx2+vx3)*/+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (one + drho)-cu_sq); 
-   //      (D.f[dirBSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho;
-   //      //(D.f[dirBSE])[kbse]=zero;
+   //      (D.f[BSE])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho;
+   //      //(D.f[BSE])[kbse]=zero;
    //   }
    }
 }
diff --git a/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp b/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp
index 3ddc257812c556ef6b7d8103cf42e69c8195d044..e0a32643a84e24f99affd55eb32a71efadd17056 100644
--- a/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp
+++ b/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp
@@ -3,7 +3,7 @@
 #include "Parameter/Parameter.h"
 
 #include <basics/utilities/UbFileInputASCII.h>
-
+using namespace vf::lbm::dir;
 
 //////////////////////////////////////////////////////////////////////////
 void PositionReader::readFilePropellerCylinderForAlloc(Parameter* para)
@@ -20,7 +20,7 @@ void PositionReader::readFilePropellerCylinderForAlloc(Parameter* para)
 		in.readLine();
 		if (level == para->getFine())
 		{
-			for(int u=0; u<para->getParH(level)->propellerBC.numberOfBCnodes; u++)
+			for(uint u=0; u<para->getParH(level)->propellerBC.numberOfBCnodes; u++)
 			{
 				test = in.readInteger();
 				if (para->getParH(level)->typeOfGridNode[test] == GEO_FLUID)
@@ -55,7 +55,7 @@ void PositionReader::readFilePropellerCylinderForAlloc(Parameter* para)
 		}
 		else
 		{
-			for(int u=0; u<para->getParH(level)->propellerBC.numberOfBCnodes; u++)
+			for(uint u=0; u<para->getParH(level)->propellerBC.numberOfBCnodes; u++)
 			{
 				in.readInteger();
 				in.readDouble();
@@ -139,41 +139,41 @@ void PositionReader::definePropellerQs(Parameter* para)
 	real* QQ                  = para->getParH(para->getFine())->propellerBC.q27[0]; 
 	unsigned int sizeQ           = para->getParH(para->getFine())->propellerBC.numberOfBCnodes; 
 	QforBoundaryConditions Q;
-	Q.q27[dirE   ] = &QQ[dirE   *sizeQ];
-	Q.q27[dirW   ] = &QQ[dirW   *sizeQ];
-	Q.q27[dirN   ] = &QQ[dirN   *sizeQ];
-	Q.q27[dirS   ] = &QQ[dirS   *sizeQ];
-	Q.q27[dirT   ] = &QQ[dirT   *sizeQ];
-	Q.q27[dirB   ] = &QQ[dirB   *sizeQ];
-	Q.q27[dirNE  ] = &QQ[dirNE  *sizeQ];
-	Q.q27[dirSW  ] = &QQ[dirSW  *sizeQ];
-	Q.q27[dirSE  ] = &QQ[dirSE  *sizeQ];
-	Q.q27[dirNW  ] = &QQ[dirNW  *sizeQ];
-	Q.q27[dirTE  ] = &QQ[dirTE  *sizeQ];
-	Q.q27[dirBW  ] = &QQ[dirBW  *sizeQ];
-	Q.q27[dirBE  ] = &QQ[dirBE  *sizeQ];
-	Q.q27[dirTW  ] = &QQ[dirTW  *sizeQ];
-	Q.q27[dirTN  ] = &QQ[dirTN  *sizeQ];
-	Q.q27[dirBS  ] = &QQ[dirBS  *sizeQ];
-	Q.q27[dirBN  ] = &QQ[dirBN  *sizeQ];
-	Q.q27[dirTS  ] = &QQ[dirTS  *sizeQ];
-	Q.q27[dirZERO] = &QQ[dirZERO*sizeQ];
-	Q.q27[dirTNE ] = &QQ[dirTNE *sizeQ];
-	Q.q27[dirTSW ] = &QQ[dirTSW *sizeQ];
-	Q.q27[dirTSE ] = &QQ[dirTSE *sizeQ];
-	Q.q27[dirTNW ] = &QQ[dirTNW *sizeQ];
-	Q.q27[dirBNE ] = &QQ[dirBNE *sizeQ];
-	Q.q27[dirBSW ] = &QQ[dirBSW *sizeQ];
-	Q.q27[dirBSE ] = &QQ[dirBSE *sizeQ];
-	Q.q27[dirBNW ] = &QQ[dirBNW *sizeQ];
+	Q.q27[E   ] = &QQ[E   *sizeQ];
+	Q.q27[W   ] = &QQ[W   *sizeQ];
+	Q.q27[N   ] = &QQ[N   *sizeQ];
+	Q.q27[S   ] = &QQ[S   *sizeQ];
+	Q.q27[T   ] = &QQ[T   *sizeQ];
+	Q.q27[B   ] = &QQ[B   *sizeQ];
+	Q.q27[NE  ] = &QQ[NE  *sizeQ];
+	Q.q27[SW  ] = &QQ[SW  *sizeQ];
+	Q.q27[SE  ] = &QQ[SE  *sizeQ];
+	Q.q27[NW  ] = &QQ[NW  *sizeQ];
+	Q.q27[TE  ] = &QQ[TE  *sizeQ];
+	Q.q27[BW  ] = &QQ[BW  *sizeQ];
+	Q.q27[BE  ] = &QQ[BE  *sizeQ];
+	Q.q27[TW  ] = &QQ[TW  *sizeQ];
+	Q.q27[TN  ] = &QQ[TN  *sizeQ];
+	Q.q27[BS  ] = &QQ[BS  *sizeQ];
+	Q.q27[BN  ] = &QQ[BN  *sizeQ];
+	Q.q27[TS  ] = &QQ[TS  *sizeQ];
+	Q.q27[REST] = &QQ[REST*sizeQ];
+	Q.q27[TNE ] = &QQ[TNE *sizeQ];
+	Q.q27[TSW ] = &QQ[TSW *sizeQ];
+	Q.q27[TSE ] = &QQ[TSE *sizeQ];
+	Q.q27[TNW ] = &QQ[TNW *sizeQ];
+	Q.q27[BNE ] = &QQ[BNE *sizeQ];
+	Q.q27[BSW ] = &QQ[BSW *sizeQ];
+	Q.q27[BSE ] = &QQ[BSE *sizeQ];
+	Q.q27[BNW ] = &QQ[BNW *sizeQ];
 	//////////////////////////////////////////////////////////////////
-	for(int u=0; u<para->getParH(para->getFine())->propellerBC.numberOfBCnodes; u++)
+	for(uint u=0; u<para->getParH(para->getFine())->propellerBC.numberOfBCnodes; u++)
 	{
-		for (int dir = dirE; dir<=dirBSW; dir++)
+		for (int dir = E; dir<=BSW; dir++)
 		{
-			if ((dir==dirE)  || 
-				(dir==dirNE) || (dir==dirSE) || (dir==dirTE) || (dir==dirBE) ||
-				(dir==dirTNE)|| (dir==dirBNE)|| (dir==dirTSE)|| (dir==dirBSE))
+			if ((dir==E)  || 
+				(dir==NE) || (dir==SE) || (dir==TE) || (dir==BE) ||
+				(dir==TNE)|| (dir==BNE)|| (dir==TSE)|| (dir==BSE))
 			{
 				Q.q27[dir][u] = 1.0f;
 			} 
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu
index 3ad149064a7f7a52a514f66066d179897591eb7f..3ccba979c6393365d32209a8d7d82c0ffd7dce56 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
@@ -37,125 +38,125 @@ extern "C" __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions27 D27;
 			if (EvenOrOdd == true)
 			{
-				D27.f[dirE] = &DD27[dirE   *size_Mat];
-				D27.f[dirW] = &DD27[dirW   *size_Mat];
-				D27.f[dirN] = &DD27[dirN   *size_Mat];
-				D27.f[dirS] = &DD27[dirS   *size_Mat];
-				D27.f[dirT] = &DD27[dirT   *size_Mat];
-				D27.f[dirB] = &DD27[dirB   *size_Mat];
-				D27.f[dirNE] = &DD27[dirNE  *size_Mat];
-				D27.f[dirSW] = &DD27[dirSW  *size_Mat];
-				D27.f[dirSE] = &DD27[dirSE  *size_Mat];
-				D27.f[dirNW] = &DD27[dirNW  *size_Mat];
-				D27.f[dirTE] = &DD27[dirTE  *size_Mat];
-				D27.f[dirBW] = &DD27[dirBW  *size_Mat];
-				D27.f[dirBE] = &DD27[dirBE  *size_Mat];
-				D27.f[dirTW] = &DD27[dirTW  *size_Mat];
-				D27.f[dirTN] = &DD27[dirTN  *size_Mat];
-				D27.f[dirBS] = &DD27[dirBS  *size_Mat];
-				D27.f[dirBN] = &DD27[dirBN  *size_Mat];
-				D27.f[dirTS] = &DD27[dirTS  *size_Mat];
-				D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-				D27.f[dirTNE] = &DD27[dirTNE *size_Mat];
-				D27.f[dirTSW] = &DD27[dirTSW *size_Mat];
-				D27.f[dirTSE] = &DD27[dirTSE *size_Mat];
-				D27.f[dirTNW] = &DD27[dirTNW *size_Mat];
-				D27.f[dirBNE] = &DD27[dirBNE *size_Mat];
-				D27.f[dirBSW] = &DD27[dirBSW *size_Mat];
-				D27.f[dirBSE] = &DD27[dirBSE *size_Mat];
-				D27.f[dirBNW] = &DD27[dirBNW *size_Mat];
+				D27.f[E] = &DD27[E   *size_Mat];
+				D27.f[W] = &DD27[W   *size_Mat];
+				D27.f[N] = &DD27[N   *size_Mat];
+				D27.f[S] = &DD27[S   *size_Mat];
+				D27.f[T] = &DD27[T   *size_Mat];
+				D27.f[B] = &DD27[B   *size_Mat];
+				D27.f[NE] = &DD27[NE  *size_Mat];
+				D27.f[SW] = &DD27[SW  *size_Mat];
+				D27.f[SE] = &DD27[SE  *size_Mat];
+				D27.f[NW] = &DD27[NW  *size_Mat];
+				D27.f[TE] = &DD27[TE  *size_Mat];
+				D27.f[BW] = &DD27[BW  *size_Mat];
+				D27.f[BE] = &DD27[BE  *size_Mat];
+				D27.f[TW] = &DD27[TW  *size_Mat];
+				D27.f[TN] = &DD27[TN  *size_Mat];
+				D27.f[BS] = &DD27[BS  *size_Mat];
+				D27.f[BN] = &DD27[BN  *size_Mat];
+				D27.f[TS] = &DD27[TS  *size_Mat];
+				D27.f[REST] = &DD27[REST*size_Mat];
+				D27.f[TNE] = &DD27[TNE *size_Mat];
+				D27.f[TSW] = &DD27[TSW *size_Mat];
+				D27.f[TSE] = &DD27[TSE *size_Mat];
+				D27.f[TNW] = &DD27[TNW *size_Mat];
+				D27.f[BNE] = &DD27[BNE *size_Mat];
+				D27.f[BSW] = &DD27[BSW *size_Mat];
+				D27.f[BSE] = &DD27[BSE *size_Mat];
+				D27.f[BNW] = &DD27[BNW *size_Mat];
 			}
 			else
 			{
-				D27.f[dirW] = &DD27[dirE   *size_Mat];
-				D27.f[dirE] = &DD27[dirW   *size_Mat];
-				D27.f[dirS] = &DD27[dirN   *size_Mat];
-				D27.f[dirN] = &DD27[dirS   *size_Mat];
-				D27.f[dirB] = &DD27[dirT   *size_Mat];
-				D27.f[dirT] = &DD27[dirB   *size_Mat];
-				D27.f[dirSW] = &DD27[dirNE  *size_Mat];
-				D27.f[dirNE] = &DD27[dirSW  *size_Mat];
-				D27.f[dirNW] = &DD27[dirSE  *size_Mat];
-				D27.f[dirSE] = &DD27[dirNW  *size_Mat];
-				D27.f[dirBW] = &DD27[dirTE  *size_Mat];
-				D27.f[dirTE] = &DD27[dirBW  *size_Mat];
-				D27.f[dirTW] = &DD27[dirBE  *size_Mat];
-				D27.f[dirBE] = &DD27[dirTW  *size_Mat];
-				D27.f[dirBS] = &DD27[dirTN  *size_Mat];
-				D27.f[dirTN] = &DD27[dirBS  *size_Mat];
-				D27.f[dirTS] = &DD27[dirBN  *size_Mat];
-				D27.f[dirBN] = &DD27[dirTS  *size_Mat];
-				D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-				D27.f[dirBSW] = &DD27[dirTNE *size_Mat];
-				D27.f[dirBNE] = &DD27[dirTSW *size_Mat];
-				D27.f[dirBNW] = &DD27[dirTSE *size_Mat];
-				D27.f[dirBSE] = &DD27[dirTNW *size_Mat];
-				D27.f[dirTSW] = &DD27[dirBNE *size_Mat];
-				D27.f[dirTNE] = &DD27[dirBSW *size_Mat];
-				D27.f[dirTNW] = &DD27[dirBSE *size_Mat];
-				D27.f[dirTSE] = &DD27[dirBNW *size_Mat];
+				D27.f[W] = &DD27[E   *size_Mat];
+				D27.f[E] = &DD27[W   *size_Mat];
+				D27.f[S] = &DD27[N   *size_Mat];
+				D27.f[N] = &DD27[S   *size_Mat];
+				D27.f[B] = &DD27[T   *size_Mat];
+				D27.f[T] = &DD27[B   *size_Mat];
+				D27.f[SW] = &DD27[NE  *size_Mat];
+				D27.f[NE] = &DD27[SW  *size_Mat];
+				D27.f[NW] = &DD27[SE  *size_Mat];
+				D27.f[SE] = &DD27[NW  *size_Mat];
+				D27.f[BW] = &DD27[TE  *size_Mat];
+				D27.f[TE] = &DD27[BW  *size_Mat];
+				D27.f[TW] = &DD27[BE  *size_Mat];
+				D27.f[BE] = &DD27[TW  *size_Mat];
+				D27.f[BS] = &DD27[TN  *size_Mat];
+				D27.f[TN] = &DD27[BS  *size_Mat];
+				D27.f[TS] = &DD27[BN  *size_Mat];
+				D27.f[BN] = &DD27[TS  *size_Mat];
+				D27.f[REST] = &DD27[REST*size_Mat];
+				D27.f[BSW] = &DD27[TNE *size_Mat];
+				D27.f[BNE] = &DD27[TSW *size_Mat];
+				D27.f[BNW] = &DD27[TSE *size_Mat];
+				D27.f[BSE] = &DD27[TNW *size_Mat];
+				D27.f[TSW] = &DD27[BNE *size_Mat];
+				D27.f[TNE] = &DD27[BSW *size_Mat];
+				D27.f[TNW] = &DD27[BSE *size_Mat];
+				D27.f[TSE] = &DD27[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -168,61 +169,61 @@ extern "C" __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[dirE])[k];//ke
-			real fE = (D.f[dirW])[kw];
-			real fS = (D.f[dirN])[k];//kn
-			real fN = (D.f[dirS])[ks];
-			real fB = (D.f[dirT])[k];//kt
-			real fT = (D.f[dirB])[kb];
-			real fSW = (D.f[dirNE])[k];//kne
-			real fNE = (D.f[dirSW])[ksw];
-			real fNW = (D.f[dirSE])[ks];//kse
-			real fSE = (D.f[dirNW])[kw];//knw
-			real fBW = (D.f[dirTE])[k];//kte
-			real fTE = (D.f[dirBW])[kbw];
-			real fTW = (D.f[dirBE])[kb];//kbe
-			real fBE = (D.f[dirTW])[kw];//ktw
-			real fBS = (D.f[dirTN])[k];//ktn
-			real fTN = (D.f[dirBS])[kbs];
-			real fTS = (D.f[dirBN])[kb];//kbn
-			real fBN = (D.f[dirTS])[ks];//kts
-			real fZERO = (D.f[dirZERO])[k];//kzero
-			real fBSW = (D.f[dirTNE])[k];//ktne
-			real fBNE = (D.f[dirTSW])[ksw];//ktsw
-			real fBNW = (D.f[dirTSE])[ks];//ktse
-			real fBSE = (D.f[dirTNW])[kw];//ktnw
-			real fTSW = (D.f[dirBNE])[kb];//kbne
-			real fTNE = (D.f[dirBSW])[kbsw];
-			real fTNW = (D.f[dirBSE])[kbs];//kbse
-			real fTSE = (D.f[dirBNW])[kbw];//kbnw
+			real fW = (D.f[E])[k];//ke
+			real fE = (D.f[W])[kw];
+			real fS = (D.f[N])[k];//kn
+			real fN = (D.f[S])[ks];
+			real fB = (D.f[T])[k];//kt
+			real fT = (D.f[B])[kb];
+			real fSW = (D.f[NE])[k];//kne
+			real fNE = (D.f[SW])[ksw];
+			real fNW = (D.f[SE])[ks];//kse
+			real fSE = (D.f[NW])[kw];//knw
+			real fBW = (D.f[TE])[k];//kte
+			real fTE = (D.f[BW])[kbw];
+			real fTW = (D.f[BE])[kb];//kbe
+			real fBE = (D.f[TW])[kw];//ktw
+			real fBS = (D.f[TN])[k];//ktn
+			real fTN = (D.f[BS])[kbs];
+			real fTS = (D.f[BN])[kb];//kbn
+			real fBN = (D.f[TS])[ks];//kts
+			real fZERO = (D.f[REST])[k];//kzero
+			real fBSW = (D.f[TNE])[k];//ktne
+			real fBNE = (D.f[TSW])[ksw];//ktsw
+			real fBNW = (D.f[TSE])[ks];//ktse
+			real fBSE = (D.f[TNW])[kw];//ktnw
+			real fTSW = (D.f[BNE])[kb];//kbne
+			real fTNE = (D.f[BSW])[kbsw];
+			real fTNW = (D.f[BSE])[kbs];//kbse
+			real fTSE = (D.f[BNW])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D27.f[dirE])[k];
-			real mfabb = (D27.f[dirW])[kw];
-			real mfbcb = (D27.f[dirN])[k];
-			real mfbab = (D27.f[dirS])[ks];
-			real mfbbc = (D27.f[dirT])[k];
-			real mfbba = (D27.f[dirB])[kb];
-			real mfccb = (D27.f[dirNE])[k];
-			real mfaab = (D27.f[dirSW])[ksw];
-			real mfcab = (D27.f[dirSE])[ks];
-			real mfacb = (D27.f[dirNW])[kw];
-			real mfcbc = (D27.f[dirTE])[k];
-			real mfaba = (D27.f[dirBW])[kbw];
-			real mfcba = (D27.f[dirBE])[kb];
-			real mfabc = (D27.f[dirTW])[kw];
-			real mfbcc = (D27.f[dirTN])[k];
-			real mfbaa = (D27.f[dirBS])[kbs];
-			real mfbca = (D27.f[dirBN])[kb];
-			real mfbac = (D27.f[dirTS])[ks];
-			real mfbbb = (D27.f[dirZERO])[k];
-			real mfccc = (D27.f[dirTNE])[k];
-			real mfaac = (D27.f[dirTSW])[ksw];
-			real mfcac = (D27.f[dirTSE])[ks];
-			real mfacc = (D27.f[dirTNW])[kw];
-			real mfcca = (D27.f[dirBNE])[kb];
-			real mfaaa = (D27.f[dirBSW])[kbsw];
-			real mfcaa = (D27.f[dirBSE])[kbs];
-			real mfaca = (D27.f[dirBNW])[kbw];
+			real mfcbb = (D27.f[E])[k];
+			real mfabb = (D27.f[W])[kw];
+			real mfbcb = (D27.f[N])[k];
+			real mfbab = (D27.f[S])[ks];
+			real mfbbc = (D27.f[T])[k];
+			real mfbba = (D27.f[B])[kb];
+			real mfccb = (D27.f[NE])[k];
+			real mfaab = (D27.f[SW])[ksw];
+			real mfcab = (D27.f[SE])[ks];
+			real mfacb = (D27.f[NW])[kw];
+			real mfcbc = (D27.f[TE])[k];
+			real mfaba = (D27.f[BW])[kbw];
+			real mfcba = (D27.f[BE])[kb];
+			real mfabc = (D27.f[TW])[kw];
+			real mfbcc = (D27.f[TN])[k];
+			real mfbaa = (D27.f[BS])[kbs];
+			real mfbca = (D27.f[BN])[kb];
+			real mfbac = (D27.f[TS])[ks];
+			real mfbbb = (D27.f[REST])[k];
+			real mfccc = (D27.f[TNE])[k];
+			real mfaac = (D27.f[TSW])[ksw];
+			real mfcac = (D27.f[TSE])[ks];
+			real mfacc = (D27.f[TNW])[kw];
+			real mfcca = (D27.f[BNE])[kb];
+			real mfaaa = (D27.f[BSW])[kbsw];
+			real mfcaa = (D27.f[BSE])[kbs];
+			real mfaca = (D27.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			//Conc
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -772,33 +773,33 @@ extern "C" __global__ void LB_KERNEL_AD_COMP_27(real diffusivity,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D27.f[dirE])[k] = mfabb;
-			(D27.f[dirW])[kw] = mfcbb;
-			(D27.f[dirN])[k] = mfbab;
-			(D27.f[dirS])[ks] = mfbcb;
-			(D27.f[dirT])[k] = mfbba;
-			(D27.f[dirB])[kb] = mfbbc;
-			(D27.f[dirNE])[k] = mfaab;
-			(D27.f[dirSW])[ksw] = mfccb;
-			(D27.f[dirSE])[ks] = mfacb;
-			(D27.f[dirNW])[kw] = mfcab;
-			(D27.f[dirTE])[k] = mfaba;
-			(D27.f[dirBW])[kbw] = mfcbc;
-			(D27.f[dirBE])[kb] = mfabc;
-			(D27.f[dirTW])[kw] = mfcba;
-			(D27.f[dirTN])[k] = mfbaa;
-			(D27.f[dirBS])[kbs] = mfbcc;
-			(D27.f[dirBN])[kb] = mfbac;
-			(D27.f[dirTS])[ks] = mfbca;
-			(D27.f[dirZERO])[k] = mfbbb;
-			(D27.f[dirTNE])[k] = mfaaa;
-			(D27.f[dirTSE])[ks] = mfaca;
-			(D27.f[dirBNE])[kb] = mfaac;
-			(D27.f[dirBSE])[kbs] = mfacc;
-			(D27.f[dirTNW])[kw] = mfcaa;
-			(D27.f[dirTSW])[ksw] = mfcca;
-			(D27.f[dirBNW])[kbw] = mfcac;
-			(D27.f[dirBSW])[kbsw] = mfccc;
+			(D27.f[E])[k] = mfabb;
+			(D27.f[W])[kw] = mfcbb;
+			(D27.f[N])[k] = mfbab;
+			(D27.f[S])[ks] = mfbcb;
+			(D27.f[T])[k] = mfbba;
+			(D27.f[B])[kb] = mfbbc;
+			(D27.f[NE])[k] = mfaab;
+			(D27.f[SW])[ksw] = mfccb;
+			(D27.f[SE])[ks] = mfacb;
+			(D27.f[NW])[kw] = mfcab;
+			(D27.f[TE])[k] = mfaba;
+			(D27.f[BW])[kbw] = mfcbc;
+			(D27.f[BE])[kb] = mfabc;
+			(D27.f[TW])[kw] = mfcba;
+			(D27.f[TN])[k] = mfbaa;
+			(D27.f[BS])[kbs] = mfbcc;
+			(D27.f[BN])[kb] = mfbac;
+			(D27.f[TS])[ks] = mfbca;
+			(D27.f[REST])[k] = mfbbb;
+			(D27.f[TNE])[k] = mfaaa;
+			(D27.f[TSE])[ks] = mfaca;
+			(D27.f[BNE])[kb] = mfaac;
+			(D27.f[BSE])[kbs] = mfacc;
+			(D27.f[TNW])[kw] = mfcaa;
+			(D27.f[TSW])[ksw] = mfcca;
+			(D27.f[BNW])[kbw] = mfcac;
+			(D27.f[BSW])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu
index d5de82af54673e4e50af7c5639759ac9f1b105a0..561ea4924be31c0ac8b6da822a8720336b163210 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu
@@ -1,8 +1,10 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
+
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_AD_Comp_7(real diffusivity,
@@ -37,63 +39,63 @@ extern "C" __global__ void LB_Kernel_AD_Comp_7(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions7 D7;
@@ -128,60 +130,60 @@ extern "C" __global__ void LB_Kernel_AD_Comp_7(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[dirE])[k];//ke
-			real fE = (D.f[dirW])[kw];
-			real fS = (D.f[dirN])[k];//kn
-			real fN = (D.f[dirS])[ks];
-			real fB = (D.f[dirT])[k];//kt
-			real fT = (D.f[dirB])[kb];
-			real fSW = (D.f[dirNE])[k];//kne
-			real fNE = (D.f[dirSW])[ksw];
-			real fNW = (D.f[dirSE])[ks];//kse
-			real fSE = (D.f[dirNW])[kw];//knw
-			real fBW = (D.f[dirTE])[k];//kte
-			real fTE = (D.f[dirBW])[kbw];
-			real fTW = (D.f[dirBE])[kb];//kbe
-			real fBE = (D.f[dirTW])[kw];//ktw
-			real fBS = (D.f[dirTN])[k];//ktn
-			real fTN = (D.f[dirBS])[kbs];
-			real fTS = (D.f[dirBN])[kb];//kbn
-			real fBN = (D.f[dirTS])[ks];//kts
-			real fZERO = (D.f[dirZERO])[k];//kzero
-			real fBSW = (D.f[dirTNE])[k];//ktne
-			real fBNE = (D.f[dirTSW])[ksw];//ktsw
-			real fBNW = (D.f[dirTSE])[ks];//ktse
-			real fBSE = (D.f[dirTNW])[kw];//ktnw
-			real fTSW = (D.f[dirBNE])[kb];//kbne
-			real fTNE = (D.f[dirBSW])[kbsw];
-			real fTNW = (D.f[dirBSE])[kbs];//kbse
-			real fTSE = (D.f[dirBNW])[kbw];//kbnw
-										   //real fE    =  (D.f[dirE   ])[k  ];//ke
-										   //real fW    =  (D.f[dirW   ])[kw ];
-										   //real fN    =  (D.f[dirN   ])[k  ];//kn
-										   //real fS    =  (D.f[dirS   ])[ks ];
-										   //real fT    =  (D.f[dirT   ])[k  ];//kt
-										   //real fB    =  (D.f[dirB   ])[kb ];
-										   //real fNE   =  (D.f[dirNE  ])[k  ];//kne
-										   //real fSW   =  (D.f[dirSW  ])[ksw];
-										   //real fSE   =  (D.f[dirSE  ])[ks ];//kse
-										   //real fNW   =  (D.f[dirNW  ])[kw ];//knw
-										   //real fTE   =  (D.f[dirTE  ])[k  ];//kte
-										   //real fBW   =  (D.f[dirBW  ])[kbw];
-										   //real fBE   =  (D.f[dirBE  ])[kb ];//kbe
-										   //real fTW   =  (D.f[dirTW  ])[kw ];//ktw
-										   //real fTN   =  (D.f[dirTN  ])[k  ];//ktn
-										   //real fBS   =  (D.f[dirBS  ])[kbs];
-										   //real fBN   =  (D.f[dirBN  ])[kb ];//kbn
-										   //real fTS   =  (D.f[dirTS  ])[ks ];//kts
-										   //real fZERO =  (D.f[dirZERO])[k  ];//kzero
-										   //real fTNE   = (D.f[dirTNE ])[k  ];//ktne
-										   //real fTSW   = (D.f[dirTSW ])[ksw];//ktsw
-										   //real fTSE   = (D.f[dirTSE ])[ks ];//ktse
-										   //real fTNW   = (D.f[dirTNW ])[kw ];//ktnw
-										   //real fBNE   = (D.f[dirBNE ])[kb ];//kbne
-										   //real fBSW   = (D.f[dirBSW ])[kbsw];
-										   //real fBSE   = (D.f[dirBSE ])[kbs];//kbse
-										   //real fBNW   = (D.f[dirBNW ])[kbw];//kbnw
+			real fW = (D.f[E])[k];//ke
+			real fE = (D.f[W])[kw];
+			real fS = (D.f[N])[k];//kn
+			real fN = (D.f[S])[ks];
+			real fB = (D.f[T])[k];//kt
+			real fT = (D.f[B])[kb];
+			real fSW = (D.f[NE])[k];//kne
+			real fNE = (D.f[SW])[ksw];
+			real fNW = (D.f[SE])[ks];//kse
+			real fSE = (D.f[NW])[kw];//knw
+			real fBW = (D.f[TE])[k];//kte
+			real fTE = (D.f[BW])[kbw];
+			real fTW = (D.f[BE])[kb];//kbe
+			real fBE = (D.f[TW])[kw];//ktw
+			real fBS = (D.f[TN])[k];//ktn
+			real fTN = (D.f[BS])[kbs];
+			real fTS = (D.f[BN])[kb];//kbn
+			real fBN = (D.f[TS])[ks];//kts
+			real fZERO = (D.f[REST])[k];//kzero
+			real fBSW = (D.f[TNE])[k];//ktne
+			real fBNE = (D.f[TSW])[ksw];//ktsw
+			real fBNW = (D.f[TSE])[ks];//ktse
+			real fBSE = (D.f[TNW])[kw];//ktnw
+			real fTSW = (D.f[BNE])[kb];//kbne
+			real fTNE = (D.f[BSW])[kbsw];
+			real fTNW = (D.f[BSE])[kbs];//kbse
+			real fTSE = (D.f[BNW])[kbw];//kbnw
+										   //real fE    =  (D.f[E   ])[k  ];//ke
+										   //real fW    =  (D.f[W   ])[kw ];
+										   //real fN    =  (D.f[N   ])[k  ];//kn
+										   //real fS    =  (D.f[S   ])[ks ];
+										   //real fT    =  (D.f[T   ])[k  ];//kt
+										   //real fB    =  (D.f[B   ])[kb ];
+										   //real fNE   =  (D.f[NE  ])[k  ];//kne
+										   //real fSW   =  (D.f[SW  ])[ksw];
+										   //real fSE   =  (D.f[SE  ])[ks ];//kse
+										   //real fNW   =  (D.f[NW  ])[kw ];//knw
+										   //real fTE   =  (D.f[TE  ])[k  ];//kte
+										   //real fBW   =  (D.f[BW  ])[kbw];
+										   //real fBE   =  (D.f[BE  ])[kb ];//kbe
+										   //real fTW   =  (D.f[TW  ])[kw ];//ktw
+										   //real fTN   =  (D.f[TN  ])[k  ];//ktn
+										   //real fBS   =  (D.f[BS  ])[kbs];
+										   //real fBN   =  (D.f[BN  ])[kb ];//kbn
+										   //real fTS   =  (D.f[TS  ])[ks ];//kts
+										   //real fZERO =  (D.f[REST])[k  ];//kzero
+										   //real fTNE   = (D.f[TNE ])[k  ];//ktne
+										   //real fTSW   = (D.f[TSW ])[ksw];//ktsw
+										   //real fTSE   = (D.f[TSE ])[ks ];//ktse
+										   //real fTNW   = (D.f[TNW ])[kw ];//ktnw
+										   //real fBNE   = (D.f[BNE ])[kb ];//kbne
+										   //real fBSW   = (D.f[BSW ])[kbsw];
+										   //real fBSE   = (D.f[BSE ])[kbs];//kbse
+										   //real fBNW   = (D.f[BNW ])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
 			real f7ZERO = (D7.f[0])[k];
 			real f7E = (D7.f[1])[k];
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu
index d9586b2eb599c451226482c1d3502104ad864d8f..f64b5f7681680f4c3b396964409a6568d8f97d0c 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
@@ -37,125 +38,125 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions27 D27;
 			if (EvenOrOdd == true)
 			{
-				D27.f[dirE] = &DD27[dirE   *size_Mat];
-				D27.f[dirW] = &DD27[dirW   *size_Mat];
-				D27.f[dirN] = &DD27[dirN   *size_Mat];
-				D27.f[dirS] = &DD27[dirS   *size_Mat];
-				D27.f[dirT] = &DD27[dirT   *size_Mat];
-				D27.f[dirB] = &DD27[dirB   *size_Mat];
-				D27.f[dirNE] = &DD27[dirNE  *size_Mat];
-				D27.f[dirSW] = &DD27[dirSW  *size_Mat];
-				D27.f[dirSE] = &DD27[dirSE  *size_Mat];
-				D27.f[dirNW] = &DD27[dirNW  *size_Mat];
-				D27.f[dirTE] = &DD27[dirTE  *size_Mat];
-				D27.f[dirBW] = &DD27[dirBW  *size_Mat];
-				D27.f[dirBE] = &DD27[dirBE  *size_Mat];
-				D27.f[dirTW] = &DD27[dirTW  *size_Mat];
-				D27.f[dirTN] = &DD27[dirTN  *size_Mat];
-				D27.f[dirBS] = &DD27[dirBS  *size_Mat];
-				D27.f[dirBN] = &DD27[dirBN  *size_Mat];
-				D27.f[dirTS] = &DD27[dirTS  *size_Mat];
-				D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-				D27.f[dirTNE] = &DD27[dirTNE *size_Mat];
-				D27.f[dirTSW] = &DD27[dirTSW *size_Mat];
-				D27.f[dirTSE] = &DD27[dirTSE *size_Mat];
-				D27.f[dirTNW] = &DD27[dirTNW *size_Mat];
-				D27.f[dirBNE] = &DD27[dirBNE *size_Mat];
-				D27.f[dirBSW] = &DD27[dirBSW *size_Mat];
-				D27.f[dirBSE] = &DD27[dirBSE *size_Mat];
-				D27.f[dirBNW] = &DD27[dirBNW *size_Mat];
+				D27.f[E] = &DD27[E   *size_Mat];
+				D27.f[W] = &DD27[W   *size_Mat];
+				D27.f[N] = &DD27[N   *size_Mat];
+				D27.f[S] = &DD27[S   *size_Mat];
+				D27.f[T] = &DD27[T   *size_Mat];
+				D27.f[B] = &DD27[B   *size_Mat];
+				D27.f[NE] = &DD27[NE  *size_Mat];
+				D27.f[SW] = &DD27[SW  *size_Mat];
+				D27.f[SE] = &DD27[SE  *size_Mat];
+				D27.f[NW] = &DD27[NW  *size_Mat];
+				D27.f[TE] = &DD27[TE  *size_Mat];
+				D27.f[BW] = &DD27[BW  *size_Mat];
+				D27.f[BE] = &DD27[BE  *size_Mat];
+				D27.f[TW] = &DD27[TW  *size_Mat];
+				D27.f[TN] = &DD27[TN  *size_Mat];
+				D27.f[BS] = &DD27[BS  *size_Mat];
+				D27.f[BN] = &DD27[BN  *size_Mat];
+				D27.f[TS] = &DD27[TS  *size_Mat];
+				D27.f[REST] = &DD27[REST*size_Mat];
+				D27.f[TNE] = &DD27[TNE *size_Mat];
+				D27.f[TSW] = &DD27[TSW *size_Mat];
+				D27.f[TSE] = &DD27[TSE *size_Mat];
+				D27.f[TNW] = &DD27[TNW *size_Mat];
+				D27.f[BNE] = &DD27[BNE *size_Mat];
+				D27.f[BSW] = &DD27[BSW *size_Mat];
+				D27.f[BSE] = &DD27[BSE *size_Mat];
+				D27.f[BNW] = &DD27[BNW *size_Mat];
 			}
 			else
 			{
-				D27.f[dirW] = &DD27[dirE   *size_Mat];
-				D27.f[dirE] = &DD27[dirW   *size_Mat];
-				D27.f[dirS] = &DD27[dirN   *size_Mat];
-				D27.f[dirN] = &DD27[dirS   *size_Mat];
-				D27.f[dirB] = &DD27[dirT   *size_Mat];
-				D27.f[dirT] = &DD27[dirB   *size_Mat];
-				D27.f[dirSW] = &DD27[dirNE  *size_Mat];
-				D27.f[dirNE] = &DD27[dirSW  *size_Mat];
-				D27.f[dirNW] = &DD27[dirSE  *size_Mat];
-				D27.f[dirSE] = &DD27[dirNW  *size_Mat];
-				D27.f[dirBW] = &DD27[dirTE  *size_Mat];
-				D27.f[dirTE] = &DD27[dirBW  *size_Mat];
-				D27.f[dirTW] = &DD27[dirBE  *size_Mat];
-				D27.f[dirBE] = &DD27[dirTW  *size_Mat];
-				D27.f[dirBS] = &DD27[dirTN  *size_Mat];
-				D27.f[dirTN] = &DD27[dirBS  *size_Mat];
-				D27.f[dirTS] = &DD27[dirBN  *size_Mat];
-				D27.f[dirBN] = &DD27[dirTS  *size_Mat];
-				D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-				D27.f[dirBSW] = &DD27[dirTNE *size_Mat];
-				D27.f[dirBNE] = &DD27[dirTSW *size_Mat];
-				D27.f[dirBNW] = &DD27[dirTSE *size_Mat];
-				D27.f[dirBSE] = &DD27[dirTNW *size_Mat];
-				D27.f[dirTSW] = &DD27[dirBNE *size_Mat];
-				D27.f[dirTNE] = &DD27[dirBSW *size_Mat];
-				D27.f[dirTNW] = &DD27[dirBSE *size_Mat];
-				D27.f[dirTSE] = &DD27[dirBNW *size_Mat];
+				D27.f[W] = &DD27[E   *size_Mat];
+				D27.f[E] = &DD27[W   *size_Mat];
+				D27.f[S] = &DD27[N   *size_Mat];
+				D27.f[N] = &DD27[S   *size_Mat];
+				D27.f[B] = &DD27[T   *size_Mat];
+				D27.f[T] = &DD27[B   *size_Mat];
+				D27.f[SW] = &DD27[NE  *size_Mat];
+				D27.f[NE] = &DD27[SW  *size_Mat];
+				D27.f[NW] = &DD27[SE  *size_Mat];
+				D27.f[SE] = &DD27[NW  *size_Mat];
+				D27.f[BW] = &DD27[TE  *size_Mat];
+				D27.f[TE] = &DD27[BW  *size_Mat];
+				D27.f[TW] = &DD27[BE  *size_Mat];
+				D27.f[BE] = &DD27[TW  *size_Mat];
+				D27.f[BS] = &DD27[TN  *size_Mat];
+				D27.f[TN] = &DD27[BS  *size_Mat];
+				D27.f[TS] = &DD27[BN  *size_Mat];
+				D27.f[BN] = &DD27[TS  *size_Mat];
+				D27.f[REST] = &DD27[REST*size_Mat];
+				D27.f[BSW] = &DD27[TNE *size_Mat];
+				D27.f[BNE] = &DD27[TSW *size_Mat];
+				D27.f[BNW] = &DD27[TSE *size_Mat];
+				D27.f[BSE] = &DD27[TNW *size_Mat];
+				D27.f[TSW] = &DD27[BNE *size_Mat];
+				D27.f[TNE] = &DD27[BSW *size_Mat];
+				D27.f[TNW] = &DD27[BSE *size_Mat];
+				D27.f[TSE] = &DD27[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -168,61 +169,61 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[dirE])[k];//ke
-			real fE = (D.f[dirW])[kw];
-			real fS = (D.f[dirN])[k];//kn
-			real fN = (D.f[dirS])[ks];
-			real fB = (D.f[dirT])[k];//kt
-			real fT = (D.f[dirB])[kb];
-			real fSW = (D.f[dirNE])[k];//kne
-			real fNE = (D.f[dirSW])[ksw];
-			real fNW = (D.f[dirSE])[ks];//kse
-			real fSE = (D.f[dirNW])[kw];//knw
-			real fBW = (D.f[dirTE])[k];//kte
-			real fTE = (D.f[dirBW])[kbw];
-			real fTW = (D.f[dirBE])[kb];//kbe
-			real fBE = (D.f[dirTW])[kw];//ktw
-			real fBS = (D.f[dirTN])[k];//ktn
-			real fTN = (D.f[dirBS])[kbs];
-			real fTS = (D.f[dirBN])[kb];//kbn
-			real fBN = (D.f[dirTS])[ks];//kts
-			//real fZERO = (D.f[dirZERO])[k];//kzero
-			real fBSW = (D.f[dirTNE])[k];//ktne
-			real fBNE = (D.f[dirTSW])[ksw];//ktsw
-			real fBNW = (D.f[dirTSE])[ks];//ktse
-			real fBSE = (D.f[dirTNW])[kw];//ktnw
-			real fTSW = (D.f[dirBNE])[kb];//kbne
-			real fTNE = (D.f[dirBSW])[kbsw];
-			real fTNW = (D.f[dirBSE])[kbs];//kbse
-			real fTSE = (D.f[dirBNW])[kbw];//kbnw
+			real fW = (D.f[E])[k];//ke
+			real fE = (D.f[W])[kw];
+			real fS = (D.f[N])[k];//kn
+			real fN = (D.f[S])[ks];
+			real fB = (D.f[T])[k];//kt
+			real fT = (D.f[B])[kb];
+			real fSW = (D.f[NE])[k];//kne
+			real fNE = (D.f[SW])[ksw];
+			real fNW = (D.f[SE])[ks];//kse
+			real fSE = (D.f[NW])[kw];//knw
+			real fBW = (D.f[TE])[k];//kte
+			real fTE = (D.f[BW])[kbw];
+			real fTW = (D.f[BE])[kb];//kbe
+			real fBE = (D.f[TW])[kw];//ktw
+			real fBS = (D.f[TN])[k];//ktn
+			real fTN = (D.f[BS])[kbs];
+			real fTS = (D.f[BN])[kb];//kbn
+			real fBN = (D.f[TS])[ks];//kts
+			//real fZERO = (D.f[REST])[k];//kzero
+			real fBSW = (D.f[TNE])[k];//ktne
+			real fBNE = (D.f[TSW])[ksw];//ktsw
+			real fBNW = (D.f[TSE])[ks];//ktse
+			real fBSE = (D.f[TNW])[kw];//ktnw
+			real fTSW = (D.f[BNE])[kb];//kbne
+			real fTNE = (D.f[BSW])[kbsw];
+			real fTNW = (D.f[BSE])[kbs];//kbse
+			real fTSE = (D.f[BNW])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
-										   //real f27E    =  (D27.f[dirE   ])[k  ];//ke
-										   //real f27W    =  (D27.f[dirW   ])[kw ];
-										   //real f27N    =  (D27.f[dirN   ])[k  ];//kn
-										   //real f27S    =  (D27.f[dirS   ])[ks ];
-										   //real f27T    =  (D27.f[dirT   ])[k  ];//kt
-										   //real f27B    =  (D27.f[dirB   ])[kb ];
-										   //real f27NE   =  (D27.f[dirNE  ])[k  ];//kne
-										   //real f27SW   =  (D27.f[dirSW  ])[ksw];
-										   //real f27SE   =  (D27.f[dirSE  ])[ks ];//kse
-										   //real f27NW   =  (D27.f[dirNW  ])[kw ];//knw
-										   //real f27TE   =  (D27.f[dirTE  ])[k  ];//kte
-										   //real f27BW   =  (D27.f[dirBW  ])[kbw];
-										   //real f27BE   =  (D27.f[dirBE  ])[kb ];//kbe
-										   //real f27TW   =  (D27.f[dirTW  ])[kw ];//ktw
-										   //real f27TN   =  (D27.f[dirTN  ])[k  ];//ktn
-										   //real f27BS   =  (D27.f[dirBS  ])[kbs];
-										   //real f27BN   =  (D27.f[dirBN  ])[kb ];//kbn
-										   //real f27TS   =  (D27.f[dirTS  ])[ks ];//kts
-										   //real f27ZERO =  (D27.f[dirZERO])[k  ];//kzero
-										   //real f27TNE  =  (D27.f[dirTNE ])[k  ];//ktne
-										   //real f27TSW  =  (D27.f[dirTSW ])[ksw];//ktsw
-										   //real f27TSE  =  (D27.f[dirTSE ])[ks ];//ktse
-										   //real f27TNW  =  (D27.f[dirTNW ])[kw ];//ktnw
-										   //real f27BNE  =  (D27.f[dirBNE ])[kb ];//kbne
-										   //real f27BSW  =  (D27.f[dirBSW ])[kbsw];
-										   //real f27BSE  =  (D27.f[dirBSE ])[kbs];//kbse
-										   //real f27BNW  =  (D27.f[dirBNW ])[kbw];//kbnw
+										   //real f27E    =  (D27.f[E   ])[k  ];//ke
+										   //real f27W    =  (D27.f[W   ])[kw ];
+										   //real f27N    =  (D27.f[N   ])[k  ];//kn
+										   //real f27S    =  (D27.f[S   ])[ks ];
+										   //real f27T    =  (D27.f[T   ])[k  ];//kt
+										   //real f27B    =  (D27.f[B   ])[kb ];
+										   //real f27NE   =  (D27.f[NE  ])[k  ];//kne
+										   //real f27SW   =  (D27.f[SW  ])[ksw];
+										   //real f27SE   =  (D27.f[SE  ])[ks ];//kse
+										   //real f27NW   =  (D27.f[NW  ])[kw ];//knw
+										   //real f27TE   =  (D27.f[TE  ])[k  ];//kte
+										   //real f27BW   =  (D27.f[BW  ])[kbw];
+										   //real f27BE   =  (D27.f[BE  ])[kb ];//kbe
+										   //real f27TW   =  (D27.f[TW  ])[kw ];//ktw
+										   //real f27TN   =  (D27.f[TN  ])[k  ];//ktn
+										   //real f27BS   =  (D27.f[BS  ])[kbs];
+										   //real f27BN   =  (D27.f[BN  ])[kb ];//kbn
+										   //real f27TS   =  (D27.f[TS  ])[ks ];//kts
+										   //real f27ZERO =  (D27.f[REST])[k  ];//kzero
+										   //real f27TNE  =  (D27.f[TNE ])[k  ];//ktne
+										   //real f27TSW  =  (D27.f[TSW ])[ksw];//ktsw
+										   //real f27TSE  =  (D27.f[TSE ])[ks ];//ktse
+										   //real f27TNW  =  (D27.f[TNW ])[kw ];//ktnw
+										   //real f27BNE  =  (D27.f[BNE ])[kb ];//kbne
+										   //real f27BSW  =  (D27.f[BSW ])[kbsw];
+										   //real f27BSE  =  (D27.f[BSE ])[kbs];//kbse
+										   //real f27BNW  =  (D27.f[BNW ])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
 										   //real vx1     =  ((fTNE-fBSW)+(fBNE-fTSW)+(fTSE-fBNW)+(fBSE-fTNW) +(fNE-fSW)+(fSE-fNW)+(fTE-fBW)+(fBE-fTW)+(fE-fW));
 										   //real vx2     =  ((fTNE-fBSW)+(fBNE-fTSW)+(fBNW-fTSE)+(fTNW-fBSE) +(fNE-fSW)+(fNW-fSE)+(fTN-fBS)+(fBN-fTS)+(fN-fS));
@@ -230,33 +231,33 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 										   ////////////////////////////////////////////////////////////////////////////////
 
 
-			real mfcbb = (D27.f[dirE])[k];
-			real mfabb = (D27.f[dirW])[kw];
-			real mfbcb = (D27.f[dirN])[k];
-			real mfbab = (D27.f[dirS])[ks];
-			real mfbbc = (D27.f[dirT])[k];
-			real mfbba = (D27.f[dirB])[kb];
-			real mfccb = (D27.f[dirNE])[k];
-			real mfaab = (D27.f[dirSW])[ksw];
-			real mfcab = (D27.f[dirSE])[ks];
-			real mfacb = (D27.f[dirNW])[kw];
-			real mfcbc = (D27.f[dirTE])[k];
-			real mfaba = (D27.f[dirBW])[kbw];
-			real mfcba = (D27.f[dirBE])[kb];
-			real mfabc = (D27.f[dirTW])[kw];
-			real mfbcc = (D27.f[dirTN])[k];
-			real mfbaa = (D27.f[dirBS])[kbs];
-			real mfbca = (D27.f[dirBN])[kb];
-			real mfbac = (D27.f[dirTS])[ks];
-			real mfbbb = (D27.f[dirZERO])[k];
-			real mfccc = (D27.f[dirTNE])[k];
-			real mfaac = (D27.f[dirTSW])[ksw];
-			real mfcac = (D27.f[dirTSE])[ks];
-			real mfacc = (D27.f[dirTNW])[kw];
-			real mfcca = (D27.f[dirBNE])[kb];
-			real mfaaa = (D27.f[dirBSW])[kbsw];
-			real mfcaa = (D27.f[dirBSE])[kbs];
-			real mfaca = (D27.f[dirBNW])[kbw];
+			real mfcbb = (D27.f[E])[k];
+			real mfabb = (D27.f[W])[kw];
+			real mfbcb = (D27.f[N])[k];
+			real mfbab = (D27.f[S])[ks];
+			real mfbbc = (D27.f[T])[k];
+			real mfbba = (D27.f[B])[kb];
+			real mfccb = (D27.f[NE])[k];
+			real mfaab = (D27.f[SW])[ksw];
+			real mfcab = (D27.f[SE])[ks];
+			real mfacb = (D27.f[NW])[kw];
+			real mfcbc = (D27.f[TE])[k];
+			real mfaba = (D27.f[BW])[kbw];
+			real mfcba = (D27.f[BE])[kb];
+			real mfabc = (D27.f[TW])[kw];
+			real mfbcc = (D27.f[TN])[k];
+			real mfbaa = (D27.f[BS])[kbs];
+			real mfbca = (D27.f[BN])[kb];
+			real mfbac = (D27.f[TS])[ks];
+			real mfbbb = (D27.f[REST])[k];
+			real mfccc = (D27.f[TNE])[k];
+			real mfaac = (D27.f[TSW])[ksw];
+			real mfcac = (D27.f[TSE])[ks];
+			real mfacc = (D27.f[TNW])[kw];
+			real mfcca = (D27.f[BNE])[kb];
+			real mfaaa = (D27.f[BSW])[kbsw];
+			real mfcaa = (D27.f[BSE])[kbs];
+			real mfaca = (D27.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			//Conc
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
@@ -300,33 +301,33 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 			//                  (f27E+f27W)+(f27N+f27S)+(f27T+f27B)+f27ZERO;
 			//real cusq    =  c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-			//(D27.f[ dirE   ])[k   ] = f27W    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);                                                                     
-			//(D27.f[ dirW   ])[kw  ] = f27E    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);                                                                     
-			//(D27.f[ dirN   ])[k   ] = f27S    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
-			//(D27.f[ dirS   ])[ks  ] = f27N    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
-			//(D27.f[ dirT   ])[k   ] = f27B    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
-			//(D27.f[ dirB   ])[kb  ] = f27T    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
-			//(D27.f[ dirNE  ])[k   ] = f27SW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
-			//(D27.f[ dirSW  ])[ksw ] = f27NE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
-			//(D27.f[ dirSE  ])[ks  ] = f27NW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
-			//(D27.f[ dirNW  ])[kw  ] = f27SE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
-			//(D27.f[ dirTE  ])[k   ] = f27BW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
-			//(D27.f[ dirBW  ])[kbw ] = f27TE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
-			//(D27.f[ dirBE  ])[kb  ] = f27TW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
-			//(D27.f[ dirTW  ])[kw  ] = f27BE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
-			//(D27.f[ dirTN  ])[k   ] = f27BS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
-			//(D27.f[ dirBS  ])[kbs ] = f27TN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
-			//(D27.f[ dirBN  ])[kb  ] = f27TS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
-			//(D27.f[ dirTS  ])[ks  ] = f27BN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
-			//(D27.f[ dirZERO])[k   ] = f27ZERO *(one-omegaD)+omegaD* c8over27* ConcD*(one-cusq);
-			//(D27.f[ dirTNE ])[k   ] = f27BSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
-			//(D27.f[ dirTSE ])[ks  ] = f27BNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
-			//(D27.f[ dirBNE ])[kb  ] = f27TSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
-			//(D27.f[ dirBSE ])[kbs ] = f27TNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq);
-			//(D27.f[ dirTNW ])[kw  ] = f27BSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
-			//(D27.f[ dirTSW ])[ksw ] = f27BNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
-			//(D27.f[ dirBNW ])[kbw ] = f27TSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
-			//(D27.f[ dirBSW ])[kbsw] = f27TNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
+			//(D27.f[ E   ])[k   ] = f27W    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(-vx1        )+c9over2*(-vx1        )*(-vx1        )-cusq);                                                                     
+			//(D27.f[ W   ])[kw  ] = f27E    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx1        )+c9over2*( vx1        )*( vx1        )-cusq);                                                                     
+			//(D27.f[ N   ])[k   ] = f27S    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(   -vx2     )+c9over2*(    -vx2    )*(    -vx2    )-cusq);
+			//(D27.f[ S   ])[ks  ] = f27N    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(    vx2     )+c9over2*(     vx2    )*(     vx2    )-cusq);
+			//(D27.f[ T   ])[k   ] = f27B    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(        -vx3)+c9over2*(        -vx3)*(        -vx3)-cusq);
+			//(D27.f[ B   ])[kb  ] = f27T    *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(         vx3)+c9over2*(         vx3)*(         vx3)-cusq);
+			//(D27.f[ NE  ])[k   ] = f27SW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1-vx2    )+c9over2*(-vx1-vx2    )*(-vx1-vx2    )-cusq);
+			//(D27.f[ SW  ])[ksw ] = f27NE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1+vx2    )+c9over2*( vx1+vx2    )*( vx1+vx2    )-cusq);
+			//(D27.f[ SE  ])[ks  ] = f27NW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1+vx2    )+c9over2*(-vx1+vx2    )*(-vx1+vx2    )-cusq);
+			//(D27.f[ NW  ])[kw  ] = f27SE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1-vx2    )+c9over2*( vx1-vx2    )*( vx1-vx2    )-cusq);
+			//(D27.f[ TE  ])[k   ] = f27BW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    -vx3)+c9over2*(-vx1    -vx3)*(-vx1    -vx3)-cusq);
+			//(D27.f[ BW  ])[kbw ] = f27TE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    +vx3)+c9over2*( vx1    +vx3)*( vx1    +vx3)-cusq);
+			//(D27.f[ BE  ])[kb  ] = f27TW   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1    +vx3)+c9over2*(-vx1    +vx3)*(-vx1    +vx3)-cusq);
+			//(D27.f[ TW  ])[kw  ] = f27BE   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1    -vx3)+c9over2*( vx1    -vx3)*( vx1    -vx3)-cusq);
+			//(D27.f[ TN  ])[k   ] = f27BS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2-vx3)+c9over2*(    -vx2-vx3)*(    -vx2-vx3)-cusq);
+			//(D27.f[ BS  ])[kbs ] = f27TN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2+vx3)+c9over2*(     vx2+vx3)*(     vx2+vx3)-cusq);
+			//(D27.f[ BN  ])[kb  ] = f27TS   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(    -vx2+vx3)+c9over2*(    -vx2+vx3)*(    -vx2+vx3)-cusq);
+			//(D27.f[ TS  ])[ks  ] = f27BN   *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(     vx2-vx3)+c9over2*(     vx2-vx3)*(     vx2-vx3)-cusq);
+			//(D27.f[ REST])[k   ] = f27ZERO *(one-omegaD)+omegaD* c8over27* ConcD*(one-cusq);
+			//(D27.f[ TNE ])[k   ] = f27BSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq);
+			//(D27.f[ TSE ])[ks  ] = f27BNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq);
+			//(D27.f[ BNE ])[kb  ] = f27TSW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq);
+			//(D27.f[ BSE ])[kbs ] = f27TNW  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq);
+			//(D27.f[ TNW ])[kw  ] = f27BSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq);
+			//(D27.f[ TSW ])[ksw ] = f27BNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq);
+			//(D27.f[ BNW ])[kbw ] = f27TSE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq);
+			//(D27.f[ BSW ])[kbsw] = f27TNE  *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 			real oMdrho = c0o1;//one; // comp special
@@ -860,33 +861,33 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_27(real diffusivity,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D27.f[dirE])[k] = mfabb;
-			(D27.f[dirW])[kw] = mfcbb;
-			(D27.f[dirN])[k] = mfbab;
-			(D27.f[dirS])[ks] = mfbcb;
-			(D27.f[dirT])[k] = mfbba;
-			(D27.f[dirB])[kb] = mfbbc;
-			(D27.f[dirNE])[k] = mfaab;
-			(D27.f[dirSW])[ksw] = mfccb;
-			(D27.f[dirSE])[ks] = mfacb;
-			(D27.f[dirNW])[kw] = mfcab;
-			(D27.f[dirTE])[k] = mfaba;
-			(D27.f[dirBW])[kbw] = mfcbc;
-			(D27.f[dirBE])[kb] = mfabc;
-			(D27.f[dirTW])[kw] = mfcba;
-			(D27.f[dirTN])[k] = mfbaa;
-			(D27.f[dirBS])[kbs] = mfbcc;
-			(D27.f[dirBN])[kb] = mfbac;
-			(D27.f[dirTS])[ks] = mfbca;
-			(D27.f[dirZERO])[k] = mfbbb;
-			(D27.f[dirTNE])[k] = mfaaa;
-			(D27.f[dirTSE])[ks] = mfaca;
-			(D27.f[dirBNE])[kb] = mfaac;
-			(D27.f[dirBSE])[kbs] = mfacc;
-			(D27.f[dirTNW])[kw] = mfcaa;
-			(D27.f[dirTSW])[ksw] = mfcca;
-			(D27.f[dirBNW])[kbw] = mfcac;
-			(D27.f[dirBSW])[kbsw] = mfccc;
+			(D27.f[E])[k] = mfabb;
+			(D27.f[W])[kw] = mfcbb;
+			(D27.f[N])[k] = mfbab;
+			(D27.f[S])[ks] = mfbcb;
+			(D27.f[T])[k] = mfbba;
+			(D27.f[B])[kb] = mfbbc;
+			(D27.f[NE])[k] = mfaab;
+			(D27.f[SW])[ksw] = mfccb;
+			(D27.f[SE])[ks] = mfacb;
+			(D27.f[NW])[kw] = mfcab;
+			(D27.f[TE])[k] = mfaba;
+			(D27.f[BW])[kbw] = mfcbc;
+			(D27.f[BE])[kb] = mfabc;
+			(D27.f[TW])[kw] = mfcba;
+			(D27.f[TN])[k] = mfbaa;
+			(D27.f[BS])[kbs] = mfbcc;
+			(D27.f[BN])[kb] = mfbac;
+			(D27.f[TS])[ks] = mfbca;
+			(D27.f[REST])[k] = mfbbb;
+			(D27.f[TNE])[k] = mfaaa;
+			(D27.f[TSE])[ks] = mfaca;
+			(D27.f[BNE])[kb] = mfaac;
+			(D27.f[BSE])[kbs] = mfacc;
+			(D27.f[TNW])[kw] = mfcaa;
+			(D27.f[TSW])[ksw] = mfcca;
+			(D27.f[BNW])[kbw] = mfcac;
+			(D27.f[BSW])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 
 		}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu
index 7ae4535d028b4da4fe53681219ef90705f990d06..0cad7d9cdffc85f744dcc65ac38505b50c3befca 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
@@ -37,63 +38,63 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions7 D7;
@@ -128,60 +129,60 @@ extern "C" __global__ void LB_Kernel_AD_Incomp_7(real diffusivity,
 			unsigned int kbs = neighborZ[ks];
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fW = (D.f[dirE])[k];//ke
-			real fE = (D.f[dirW])[kw];
-			real fS = (D.f[dirN])[k];//kn
-			real fN = (D.f[dirS])[ks];
-			real fB = (D.f[dirT])[k];//kt
-			real fT = (D.f[dirB])[kb];
-			real fSW = (D.f[dirNE])[k];//kne
-			real fNE = (D.f[dirSW])[ksw];
-			real fNW = (D.f[dirSE])[ks];//kse
-			real fSE = (D.f[dirNW])[kw];//knw
-			real fBW = (D.f[dirTE])[k];//kte
-			real fTE = (D.f[dirBW])[kbw];
-			real fTW = (D.f[dirBE])[kb];//kbe
-			real fBE = (D.f[dirTW])[kw];//ktw
-			real fBS = (D.f[dirTN])[k];//ktn
-			real fTN = (D.f[dirBS])[kbs];
-			real fTS = (D.f[dirBN])[kb];//kbn
-			real fBN = (D.f[dirTS])[ks];//kts
-			//real fZERO = (D.f[dirZERO])[k];//kzero
-			real fBSW = (D.f[dirTNE])[k];//ktne
-			real fBNE = (D.f[dirTSW])[ksw];//ktsw
-			real fBNW = (D.f[dirTSE])[ks];//ktse
-			real fBSE = (D.f[dirTNW])[kw];//ktnw
-			real fTSW = (D.f[dirBNE])[kb];//kbne
-			real fTNE = (D.f[dirBSW])[kbsw];
-			real fTNW = (D.f[dirBSE])[kbs];//kbse
-			real fTSE = (D.f[dirBNW])[kbw];//kbnw
-										   //real fE    =  (D.f[dirE   ])[k  ];//ke
-										   //real fW    =  (D.f[dirW   ])[kw ];
-										   //real fN    =  (D.f[dirN   ])[k  ];//kn
-										   //real fS    =  (D.f[dirS   ])[ks ];
-										   //real fT    =  (D.f[dirT   ])[k  ];//kt
-										   //real fB    =  (D.f[dirB   ])[kb ];
-										   //real fNE   =  (D.f[dirNE  ])[k  ];//kne
-										   //real fSW   =  (D.f[dirSW  ])[ksw];
-										   //real fSE   =  (D.f[dirSE  ])[ks ];//kse
-										   //real fNW   =  (D.f[dirNW  ])[kw ];//knw
-										   //real fTE   =  (D.f[dirTE  ])[k  ];//kte
-										   //real fBW   =  (D.f[dirBW  ])[kbw];
-										   //real fBE   =  (D.f[dirBE  ])[kb ];//kbe
-										   //real fTW   =  (D.f[dirTW  ])[kw ];//ktw
-										   //real fTN   =  (D.f[dirTN  ])[k  ];//ktn
-										   //real fBS   =  (D.f[dirBS  ])[kbs];
-										   //real fBN   =  (D.f[dirBN  ])[kb ];//kbn
-										   //real fTS   =  (D.f[dirTS  ])[ks ];//kts
-										   //real fZERO =  (D.f[dirZERO])[k  ];//kzero
-										   //real fTNE   = (D.f[dirTNE ])[k  ];//ktne
-										   //real fTSW   = (D.f[dirTSW ])[ksw];//ktsw
-										   //real fTSE   = (D.f[dirTSE ])[ks ];//ktse
-										   //real fTNW   = (D.f[dirTNW ])[kw ];//ktnw
-										   //real fBNE   = (D.f[dirBNE ])[kb ];//kbne
-										   //real fBSW   = (D.f[dirBSW ])[kbsw];
-										   //real fBSE   = (D.f[dirBSE ])[kbs];//kbse
-										   //real fBNW   = (D.f[dirBNW ])[kbw];//kbnw
+			real fW = (D.f[E])[k];//ke
+			real fE = (D.f[W])[kw];
+			real fS = (D.f[N])[k];//kn
+			real fN = (D.f[S])[ks];
+			real fB = (D.f[T])[k];//kt
+			real fT = (D.f[B])[kb];
+			real fSW = (D.f[NE])[k];//kne
+			real fNE = (D.f[SW])[ksw];
+			real fNW = (D.f[SE])[ks];//kse
+			real fSE = (D.f[NW])[kw];//knw
+			real fBW = (D.f[TE])[k];//kte
+			real fTE = (D.f[BW])[kbw];
+			real fTW = (D.f[BE])[kb];//kbe
+			real fBE = (D.f[TW])[kw];//ktw
+			real fBS = (D.f[TN])[k];//ktn
+			real fTN = (D.f[BS])[kbs];
+			real fTS = (D.f[BN])[kb];//kbn
+			real fBN = (D.f[TS])[ks];//kts
+			//real fZERO = (D.f[REST])[k];//kzero
+			real fBSW = (D.f[TNE])[k];//ktne
+			real fBNE = (D.f[TSW])[ksw];//ktsw
+			real fBNW = (D.f[TSE])[ks];//ktse
+			real fBSE = (D.f[TNW])[kw];//ktnw
+			real fTSW = (D.f[BNE])[kb];//kbne
+			real fTNE = (D.f[BSW])[kbsw];
+			real fTNW = (D.f[BSE])[kbs];//kbse
+			real fTSE = (D.f[BNW])[kbw];//kbnw
+										   //real fE    =  (D.f[E   ])[k  ];//ke
+										   //real fW    =  (D.f[W   ])[kw ];
+										   //real fN    =  (D.f[N   ])[k  ];//kn
+										   //real fS    =  (D.f[S   ])[ks ];
+										   //real fT    =  (D.f[T   ])[k  ];//kt
+										   //real fB    =  (D.f[B   ])[kb ];
+										   //real fNE   =  (D.f[NE  ])[k  ];//kne
+										   //real fSW   =  (D.f[SW  ])[ksw];
+										   //real fSE   =  (D.f[SE  ])[ks ];//kse
+										   //real fNW   =  (D.f[NW  ])[kw ];//knw
+										   //real fTE   =  (D.f[TE  ])[k  ];//kte
+										   //real fBW   =  (D.f[BW  ])[kbw];
+										   //real fBE   =  (D.f[BE  ])[kb ];//kbe
+										   //real fTW   =  (D.f[TW  ])[kw ];//ktw
+										   //real fTN   =  (D.f[TN  ])[k  ];//ktn
+										   //real fBS   =  (D.f[BS  ])[kbs];
+										   //real fBN   =  (D.f[BN  ])[kb ];//kbn
+										   //real fTS   =  (D.f[TS  ])[ks ];//kts
+										   //real fZERO =  (D.f[REST])[k  ];//kzero
+										   //real fTNE   = (D.f[TNE ])[k  ];//ktne
+										   //real fTSW   = (D.f[TSW ])[ksw];//ktsw
+										   //real fTSE   = (D.f[TSE ])[ks ];//ktse
+										   //real fTNW   = (D.f[TNW ])[kw ];//ktnw
+										   //real fBNE   = (D.f[BNE ])[kb ];//kbne
+										   //real fBSW   = (D.f[BSW ])[kbsw];
+										   //real fBSE   = (D.f[BSE ])[kbs];//kbse
+										   //real fBNW   = (D.f[BNW ])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
 			real f7ZERO = (D7.f[0])[k];
 			real f7E = (D7.f[1])[k];
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGK/BGKCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGK/BGKCompSP27_Device.cu
index c40397041a70ad99525bc2947724ed8de1b7121a..a9cf249541b2e42768c0ad72611f3f7626b71b5b 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGK/BGKCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGK/BGKCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 
@@ -37,63 +38,63 @@ extern "C" __global__ void LB_Kernel_BGK_Comp_SP_27(	real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +127,33 @@ extern "C" __global__ void LB_Kernel_BGK_Comp_SP_27(	real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fE = (D.f[dirE])[k];//ke
-			real fW = (D.f[dirW])[kw];
-			real fN = (D.f[dirN])[k];//kn
-			real fS = (D.f[dirS])[ks];
-			real fT = (D.f[dirT])[k];//kt
-			real fB = (D.f[dirB])[kb];
-			real fNE = (D.f[dirNE])[k];//kne
-			real fSW = (D.f[dirSW])[ksw];
-			real fSE = (D.f[dirSE])[ks];//kse
-			real fNW = (D.f[dirNW])[kw];//knw
-			real fTE = (D.f[dirTE])[k];//kte
-			real fBW = (D.f[dirBW])[kbw];
-			real fBE = (D.f[dirBE])[kb];//kbe
-			real fTW = (D.f[dirTW])[kw];//ktw
-			real fTN = (D.f[dirTN])[k];//ktn
-			real fBS = (D.f[dirBS])[kbs];
-			real fBN = (D.f[dirBN])[kb];//kbn
-			real fTS = (D.f[dirTS])[ks];//kts
-			real fZERO = (D.f[dirZERO])[k];//kzero
-			real fTNE = (D.f[dirTNE])[k];//ktne
-			real fTSW = (D.f[dirTSW])[ksw];//ktsw
-			real fTSE = (D.f[dirTSE])[ks];//ktse
-			real fTNW = (D.f[dirTNW])[kw];//ktnw
-			real fBNE = (D.f[dirBNE])[kb];//kbne
-			real fBSW = (D.f[dirBSW])[kbsw];
-			real fBSE = (D.f[dirBSE])[kbs];//kbse
-			real fBNW = (D.f[dirBNW])[kbw];//kbnw
+			real fE = (D.f[E])[k];//ke
+			real fW = (D.f[W])[kw];
+			real fN = (D.f[N])[k];//kn
+			real fS = (D.f[S])[ks];
+			real fT = (D.f[T])[k];//kt
+			real fB = (D.f[B])[kb];
+			real fNE = (D.f[NE])[k];//kne
+			real fSW = (D.f[SW])[ksw];
+			real fSE = (D.f[SE])[ks];//kse
+			real fNW = (D.f[NW])[kw];//knw
+			real fTE = (D.f[TE])[k];//kte
+			real fBW = (D.f[BW])[kbw];
+			real fBE = (D.f[BE])[kb];//kbe
+			real fTW = (D.f[TW])[kw];//ktw
+			real fTN = (D.f[TN])[k];//ktn
+			real fBS = (D.f[BS])[kbs];
+			real fBN = (D.f[BN])[kb];//kbn
+			real fTS = (D.f[TS])[ks];//kts
+			real fZERO = (D.f[REST])[k];//kzero
+			real fTNE = (D.f[TNE])[k];//ktne
+			real fTSW = (D.f[TSW])[ksw];//ktsw
+			real fTSE = (D.f[TSE])[ks];//ktse
+			real fTNW = (D.f[TNW])[kw];//ktnw
+			real fBNE = (D.f[BNE])[kb];//kbne
+			real fBSW = (D.f[BSW])[kbsw];
+			real fBSE = (D.f[BSE])[kbs];//kbse
+			real fBNW = (D.f[BNW])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
 			real drho = (fTNE + fBSW) + (fTSW + fBNE) + (fTSE + fBNW) + (fTNW + fBSE) + (fNE + fSW) + (fNW + fSE) + (fTE + fBW) + (fBE + fTW) + (fTN + fBS) + (fBN + fTS) + (fE + fW) + (fN + fS) + (fT + fB) + fZERO;
 			real rho = drho + c1o1;
@@ -209,33 +210,33 @@ extern "C" __global__ void LB_Kernel_BGK_Comp_SP_27(	real omega,
 
 
 			//////////////////////////////////////////////////////////////////////////                            
-			(D.f[dirE])[k] = fW;
-			(D.f[dirW])[kw] = fE;
-			(D.f[dirN])[k] = fS;
-			(D.f[dirS])[ks] = fN;
-			(D.f[dirT])[k] = fB;
-			(D.f[dirB])[kb] = fT;
-			(D.f[dirNE])[k] = fSW;
-			(D.f[dirSW])[ksw] = fNE;
-			(D.f[dirSE])[ks] = fNW;
-			(D.f[dirNW])[kw] = fSE;
-			(D.f[dirTE])[k] = fBW;
-			(D.f[dirBW])[kbw] = fTE;
-			(D.f[dirBE])[kb] = fTW;
-			(D.f[dirTW])[kw] = fBE;
-			(D.f[dirTN])[k] = fBS;
-			(D.f[dirBS])[kbs] = fTN;
-			(D.f[dirBN])[kb] = fTS;
-			(D.f[dirTS])[ks] = fBN;
-			(D.f[dirZERO])[k] = fZERO;
-			(D.f[dirTNE])[k] = fBSW;
-			(D.f[dirTSE])[ks] = fBNW;
-			(D.f[dirBNE])[kb] = fTSW;
-			(D.f[dirBSE])[kbs] = fTNW;
-			(D.f[dirTNW])[kw] = fBSE;
-			(D.f[dirTSW])[ksw] = fBNE;
-			(D.f[dirBNW])[kbw] = fTSE;
-			(D.f[dirBSW])[kbsw] = fTNE;
+			(D.f[E])[k] = fW;
+			(D.f[W])[kw] = fE;
+			(D.f[N])[k] = fS;
+			(D.f[S])[ks] = fN;
+			(D.f[T])[k] = fB;
+			(D.f[B])[kb] = fT;
+			(D.f[NE])[k] = fSW;
+			(D.f[SW])[ksw] = fNE;
+			(D.f[SE])[ks] = fNW;
+			(D.f[NW])[kw] = fSE;
+			(D.f[TE])[k] = fBW;
+			(D.f[BW])[kbw] = fTE;
+			(D.f[BE])[kb] = fTW;
+			(D.f[TW])[kw] = fBE;
+			(D.f[TN])[k] = fBS;
+			(D.f[BS])[kbs] = fTN;
+			(D.f[BN])[kb] = fTS;
+			(D.f[TS])[ks] = fBN;
+			(D.f[REST])[k] = fZERO;
+			(D.f[TNE])[k] = fBSW;
+			(D.f[TSE])[ks] = fBNW;
+			(D.f[BNE])[kb] = fTSW;
+			(D.f[BSE])[kbs] = fTNW;
+			(D.f[TNW])[kw] = fBSE;
+			(D.f[TSW])[ksw] = fBNE;
+			(D.f[BNW])[kbw] = fTSE;
+			(D.f[BSW])[kbsw] = fTNE;
 			//////////////////////////////////////////////////////////////////////////                            
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGKPlus/BGKPlusCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGKPlus/BGKPlusCompSP27_Device.cu
index 25138592cc9d602e66f0b22ae565fadcce44f27d..368785c5cc50bb9edc30cda9129fe655278f2f0d 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGKPlus/BGKPlusCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/BGKPlus/BGKPlusCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_BGK_Plus_Comp_SP_27(
@@ -37,63 +38,63 @@ extern "C" __global__ void LB_Kernel_BGK_Plus_Comp_SP_27(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -126,33 +127,33 @@ extern "C" __global__ void LB_Kernel_BGK_Plus_Comp_SP_27(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -792,33 +793,33 @@ extern "C" __global__ void LB_Kernel_BGK_Plus_Comp_SP_27(
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cascade/CascadeCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cascade/CascadeCompSP27_Device.cu
index b024c2627235ffdbd34fa8234b88497b083074cf..ef29cf9593578696f74bbd7648f99f0b6038a12c 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cascade/CascadeCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cascade/CascadeCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_Cascade_Comp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_Cascade_Comp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,33 +126,33 @@ extern "C" __global__ void LB_Kernel_Cascade_Comp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];//[ke   ];
-			real mfabb = (D.f[dirW   ])[kw ];//[kw   ];
-			real mfbcb = (D.f[dirN   ])[k  ];//[kn   ];
-			real mfbab = (D.f[dirS   ])[ks ];//[ks   ];
-			real mfbbc = (D.f[dirT   ])[k  ];//[kt   ];
-			real mfbba = (D.f[dirB   ])[kb ];//[kb   ];
-			real mfccb = (D.f[dirNE  ])[k  ];//[kne  ];
-			real mfaab = (D.f[dirSW  ])[ksw];//[ksw  ];
-			real mfcab = (D.f[dirSE  ])[ks ];//[kse  ];
-			real mfacb = (D.f[dirNW  ])[kw ];//[knw  ];
-			real mfcbc = (D.f[dirTE  ])[k  ];//[kte  ];
-			real mfaba = (D.f[dirBW  ])[kbw];//[kbw  ];
-			real mfcba = (D.f[dirBE  ])[kb ];//[kbe  ];
-			real mfabc = (D.f[dirTW  ])[kw ];//[ktw  ];
-			real mfbcc = (D.f[dirTN  ])[k  ];//[ktn  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];//[kbs  ];
-			real mfbca = (D.f[dirBN  ])[kb ];//[kbn  ];
-			real mfbac = (D.f[dirTS  ])[ks ];//[kts  ];
-			real mfbbb = (D.f[dirZERO])[k  ];//[kzero];
-			real mfccc = (D.f[dirTNE ])[k  ];//[ktne ];
-			real mfaac = (D.f[dirTSW ])[ksw];//[ktsw ];
-			real mfcac = (D.f[dirTSE ])[ks ];//[ktse ];
-			real mfacc = (D.f[dirTNW ])[kw ];//[ktnw ];
-			real mfcca = (D.f[dirBNE ])[kb ];//[kbne ];
-			real mfaaa = (D.f[dirBSW ])[kbsw];//[kbsw ]
-			real mfcaa = (D.f[dirBSE ])[kbs];//[kbse ];
-			real mfaca = (D.f[dirBNW ])[kbw];//[kbnw ];
+			real mfcbb = (D.f[E   ])[k  ];//[ke   ];
+			real mfabb = (D.f[W   ])[kw ];//[kw   ];
+			real mfbcb = (D.f[N   ])[k  ];//[kn   ];
+			real mfbab = (D.f[S   ])[ks ];//[ks   ];
+			real mfbbc = (D.f[T   ])[k  ];//[kt   ];
+			real mfbba = (D.f[B   ])[kb ];//[kb   ];
+			real mfccb = (D.f[NE  ])[k  ];//[kne  ];
+			real mfaab = (D.f[SW  ])[ksw];//[ksw  ];
+			real mfcab = (D.f[SE  ])[ks ];//[kse  ];
+			real mfacb = (D.f[NW  ])[kw ];//[knw  ];
+			real mfcbc = (D.f[TE  ])[k  ];//[kte  ];
+			real mfaba = (D.f[BW  ])[kbw];//[kbw  ];
+			real mfcba = (D.f[BE  ])[kb ];//[kbe  ];
+			real mfabc = (D.f[TW  ])[kw ];//[ktw  ];
+			real mfbcc = (D.f[TN  ])[k  ];//[ktn  ];
+			real mfbaa = (D.f[BS  ])[kbs];//[kbs  ];
+			real mfbca = (D.f[BN  ])[kb ];//[kbn  ];
+			real mfbac = (D.f[TS  ])[ks ];//[kts  ];
+			real mfbbb = (D.f[REST])[k  ];//[kzero];
+			real mfccc = (D.f[TNE ])[k  ];//[ktne ];
+			real mfaac = (D.f[TSW ])[ksw];//[ktsw ];
+			real mfcac = (D.f[TSE ])[ks ];//[ktse ];
+			real mfacc = (D.f[TNW ])[kw ];//[ktnw ];
+			real mfcca = (D.f[BNE ])[kb ];//[kbne ];
+			real mfaaa = (D.f[BSW ])[kbsw];//[kbsw ]
+			real mfcaa = (D.f[BSE ])[kbs];//[kbse ];
+			real mfaca = (D.f[BNW ])[kbw];//[kbnw ];
 			////////////////////////////////////////////////////////////////////////////////////
 			real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + 
 						   mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb +
@@ -732,33 +733,33 @@ extern "C" __global__ void LB_Kernel_Cascade_Comp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;                                                                     
-			(D.f[ dirW   ])[kw  ] = mfcbb;                                                                   
-			(D.f[ dirN   ])[k   ] = mfbab;
-			(D.f[ dirS   ])[ks  ] = mfbcb;
-			(D.f[ dirT   ])[k   ] = mfbba;
-			(D.f[ dirB   ])[kb  ] = mfbbc;
-			(D.f[ dirNE  ])[k   ] = mfaab;
-			(D.f[ dirSW  ])[ksw ] = mfccb;
-			(D.f[ dirSE  ])[ks  ] = mfacb;
-			(D.f[ dirNW  ])[kw  ] = mfcab;
-			(D.f[ dirTE  ])[k   ] = mfaba;
-			(D.f[ dirBW  ])[kbw ] = mfcbc;
-			(D.f[ dirBE  ])[kb  ] = mfabc;
-			(D.f[ dirTW  ])[kw  ] = mfcba;
-			(D.f[ dirTN  ])[k   ] = mfbaa;
-			(D.f[ dirBS  ])[kbs ] = mfbcc;
-			(D.f[ dirBN  ])[kb  ] = mfbac;
-			(D.f[ dirTS  ])[ks  ] = mfbca;
-			(D.f[ dirZERO])[k   ] = mfbbb;
-			(D.f[ dirTNE ])[k   ] = mfaaa;
-			(D.f[ dirTSE ])[ks  ] = mfaca;
-			(D.f[ dirBNE ])[kb  ] = mfaac;
-			(D.f[ dirBSE ])[kbs ] = mfacc;
-			(D.f[ dirTNW ])[kw  ] = mfcaa;
-			(D.f[ dirTSW ])[ksw ] = mfcca;
-			(D.f[ dirBNW ])[kbw ] = mfcac;
-			(D.f[ dirBSW ])[kbsw] = mfccc;
+			(D.f[ E   ])[k   ] = mfabb;                                                                     
+			(D.f[ W   ])[kw  ] = mfcbb;                                                                   
+			(D.f[ N   ])[k   ] = mfbab;
+			(D.f[ S   ])[ks  ] = mfbcb;
+			(D.f[ T   ])[k   ] = mfbba;
+			(D.f[ B   ])[kb  ] = mfbbc;
+			(D.f[ NE  ])[k   ] = mfaab;
+			(D.f[ SW  ])[ksw ] = mfccb;
+			(D.f[ SE  ])[ks  ] = mfacb;
+			(D.f[ NW  ])[kw  ] = mfcab;
+			(D.f[ TE  ])[k   ] = mfaba;
+			(D.f[ BW  ])[kbw ] = mfcbc;
+			(D.f[ BE  ])[kb  ] = mfabc;
+			(D.f[ TW  ])[kw  ] = mfcba;
+			(D.f[ TN  ])[k   ] = mfbaa;
+			(D.f[ BS  ])[kbs ] = mfbcc;
+			(D.f[ BN  ])[kb  ] = mfbac;
+			(D.f[ TS  ])[ks  ] = mfbca;
+			(D.f[ REST])[k   ] = mfbbb;
+			(D.f[ TNE ])[k   ] = mfaaa;
+			(D.f[ TSE ])[ks  ] = mfaca;
+			(D.f[ BNE ])[kb  ] = mfaac;
+			(D.f[ BSE ])[kbs ] = mfacc;
+			(D.f[ TNW ])[kw  ] = mfcaa;
+			(D.f[ TSW ])[ksw ] = mfcca;
+			(D.f[ BNW ])[kbw ] = mfcac;
+			(D.f[ BSW ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cumulant/CumulantCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cumulant/CumulantCompSP27_Device.cu
index e76926b49b44eecd4b42a074e529d6f4af2936ea..422d642def822e6e37dbb7efbcb9a1439af677fd 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cumulant/CumulantCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/Cumulant/CumulantCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_Cum_Comp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_Cum_Comp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,42 +126,42 @@ extern "C" __global__ void LB_Kernel_Cum_Comp_SP_27(real omega,
 			unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real E = (D.f[dirE])[ke];// +  c2over27 ;
-			real W = (D.f[dirW])[kw];// +  c2over27 ;
-			real N = (D.f[dirN])[kn];// +  c2over27 ;
-			real S = (D.f[dirS])[ks];// +  c2over27 ;
-			real F = (D.f[dirT])[kt];// +  c2over27 ;
-			real B = (D.f[dirB])[kb];// +  c2over27 ;
-			real Ne = (D.f[dirNE])[kne];// +  c1over54 ;
-			real Sw = (D.f[dirSW])[ksw];// +  c1over54 ;
-			real Se = (D.f[dirSE])[kse];// +  c1over54 ;
-			real Nw = (D.f[dirNW])[knw];// +  c1over54 ;
-			real Ef = (D.f[dirTE])[kte];// +  c1over54 ;
-			real Wb = (D.f[dirBW])[kbw];// +  c1over54 ;
-			real Eb = (D.f[dirBE])[kbe];// +  c1over54 ;
-			real Wf = (D.f[dirTW])[ktw];// +  c1over54 ;
-			real Nf = (D.f[dirTN])[ktn];// +  c1over54 ;
-			real Sb = (D.f[dirBS])[kbs];// +  c1over54 ;
-			real Nb = (D.f[dirBN])[kbn];// +  c1over54 ;
-			real Sf = (D.f[dirTS])[kts];// +  c1over54 ;
-			real R = (D.f[dirZERO])[kzero];// +  c8over27 ;
-			real Nef = (D.f[dirTNE])[ktne];// +  c1over216;
-			real Swf = (D.f[dirTSW])[ktsw];// +  c1over216;
-			real Sef = (D.f[dirTSE])[ktse];// +  c1over216;
-			real Nwf = (D.f[dirTNW])[ktnw];// +  c1over216;
-			real Neb = (D.f[dirBNE])[kbne];// +  c1over216;
-			real Swb = (D.f[dirBSW])[kbsw];// +  c1over216;
-			real Seb = (D.f[dirBSE])[kbse];// +  c1over216;
-			real Nwb = (D.f[dirBNW])[kbnw];// +  c1over216;
+			real f_E = (D.f[E])[ke];// +  c2over27 ;
+			real f_W = (D.f[W])[kw];// +  c2over27 ;
+			real f_N = (D.f[N])[kn];// +  c2over27 ;
+			real f_S = (D.f[S])[ks];// +  c2over27 ;
+			real f_T = (D.f[T])[kt];// +  c2over27 ;
+			real f_B = (D.f[B])[kb];// +  c2over27 ;
+			real f_NE = (D.f[NE])[kne];// +  c1over54 ;
+			real f_SS = (D.f[SW])[ksw];// +  c1over54 ;
+			real f_SE = (D.f[SE])[kse];// +  c1over54 ;
+			real f_NW = (D.f[NW])[knw];// +  c1over54 ;
+			real f_TE = (D.f[TE])[kte];// +  c1over54 ;
+			real f_BW = (D.f[BW])[kbw];// +  c1over54 ;
+			real f_EB = (D.f[BE])[kbe];// +  c1over54 ;
+			real f_TW = (D.f[TW])[ktw];// +  c1over54 ;
+			real f_TN = (D.f[TN])[ktn];// +  c1over54 ;
+			real f_BS = (D.f[BS])[kbs];// +  c1over54 ;
+			real f_BN = (D.f[BN])[kbn];// +  c1over54 ;
+			real f_TS = (D.f[TS])[kts];// +  c1over54 ;
+			real f_R = (D.f[REST])[kzero];// +  c8over27 ;
+			real f_TNE = (D.f[TNE])[ktne];// +  c1over216;
+			real f_TSW = (D.f[TSW])[ktsw];// +  c1over216;
+			real f_TSE = (D.f[TSE])[ktse];// +  c1over216;
+			real f_TNW = (D.f[TNW])[ktnw];// +  c1over216;
+			real f_BNE = (D.f[BNE])[kbne];// +  c1over216;
+			real f_BSW = (D.f[BSW])[kbsw];// +  c1over216;
+			real f_BSE = (D.f[BSE])[kbse];// +  c1over216;
+			real f_BNW = (D.f[BNW])[kbnw];// +  c1over216;
 										   ////////////////////////////////////////////////////////////////////////////////////
 			real fx = c0o1;
 			real fy = c0o1;
 			real fz = c0o1;
 			////////////////////////////////////////////////////////////////////////////////////
-			real rho = Nw + W + Sw + S + Se + E + Ne + N + R + Nf + Nb + Sf + Sb + Ef + Eb + Wf + Wb + Nwf + Nwb + Nef + Neb + Swf + Swb + Sef + Seb + F + B + c1o1;// ACHTUNG ne EINS !!!!!!!!
-			real pix = (Ne + E + Se + Ef + Eb - Nw - W - Sw - Wf - Wb + Nef + Neb + Sef + Seb - Nwf - Nwb - Swf - Swb);
-			real piy = (Ne + N + Nw + Nf + Nb - Se - S - Sw - Sf - Sb + Nef + Neb + Nwf + Nwb - Sef - Seb - Swf - Swb);
-			real piz = (Nf + Sf + Wf + Ef + F - Nb - Sb - Wb - Eb - B + Nef + Nwf + Sef + Swf - Neb - Nwb - Seb - Swb);
+			real rho = f_NW + f_W + f_SS + f_S + f_SE + f_E + f_NE + f_N + f_R + f_TN + f_BN + f_TS + f_BS + f_TE + f_EB + f_TW + f_BW + f_TNW + f_BNW + f_TNE + f_BNE + f_TSW + f_BSW + f_TSE + f_BSE + f_T + f_B + c1o1;// ACHTUNG ne EINS !!!!!!!!
+			real pix = (f_NE + f_E + f_SE + f_TE + f_EB - f_NW - f_W - f_SS - f_TW - f_BW + f_TNE + f_BNE + f_TSE + f_BSE - f_TNW - f_BNW - f_TSW - f_BSW);
+			real piy = (f_NE + f_N + f_NW + f_TN + f_BN - f_SE - f_S - f_SS - f_TS - f_BS + f_TNE + f_BNE + f_TNW + f_BNW - f_TSE - f_BSE - f_TSW - f_BSW);
+			real piz = (f_TN + f_TS + f_TW + f_TE + f_T - f_BN - f_BS - f_BW - f_EB - f_B + f_TNE + f_TNW + f_TSE + f_TSW - f_BNE - f_BNW - f_BSE - f_BSW);
 			real vvx = pix / rho + fx;
 			real vvy = piy / rho + fy;
 			real vvz = piz / rho + fz;
@@ -168,33 +169,33 @@ extern "C" __global__ void LB_Kernel_Cum_Comp_SP_27(real omega,
 			real vy2 = vvy*vvy;
 			real vz2 = vvz*vvz;
 			////////////////////////////////////////////////////////////////////////////////////
-			real mfaaa = Swb;
-			real mfaab = Sw;
-			real mfaac = Swf;
-			real mfaba = Wb;
-			real mfabb = W;
-			real mfabc = Wf;
-			real mfbaa = Sb;
-			real mfbab = S;
-			real mfbac = Sf;
-			real mfbba = B;
-			real mfbbb = R;
-			real mfbbc = F;
-			real mfaca = Nwb;
-			real mfacb = Nw;
-			real mfacc = Nwf;
-			real mfcaa = Seb;
-			real mfcab = Se;
-			real mfcac = Sef;
-			real mfcca = Neb;
-			real mfccb = Ne;
-			real mfccc = Nef;
-			real mfbca = Nb;
-			real mfbcb = N;
-			real mfbcc = Nf;
-			real mfcba = Eb;
-			real mfcbb = E;
-			real mfcbc = Ef;
+			real mfaaa = f_BSW;
+			real mfaab = f_SS;
+			real mfaac = f_TSW;
+			real mfaba = f_BW;
+			real mfabb = f_W;
+			real mfabc = f_TW;
+			real mfbaa = f_BS;
+			real mfbab = f_S;
+			real mfbac = f_TS;
+			real mfbba = f_B;
+			real mfbbb = f_R;
+			real mfbbc = f_T;
+			real mfaca = f_BNW;
+			real mfacb = f_NW;
+			real mfacc = f_TNW;
+			real mfcaa = f_BSE;
+			real mfcab = f_SE;
+			real mfcac = f_TSE;
+			real mfcca = f_BNE;
+			real mfccb = f_NE;
+			real mfccc = f_TNE;
+			real mfbca = f_BN;
+			real mfbcb = f_N;
+			real mfbcc = f_TN;
+			real mfcba = f_EB;
+			real mfcbb = f_E;
+			real mfcbc = f_TE;
 			real m0, m1, m2;
 			real wadjust;
 			real qudricLimit = c1o100;
@@ -873,33 +874,33 @@ extern "C" __global__ void LB_Kernel_Cum_Comp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[ke] = mfabb;// -  c2over27 ;//                                                                     
-			(D.f[dirW])[kw] = mfcbb;// -  c2over27 ;                                                                     
-			(D.f[dirN])[kn] = mfbab;// -  c2over27 ;
-			(D.f[dirS])[ks] = mfbcb;// -  c2over27 ;
-			(D.f[dirT])[kt] = mfbba;// -  c2over27 ;
-			(D.f[dirB])[kb] = mfbbc;// -  c2over27 ;
-			(D.f[dirNE])[kne] = mfaab;// -  c1over54 ;
-			(D.f[dirSW])[ksw] = mfccb;// -  c1over54 ;
-			(D.f[dirSE])[kse] = mfacb;// -  c1over54 ;
-			(D.f[dirNW])[knw] = mfcab;// -  c1over54 ;
-			(D.f[dirTE])[kte] = mfaba;// -  c1over54 ;
-			(D.f[dirBW])[kbw] = mfcbc;// -  c1over54 ;
-			(D.f[dirBE])[kbe] = mfabc;// -  c1over54 ;
-			(D.f[dirTW])[ktw] = mfcba;// -  c1over54 ;
-			(D.f[dirTN])[ktn] = mfbaa;// -  c1over54 ;
-			(D.f[dirBS])[kbs] = mfbcc;// -  c1over54 ;
-			(D.f[dirBN])[kbn] = mfbac;// -  c1over54 ;
-			(D.f[dirTS])[kts] = mfbca;// -  c1over54 ;
-			(D.f[dirZERO])[kzero] = mfbbb;// -  c8over27 ;
-			(D.f[dirTNE])[ktne] = mfaaa;// -  c1over216;
-			(D.f[dirTSE])[ktse] = mfaca;// -  c1over216;
-			(D.f[dirBNE])[kbne] = mfaac;// -  c1over216;
-			(D.f[dirBSE])[kbse] = mfacc;// -  c1over216;
-			(D.f[dirTNW])[ktnw] = mfcaa;// -  c1over216;
-			(D.f[dirTSW])[ktsw] = mfcca;// -  c1over216;
-			(D.f[dirBNW])[kbnw] = mfcac;// -  c1over216;
-			(D.f[dirBSW])[kbsw] = mfccc;// -  c1over216;
+			(D.f[E])[ke] = mfabb;// -  c2over27 ;//                                                                     
+			(D.f[W])[kw] = mfcbb;// -  c2over27 ;                                                                     
+			(D.f[N])[kn] = mfbab;// -  c2over27 ;
+			(D.f[S])[ks] = mfbcb;// -  c2over27 ;
+			(D.f[T])[kt] = mfbba;// -  c2over27 ;
+			(D.f[B])[kb] = mfbbc;// -  c2over27 ;
+			(D.f[NE])[kne] = mfaab;// -  c1over54 ;
+			(D.f[SW])[ksw] = mfccb;// -  c1over54 ;
+			(D.f[SE])[kse] = mfacb;// -  c1over54 ;
+			(D.f[NW])[knw] = mfcab;// -  c1over54 ;
+			(D.f[TE])[kte] = mfaba;// -  c1over54 ;
+			(D.f[BW])[kbw] = mfcbc;// -  c1over54 ;
+			(D.f[BE])[kbe] = mfabc;// -  c1over54 ;
+			(D.f[TW])[ktw] = mfcba;// -  c1over54 ;
+			(D.f[TN])[ktn] = mfbaa;// -  c1over54 ;
+			(D.f[BS])[kbs] = mfbcc;// -  c1over54 ;
+			(D.f[BN])[kbn] = mfbac;// -  c1over54 ;
+			(D.f[TS])[kts] = mfbca;// -  c1over54 ;
+			(D.f[REST])[kzero] = mfbbb;// -  c8over27 ;
+			(D.f[TNE])[ktne] = mfaaa;// -  c1over216;
+			(D.f[TSE])[ktse] = mfaca;// -  c1over216;
+			(D.f[BNE])[kbne] = mfaac;// -  c1over216;
+			(D.f[BSE])[kbse] = mfacc;// -  c1over216;
+			(D.f[TNW])[ktnw] = mfcaa;// -  c1over216;
+			(D.f[TSW])[ktsw] = mfcca;// -  c1over216;
+			(D.f[BNW])[kbnw] = mfcac;// -  c1over216;
+			(D.f[BSW])[kbsw] = mfccc;// -  c1over216;
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantAll4/CumulantAll4CompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantAll4/CumulantAll4CompSP27_Device.cu
index 599892c2fb170e3cba2b12356cbfbf1497a94edd..a52e771c2b5294eee72c9c81d29b8f2e8de7e49e 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantAll4/CumulantAll4CompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantAll4/CumulantAll4CompSP27_Device.cu
@@ -1,10 +1,11 @@
 #include "CumulantAll4CompSP27_Device.cuh"
 
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
@@ -41,63 +42,63 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -159,33 +160,33 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -596,9 +597,9 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			real O6 = c1o1;
 			////////////////////////////////////////////////////////////
 
-			real A = (c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * (omega - c6o1) + OxxPyyPzz * OxxPyyPzz * (omega * (c10o1 - c3o1 * omega) - c4o1)) /
+			real factorA = (c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * (omega - c6o1) + OxxPyyPzz * OxxPyyPzz * (omega * (c10o1 - c3o1 * omega) - c4o1)) /
 				((omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega));
-			real B = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) /
+			real factorB = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) /
 				(c3o1 * (omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega));
 
 
@@ -613,9 +614,9 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho));
 
 			//5.
-			real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*B / (c2o1 + c3o1 * B))) / rho;
-			real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*B / (c2o1 + c3o1 * B))) / rho;
-			real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*B / (c2o1 + c3o1 * B))) / rho;
+			real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho;
+			real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho;
+			real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho;
 
 			real scaleD2 =
 				(-c27o1 * omega*(omega - OxxPyyPzz)*(c2o1 * OxxPyyPzz + omega*(-c8o1 + c3o1 * OxxPyyPzz))*(-c4o1 * OxxPyyPzz + omega*(-c2o1 + c3o1 * OxxPyyPzz))*O5) /
@@ -791,12 +792,12 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			//CUMbbc = -O4*(one / omega - c1o2)*Dxy*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbbc);
 			//CUMbcb = -O4*(one / omega - c1o2)*Dxz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbcb);
 			//CUMcbb = -O4*(one / omega - c1o2)*Dyz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMcbb);
-			CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-			CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-			CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+			CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+			CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+			CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+			CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+			CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+			CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 			//////////////////////////////////////////////////////////////////////////
 
 
@@ -821,9 +822,9 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho));
 
 			//5.
-			mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*B / (c2o1 + c3o1 * B))) / rho;
-			mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*B / (c2o1 + c3o1 * B))) / rho;
-			mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*B / (c2o1 + c3o1 * B))) / rho;
+			mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho;
+			mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho;
+			mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho;
 
 			//6.
 
@@ -1060,33 +1061,33 @@ extern "C" __global__ void LB_Kernel_Cumulant_D3Q27All4(	real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15/CumulantK15Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15/CumulantK15Comp_Device.cu
index 7349be5847c2ea936f7d999a4ce91aee02c17973..a8ec8d7e25beb6b0f88c53ec9b2eade11f760b4b 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15/CumulantK15Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15/CumulantK15Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK15Comp(real omega,
@@ -38,63 +39,63 @@ extern "C" __global__ void LB_Kernel_CumulantK15Comp(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -155,33 +156,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15Comp(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -1241,33 +1242,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15Comp(real omega,
 					((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb;
 			mfbbb += drho - drhoPost;
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Bulk/CumulantK15BulkComp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Bulk/CumulantK15BulkComp_Device.cu
index 986e8163964bef6a62f1884f4e949f0b590ab859..de7f5ce74c4dfd5ea68bb6bdd45fcc3d9fa3ab53 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Bulk/CumulantK15BulkComp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Bulk/CumulantK15BulkComp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK15BulkComp(real omega,
@@ -38,63 +39,63 @@ extern "C" __global__ void LB_Kernel_CumulantK15BulkComp(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -155,33 +156,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15BulkComp(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -911,33 +912,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15BulkComp(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Sponge/CumulantK15SpongeComp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Sponge/CumulantK15SpongeComp_Device.cu
index c8be85d2ef05725b12a4b2e37bd262c430717723..a65aa95802971e40af9f50c93fda578d4be24ebb 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Sponge/CumulantK15SpongeComp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK15Sponge/CumulantK15SpongeComp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK15SpongeComp(real omegaIn,
@@ -39,63 +40,63 @@ extern "C" __global__ void LB_Kernel_CumulantK15SpongeComp(real omegaIn,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -128,33 +129,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15SpongeComp(real omegaIn,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];
-			real mfabb = (D.f[dirW])[kw];
-			real mfbcb = (D.f[dirN])[k];
-			real mfbab = (D.f[dirS])[ks];
-			real mfbbc = (D.f[dirT])[k];
-			real mfbba = (D.f[dirB])[kb];
-			real mfccb = (D.f[dirNE])[k];
-			real mfaab = (D.f[dirSW])[ksw];
-			real mfcab = (D.f[dirSE])[ks];
-			real mfacb = (D.f[dirNW])[kw];
-			real mfcbc = (D.f[dirTE])[k];
-			real mfaba = (D.f[dirBW])[kbw];
-			real mfcba = (D.f[dirBE])[kb];
-			real mfabc = (D.f[dirTW])[kw];
-			real mfbcc = (D.f[dirTN])[k];
-			real mfbaa = (D.f[dirBS])[kbs];
-			real mfbca = (D.f[dirBN])[kb];
-			real mfbac = (D.f[dirTS])[ks];
-			real mfbbb = (D.f[dirZERO])[k];
-			real mfccc = (D.f[dirTNE])[k];
-			real mfaac = (D.f[dirTSW])[ksw];
-			real mfcac = (D.f[dirTSE])[ks];
-			real mfacc = (D.f[dirTNW])[kw];
-			real mfcca = (D.f[dirBNE])[kb];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];
-			real mfaca = (D.f[dirBNW])[kbw];
+			real mfcbb = (D.f[E])[k];
+			real mfabb = (D.f[W])[kw];
+			real mfbcb = (D.f[N])[k];
+			real mfbab = (D.f[S])[ks];
+			real mfbbc = (D.f[T])[k];
+			real mfbba = (D.f[B])[kb];
+			real mfccb = (D.f[NE])[k];
+			real mfaab = (D.f[SW])[ksw];
+			real mfcab = (D.f[SE])[ks];
+			real mfacb = (D.f[NW])[kw];
+			real mfcbc = (D.f[TE])[k];
+			real mfaba = (D.f[BW])[kbw];
+			real mfcba = (D.f[BE])[kb];
+			real mfabc = (D.f[TW])[kw];
+			real mfbcc = (D.f[TN])[k];
+			real mfbaa = (D.f[BS])[kbs];
+			real mfbca = (D.f[BN])[kb];
+			real mfbac = (D.f[TS])[ks];
+			real mfbbb = (D.f[REST])[k];
+			real mfccc = (D.f[TNE])[k];
+			real mfaac = (D.f[TSW])[ksw];
+			real mfcac = (D.f[TSE])[ks];
+			real mfacc = (D.f[TNW])[kw];
+			real mfcca = (D.f[BNE])[kb];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];
+			real mfaca = (D.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -892,33 +893,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15SpongeComp(real omegaIn,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;
-			(D.f[dirW])[kw] = mfcbb;
-			(D.f[dirN])[k] = mfbab;
-			(D.f[dirS])[ks] = mfbcb;
-			(D.f[dirT])[k] = mfbba;
-			(D.f[dirB])[kb] = mfbbc;
-			(D.f[dirNE])[k] = mfaab;
-			(D.f[dirSW])[ksw] = mfccb;
-			(D.f[dirSE])[ks] = mfacb;
-			(D.f[dirNW])[kw] = mfcab;
-			(D.f[dirTE])[k] = mfaba;
-			(D.f[dirBW])[kbw] = mfcbc;
-			(D.f[dirBE])[kb] = mfabc;
-			(D.f[dirTW])[kw] = mfcba;
-			(D.f[dirTN])[k] = mfbaa;
-			(D.f[dirBS])[kbs] = mfbcc;
-			(D.f[dirBN])[kb] = mfbac;
-			(D.f[dirTS])[ks] = mfbca;
-			(D.f[dirZERO])[k] = mfbbb;
-			(D.f[dirTNE])[k] = mfaaa;
-			(D.f[dirTSE])[ks] = mfaca;
-			(D.f[dirBNE])[kb] = mfaac;
-			(D.f[dirBSE])[kbs] = mfacc;
-			(D.f[dirTNW])[kw] = mfcaa;
-			(D.f[dirTSW])[ksw] = mfcca;
-			(D.f[dirBNW])[kbw] = mfcac;
-			(D.f[dirBSW])[kbsw] = mfccc;
+			(D.f[E])[k] = mfabb;
+			(D.f[W])[kw] = mfcbb;
+			(D.f[N])[k] = mfbab;
+			(D.f[S])[ks] = mfbcb;
+			(D.f[T])[k] = mfbba;
+			(D.f[B])[kb] = mfbbc;
+			(D.f[NE])[k] = mfaab;
+			(D.f[SW])[ksw] = mfccb;
+			(D.f[SE])[ks] = mfacb;
+			(D.f[NW])[kw] = mfcab;
+			(D.f[TE])[k] = mfaba;
+			(D.f[BW])[kbw] = mfcbc;
+			(D.f[BE])[kb] = mfabc;
+			(D.f[TW])[kw] = mfcba;
+			(D.f[TN])[k] = mfbaa;
+			(D.f[BS])[kbs] = mfbcc;
+			(D.f[BN])[kb] = mfbac;
+			(D.f[TS])[ks] = mfbca;
+			(D.f[REST])[k] = mfbbb;
+			(D.f[TNE])[k] = mfaaa;
+			(D.f[TSE])[ks] = mfaca;
+			(D.f[BNE])[kb] = mfaac;
+			(D.f[BSE])[kbs] = mfacc;
+			(D.f[TNW])[kw] = mfcaa;
+			(D.f[TSW])[ksw] = mfcca;
+			(D.f[BNW])[kbw] = mfcac;
+			(D.f[BSW])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17/CumulantK17Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17/CumulantK17Comp_Device.cu
index 4c20e465596a747389743b6658edecc9b3887f33..9bc2bb5877197ab21c2cd82b4b672c8660a12211 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17/CumulantK17Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17/CumulantK17Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 
@@ -40,63 +41,63 @@ extern "C" __global__ void LB_Kernel_CumulantK17Comp(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -157,33 +158,33 @@ extern "C" __global__ void LB_Kernel_CumulantK17Comp(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -727,8 +728,8 @@ extern "C" __global__ void LB_Kernel_CumulantK17Comp(real omega,
 			//	wadjust    = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit);
 			//CUMcbb    += wadjust * (-CUMcbb); 
 			//////////////////////////////////////////////////////////////////////////
-			real A = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega);
-			real B = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega);
+			real factorA = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega);
+			real factorB = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega);
 			//////////////////////////////////////////////////////////////////////////
 			//ohne limiter
 			//CUMacc += O4 * (-CUMacc); 
@@ -737,12 +738,12 @@ extern "C" __global__ void LB_Kernel_CumulantK17Comp(real omega,
 			//CUMbbc += O4 * (-CUMbbc); 
 			//CUMbcb += O4 * (-CUMbcb); 
 			//CUMcbb += O4 * (-CUMcbb); 
-			CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-			CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-			CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+			CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+			CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+			CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+			CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+			CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+			CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 			//////////////////////////////////////////////////////////////////////////
 
 
@@ -1006,33 +1007,33 @@ extern "C" __global__ void LB_Kernel_CumulantK17Comp(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17Bulk/CumulantK17BulkComp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17Bulk/CumulantK17BulkComp_Device.cu
index 0e10a2d9540fd00d231f3d27ea4bf535949b8838..dce86433b943a54192a41d5ea1831b4e3fe76ce1 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17Bulk/CumulantK17BulkComp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17Bulk/CumulantK17BulkComp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK17BulkComp(real omega,
@@ -39,63 +40,63 @@ extern "C" __global__ void LB_Kernel_CumulantK17BulkComp(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -128,33 +129,33 @@ extern "C" __global__ void LB_Kernel_CumulantK17BulkComp(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -595,9 +596,9 @@ extern "C" __global__ void LB_Kernel_CumulantK17BulkComp(real omega,
 			//4.
 			//////////////////////////////////////////////////////////////////////////
 			//mit limiter
-			real A = (c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * (omega - c6o1) + OxxPyyPzz * OxxPyyPzz * (omega * (c10o1 - c3o1 * omega) - c4o1)) /
+			real factorA = (c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * (omega - c6o1) + OxxPyyPzz * OxxPyyPzz * (omega * (c10o1 - c3o1 * omega) - c4o1)) /
 				((omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega));
-			real B = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) /
+			real factorB = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) /
 				(c3o1 * (omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega));
 			//////////////////////////////////////////////////////////////////////////
 			//ohne limiter
@@ -615,12 +616,12 @@ extern "C" __global__ void LB_Kernel_CumulantK17BulkComp(real omega,
 			//CUMbcb = -O4*(one/omega-c1o2)*Dxz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMbcb);
 			//CUMcbb = -O4*(one/omega-c1o2)*Dyz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMcbb);
 			//with bulk viscosity 
-			CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-			CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-			CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+			CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+			CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+			CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+			CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+			CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+			CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 
 
 			//////////////////////////////////////////////////////////////////////////
@@ -885,33 +886,33 @@ extern "C" __global__ void LB_Kernel_CumulantK17BulkComp(real omega,
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu
index 2b26cd2b608fb2237002d9471f518a89d78ca32b..6aab2076860fd2ea22cec8c3948ae2639f5c1780 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chim/CumulantK17CompChim_Device.cu
@@ -32,10 +32,11 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "Kernel/ChimeraTransformation.h"
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -65,7 +66,7 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
     //! The cumulant kernel is executed in the following steps
     //!
     ////////////////////////////////////////////////////////////////////////////////
-    //! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim.
+    //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim.
     //!
     const unsigned x = threadIdx.x;
     const unsigned y = blockIdx.x;
@@ -87,61 +88,61 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
         //!
         Distributions27 dist;
         if (isEvenTimestep) {
-            dist.f[dirE]    = &distributions[dirE * size_Mat];
-            dist.f[dirW]    = &distributions[dirW * size_Mat];
-            dist.f[dirN]    = &distributions[dirN * size_Mat];
-            dist.f[dirS]    = &distributions[dirS * size_Mat];
-            dist.f[dirT]    = &distributions[dirT * size_Mat];
-            dist.f[dirB]    = &distributions[dirB * size_Mat];
-            dist.f[dirNE]   = &distributions[dirNE * size_Mat];
-            dist.f[dirSW]   = &distributions[dirSW * size_Mat];
-            dist.f[dirSE]   = &distributions[dirSE * size_Mat];
-            dist.f[dirNW]   = &distributions[dirNW * size_Mat];
-            dist.f[dirTE]   = &distributions[dirTE * size_Mat];
-            dist.f[dirBW]   = &distributions[dirBW * size_Mat];
-            dist.f[dirBE]   = &distributions[dirBE * size_Mat];
-            dist.f[dirTW]   = &distributions[dirTW * size_Mat];
-            dist.f[dirTN]   = &distributions[dirTN * size_Mat];
-            dist.f[dirBS]   = &distributions[dirBS * size_Mat];
-            dist.f[dirBN]   = &distributions[dirBN * size_Mat];
-            dist.f[dirTS]   = &distributions[dirTS * size_Mat];
-            dist.f[dirZERO] = &distributions[dirZERO * size_Mat];
-            dist.f[dirTNE]  = &distributions[dirTNE * size_Mat];
-            dist.f[dirTSW]  = &distributions[dirTSW * size_Mat];
-            dist.f[dirTSE]  = &distributions[dirTSE * size_Mat];
-            dist.f[dirTNW]  = &distributions[dirTNW * size_Mat];
-            dist.f[dirBNE]  = &distributions[dirBNE * size_Mat];
-            dist.f[dirBSW]  = &distributions[dirBSW * size_Mat];
-            dist.f[dirBSE]  = &distributions[dirBSE * size_Mat];
-            dist.f[dirBNW]  = &distributions[dirBNW * size_Mat];
+            dist.f[E]    = &distributions[E * size_Mat];
+            dist.f[W]    = &distributions[W * size_Mat];
+            dist.f[N]    = &distributions[N * size_Mat];
+            dist.f[S]    = &distributions[S * size_Mat];
+            dist.f[T]    = &distributions[T * size_Mat];
+            dist.f[B]    = &distributions[B * size_Mat];
+            dist.f[NE]   = &distributions[NE * size_Mat];
+            dist.f[SW]   = &distributions[SW * size_Mat];
+            dist.f[SE]   = &distributions[SE * size_Mat];
+            dist.f[NW]   = &distributions[NW * size_Mat];
+            dist.f[TE]   = &distributions[TE * size_Mat];
+            dist.f[BW]   = &distributions[BW * size_Mat];
+            dist.f[BE]   = &distributions[BE * size_Mat];
+            dist.f[TW]   = &distributions[TW * size_Mat];
+            dist.f[TN]   = &distributions[TN * size_Mat];
+            dist.f[BS]   = &distributions[BS * size_Mat];
+            dist.f[BN]   = &distributions[BN * size_Mat];
+            dist.f[TS]   = &distributions[TS * size_Mat];
+            dist.f[REST] = &distributions[REST * size_Mat];
+            dist.f[TNE]  = &distributions[TNE * size_Mat];
+            dist.f[TSW]  = &distributions[TSW * size_Mat];
+            dist.f[TSE]  = &distributions[TSE * size_Mat];
+            dist.f[TNW]  = &distributions[TNW * size_Mat];
+            dist.f[BNE]  = &distributions[BNE * size_Mat];
+            dist.f[BSW]  = &distributions[BSW * size_Mat];
+            dist.f[BSE]  = &distributions[BSE * size_Mat];
+            dist.f[BNW]  = &distributions[BNW * size_Mat];
         } else {
-            dist.f[dirW]    = &distributions[dirE * size_Mat];
-            dist.f[dirE]    = &distributions[dirW * size_Mat];
-            dist.f[dirS]    = &distributions[dirN * size_Mat];
-            dist.f[dirN]    = &distributions[dirS * size_Mat];
-            dist.f[dirB]    = &distributions[dirT * size_Mat];
-            dist.f[dirT]    = &distributions[dirB * size_Mat];
-            dist.f[dirSW]   = &distributions[dirNE * size_Mat];
-            dist.f[dirNE]   = &distributions[dirSW * size_Mat];
-            dist.f[dirNW]   = &distributions[dirSE * size_Mat];
-            dist.f[dirSE]   = &distributions[dirNW * size_Mat];
-            dist.f[dirBW]   = &distributions[dirTE * size_Mat];
-            dist.f[dirTE]   = &distributions[dirBW * size_Mat];
-            dist.f[dirTW]   = &distributions[dirBE * size_Mat];
-            dist.f[dirBE]   = &distributions[dirTW * size_Mat];
-            dist.f[dirBS]   = &distributions[dirTN * size_Mat];
-            dist.f[dirTN]   = &distributions[dirBS * size_Mat];
-            dist.f[dirTS]   = &distributions[dirBN * size_Mat];
-            dist.f[dirBN]   = &distributions[dirTS * size_Mat];
-            dist.f[dirZERO] = &distributions[dirZERO * size_Mat];
-            dist.f[dirBSW]  = &distributions[dirTNE * size_Mat];
-            dist.f[dirBNE]  = &distributions[dirTSW * size_Mat];
-            dist.f[dirBNW]  = &distributions[dirTSE * size_Mat];
-            dist.f[dirBSE]  = &distributions[dirTNW * size_Mat];
-            dist.f[dirTSW]  = &distributions[dirBNE * size_Mat];
-            dist.f[dirTNE]  = &distributions[dirBSW * size_Mat];
-            dist.f[dirTNW]  = &distributions[dirBSE * size_Mat];
-            dist.f[dirTSE]  = &distributions[dirBNW * size_Mat];
+            dist.f[W]    = &distributions[E * size_Mat];
+            dist.f[E]    = &distributions[W * size_Mat];
+            dist.f[S]    = &distributions[N * size_Mat];
+            dist.f[N]    = &distributions[S * size_Mat];
+            dist.f[B]    = &distributions[T * size_Mat];
+            dist.f[T]    = &distributions[B * size_Mat];
+            dist.f[SW]   = &distributions[NE * size_Mat];
+            dist.f[NE]   = &distributions[SW * size_Mat];
+            dist.f[NW]   = &distributions[SE * size_Mat];
+            dist.f[SE]   = &distributions[NW * size_Mat];
+            dist.f[BW]   = &distributions[TE * size_Mat];
+            dist.f[TE]   = &distributions[BW * size_Mat];
+            dist.f[TW]   = &distributions[BE * size_Mat];
+            dist.f[BE]   = &distributions[TW * size_Mat];
+            dist.f[BS]   = &distributions[TN * size_Mat];
+            dist.f[TN]   = &distributions[BS * size_Mat];
+            dist.f[TS]   = &distributions[BN * size_Mat];
+            dist.f[BN]   = &distributions[TS * size_Mat];
+            dist.f[REST] = &distributions[REST * size_Mat];
+            dist.f[BSW]  = &distributions[TNE * size_Mat];
+            dist.f[BNE]  = &distributions[TSW * size_Mat];
+            dist.f[BNW]  = &distributions[TSE * size_Mat];
+            dist.f[BSE]  = &distributions[TNW * size_Mat];
+            dist.f[TSW]  = &distributions[BNE * size_Mat];
+            dist.f[TNE]  = &distributions[BSW * size_Mat];
+            dist.f[TNW]  = &distributions[BSE * size_Mat];
+            dist.f[TSE]  = &distributions[BNW * size_Mat];
         }
         ////////////////////////////////////////////////////////////////////////////////
         //! - Set neighbor indices (necessary for indirect addressing)
@@ -155,33 +156,33 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Set local distributions
         //!
-        real mfcbb = (dist.f[dirE])[k];
-        real mfabb = (dist.f[dirW])[kw];
-        real mfbcb = (dist.f[dirN])[k];
-        real mfbab = (dist.f[dirS])[ks];
-        real mfbbc = (dist.f[dirT])[k];
-        real mfbba = (dist.f[dirB])[kb];
-        real mfccb = (dist.f[dirNE])[k];
-        real mfaab = (dist.f[dirSW])[ksw];
-        real mfcab = (dist.f[dirSE])[ks];
-        real mfacb = (dist.f[dirNW])[kw];
-        real mfcbc = (dist.f[dirTE])[k];
-        real mfaba = (dist.f[dirBW])[kbw];
-        real mfcba = (dist.f[dirBE])[kb];
-        real mfabc = (dist.f[dirTW])[kw];
-        real mfbcc = (dist.f[dirTN])[k];
-        real mfbaa = (dist.f[dirBS])[kbs];
-        real mfbca = (dist.f[dirBN])[kb];
-        real mfbac = (dist.f[dirTS])[ks];
-        real mfbbb = (dist.f[dirZERO])[k];
-        real mfccc = (dist.f[dirTNE])[k];
-        real mfaac = (dist.f[dirTSW])[ksw];
-        real mfcac = (dist.f[dirTSE])[ks];
-        real mfacc = (dist.f[dirTNW])[kw];
-        real mfcca = (dist.f[dirBNE])[kb];
-        real mfaaa = (dist.f[dirBSW])[kbsw];
-        real mfcaa = (dist.f[dirBSE])[kbs];
-        real mfaca = (dist.f[dirBNW])[kbw];
+        real mfcbb = (dist.f[E])[k];
+        real mfabb = (dist.f[W])[kw];
+        real mfbcb = (dist.f[N])[k];
+        real mfbab = (dist.f[S])[ks];
+        real mfbbc = (dist.f[T])[k];
+        real mfbba = (dist.f[B])[kb];
+        real mfccb = (dist.f[NE])[k];
+        real mfaab = (dist.f[SW])[ksw];
+        real mfcab = (dist.f[SE])[ks];
+        real mfacb = (dist.f[NW])[kw];
+        real mfcbc = (dist.f[TE])[k];
+        real mfaba = (dist.f[BW])[kbw];
+        real mfcba = (dist.f[BE])[kb];
+        real mfabc = (dist.f[TW])[kw];
+        real mfbcc = (dist.f[TN])[k];
+        real mfbaa = (dist.f[BS])[kbs];
+        real mfbca = (dist.f[BN])[kb];
+        real mfbac = (dist.f[TS])[ks];
+        real mfbbb = (dist.f[REST])[k];
+        real mfccc = (dist.f[TNE])[k];
+        real mfaac = (dist.f[TSW])[ksw];
+        real mfcac = (dist.f[TSE])[ks];
+        real mfacc = (dist.f[TNW])[kw];
+        real mfcca = (dist.f[BNE])[kb];
+        real mfaaa = (dist.f[BSW])[kbsw];
+        real mfcaa = (dist.f[BSE])[kbs];
+        real mfaca = (dist.f[BNW])[kbw];
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
         //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015),
@@ -329,13 +330,13 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
         real O6 = c1o1;
 
         ////////////////////////////////////////////////////////////////////////////////////
-        //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
+        //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
         //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for
         //! different bulk viscosity).
         //!
-        real A = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
-        real B = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega);
+        real factorA = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
+        real factorB = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega);
 
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Compute cumulants from central moments according to Eq. (20)-(23) in
@@ -492,12 +493,12 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
         //! to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
         //!
-        CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-        CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-        CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-        CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-        CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-        CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+        CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+        CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+        CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+        CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+        CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+        CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 
         //////////////////////////////////////////////////////////////////////////
         // 5.
@@ -622,32 +623,32 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChim(
         //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017),
         //! DOI:10.3390/computation5020019 ]</b></a>
         //!
-        (dist.f[dirE])[k]      = mfabb;
-        (dist.f[dirW])[kw]     = mfcbb;
-        (dist.f[dirN])[k]      = mfbab;
-        (dist.f[dirS])[ks]     = mfbcb;
-        (dist.f[dirT])[k]      = mfbba;
-        (dist.f[dirB])[kb]     = mfbbc;
-        (dist.f[dirNE])[k]     = mfaab;
-        (dist.f[dirSW])[ksw]   = mfccb;
-        (dist.f[dirSE])[ks]    = mfacb;
-        (dist.f[dirNW])[kw]    = mfcab;
-        (dist.f[dirTE])[k]     = mfaba;
-        (dist.f[dirBW])[kbw]   = mfcbc;
-        (dist.f[dirBE])[kb]    = mfabc;
-        (dist.f[dirTW])[kw]    = mfcba;
-        (dist.f[dirTN])[k]     = mfbaa;
-        (dist.f[dirBS])[kbs]   = mfbcc;
-        (dist.f[dirBN])[kb]    = mfbac;
-        (dist.f[dirTS])[ks]    = mfbca;
-        (dist.f[dirZERO])[k]   = mfbbb;
-        (dist.f[dirTNE])[k]    = mfaaa;
-        (dist.f[dirTSE])[ks]   = mfaca;
-        (dist.f[dirBNE])[kb]   = mfaac;
-        (dist.f[dirBSE])[kbs]  = mfacc;
-        (dist.f[dirTNW])[kw]   = mfcaa;
-        (dist.f[dirTSW])[ksw]  = mfcca;
-        (dist.f[dirBNW])[kbw]  = mfcac;
-        (dist.f[dirBSW])[kbsw] = mfccc;
+        (dist.f[E])[k]      = mfabb;
+        (dist.f[W])[kw]     = mfcbb;
+        (dist.f[N])[k]      = mfbab;
+        (dist.f[S])[ks]     = mfbcb;
+        (dist.f[T])[k]      = mfbba;
+        (dist.f[B])[kb]     = mfbbc;
+        (dist.f[NE])[k]     = mfaab;
+        (dist.f[SW])[ksw]   = mfccb;
+        (dist.f[SE])[ks]    = mfacb;
+        (dist.f[NW])[kw]    = mfcab;
+        (dist.f[TE])[k]     = mfaba;
+        (dist.f[BW])[kbw]   = mfcbc;
+        (dist.f[BE])[kb]    = mfabc;
+        (dist.f[TW])[kw]    = mfcba;
+        (dist.f[TN])[k]     = mfbaa;
+        (dist.f[BS])[kbs]   = mfbcc;
+        (dist.f[BN])[kb]    = mfbac;
+        (dist.f[TS])[ks]    = mfbca;
+        (dist.f[REST])[k]   = mfbbb;
+        (dist.f[TNE])[k]    = mfaaa;
+        (dist.f[TSE])[ks]   = mfaca;
+        (dist.f[BNE])[kb]   = mfaac;
+        (dist.f[BSE])[kbs]  = mfacc;
+        (dist.f[TNW])[kw]   = mfcaa;
+        (dist.f[TSW])[ksw]  = mfcca;
+        (dist.f[BNW])[kbw]  = mfcac;
+        (dist.f[BSW])[kbsw] = mfccc;
     }
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chimStream/CumulantK17CompChimStreamDevice.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chimStream/CumulantK17CompChimStreamDevice.cu
index f57fd9dd9bc2a372c7790bf8f3837e69d1d52beb..aab6c580396efcac8056c355d5047a3062c750d1 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chimStream/CumulantK17CompChimStreamDevice.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17chimStream/CumulantK17CompChimStreamDevice.cu
@@ -32,10 +32,11 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "Kernel/ChimeraTransformation.h"
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -86,61 +87,61 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChimStream(
 
         Distributions27 dist;
         if (isEvenTimestep) {
-            dist.f[dirE]    = &distributions[dirE * size_Mat];
-            dist.f[dirW]    = &distributions[dirW * size_Mat];
-            dist.f[dirN]    = &distributions[dirN * size_Mat];
-            dist.f[dirS]    = &distributions[dirS * size_Mat];
-            dist.f[dirT]    = &distributions[dirT * size_Mat];
-            dist.f[dirB]    = &distributions[dirB * size_Mat];
-            dist.f[dirNE]   = &distributions[dirNE * size_Mat];
-            dist.f[dirSW]   = &distributions[dirSW * size_Mat];
-            dist.f[dirSE]   = &distributions[dirSE * size_Mat];
-            dist.f[dirNW]   = &distributions[dirNW * size_Mat];
-            dist.f[dirTE]   = &distributions[dirTE * size_Mat];
-            dist.f[dirBW]   = &distributions[dirBW * size_Mat];
-            dist.f[dirBE]   = &distributions[dirBE * size_Mat];
-            dist.f[dirTW]   = &distributions[dirTW * size_Mat];
-            dist.f[dirTN]   = &distributions[dirTN * size_Mat];
-            dist.f[dirBS]   = &distributions[dirBS * size_Mat];
-            dist.f[dirBN]   = &distributions[dirBN * size_Mat];
-            dist.f[dirTS]   = &distributions[dirTS * size_Mat];
-            dist.f[dirZERO] = &distributions[dirZERO * size_Mat];
-            dist.f[dirTNE]  = &distributions[dirTNE * size_Mat];
-            dist.f[dirTSW]  = &distributions[dirTSW * size_Mat];
-            dist.f[dirTSE]  = &distributions[dirTSE * size_Mat];
-            dist.f[dirTNW]  = &distributions[dirTNW * size_Mat];
-            dist.f[dirBNE]  = &distributions[dirBNE * size_Mat];
-            dist.f[dirBSW]  = &distributions[dirBSW * size_Mat];
-            dist.f[dirBSE]  = &distributions[dirBSE * size_Mat];
-            dist.f[dirBNW]  = &distributions[dirBNW * size_Mat];
+            dist.f[E]    = &distributions[E * size_Mat];
+            dist.f[W]    = &distributions[W * size_Mat];
+            dist.f[N]    = &distributions[N * size_Mat];
+            dist.f[S]    = &distributions[S * size_Mat];
+            dist.f[T]    = &distributions[T * size_Mat];
+            dist.f[B]    = &distributions[B * size_Mat];
+            dist.f[NE]   = &distributions[NE * size_Mat];
+            dist.f[SW]   = &distributions[SW * size_Mat];
+            dist.f[SE]   = &distributions[SE * size_Mat];
+            dist.f[NW]   = &distributions[NW * size_Mat];
+            dist.f[TE]   = &distributions[TE * size_Mat];
+            dist.f[BW]   = &distributions[BW * size_Mat];
+            dist.f[BE]   = &distributions[BE * size_Mat];
+            dist.f[TW]   = &distributions[TW * size_Mat];
+            dist.f[TN]   = &distributions[TN * size_Mat];
+            dist.f[BS]   = &distributions[BS * size_Mat];
+            dist.f[BN]   = &distributions[BN * size_Mat];
+            dist.f[TS]   = &distributions[TS * size_Mat];
+            dist.f[REST] = &distributions[REST * size_Mat];
+            dist.f[TNE]  = &distributions[TNE * size_Mat];
+            dist.f[TSW]  = &distributions[TSW * size_Mat];
+            dist.f[TSE]  = &distributions[TSE * size_Mat];
+            dist.f[TNW]  = &distributions[TNW * size_Mat];
+            dist.f[BNE]  = &distributions[BNE * size_Mat];
+            dist.f[BSW]  = &distributions[BSW * size_Mat];
+            dist.f[BSE]  = &distributions[BSE * size_Mat];
+            dist.f[BNW]  = &distributions[BNW * size_Mat];
         } else {
-            dist.f[dirW]    = &distributions[dirE * size_Mat];
-            dist.f[dirE]    = &distributions[dirW * size_Mat];
-            dist.f[dirS]    = &distributions[dirN * size_Mat];
-            dist.f[dirN]    = &distributions[dirS * size_Mat];
-            dist.f[dirB]    = &distributions[dirT * size_Mat];
-            dist.f[dirT]    = &distributions[dirB * size_Mat];
-            dist.f[dirSW]   = &distributions[dirNE * size_Mat];
-            dist.f[dirNE]   = &distributions[dirSW * size_Mat];
-            dist.f[dirNW]   = &distributions[dirSE * size_Mat];
-            dist.f[dirSE]   = &distributions[dirNW * size_Mat];
-            dist.f[dirBW]   = &distributions[dirTE * size_Mat];
-            dist.f[dirTE]   = &distributions[dirBW * size_Mat];
-            dist.f[dirTW]   = &distributions[dirBE * size_Mat];
-            dist.f[dirBE]   = &distributions[dirTW * size_Mat];
-            dist.f[dirBS]   = &distributions[dirTN * size_Mat];
-            dist.f[dirTN]   = &distributions[dirBS * size_Mat];
-            dist.f[dirTS]   = &distributions[dirBN * size_Mat];
-            dist.f[dirBN]   = &distributions[dirTS * size_Mat];
-            dist.f[dirZERO] = &distributions[dirZERO * size_Mat];
-            dist.f[dirBSW]  = &distributions[dirTNE * size_Mat];
-            dist.f[dirBNE]  = &distributions[dirTSW * size_Mat];
-            dist.f[dirBNW]  = &distributions[dirTSE * size_Mat];
-            dist.f[dirBSE]  = &distributions[dirTNW * size_Mat];
-            dist.f[dirTSW]  = &distributions[dirBNE * size_Mat];
-            dist.f[dirTNE]  = &distributions[dirBSW * size_Mat];
-            dist.f[dirTNW]  = &distributions[dirBSE * size_Mat];
-            dist.f[dirTSE]  = &distributions[dirBNW * size_Mat];
+            dist.f[W]    = &distributions[E * size_Mat];
+            dist.f[E]    = &distributions[W * size_Mat];
+            dist.f[S]    = &distributions[N * size_Mat];
+            dist.f[N]    = &distributions[S * size_Mat];
+            dist.f[B]    = &distributions[T * size_Mat];
+            dist.f[T]    = &distributions[B * size_Mat];
+            dist.f[SW]   = &distributions[NE * size_Mat];
+            dist.f[NE]   = &distributions[SW * size_Mat];
+            dist.f[NW]   = &distributions[SE * size_Mat];
+            dist.f[SE]   = &distributions[NW * size_Mat];
+            dist.f[BW]   = &distributions[TE * size_Mat];
+            dist.f[TE]   = &distributions[BW * size_Mat];
+            dist.f[TW]   = &distributions[BE * size_Mat];
+            dist.f[BE]   = &distributions[TW * size_Mat];
+            dist.f[BS]   = &distributions[TN * size_Mat];
+            dist.f[TN]   = &distributions[BS * size_Mat];
+            dist.f[TS]   = &distributions[BN * size_Mat];
+            dist.f[BN]   = &distributions[TS * size_Mat];
+            dist.f[REST] = &distributions[REST * size_Mat];
+            dist.f[BSW]  = &distributions[TNE * size_Mat];
+            dist.f[BNE]  = &distributions[TSW * size_Mat];
+            dist.f[BNW]  = &distributions[TSE * size_Mat];
+            dist.f[BSE]  = &distributions[TNW * size_Mat];
+            dist.f[TSW]  = &distributions[BNE * size_Mat];
+            dist.f[TNE]  = &distributions[BSW * size_Mat];
+            dist.f[TNW]  = &distributions[BSE * size_Mat];
+            dist.f[TSE]  = &distributions[BNW * size_Mat];
         }
         ////////////////////////////////////////////////////////////////////////////////
         //! - Set neighbor indices (necessary for indirect addressing)
@@ -154,33 +155,33 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChimStream(
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Set local distributions
         //!
-        real mfcbb = (dist.f[dirE])[k];
-        real mfabb = (dist.f[dirW])[kw];
-        real mfbcb = (dist.f[dirN])[k];
-        real mfbab = (dist.f[dirS])[ks];
-        real mfbbc = (dist.f[dirT])[k];
-        real mfbba = (dist.f[dirB])[kb];
-        real mfccb = (dist.f[dirNE])[k];
-        real mfaab = (dist.f[dirSW])[ksw];
-        real mfcab = (dist.f[dirSE])[ks];
-        real mfacb = (dist.f[dirNW])[kw];
-        real mfcbc = (dist.f[dirTE])[k];
-        real mfaba = (dist.f[dirBW])[kbw];
-        real mfcba = (dist.f[dirBE])[kb];
-        real mfabc = (dist.f[dirTW])[kw];
-        real mfbcc = (dist.f[dirTN])[k];
-        real mfbaa = (dist.f[dirBS])[kbs];
-        real mfbca = (dist.f[dirBN])[kb];
-        real mfbac = (dist.f[dirTS])[ks];
-        real mfbbb = (dist.f[dirZERO])[k];
-        real mfccc = (dist.f[dirTNE])[k];
-        real mfaac = (dist.f[dirTSW])[ksw];
-        real mfcac = (dist.f[dirTSE])[ks];
-        real mfacc = (dist.f[dirTNW])[kw];
-        real mfcca = (dist.f[dirBNE])[kb];
-        real mfaaa = (dist.f[dirBSW])[kbsw];
-        real mfcaa = (dist.f[dirBSE])[kbs];
-        real mfaca = (dist.f[dirBNW])[kbw];
+        real mfcbb = (dist.f[E])[k];
+        real mfabb = (dist.f[W])[kw];
+        real mfbcb = (dist.f[N])[k];
+        real mfbab = (dist.f[S])[ks];
+        real mfbbc = (dist.f[T])[k];
+        real mfbba = (dist.f[B])[kb];
+        real mfccb = (dist.f[NE])[k];
+        real mfaab = (dist.f[SW])[ksw];
+        real mfcab = (dist.f[SE])[ks];
+        real mfacb = (dist.f[NW])[kw];
+        real mfcbc = (dist.f[TE])[k];
+        real mfaba = (dist.f[BW])[kbw];
+        real mfcba = (dist.f[BE])[kb];
+        real mfabc = (dist.f[TW])[kw];
+        real mfbcc = (dist.f[TN])[k];
+        real mfbaa = (dist.f[BS])[kbs];
+        real mfbca = (dist.f[BN])[kb];
+        real mfbac = (dist.f[TS])[ks];
+        real mfbbb = (dist.f[REST])[k];
+        real mfccc = (dist.f[TNE])[k];
+        real mfaac = (dist.f[TSW])[ksw];
+        real mfcac = (dist.f[TSE])[ks];
+        real mfacc = (dist.f[TNW])[kw];
+        real mfcca = (dist.f[BNE])[kb];
+        real mfaaa = (dist.f[BSW])[kbsw];
+        real mfcaa = (dist.f[BSE])[kbs];
+        real mfaca = (dist.f[BNW])[kbw];
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
         //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015),
@@ -315,13 +316,13 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChimStream(
         real O6 = c1o1;
 
         ////////////////////////////////////////////////////////////////////////////////////
-        //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
+        //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
         //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for
         //! different bulk viscosity).
         //!
-        real A = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
-        real B = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega);
+        real factorA = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
+        real factorB = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega);
 
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Compute cumulants from central moments according to Eq. (20)-(23) in
@@ -478,12 +479,12 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChimStream(
         //! to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
         //!
-        CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-        CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-        CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-        CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-        CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-        CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+        CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+        CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+        CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+        CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+        CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+        CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 
         //////////////////////////////////////////////////////////////////////////
         // 5.
@@ -608,32 +609,32 @@ extern "C" __global__ void LB_Kernel_CumulantK17CompChimStream(
         //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017),
         //! DOI:10.3390/computation5020019 ]</b></a>
         //!
-        (dist.f[dirE])[k]      = mfabb;
-        (dist.f[dirW])[kw]     = mfcbb;
-        (dist.f[dirN])[k]      = mfbab;
-        (dist.f[dirS])[ks]     = mfbcb;
-        (dist.f[dirT])[k]      = mfbba;
-        (dist.f[dirB])[kb]     = mfbbc;
-        (dist.f[dirNE])[k]     = mfaab;
-        (dist.f[dirSW])[ksw]   = mfccb;
-        (dist.f[dirSE])[ks]    = mfacb;
-        (dist.f[dirNW])[kw]    = mfcab;
-        (dist.f[dirTE])[k]     = mfaba;
-        (dist.f[dirBW])[kbw]   = mfcbc;
-        (dist.f[dirBE])[kb]    = mfabc;
-        (dist.f[dirTW])[kw]    = mfcba;
-        (dist.f[dirTN])[k]     = mfbaa;
-        (dist.f[dirBS])[kbs]   = mfbcc;
-        (dist.f[dirBN])[kb]    = mfbac;
-        (dist.f[dirTS])[ks]    = mfbca;
-        (dist.f[dirZERO])[k]   = mfbbb;
-        (dist.f[dirTNE])[k]    = mfaaa;
-        (dist.f[dirTSE])[ks]   = mfaca;
-        (dist.f[dirBNE])[kb]   = mfaac;
-        (dist.f[dirBSE])[kbs]  = mfacc;
-        (dist.f[dirTNW])[kw]   = mfcaa;
-        (dist.f[dirTSW])[ksw]  = mfcca;
-        (dist.f[dirBNW])[kbw]  = mfcac;
-        (dist.f[dirBSW])[kbsw] = mfccc;
+        (dist.f[E])[k]      = mfabb;
+        (dist.f[W])[kw]     = mfcbb;
+        (dist.f[N])[k]      = mfbab;
+        (dist.f[S])[ks]     = mfbcb;
+        (dist.f[T])[k]      = mfbba;
+        (dist.f[B])[kb]     = mfbbc;
+        (dist.f[NE])[k]     = mfaab;
+        (dist.f[SW])[ksw]   = mfccb;
+        (dist.f[SE])[ks]    = mfacb;
+        (dist.f[NW])[kw]    = mfcab;
+        (dist.f[TE])[k]     = mfaba;
+        (dist.f[BW])[kbw]   = mfcbc;
+        (dist.f[BE])[kb]    = mfabc;
+        (dist.f[TW])[kw]    = mfcba;
+        (dist.f[TN])[k]     = mfbaa;
+        (dist.f[BS])[kbs]   = mfbcc;
+        (dist.f[BN])[kb]    = mfbac;
+        (dist.f[TS])[ks]    = mfbca;
+        (dist.f[REST])[k]   = mfbbb;
+        (dist.f[TNE])[k]    = mfaaa;
+        (dist.f[TSE])[ks]   = mfaca;
+        (dist.f[BNE])[kb]   = mfaac;
+        (dist.f[BSE])[kbs]  = mfacc;
+        (dist.f[TNW])[kw]   = mfcaa;
+        (dist.f[TSW])[ksw]  = mfcca;
+        (dist.f[BNW])[kbw]  = mfcac;
+        (dist.f[BSW])[kbsw] = mfccc;
     }
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK18/CumulantK18Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK18/CumulantK18Comp_Device.cu
index 8d5b10b1ecf7076147dec425823233ba97fa11b8..66170ecb09effc282c17ea42d3a2e4a07b8313b6 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK18/CumulantK18Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK18/CumulantK18Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK18Comp(
@@ -41,83 +42,83 @@ extern "C" __global__ void LB_Kernel_CumulantK18Comp(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions6 G;
 			if (EvenOrOdd == true)
 			{
-				G.g[dirE] = &G6[dirE   *size_Mat];
-				G.g[dirW] = &G6[dirW   *size_Mat];
-				G.g[dirN] = &G6[dirN   *size_Mat];
-				G.g[dirS] = &G6[dirS   *size_Mat];
-				G.g[dirT] = &G6[dirT   *size_Mat];
-				G.g[dirB] = &G6[dirB   *size_Mat];
+				G.g[E] = &G6[E   *size_Mat];
+				G.g[W] = &G6[W   *size_Mat];
+				G.g[N] = &G6[N   *size_Mat];
+				G.g[S] = &G6[S   *size_Mat];
+				G.g[T] = &G6[T   *size_Mat];
+				G.g[B] = &G6[B   *size_Mat];
 			}
 			else
 			{
-				G.g[dirW] = &G6[dirE   *size_Mat];
-				G.g[dirE] = &G6[dirW   *size_Mat];
-				G.g[dirS] = &G6[dirN   *size_Mat];
-				G.g[dirN] = &G6[dirS   *size_Mat];
-				G.g[dirB] = &G6[dirT   *size_Mat];
-				G.g[dirT] = &G6[dirB   *size_Mat];
+				G.g[W] = &G6[E   *size_Mat];
+				G.g[E] = &G6[W   *size_Mat];
+				G.g[S] = &G6[N   *size_Mat];
+				G.g[N] = &G6[S   *size_Mat];
+				G.g[B] = &G6[T   *size_Mat];
+				G.g[T] = &G6[B   *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -151,43 +152,43 @@ extern "C" __global__ void LB_Kernel_CumulantK18Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mgcbb = (G.g[dirE])[k];
-			real mgabb = (G.g[dirW])[kw];
-			real mgbcb = (G.g[dirN])[k];
-			real mgbab = (G.g[dirS])[ks];
-			real mgbbc = (G.g[dirT])[k];
-			real mgbba = (G.g[dirB])[kb];
+			real mgcbb = (G.g[E])[k];
+			real mgabb = (G.g[W])[kw];
+			real mgbcb = (G.g[N])[k];
+			real mgbab = (G.g[S])[ks];
+			real mgbbc = (G.g[T])[k];
+			real mgbba = (G.g[B])[kb];
 			real dxxux = c1o2 * (-mgcbb + mgabb);
 			real dyyuy = c1o2 * (-mgbcb + mgbab);
 			real dzzuz = c1o2 * (-mgbbc + mgbba);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];
-			real mfabb = (D.f[dirW])[kw];
-			real mfbcb = (D.f[dirN])[k];
-			real mfbab = (D.f[dirS])[ks];
-			real mfbbc = (D.f[dirT])[k];
-			real mfbba = (D.f[dirB])[kb];
-			real mfccb = (D.f[dirNE])[k];
-			real mfaab = (D.f[dirSW])[ksw];
-			real mfcab = (D.f[dirSE])[ks];
-			real mfacb = (D.f[dirNW])[kw];
-			real mfcbc = (D.f[dirTE])[k];
-			real mfaba = (D.f[dirBW])[kbw];
-			real mfcba = (D.f[dirBE])[kb];
-			real mfabc = (D.f[dirTW])[kw];
-			real mfbcc = (D.f[dirTN])[k];
-			real mfbaa = (D.f[dirBS])[kbs];
-			real mfbca = (D.f[dirBN])[kb];
-			real mfbac = (D.f[dirTS])[ks];
-			real mfbbb = (D.f[dirZERO])[k];
-			real mfccc = (D.f[dirTNE])[k];
-			real mfaac = (D.f[dirTSW])[ksw];
-			real mfcac = (D.f[dirTSE])[ks];
-			real mfacc = (D.f[dirTNW])[kw];
-			real mfcca = (D.f[dirBNE])[kb];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];
-			real mfaca = (D.f[dirBNW])[kbw];
+			real mfcbb = (D.f[E])[k];
+			real mfabb = (D.f[W])[kw];
+			real mfbcb = (D.f[N])[k];
+			real mfbab = (D.f[S])[ks];
+			real mfbbc = (D.f[T])[k];
+			real mfbba = (D.f[B])[kb];
+			real mfccb = (D.f[NE])[k];
+			real mfaab = (D.f[SW])[ksw];
+			real mfcab = (D.f[SE])[ks];
+			real mfacb = (D.f[NW])[kw];
+			real mfcbc = (D.f[TE])[k];
+			real mfaba = (D.f[BW])[kbw];
+			real mfcba = (D.f[BE])[kb];
+			real mfabc = (D.f[TW])[kw];
+			real mfbcc = (D.f[TN])[k];
+			real mfbaa = (D.f[BS])[kbs];
+			real mfbca = (D.f[BN])[kb];
+			real mfbac = (D.f[TS])[ks];
+			real mfbbb = (D.f[REST])[k];
+			real mfccc = (D.f[TNE])[k];
+			real mfaac = (D.f[TSW])[ksw];
+			real mfcac = (D.f[TSE])[ks];
+			real mfacc = (D.f[TNW])[kw];
+			real mfcca = (D.f[BNE])[kb];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];
+			real mfaca = (D.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -914,41 +915,41 @@ extern "C" __global__ void LB_Kernel_CumulantK18Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;
-			(D.f[dirW])[kw] = mfcbb;
-			(D.f[dirN])[k] = mfbab;
-			(D.f[dirS])[ks] = mfbcb;
-			(D.f[dirT])[k] = mfbba;
-			(D.f[dirB])[kb] = mfbbc;
-			(D.f[dirNE])[k] = mfaab;
-			(D.f[dirSW])[ksw] = mfccb;
-			(D.f[dirSE])[ks] = mfacb;
-			(D.f[dirNW])[kw] = mfcab;
-			(D.f[dirTE])[k] = mfaba;
-			(D.f[dirBW])[kbw] = mfcbc;
-			(D.f[dirBE])[kb] = mfabc;
-			(D.f[dirTW])[kw] = mfcba;
-			(D.f[dirTN])[k] = mfbaa;
-			(D.f[dirBS])[kbs] = mfbcc;
-			(D.f[dirBN])[kb] = mfbac;
-			(D.f[dirTS])[ks] = mfbca;
-			(D.f[dirZERO])[k] = mfbbb;
-			(D.f[dirTNE])[k] = mfaaa;
-			(D.f[dirTSE])[ks] = mfaca;
-			(D.f[dirBNE])[kb] = mfaac;
-			(D.f[dirBSE])[kbs] = mfacc;
-			(D.f[dirTNW])[kw] = mfcaa;
-			(D.f[dirTSW])[ksw] = mfcca;
-			(D.f[dirBNW])[kbw] = mfcac;
-			(D.f[dirBSW])[kbsw] = mfccc;
-			////////////////////////////////////////////////////////////////////////////////////
-
-			(G.g[dirE])[k] = mgabb;
-			(G.g[dirW])[kw] = mgcbb;
-			(G.g[dirN])[k] = mgbab;
-			(G.g[dirS])[ks] = mgbcb;
-			(G.g[dirT])[k] = mgbba;
-			(G.g[dirB])[kb] = mgbbc;
+			(D.f[E])[k] = mfabb;
+			(D.f[W])[kw] = mfcbb;
+			(D.f[N])[k] = mfbab;
+			(D.f[S])[ks] = mfbcb;
+			(D.f[T])[k] = mfbba;
+			(D.f[B])[kb] = mfbbc;
+			(D.f[NE])[k] = mfaab;
+			(D.f[SW])[ksw] = mfccb;
+			(D.f[SE])[ks] = mfacb;
+			(D.f[NW])[kw] = mfcab;
+			(D.f[TE])[k] = mfaba;
+			(D.f[BW])[kbw] = mfcbc;
+			(D.f[BE])[kb] = mfabc;
+			(D.f[TW])[kw] = mfcba;
+			(D.f[TN])[k] = mfbaa;
+			(D.f[BS])[kbs] = mfbcc;
+			(D.f[BN])[kb] = mfbac;
+			(D.f[TS])[ks] = mfbca;
+			(D.f[REST])[k] = mfbbb;
+			(D.f[TNE])[k] = mfaaa;
+			(D.f[TSE])[ks] = mfaca;
+			(D.f[BNE])[kb] = mfaac;
+			(D.f[BSE])[kbs] = mfacc;
+			(D.f[TNW])[kw] = mfcaa;
+			(D.f[TSW])[ksw] = mfcca;
+			(D.f[BNW])[kbw] = mfcac;
+			(D.f[BSW])[kbsw] = mfccc;
+			////////////////////////////////////////////////////////////////////////////////////
+
+			(G.g[E])[k] = mgabb;
+			(G.g[W])[kw] = mgcbb;
+			(G.g[N])[k] = mgbab;
+			(G.g[S])[ks] = mgbcb;
+			(G.g[T])[k] = mgbba;
+			(G.g[B])[kb] = mgbbc;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK20/CumulantK20Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK20/CumulantK20Comp_Device.cu
index 959a9e6d748deed1f2b509ae86b65f4ebbbdc1c1..acbca26e9cb37b74a59efe688143934acb65f335 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK20/CumulantK20Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK20/CumulantK20Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK20Comp(
@@ -41,83 +42,83 @@ extern "C" __global__ void LB_Kernel_CumulantK20Comp(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			Distributions6 G;
 			if (EvenOrOdd == true)
 			{
-				G.g[dirE] = &G6[dirE   *size_Mat];
-				G.g[dirW] = &G6[dirW   *size_Mat];
-				G.g[dirN] = &G6[dirN   *size_Mat];
-				G.g[dirS] = &G6[dirS   *size_Mat];
-				G.g[dirT] = &G6[dirT   *size_Mat];
-				G.g[dirB] = &G6[dirB   *size_Mat];
+				G.g[E] = &G6[E   *size_Mat];
+				G.g[W] = &G6[W   *size_Mat];
+				G.g[N] = &G6[N   *size_Mat];
+				G.g[S] = &G6[S   *size_Mat];
+				G.g[T] = &G6[T   *size_Mat];
+				G.g[B] = &G6[B   *size_Mat];
 			}
 			else
 			{
-				G.g[dirW] = &G6[dirE   *size_Mat];
-				G.g[dirE] = &G6[dirW   *size_Mat];
-				G.g[dirS] = &G6[dirN   *size_Mat];
-				G.g[dirN] = &G6[dirS   *size_Mat];
-				G.g[dirB] = &G6[dirT   *size_Mat];
-				G.g[dirT] = &G6[dirB   *size_Mat];
+				G.g[W] = &G6[E   *size_Mat];
+				G.g[E] = &G6[W   *size_Mat];
+				G.g[S] = &G6[N   *size_Mat];
+				G.g[N] = &G6[S   *size_Mat];
+				G.g[B] = &G6[T   *size_Mat];
+				G.g[T] = &G6[B   *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -150,43 +151,43 @@ extern "C" __global__ void LB_Kernel_CumulantK20Comp(
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mgcbb = (G.g[dirE])[k];
-			real mgabb = (G.g[dirW])[kw];
-			real mgbcb = (G.g[dirN])[k];
-			real mgbab = (G.g[dirS])[ks];
-			real mgbbc = (G.g[dirT])[k];
-			real mgbba = (G.g[dirB])[kb];
+			real mgcbb = (G.g[E])[k];
+			real mgabb = (G.g[W])[kw];
+			real mgbcb = (G.g[N])[k];
+			real mgbab = (G.g[S])[ks];
+			real mgbbc = (G.g[T])[k];
+			real mgbba = (G.g[B])[kb];
 			real dxuxdxux = c1o2 * (-mgcbb + mgabb);
 			real dyuydyuy = c1o2 * (-mgbcb + mgbab);
 			real dzuzdzuz = c1o2 * (-mgbbc + mgbba);
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];
-			real mfabb = (D.f[dirW])[kw];
-			real mfbcb = (D.f[dirN])[k];
-			real mfbab = (D.f[dirS])[ks];
-			real mfbbc = (D.f[dirT])[k];
-			real mfbba = (D.f[dirB])[kb];
-			real mfccb = (D.f[dirNE])[k];
-			real mfaab = (D.f[dirSW])[ksw];
-			real mfcab = (D.f[dirSE])[ks];
-			real mfacb = (D.f[dirNW])[kw];
-			real mfcbc = (D.f[dirTE])[k];
-			real mfaba = (D.f[dirBW])[kbw];
-			real mfcba = (D.f[dirBE])[kb];
-			real mfabc = (D.f[dirTW])[kw];
-			real mfbcc = (D.f[dirTN])[k];
-			real mfbaa = (D.f[dirBS])[kbs];
-			real mfbca = (D.f[dirBN])[kb];
-			real mfbac = (D.f[dirTS])[ks];
-			real mfbbb = (D.f[dirZERO])[k];
-			real mfccc = (D.f[dirTNE])[k];
-			real mfaac = (D.f[dirTSW])[ksw];
-			real mfcac = (D.f[dirTSE])[ks];
-			real mfacc = (D.f[dirTNW])[kw];
-			real mfcca = (D.f[dirBNE])[kb];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];
-			real mfaca = (D.f[dirBNW])[kbw];
+			real mfcbb = (D.f[E])[k];
+			real mfabb = (D.f[W])[kw];
+			real mfbcb = (D.f[N])[k];
+			real mfbab = (D.f[S])[ks];
+			real mfbbc = (D.f[T])[k];
+			real mfbba = (D.f[B])[kb];
+			real mfccb = (D.f[NE])[k];
+			real mfaab = (D.f[SW])[ksw];
+			real mfcab = (D.f[SE])[ks];
+			real mfacb = (D.f[NW])[kw];
+			real mfcbc = (D.f[TE])[k];
+			real mfaba = (D.f[BW])[kbw];
+			real mfcba = (D.f[BE])[kb];
+			real mfabc = (D.f[TW])[kw];
+			real mfbcc = (D.f[TN])[k];
+			real mfbaa = (D.f[BS])[kbs];
+			real mfbca = (D.f[BN])[kb];
+			real mfbac = (D.f[TS])[ks];
+			real mfbbb = (D.f[REST])[k];
+			real mfccc = (D.f[TNE])[k];
+			real mfaac = (D.f[TSW])[ksw];
+			real mfcac = (D.f[TSE])[ks];
+			real mfacc = (D.f[TNW])[kw];
+			real mfcca = (D.f[BNE])[kb];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];
+			real mfaca = (D.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -918,41 +919,41 @@ extern "C" __global__ void LB_Kernel_CumulantK20Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;
-			(D.f[dirW])[kw] = mfcbb;
-			(D.f[dirN])[k] = mfbab;
-			(D.f[dirS])[ks] = mfbcb;
-			(D.f[dirT])[k] = mfbba;
-			(D.f[dirB])[kb] = mfbbc;
-			(D.f[dirNE])[k] = mfaab;
-			(D.f[dirSW])[ksw] = mfccb;
-			(D.f[dirSE])[ks] = mfacb;
-			(D.f[dirNW])[kw] = mfcab;
-			(D.f[dirTE])[k] = mfaba;
-			(D.f[dirBW])[kbw] = mfcbc;
-			(D.f[dirBE])[kb] = mfabc;
-			(D.f[dirTW])[kw] = mfcba;
-			(D.f[dirTN])[k] = mfbaa;
-			(D.f[dirBS])[kbs] = mfbcc;
-			(D.f[dirBN])[kb] = mfbac;
-			(D.f[dirTS])[ks] = mfbca;
-			(D.f[dirZERO])[k] = mfbbb;
-			(D.f[dirTNE])[k] = mfaaa;
-			(D.f[dirTSE])[ks] = mfaca;
-			(D.f[dirBNE])[kb] = mfaac;
-			(D.f[dirBSE])[kbs] = mfacc;
-			(D.f[dirTNW])[kw] = mfcaa;
-			(D.f[dirTSW])[ksw] = mfcca;
-			(D.f[dirBNW])[kbw] = mfcac;
-			(D.f[dirBSW])[kbsw] = mfccc;
-			////////////////////////////////////////////////////////////////////////////////////
-
-			(G.g[dirE])[k] = mgabb;
-			(G.g[dirW])[kw] = mgcbb;
-			(G.g[dirN])[k] = mgbab;
-			(G.g[dirS])[ks] = mgbcb;
-			(G.g[dirT])[k] = mgbba;
-			(G.g[dirB])[kb] = mgbbc;
+			(D.f[E])[k] = mfabb;
+			(D.f[W])[kw] = mfcbb;
+			(D.f[N])[k] = mfbab;
+			(D.f[S])[ks] = mfbcb;
+			(D.f[T])[k] = mfbba;
+			(D.f[B])[kb] = mfbbc;
+			(D.f[NE])[k] = mfaab;
+			(D.f[SW])[ksw] = mfccb;
+			(D.f[SE])[ks] = mfacb;
+			(D.f[NW])[kw] = mfcab;
+			(D.f[TE])[k] = mfaba;
+			(D.f[BW])[kbw] = mfcbc;
+			(D.f[BE])[kb] = mfabc;
+			(D.f[TW])[kw] = mfcba;
+			(D.f[TN])[k] = mfbaa;
+			(D.f[BS])[kbs] = mfbcc;
+			(D.f[BN])[kb] = mfbac;
+			(D.f[TS])[ks] = mfbca;
+			(D.f[REST])[k] = mfbbb;
+			(D.f[TNE])[k] = mfaaa;
+			(D.f[TSE])[ks] = mfaca;
+			(D.f[BNE])[kb] = mfaac;
+			(D.f[BSE])[kbs] = mfacc;
+			(D.f[TNW])[kw] = mfcaa;
+			(D.f[TSW])[ksw] = mfcca;
+			(D.f[BNW])[kbw] = mfcac;
+			(D.f[BSW])[kbsw] = mfccc;
+			////////////////////////////////////////////////////////////////////////////////////
+
+			(G.g[E])[k] = mgabb;
+			(G.g[W])[kw] = mgcbb;
+			(G.g[N])[k] = mgbab;
+			(G.g[S])[ks] = mgbcb;
+			(G.g[T])[k] = mgbba;
+			(G.g[B])[kb] = mgbbc;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/MRT/MRTCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/MRT/MRTCompSP27_Device.cu
index 9bde8228fdab4a572496bb1e0478efe2cd9dedfa..e25926fd8186bb1fdb09f8610bc5e4719614f645 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/MRT/MRTCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Compressible/MRT/MRTCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_MRT_Comp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_MRT_Comp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,33 +126,33 @@ extern "C" __global__ void LB_Kernel_MRT_Comp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 			real rho = (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca +
 				mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb +
@@ -738,33 +739,33 @@ extern "C" __global__ void LB_Kernel_MRT_Comp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGK/BGKIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGK/BGKIncompSP27_Device.cu
index 138b17170fc80b6f30c48f19111032d760915293..db2314b67f8c4cdfea156bd76f6eee2c3cb11f59 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGK/BGKIncompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGK/BGKIncompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_BGK_Incomp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_BGK_Incomp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,33 +126,33 @@ extern "C" __global__ void LB_Kernel_BGK_Incomp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real fE = (D.f[dirE])[k];//ke
-			real fW = (D.f[dirW])[kw];
-			real fN = (D.f[dirN])[k];//kn
-			real fS = (D.f[dirS])[ks];
-			real fT = (D.f[dirT])[k];//kt
-			real fB = (D.f[dirB])[kb];
-			real fNE = (D.f[dirNE])[k];//kne
-			real fSW = (D.f[dirSW])[ksw];
-			real fSE = (D.f[dirSE])[ks];//kse
-			real fNW = (D.f[dirNW])[kw];//knw
-			real fTE = (D.f[dirTE])[k];//kte
-			real fBW = (D.f[dirBW])[kbw];
-			real fBE = (D.f[dirBE])[kb];//kbe
-			real fTW = (D.f[dirTW])[kw];//ktw
-			real fTN = (D.f[dirTN])[k];//ktn
-			real fBS = (D.f[dirBS])[kbs];
-			real fBN = (D.f[dirBN])[kb];//kbn
-			real fTS = (D.f[dirTS])[ks];//kts
-			real fZERO = (D.f[dirZERO])[k];//kzero
-			real fTNE = (D.f[dirTNE])[k];//ktne
-			real fTSW = (D.f[dirTSW])[ksw];//ktsw
-			real fTSE = (D.f[dirTSE])[ks];//ktse
-			real fTNW = (D.f[dirTNW])[kw];//ktnw
-			real fBNE = (D.f[dirBNE])[kb];//kbne
-			real fBSW = (D.f[dirBSW])[kbsw];
-			real fBSE = (D.f[dirBSE])[kbs];//kbse
-			real fBNW = (D.f[dirBNW])[kbw];//kbnw
+			real fE = (D.f[E])[k];//ke
+			real fW = (D.f[W])[kw];
+			real fN = (D.f[N])[k];//kn
+			real fS = (D.f[S])[ks];
+			real fT = (D.f[T])[k];//kt
+			real fB = (D.f[B])[kb];
+			real fNE = (D.f[NE])[k];//kne
+			real fSW = (D.f[SW])[ksw];
+			real fSE = (D.f[SE])[ks];//kse
+			real fNW = (D.f[NW])[kw];//knw
+			real fTE = (D.f[TE])[k];//kte
+			real fBW = (D.f[BW])[kbw];
+			real fBE = (D.f[BE])[kb];//kbe
+			real fTW = (D.f[TW])[kw];//ktw
+			real fTN = (D.f[TN])[k];//ktn
+			real fBS = (D.f[BS])[kbs];
+			real fBN = (D.f[BN])[kb];//kbn
+			real fTS = (D.f[TS])[ks];//kts
+			real fZERO = (D.f[REST])[k];//kzero
+			real fTNE = (D.f[TNE])[k];//ktne
+			real fTSW = (D.f[TSW])[ksw];//ktsw
+			real fTSE = (D.f[TSE])[ks];//ktse
+			real fTNW = (D.f[TNW])[kw];//ktnw
+			real fBNE = (D.f[BNE])[kb];//kbne
+			real fBSW = (D.f[BSW])[kbsw];
+			real fBSE = (D.f[BSE])[kbs];//kbse
+			real fBNW = (D.f[BNW])[kbw];//kbnw
 										   ////////////////////////////////////////////////////////////////////////////////
 
 
@@ -205,33 +206,33 @@ extern "C" __global__ void LB_Kernel_BGK_Incomp_SP_27(real omega,
 
 
 			//////////////////////////////////////////////////////////////////////////                            
-			(D.f[dirE])[k] = fW;
-			(D.f[dirW])[kw] = fE;
-			(D.f[dirN])[k] = fS;
-			(D.f[dirS])[ks] = fN;
-			(D.f[dirT])[k] = fB;
-			(D.f[dirB])[kb] = fT;
-			(D.f[dirNE])[k] = fSW;
-			(D.f[dirSW])[ksw] = fNE;
-			(D.f[dirSE])[ks] = fNW;
-			(D.f[dirNW])[kw] = fSE;
-			(D.f[dirTE])[k] = fBW;
-			(D.f[dirBW])[kbw] = fTE;
-			(D.f[dirBE])[kb] = fTW;
-			(D.f[dirTW])[kw] = fBE;
-			(D.f[dirTN])[k] = fBS;
-			(D.f[dirBS])[kbs] = fTN;
-			(D.f[dirBN])[kb] = fTS;
-			(D.f[dirTS])[ks] = fBN;
-			(D.f[dirZERO])[k] = fZERO;
-			(D.f[dirTNE])[k] = fBSW;
-			(D.f[dirTSE])[ks] = fBNW;
-			(D.f[dirBNE])[kb] = fTSW;
-			(D.f[dirBSE])[kbs] = fTNW;
-			(D.f[dirTNW])[kw] = fBSE;
-			(D.f[dirTSW])[ksw] = fBNE;
-			(D.f[dirBNW])[kbw] = fTSE;
-			(D.f[dirBSW])[kbsw] = fTNE;
+			(D.f[E])[k] = fW;
+			(D.f[W])[kw] = fE;
+			(D.f[N])[k] = fS;
+			(D.f[S])[ks] = fN;
+			(D.f[T])[k] = fB;
+			(D.f[B])[kb] = fT;
+			(D.f[NE])[k] = fSW;
+			(D.f[SW])[ksw] = fNE;
+			(D.f[SE])[ks] = fNW;
+			(D.f[NW])[kw] = fSE;
+			(D.f[TE])[k] = fBW;
+			(D.f[BW])[kbw] = fTE;
+			(D.f[BE])[kb] = fTW;
+			(D.f[TW])[kw] = fBE;
+			(D.f[TN])[k] = fBS;
+			(D.f[BS])[kbs] = fTN;
+			(D.f[BN])[kb] = fTS;
+			(D.f[TS])[ks] = fBN;
+			(D.f[REST])[k] = fZERO;
+			(D.f[TNE])[k] = fBSW;
+			(D.f[TSE])[ks] = fBNW;
+			(D.f[BNE])[kb] = fTSW;
+			(D.f[BSE])[kbs] = fTNW;
+			(D.f[TNW])[kw] = fBSE;
+			(D.f[TSW])[ksw] = fBNE;
+			(D.f[BNW])[kbw] = fTSE;
+			(D.f[BSW])[kbsw] = fTNE;
 			//////////////////////////////////////////////////////////////////////////                            
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGKPlus/BGKPlusIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGKPlus/BGKPlusIncompSP27_Device.cu
index deb8d94dc631c1dfaabddbf97b568d82ab47ebf6..ab28fc544e66de7e31050ab125c9ca7bef40e260 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGKPlus/BGKPlusIncompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/BGKPlus/BGKPlusIncompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_BGK_Plus_Incomp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_BGK_Plus_Incomp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,33 +126,33 @@ extern "C" __global__ void LB_Kernel_BGK_Plus_Incomp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -723,33 +724,33 @@ extern "C" __global__ void LB_Kernel_BGK_Plus_Incomp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cascade/CascadeIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cascade/CascadeIncompSP27_Device.cu
index 025729760d975e04bb51214f59715c0cd8c8685f..d88f7492c9bf366a57155826fb57d328816cc2b2 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cascade/CascadeIncompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cascade/CascadeIncompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_Cascade_Incomp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_Cascade_Incomp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,33 +126,33 @@ extern "C" __global__ void LB_Kernel_Cascade_Incomp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -727,33 +728,33 @@ extern "C" __global__ void LB_Kernel_Cascade_Incomp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cumulant1hSP27/Cumulant1hIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cumulant1hSP27/Cumulant1hIncompSP27_Device.cu
index 84bf396c47301fe80cca36294a869c0bdd87f9e6..9d3fe2781a4cc3fabb4ee24a5b980360ab324b94 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cumulant1hSP27/Cumulant1hIncompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/Cumulant1hSP27/Cumulant1hIncompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_Cum_1h_Incomp_SP_27(real omega,
@@ -41,63 +42,63 @@ extern "C" __global__ void LB_Kernel_Cum_1h_Incomp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -158,33 +159,33 @@ extern "C" __global__ void LB_Kernel_Cum_1h_Incomp_SP_27(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//Ship
 			real coord0X = 281.125f;//7.5f;
@@ -1160,33 +1161,33 @@ extern "C" __global__ void LB_Kernel_Cum_1h_Incomp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantIsoSP27/CumulantIsoIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantIsoSP27/CumulantIsoIncompSP27_Device.cu
index 753bb0be77c2e269e77e84f12ccf52be71059eb3..bfcb586e71f96b0f92d9a0331c38f06070848adb 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantIsoSP27/CumulantIsoIncompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantIsoSP27/CumulantIsoIncompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_Cum_IsoTest_Incomp_SP_27(real omega,
@@ -39,63 +40,63 @@ extern "C" __global__ void LB_Kernel_Cum_IsoTest_Incomp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -128,33 +129,33 @@ extern "C" __global__ void LB_Kernel_Cum_IsoTest_Incomp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -972,33 +973,33 @@ extern "C" __global__ void LB_Kernel_Cum_IsoTest_Incomp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantK15/CumulantK15Incomp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantK15/CumulantK15Incomp_Device.cu
index 9c8ca3a6802add72614b58771e6104ab68fa01ec..1727427aef2de70c3810cf08e68128c00e4aab5a 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantK15/CumulantK15Incomp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/CumulantK15/CumulantK15Incomp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_CumulantK15Incomp(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_CumulantK15Incomp(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -153,33 +154,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15Incomp(real omega,
 			//unsigned int ktne = k;
 			//unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -1205,33 +1206,33 @@ extern "C" __global__ void LB_Kernel_CumulantK15Incomp(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/MRT/MRTIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/MRT/MRTIncompSP27_Device.cu
index be2b2333ab7375b5c8b851d705b562fce87f1d2a..700cd974b1c739dd5cb3722917453707e465972f 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/MRT/MRTIncompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/FluidFlow/Incompressible/MRT/MRTIncompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_MRT_Incomp_SP_27(real omega,
@@ -36,63 +37,63 @@ extern "C" __global__ void LB_Kernel_MRT_Incomp_SP_27(real omega,
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -125,33 +126,33 @@ extern "C" __global__ void LB_Kernel_MRT_Incomp_SP_27(real omega,
 			//unsigned int ktne = k;
 			unsigned int kbsw = neighborZ[ksw];
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];//[ke   ];// +  c2over27 ;(D.f[dirE   ])[k  ];//ke
-			real mfabb = (D.f[dirW])[kw];//[kw   ];// +  c2over27 ;(D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN])[k];//[kn   ];// +  c2over27 ;(D.f[dirN   ])[k  ];//kn
-			real mfbab = (D.f[dirS])[ks];//[ks   ];// +  c2over27 ;(D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT])[k];//[kt   ];// +  c2over27 ;(D.f[dirT   ])[k  ];//kt
-			real mfbba = (D.f[dirB])[kb];//[kb   ];// +  c2over27 ;(D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE])[k];//[kne  ];// +  c1over54 ;(D.f[dirNE  ])[k  ];//kne
-			real mfaab = (D.f[dirSW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE])[ks];//[kse  ];// +  c1over54 ;(D.f[dirSE  ])[ks ];//kse
-			real mfacb = (D.f[dirNW])[kw];//[knw  ];// +  c1over54 ;(D.f[dirNW  ])[kw ];//knw
-			real mfcbc = (D.f[dirTE])[k];//[kte  ];// +  c1over54 ;(D.f[dirTE  ])[k  ];//kte
-			real mfaba = (D.f[dirBW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE])[kb];//[kbe  ];// +  c1over54 ;(D.f[dirBE  ])[kb ];//kbe
-			real mfabc = (D.f[dirTW])[kw];//[ktw  ];// +  c1over54 ;(D.f[dirTW  ])[kw ];//ktw
-			real mfbcc = (D.f[dirTN])[k];//[ktn  ];// +  c1over54 ;(D.f[dirTN  ])[k  ];//ktn
-			real mfbaa = (D.f[dirBS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN])[kb];//[kbn  ];// +  c1over54 ;(D.f[dirBN  ])[kb ];//kbn
-			real mfbac = (D.f[dirTS])[ks];//[kts  ];// +  c1over54 ;(D.f[dirTS  ])[ks ];//kts
-			real mfbbb = (D.f[dirZERO])[k];//[kzero];// +  c8over27 ;(D.f[dirZERO])[k  ];//kzero
-			real mfccc = (D.f[dirTNE])[k];//[ktne ];// +  c1over216;(D.f[dirTNE ])[k  ];//ktne
-			real mfaac = (D.f[dirTSW])[ksw];//[ktsw ];// +  c1over216;(D.f[dirTSW ])[ksw];//ktsw
-			real mfcac = (D.f[dirTSE])[ks];//[ktse ];// +  c1over216;(D.f[dirTSE ])[ks ];//ktse
-			real mfacc = (D.f[dirTNW])[kw];//[ktnw ];// +  c1over216;(D.f[dirTNW ])[kw ];//ktnw
-			real mfcca = (D.f[dirBNE])[kb];//[kbne ];// +  c1over216;(D.f[dirBNE ])[kb ];//kbne
-			real mfaaa = (D.f[dirBSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[dirBSW ])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];//[kbse ];// +  c1over216;(D.f[dirBSE ])[kbs];//kbse
-			real mfaca = (D.f[dirBNW])[kbw];//[kbnw ];// +  c1over216;(D.f[dirBNW ])[kbw];//kbnw
+			real mfcbb = (D.f[E])[k];//[ke   ];// +  c2over27 ;(D.f[E   ])[k  ];//ke
+			real mfabb = (D.f[W])[kw];//[kw   ];// +  c2over27 ;(D.f[W   ])[kw ];
+			real mfbcb = (D.f[N])[k];//[kn   ];// +  c2over27 ;(D.f[N   ])[k  ];//kn
+			real mfbab = (D.f[S])[ks];//[ks   ];// +  c2over27 ;(D.f[S   ])[ks ];
+			real mfbbc = (D.f[T])[k];//[kt   ];// +  c2over27 ;(D.f[T   ])[k  ];//kt
+			real mfbba = (D.f[B])[kb];//[kb   ];// +  c2over27 ;(D.f[B   ])[kb ];
+			real mfccb = (D.f[NE])[k];//[kne  ];// +  c1over54 ;(D.f[NE  ])[k  ];//kne
+			real mfaab = (D.f[SW])[ksw];//[ksw  ];// +  c1over54 ;(D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE])[ks];//[kse  ];// +  c1over54 ;(D.f[SE  ])[ks ];//kse
+			real mfacb = (D.f[NW])[kw];//[knw  ];// +  c1over54 ;(D.f[NW  ])[kw ];//knw
+			real mfcbc = (D.f[TE])[k];//[kte  ];// +  c1over54 ;(D.f[TE  ])[k  ];//kte
+			real mfaba = (D.f[BW])[kbw];//[kbw  ];// +  c1over54 ;(D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE])[kb];//[kbe  ];// +  c1over54 ;(D.f[BE  ])[kb ];//kbe
+			real mfabc = (D.f[TW])[kw];//[ktw  ];// +  c1over54 ;(D.f[TW  ])[kw ];//ktw
+			real mfbcc = (D.f[TN])[k];//[ktn  ];// +  c1over54 ;(D.f[TN  ])[k  ];//ktn
+			real mfbaa = (D.f[BS])[kbs];//[kbs  ];// +  c1over54 ;(D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN])[kb];//[kbn  ];// +  c1over54 ;(D.f[BN  ])[kb ];//kbn
+			real mfbac = (D.f[TS])[ks];//[kts  ];// +  c1over54 ;(D.f[TS  ])[ks ];//kts
+			real mfbbb = (D.f[REST])[k];//[kzero];// +  c8over27 ;(D.f[REST])[k  ];//kzero
+			real mfccc = (D.f[TNE])[k];//[ktne ];// +  c1over216;(D.f[TNE ])[k  ];//ktne
+			real mfaac = (D.f[TSW])[ksw];//[ktsw ];// +  c1over216;(D.f[TSW ])[ksw];//ktsw
+			real mfcac = (D.f[TSE])[ks];//[ktse ];// +  c1over216;(D.f[TSE ])[ks ];//ktse
+			real mfacc = (D.f[TNW])[kw];//[ktnw ];// +  c1over216;(D.f[TNW ])[kw ];//ktnw
+			real mfcca = (D.f[BNE])[kb];//[kbne ];// +  c1over216;(D.f[BNE ])[kb ];//kbne
+			real mfaaa = (D.f[BSW])[kbsw];//[kbsw ];// +  c1over216;(D.f[BSW ])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];//[kbse ];// +  c1over216;(D.f[BSE ])[kbs];//kbse
+			real mfaca = (D.f[BNW])[kbw];//[kbnw ];// +  c1over216;(D.f[BNW ])[kbw];//kbnw
 											////////////////////////////////////////////////////////////////////////////////////
 											//slow
 											//real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
@@ -730,33 +731,33 @@ extern "C" __global__ void LB_Kernel_MRT_Incomp_SP_27(real omega,
 
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;//(D.f[ dirE   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ dirE   ])[k   ]                                                                     
-			(D.f[dirW])[kw] = mfcbb;//(D.f[ dirW   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ dirW   ])[kw  ]                                                                   
-			(D.f[dirN])[k] = mfbab;//(D.f[ dirN   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ dirN   ])[k   ]
-			(D.f[dirS])[ks] = mfbcb;//(D.f[ dirS   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ dirS   ])[ks  ]
-			(D.f[dirT])[k] = mfbba;//(D.f[ dirT   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ dirT   ])[k   ]
-			(D.f[dirB])[kb] = mfbbc;//(D.f[ dirB   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ dirB   ])[kb  ]
-			(D.f[dirNE])[k] = mfaab;//(D.f[ dirNE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ dirNE  ])[k   ]
-			(D.f[dirSW])[ksw] = mfccb;//(D.f[ dirSW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ dirSW  ])[ksw ]
-			(D.f[dirSE])[ks] = mfacb;//(D.f[ dirSE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ dirSE  ])[ks  ]
-			(D.f[dirNW])[kw] = mfcab;//(D.f[ dirNW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ dirNW  ])[kw  ]
-			(D.f[dirTE])[k] = mfaba;//(D.f[ dirTE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ dirTE  ])[k   ]
-			(D.f[dirBW])[kbw] = mfcbc;//(D.f[ dirBW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ dirBW  ])[kbw ]
-			(D.f[dirBE])[kb] = mfabc;//(D.f[ dirBE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ dirBE  ])[kb  ]
-			(D.f[dirTW])[kw] = mfcba;//(D.f[ dirTW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ dirTW  ])[kw  ]
-			(D.f[dirTN])[k] = mfbaa;//(D.f[ dirTN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ dirTN  ])[k   ]
-			(D.f[dirBS])[kbs] = mfbcc;//(D.f[ dirBS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ dirBS  ])[kbs ]
-			(D.f[dirBN])[kb] = mfbac;//(D.f[ dirBN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ dirBN  ])[kb  ]
-			(D.f[dirTS])[ks] = mfbca;//(D.f[ dirTS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ dirTS  ])[ks  ]
-			(D.f[dirZERO])[k] = mfbbb;//(D.f[ dirZERO])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ dirZERO])[k   ]
-			(D.f[dirTNE])[k] = mfaaa;//(D.f[ dirTNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ dirTNE ])[k   ]
-			(D.f[dirTSE])[ks] = mfaca;//(D.f[ dirTSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ dirTSE ])[ks  ]
-			(D.f[dirBNE])[kb] = mfaac;//(D.f[ dirBNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ dirBNE ])[kb  ]
-			(D.f[dirBSE])[kbs] = mfacc;//(D.f[ dirBSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ dirBSE ])[kbs ]
-			(D.f[dirTNW])[kw] = mfcaa;//(D.f[ dirTNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ dirTNW ])[kw  ]
-			(D.f[dirTSW])[ksw] = mfcca;//(D.f[ dirTSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ dirTSW ])[ksw ]
-			(D.f[dirBNW])[kbw] = mfcac;//(D.f[ dirBNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ dirBNW ])[kbw ]
-			(D.f[dirBSW])[kbsw] = mfccc;//(D.f[ dirBSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ dirBSW ])[kbsw]
+			(D.f[E])[k] = mfabb;//(D.f[ E   ])[ke   ] = mfabb;// -  c2over27 ;  (D.f[ E   ])[k   ]                                                                     
+			(D.f[W])[kw] = mfcbb;//(D.f[ W   ])[kw   ] = mfcbb;// -  c2over27 ;  (D.f[ W   ])[kw  ]                                                                   
+			(D.f[N])[k] = mfbab;//(D.f[ N   ])[kn   ] = mfbab;// -  c2over27 ;	 (D.f[ N   ])[k   ]
+			(D.f[S])[ks] = mfbcb;//(D.f[ S   ])[ks   ] = mfbcb;// -  c2over27 ;	 (D.f[ S   ])[ks  ]
+			(D.f[T])[k] = mfbba;//(D.f[ T   ])[kt   ] = mfbba;// -  c2over27 ;	 (D.f[ T   ])[k   ]
+			(D.f[B])[kb] = mfbbc;//(D.f[ B   ])[kb   ] = mfbbc;// -  c2over27 ;	 (D.f[ B   ])[kb  ]
+			(D.f[NE])[k] = mfaab;//(D.f[ NE  ])[kne  ] = mfaab;// -  c1over54 ;	 (D.f[ NE  ])[k   ]
+			(D.f[SW])[ksw] = mfccb;//(D.f[ SW  ])[ksw  ] = mfccb;// -  c1over54 ;	 (D.f[ SW  ])[ksw ]
+			(D.f[SE])[ks] = mfacb;//(D.f[ SE  ])[kse  ] = mfacb;// -  c1over54 ;	 (D.f[ SE  ])[ks  ]
+			(D.f[NW])[kw] = mfcab;//(D.f[ NW  ])[knw  ] = mfcab;// -  c1over54 ;	 (D.f[ NW  ])[kw  ]
+			(D.f[TE])[k] = mfaba;//(D.f[ TE  ])[kte  ] = mfaba;// -  c1over54 ;	 (D.f[ TE  ])[k   ]
+			(D.f[BW])[kbw] = mfcbc;//(D.f[ BW  ])[kbw  ] = mfcbc;// -  c1over54 ;	 (D.f[ BW  ])[kbw ]
+			(D.f[BE])[kb] = mfabc;//(D.f[ BE  ])[kbe  ] = mfabc;// -  c1over54 ;	 (D.f[ BE  ])[kb  ]
+			(D.f[TW])[kw] = mfcba;//(D.f[ TW  ])[ktw  ] = mfcba;// -  c1over54 ;	 (D.f[ TW  ])[kw  ]
+			(D.f[TN])[k] = mfbaa;//(D.f[ TN  ])[ktn  ] = mfbaa;// -  c1over54 ;	 (D.f[ TN  ])[k   ]
+			(D.f[BS])[kbs] = mfbcc;//(D.f[ BS  ])[kbs  ] = mfbcc;// -  c1over54 ;	 (D.f[ BS  ])[kbs ]
+			(D.f[BN])[kb] = mfbac;//(D.f[ BN  ])[kbn  ] = mfbac;// -  c1over54 ;	 (D.f[ BN  ])[kb  ]
+			(D.f[TS])[ks] = mfbca;//(D.f[ TS  ])[kts  ] = mfbca;// -  c1over54 ;	 (D.f[ TS  ])[ks  ]
+			(D.f[REST])[k] = mfbbb;//(D.f[ REST])[kzero] = mfbbb;// -  c8over27 ;	 (D.f[ REST])[k   ]
+			(D.f[TNE])[k] = mfaaa;//(D.f[ TNE ])[ktne ] = mfaaa;// -  c1over216;	 (D.f[ TNE ])[k   ]
+			(D.f[TSE])[ks] = mfaca;//(D.f[ TSE ])[ktse ] = mfaca;// -  c1over216;	 (D.f[ TSE ])[ks  ]
+			(D.f[BNE])[kb] = mfaac;//(D.f[ BNE ])[kbne ] = mfaac;// -  c1over216;	 (D.f[ BNE ])[kb  ]
+			(D.f[BSE])[kbs] = mfacc;//(D.f[ BSE ])[kbse ] = mfacc;// -  c1over216;	 (D.f[ BSE ])[kbs ]
+			(D.f[TNW])[kw] = mfcaa;//(D.f[ TNW ])[ktnw ] = mfcaa;// -  c1over216;	 (D.f[ TNW ])[kw  ]
+			(D.f[TSW])[ksw] = mfcca;//(D.f[ TSW ])[ktsw ] = mfcca;// -  c1over216;	 (D.f[ TSW ])[ksw ]
+			(D.f[BNW])[kbw] = mfcac;//(D.f[ BNW ])[kbnw ] = mfcac;// -  c1over216;	 (D.f[ BNW ])[kbw ]
+			(D.f[BSW])[kbsw] = mfccc;//(D.f[ BSW ])[kbsw ] = mfccc;// -  c1over216;	 (D.f[ BSW ])[kbsw]
 										////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu
index 2f42b717259aeab052be08b6ef6485771734ad98..e961c35e37dc870affdfe4abec9766e41fc47fdc 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
@@ -23,63 +24,63 @@ extern "C" __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
 	Distributions27 D;
 	if (EvenOrOdd == true)
 	{
-		D.f[dirE] = &DDStart[dirE   *size_Mat];
-		D.f[dirW] = &DDStart[dirW   *size_Mat];
-		D.f[dirN] = &DDStart[dirN   *size_Mat];
-		D.f[dirS] = &DDStart[dirS   *size_Mat];
-		D.f[dirT] = &DDStart[dirT   *size_Mat];
-		D.f[dirB] = &DDStart[dirB   *size_Mat];
-		D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-		D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-		D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-		D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-		D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-		D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-		D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-		D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-		D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-		D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-		D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-		D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-		D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-		D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-		D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-		D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-		D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-		D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-		D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-		D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-		D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+		D.f[E] = &DDStart[E   *size_Mat];
+		D.f[W] = &DDStart[W   *size_Mat];
+		D.f[N] = &DDStart[N   *size_Mat];
+		D.f[S] = &DDStart[S   *size_Mat];
+		D.f[T] = &DDStart[T   *size_Mat];
+		D.f[B] = &DDStart[B   *size_Mat];
+		D.f[NE] = &DDStart[NE  *size_Mat];
+		D.f[SW] = &DDStart[SW  *size_Mat];
+		D.f[SE] = &DDStart[SE  *size_Mat];
+		D.f[NW] = &DDStart[NW  *size_Mat];
+		D.f[TE] = &DDStart[TE  *size_Mat];
+		D.f[BW] = &DDStart[BW  *size_Mat];
+		D.f[BE] = &DDStart[BE  *size_Mat];
+		D.f[TW] = &DDStart[TW  *size_Mat];
+		D.f[TN] = &DDStart[TN  *size_Mat];
+		D.f[BS] = &DDStart[BS  *size_Mat];
+		D.f[BN] = &DDStart[BN  *size_Mat];
+		D.f[TS] = &DDStart[TS  *size_Mat];
+		D.f[REST] = &DDStart[REST*size_Mat];
+		D.f[TNE] = &DDStart[TNE *size_Mat];
+		D.f[TSW] = &DDStart[TSW *size_Mat];
+		D.f[TSE] = &DDStart[TSE *size_Mat];
+		D.f[TNW] = &DDStart[TNW *size_Mat];
+		D.f[BNE] = &DDStart[BNE *size_Mat];
+		D.f[BSW] = &DDStart[BSW *size_Mat];
+		D.f[BSE] = &DDStart[BSE *size_Mat];
+		D.f[BNW] = &DDStart[BNW *size_Mat];
 	}
 	else
 	{
-		D.f[dirW] = &DDStart[dirE   *size_Mat];
-		D.f[dirE] = &DDStart[dirW   *size_Mat];
-		D.f[dirS] = &DDStart[dirN   *size_Mat];
-		D.f[dirN] = &DDStart[dirS   *size_Mat];
-		D.f[dirB] = &DDStart[dirT   *size_Mat];
-		D.f[dirT] = &DDStart[dirB   *size_Mat];
-		D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-		D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-		D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-		D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-		D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-		D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-		D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-		D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-		D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-		D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-		D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-		D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-		D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-		D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-		D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-		D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-		D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-		D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-		D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-		D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-		D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+		D.f[W] = &DDStart[E   *size_Mat];
+		D.f[E] = &DDStart[W   *size_Mat];
+		D.f[S] = &DDStart[N   *size_Mat];
+		D.f[N] = &DDStart[S   *size_Mat];
+		D.f[B] = &DDStart[T   *size_Mat];
+		D.f[T] = &DDStart[B   *size_Mat];
+		D.f[SW] = &DDStart[NE  *size_Mat];
+		D.f[NE] = &DDStart[SW  *size_Mat];
+		D.f[NW] = &DDStart[SE  *size_Mat];
+		D.f[SE] = &DDStart[NW  *size_Mat];
+		D.f[BW] = &DDStart[TE  *size_Mat];
+		D.f[TE] = &DDStart[BW  *size_Mat];
+		D.f[TW] = &DDStart[BE  *size_Mat];
+		D.f[BE] = &DDStart[TW  *size_Mat];
+		D.f[BS] = &DDStart[TN  *size_Mat];
+		D.f[TN] = &DDStart[BS  *size_Mat];
+		D.f[TS] = &DDStart[BN  *size_Mat];
+		D.f[BN] = &DDStart[TS  *size_Mat];
+		D.f[REST] = &DDStart[REST*size_Mat];
+		D.f[BSW] = &DDStart[TNE *size_Mat];
+		D.f[BNE] = &DDStart[TSW *size_Mat];
+		D.f[BNW] = &DDStart[TSE *size_Mat];
+		D.f[BSE] = &DDStart[TNW *size_Mat];
+		D.f[TSW] = &DDStart[BNE *size_Mat];
+		D.f[TNE] = &DDStart[BSW *size_Mat];
+		D.f[TNW] = &DDStart[BSE *size_Mat];
+		D.f[TSE] = &DDStart[BNW *size_Mat];
 	}
 
 	////////////////////////////////////////////////////////////////////////////////
@@ -106,33 +107,33 @@ extern "C" __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
 		unsigned int kbs = neighborZ[ks];
 		unsigned int kbsw = neighborZ[ksw];
 		//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-		real mfcbb = (D.f[dirE])[k];
-		real mfabb = (D.f[dirW])[kw];
-		real mfbcb = (D.f[dirN])[k];
-		real mfbab = (D.f[dirS])[ks];
-		real mfbbc = (D.f[dirT])[k];
-		real mfbba = (D.f[dirB])[kb];
-		real mfccb = (D.f[dirNE])[k];
-		real mfaab = (D.f[dirSW])[ksw];
-		real mfcab = (D.f[dirSE])[ks];
-		real mfacb = (D.f[dirNW])[kw];
-		real mfcbc = (D.f[dirTE])[k];
-		real mfaba = (D.f[dirBW])[kbw];
-		real mfcba = (D.f[dirBE])[kb];
-		real mfabc = (D.f[dirTW])[kw];
-		real mfbcc = (D.f[dirTN])[k];
-		real mfbaa = (D.f[dirBS])[kbs];
-		real mfbca = (D.f[dirBN])[kb];
-		real mfbac = (D.f[dirTS])[ks];
-		real mfbbb = (D.f[dirZERO])[k];
-		real mfccc = (D.f[dirTNE])[k];
-		real mfaac = (D.f[dirTSW])[ksw];
-		real mfcac = (D.f[dirTSE])[ks];
-		real mfacc = (D.f[dirTNW])[kw];
-		real mfcca = (D.f[dirBNE])[kb];
-		real mfaaa = (D.f[dirBSW])[kbsw];
-		real mfcaa = (D.f[dirBSE])[kbs];
-		real mfaca = (D.f[dirBNW])[kbw];
+		real mfcbb = (D.f[E])[k];
+		real mfabb = (D.f[W])[kw];
+		real mfbcb = (D.f[N])[k];
+		real mfbab = (D.f[S])[ks];
+		real mfbbc = (D.f[T])[k];
+		real mfbba = (D.f[B])[kb];
+		real mfccb = (D.f[NE])[k];
+		real mfaab = (D.f[SW])[ksw];
+		real mfcab = (D.f[SE])[ks];
+		real mfacb = (D.f[NW])[kw];
+		real mfcbc = (D.f[TE])[k];
+		real mfaba = (D.f[BW])[kbw];
+		real mfcba = (D.f[BE])[kb];
+		real mfabc = (D.f[TW])[kw];
+		real mfbcc = (D.f[TN])[k];
+		real mfbaa = (D.f[BS])[kbs];
+		real mfbca = (D.f[BN])[kb];
+		real mfbac = (D.f[TS])[ks];
+		real mfbbb = (D.f[REST])[k];
+		real mfccc = (D.f[TNE])[k];
+		real mfaac = (D.f[TSW])[ksw];
+		real mfcac = (D.f[TSE])[ks];
+		real mfacc = (D.f[TNW])[kw];
+		real mfcca = (D.f[BNE])[kb];
+		real mfaaa = (D.f[BSW])[kbsw];
+		real mfcaa = (D.f[BSE])[kbs];
+		real mfaca = (D.f[BNW])[kbw];
 		////////////////////////////////////////////////////////////////////////////////////
 		real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 			(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -903,33 +904,33 @@ extern "C" __global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega,
 		////////////////////////////////////////////////////////////////////////////////////
 
 		////////////////////////////////////////////////////////////////////////////////////
-		(D.f[dirE])[k] = mfabb;
-		(D.f[dirW])[kw] = mfcbb;
-		(D.f[dirN])[k] = mfbab;
-		(D.f[dirS])[ks] = mfbcb;
-		(D.f[dirT])[k] = mfbba;
-		(D.f[dirB])[kb] = mfbbc;
-		(D.f[dirNE])[k] = mfaab;
-		(D.f[dirSW])[ksw] = mfccb;
-		(D.f[dirSE])[ks] = mfacb;
-		(D.f[dirNW])[kw] = mfcab;
-		(D.f[dirTE])[k] = mfaba;
-		(D.f[dirBW])[kbw] = mfcbc;
-		(D.f[dirBE])[kb] = mfabc;
-		(D.f[dirTW])[kw] = mfcba;
-		(D.f[dirTN])[k] = mfbaa;
-		(D.f[dirBS])[kbs] = mfbcc;
-		(D.f[dirBN])[kb] = mfbac;
-		(D.f[dirTS])[ks] = mfbca;
-		(D.f[dirZERO])[k] = mfbbb;
-		(D.f[dirTNE])[k] = mfaaa;
-		(D.f[dirTSE])[ks] = mfaca;
-		(D.f[dirBNE])[kb] = mfaac;
-		(D.f[dirBSE])[kbs] = mfacc;
-		(D.f[dirTNW])[kw] = mfcaa;
-		(D.f[dirTSW])[ksw] = mfcca;
-		(D.f[dirBNW])[kbw] = mfcac;
-		(D.f[dirBSW])[kbsw] = mfccc;
+		(D.f[E])[k] = mfabb;
+		(D.f[W])[kw] = mfcbb;
+		(D.f[N])[k] = mfbab;
+		(D.f[S])[ks] = mfbcb;
+		(D.f[T])[k] = mfbba;
+		(D.f[B])[kb] = mfbbc;
+		(D.f[NE])[k] = mfaab;
+		(D.f[SW])[ksw] = mfccb;
+		(D.f[SE])[ks] = mfacb;
+		(D.f[NW])[kw] = mfcab;
+		(D.f[TE])[k] = mfaba;
+		(D.f[BW])[kbw] = mfcbc;
+		(D.f[BE])[kb] = mfabc;
+		(D.f[TW])[kw] = mfcba;
+		(D.f[TN])[k] = mfbaa;
+		(D.f[BS])[kbs] = mfbcc;
+		(D.f[BN])[kb] = mfbac;
+		(D.f[TS])[ks] = mfbca;
+		(D.f[REST])[k] = mfbbb;
+		(D.f[TNE])[k] = mfaaa;
+		(D.f[TSE])[ks] = mfaca;
+		(D.f[BNE])[kb] = mfaac;
+		(D.f[BSE])[kbs] = mfacc;
+		(D.f[TNW])[kw] = mfcaa;
+		(D.f[TSW])[ksw] = mfcca;
+		(D.f[BNW])[kbw] = mfcac;
+		(D.f[BSW])[kbsw] = mfccc;
 		////////////////////////////////////////////////////////////////////////////////////
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim_Device.cu
index d57f956d074c43f4b52a7e1d7b1227777540812d..ede7eafeda92faf9be1d5ee0512d37d828093397 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim_Device.cu
@@ -40,11 +40,12 @@
 //=======================================================================================
 /* Device code */
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 #include "Kernel/Utilities/DistributionHelper.cuh"
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "Kernel/ChimeraTransformation.h"
 
 
@@ -107,33 +108,33 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Set local distributions
         //!
-        real mfcbb = (dist.f[dirE])[k];
-        real mfabb = (dist.f[dirW])[kw];
-        real mfbcb = (dist.f[dirN])[k];
-        real mfbab = (dist.f[dirS])[ks];
-        real mfbbc = (dist.f[dirT])[k];
-        real mfbba = (dist.f[dirB])[kb];
-        real mfccb = (dist.f[dirNE])[k];
-        real mfaab = (dist.f[dirSW])[ksw];
-        real mfcab = (dist.f[dirSE])[ks];
-        real mfacb = (dist.f[dirNW])[kw];
-        real mfcbc = (dist.f[dirTE])[k];
-        real mfaba = (dist.f[dirBW])[kbw];
-        real mfcba = (dist.f[dirBE])[kb];
-        real mfabc = (dist.f[dirTW])[kw];
-        real mfbcc = (dist.f[dirTN])[k];
-        real mfbaa = (dist.f[dirBS])[kbs];
-        real mfbca = (dist.f[dirBN])[kb];
-        real mfbac = (dist.f[dirTS])[ks];
-        real mfbbb = (dist.f[dirZERO])[k];
-        real mfccc = (dist.f[dirTNE])[k];
-        real mfaac = (dist.f[dirTSW])[ksw];
-        real mfcac = (dist.f[dirTSE])[ks];
-        real mfacc = (dist.f[dirTNW])[kw];
-        real mfcca = (dist.f[dirBNE])[kb];
-        real mfaaa = (dist.f[dirBSW])[kbsw];
-        real mfcaa = (dist.f[dirBSE])[kbs];
-        real mfaca = (dist.f[dirBNW])[kbw];
+        real mfcbb = (dist.f[E])[k];
+        real mfabb = (dist.f[W])[kw];
+        real mfbcb = (dist.f[N])[k];
+        real mfbab = (dist.f[S])[ks];
+        real mfbbc = (dist.f[T])[k];
+        real mfbba = (dist.f[B])[kb];
+        real mfccb = (dist.f[NE])[k];
+        real mfaab = (dist.f[SW])[ksw];
+        real mfcab = (dist.f[SE])[ks];
+        real mfacb = (dist.f[NW])[kw];
+        real mfcbc = (dist.f[TE])[k];
+        real mfaba = (dist.f[BW])[kbw];
+        real mfcba = (dist.f[BE])[kb];
+        real mfabc = (dist.f[TW])[kw];
+        real mfbcc = (dist.f[TN])[k];
+        real mfbaa = (dist.f[BS])[kbs];
+        real mfbca = (dist.f[BN])[kb];
+        real mfbac = (dist.f[TS])[ks];
+        real mfbbb = (dist.f[REST])[k];
+        real mfccc = (dist.f[TNE])[k];
+        real mfaac = (dist.f[TSW])[ksw];
+        real mfcac = (dist.f[TSE])[ks];
+        real mfacc = (dist.f[TNW])[kw];
+        real mfcca = (dist.f[BNE])[kb];
+        real mfaaa = (dist.f[BSW])[kbsw];
+        real mfcaa = (dist.f[BSE])[kbs];
+        real mfaca = (dist.f[BNW])[kbw];
         //////////////////////////////////////////////////////(unsigned long)//////////////////////////////
         //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
         //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015),
@@ -312,13 +313,13 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
         real O6 = c1o1;
 
         ////////////////////////////////////////////////////////////////////////////////////
-        //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
+        //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
         //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for
         //! different bulk viscosity).
         //!
-        real A = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
-        real B = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega);
+        real factorA = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega);
+        real factorB = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega);
 
         ////////////////////////////////////////////////////////////////////////////////////
         //! - Compute cumulants from central moments according to Eq. (20)-(23) in
@@ -493,12 +494,12 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
         //! to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a>
         //!
-        CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-        CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-        CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-        CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-        CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-        CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+        CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+        CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+        CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+        CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+        CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+        CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 
         //////////////////////////////////////////////////////////////////////////
         // 5.
@@ -630,33 +631,33 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
         //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017),
         //! DOI:10.3390/computation5020019 ]</b></a>
         //!
-        (dist.f[dirE])[k]      = mfabb;
-        (dist.f[dirW])[kw]     = mfcbb;
-        (dist.f[dirN])[k]      = mfbab;
-        (dist.f[dirS])[ks]     = mfbcb;
-        (dist.f[dirT])[k]      = mfbba;
-        (dist.f[dirB])[kb]     = mfbbc;
-        (dist.f[dirNE])[k]     = mfaab;
-        (dist.f[dirSW])[ksw]   = mfccb;
-        (dist.f[dirSE])[ks]    = mfacb;
-        (dist.f[dirNW])[kw]    = mfcab;
-        (dist.f[dirTE])[k]     = mfaba;
-        (dist.f[dirBW])[kbw]   = mfcbc;
-        (dist.f[dirBE])[kb]    = mfabc;
-        (dist.f[dirTW])[kw]    = mfcba;
-        (dist.f[dirTN])[k]     = mfbaa;
-        (dist.f[dirBS])[kbs]   = mfbcc;
-        (dist.f[dirBN])[kb]    = mfbac;
-        (dist.f[dirTS])[ks]    = mfbca;
-        (dist.f[dirZERO])[k]   = mfbbb;
-        (dist.f[dirTNE])[k]    = mfaaa;
-        (dist.f[dirTSE])[ks]   = mfaca;
-        (dist.f[dirBNE])[kb]   = mfaac;
-        (dist.f[dirBSE])[kbs]  = mfacc;
-        (dist.f[dirTNW])[kw]   = mfcaa;
-        (dist.f[dirTSW])[ksw]  = mfcca;
-        (dist.f[dirBNW])[kbw]  = mfcac;
-        (dist.f[dirBSW])[kbsw] = mfccc;
+        (dist.f[E])[k]      = mfabb;
+        (dist.f[W])[kw]     = mfcbb;
+        (dist.f[N])[k]      = mfbab;
+        (dist.f[S])[ks]     = mfbcb;
+        (dist.f[T])[k]      = mfbba;
+        (dist.f[B])[kb]     = mfbbc;
+        (dist.f[NE])[k]     = mfaab;
+        (dist.f[SW])[ksw]   = mfccb;
+        (dist.f[SE])[ks]    = mfacb;
+        (dist.f[NW])[kw]    = mfcab;
+        (dist.f[TE])[k]     = mfaba;
+        (dist.f[BW])[kbw]   = mfcbc;
+        (dist.f[BE])[kb]    = mfabc;
+        (dist.f[TW])[kw]    = mfcba;
+        (dist.f[TN])[k]     = mfbaa;
+        (dist.f[BS])[kbs]   = mfbcc;
+        (dist.f[BN])[kb]    = mfbac;
+        (dist.f[TS])[ks]    = mfbca;
+        (dist.f[REST])[k]   = mfbbb;
+        (dist.f[TNE])[k]    = mfaaa;
+        (dist.f[TSE])[ks]   = mfaca;
+        (dist.f[BNE])[kb]   = mfaac;
+        (dist.f[BSE])[kbs]  = mfacc;
+        (dist.f[TNW])[kw]   = mfcaa;
+        (dist.f[TSW])[ksw]  = mfcca;
+        (dist.f[BNW])[kbw]  = mfcac;
+        (dist.f[BSW])[kbsw] = mfccc;
 
 
     }
@@ -709,7 +710,7 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
 // //=======================================================================================
 // /* Device code */
 // #include "LBM/LB.h" 
-// #include "LBM/D3Q27.h"
+// #include "lbm/constants/D3Q27.h"
 // #include <lbm/constants/NumericConstants.h>
 
 // using namespace vf::lbm::constant;
@@ -780,61 +781,61 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
 
 //         Distributions27 dist;
 //         if (isEvenTimestep) {
-//             dist.f[dirE]    = &distributions[dirE * size_Mat];
-//             dist.f[dirW]    = &distributions[dirW * size_Mat];
-//             dist.f[dirN]    = &distributions[dirN * size_Mat];
-//             dist.f[dirS]    = &distributions[dirS * size_Mat];
-//             dist.f[dirT]    = &distributions[dirT * size_Mat];
-//             dist.f[dirB]    = &distributions[dirB * size_Mat];
-//             dist.f[dirNE]   = &distributions[dirNE * size_Mat];
-//             dist.f[dirSW]   = &distributions[dirSW * size_Mat];
-//             dist.f[dirSE]   = &distributions[dirSE * size_Mat];
-//             dist.f[dirNW]   = &distributions[dirNW * size_Mat];
-//             dist.f[dirTE]   = &distributions[dirTE * size_Mat];
-//             dist.f[dirBW]   = &distributions[dirBW * size_Mat];
-//             dist.f[dirBE]   = &distributions[dirBE * size_Mat];
-//             dist.f[dirTW]   = &distributions[dirTW * size_Mat];
-//             dist.f[dirTN]   = &distributions[dirTN * size_Mat];
-//             dist.f[dirBS]   = &distributions[dirBS * size_Mat];
-//             dist.f[dirBN]   = &distributions[dirBN * size_Mat];
-//             dist.f[dirTS]   = &distributions[dirTS * size_Mat];
-//             dist.f[dirZERO] = &distributions[dirZERO * size_Mat];
-//             dist.f[dirTNE]  = &distributions[dirTNE * size_Mat];
-//             dist.f[dirTSW]  = &distributions[dirTSW * size_Mat];
-//             dist.f[dirTSE]  = &distributions[dirTSE * size_Mat];
-//             dist.f[dirTNW]  = &distributions[dirTNW * size_Mat];
-//             dist.f[dirBNE]  = &distributions[dirBNE * size_Mat];
-//             dist.f[dirBSW]  = &distributions[dirBSW * size_Mat];
-//             dist.f[dirBSE]  = &distributions[dirBSE * size_Mat];
-//             dist.f[dirBNW]  = &distributions[dirBNW * size_Mat];
+//             dist.f[E]    = &distributions[E * size_Mat];
+//             dist.f[W]    = &distributions[W * size_Mat];
+//             dist.f[N]    = &distributions[N * size_Mat];
+//             dist.f[S]    = &distributions[S * size_Mat];
+//             dist.f[T]    = &distributions[T * size_Mat];
+//             dist.f[B]    = &distributions[B * size_Mat];
+//             dist.f[NE]   = &distributions[NE * size_Mat];
+//             dist.f[SW]   = &distributions[SW * size_Mat];
+//             dist.f[SE]   = &distributions[SE * size_Mat];
+//             dist.f[NW]   = &distributions[NW * size_Mat];
+//             dist.f[TE]   = &distributions[TE * size_Mat];
+//             dist.f[BW]   = &distributions[BW * size_Mat];
+//             dist.f[BE]   = &distributions[BE * size_Mat];
+//             dist.f[TW]   = &distributions[TW * size_Mat];
+//             dist.f[TN]   = &distributions[TN * size_Mat];
+//             dist.f[BS]   = &distributions[BS * size_Mat];
+//             dist.f[BN]   = &distributions[BN * size_Mat];
+//             dist.f[TS]   = &distributions[TS * size_Mat];
+//             dist.f[REST] = &distributions[REST * size_Mat];
+//             dist.f[TNE]  = &distributions[TNE * size_Mat];
+//             dist.f[TSW]  = &distributions[TSW * size_Mat];
+//             dist.f[TSE]  = &distributions[TSE * size_Mat];
+//             dist.f[TNW]  = &distributions[TNW * size_Mat];
+//             dist.f[BNE]  = &distributions[BNE * size_Mat];
+//             dist.f[BSW]  = &distributions[BSW * size_Mat];
+//             dist.f[BSE]  = &distributions[BSE * size_Mat];
+//             dist.f[BNW]  = &distributions[BNW * size_Mat];
 //         } else {
-//             dist.f[dirW]    = &distributions[dirE * size_Mat];
-//             dist.f[dirE]    = &distributions[dirW * size_Mat];
-//             dist.f[dirS]    = &distributions[dirN * size_Mat];
-//             dist.f[dirN]    = &distributions[dirS * size_Mat];
-//             dist.f[dirB]    = &distributions[dirT * size_Mat];
-//             dist.f[dirT]    = &distributions[dirB * size_Mat];
-//             dist.f[dirSW]   = &distributions[dirNE * size_Mat];
-//             dist.f[dirNE]   = &distributions[dirSW * size_Mat];
-//             dist.f[dirNW]   = &distributions[dirSE * size_Mat];
-//             dist.f[dirSE]   = &distributions[dirNW * size_Mat];
-//             dist.f[dirBW]   = &distributions[dirTE * size_Mat];
-//             dist.f[dirTE]   = &distributions[dirBW * size_Mat];
-//             dist.f[dirTW]   = &distributions[dirBE * size_Mat];
-//             dist.f[dirBE]   = &distributions[dirTW * size_Mat];
-//             dist.f[dirBS]   = &distributions[dirTN * size_Mat];
-//             dist.f[dirTN]   = &distributions[dirBS * size_Mat];
-//             dist.f[dirTS]   = &distributions[dirBN * size_Mat];
-//             dist.f[dirBN]   = &distributions[dirTS * size_Mat];
-//             dist.f[dirZERO] = &distributions[dirZERO * size_Mat];
-//             dist.f[dirBSW]  = &distributions[dirTNE * size_Mat];
-//             dist.f[dirBNE]  = &distributions[dirTSW * size_Mat];
-//             dist.f[dirBNW]  = &distributions[dirTSE * size_Mat];
-//             dist.f[dirBSE]  = &distributions[dirTNW * size_Mat];
-//             dist.f[dirTSW]  = &distributions[dirBNE * size_Mat];
-//             dist.f[dirTNE]  = &distributions[dirBSW * size_Mat];
-//             dist.f[dirTNW]  = &distributions[dirBSE * size_Mat];
-//             dist.f[dirTSE]  = &distributions[dirBNW * size_Mat];
+//             dist.f[W]    = &distributions[E * size_Mat];
+//             dist.f[E]    = &distributions[W * size_Mat];
+//             dist.f[S]    = &distributions[N * size_Mat];
+//             dist.f[N]    = &distributions[S * size_Mat];
+//             dist.f[B]    = &distributions[T * size_Mat];
+//             dist.f[T]    = &distributions[B * size_Mat];
+//             dist.f[SW]   = &distributions[NE * size_Mat];
+//             dist.f[NE]   = &distributions[SW * size_Mat];
+//             dist.f[NW]   = &distributions[SE * size_Mat];
+//             dist.f[SE]   = &distributions[NW * size_Mat];
+//             dist.f[BW]   = &distributions[TE * size_Mat];
+//             dist.f[TE]   = &distributions[BW * size_Mat];
+//             dist.f[TW]   = &distributions[BE * size_Mat];
+//             dist.f[BE]   = &distributions[TW * size_Mat];
+//             dist.f[BS]   = &distributions[TN * size_Mat];
+//             dist.f[TN]   = &distributions[BS * size_Mat];
+//             dist.f[TS]   = &distributions[BN * size_Mat];
+//             dist.f[BN]   = &distributions[TS * size_Mat];
+//             dist.f[REST] = &distributions[REST * size_Mat];
+//             dist.f[BSW]  = &distributions[TNE * size_Mat];
+//             dist.f[BNE]  = &distributions[TSW * size_Mat];
+//             dist.f[BNW]  = &distributions[TSE * size_Mat];
+//             dist.f[BSE]  = &distributions[TNW * size_Mat];
+//             dist.f[TSW]  = &distributions[BNE * size_Mat];
+//             dist.f[TNE]  = &distributions[BSW * size_Mat];
+//             dist.f[TNW]  = &distributions[BSE * size_Mat];
+//             dist.f[TSE]  = &distributions[BNW * size_Mat];
 //         }
 //         ////////////////////////////////////////////////////////////////////////////////
 //         //! - Set neighbor indices (necessary for indirect addressing)
@@ -849,62 +850,62 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
 //         //! - Set local distributions
 //         //!
 
-//         // real mfcbb = distr_wrapper.distribution.f[dirE];
-//         // real mfabb = distr_wrapper.distribution.f[dirW];
-//         // real mfbcb = distr_wrapper.distribution.f[dirN];
-//         // real mfbab = distr_wrapper.distribution.f[dirS];
-//         // real mfbbc = distr_wrapper.distribution.f[dirT];
-//         // real mfbba = distr_wrapper.distribution.f[dirB];
-//         // real mfccb = distr_wrapper.distribution.f[dirNE];
-//         // real mfaab = distr_wrapper.distribution.f[dirSW];
-//         // real mfcab = distr_wrapper.distribution.f[dirSE];
-//         // real mfacb = distr_wrapper.distribution.f[dirNW];
-//         // real mfcbc = distr_wrapper.distribution.f[dirTE];
-//         // real mfaba = distr_wrapper.distribution.f[dirBW];
-//         // real mfcba = distr_wrapper.distribution.f[dirBE];
-//         // real mfabc = distr_wrapper.distribution.f[dirTW];
-//         // real mfbcc = distr_wrapper.distribution.f[dirTN];
-//         // real mfbaa = distr_wrapper.distribution.f[dirBS];
-//         // real mfbca = distr_wrapper.distribution.f[dirBN];
-//         // real mfbac = distr_wrapper.distribution.f[dirTS];
-//         // real mfbbb = distr_wrapper.distribution.f[dirZERO];
-//         // real mfccc = distr_wrapper.distribution.f[dirTNE];
-//         // real mfaac = distr_wrapper.distribution.f[dirTSW];
-//         // real mfcac = distr_wrapper.distribution.f[dirTSE];
-//         // real mfacc = distr_wrapper.distribution.f[dirTNW];
-//         // real mfcca = distr_wrapper.distribution.f[dirBNE];
-//         // real mfaaa = distr_wrapper.distribution.f[dirBSW];
-//         // real mfcaa = distr_wrapper.distribution.f[dirBSE];
-//         // real mfaca = distr_wrapper.distribution.f[dirBNW];
+//         // real mfcbb = distr_wrapper.distribution.f[E];
+//         // real mfabb = distr_wrapper.distribution.f[W];
+//         // real mfbcb = distr_wrapper.distribution.f[N];
+//         // real mfbab = distr_wrapper.distribution.f[S];
+//         // real mfbbc = distr_wrapper.distribution.f[T];
+//         // real mfbba = distr_wrapper.distribution.f[B];
+//         // real mfccb = distr_wrapper.distribution.f[NE];
+//         // real mfaab = distr_wrapper.distribution.f[SW];
+//         // real mfcab = distr_wrapper.distribution.f[SE];
+//         // real mfacb = distr_wrapper.distribution.f[NW];
+//         // real mfcbc = distr_wrapper.distribution.f[TE];
+//         // real mfaba = distr_wrapper.distribution.f[BW];
+//         // real mfcba = distr_wrapper.distribution.f[BE];
+//         // real mfabc = distr_wrapper.distribution.f[TW];
+//         // real mfbcc = distr_wrapper.distribution.f[TN];
+//         // real mfbaa = distr_wrapper.distribution.f[BS];
+//         // real mfbca = distr_wrapper.distribution.f[BN];
+//         // real mfbac = distr_wrapper.distribution.f[TS];
+//         // real mfbbb = distr_wrapper.distribution.f[REST];
+//         // real mfccc = distr_wrapper.distribution.f[TNE];
+//         // real mfaac = distr_wrapper.distribution.f[TSW];
+//         // real mfcac = distr_wrapper.distribution.f[TSE];
+//         // real mfacc = distr_wrapper.distribution.f[TNW];
+//         // real mfcca = distr_wrapper.distribution.f[BNE];
+//         // real mfaaa = distr_wrapper.distribution.f[BSW];
+//         // real mfcaa = distr_wrapper.distribution.f[BSE];
+//         // real mfaca = distr_wrapper.distribution.f[BNW];
 
         
-//         real mfcbb = (dist.f[dirE])[k];
-//         real mfabb = (dist.f[dirW])[kw];
-//         real mfbcb = (dist.f[dirN])[k];
-//         real mfbab = (dist.f[dirS])[ks];
-//         real mfbbc = (dist.f[dirT])[k];
-//         real mfbba = (dist.f[dirB])[kb];
-//         real mfccb = (dist.f[dirNE])[k];
-//         real mfaab = (dist.f[dirSW])[ksw];
-//         real mfcab = (dist.f[dirSE])[ks];
-//         real mfacb = (dist.f[dirNW])[kw];
-//         real mfcbc = (dist.f[dirTE])[k];
-//         real mfaba = (dist.f[dirBW])[kbw];
-//         real mfcba = (dist.f[dirBE])[kb];
-//         real mfabc = (dist.f[dirTW])[kw];
-//         real mfbcc = (dist.f[dirTN])[k];
-//         real mfbaa = (dist.f[dirBS])[kbs];
-//         real mfbca = (dist.f[dirBN])[kb];
-//         real mfbac = (dist.f[dirTS])[ks];
-//         real mfbbb = (dist.f[dirZERO])[k];
-//         real mfccc = (dist.f[dirTNE])[k];
-//         real mfaac = (dist.f[dirTSW])[ksw];
-//         real mfcac = (dist.f[dirTSE])[ks];
-//         real mfacc = (dist.f[dirTNW])[kw];
-//         real mfcca = (dist.f[dirBNE])[kb];
-//         real mfaaa = (dist.f[dirBSW])[kbsw];
-//         real mfcaa = (dist.f[dirBSE])[kbs];
-//         real mfaca = (dist.f[dirBNW])[kbw];
+//         real mfcbb = (dist.f[E])[k];
+//         real mfabb = (dist.f[W])[kw];
+//         real mfbcb = (dist.f[N])[k];
+//         real mfbab = (dist.f[S])[ks];
+//         real mfbbc = (dist.f[T])[k];
+//         real mfbba = (dist.f[B])[kb];
+//         real mfccb = (dist.f[NE])[k];
+//         real mfaab = (dist.f[SW])[ksw];
+//         real mfcab = (dist.f[SE])[ks];
+//         real mfacb = (dist.f[NW])[kw];
+//         real mfcbc = (dist.f[TE])[k];
+//         real mfaba = (dist.f[BW])[kbw];
+//         real mfcba = (dist.f[BE])[kb];
+//         real mfabc = (dist.f[TW])[kw];
+//         real mfbcc = (dist.f[TN])[k];
+//         real mfbaa = (dist.f[BS])[kbs];
+//         real mfbca = (dist.f[BN])[kb];
+//         real mfbac = (dist.f[TS])[ks];
+//         real mfbbb = (dist.f[REST])[k];
+//         real mfccc = (dist.f[TNE])[k];
+//         real mfaac = (dist.f[TSW])[ksw];
+//         real mfcac = (dist.f[TSE])[ks];
+//         real mfacc = (dist.f[TNW])[kw];
+//         real mfcca = (dist.f[BNE])[kb];
+//         real mfaaa = (dist.f[BSW])[kbsw];
+//         real mfcaa = (dist.f[BSE])[kbs];
+//         real mfaca = (dist.f[BNW])[kbw];
         
 //         //////////////////////////////////////////////////////(unsigned long)//////////////////////////////
 //         //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref
@@ -1090,7 +1091,7 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
 //         real O6 = c1o1;
 
 //         ////////////////////////////////////////////////////////////////////////////////////
-//         //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115)
+//         //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116)
 //         //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017),
 //         //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for
 //         //! different bulk viscosity).
@@ -1410,125 +1411,125 @@ extern "C" __global__ void LB_Kernel_TurbulentViscosityCumulantK17CompChim(
 //         //!
 
 
-//         distr_wrapper.distribution.f[dirE]      = mfabb;
-//         distr_wrapper.distribution.f[dirW]      = mfcbb;
-//         distr_wrapper.distribution.f[dirN]      = mfbab;
-//         distr_wrapper.distribution.f[dirS]      = mfbcb;
-//         distr_wrapper.distribution.f[dirT]      = mfbba;
-//         distr_wrapper.distribution.f[dirB]      = mfbbc;
-//         distr_wrapper.distribution.f[dirNE]     = mfaab;
-//         distr_wrapper.distribution.f[dirSW]     = mfccb;
-//         distr_wrapper.distribution.f[dirSE]     = mfacb;
-//         distr_wrapper.distribution.f[dirNW]     = mfcab;
-//         distr_wrapper.distribution.f[dirTE]     = mfaba;
-//         distr_wrapper.distribution.f[dirBW]     = mfcbc;
-//         distr_wrapper.distribution.f[dirBE]     = mfabc;
-//         distr_wrapper.distribution.f[dirTW]     = mfcba;
-//         distr_wrapper.distribution.f[dirTN]     = mfbaa;
-//         distr_wrapper.distribution.f[dirBS]     = mfbcc;
-//         distr_wrapper.distribution.f[dirBN]     = mfbac;
-//         distr_wrapper.distribution.f[dirTS]     = mfbca;
-//         distr_wrapper.distribution.f[dirZERO]   = mfbbb;
-//         distr_wrapper.distribution.f[dirTNE]    = mfaaa;
-//         distr_wrapper.distribution.f[dirTSW]    = mfaca;
-//         distr_wrapper.distribution.f[dirTSE]    = mfaac;
-//         distr_wrapper.distribution.f[dirTNW]    = mfacc;
-//         distr_wrapper.distribution.f[dirBNE]    = mfcaa;
-//         distr_wrapper.distribution.f[dirBSW]    = mfcca;
-//         distr_wrapper.distribution.f[dirBSE]    = mfcac;
-//         distr_wrapper.distribution.f[dirBNW]    = mfccc;
+//         distr_wrapper.distribution.f[E]      = mfabb;
+//         distr_wrapper.distribution.f[W]      = mfcbb;
+//         distr_wrapper.distribution.f[N]      = mfbab;
+//         distr_wrapper.distribution.f[S]      = mfbcb;
+//         distr_wrapper.distribution.f[T]      = mfbba;
+//         distr_wrapper.distribution.f[B]      = mfbbc;
+//         distr_wrapper.distribution.f[NE]     = mfaab;
+//         distr_wrapper.distribution.f[SW]     = mfccb;
+//         distr_wrapper.distribution.f[SE]     = mfacb;
+//         distr_wrapper.distribution.f[NW]     = mfcab;
+//         distr_wrapper.distribution.f[TE]     = mfaba;
+//         distr_wrapper.distribution.f[BW]     = mfcbc;
+//         distr_wrapper.distribution.f[BE]     = mfabc;
+//         distr_wrapper.distribution.f[TW]     = mfcba;
+//         distr_wrapper.distribution.f[TN]     = mfbaa;
+//         distr_wrapper.distribution.f[BS]     = mfbcc;
+//         distr_wrapper.distribution.f[BN]     = mfbac;
+//         distr_wrapper.distribution.f[TS]     = mfbca;
+//         distr_wrapper.distribution.f[REST]   = mfbbb;
+//         distr_wrapper.distribution.f[TNE]    = mfaaa;
+//         distr_wrapper.distribution.f[TSW]    = mfaca;
+//         distr_wrapper.distribution.f[TSE]    = mfaac;
+//         distr_wrapper.distribution.f[TNW]    = mfacc;
+//         distr_wrapper.distribution.f[BNE]    = mfcaa;
+//         distr_wrapper.distribution.f[BSW]    = mfcca;
+//         distr_wrapper.distribution.f[BSE]    = mfcac;
+//         distr_wrapper.distribution.f[BNW]    = mfccc;
 
 //         distr_wrapper.write();
 //         if(k==100000)
 //         {
 //             printf("mfcbb \t %f \t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f \n\n", 
-//                                                 (dist.f[dirE])[k]                  ,        
-//                                                 (dist.f[dirN])[k]       ,
-//                                                 (dist.f[dirS])[ks]      ,
-//                                                 (dist.f[dirT])[k]       ,
-//                                                 (dist.f[dirB])[kb]      ,
-//                                                 (dist.f[dirNE])[k]      ,
-//                                                 (dist.f[dirSW])[ksw]    ,
-//                                                 (dist.f[dirSE])[ks]     ,
-//                                                 (dist.f[dirNW])[kw]   ,
-//                                                 (dist.f[dirW])[kw]    ,
-//                                                 (dist.f[dirTE])[k]    ,
-//                                                 (dist.f[dirBW])[kbw]  ,
-//                                                 (dist.f[dirBE])[kb]   ,
-//                                                 (dist.f[dirTW])[kw]   ,
-//                                                 (dist.f[dirTN])[k]    ,
-//                                                 (dist.f[dirBS])[kbs]  ,
-//                                                 (dist.f[dirBN])[kb]   ,
-//                                                 (dist.f[dirTS])[ks]   ,
-//                                                 (dist.f[dirZERO])[k]  ,
-//                                                 (dist.f[dirTNE])[k]   ,
-//                                                 (dist.f[dirTSE])[ks]  ,
-//                                                 (dist.f[dirBNE])[kb]  ,
-//                                                 (dist.f[dirBSE])[kbs] ,
-//                                                 (dist.f[dirTNW])[kw]  ,
-//                                                 (dist.f[dirTSW])[ksw] ,
-//                                                 (dist.f[dirBNW])[kbw] ,
-//                                                 (dist.f[dirBSW])[kbsw]);
+//                                                 (dist.f[E])[k]                  ,        
+//                                                 (dist.f[N])[k]       ,
+//                                                 (dist.f[S])[ks]      ,
+//                                                 (dist.f[T])[k]       ,
+//                                                 (dist.f[B])[kb]      ,
+//                                                 (dist.f[NE])[k]      ,
+//                                                 (dist.f[SW])[ksw]    ,
+//                                                 (dist.f[SE])[ks]     ,
+//                                                 (dist.f[NW])[kw]   ,
+//                                                 (dist.f[W])[kw]    ,
+//                                                 (dist.f[TE])[k]    ,
+//                                                 (dist.f[BW])[kbw]  ,
+//                                                 (dist.f[BE])[kb]   ,
+//                                                 (dist.f[TW])[kw]   ,
+//                                                 (dist.f[TN])[k]    ,
+//                                                 (dist.f[BS])[kbs]  ,
+//                                                 (dist.f[BN])[kb]   ,
+//                                                 (dist.f[TS])[ks]   ,
+//                                                 (dist.f[REST])[k]  ,
+//                                                 (dist.f[TNE])[k]   ,
+//                                                 (dist.f[TSE])[ks]  ,
+//                                                 (dist.f[BNE])[kb]  ,
+//                                                 (dist.f[BSE])[kbs] ,
+//                                                 (dist.f[TNW])[kw]  ,
+//                                                 (dist.f[TSW])[ksw] ,
+//                                                 (dist.f[BNW])[kbw] ,
+//                                                 (dist.f[BSW])[kbsw]);
 //         }
 
-//         (dist.f[dirE])[k]      = mfabb;
-//         (dist.f[dirW])[kw]     = mfcbb;
-//         (dist.f[dirN])[k]      = mfbab;
-//         (dist.f[dirS])[ks]     = mfbcb;
-//         (dist.f[dirT])[k]      = mfbba;
-//         (dist.f[dirB])[kb]     = mfbbc;
-//         (dist.f[dirNE])[k]     = mfaab;
-//         (dist.f[dirSW])[ksw]   = mfccb;
-//         (dist.f[dirSE])[ks]    = mfacb;
-//         (dist.f[dirNW])[kw]    = mfcab;
-//         (dist.f[dirTE])[k]     = mfaba;
-//         (dist.f[dirBW])[kbw]   = mfcbc;
-//         (dist.f[dirBE])[kb]    = mfabc;
-//         (dist.f[dirTW])[kw]    = mfcba;
-//         (dist.f[dirTN])[k]     = mfbaa;
-//         (dist.f[dirBS])[kbs]   = mfbcc;
-//         (dist.f[dirBN])[kb]    = mfbac;
-//         (dist.f[dirTS])[ks]    = mfbca;
-//         (dist.f[dirZERO])[k]   = mfbbb;
-//         (dist.f[dirTNE])[k]    = mfaaa;
-//         (dist.f[dirTSE])[ks]   = mfaca;
-//         (dist.f[dirBNE])[kb]   = mfaac;
-//         (dist.f[dirBSE])[kbs]  = mfacc;
-//         (dist.f[dirTNW])[kw]   = mfcaa;
-//         (dist.f[dirTSW])[ksw]  = mfcca;
-//         (dist.f[dirBNW])[kbw]  = mfcac;
-//         (dist.f[dirBSW])[kbsw] = mfccc;
+//         (dist.f[E])[k]      = mfabb;
+//         (dist.f[W])[kw]     = mfcbb;
+//         (dist.f[N])[k]      = mfbab;
+//         (dist.f[S])[ks]     = mfbcb;
+//         (dist.f[T])[k]      = mfbba;
+//         (dist.f[B])[kb]     = mfbbc;
+//         (dist.f[NE])[k]     = mfaab;
+//         (dist.f[SW])[ksw]   = mfccb;
+//         (dist.f[SE])[ks]    = mfacb;
+//         (dist.f[NW])[kw]    = mfcab;
+//         (dist.f[TE])[k]     = mfaba;
+//         (dist.f[BW])[kbw]   = mfcbc;
+//         (dist.f[BE])[kb]    = mfabc;
+//         (dist.f[TW])[kw]    = mfcba;
+//         (dist.f[TN])[k]     = mfbaa;
+//         (dist.f[BS])[kbs]   = mfbcc;
+//         (dist.f[BN])[kb]    = mfbac;
+//         (dist.f[TS])[ks]    = mfbca;
+//         (dist.f[REST])[k]   = mfbbb;
+//         (dist.f[TNE])[k]    = mfaaa;
+//         (dist.f[TSE])[ks]   = mfaca;
+//         (dist.f[BNE])[kb]   = mfaac;
+//         (dist.f[BSE])[kbs]  = mfacc;
+//         (dist.f[TNW])[kw]   = mfcaa;
+//         (dist.f[TSW])[ksw]  = mfcca;
+//         (dist.f[BNW])[kbw]  = mfcac;
+//         (dist.f[BSW])[kbsw] = mfccc;
         
 //         if(k==100000)
 //         {
 //             printf("mfcbb \t %f \t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f\t %f \n\n\n", 
-//                                                 (dist.f[dirE])[k]                  ,        
-//                                                 (dist.f[dirN])[k]       ,
-//                                                 (dist.f[dirS])[ks]      ,
-//                                                 (dist.f[dirT])[k]       ,
-//                                                 (dist.f[dirB])[kb]      ,
-//                                                 (dist.f[dirNE])[k]      ,
-//                                                 (dist.f[dirSW])[ksw]    ,
-//                                                 (dist.f[dirSE])[ks]     ,
-//                                                 (dist.f[dirNW])[kw]   ,
-//                                                 (dist.f[dirW])[kw]   ,
-//                                                 (dist.f[dirTE])[k]    ,
-//                                                 (dist.f[dirBW])[kbw]  ,
-//                                                 (dist.f[dirBE])[kb]   ,
-//                                                 (dist.f[dirTW])[kw]   ,
-//                                                 (dist.f[dirTN])[k]    ,
-//                                                 (dist.f[dirBS])[kbs]  ,
-//                                                 (dist.f[dirBN])[kb]   ,
-//                                                 (dist.f[dirTS])[ks]   ,
-//                                                 (dist.f[dirZERO])[k]  ,
-//                                                 (dist.f[dirTNE])[k]   ,
-//                                                 (dist.f[dirTSE])[ks]  ,
-//                                                 (dist.f[dirBNE])[kb]  ,
-//                                                 (dist.f[dirBSE])[kbs] ,
-//                                                 (dist.f[dirTNW])[kw]  ,
-//                                                 (dist.f[dirTSW])[ksw] ,
-//                                                 (dist.f[dirBNW])[kbw] ,
-//                                                 (dist.f[dirBSW])[kbsw]);
+//                                                 (dist.f[E])[k]                  ,        
+//                                                 (dist.f[N])[k]       ,
+//                                                 (dist.f[S])[ks]      ,
+//                                                 (dist.f[T])[k]       ,
+//                                                 (dist.f[B])[kb]      ,
+//                                                 (dist.f[NE])[k]      ,
+//                                                 (dist.f[SW])[ksw]    ,
+//                                                 (dist.f[SE])[ks]     ,
+//                                                 (dist.f[NW])[kw]   ,
+//                                                 (dist.f[W])[kw]   ,
+//                                                 (dist.f[TE])[k]    ,
+//                                                 (dist.f[BW])[kbw]  ,
+//                                                 (dist.f[BE])[kb]   ,
+//                                                 (dist.f[TW])[kw]   ,
+//                                                 (dist.f[TN])[k]    ,
+//                                                 (dist.f[BS])[kbs]  ,
+//                                                 (dist.f[BN])[kb]   ,
+//                                                 (dist.f[TS])[ks]   ,
+//                                                 (dist.f[REST])[k]  ,
+//                                                 (dist.f[TNE])[k]   ,
+//                                                 (dist.f[TSE])[ks]  ,
+//                                                 (dist.f[BNE])[kb]  ,
+//                                                 (dist.f[BSE])[kbs] ,
+//                                                 (dist.f[TNW])[kw]  ,
+//                                                 (dist.f[TSW])[ksw] ,
+//                                                 (dist.f[BNW])[kbw] ,
+//                                                 (dist.f[BSW])[kbsw]);
 //         }
 //     }
 // }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu
index 23c4d72d23a42977cf44cce8bcd622e9edc66968..fa3f22d021518553df0dee79079868e01f4a2427 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_WaleCumulantK15Comp(
@@ -45,63 +46,63 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK15Comp(
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -135,33 +136,33 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK15Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -1179,33 +1180,33 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK15Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;                                                                    
-			(D.f[ dirW   ])[kw  ] = mfcbb;                                                                  
-			(D.f[ dirN   ])[k   ] = mfbab;
-			(D.f[ dirS   ])[ks  ] = mfbcb;
-			(D.f[ dirT   ])[k   ] = mfbba;
-			(D.f[ dirB   ])[kb  ] = mfbbc;
-			(D.f[ dirNE  ])[k   ] = mfaab;
-			(D.f[ dirSW  ])[ksw ] = mfccb;
-			(D.f[ dirSE  ])[ks  ] = mfacb;
-			(D.f[ dirNW  ])[kw  ] = mfcab;
-			(D.f[ dirTE  ])[k   ] = mfaba;
-			(D.f[ dirBW  ])[kbw ] = mfcbc;
-			(D.f[ dirBE  ])[kb  ] = mfabc;
-			(D.f[ dirTW  ])[kw  ] = mfcba;
-			(D.f[ dirTN  ])[k   ] = mfbaa;
-			(D.f[ dirBS  ])[kbs ] = mfbcc;
-			(D.f[ dirBN  ])[kb  ] = mfbac;
-			(D.f[ dirTS  ])[ks  ] = mfbca;
-			(D.f[ dirZERO])[k   ] = mfbbb;
-			(D.f[ dirTNE ])[k   ] = mfaaa;
-			(D.f[ dirTSE ])[ks  ] = mfaca;
-			(D.f[ dirBNE ])[kb  ] = mfaac;
-			(D.f[ dirBSE ])[kbs ] = mfacc;
-			(D.f[ dirTNW ])[kw  ] = mfcaa;
-			(D.f[ dirTSW ])[ksw ] = mfcca;
-			(D.f[ dirBNW ])[kbw ] = mfcac;
-			(D.f[ dirBSW ])[kbsw] = mfccc;
+			(D.f[ E   ])[k   ] = mfabb;                                                                    
+			(D.f[ W   ])[kw  ] = mfcbb;                                                                  
+			(D.f[ N   ])[k   ] = mfbab;
+			(D.f[ S   ])[ks  ] = mfbcb;
+			(D.f[ T   ])[k   ] = mfbba;
+			(D.f[ B   ])[kb  ] = mfbbc;
+			(D.f[ NE  ])[k   ] = mfaab;
+			(D.f[ SW  ])[ksw ] = mfccb;
+			(D.f[ SE  ])[ks  ] = mfacb;
+			(D.f[ NW  ])[kw  ] = mfcab;
+			(D.f[ TE  ])[k   ] = mfaba;
+			(D.f[ BW  ])[kbw ] = mfcbc;
+			(D.f[ BE  ])[kb  ] = mfabc;
+			(D.f[ TW  ])[kw  ] = mfcba;
+			(D.f[ TN  ])[k   ] = mfbaa;
+			(D.f[ BS  ])[kbs ] = mfbcc;
+			(D.f[ BN  ])[kb  ] = mfbac;
+			(D.f[ TS  ])[ks  ] = mfbca;
+			(D.f[ REST])[k   ] = mfbbb;
+			(D.f[ TNE ])[k   ] = mfaaa;
+			(D.f[ TSE ])[ks  ] = mfaca;
+			(D.f[ BNE ])[kb  ] = mfaac;
+			(D.f[ BSE ])[kbs ] = mfacc;
+			(D.f[ TNW ])[kw  ] = mfcaa;
+			(D.f[ TSW ])[ksw ] = mfcca;
+			(D.f[ BNW ])[kbw ] = mfcac;
+			(D.f[ BSW ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu
index a791e1114ddad8b2bc2e7eaa3ac5d9690fd3e11a..c705be07519225534d3532a2b752d2a29516b102 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
@@ -44,63 +45,63 @@ extern "C" __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -114,33 +115,33 @@ extern "C" __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -1003,33 +1004,33 @@ extern "C" __global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;                                                                    
-			(D.f[ dirW   ])[kw  ] = mfcbb;                                                                  
-			(D.f[ dirN   ])[k   ] = mfbab;
-			(D.f[ dirS   ])[ks  ] = mfbcb;
-			(D.f[ dirT   ])[k   ] = mfbba;
-			(D.f[ dirB   ])[kb  ] = mfbbc;
-			(D.f[ dirNE  ])[k   ] = mfaab;
-			(D.f[ dirSW  ])[ksw ] = mfccb;
-			(D.f[ dirSE  ])[ks  ] = mfacb;
-			(D.f[ dirNW  ])[kw  ] = mfcab;
-			(D.f[ dirTE  ])[k   ] = mfaba;
-			(D.f[ dirBW  ])[kbw ] = mfcbc;
-			(D.f[ dirBE  ])[kb  ] = mfabc;
-			(D.f[ dirTW  ])[kw  ] = mfcba;
-			(D.f[ dirTN  ])[k   ] = mfbaa;
-			(D.f[ dirBS  ])[kbs ] = mfbcc;
-			(D.f[ dirBN  ])[kb  ] = mfbac;
-			(D.f[ dirTS  ])[ks  ] = mfbca;
-			(D.f[ dirZERO])[k   ] = mfbbb;
-			(D.f[ dirTNE ])[k   ] = mfaaa;
-			(D.f[ dirTSE ])[ks  ] = mfaca;
-			(D.f[ dirBNE ])[kb  ] = mfaac;
-			(D.f[ dirBSE ])[kbs ] = mfacc;
-			(D.f[ dirTNW ])[kw  ] = mfcaa;
-			(D.f[ dirTSW ])[ksw ] = mfcca;
-			(D.f[ dirBNW ])[kbw ] = mfcac;
-			(D.f[ dirBSW ])[kbsw] = mfccc;
+			(D.f[ E   ])[k   ] = mfabb;                                                                    
+			(D.f[ W   ])[kw  ] = mfcbb;                                                                  
+			(D.f[ N   ])[k   ] = mfbab;
+			(D.f[ S   ])[ks  ] = mfbcb;
+			(D.f[ T   ])[k   ] = mfbba;
+			(D.f[ B   ])[kb  ] = mfbbc;
+			(D.f[ NE  ])[k   ] = mfaab;
+			(D.f[ SW  ])[ksw ] = mfccb;
+			(D.f[ SE  ])[ks  ] = mfacb;
+			(D.f[ NW  ])[kw  ] = mfcab;
+			(D.f[ TE  ])[k   ] = mfaba;
+			(D.f[ BW  ])[kbw ] = mfcbc;
+			(D.f[ BE  ])[kb  ] = mfabc;
+			(D.f[ TW  ])[kw  ] = mfcba;
+			(D.f[ TN  ])[k   ] = mfbaa;
+			(D.f[ BS  ])[kbs ] = mfbcc;
+			(D.f[ BN  ])[kb  ] = mfbac;
+			(D.f[ TS  ])[ks  ] = mfbca;
+			(D.f[ REST])[k   ] = mfbbb;
+			(D.f[ TNE ])[k   ] = mfaaa;
+			(D.f[ TSE ])[ks  ] = mfaca;
+			(D.f[ BNE ])[kb  ] = mfaac;
+			(D.f[ BSE ])[kbs ] = mfacc;
+			(D.f[ TNW ])[kw  ] = mfcaa;
+			(D.f[ TSW ])[ksw ] = mfcca;
+			(D.f[ BNW ])[kbw ] = mfcac;
+			(D.f[ BSW ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu
index 0ff953e261d7c726a360b5952ac5b58c32c96791..380fc5258f32fb908a977f28a15688aa5d9b650d 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_WaleCumulantK17Comp(
@@ -46,63 +47,63 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17Comp(
 			Distributions27 D;
 			if (EvenOrOdd==true)
 			{
-				D.f[dirE   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirW   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirBNW *size_Mat];
+				D.f[E   ] = &DDStart[E   *size_Mat];
+				D.f[W   ] = &DDStart[W   *size_Mat];
+				D.f[N   ] = &DDStart[N   *size_Mat];
+				D.f[S   ] = &DDStart[S   *size_Mat];
+				D.f[T   ] = &DDStart[T   *size_Mat];
+				D.f[B   ] = &DDStart[B   *size_Mat];
+				D.f[NE  ] = &DDStart[NE  *size_Mat];
+				D.f[SW  ] = &DDStart[SW  *size_Mat];
+				D.f[SE  ] = &DDStart[SE  *size_Mat];
+				D.f[NW  ] = &DDStart[NW  *size_Mat];
+				D.f[TE  ] = &DDStart[TE  *size_Mat];
+				D.f[BW  ] = &DDStart[BW  *size_Mat];
+				D.f[BE  ] = &DDStart[BE  *size_Mat];
+				D.f[TW  ] = &DDStart[TW  *size_Mat];
+				D.f[TN  ] = &DDStart[TN  *size_Mat];
+				D.f[BS  ] = &DDStart[BS  *size_Mat];
+				D.f[BN  ] = &DDStart[BN  *size_Mat];
+				D.f[TS  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE ] = &DDStart[TNE *size_Mat];
+				D.f[TSW ] = &DDStart[TSW *size_Mat];
+				D.f[TSE ] = &DDStart[TSE *size_Mat];
+				D.f[TNW ] = &DDStart[TNW *size_Mat];
+				D.f[BNE ] = &DDStart[BNE *size_Mat];
+				D.f[BSW ] = &DDStart[BSW *size_Mat];
+				D.f[BSE ] = &DDStart[BSE *size_Mat];
+				D.f[BNW ] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW   ] = &DDStart[dirE   *size_Mat];
-				D.f[dirE   ] = &DDStart[dirW   *size_Mat];
-				D.f[dirS   ] = &DDStart[dirN   *size_Mat];
-				D.f[dirN   ] = &DDStart[dirS   *size_Mat];
-				D.f[dirB   ] = &DDStart[dirT   *size_Mat];
-				D.f[dirT   ] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW  ] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE  ] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW  ] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE  ] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW  ] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE  ] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW  ] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE  ] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS  ] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN  ] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS  ] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN  ] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW ] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE ] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW ] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE ] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW ] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE ] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW ] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE ] = &DDStart[dirBNW *size_Mat];
+				D.f[W   ] = &DDStart[E   *size_Mat];
+				D.f[E   ] = &DDStart[W   *size_Mat];
+				D.f[S   ] = &DDStart[N   *size_Mat];
+				D.f[N   ] = &DDStart[S   *size_Mat];
+				D.f[B   ] = &DDStart[T   *size_Mat];
+				D.f[T   ] = &DDStart[B   *size_Mat];
+				D.f[SW  ] = &DDStart[NE  *size_Mat];
+				D.f[NE  ] = &DDStart[SW  *size_Mat];
+				D.f[NW  ] = &DDStart[SE  *size_Mat];
+				D.f[SE  ] = &DDStart[NW  *size_Mat];
+				D.f[BW  ] = &DDStart[TE  *size_Mat];
+				D.f[TE  ] = &DDStart[BW  *size_Mat];
+				D.f[TW  ] = &DDStart[BE  *size_Mat];
+				D.f[BE  ] = &DDStart[TW  *size_Mat];
+				D.f[BS  ] = &DDStart[TN  *size_Mat];
+				D.f[TN  ] = &DDStart[BS  *size_Mat];
+				D.f[TS  ] = &DDStart[BN  *size_Mat];
+				D.f[BN  ] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW ] = &DDStart[TNE *size_Mat];
+				D.f[BNE ] = &DDStart[TSW *size_Mat];
+				D.f[BNW ] = &DDStart[TSE *size_Mat];
+				D.f[BSE ] = &DDStart[TNW *size_Mat];
+				D.f[TSW ] = &DDStart[BNE *size_Mat];
+				D.f[TNE ] = &DDStart[BSW *size_Mat];
+				D.f[TNW ] = &DDStart[BSE *size_Mat];
+				D.f[TSE ] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -136,33 +137,33 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17Comp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE   ])[k  ];
-			real mfabb = (D.f[dirW   ])[kw ];
-			real mfbcb = (D.f[dirN   ])[k  ];
-			real mfbab = (D.f[dirS   ])[ks ];
-			real mfbbc = (D.f[dirT   ])[k  ];
-			real mfbba = (D.f[dirB   ])[kb ];
-			real mfccb = (D.f[dirNE  ])[k  ];
-			real mfaab = (D.f[dirSW  ])[ksw];
-			real mfcab = (D.f[dirSE  ])[ks ];
-			real mfacb = (D.f[dirNW  ])[kw ];
-			real mfcbc = (D.f[dirTE  ])[k  ];
-			real mfaba = (D.f[dirBW  ])[kbw];
-			real mfcba = (D.f[dirBE  ])[kb ];
-			real mfabc = (D.f[dirTW  ])[kw ];
-			real mfbcc = (D.f[dirTN  ])[k  ];
-			real mfbaa = (D.f[dirBS  ])[kbs];
-			real mfbca = (D.f[dirBN  ])[kb ];
-			real mfbac = (D.f[dirTS  ])[ks ];
-			real mfbbb = (D.f[dirZERO])[k  ];
-			real mfccc = (D.f[dirTNE ])[k  ];
-			real mfaac = (D.f[dirTSW ])[ksw];
-			real mfcac = (D.f[dirTSE ])[ks ];
-			real mfacc = (D.f[dirTNW ])[kw ];
-			real mfcca = (D.f[dirBNE ])[kb ];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE ])[kbs];
-			real mfaca = (D.f[dirBNW ])[kbw];
+			real mfcbb = (D.f[E   ])[k  ];
+			real mfabb = (D.f[W   ])[kw ];
+			real mfbcb = (D.f[N   ])[k  ];
+			real mfbab = (D.f[S   ])[ks ];
+			real mfbbc = (D.f[T   ])[k  ];
+			real mfbba = (D.f[B   ])[kb ];
+			real mfccb = (D.f[NE  ])[k  ];
+			real mfaab = (D.f[SW  ])[ksw];
+			real mfcab = (D.f[SE  ])[ks ];
+			real mfacb = (D.f[NW  ])[kw ];
+			real mfcbc = (D.f[TE  ])[k  ];
+			real mfaba = (D.f[BW  ])[kbw];
+			real mfcba = (D.f[BE  ])[kb ];
+			real mfabc = (D.f[TW  ])[kw ];
+			real mfbcc = (D.f[TN  ])[k  ];
+			real mfbaa = (D.f[BS  ])[kbs];
+			real mfbca = (D.f[BN  ])[kb ];
+			real mfbac = (D.f[TS  ])[ks ];
+			real mfbbb = (D.f[REST])[k  ];
+			real mfccc = (D.f[TNE ])[k  ];
+			real mfaac = (D.f[TSW ])[ksw];
+			real mfcac = (D.f[TSE ])[ks ];
+			real mfacc = (D.f[TNW ])[kw ];
+			real mfcca = (D.f[BNE ])[kb ];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE ])[kbs];
+			real mfaca = (D.f[BNW ])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + 
 							(((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) +
@@ -862,8 +863,8 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17Comp(
  		//	wadjust    = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit);
 			//CUMcbb    += wadjust * (-CUMcbb); 
 			//////////////////////////////////////////////////////////////////////////
-			real A = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega);
-			real B = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega);
+			real factorA = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega);
+			real factorB = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega);
 			//////////////////////////////////////////////////////////////////////////
 			//ohne limiter
 			//CUMacc += O4 * (-CUMacc); 
@@ -872,12 +873,12 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17Comp(
 			//CUMbbc += O4 * (-CUMbbc); 
 			//CUMbcb += O4 * (-CUMbcb); 
 			//CUMcbb += O4 * (-CUMcbb); 
-			CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-			CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-			CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+			CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+			CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+			CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+			CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+			CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+			CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 			//////////////////////////////////////////////////////////////////////////
 			
 					
@@ -1141,33 +1142,33 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17Comp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[ dirE   ])[k   ] = mfabb;                                                                    
-			(D.f[ dirW   ])[kw  ] = mfcbb;                                                                  
-			(D.f[ dirN   ])[k   ] = mfbab;
-			(D.f[ dirS   ])[ks  ] = mfbcb;
-			(D.f[ dirT   ])[k   ] = mfbba;
-			(D.f[ dirB   ])[kb  ] = mfbbc;
-			(D.f[ dirNE  ])[k   ] = mfaab;
-			(D.f[ dirSW  ])[ksw ] = mfccb;
-			(D.f[ dirSE  ])[ks  ] = mfacb;
-			(D.f[ dirNW  ])[kw  ] = mfcab;
-			(D.f[ dirTE  ])[k   ] = mfaba;
-			(D.f[ dirBW  ])[kbw ] = mfcbc;
-			(D.f[ dirBE  ])[kb  ] = mfabc;
-			(D.f[ dirTW  ])[kw  ] = mfcba;
-			(D.f[ dirTN  ])[k   ] = mfbaa;
-			(D.f[ dirBS  ])[kbs ] = mfbcc;
-			(D.f[ dirBN  ])[kb  ] = mfbac;
-			(D.f[ dirTS  ])[ks  ] = mfbca;
-			(D.f[ dirZERO])[k   ] = mfbbb;
-			(D.f[ dirTNE ])[k   ] = mfaaa;
-			(D.f[ dirTSE ])[ks  ] = mfaca;
-			(D.f[ dirBNE ])[kb  ] = mfaac;
-			(D.f[ dirBSE ])[kbs ] = mfacc;
-			(D.f[ dirTNW ])[kw  ] = mfcaa;
-			(D.f[ dirTSW ])[ksw ] = mfcca;
-			(D.f[ dirBNW ])[kbw ] = mfcac;
-			(D.f[ dirBSW ])[kbsw] = mfccc;
+			(D.f[ E   ])[k   ] = mfabb;                                                                    
+			(D.f[ W   ])[kw  ] = mfcbb;                                                                  
+			(D.f[ N   ])[k   ] = mfbab;
+			(D.f[ S   ])[ks  ] = mfbcb;
+			(D.f[ T   ])[k   ] = mfbba;
+			(D.f[ B   ])[kb  ] = mfbbc;
+			(D.f[ NE  ])[k   ] = mfaab;
+			(D.f[ SW  ])[ksw ] = mfccb;
+			(D.f[ SE  ])[ks  ] = mfacb;
+			(D.f[ NW  ])[kw  ] = mfcab;
+			(D.f[ TE  ])[k   ] = mfaba;
+			(D.f[ BW  ])[kbw ] = mfcbc;
+			(D.f[ BE  ])[kb  ] = mfabc;
+			(D.f[ TW  ])[kw  ] = mfcba;
+			(D.f[ TN  ])[k   ] = mfbaa;
+			(D.f[ BS  ])[kbs ] = mfbcc;
+			(D.f[ BN  ])[kb  ] = mfbac;
+			(D.f[ TS  ])[ks  ] = mfbca;
+			(D.f[ REST])[k   ] = mfbbb;
+			(D.f[ TNE ])[k   ] = mfaaa;
+			(D.f[ TSE ])[ks  ] = mfaca;
+			(D.f[ BNE ])[kb  ] = mfaac;
+			(D.f[ BSE ])[kbs ] = mfacc;
+			(D.f[ TNW ])[kw  ] = mfcaa;
+			(D.f[ TSW ])[ksw ] = mfcca;
+			(D.f[ BNW ])[kbw ] = mfcac;
+			(D.f[ BSW ])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}                                                                                                                    
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu
index 9d4efb2ab81a30d27a7909212e8c35847fded3ea..c702c252be0ca9a51561d8aba68bc21e0f3b9902 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Kernel_WaleCumulantK17DebugComp(
@@ -56,63 +57,63 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			Distributions27 D;
 			if (EvenOrOdd == true)
 			{
-				D.f[dirE] = &DDStart[dirE   *size_Mat];
-				D.f[dirW] = &DDStart[dirW   *size_Mat];
-				D.f[dirN] = &DDStart[dirN   *size_Mat];
-				D.f[dirS] = &DDStart[dirS   *size_Mat];
-				D.f[dirT] = &DDStart[dirT   *size_Mat];
-				D.f[dirB] = &DDStart[dirB   *size_Mat];
-				D.f[dirNE] = &DDStart[dirNE  *size_Mat];
-				D.f[dirSW] = &DDStart[dirSW  *size_Mat];
-				D.f[dirSE] = &DDStart[dirSE  *size_Mat];
-				D.f[dirNW] = &DDStart[dirNW  *size_Mat];
-				D.f[dirTE] = &DDStart[dirTE  *size_Mat];
-				D.f[dirBW] = &DDStart[dirBW  *size_Mat];
-				D.f[dirBE] = &DDStart[dirBE  *size_Mat];
-				D.f[dirTW] = &DDStart[dirTW  *size_Mat];
-				D.f[dirTN] = &DDStart[dirTN  *size_Mat];
-				D.f[dirBS] = &DDStart[dirBS  *size_Mat];
-				D.f[dirBN] = &DDStart[dirBN  *size_Mat];
-				D.f[dirTS] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirTNE] = &DDStart[dirTNE *size_Mat];
-				D.f[dirTSW] = &DDStart[dirTSW *size_Mat];
-				D.f[dirTSE] = &DDStart[dirTSE *size_Mat];
-				D.f[dirTNW] = &DDStart[dirTNW *size_Mat];
-				D.f[dirBNE] = &DDStart[dirBNE *size_Mat];
-				D.f[dirBSW] = &DDStart[dirBSW *size_Mat];
-				D.f[dirBSE] = &DDStart[dirBSE *size_Mat];
-				D.f[dirBNW] = &DDStart[dirBNW *size_Mat];
+				D.f[E] = &DDStart[E   *size_Mat];
+				D.f[W] = &DDStart[W   *size_Mat];
+				D.f[N] = &DDStart[N   *size_Mat];
+				D.f[S] = &DDStart[S   *size_Mat];
+				D.f[T] = &DDStart[T   *size_Mat];
+				D.f[B] = &DDStart[B   *size_Mat];
+				D.f[NE] = &DDStart[NE  *size_Mat];
+				D.f[SW] = &DDStart[SW  *size_Mat];
+				D.f[SE] = &DDStart[SE  *size_Mat];
+				D.f[NW] = &DDStart[NW  *size_Mat];
+				D.f[TE] = &DDStart[TE  *size_Mat];
+				D.f[BW] = &DDStart[BW  *size_Mat];
+				D.f[BE] = &DDStart[BE  *size_Mat];
+				D.f[TW] = &DDStart[TW  *size_Mat];
+				D.f[TN] = &DDStart[TN  *size_Mat];
+				D.f[BS] = &DDStart[BS  *size_Mat];
+				D.f[BN] = &DDStart[BN  *size_Mat];
+				D.f[TS] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[TNE] = &DDStart[TNE *size_Mat];
+				D.f[TSW] = &DDStart[TSW *size_Mat];
+				D.f[TSE] = &DDStart[TSE *size_Mat];
+				D.f[TNW] = &DDStart[TNW *size_Mat];
+				D.f[BNE] = &DDStart[BNE *size_Mat];
+				D.f[BSW] = &DDStart[BSW *size_Mat];
+				D.f[BSE] = &DDStart[BSE *size_Mat];
+				D.f[BNW] = &DDStart[BNW *size_Mat];
 			}
 			else
 			{
-				D.f[dirW] = &DDStart[dirE   *size_Mat];
-				D.f[dirE] = &DDStart[dirW   *size_Mat];
-				D.f[dirS] = &DDStart[dirN   *size_Mat];
-				D.f[dirN] = &DDStart[dirS   *size_Mat];
-				D.f[dirB] = &DDStart[dirT   *size_Mat];
-				D.f[dirT] = &DDStart[dirB   *size_Mat];
-				D.f[dirSW] = &DDStart[dirNE  *size_Mat];
-				D.f[dirNE] = &DDStart[dirSW  *size_Mat];
-				D.f[dirNW] = &DDStart[dirSE  *size_Mat];
-				D.f[dirSE] = &DDStart[dirNW  *size_Mat];
-				D.f[dirBW] = &DDStart[dirTE  *size_Mat];
-				D.f[dirTE] = &DDStart[dirBW  *size_Mat];
-				D.f[dirTW] = &DDStart[dirBE  *size_Mat];
-				D.f[dirBE] = &DDStart[dirTW  *size_Mat];
-				D.f[dirBS] = &DDStart[dirTN  *size_Mat];
-				D.f[dirTN] = &DDStart[dirBS  *size_Mat];
-				D.f[dirTS] = &DDStart[dirBN  *size_Mat];
-				D.f[dirBN] = &DDStart[dirTS  *size_Mat];
-				D.f[dirZERO] = &DDStart[dirZERO*size_Mat];
-				D.f[dirBSW] = &DDStart[dirTNE *size_Mat];
-				D.f[dirBNE] = &DDStart[dirTSW *size_Mat];
-				D.f[dirBNW] = &DDStart[dirTSE *size_Mat];
-				D.f[dirBSE] = &DDStart[dirTNW *size_Mat];
-				D.f[dirTSW] = &DDStart[dirBNE *size_Mat];
-				D.f[dirTNE] = &DDStart[dirBSW *size_Mat];
-				D.f[dirTNW] = &DDStart[dirBSE *size_Mat];
-				D.f[dirTSE] = &DDStart[dirBNW *size_Mat];
+				D.f[W] = &DDStart[E   *size_Mat];
+				D.f[E] = &DDStart[W   *size_Mat];
+				D.f[S] = &DDStart[N   *size_Mat];
+				D.f[N] = &DDStart[S   *size_Mat];
+				D.f[B] = &DDStart[T   *size_Mat];
+				D.f[T] = &DDStart[B   *size_Mat];
+				D.f[SW] = &DDStart[NE  *size_Mat];
+				D.f[NE] = &DDStart[SW  *size_Mat];
+				D.f[NW] = &DDStart[SE  *size_Mat];
+				D.f[SE] = &DDStart[NW  *size_Mat];
+				D.f[BW] = &DDStart[TE  *size_Mat];
+				D.f[TE] = &DDStart[BW  *size_Mat];
+				D.f[TW] = &DDStart[BE  *size_Mat];
+				D.f[BE] = &DDStart[TW  *size_Mat];
+				D.f[BS] = &DDStart[TN  *size_Mat];
+				D.f[TN] = &DDStart[BS  *size_Mat];
+				D.f[TS] = &DDStart[BN  *size_Mat];
+				D.f[BN] = &DDStart[TS  *size_Mat];
+				D.f[REST] = &DDStart[REST*size_Mat];
+				D.f[BSW] = &DDStart[TNE *size_Mat];
+				D.f[BNE] = &DDStart[TSW *size_Mat];
+				D.f[BNW] = &DDStart[TSE *size_Mat];
+				D.f[BSE] = &DDStart[TNW *size_Mat];
+				D.f[TSW] = &DDStart[BNE *size_Mat];
+				D.f[TNE] = &DDStart[BSW *size_Mat];
+				D.f[TNW] = &DDStart[BSE *size_Mat];
+				D.f[TSE] = &DDStart[BNW *size_Mat];
 			}
 
 			////////////////////////////////////////////////////////////////////////////////
@@ -146,33 +147,33 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			unsigned int kbsw = neighborZ[ksw];
 
 			//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-			real mfcbb = (D.f[dirE])[k];
-			real mfabb = (D.f[dirW])[kw];
-			real mfbcb = (D.f[dirN])[k];
-			real mfbab = (D.f[dirS])[ks];
-			real mfbbc = (D.f[dirT])[k];
-			real mfbba = (D.f[dirB])[kb];
-			real mfccb = (D.f[dirNE])[k];
-			real mfaab = (D.f[dirSW])[ksw];
-			real mfcab = (D.f[dirSE])[ks];
-			real mfacb = (D.f[dirNW])[kw];
-			real mfcbc = (D.f[dirTE])[k];
-			real mfaba = (D.f[dirBW])[kbw];
-			real mfcba = (D.f[dirBE])[kb];
-			real mfabc = (D.f[dirTW])[kw];
-			real mfbcc = (D.f[dirTN])[k];
-			real mfbaa = (D.f[dirBS])[kbs];
-			real mfbca = (D.f[dirBN])[kb];
-			real mfbac = (D.f[dirTS])[ks];
-			real mfbbb = (D.f[dirZERO])[k];
-			real mfccc = (D.f[dirTNE])[k];
-			real mfaac = (D.f[dirTSW])[ksw];
-			real mfcac = (D.f[dirTSE])[ks];
-			real mfacc = (D.f[dirTNW])[kw];
-			real mfcca = (D.f[dirBNE])[kb];
-			real mfaaa = (D.f[dirBSW])[kbsw];
-			real mfcaa = (D.f[dirBSE])[kbs];
-			real mfaca = (D.f[dirBNW])[kbw];
+			real mfcbb = (D.f[E])[k];
+			real mfabb = (D.f[W])[kw];
+			real mfbcb = (D.f[N])[k];
+			real mfbab = (D.f[S])[ks];
+			real mfbbc = (D.f[T])[k];
+			real mfbba = (D.f[B])[kb];
+			real mfccb = (D.f[NE])[k];
+			real mfaab = (D.f[SW])[ksw];
+			real mfcab = (D.f[SE])[ks];
+			real mfacb = (D.f[NW])[kw];
+			real mfcbc = (D.f[TE])[k];
+			real mfaba = (D.f[BW])[kbw];
+			real mfcba = (D.f[BE])[kb];
+			real mfabc = (D.f[TW])[kw];
+			real mfbcc = (D.f[TN])[k];
+			real mfbaa = (D.f[BS])[kbs];
+			real mfbca = (D.f[BN])[kb];
+			real mfbac = (D.f[TS])[ks];
+			real mfbbb = (D.f[REST])[k];
+			real mfccc = (D.f[TNE])[k];
+			real mfaac = (D.f[TSW])[ksw];
+			real mfcac = (D.f[TSE])[ks];
+			real mfacc = (D.f[TNW])[kw];
+			real mfcca = (D.f[BNE])[kb];
+			real mfaaa = (D.f[BSW])[kbsw];
+			real mfcaa = (D.f[BSE])[kbs];
+			real mfaca = (D.f[BNW])[kbw];
 			////////////////////////////////////////////////////////////////////////////////////
 			real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) +
 				(((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) +
@@ -878,8 +879,8 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			//	wadjust    = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit);
 			//CUMcbb    += wadjust * (-CUMcbb); 
 			//////////////////////////////////////////////////////////////////////////
-			real A = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega);
-			real B = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega);
+			real factorA = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega);
+			real factorB = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega);
 			//////////////////////////////////////////////////////////////////////////
 			//ohne limiter
 			//CUMacc += O4 * (-CUMacc); 
@@ -888,12 +889,12 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			//CUMbbc += O4 * (-CUMbbc); 
 			//CUMbcb += O4 * (-CUMbcb); 
 			//CUMcbb += O4 * (-CUMcbb); 
-			CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc);
-			CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac);
-			CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca);
-			CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * B + (c1o1 - O4) * (CUMbbc);
-			CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * B + (c1o1 - O4) * (CUMbcb);
-			CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * B + (c1o1 - O4) * (CUMcbb);
+			CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc);
+			CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac);
+			CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca);
+			CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy           * c1o3 * factorB + (c1o1 - O4) * (CUMbbc);
+			CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz           * c1o3 * factorB + (c1o1 - O4) * (CUMbcb);
+			CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz           * c1o3 * factorB + (c1o1 - O4) * (CUMcbb);
 			//////////////////////////////////////////////////////////////////////////
 
 
@@ -1157,33 +1158,33 @@ extern "C" __global__ void LB_Kernel_WaleCumulantK17DebugComp(
 			////////////////////////////////////////////////////////////////////////////////////
 
 			////////////////////////////////////////////////////////////////////////////////////
-			(D.f[dirE])[k] = mfabb;
-			(D.f[dirW])[kw] = mfcbb;
-			(D.f[dirN])[k] = mfbab;
-			(D.f[dirS])[ks] = mfbcb;
-			(D.f[dirT])[k] = mfbba;
-			(D.f[dirB])[kb] = mfbbc;
-			(D.f[dirNE])[k] = mfaab;
-			(D.f[dirSW])[ksw] = mfccb;
-			(D.f[dirSE])[ks] = mfacb;
-			(D.f[dirNW])[kw] = mfcab;
-			(D.f[dirTE])[k] = mfaba;
-			(D.f[dirBW])[kbw] = mfcbc;
-			(D.f[dirBE])[kb] = mfabc;
-			(D.f[dirTW])[kw] = mfcba;
-			(D.f[dirTN])[k] = mfbaa;
-			(D.f[dirBS])[kbs] = mfbcc;
-			(D.f[dirBN])[kb] = mfbac;
-			(D.f[dirTS])[ks] = mfbca;
-			(D.f[dirZERO])[k] = mfbbb;
-			(D.f[dirTNE])[k] = mfaaa;
-			(D.f[dirTSE])[ks] = mfaca;
-			(D.f[dirBNE])[kb] = mfaac;
-			(D.f[dirBSE])[kbs] = mfacc;
-			(D.f[dirTNW])[kw] = mfcaa;
-			(D.f[dirTSW])[ksw] = mfcca;
-			(D.f[dirBNW])[kbw] = mfcac;
-			(D.f[dirBSW])[kbsw] = mfccc;
+			(D.f[E])[k] = mfabb;
+			(D.f[W])[kw] = mfcbb;
+			(D.f[N])[k] = mfbab;
+			(D.f[S])[ks] = mfbcb;
+			(D.f[T])[k] = mfbba;
+			(D.f[B])[kb] = mfbbc;
+			(D.f[NE])[k] = mfaab;
+			(D.f[SW])[ksw] = mfccb;
+			(D.f[SE])[ks] = mfacb;
+			(D.f[NW])[kw] = mfcab;
+			(D.f[TE])[k] = mfaba;
+			(D.f[BW])[kbw] = mfcbc;
+			(D.f[BE])[kb] = mfabc;
+			(D.f[TW])[kw] = mfcba;
+			(D.f[TN])[k] = mfbaa;
+			(D.f[BS])[kbs] = mfbcc;
+			(D.f[BN])[kb] = mfbac;
+			(D.f[TS])[ks] = mfbca;
+			(D.f[REST])[k] = mfbbb;
+			(D.f[TNE])[k] = mfaaa;
+			(D.f[TSE])[ks] = mfaca;
+			(D.f[BNE])[kb] = mfaac;
+			(D.f[BSE])[kbs] = mfacc;
+			(D.f[TNW])[kw] = mfcaa;
+			(D.f[TSW])[ksw] = mfcca;
+			(D.f[BNW])[kbw] = mfcac;
+			(D.f[BSW])[kbsw] = mfccc;
 			////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu
index 2b9203bf96be89fb328cbbe221994dffed481e14..9528f0ef256b1e868d389563e2aafa32bbf096ab 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu
@@ -2,14 +2,13 @@
 
 #include <cuda_runtime.h>
 
-#include "LBM/D3Q27.h"
 
 #include <lbm/constants/NumericConstants.h>
 #include <lbm/constants/D3Q27.h>
+#include "lbm/constants/D3Q27.h"
+using namespace vf::lbm::dir;
 
-namespace vf
-{
-namespace gpu
+namespace vf::gpu
 {
 
 __device__ __host__ DistributionReferences27 getDistributionReferences27(real *distributions, unsigned int size_Mat, bool isEvenTimestep)
@@ -17,61 +16,61 @@ __device__ __host__ DistributionReferences27 getDistributionReferences27(real *d
     DistributionReferences27 distribution_references;
 
     if (isEvenTimestep) {
-        distribution_references.f[dirE]    = &distributions[dirE * size_Mat];
-        distribution_references.f[dirW]    = &distributions[dirW * size_Mat];
-        distribution_references.f[dirN]    = &distributions[dirN * size_Mat];
-        distribution_references.f[dirS]    = &distributions[dirS * size_Mat];
-        distribution_references.f[dirT]    = &distributions[dirT * size_Mat];
-        distribution_references.f[dirB]    = &distributions[dirB * size_Mat];
-        distribution_references.f[dirNE]   = &distributions[dirNE * size_Mat];
-        distribution_references.f[dirSW]   = &distributions[dirSW * size_Mat];
-        distribution_references.f[dirSE]   = &distributions[dirSE * size_Mat];
-        distribution_references.f[dirNW]   = &distributions[dirNW * size_Mat];
-        distribution_references.f[dirTE]   = &distributions[dirTE * size_Mat];
-        distribution_references.f[dirBW]   = &distributions[dirBW * size_Mat];
-        distribution_references.f[dirBE]   = &distributions[dirBE * size_Mat];
-        distribution_references.f[dirTW]   = &distributions[dirTW * size_Mat];
-        distribution_references.f[dirTN]   = &distributions[dirTN * size_Mat];
-        distribution_references.f[dirBS]   = &distributions[dirBS * size_Mat];
-        distribution_references.f[dirBN]   = &distributions[dirBN * size_Mat];
-        distribution_references.f[dirTS]   = &distributions[dirTS * size_Mat];
-        distribution_references.f[dirREST] = &distributions[dirREST * size_Mat];
-        distribution_references.f[dirTNE]  = &distributions[dirTNE * size_Mat];
-        distribution_references.f[dirTSW]  = &distributions[dirTSW * size_Mat];
-        distribution_references.f[dirTSE]  = &distributions[dirTSE * size_Mat];
-        distribution_references.f[dirTNW]  = &distributions[dirTNW * size_Mat];
-        distribution_references.f[dirBNE]  = &distributions[dirBNE * size_Mat];
-        distribution_references.f[dirBSW]  = &distributions[dirBSW * size_Mat];
-        distribution_references.f[dirBSE]  = &distributions[dirBSE * size_Mat];
-        distribution_references.f[dirBNW]  = &distributions[dirBNW * size_Mat];
+        distribution_references.f[E]    = &distributions[E * size_Mat];
+        distribution_references.f[W]    = &distributions[W * size_Mat];
+        distribution_references.f[N]    = &distributions[N * size_Mat];
+        distribution_references.f[S]    = &distributions[S * size_Mat];
+        distribution_references.f[T]    = &distributions[T * size_Mat];
+        distribution_references.f[B]    = &distributions[B * size_Mat];
+        distribution_references.f[NE]   = &distributions[NE * size_Mat];
+        distribution_references.f[SW]   = &distributions[SW * size_Mat];
+        distribution_references.f[SE]   = &distributions[SE * size_Mat];
+        distribution_references.f[NW]   = &distributions[NW * size_Mat];
+        distribution_references.f[TE]   = &distributions[TE * size_Mat];
+        distribution_references.f[BW]   = &distributions[BW * size_Mat];
+        distribution_references.f[BE]   = &distributions[BE * size_Mat];
+        distribution_references.f[TW]   = &distributions[TW * size_Mat];
+        distribution_references.f[TN]   = &distributions[TN * size_Mat];
+        distribution_references.f[BS]   = &distributions[BS * size_Mat];
+        distribution_references.f[BN]   = &distributions[BN * size_Mat];
+        distribution_references.f[TS]   = &distributions[TS * size_Mat];
+        distribution_references.f[REST] = &distributions[REST * size_Mat];
+        distribution_references.f[TNE]  = &distributions[TNE * size_Mat];
+        distribution_references.f[TSW]  = &distributions[TSW * size_Mat];
+        distribution_references.f[TSE]  = &distributions[TSE * size_Mat];
+        distribution_references.f[TNW]  = &distributions[TNW * size_Mat];
+        distribution_references.f[BNE]  = &distributions[BNE * size_Mat];
+        distribution_references.f[BSW]  = &distributions[BSW * size_Mat];
+        distribution_references.f[BSE]  = &distributions[BSE * size_Mat];
+        distribution_references.f[BNW]  = &distributions[BNW * size_Mat];
     } else {
-        distribution_references.f[dirW]    = &distributions[dirE * size_Mat];
-        distribution_references.f[dirE]    = &distributions[dirW * size_Mat];
-        distribution_references.f[dirS]    = &distributions[dirN * size_Mat];
-        distribution_references.f[dirN]    = &distributions[dirS * size_Mat];
-        distribution_references.f[dirB]    = &distributions[dirT * size_Mat];
-        distribution_references.f[dirT]    = &distributions[dirB * size_Mat];
-        distribution_references.f[dirSW]   = &distributions[dirNE * size_Mat];
-        distribution_references.f[dirNE]   = &distributions[dirSW * size_Mat];
-        distribution_references.f[dirNW]   = &distributions[dirSE * size_Mat];
-        distribution_references.f[dirSE]   = &distributions[dirNW * size_Mat];
-        distribution_references.f[dirBW]   = &distributions[dirTE * size_Mat];
-        distribution_references.f[dirTE]   = &distributions[dirBW * size_Mat];
-        distribution_references.f[dirTW]   = &distributions[dirBE * size_Mat];
-        distribution_references.f[dirBE]   = &distributions[dirTW * size_Mat];
-        distribution_references.f[dirBS]   = &distributions[dirTN * size_Mat];
-        distribution_references.f[dirTN]   = &distributions[dirBS * size_Mat];
-        distribution_references.f[dirTS]   = &distributions[dirBN * size_Mat];
-        distribution_references.f[dirBN]   = &distributions[dirTS * size_Mat];
-        distribution_references.f[dirREST] = &distributions[dirREST * size_Mat];
-        distribution_references.f[dirBSW]  = &distributions[dirTNE * size_Mat];
-        distribution_references.f[dirBNE]  = &distributions[dirTSW * size_Mat];
-        distribution_references.f[dirBNW]  = &distributions[dirTSE * size_Mat];
-        distribution_references.f[dirBSE]  = &distributions[dirTNW * size_Mat];
-        distribution_references.f[dirTSW]  = &distributions[dirBNE * size_Mat];
-        distribution_references.f[dirTNE]  = &distributions[dirBSW * size_Mat];
-        distribution_references.f[dirTNW]  = &distributions[dirBSE * size_Mat];
-        distribution_references.f[dirTSE]  = &distributions[dirBNW * size_Mat];
+        distribution_references.f[W]    = &distributions[E * size_Mat];
+        distribution_references.f[E]    = &distributions[W * size_Mat];
+        distribution_references.f[S]    = &distributions[N * size_Mat];
+        distribution_references.f[N]    = &distributions[S * size_Mat];
+        distribution_references.f[B]    = &distributions[T * size_Mat];
+        distribution_references.f[T]    = &distributions[B * size_Mat];
+        distribution_references.f[SW]   = &distributions[NE * size_Mat];
+        distribution_references.f[NE]   = &distributions[SW * size_Mat];
+        distribution_references.f[NW]   = &distributions[SE * size_Mat];
+        distribution_references.f[SE]   = &distributions[NW * size_Mat];
+        distribution_references.f[BW]   = &distributions[TE * size_Mat];
+        distribution_references.f[TE]   = &distributions[BW * size_Mat];
+        distribution_references.f[TW]   = &distributions[BE * size_Mat];
+        distribution_references.f[BE]   = &distributions[TW * size_Mat];
+        distribution_references.f[BS]   = &distributions[TN * size_Mat];
+        distribution_references.f[TN]   = &distributions[BS * size_Mat];
+        distribution_references.f[TS]   = &distributions[BN * size_Mat];
+        distribution_references.f[BN]   = &distributions[TS * size_Mat];
+        distribution_references.f[REST] = &distributions[REST * size_Mat];
+        distribution_references.f[BSW]  = &distributions[TNE * size_Mat];
+        distribution_references.f[BNE]  = &distributions[TSW * size_Mat];
+        distribution_references.f[BNW]  = &distributions[TSE * size_Mat];
+        distribution_references.f[BSE]  = &distributions[TNW * size_Mat];
+        distribution_references.f[TSW]  = &distributions[BNE * size_Mat];
+        distribution_references.f[TNE]  = &distributions[BSW * size_Mat];
+        distribution_references.f[TNW]  = &distributions[BSE * size_Mat];
+        distribution_references.f[TSE]  = &distributions[BNW * size_Mat];
     }
     return distribution_references;
 }
@@ -86,64 +85,64 @@ __device__ DistributionWrapper::DistributionWrapper(real *distributions, unsigne
 
 __device__ void DistributionWrapper::read()
 {
-    distribution.f[vf::lbm::dir::PZZ] = (distribution_references.f[dirE])[k];
-    distribution.f[vf::lbm::dir::MZZ] = (distribution_references.f[dirW])[kw];
-    distribution.f[vf::lbm::dir::ZPZ] = (distribution_references.f[dirN])[k];
-    distribution.f[vf::lbm::dir::ZMZ] = (distribution_references.f[dirS])[ks];
-    distribution.f[vf::lbm::dir::ZZP] = (distribution_references.f[dirT])[k];
-    distribution.f[vf::lbm::dir::ZZM] = (distribution_references.f[dirB])[kb];
-    distribution.f[vf::lbm::dir::PPZ] = (distribution_references.f[dirNE])[k];
-    distribution.f[vf::lbm::dir::MMZ] = (distribution_references.f[dirSW])[ksw];
-    distribution.f[vf::lbm::dir::PMZ] = (distribution_references.f[dirSE])[ks];
-    distribution.f[vf::lbm::dir::MPZ] = (distribution_references.f[dirNW])[kw];
-    distribution.f[vf::lbm::dir::PZP] = (distribution_references.f[dirTE])[k];
-    distribution.f[vf::lbm::dir::MZM] = (distribution_references.f[dirBW])[kbw];
-    distribution.f[vf::lbm::dir::PZM] = (distribution_references.f[dirBE])[kb];
-    distribution.f[vf::lbm::dir::MZP] = (distribution_references.f[dirTW])[kw];
-    distribution.f[vf::lbm::dir::ZPP] = (distribution_references.f[dirTN])[k];
-    distribution.f[vf::lbm::dir::ZMM] = (distribution_references.f[dirBS])[kbs];
-    distribution.f[vf::lbm::dir::ZPM] = (distribution_references.f[dirBN])[kb];
-    distribution.f[vf::lbm::dir::ZMP] = (distribution_references.f[dirTS])[ks];
-    distribution.f[vf::lbm::dir::PPP] = (distribution_references.f[dirTNE])[k];
-    distribution.f[vf::lbm::dir::MPP] = (distribution_references.f[dirTNW])[kw];
-    distribution.f[vf::lbm::dir::PMP] = (distribution_references.f[dirTSE])[ks];
-    distribution.f[vf::lbm::dir::MMP] = (distribution_references.f[dirTSW])[ksw];
-    distribution.f[vf::lbm::dir::PPM] = (distribution_references.f[dirBNE])[kb];
-    distribution.f[vf::lbm::dir::MPM] = (distribution_references.f[dirBNW])[kbw];
-    distribution.f[vf::lbm::dir::PMM] = (distribution_references.f[dirBSE])[kbs];
-    distribution.f[vf::lbm::dir::MMM] = (distribution_references.f[dirBSW])[kbsw];
-    distribution.f[vf::lbm::dir::ZZZ] = (distribution_references.f[dirREST])[k];
+    distribution.f[vf::lbm::dir::PZZ] = (distribution_references.f[E])[k];
+    distribution.f[vf::lbm::dir::MZZ] = (distribution_references.f[W])[kw];
+    distribution.f[vf::lbm::dir::ZPZ] = (distribution_references.f[N])[k];
+    distribution.f[vf::lbm::dir::ZMZ] = (distribution_references.f[S])[ks];
+    distribution.f[vf::lbm::dir::ZZP] = (distribution_references.f[T])[k];
+    distribution.f[vf::lbm::dir::ZZM] = (distribution_references.f[B])[kb];
+    distribution.f[vf::lbm::dir::PPZ] = (distribution_references.f[NE])[k];
+    distribution.f[vf::lbm::dir::MMZ] = (distribution_references.f[SW])[ksw];
+    distribution.f[vf::lbm::dir::PMZ] = (distribution_references.f[SE])[ks];
+    distribution.f[vf::lbm::dir::MPZ] = (distribution_references.f[NW])[kw];
+    distribution.f[vf::lbm::dir::PZP] = (distribution_references.f[TE])[k];
+    distribution.f[vf::lbm::dir::MZM] = (distribution_references.f[BW])[kbw];
+    distribution.f[vf::lbm::dir::PZM] = (distribution_references.f[BE])[kb];
+    distribution.f[vf::lbm::dir::MZP] = (distribution_references.f[TW])[kw];
+    distribution.f[vf::lbm::dir::ZPP] = (distribution_references.f[TN])[k];
+    distribution.f[vf::lbm::dir::ZMM] = (distribution_references.f[BS])[kbs];
+    distribution.f[vf::lbm::dir::ZPM] = (distribution_references.f[BN])[kb];
+    distribution.f[vf::lbm::dir::ZMP] = (distribution_references.f[TS])[ks];
+    distribution.f[vf::lbm::dir::PPP] = (distribution_references.f[TNE])[k];
+    distribution.f[vf::lbm::dir::MPP] = (distribution_references.f[TNW])[kw];
+    distribution.f[vf::lbm::dir::PMP] = (distribution_references.f[TSE])[ks];
+    distribution.f[vf::lbm::dir::MMP] = (distribution_references.f[TSW])[ksw];
+    distribution.f[vf::lbm::dir::PPM] = (distribution_references.f[BNE])[kb];
+    distribution.f[vf::lbm::dir::MPM] = (distribution_references.f[BNW])[kbw];
+    distribution.f[vf::lbm::dir::PMM] = (distribution_references.f[BSE])[kbs];
+    distribution.f[vf::lbm::dir::MMM] = (distribution_references.f[BSW])[kbsw];
+    distribution.f[vf::lbm::dir::ZZZ] = (distribution_references.f[REST])[k];
 }
 
 __device__ void DistributionWrapper::write()
 {
-    (distribution_references.f[dirE])[k]      = distribution.f[vf::lbm::dir::PZZ];
-    (distribution_references.f[dirW])[kw]     = distribution.f[vf::lbm::dir::MZZ];
-    (distribution_references.f[dirN])[k]      = distribution.f[vf::lbm::dir::ZPZ];
-    (distribution_references.f[dirS])[ks]     = distribution.f[vf::lbm::dir::ZMZ];
-    (distribution_references.f[dirT])[k]      = distribution.f[vf::lbm::dir::ZZP];
-    (distribution_references.f[dirB])[kb]     = distribution.f[vf::lbm::dir::ZZM];
-    (distribution_references.f[dirNE])[k]     = distribution.f[vf::lbm::dir::PPZ];
-    (distribution_references.f[dirSW])[ksw]   = distribution.f[vf::lbm::dir::MMZ];
-    (distribution_references.f[dirSE])[ks]    = distribution.f[vf::lbm::dir::PMZ];
-    (distribution_references.f[dirNW])[kw]    = distribution.f[vf::lbm::dir::MPZ];
-    (distribution_references.f[dirTE])[k]     = distribution.f[vf::lbm::dir::PZP];
-    (distribution_references.f[dirBW])[kbw]   = distribution.f[vf::lbm::dir::MZM];
-    (distribution_references.f[dirBE])[kb]    = distribution.f[vf::lbm::dir::PZM];
-    (distribution_references.f[dirTW])[kw]    = distribution.f[vf::lbm::dir::MZP];
-    (distribution_references.f[dirTN])[k]     = distribution.f[vf::lbm::dir::ZPP];
-    (distribution_references.f[dirBS])[kbs]   = distribution.f[vf::lbm::dir::ZMM];
-    (distribution_references.f[dirBN])[kb]    = distribution.f[vf::lbm::dir::ZPM];
-    (distribution_references.f[dirTS])[ks]    = distribution.f[vf::lbm::dir::ZMP];
-    (distribution_references.f[dirTNE])[k]    = distribution.f[vf::lbm::dir::PPP];
-    (distribution_references.f[dirTNW])[kw]   = distribution.f[vf::lbm::dir::MPP];
-    (distribution_references.f[dirTSE])[ks]   = distribution.f[vf::lbm::dir::PMP];
-    (distribution_references.f[dirTSW])[ksw]  = distribution.f[vf::lbm::dir::MMP];
-    (distribution_references.f[dirBNE])[kb]   = distribution.f[vf::lbm::dir::PPM];
-    (distribution_references.f[dirBNW])[kbw]  = distribution.f[vf::lbm::dir::MPM];
-    (distribution_references.f[dirBSE])[kbs]  = distribution.f[vf::lbm::dir::PMM];
-    (distribution_references.f[dirBSW])[kbsw] = distribution.f[vf::lbm::dir::MMM];
-    (distribution_references.f[dirREST])[k]   = distribution.f[vf::lbm::dir::ZZZ];
+    (distribution_references.f[E])[k]      = distribution.f[vf::lbm::dir::PZZ];
+    (distribution_references.f[W])[kw]     = distribution.f[vf::lbm::dir::MZZ];
+    (distribution_references.f[N])[k]      = distribution.f[vf::lbm::dir::ZPZ];
+    (distribution_references.f[S])[ks]     = distribution.f[vf::lbm::dir::ZMZ];
+    (distribution_references.f[T])[k]      = distribution.f[vf::lbm::dir::ZZP];
+    (distribution_references.f[B])[kb]     = distribution.f[vf::lbm::dir::ZZM];
+    (distribution_references.f[NE])[k]     = distribution.f[vf::lbm::dir::PPZ];
+    (distribution_references.f[SW])[ksw]   = distribution.f[vf::lbm::dir::MMZ];
+    (distribution_references.f[SE])[ks]    = distribution.f[vf::lbm::dir::PMZ];
+    (distribution_references.f[NW])[kw]    = distribution.f[vf::lbm::dir::MPZ];
+    (distribution_references.f[TE])[k]     = distribution.f[vf::lbm::dir::PZP];
+    (distribution_references.f[BW])[kbw]   = distribution.f[vf::lbm::dir::MZM];
+    (distribution_references.f[BE])[kb]    = distribution.f[vf::lbm::dir::PZM];
+    (distribution_references.f[TW])[kw]    = distribution.f[vf::lbm::dir::MZP];
+    (distribution_references.f[TN])[k]     = distribution.f[vf::lbm::dir::ZPP];
+    (distribution_references.f[BS])[kbs]   = distribution.f[vf::lbm::dir::ZMM];
+    (distribution_references.f[BN])[kb]    = distribution.f[vf::lbm::dir::ZPM];
+    (distribution_references.f[TS])[ks]    = distribution.f[vf::lbm::dir::ZMP];
+    (distribution_references.f[TNE])[k]    = distribution.f[vf::lbm::dir::PPP];
+    (distribution_references.f[TNW])[kw]   = distribution.f[vf::lbm::dir::MPP];
+    (distribution_references.f[TSE])[ks]   = distribution.f[vf::lbm::dir::PMP];
+    (distribution_references.f[TSW])[ksw]  = distribution.f[vf::lbm::dir::MMP];
+    (distribution_references.f[BNE])[kb]   = distribution.f[vf::lbm::dir::PPM];
+    (distribution_references.f[BNW])[kbw]  = distribution.f[vf::lbm::dir::MPM];
+    (distribution_references.f[BSE])[kbs]  = distribution.f[vf::lbm::dir::PMM];
+    (distribution_references.f[BSW])[kbsw] = distribution.f[vf::lbm::dir::MMM];
+    (distribution_references.f[REST])[k]   = distribution.f[vf::lbm::dir::ZZZ];
 }
 
 __device__ unsigned int getNodeIndex()
@@ -164,5 +163,4 @@ __device__ bool isValidFluidNode(uint nodeType)
 }
 
 
-} // namespace gpu
-} // namespace vf
+}
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp
index 46d3fe890fd2f412251044cce6ade51f08ba0185..88a5ae8d113e3a998932d53c1f29358ed2598d31 100644
--- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp
+++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp
@@ -2,8 +2,8 @@
 
 #include "DistributionHelper.cuh"
 
-#include "LBM/D3Q27.h"
-
+#include "lbm/constants/D3Q27.h"
+using namespace vf::lbm::dir;
 
 auto RealEq = [](auto value) { 
 #ifdef VF_DOUBLE_ACCURACY
@@ -24,33 +24,33 @@ TEST(DistributionHelperTests, getPointerToDistribution_WhenEvenTimeStep_ShouldBe
 
     Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep);
 
-    EXPECT_THAT(*distribution_out.f[dirE], RealEq(distributions_in[dirE]));
-    EXPECT_THAT(*distribution_out.f[dirW], RealEq(distributions_in[dirW]));
-    EXPECT_THAT(*distribution_out.f[dirN], RealEq(distributions_in[dirN]));
-    EXPECT_THAT(*distribution_out.f[dirS], RealEq(distributions_in[dirS]));
-    EXPECT_THAT(*distribution_out.f[dirT], RealEq(distributions_in[dirT]));
-    EXPECT_THAT(*distribution_out.f[dirB], RealEq(distributions_in[dirB]));
-    EXPECT_THAT(*distribution_out.f[dirNE], RealEq(distributions_in[dirNE]));
-    EXPECT_THAT(*distribution_out.f[dirSW], RealEq(distributions_in[dirSW]));
-    EXPECT_THAT(*distribution_out.f[dirSE], RealEq(distributions_in[dirSE]));
-    EXPECT_THAT(*distribution_out.f[dirNW], RealEq(distributions_in[dirNW]));
-    EXPECT_THAT(*distribution_out.f[dirTE], RealEq(distributions_in[dirTE]));
-    EXPECT_THAT(*distribution_out.f[dirBW], RealEq(distributions_in[dirBW]));
-    EXPECT_THAT(*distribution_out.f[dirBE], RealEq(distributions_in[dirBE]));
-    EXPECT_THAT(*distribution_out.f[dirTW], RealEq(distributions_in[dirTW]));
-    EXPECT_THAT(*distribution_out.f[dirTN], RealEq(distributions_in[dirTN]));
-    EXPECT_THAT(*distribution_out.f[dirBS], RealEq(distributions_in[dirBS]));
-    EXPECT_THAT(*distribution_out.f[dirBN], RealEq(distributions_in[dirBN]));
-    EXPECT_THAT(*distribution_out.f[dirTS], RealEq(distributions_in[dirTS]));
-    EXPECT_THAT(*distribution_out.f[dirREST], RealEq(distributions_in[dirREST]));
-    EXPECT_THAT(*distribution_out.f[dirTNE], RealEq(distributions_in[dirTNE]));
-    EXPECT_THAT(*distribution_out.f[dirTSW], RealEq(distributions_in[dirTSW]));
-    EXPECT_THAT(*distribution_out.f[dirTSE], RealEq(distributions_in[dirTSE]));
-    EXPECT_THAT(*distribution_out.f[dirTNW], RealEq(distributions_in[dirTNW]));
-    EXPECT_THAT(*distribution_out.f[dirBNE], RealEq(distributions_in[dirBNE]));
-    EXPECT_THAT(*distribution_out.f[dirBSW], RealEq(distributions_in[dirBSW]));
-    EXPECT_THAT(*distribution_out.f[dirBSE], RealEq(distributions_in[dirBSE]));
-    EXPECT_THAT(*distribution_out.f[dirBNW], RealEq(distributions_in[dirBNW]));
+    EXPECT_THAT(*distribution_out.f[E], RealEq(distributions_in[E]));
+    EXPECT_THAT(*distribution_out.f[W], RealEq(distributions_in[W]));
+    EXPECT_THAT(*distribution_out.f[N], RealEq(distributions_in[N]));
+    EXPECT_THAT(*distribution_out.f[S], RealEq(distributions_in[S]));
+    EXPECT_THAT(*distribution_out.f[T], RealEq(distributions_in[T]));
+    EXPECT_THAT(*distribution_out.f[B], RealEq(distributions_in[B]));
+    EXPECT_THAT(*distribution_out.f[NE], RealEq(distributions_in[NE]));
+    EXPECT_THAT(*distribution_out.f[SW], RealEq(distributions_in[SW]));
+    EXPECT_THAT(*distribution_out.f[SE], RealEq(distributions_in[SE]));
+    EXPECT_THAT(*distribution_out.f[NW], RealEq(distributions_in[NW]));
+    EXPECT_THAT(*distribution_out.f[TE], RealEq(distributions_in[TE]));
+    EXPECT_THAT(*distribution_out.f[BW], RealEq(distributions_in[BW]));
+    EXPECT_THAT(*distribution_out.f[BE], RealEq(distributions_in[BE]));
+    EXPECT_THAT(*distribution_out.f[TW], RealEq(distributions_in[TW]));
+    EXPECT_THAT(*distribution_out.f[TN], RealEq(distributions_in[TN]));
+    EXPECT_THAT(*distribution_out.f[BS], RealEq(distributions_in[BS]));
+    EXPECT_THAT(*distribution_out.f[BN], RealEq(distributions_in[BN]));
+    EXPECT_THAT(*distribution_out.f[TS], RealEq(distributions_in[TS]));
+    EXPECT_THAT(*distribution_out.f[REST], RealEq(distributions_in[REST]));
+    EXPECT_THAT(*distribution_out.f[TNE], RealEq(distributions_in[TNE]));
+    EXPECT_THAT(*distribution_out.f[TSW], RealEq(distributions_in[TSW]));
+    EXPECT_THAT(*distribution_out.f[TSE], RealEq(distributions_in[TSE]));
+    EXPECT_THAT(*distribution_out.f[TNW], RealEq(distributions_in[TNW]));
+    EXPECT_THAT(*distribution_out.f[BNE], RealEq(distributions_in[BNE]));
+    EXPECT_THAT(*distribution_out.f[BSW], RealEq(distributions_in[BSW]));
+    EXPECT_THAT(*distribution_out.f[BSE], RealEq(distributions_in[BSE]));
+    EXPECT_THAT(*distribution_out.f[BNW], RealEq(distributions_in[BNW]));
 }
 
 TEST(DistributionHelperTests, getPointerToDistribution_WhenOddTimeStep_ShouldBeSwapped)
@@ -63,31 +63,31 @@ TEST(DistributionHelperTests, getPointerToDistribution_WhenOddTimeStep_ShouldBeS
 
     Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep);
 
-    EXPECT_THAT(*distribution_out.f[dirW], RealEq(distributions_in[dirE]));
-    EXPECT_THAT(*distribution_out.f[dirE], RealEq(distributions_in[dirW]));
-    EXPECT_THAT(*distribution_out.f[dirS], RealEq(distributions_in[dirN]));
-    EXPECT_THAT(*distribution_out.f[dirN], RealEq(distributions_in[dirS]));
-    EXPECT_THAT(*distribution_out.f[dirB], RealEq(distributions_in[dirT]));
-    EXPECT_THAT(*distribution_out.f[dirT], RealEq(distributions_in[dirB]));
-    EXPECT_THAT(*distribution_out.f[dirSW], RealEq(distributions_in[dirNE]));
-    EXPECT_THAT(*distribution_out.f[dirNE], RealEq(distributions_in[dirSW]));
-    EXPECT_THAT(*distribution_out.f[dirNW], RealEq(distributions_in[dirSE]));
-    EXPECT_THAT(*distribution_out.f[dirSE], RealEq(distributions_in[dirNW]));
-    EXPECT_THAT(*distribution_out.f[dirBW], RealEq(distributions_in[dirTE]));
-    EXPECT_THAT(*distribution_out.f[dirTE], RealEq(distributions_in[dirBW]));
-    EXPECT_THAT(*distribution_out.f[dirTW], RealEq(distributions_in[dirBE]));
-    EXPECT_THAT(*distribution_out.f[dirBE], RealEq(distributions_in[dirTW]));
-    EXPECT_THAT(*distribution_out.f[dirBS], RealEq(distributions_in[dirTN]));
-    EXPECT_THAT(*distribution_out.f[dirTN], RealEq(distributions_in[dirBS]));
-    EXPECT_THAT(*distribution_out.f[dirTS], RealEq(distributions_in[dirBN]));
-    EXPECT_THAT(*distribution_out.f[dirBN], RealEq(distributions_in[dirTS]));
-    EXPECT_THAT(*distribution_out.f[dirREST], RealEq(distributions_in[dirREST]));
-    EXPECT_THAT(*distribution_out.f[dirBSW], RealEq(distributions_in[dirTNE]));
-    EXPECT_THAT(*distribution_out.f[dirBNE], RealEq(distributions_in[dirTSW]));
-    EXPECT_THAT(*distribution_out.f[dirBNW], RealEq(distributions_in[dirTSE]));
-    EXPECT_THAT(*distribution_out.f[dirBSE], RealEq(distributions_in[dirTNW]));
-    EXPECT_THAT(*distribution_out.f[dirTSW], RealEq(distributions_in[dirBNE]));
-    EXPECT_THAT(*distribution_out.f[dirTNE], RealEq(distributions_in[dirBSW]));
-    EXPECT_THAT(*distribution_out.f[dirTNW], RealEq(distributions_in[dirBSE]));
-    EXPECT_THAT(*distribution_out.f[dirTSE], RealEq(distributions_in[dirBNW]));
+    EXPECT_THAT(*distribution_out.f[W], RealEq(distributions_in[E]));
+    EXPECT_THAT(*distribution_out.f[E], RealEq(distributions_in[W]));
+    EXPECT_THAT(*distribution_out.f[S], RealEq(distributions_in[N]));
+    EXPECT_THAT(*distribution_out.f[N], RealEq(distributions_in[S]));
+    EXPECT_THAT(*distribution_out.f[B], RealEq(distributions_in[T]));
+    EXPECT_THAT(*distribution_out.f[T], RealEq(distributions_in[B]));
+    EXPECT_THAT(*distribution_out.f[SW], RealEq(distributions_in[NE]));
+    EXPECT_THAT(*distribution_out.f[NE], RealEq(distributions_in[SW]));
+    EXPECT_THAT(*distribution_out.f[NW], RealEq(distributions_in[SE]));
+    EXPECT_THAT(*distribution_out.f[SE], RealEq(distributions_in[NW]));
+    EXPECT_THAT(*distribution_out.f[BW], RealEq(distributions_in[TE]));
+    EXPECT_THAT(*distribution_out.f[TE], RealEq(distributions_in[BW]));
+    EXPECT_THAT(*distribution_out.f[TW], RealEq(distributions_in[BE]));
+    EXPECT_THAT(*distribution_out.f[BE], RealEq(distributions_in[TW]));
+    EXPECT_THAT(*distribution_out.f[BS], RealEq(distributions_in[TN]));
+    EXPECT_THAT(*distribution_out.f[TN], RealEq(distributions_in[BS]));
+    EXPECT_THAT(*distribution_out.f[TS], RealEq(distributions_in[BN]));
+    EXPECT_THAT(*distribution_out.f[BN], RealEq(distributions_in[TS]));
+    EXPECT_THAT(*distribution_out.f[REST], RealEq(distributions_in[REST]));
+    EXPECT_THAT(*distribution_out.f[BSW], RealEq(distributions_in[TNE]));
+    EXPECT_THAT(*distribution_out.f[BNE], RealEq(distributions_in[TSW]));
+    EXPECT_THAT(*distribution_out.f[BNW], RealEq(distributions_in[TSE]));
+    EXPECT_THAT(*distribution_out.f[BSE], RealEq(distributions_in[TNW]));
+    EXPECT_THAT(*distribution_out.f[TSW], RealEq(distributions_in[BNE]));
+    EXPECT_THAT(*distribution_out.f[TNE], RealEq(distributions_in[BSW]));
+    EXPECT_THAT(*distribution_out.f[TNW], RealEq(distributions_in[BSE]));
+    EXPECT_THAT(*distribution_out.f[TSE], RealEq(distributions_in[BNW]));
 }
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
index 24ac3655525e463b9cc54d78182ea2af23e071c2..9ca813ac4987af618491422acb60207b7fee543c 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp
@@ -35,8 +35,9 @@
 #include "GPU/GPU_Interface.h"
 #include "Parameter/Parameter.h"
 
-////////////////////////////////////////////////////////////////////////////////
-void ADKernelManager::initAD(int level)
+ADKernelManager::ADKernelManager(SPtr<Parameter> parameter): para(parameter){}
+
+void ADKernelManager::initAD(const int level) const
 {
     //////////////////////////////////////////////////////////////////////////
     // calculation of omega for diffusivity
@@ -87,7 +88,7 @@ void ADKernelManager::initAD(int level)
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void ADKernelManager::setInitialNodeValuesAD(int level, SPtr<CudaMemoryManager> cudaMemoryManager)
+void ADKernelManager::setInitialNodeValuesAD(const int level, SPtr<CudaMemoryManager> cudaMemoryManager) const
 {
     for (uint j = 1; j <= para->getParH(level)->numberOfNodes; j++) {
         const real coordX = para->getParH(level)->coordinateX[j];
@@ -110,7 +111,7 @@ void ADKernelManager::setInitialNodeValuesAD(int level, SPtr<CudaMemoryManager>
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void ADKernelManager::runADcollisionKernel(int level)
+void ADKernelManager::runADcollisionKernel(const int level)const
 {
     if (para->getDiffMod() == 7)
     {
@@ -179,8 +180,8 @@ void ADKernelManager::runADcollisionKernel(int level)
     }
 }
 
-void ADKernelManager::runADslipBCKernel(int level){
-    if (para->getParD(level)->numberOfSlipBCnodes > 1) {
+void ADKernelManager::runADslipBCKernel(const int level) const{
+    if (para->getParD(level)->slipBC.numberOfBCnodes > 1) {
         ADSlipVelDevComp(
             para->getParD(level)->numberofthreads,
             para->getParD(level)->slipBC.normalX,
@@ -190,7 +191,7 @@ void ADKernelManager::runADslipBCKernel(int level){
             para->getParD(level)->distributionsAD27.f[0],
             para->getParD(level)->slipBC.k,
             para->getParD(level)->slipBC.q27[0],
-            para->getParD(level)->numberOfSlipBCnodes,
+            para->getParD(level)->slipBC.numberOfBCnodes,
             para->getParD(level)->omegaDiffusivity,
             para->getParD(level)->neighborX,
             para->getParD(level)->neighborY,
@@ -200,13 +201,11 @@ void ADKernelManager::runADslipBCKernel(int level){
     }
 }
 
-void ADKernelManager::runADpressureBCKernel(int level){
+void ADKernelManager::runADpressureBCKernel(const int level) const{
     if (para->getParD(level)->TempPress.kTemp > 0){
         if (para->getDiffMod() == 7) {
             // QADPressIncompDev7( 
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD7.f[0],
             //     para->getParD(level)->TempPress.temp,
@@ -215,7 +214,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
             //     para->getParD(level)->TempPress.k,
             //     para->getParD(level)->pressureBC.q27[0],
             //     para->getParD(level)->TempPress.kTemp,
-            //     para->getParD(level)->TempPress.kTemp,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -228,8 +226,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
              //////////////////////////////////////////////////////////////////////////
             QADPressDev7(
                 para->getParD(level)->numberofthreads,
-                para->getParD(level)->nx,
-                para->getParD(level)->ny,
                 para->getParD(level)->distributions.f[0],
                 para->getParD(level)->distributionsAD7.f[0],
                 para->getParD(level)->TempPress.temp,
@@ -238,7 +234,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
                 para->getParD(level)->TempPress.k,
                 para->getParD(level)->pressureBC.q27[0],
                 para->getParD(level)->TempPress.kTemp,
-                para->getParD(level)->TempPress.kTemp,
                 para->getParD(level)->omega,
                 para->getParD(level)->neighborX,
                 para->getParD(level)->neighborY,
@@ -249,8 +244,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
         } else if (para->getDiffMod() == 27) {
             // QADPressIncompDev27(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD27.f[0],
             //     para->getParD(level)->TempPress.temp,
@@ -259,7 +252,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
             //     para->getParD(level)->TempPress.k,
             //     para->getParD(level)->pressureBC.q27[0],
             //     para->getParD(level)->TempPress.kTemp,
-            //     para->getParD(level)->TempPress.kTemp,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -272,8 +264,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
             //////////////////////////////////////////////////////////////////////////
             QADPressDev27(
                 para->getParD(level)->numberofthreads,
-                para->getParD(level)->nx,
-                para->getParD(level)->ny,
                 para->getParD(level)->distributions.f[0],
                 para->getParD(level)->distributionsAD27.f[0],
                 para->getParD(level)->TempPress.temp,
@@ -282,7 +272,6 @@ void ADKernelManager::runADpressureBCKernel(int level){
                 para->getParD(level)->TempPress.k,
                 para->getParD(level)->pressureBC.q27[0],
                 para->getParD(level)->TempPress.kTemp,
-                para->getParD(level)->TempPress.kTemp,
                 para->getParD(level)->omega,
                 para->getParD(level)->neighborX,
                 para->getParD(level)->neighborY,
@@ -293,14 +282,12 @@ void ADKernelManager::runADpressureBCKernel(int level){
     }
 }
 
-void ADKernelManager::runADgeometryBCKernel(int level)
+void ADKernelManager::runADgeometryBCKernel(const int level) const
 {
     if (para->getParD(level)->geometryBC.numberOfBCnodes > 0) {
         if (para->getDiffMod() == 7) {
             // QNoSlipADincompDev7(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD7.f[0],
             //     para->getParD(level)->Temp.temp,
@@ -308,7 +295,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
             //     para->getParD(level)->Temp.k,
             //     para->getParD(level)->geometryBC.q27[0],
             //     para->getParD(level)->Temp.kTemp,
-            //     para->getParD(level)->Temp.kTemp,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -322,8 +308,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
 
             QADDev7(
                 para->getParD(level)->numberofthreads,
-                para->getParD(level)->nx,
-                para->getParD(level)->ny,
                 para->getParD(level)->distributions.f[0],
                 para->getParD(level)->distributionsAD7.f[0],
                 para->getParD(level)->Temp.temp,
@@ -331,7 +315,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
                 para->getParD(level)->Temp.k,
                 para->getParD(level)->geometryBC.q27[0],
                 para->getParD(level)->Temp.kTemp,
-                para->getParD(level)->Temp.kTemp,
                 para->getParD(level)->omega,
                 para->getParD(level)->neighborX,
                 para->getParD(level)->neighborY,
@@ -342,8 +325,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
         } else if (para->getDiffMod() == 27) {
             // QNoSlipADincompDev27(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD27.f[0],
             //     para->getParD(level)->Temp.temp,
@@ -351,7 +332,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
             //     para->getParD(level)->Temp.k,
             //     para->getParD(level)->geometryBC.q27[0],
             //     para->getParD(level)->Temp.kTemp,
-            //     para->getParD(level)->Temp.kTemp,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -365,8 +345,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
 
             QADBBDev27(
                 para->getParD(level)->numberofthreads,
-                para->getParD(level)->nx,
-                para->getParD(level)->ny,
                 para->getParD(level)->distributions.f[0],
                 para->getParD(level)->distributionsAD27.f[0],
                 para->getParD(level)->Temp.temp,
@@ -374,7 +352,6 @@ void ADKernelManager::runADgeometryBCKernel(int level)
                 para->getParD(level)->Temp.k,
                 para->getParD(level)->geometryBC.q27[0],
                 para->getParD(level)->Temp.kTemp,
-                para->getParD(level)->Temp.kTemp,
                 para->getParD(level)->omega,
                 para->getParD(level)->neighborX,
                 para->getParD(level)->neighborY,
@@ -385,14 +362,12 @@ void ADKernelManager::runADgeometryBCKernel(int level)
     }
 }
 
-void ADKernelManager::runADveloBCKernel(int level){
+void ADKernelManager::runADveloBCKernel(const int level) const{
     if (para->getParD(level)->TempVel.kTemp > 0){
         if (para->getDiffMod() == 7)
         {
             // QADVeloIncompDev7(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD7.f[0],
             //     para->getParD(level)->TempVel.tempPulse,
@@ -401,7 +376,6 @@ void ADKernelManager::runADveloBCKernel(int level){
             //     para->getParD(level)->TempVel.k,
             //     para->getParD(level)->velocityBC.q27[0],
             //     para->getParD(level)->TempVel.kTemp,
-            //     para->getParD(level)->TempVel.kTemp,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -415,8 +389,6 @@ void ADKernelManager::runADveloBCKernel(int level){
 
             QADVelDev7(
                 para->getParD(level)->numberofthreads,
-                para->getParD(level)->nx,
-                para->getParD(level)->ny,
                 para->getParD(level)->distributions.f[0],
                 para->getParD(level)->distributionsAD7.f[0],
                 para->getParD(level)->TempVel.temp,
@@ -425,7 +397,6 @@ void ADKernelManager::runADveloBCKernel(int level){
                 para->getParD(level)->TempVel.k,
                 para->getParD(level)->velocityBC.q27[0],
                 para->getParD(level)->TempVel.kTemp,
-                para->getParD(level)->TempVel.kTemp,
                 para->getParD(level)->omega,
                 para->getParD(level)->neighborX,
                 para->getParD(level)->neighborY,
@@ -436,8 +407,6 @@ void ADKernelManager::runADveloBCKernel(int level){
         } else if (para->getDiffMod() == 27) {
             // QADVeloIncompDev27(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD27.f[0],
             //     para->getParD(level)->TempVel.temp,
@@ -446,7 +415,6 @@ void ADKernelManager::runADveloBCKernel(int level){
             //     para->getParD(level)->TempVel.k,
             //     para->getParD(level)->velocityBC.q27[0],
             //     para->getParD(level)->TempVel.kTemp,
-            //     para->getParD(level)->TempVel.kTemp,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -459,8 +427,6 @@ void ADKernelManager::runADveloBCKernel(int level){
             //////////////////////////////////////////////////////////////////////////
             QADVelDev27(
                 para->getParD(level)->numberofthreads,
-                para->getParD(level)->nx,
-                para->getParD(level)->ny,
                 para->getParD(level)->distributions.f[0],
                 para->getParD(level)->distributionsAD27.f[0],
                 para->getParD(level)->TempVel.tempPulse,
@@ -468,8 +434,7 @@ void ADKernelManager::runADveloBCKernel(int level){
                 para->getParD(level)->diffusivity,
                 para->getParD(level)->velocityBC.k,
                 para->getParD(level)->velocityBC.q27[0],
-                para->getParD(level)->numberOfVeloBCnodes,
-                para->getParD(level)->numberOfVeloBCnodes,
+                para->getParD(level)->velocityBC.numberOfBCnodes,
                 para->getParD(level)->omega,
                 para->getParD(level)->neighborX,
                 para->getParD(level)->neighborY,
@@ -484,8 +449,6 @@ void ADKernelManager::runADveloBCKernel(int level){
             // {
             //   QADVelDev27(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD27.f[0],
             //     para->getParD(level)->TempVel.tempPulse,
@@ -493,8 +456,7 @@ void ADKernelManager::runADveloBCKernel(int level){
             //     para->getParD(level)->diffusivity,
             //     para->getParD(level)->velocityBC.k,
             //     para->getParD(level)->velocityBC.q27[0],
-            //     para->getParD(level)->numberOfVeloBCnodes,
-            //     para->getParD(level)->numberOfVeloBCnodes,
+            //     para->getParD(level)->velocityBC.numberOfBCnodes,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -506,8 +468,6 @@ void ADKernelManager::runADveloBCKernel(int level){
             // {
             //   QADVelDev27(
             //     para->getParD(level)->numberofthreads,
-            //     para->getParD(level)->nx,
-            //     para->getParD(level)->ny,
             //     para->getParD(level)->distributions.f[0],
             //     para->getParD(level)->distributionsAD27.f[0],
             //     para->getParD(level)->TempVel.temp,
@@ -515,8 +475,7 @@ void ADKernelManager::runADveloBCKernel(int level){
             //     para->getParD(level)->diffusivity,
             //     para->getParD(level)->velocityBC.k,
             //     para->getParD(level)->velocityBC.q27[0],
-            //     para->getParD(level)->numberOfVeloBCnodes,
-            //     para->getParD(level)->numberOfVeloBCnodes,
+            //     para->getParD(level)->velocityBC.numberOfBCnodes,
             //     para->getParD(level)->omega,
             //     para->getParD(level)->neighborX,
             //     para->getParD(level)->neighborY,
@@ -529,7 +488,7 @@ void ADKernelManager::runADveloBCKernel(int level){
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void ADKernelManager::printAD(int level, SPtr<CudaMemoryManager> cudaMemoryManager)
+void ADKernelManager::printAD(const int level, SPtr<CudaMemoryManager> cudaMemoryManager) const
 {
     CalcConcentration27(
         para->getParD(level)->numberofthreads,
@@ -544,16 +503,3 @@ void ADKernelManager::printAD(int level, SPtr<CudaMemoryManager> cudaMemoryManag
 
     cudaMemoryManager->cudaCopyConcentrationDeviceToHost(level);
 }
-
-SPtr<ADKernelManager> ADKernelManager::make(SPtr<Parameter> parameter){
-    return SPtr<ADKernelManager>(new ADKernelManager(parameter));
-}
-
-ADKernelManager::ADKernelManager(SPtr<Parameter> parameter): para(parameter){}
-
-ADKernelManager::ADKernelManager(const ADKernelManager&)
-{
-
-}
-
-
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
index fa3dce8434ba8a1d17de2bd6cd4fd32fa4f2411d..1c069a364ab5ef2837ffd05d0ef4b6488365e4e3 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h
@@ -33,8 +33,8 @@
 #ifndef ADVECTION_DIFFUSION_H
 #define ADVECTION_DIFFUSION_H
 
-#include "PointerDefinitions.h"
 #include "Core/DataTypes.h"
+#include "PointerDefinitions.h"
 #include "VirtualFluids_GPU_export.h"
 
 //! \brief Class forwarding for Parameter, CudaMemoryManager
@@ -43,49 +43,41 @@ class CudaMemoryManager;
 
 //! \class ADKernelManager
 //! \brief manage the advection diffusion kernel calls
-class VIRTUALFLUIDS_GPU_EXPORT ADKernelManager{
+class VIRTUALFLUIDS_GPU_EXPORT ADKernelManager
+{
 
 public:
-    //! \brief makes an object of ADKernelManager
-    //! \param para shared pointer to instance of class Parameter
-    static SPtr<ADKernelManager> make(SPtr<Parameter> parameter);
+    //! Class constructor
+    //! \param parameter shared pointer to instance of class Parameter
+    ADKernelManager(SPtr<Parameter> parameter);
 
     //! \brief initialize the advection diffusion distributions
-    void initAD(int level);
-    
+    void initAD(const int level) const;
+
     //! \brief set initial concentration values at all nodes
     //! \param cudaMemoryManager instance of class CudaMemoryManager
-    void setInitialNodeValuesAD(int level, SPtr<CudaMemoryManager> cudaMemoryManager);
-    
+    void setInitialNodeValuesAD(const int level, SPtr<CudaMemoryManager> cudaMemoryManager) const;
+
     //! \brief calculate the state of the next time step of the advection diffusion distributions
-    void runADcollisionKernel(int level);
+    void runADcollisionKernel(const int level) const;
 
     //! \brief calls the device function of the geometry boundary condition for advection diffusion
-    void runADgeometryBCKernel(int level);
+    void runADgeometryBCKernel(const int level) const;
 
     //! \brief calls the device function of the velocity boundary condition for advection diffusion
-    void runADveloBCKernel(int level);
+    void runADveloBCKernel(const int level) const;
 
     //! \brief calls the device function of the slip boundary condition for advection diffusion
-    void runADslipBCKernel(int level);
+    void runADslipBCKernel(const int level) const;
 
     //! \brief calls the device function of the pressure boundary condition for advection diffusion
-    void runADpressureBCKernel(int level);
-    
+    void runADpressureBCKernel(const int level) const;
+
     //! \brief copy the concentration from device to host and writes VTK file with concentration
     //! \param cudaMemoryManager instance of class CudaMemoryManager
-    void printAD(int level, SPtr<CudaMemoryManager> cudaMemoryManager);
-
+    void printAD(const int level, SPtr<CudaMemoryManager> cudaMemoryManager) const;
 
 private:
-    //! Class constructor
-    //! \param parameter shared pointer to instance of class Parameter
-    ADKernelManager(SPtr<Parameter> parameter);
-    //! Class copy constructor
-    //! \param ADKernelManager is a reference to ADKernelManager object
-    ADKernelManager(const ADKernelManager&);
-
-    //! \property para is a shared pointer to an object of Parameter
     SPtr<Parameter> para;
 };
 
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fee3538169fcc081c99bf858ae81bdf075dc4f13
--- /dev/null
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp
@@ -0,0 +1,471 @@
+//=======================================================================================
+// ____          ____    __    ______     __________   __      __       __        __
+// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
+//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
+//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
+//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
+//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
+//      \    \  |    |   ________________________________________________________________
+//       \    \ |    |  |  ______________________________________________________________|
+//        \    \|    |  |  |         __          __     __     __     ______      _______
+//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
+//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
+//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
+//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
+//
+//  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 LBKernelManager.cpp
+//! \ingroup KernelManager
+//! \author Martin Schoenherr
+//=======================================================================================
+#include <cuda_runtime.h>
+#include <helper_cuda.h>
+
+#include "BCKernelManager.h"
+#include "Parameter/Parameter.h"
+#include "GPU/GPU_Interface.h"
+#include "Calculation/DragLift.h"
+#include "Calculation/Cp.h"
+#include "BoundaryConditions/BoundaryConditionFactory.h"
+#include "gpu/VirtualFluids_GPU/PreCollisionInteractor/VelocitySetter.h"
+
+BCKernelManager::BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory* bcFactory): para(parameter)
+{
+    this->velocityBoundaryConditionPost = bcFactory->getVelocityBoundaryConditionPost();
+    this->noSlipBoundaryConditionPost   = bcFactory->getNoSlipBoundaryConditionPost();
+    this->slipBoundaryConditionPost     = bcFactory->getSlipBoundaryConditionPost();
+    this->pressureBoundaryConditionPre  = bcFactory->getPressureBoundaryConditionPre();
+    this->geometryBoundaryConditionPost = bcFactory->getGeometryBoundaryConditionPost();
+    this->stressBoundaryConditionPost       = bcFactory->getStressBoundaryConditionPost();
+}
+
+void BCKernelManager::runVelocityBCKernelPre(const int level) const
+{
+    if (para->getParD(level)->velocityBC.numberOfBCnodes > 0)
+    {
+        // TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
+        // if ( myid == 0)
+        // {
+        //    VelSchlaffer27(para->getParD(level)->numberofthreads, t,
+        //                   para->getParD(level)->distributions.f[0],       para->getParD(level)->velocityBC.Vz,
+        //                   para->getParD(level)->velocityBC.deltaVz, para->getParD(level)->velocityBC.k,
+        //                   para->getParD(level)->velocityBC.kN,      para->getParD(level)->velocityBC.numberOfBCnodes,
+        //                   para->getParD(level)->omega,           para->getParD(level)->neighborX,
+        //                   para->getParD(level)->neighborY,    para->getParD(level)->neighborZ,
+        //                   para->getParD(level)->numberOfNodes,     para->getParD(level)->isEvenTimestep);
+        //    getLastCudaError("VelSchlaffer27 execution failed");
+        // }
+        ////////////////////////////////////////////////////////////////////////////
+        // high viscosity incompressible
+        // QVelDevIncompHighNu27(
+        //     para->getParD(level)->numberofthreads,
+        //     para->getParD(level)->velocityBC.Vx,
+        //     para->getParD(level)->velocityBC.Vy,
+        //     para->getParD(level)->velocityBC.Vz,
+        //     para->getParD(level)->distributions.f[0],
+        //     para->getParD(level)->velocityBC.k,
+        //     para->getParD(level)->velocityBC.q27[0],
+        //     para->getParD(level)->velocityBC.numberOfBCnodes,
+        //     para->getParD(level)->omega,
+        //     para->getParD(level)->neighborX,
+        //     para->getParD(level)->neighborY,
+        //     para->getParD(level)->neighborZ,
+        //     para->getParD(level)->numberOfNodes,
+        //     para->getParD(level)->isEvenTimestep);
+
+        ////////////////////////////////////////////////////////////////////////////
+        // high viscosity compressible
+        // QVelDevCompHighNu27(
+        //     para->getParD(level)->numberofthreads,
+        //     para->getParD(level)->velocityBC.Vx,
+        //     para->getParD(level)->velocityBC.Vy,
+        //     para->getParD(level)->velocityBC.Vz,
+        //     para->getParD(level)->distributions.f[0],
+        //     para->getParD(level)->velocityBC.k,
+        //     para->getParD(level)->velocityBC.q27[0],
+        //     para->getParD(level)->velocityBC.numberOfBCnodes,
+        //     para->getParD(level)->omega,
+        //     para->getParD(level)->neighborX,
+        //     para->getParD(level)->neighborY,
+        //     para->getParD(level)->neighborZ,
+        //     para->getParD(level)->numberOfNodes,
+        //     para->getParD(level)->isEvenTimestep);
+    }
+}
+
+void BCKernelManager::runVelocityBCKernelPost(const int level) const
+{
+     if (para->getParD(level)->velocityBC.numberOfBCnodes > 0)
+     {
+        velocityBoundaryConditionPost(para->getParD(level).get(), &(para->getParD(level)->velocityBC));
+
+        //////////////////////////////////////////////////////////////////////////
+        // D E P R E C A T E D
+        //////////////////////////////////////////////////////////////////////////
+
+        // QVelDevice1h27( para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
+        //                para->getParD(level)->velocityBC.Vx,      para->getParD(level)->velocityBC.Vy,   para->getParD(level)->velocityBC.Vz,
+        //                para->getParD(level)->distributions.f[0],       para->getParD(level)->velocityBC.k,    para->getParD(level)->velocityBC.q27[0],
+        //                para->getParD(level)->velocityBC.numberOfBCnodes,      para->getParD(level)->omega,
+        //                para->getPhi(),                        para->getAngularVelocity(),
+        //                para->getParD(level)->neighborX,    para->getParD(level)->neighborY, para->getParD(level)->neighborZ,
+        //                para->getParD(level)->coordinateX,       para->getParD(level)->coordinateY,    para->getParD(level)->coordinateZ,
+        //                para->getParD(level)->numberOfNodes,     para->getParD(level)->isEvenTimestep);
+        // getLastCudaError("QVelDev27 execution failed");
+     }
+}
+
+void BCKernelManager::runGeoBCKernelPre(const int level, unsigned int t, CudaMemoryManager* cudaMemoryManager) const{
+    if (para->getParD(level)->geometryBC.numberOfBCnodes > 0){
+        if (para->getCalcDragLift())
+        {
+            //Drag and Lift Part II
+            DragLiftPreD27(
+                para->getParD(level)->distributions.f[0],
+                para->getParD(level)->geometryBC.k,
+                para->getParD(level)->geometryBC.q27[0],
+                para->getParD(level)->geometryBC.numberOfBCnodes,
+                para->getParD(level)->DragPreX,
+                para->getParD(level)->DragPreY,
+                para->getParD(level)->DragPreZ,
+                para->getParD(level)->neighborX,
+                para->getParD(level)->neighborY,
+                para->getParD(level)->neighborZ,
+                para->getParD(level)->numberOfNodes,
+                para->getParD(level)->isEvenTimestep,
+                para->getParD(level)->numberofthreads);
+            ////////////////////////////////////////////////////////////////////////////////
+            //Calculation of Drag and Lift
+            ////////////////////////////////////////////////////////////////////////////////
+            calcDragLift(para.get(), cudaMemoryManager, level);
+            ////////////////////////////////////////////////////////////////////////////////
+        }
+
+        if (para->getCalcCp())
+        {
+            ////////////////////////////////////////////////////////////////////////////////
+            //Calculation of cp
+            ////////////////////////////////////////////////////////////////////////////////
+
+            if(t > para->getTStartOut())
+            {
+                ////////////////////////////////////////////////////////////////////////////////
+                CalcCPtop27(
+                    para->getParD(level)->distributions.f[0],
+                    para->getParD(level)->cpTopIndex,
+                    para->getParD(level)->numberOfPointsCpTop,
+                    para->getParD(level)->cpPressTop,
+                    para->getParD(level)->neighborX,
+                    para->getParD(level)->neighborY,
+                    para->getParD(level)->neighborZ,
+                    para->getParD(level)->numberOfNodes,
+                    para->getParD(level)->isEvenTimestep,
+                    para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                CalcCPbottom27(
+                    para->getParD(level)->distributions.f[0],
+                    para->getParD(level)->cpBottomIndex,
+                    para->getParD(level)->numberOfPointsCpBottom,
+                    para->getParD(level)->cpPressBottom,
+                    para->getParD(level)->neighborX,
+                    para->getParD(level)->neighborY,
+                    para->getParD(level)->neighborZ,
+                    para->getParD(level)->numberOfNodes,
+                    para->getParD(level)->isEvenTimestep,
+                    para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                CalcCPbottom27(
+                    para->getParD(level)->distributions.f[0],
+                    para->getParD(level)->cpBottom2Index,
+                    para->getParD(level)->numberOfPointsCpBottom2,
+                    para->getParD(level)->cpPressBottom2,
+                    para->getParD(level)->neighborX,
+                    para->getParD(level)->neighborY,
+                    para->getParD(level)->neighborZ,
+                    para->getParD(level)->numberOfNodes,
+                    para->getParD(level)->isEvenTimestep,
+                    para->getParD(level)->numberofthreads);
+                //////////////////////////////////////////////////////////////////////////////////
+                calcCp(para.get(), cudaMemoryManager, level);
+            }            
+        }
+
+        ////////////////////////////////////////////////////////////////////////////////
+        // high viscosity incompressible
+        // QDevIncompHighNu27(
+        //     para->getParD(level)->numberofthreads,
+        //     para->getParD(level)->distributions.f[0],
+        //     para->getParD(level)->geometryBC.k,
+        //     para->getParD(level)->geometryBC.q27[0],
+        //     para->getParD(level)->geometryBC.numberOfBCnodes,
+        //     para->getParD(level)->omega,
+        //     para->getParD(level)->neighborX,
+        //     para->getParD(level)->neighborY,
+        //     para->getParD(level)->neighborZ,
+        //     para->getParD(level)->numberOfNodes,
+        //     para->getParD(level)->isEvenTimestep);
+
+        //////////////////////////////////////////////////////////////////////////////////
+        // high viscosity compressible
+        // QDevCompHighNu27(
+        //     para->getParD(level)->numberofthreads,
+        //     para->getParD(level)->distributions.f[0],
+        //     para->getParD(level)->geometryBC.k,
+        //     para->getParD(level)->geometryBC.q27[0],
+        //     para->getParD(level)->geometryBC.numberOfBCnodes,
+        //     para->getParD(level)->omega,
+        //     para->getParD(level)->neighborX,
+        //     para->getParD(level)->neighborY,
+        //     para->getParD(level)->neighborZ,
+        //     para->getParD(level)->numberOfNodes,
+        //     para->getParD(level)->isEvenTimestep);
+
+    }
+}
+
+void BCKernelManager::runGeoBCKernelPost(const int level) const
+{
+    if (para->getParD(level)->geometryBC.numberOfBCnodes > 0)
+    {
+        if (para->getCalcDragLift())
+        {
+            //Drag and Lift Part I
+            DragLiftPostD27(para->getParD(level)->distributions.f[0],
+                            para->getParD(level)->geometryBC.k,
+                            para->getParD(level)->geometryBC.q27[0],
+                            para->getParD(level)->geometryBC.numberOfBCnodes,
+                            para->getParD(level)->DragPostX,
+                            para->getParD(level)->DragPostY,
+                            para->getParD(level)->DragPostZ,
+                            para->getParD(level)->neighborX,
+                            para->getParD(level)->neighborY,
+                            para->getParD(level)->neighborZ,
+                            para->getParD(level)->numberOfNodes,
+                            para->getParD(level)->isEvenTimestep,
+                            para->getParD(level)->numberofthreads);
+            getLastCudaError("DragLift27 execution failed");
+        }
+
+        geometryBoundaryConditionPost(para->getParD(level).get(), &(para->getParD(level)->geometryBC));
+
+        //////////////////////////////////////////////////////////////////////////
+        // D E P R E C A T E D
+        //////////////////////////////////////////////////////////////////////////
+        // the GridGenerator does currently not provide normals!
+
+        //     QSlipGeomDevComp27(
+        //         para->getParD(level)->numberofthreads,
+        //         para->getParD(level)->distributions.f[0],
+        //         para->getParD(level)->geometryBC.k,
+        //         para->getParD(level)->geometryBC.q27[0],
+        //         para->getParD(level)->geometryBC.numberOfBCnodes,
+        //         para->getParD(level)->omega,
+        //         para->getParD(level)->geometryBCnormalX.q27[0],
+        //         para->getParD(level)->geometryBCnormalY.q27[0],
+        //         para->getParD(level)->geometryBCnormalZ.q27[0],
+        //         para->getParD(level)->neighborX,
+        //         para->getParD(level)->neighborY,
+        //         para->getParD(level)->neighborZ,
+        //         para->getParD(level)->numberOfNodes,
+        //         para->getParD(level)->isEvenTimestep);
+
+        //     QSlipNormDevComp27(
+        //         para->getParD(level)->numberofthreads,
+        //         para->getParD(level)->distributions.f[0],
+        //         para->getParD(level)->geometryBC.k,
+        //         para->getParD(level)->geometryBC.q27[0],
+        //         para->getParD(level)->geometryBC.numberOfBCnodes,
+        //         para->getParD(level)->omega,
+        //         para->getParD(level)->geometryBCnormalX.q27[0],
+        //         para->getParD(level)->geometryBCnormalY.q27[0],
+        //         para->getParD(level)->geometryBCnormalZ.q27[0],
+        //         para->getParD(level)->neighborX,
+        //         para->getParD(level)->neighborY,
+        //         para->getParD(level)->neighborZ,
+        //         para->getParD(level)->numberOfNodes,
+        //         para->getParD(level)->isEvenTimestep);
+    }
+}
+
+void BCKernelManager::runOutflowBCKernelPre(const int level) const{
+    if (para->getParD(level)->outflowBC.numberOfBCnodes > 0)
+    {
+        QPressNoRhoDev27(para->getParD(level).get(), &(para->getParD(level)->outflowBC));
+
+        // TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
+        // if (  myid == numprocs - 1)
+        // PressSchlaffer27(
+        //     para->getParD(level)->numberofthreads,
+        //     para->getParD(level)->outflowBC.RhoBC,
+        //     para->getParD(level)->distributions.f[0],
+        //     para->getParD(level)->outflowBC.Vx,
+        //     para->getParD(level)->outflowBC.Vy,
+        //     para->getParD(level)->outflowBC.Vz,
+        //     para->getParD(level)->outflowBC.deltaVz,
+        //     para->getParD(level)->outflowBC.k,
+        //     para->getParD(level)->outflowBC.kN,
+        //     para->getParD(level)->outflowBC.numberOfBCnodes,
+        //     para->getParD(level)->omega,
+        //     para->getParD(level)->neighborX,
+        //     para->getParD(level)->neighborY,
+        //     para->getParD(level)->neighborZ,
+        //     para->getParD(level)->numberOfNodes,
+        //     para->getParD(level)->isEvenTimestep);
+    }
+}
+
+void BCKernelManager::runPressureBCKernelPre(const int level) const{
+    if (para->getParD(level)->pressureBC.numberOfBCnodes > 0)
+    {
+        this->pressureBoundaryConditionPre(para->getParD(level).get(), &(para->getParD(level)->pressureBC));
+    }
+}
+
+void BCKernelManager::runPressureBCKernelPost(const int level) const{
+    if (para->getParD(level)->pressureBC.numberOfBCnodes > 0)
+    {
+        // QPressDev27_IntBB(
+        //     para->getParD(level)->numberofthreads, 
+        //     para->getParD(level)->pressureBC.RhoBC,
+        //     para->getParD(level)->distributions.f[0],
+        //     para->getParD(level)->pressureBC.k,
+        //     para->getParD(level)->pressureBC.q27[0],
+        //     para->getParD(level)->pressureBC.numberOfBCnodes,
+        //     para->getParD(level)->omega,
+        //     para->getParD(level)->neighborX,
+        //     para->getParD(level)->neighborY,
+        //     para->getParD(level)->neighborZ,
+        //     para->getParD(level)->numberOfNodes,
+        //     para->getParD(level)->isEvenTimestep);
+    }
+}
+
+void BCKernelManager::runStressWallModelKernelPost(const int level) const{
+    if (para->getParD(level)->stressBC.numberOfBCnodes > 0)
+    {
+        stressBoundaryConditionPost(para.get(), &(para->getParD(level)->stressBC), level);
+    }
+}
+
+void BCKernelManager::runSlipBCKernelPost(const int level) const{
+    if (para->getParD(level)->slipBC.numberOfBCnodes > 0)
+    {
+        slipBoundaryConditionPost(para->getParD(level).get(), &(para->getParD(level)->slipBC));
+    }
+}
+
+void BCKernelManager::runNoSlipBCKernelPost(const int level) const{
+    if (para->getParD(level)->noSlipBC.numberOfBCnodes > 0)
+    {
+        noSlipBoundaryConditionPost(para->getParD(level).get(), &(para->getParD(level)->noSlipBC));
+    }
+}
+
+// void LBKernelManager::calculateMacroscopicValues(const int level) const
+// {
+//     if (para->getIsADcalculationOn()) {
+//           CalcMacADCompSP27(
+//                para->getParD()->velocityX,
+//                para->getParD()->velocityY,
+//                para->getParD()->velocityZ,
+//                para->getParD()->rho,
+//                para->getParD()->pressure,
+//                para->getParD()->typeOfGridNode,
+//                para->getParD()->neighborX,
+//                para->getParD()->neighborY,
+//                para->getParD()->neighborZ,
+//                para->getParD()->numberOfNodes,
+//                para->getParD()->numberofthreads,
+//                para->getParD()->distributions.f[0],
+//                para->getParD()->distributionsAD.f[0],
+//             para->getParD()->forcing,
+//                para->getParD()->isEvenTimestep);
+//     } else {
+//           CalcMacCompSP27(
+//                para->getParD()->velocityX,
+//                para->getParD()->velocityY,
+//                para->getParD()->velocityZ,
+//                para->getParD()->rho,
+//                para->getParD()->pressure,
+//                para->getParD()->typeOfGridNode,
+//                para->getParD()->neighborX,
+//                para->getParD()->neighborY,
+//                para->getParD()->neighborZ,
+//                para->getParD()->numberOfNodes,
+//                para->getParD()->numberofthreads,
+//                para->getParD()->distributions.f[0],
+//                para->getParD()->isEvenTimestep);
+//      }
+// }
+
+void BCKernelManager::runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager)
+{
+    if(para->getParH(level)->precursorBC.numberOfBCnodes > 0)
+    {
+        uint lastTime = (para->getParD(level)->precursorBC.nPrecursorReads-2)*para->getParD(level)->precursorBC.nTRead; // timestep currently loaded into last arrays
+        uint currentTime = (para->getParD(level)->precursorBC.nPrecursorReads-1)*para->getParD(level)->precursorBC.nTRead; // timestep currently loaded into current arrays
+        uint nextTime = para->getParD(level)->precursorBC.nPrecursorReads*para->getParD(level)->precursorBC.nTRead; // timestep currently loaded into next arrays
+
+        if(t>=currentTime)
+        {
+            //cycle time
+            lastTime = currentTime;
+            currentTime = nextTime;
+            nextTime += para->getParD(level)->precursorBC.nTRead;
+
+            //TODO switch to streams and synch stream here
+            checkCudaErrors(cudaDeviceSynchronize());
+            //cycle pointers
+            real* tmp = para->getParD(level)->precursorBC.vxLast;
+            para->getParD(level)->precursorBC.vxLast = para->getParD(level)->precursorBC.vxCurrent;
+            para->getParD(level)->precursorBC.vxCurrent = para->getParD(level)->precursorBC.vxNext;
+            para->getParD(level)->precursorBC.vxNext = tmp;
+
+
+            tmp = para->getParD(level)->precursorBC.vyLast;
+            para->getParD(level)->precursorBC.vyLast = para->getParD(level)->precursorBC.vyCurrent;
+            para->getParD(level)->precursorBC.vyCurrent = para->getParD(level)->precursorBC.vyNext;
+            para->getParD(level)->precursorBC.vyNext = tmp;
+            
+            tmp = para->getParD(level)->precursorBC.vzLast;
+            para->getParD(level)->precursorBC.vzLast = para->getParD(level)->precursorBC.vzCurrent;
+            para->getParD(level)->precursorBC.vzCurrent = para->getParD(level)->precursorBC.vzNext;
+            para->getParD(level)->precursorBC.vzNext = tmp;
+
+            real loadTime = nextTime*pow(2,-level)*para->getTimeRatio();
+            for(auto reader : para->getParH(level)->velocityReader)
+            {   
+                reader->getNextVelocities(para->getParH(level)->precursorBC.vxNext, para->getParH(level)->precursorBC.vyNext, para->getParH(level)->precursorBC.vzNext, loadTime);
+            }
+
+            cudaMemoryManager->cudaCopyPrecursorVelocities(level);
+            para->getParD(level)->precursorBC.nPrecursorReads++;
+            para->getParH(level)->precursorBC.nPrecursorReads++;  
+        }
+        
+        real tRatio = real(t-lastTime)/para->getParD(level)->precursorBC.nTRead;
+        QPrecursorDevCompZeroPress( para->getParD(level)->numberofthreads, tRatio, para->getParD(level)->distributions.f[0], para->getParD(level)->precursorBC.q27[0],
+                                    para->getParD(level)->precursorBC.k, para->getParD(level)->precursorBC.sizeQ, para->getParD(level)->precursorBC.numberOfBCnodes, 
+                                    para->getParD(level)->omega, para->getVelocityRatio(),
+                                    para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ,
+                                    para->getParD(level)->precursorBC.planeNeighborNT, para->getParD(level)->precursorBC.planeNeighborNB, para->getParD(level)->precursorBC.planeNeighborST, para->getParD(level)->precursorBC.planeNeighborSB, 
+                                    para->getParD(level)->precursorBC.weightsNT, para->getParD(level)->precursorBC.weightsNB, para->getParD(level)->precursorBC.weightsST, para->getParD(level)->precursorBC.weightsSB, 
+                                    para->getParD(level)->precursorBC.vxLast, para->getParD(level)->precursorBC.vyLast, para->getParD(level)->precursorBC.vzLast, 
+                                    para->getParD(level)->precursorBC.vxCurrent, para->getParD(level)->precursorBC.vyCurrent, para->getParD(level)->precursorBC.vzCurrent, 
+                                    para->getParD(level)->precursorBC.velocityX, para->getParD(level)->precursorBC.velocityY, para->getParD(level)->precursorBC.velocityZ,
+                                    para->getParD(level)->numberOfNodes, para->getParD(level)->isEvenTimestep);
+        getLastCudaError("QPrecursorDevCompZeroPress execution failed");
+    }
+}
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
similarity index 52%
rename from src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h
rename to src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
index d34f3dd3c7b9d88fe26935d21fd35989500b85ea..1aa85fac3cc30ec68cca9b0627d2190b716eedcd 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.h
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h
@@ -33,73 +33,76 @@
 #ifndef LBKernelManager_H
 #define LBKernelManager_H
 
+#include <functional>
 #include <memory>
+
 #include "PointerDefinitions.h"
 #include "VirtualFluids_GPU_export.h"
+#include "LBM/LB.h"
 
-//! \brief Class forwarding for Parameter
-class Parameter;
 class CudaMemoryManager;
+class BoundaryConditionFactory;
+class Parameter;
+struct LBMSimulationParameter;
+
+using boundaryCondition = std::function<void(LBMSimulationParameter *, QforBoundaryConditions *)>;
+using boundaryConditionPara = std::function<void(Parameter *, QforBoundaryConditions *, const int level)>;
 
 //! \class LBKernelManager
 //! \brief manage the cuda kernel calls
-class VIRTUALFLUIDS_GPU_EXPORT LBKernelManager
+class VIRTUALFLUIDS_GPU_EXPORT BCKernelManager
 {
 public:
-	//! \brief makes an object of LBKernelManager
-	//! \param para shared pointer to instance of class Parameter
-    static SPtr<LBKernelManager> make(std::shared_ptr<Parameter> parameter);
-    
-	//! \brief calls the device function of the lattice Boltzmann kernel
-	void runLBMKernel(int level);
+    //! Class constructor
+    //! \param parameter shared pointer to instance of class Parameter
+    BCKernelManager(SPtr<Parameter> parameter, BoundaryConditionFactory *bcFactory);
 
-	//! \brief calls the device function of the velocity boundary condition (post-collision)
-    void runVelocityBCKernelPost(int level);
+    void setBoundaryConditionKernels();
 
-	//! \brief calls the device function of the velocity boundary condition (pre-collision)
-    void runVelocityBCKernelPre(int level);
+    //! \brief calls the device function of the velocity boundary condition (post-collision)
+    void runVelocityBCKernelPost(const int level) const;
 
-	//! \brief calls the device function of the geometry boundary condition (post-collision)
-	void runGeoBCKernelPost(int level);
+    //! \brief calls the device function of the velocity boundary condition (pre-collision)
+    void runVelocityBCKernelPre(const int level) const;
 
-	//! \brief calls the device function of the geometry boundary condition (pre-collision)
-	void runGeoBCKernelPre(int level, unsigned int t,  CudaMemoryManager* cudaMemoryManager);
+    //! \brief calls the device function of the geometry boundary condition (post-collision)
+    void runGeoBCKernelPost(const int level) const;
 
-	//! \brief calls the device function of the slip boundary condition
-	void runSlipBCKernel(int level);
+    //! \brief calls the device function of the geometry boundary condition (pre-collision)
+    void runGeoBCKernelPre(const int level, unsigned int t, CudaMemoryManager *cudaMemoryManager) const;
 
-	//! \brief calls the device function of the no-slip boundary condition
-	void runNoSlipBCKernel(int level);
+    //! \brief calls the device function of the slip boundary condition
+    void runSlipBCKernelPost(const int level) const;
 
-	//! \brief calls the device function of the pressure boundary condition (pre-collision)
-	void runPressureBCKernelPre(int level);
+    //! \brief calls the device function of the no-slip boundary condition
+    void runNoSlipBCKernelPost(const int level) const;
 
-	//! \brief calls the device function of the pressure boundary condition (post-collision)
-	void runPressureBCKernelPost(int level);
+    //! \brief calls the device function of the pressure boundary condition (pre-collision)
+    void runPressureBCKernelPre(const int level) const;
 
-	//! \brief calls the device function of the outflow boundary condition
-	void runOutflowBCKernelPre(int level);
+    //! \brief calls the device function of the pressure boundary condition (post-collision)
+    void runPressureBCKernelPost(const int level) const;
 
 	//! \brief calls the device function of the precursor boundary condition
 	void runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager);
 
-	//! \brief calls the device function of the stress wall model
-	void runStressWallModelKernel(int level);
+    //! \brief calls the device function of the outflow boundary condition
+    void runOutflowBCKernelPre(const int level) const;
 
-    //! \brief calls the device function that calculates the macroscopic values
-    void calculateMacroscopicValues(int level);
+    //! \brief calls the device function of the stress wall model
+    void runStressWallModelKernelPost(const int level) const;
 
+    //! \brief calls the device function that calculates the macroscopic values
+    void calculateMacroscopicValues(const int level) const;
 
 private:
-	//! Class constructor
-	//! \param parameter shared pointer to instance of class Parameter
-	LBKernelManager(SPtr<Parameter> parameter);
-	//! Class copy constructor
-	//! \param LBKernelManager is a reference to LBKernelManager object
-	LBKernelManager(const LBKernelManager&);
-
-	//! \property para is a shared pointer to an object of Parameter
-	SPtr<Parameter> para;
-
+    SPtr<Parameter> para;
+
+    boundaryCondition velocityBoundaryConditionPost;
+    boundaryCondition noSlipBoundaryConditionPost;
+    boundaryCondition slipBoundaryConditionPost;
+    boundaryCondition pressureBoundaryConditionPre;
+    boundaryCondition geometryBoundaryConditionPost;
+    boundaryConditionPara stressBoundaryConditionPost;
 };
 #endif
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp
index 937808b8e4334899cdd948b502c8740ba86dbca3..99c200ae9ebf128c1609059a43e5998612e3527e 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp
@@ -35,16 +35,11 @@
 #include "GPU/GPU_Interface.h"
 #include "Parameter/Parameter.h"
 #include "Parameter/CudaStreamManager.h"
-
-SPtr<GridScalingKernelManager> GridScalingKernelManager::make(SPtr<Parameter> parameter){
-    return SPtr<GridScalingKernelManager>(new GridScalingKernelManager(parameter));
-}
+#include "PreCollisionInteractor/PreCollisionInteractor.h"
 
 GridScalingKernelManager::GridScalingKernelManager(SPtr<Parameter> parameter): para(parameter){}
 
-GridScalingKernelManager::GridScalingKernelManager(const GridScalingKernelManager&){}
-
-void GridScalingKernelManager::runFineToCoarseKernelLB(int level, uint *iCellFCC, uint *iCellFCF, uint k_FC, int streamIndex){
+void GridScalingKernelManager::runFineToCoarseKernelLB(const int level, uint *iCellFCC, uint *iCellFCF, uint k_FC, int streamIndex) const{
 
     cudaStream_t stream = (streamIndex == -1) ? CU_STREAM_LEGACY : para->getStreamManager()->getStream(streamIndex);
 
@@ -263,7 +258,7 @@ void GridScalingKernelManager::runFineToCoarseKernelLB(int level, uint *iCellFCC
     //getLastCudaError("ScaleFC27 execution failed");
 }
 
-void GridScalingKernelManager::runFineToCoarseKernelAD(int level)
+void GridScalingKernelManager::runFineToCoarseKernelAD(const int level) const
 {
     //A D V E C T I O N    D I F F U S I O N
 
@@ -337,7 +332,7 @@ void GridScalingKernelManager::runFineToCoarseKernelAD(int level)
     }
 }
 
-void GridScalingKernelManager::runCoarseToFineKernelLB(int level, uint *iCellCFC, uint *iCellCFF, uint k_CF, OffCF &offCF, int streamIndex)
+void GridScalingKernelManager::runCoarseToFineKernelLB(const int level, uint *iCellCFC, uint *iCellCFF, uint k_CF, OffCF &offCF, int streamIndex) const
 {
     cudaStream_t stream = (streamIndex == -1) ? CU_STREAM_LEGACY : para->getStreamManager()->getStream(streamIndex);
 
@@ -556,7 +551,7 @@ void GridScalingKernelManager::runCoarseToFineKernelLB(int level, uint *iCellCFC
     //getLastCudaError("ScaleCF27 execution failed");
 }
 
-void GridScalingKernelManager::runCoarseToFineKernelAD(int level)
+void GridScalingKernelManager::runCoarseToFineKernelAD(const int level) const
 {
     // A D V E C T I O N    D I F F U S I O N
 
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h
index 9e54682e8da8f5feef7c31b901bc113974773eee..a0f8e15ed3e1c86bda2496cd0a0819a180bba968 100644
--- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h
+++ b/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h
@@ -33,12 +33,11 @@
 #ifndef GridScalingKernelManager_H
 #define GridScalingKernelManager_H
 
-#include <memory>
+#include "LBM/LB.h"
 #include "PointerDefinitions.h"
 #include "VirtualFluids_GPU_export.h"
-#include "LBM/LB.h"
+#include <memory>
 
-//! \brief Class forwarding for Parameter
 class Parameter;
 class CudaMemoryManager;
 
@@ -47,32 +46,22 @@ class CudaMemoryManager;
 class VIRTUALFLUIDS_GPU_EXPORT GridScalingKernelManager
 {
 public:
-	//! \brief makes an object of GridScalingKernelManager
-	//! \param para shared pointer to instance of class Parameter
-    static SPtr<GridScalingKernelManager> make(std::shared_ptr<Parameter> parameter);
-    
-	//! \brief calls the device function of the fine to coarse grid interpolation kernel
-	void runFineToCoarseKernelLB(int level, uint *iCellFCC, uint *iCellFCF, uint k_FC, int streamIndex);
+    GridScalingKernelManager(SPtr<Parameter> parameter);
 
-	//! \brief calls the device function of the fine to coarse grid interpolation kernel (advection diffusion)
-    void runFineToCoarseKernelAD(int level);
+    //! \brief calls the device function of the fine to coarse grid interpolation kernel
+    void runFineToCoarseKernelLB(const int level, uint *iCellFCC, uint *iCellFCF, uint k_FC, int streamIndex) const;
 
-	//! \brief calls the device function of the coarse to fine grid interpolation kernel
-	void runCoarseToFineKernelLB(int level, uint *iCellCFC, uint *iCellCFF, uint k_CF, OffCF &offCF, int streamIndex);
+    //! \brief calls the device function of the fine to coarse grid interpolation kernel (advection diffusion)
+    void runFineToCoarseKernelAD(const int level) const;
 
-	//! \brief calls the device function of the coarse to fine grid interpolation kernel (advection diffusion)
-    void runCoarseToFineKernelAD(int level);
+    //! \brief calls the device function of the coarse to fine grid interpolation kernel
+    void runCoarseToFineKernelLB(const int level, uint *iCellCFC, uint *iCellCFF, uint k_CF, OffCF &offCF,
+                                 int streamIndex) const;
 
-private:
-	//! Class constructor
-	//! \param parameter shared pointer to instance of class Parameter
-	GridScalingKernelManager(SPtr<Parameter> parameter);
-	//! Class copy constructor
-	//! \param GridScalingKernelManager is a reference to GridScalingKernelManager object
-	GridScalingKernelManager(const GridScalingKernelManager&);
-
-	//! \property para is a shared pointer to an object of Parameter
-	SPtr<Parameter> para;
+    //! \brief calls the device function of the coarse to fine grid interpolation kernel (advection diffusion)
+    void runCoarseToFineKernelAD(const int level) const;
 
+private:
+    SPtr<Parameter> para;
 };
 #endif
diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp b/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp
deleted file mode 100644
index bcf30f3ccf377f3a7f26b670a6c2f7a49664fd6a..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/KernelManager/LBKernelManager.cpp
+++ /dev/null
@@ -1,934 +0,0 @@
-//=======================================================================================
-// ____          ____    __    ______     __________   __      __       __        __
-// \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
-//  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
-//   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
-//    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
-//     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
-//      \    \  |    |   ________________________________________________________________
-//       \    \ |    |  |  ______________________________________________________________|
-//        \    \|    |  |  |         __          __     __     __     ______      _______
-//         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
-//          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
-//           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
-//            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/
-//
-//  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 LBKernelManager.cpp
-//! \ingroup KernelManager
-//! \author Martin Schoenherr
-//=======================================================================================
-#include <cuda_runtime.h>
-#include <helper_cuda.h>
-
-#include "LBKernelManager.h"
-#include "GPU/GPU_Interface.h"
-#include "Parameter/Parameter.h"
-#include "Calculation/DragLift.h"
-#include "Calculation/Cp.h"
-#include "PreCollisionInteractor/VelocitySetter.h"
-
-
-
-void LBKernelManager::runLBMKernel(int level)
-{
-    // if (para->getIsADcalculationOn()) {
-    //       CumulantK17LBMDeviceKernelAD(
-    //            para->getParD()->numberofthreads,
-    //            para->getParD()->omega,
-    //            para->getParD()->typeOfGridNode,
-    //            para->getParD()->neighborX,
-    //            para->getParD()->neighborY,
-    //            para->getParD()->neighborZ,
-    //            para->getParD()->distributions.f[0],
-    //            para->getParD()->distributionsAD.f[0],
-    //            para->getParD()->numberOfNodes,
-    //            para->getParD()->forcing,
-    //            para->getParD()->isEvenTimestep);
-    // } else {
-    //       CumulantK17LBMDeviceKernel(
-    //            para->getParD()->numberofthreads,
-    //            para->getParD()->omega,
-    //            para->getParD()->typeOfGridNode,
-    //            para->getParD()->neighborX,
-    //            para->getParD()->neighborY,
-    //            para->getParD()->neighborZ,
-    //            para->getParD()->distributions.f[0],
-    //            para->getParD()->numberOfNodes,
-    //            para->getParD()->forcing,
-    //            para->getParD()->isEvenTimestep);
-    //  }
-}
-
-void LBKernelManager::runVelocityBCKernelPre(int level)
-{
-    if (para->getParD(level)->numberOfVeloBCnodes > 0)
-    {
-        // TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
-        // if ( myid == 0)
-        // {
-        //    VelSchlaffer27(para->getParD(level)->numberofthreads, t,
-        //                   para->getParD(level)->distributions.f[0],       para->getParD(level)->velocityBC.Vz,
-        //                   para->getParD(level)->velocityBC.deltaVz, para->getParD(level)->velocityBC.k,
-        //                   para->getParD(level)->velocityBC.kN,      para->getParD(level)->numberOfVeloBCnodes,
-        //                   para->getParD(level)->omega,           para->getParD(level)->neighborX,
-        //                   para->getParD(level)->neighborY,    para->getParD(level)->neighborZ,
-        //                   para->getParD(level)->numberOfNodes,     para->getParD(level)->isEvenTimestep);
-        //    getLastCudaError("VelSchlaffer27 execution failed");
-        // }
-        ////////////////////////////////////////////////////////////////////////////
-        // high viscosity incompressible
-        // QVelDevIncompHighNu27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->velocityBC.Vx,
-        //     para->getParD(level)->velocityBC.Vy,
-        //     para->getParD(level)->velocityBC.Vz,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->velocityBC.k,
-        //     para->getParD(level)->velocityBC.q27[0],
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-
-        ////////////////////////////////////////////////////////////////////////////
-        // high viscosity compressible
-        // QVelDevCompHighNu27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->velocityBC.Vx,
-        //     para->getParD(level)->velocityBC.Vy,
-        //     para->getParD(level)->velocityBC.Vz,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->velocityBC.k,
-        //     para->getParD(level)->velocityBC.q27[0],
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runVelocityBCKernelPost(int level)
-{
-     if (para->getParD(level)->numberOfVeloBCnodes > 0)
-     {
-        //   QVelDevicePlainBB27(
-        //     para->getParD()->numberofthreads,
-        //     para->getParD()->velocityBC.Vx,
-        //     para->getParD()->velocityBC.Vy,
-        //     para->getParD()->velocityBC.Vz,
-        //     para->getParD()->distributions.f[0],
-        //     para->getParD()->velocityBC.k,
-        //     para->getParD()->velocityBC.q27[0],
-        //     para->getParD()->numberOfVeloBCnodes,
-        //     para->getParD()->velocityBC.kArray,
-        //     para->getParD()->neighborX,
-        //     para->getParD()->neighborY,
-        //     para->getParD()->neighborZ,
-        //     para->getParD()->numberOfNodes,
-        //     para->getParD()->isEvenTimestep);
-
-        // QVelDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->velocityBC.Vx,
-        //     para->getParD(level)->velocityBC.Vy,
-        //     para->getParD(level)->velocityBC.Vz,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->velocityBC.k,
-        //     para->getParD(level)->velocityBC.q27[0],
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // QVelDevComp27(
-        //     para->getParD(level)->numberofthreads, para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->velocityBC.Vx,
-        //     para->getParD(level)->velocityBC.Vy,
-        //     para->getParD(level)->velocityBC.Vz,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->velocityBC.k,
-        //     para->getParD(level)->velocityBC.q27[0],
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->numberOfVeloBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        QVelDevCompZeroPress27(
-            para->getParD(level)->numberofthreads,
-            para->getParD(level)->nx,
-            para->getParD(level)->ny,
-            para->getParD(level)->velocityBC.Vx,
-            para->getParD(level)->velocityBC.Vy,
-            para->getParD(level)->velocityBC.Vz,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->velocityBC.k,
-            para->getParD(level)->velocityBC.q27[0],
-            para->getParD(level)->numberOfVeloBCnodes,
-            para->getParD(level)->velocityBC.kArray,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-
-        //////////////////////////////////////////////////////////////////////////
-        // D E P R E C A T E D
-        //////////////////////////////////////////////////////////////////////////
-
-        //QVelDevice1h27( para->getParD(level)->numberofthreads, para->getParD(level)->nx,           para->getParD(level)->ny,
-        //                para->getParD(level)->velocityBC.Vx,      para->getParD(level)->velocityBC.Vy,   para->getParD(level)->velocityBC.Vz,
-        //                para->getParD(level)->distributions.f[0],       para->getParD(level)->velocityBC.k,    para->getParD(level)->velocityBC.q27[0],
-        //                para->getParD(level)->numberOfVeloBCnodes,        para->getParD(level)->numberOfVeloBCnodes,     para->getParD(level)->omega,
-        //                para->getPhi(),                        para->getAngularVelocity(),
-        //                para->getParD(level)->neighborX,    para->getParD(level)->neighborY, para->getParD(level)->neighborZ,
-        //                para->getParD(level)->coordinateX,       para->getParD(level)->coordinateY,    para->getParD(level)->coordinateZ,
-        //                para->getParD(level)->size_Mat_SP,     para->getParD(level)->isEvenTimestep);
-        //getLastCudaError("QVelDev27 execution failed");
-     }
-}
-
-void LBKernelManager::runGeoBCKernelPre(int level, unsigned int t, CudaMemoryManager* cudaMemoryManager){
-    if (para->getParD(level)->geometryBC.numberOfBCnodes > 0){
-        if (para->getCalcDragLift())
-        {
-            //Drag and Lift Part II
-            DragLiftPreD27(
-                para->getParD(level)->distributions.f[0],
-                para->getParD(level)->geometryBC.k,
-                para->getParD(level)->geometryBC.q27[0],
-                para->getParD(level)->geometryBC.numberOfBCnodes,
-                para->getParD(level)->DragPreX,
-                para->getParD(level)->DragPreY,
-                para->getParD(level)->DragPreZ,
-                para->getParD(level)->neighborX,
-                para->getParD(level)->neighborY,
-                para->getParD(level)->neighborZ,
-                para->getParD(level)->numberOfNodes,
-                para->getParD(level)->isEvenTimestep,
-                para->getParD(level)->numberofthreads);
-            ////////////////////////////////////////////////////////////////////////////////
-            //Calculation of Drag and Lift
-            ////////////////////////////////////////////////////////////////////////////////
-            calcDragLift(para.get(), cudaMemoryManager, level);
-            ////////////////////////////////////////////////////////////////////////////////
-        }
-
-        if (para->getCalcCp())
-        {
-            ////////////////////////////////////////////////////////////////////////////////
-            //Calculation of cp
-            ////////////////////////////////////////////////////////////////////////////////
-
-            if(t > para->getTStartOut())
-            {
-                ////////////////////////////////////////////////////////////////////////////////
-                CalcCPtop27(
-                    para->getParD(level)->distributions.f[0],
-                    para->getParD(level)->cpTopIndex,
-                    para->getParD(level)->numberOfPointsCpTop,
-                    para->getParD(level)->cpPressTop,
-                    para->getParD(level)->neighborX,
-                    para->getParD(level)->neighborY,
-                    para->getParD(level)->neighborZ,
-                    para->getParD(level)->numberOfNodes,
-                    para->getParD(level)->isEvenTimestep,
-                    para->getParD(level)->numberofthreads);
-                //////////////////////////////////////////////////////////////////////////////////
-                CalcCPbottom27(
-                    para->getParD(level)->distributions.f[0],
-                    para->getParD(level)->cpBottomIndex,
-                    para->getParD(level)->numberOfPointsCpBottom,
-                    para->getParD(level)->cpPressBottom,
-                    para->getParD(level)->neighborX,
-                    para->getParD(level)->neighborY,
-                    para->getParD(level)->neighborZ,
-                    para->getParD(level)->numberOfNodes,
-                    para->getParD(level)->isEvenTimestep,
-                    para->getParD(level)->numberofthreads);
-                //////////////////////////////////////////////////////////////////////////////////
-                CalcCPbottom27(
-                    para->getParD(level)->distributions.f[0],
-                    para->getParD(level)->cpBottom2Index,
-                    para->getParD(level)->numberOfPointsCpBottom2,
-                    para->getParD(level)->cpPressBottom2,
-                    para->getParD(level)->neighborX,
-                    para->getParD(level)->neighborY,
-                    para->getParD(level)->neighborZ,
-                    para->getParD(level)->numberOfNodes,
-                    para->getParD(level)->isEvenTimestep,
-                    para->getParD(level)->numberofthreads);
-                //////////////////////////////////////////////////////////////////////////////////
-                calcCp(para.get(), cudaMemoryManager, level);
-            }            
-        }
-
-        ////////////////////////////////////////////////////////////////////////////////
-        // high viscosity incompressible
-        // QDevIncompHighNu27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->geometryBC.k,
-        //     para->getParD(level)->geometryBC.q27[0],
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-
-        //////////////////////////////////////////////////////////////////////////////////
-        // high viscosity compressible
-        // QDevCompHighNu27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->geometryBC.k,
-        //     para->getParD(level)->geometryBC.q27[0],
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-
-    }
-}
-
-void LBKernelManager::runGeoBCKernelPost(int level)
-{
-    if (para->getParD(level)->geometryBC.numberOfBCnodes > 0)
-    {
-        if (para->getCalcDragLift())
-        {
-            //Drag and Lift Part I
-            DragLiftPostD27(para->getParD(level)->distributions.f[0],
-                            para->getParD(level)->geometryBC.k,
-                            para->getParD(level)->geometryBC.q27[0],
-                            para->getParD(level)->geometryBC.numberOfBCnodes,
-                            para->getParD(level)->DragPostX,
-                            para->getParD(level)->DragPostY,
-                            para->getParD(level)->DragPostZ,
-                            para->getParD(level)->neighborX,
-                            para->getParD(level)->neighborY,
-                            para->getParD(level)->neighborZ,
-                            para->getParD(level)->numberOfNodes,
-                            para->getParD(level)->isEvenTimestep,
-                            para->getParD(level)->numberofthreads);
-            getLastCudaError("DragLift27 execution failed");
-        }
-
-        // BBDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->geometryBC.k,
-        //     para->getParD(level)->geometryBC.q27[0],
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // QDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->geometryBC.k,
-        //     para->getParD(level)->geometryBC.q27[0],
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // QVelDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->geometryBC.Vx,
-        //     para->getParD(level)->geometryBC.Vy,
-        //     para->getParD(level)->geometryBC.Vz,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->geometryBC.k,
-        //     para->getParD(level)->geometryBC.q27[0],
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // QDevComp27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->geometryBC.k,
-        //     para->getParD(level)->geometryBC.q27[0],
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->geometryBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        QVelDevComp27(
-            para->getParD(level)->numberofthreads,
-            para->getParD(level)->nx,
-            para->getParD(level)->ny,
-            para->getParD(level)->geometryBC.Vx,
-            para->getParD(level)->geometryBC.Vy,
-            para->getParD(level)->geometryBC.Vz,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->geometryBC.k,
-            para->getParD(level)->geometryBC.q27[0],
-            para->getParD(level)->geometryBC.numberOfBCnodes,
-            para->getParD(level)->geometryBC.numberOfBCnodes,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-
-    //     QVelDevCompZeroPress27(
-    //         para->getParD(0)->numberofthreads, para->getParD(0)->nx,
-    //         para->getParD(0)->ny,
-    //         para->getParD(0)->geometryBC.Vx,
-    //         para->getParD(0)->geometryBC.Vy,
-    //         para->getParD(0)->geometryBC.Vz,
-    //         para->getParD(0)->distributions.f[0],
-    //         para->getParD(0)->geometryBC.k,
-    //         para->getParD(0)->geometryBC.q27[0],
-    //         para->getParD(0)->geometryBC.numberOfBCnodes,
-    //         para->getParD(0)->geometryBC.numberOfBCnodes,
-    //         para->getParD(0)->omega,
-    //         para->getParD(0)->neighborX,
-    //         para->getParD(0)->neighborY,
-    //         para->getParD(0)->neighborZ,
-    //         para->getParD(0)->size_Mat_SP,
-    //         para->getParD(0)->isEvenTimestep);
-
-    //     QDev3rdMomentsComp27(
-    //         para->getParD(level)->numberofthreads,
-    //         para->getParD(level)->nx,
-    //         para->getParD(level)->ny,
-    //         para->getParD(level)->distributions.f[0],
-    //         para->getParD(level)->geometryBC.k,
-    //         para->getParD(level)->geometryBC.q27[0],
-    //         para->getParD(level)->geometryBC.numberOfBCnodes,
-    //         para->getParD(level)->geometryBC.numberOfBCnodes,
-    //         para->getParD(level)->omega,
-    //         para->getParD(level)->neighborX,
-    //         para->getParD(level)->neighborY,
-    //         para->getParD(level)->neighborZ,
-    //         para->getParD(level)->size_Mat_SP,
-    //         para->getParD(level)->isEvenTimestep);
-
-    //     QSlipDev27(
-    //         para->getParD(level)->numberofthreads,
-    //         para->getParD(level)->distributions.f[0],
-    //         para->getParD(level)->geometryBC.k,
-    //         para->getParD(level)->geometryBC.q27[0],
-    //         para->getParD(level)->geometryBC.numberOfBCnodes,
-    //         para->getParD(level)->omega,
-    //         para->getParD(level)->neighborX,
-    //         para->getParD(level)->neighborY,
-    //         para->getParD(level)->neighborZ,
-    //         para->getParD(level)->size_Mat_SP,
-    //         para->getParD(level)->isEvenTimestep);
-
-    //////////////////////////////////////////////////////////////////////////
-    // D E P R E C A T E D
-    //////////////////////////////////////////////////////////////////////////
-    // the GridGenerator does currently not provide normals!
-
-    //     QSlipGeomDevComp27(
-    //         para->getParD(level)->numberofthreads,
-    //         para->getParD(level)->distributions.f[0],
-    //         para->getParD(level)->geometryBC.k,
-    //         para->getParD(level)->geometryBC.q27[0],
-    //         para->getParD(level)->geometryBC.numberOfBCnodes,
-    //         para->getParD(level)->omega,
-    //         para->getParD(level)->geometryBCnormalX.q27[0],
-    //         para->getParD(level)->geometryBCnormalY.q27[0],
-    //         para->getParD(level)->geometryBCnormalZ.q27[0],
-    //         para->getParD(level)->neighborX,
-    //         para->getParD(level)->neighborY,
-    //         para->getParD(level)->neighborZ,
-    //         para->getParD(level)->size_Mat_SP,
-    //         para->getParD(level)->isEvenTimestep);
-
-    //     QSlipNormDevComp27(
-    //         para->getParD(level)->numberofthreads,
-    //         para->getParD(level)->distributions.f[0],
-    //         para->getParD(level)->geometryBC.k,
-    //         para->getParD(level)->geometryBC.q27[0],
-    //         para->getParD(level)->geometryBC.numberOfBCnodes,
-    //         para->getParD(level)->omega,
-    //         para->getParD(level)->geometryBCnormalX.q27[0],
-    //         para->getParD(level)->geometryBCnormalY.q27[0],
-    //         para->getParD(level)->geometryBCnormalZ.q27[0],
-    //         para->getParD(level)->neighborX,
-    //         para->getParD(level)->neighborY,
-    //         para->getParD(level)->neighborZ,
-    //         para->getParD(level)->size_Mat_SP,
-    //         para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runOutflowBCKernelPre(int level){
-    if (para->getParD(level)->numberOfOutflowBCnodes > 0)
-    {
-        QPressNoRhoDev27(
-            para->getParD(level)->numberofthreads,
-            para->getParD(level)->outflowBC.RhoBC,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->outflowBC.k,
-            para->getParD(level)->outflowBC.kN,
-            para->getParD(level)->outflowBC.numberOfBCnodes,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-
-        // TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29
-        // if (  myid == numprocs - 1)
-        // PressSchlaffer27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->outflowBC.RhoBC,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->outflowBC.Vx,
-        //     para->getParD(level)->outflowBC.Vy,
-        //     para->getParD(level)->outflowBC.Vz,
-        //     para->getParD(level)->outflowBC.deltaVz,
-        //     para->getParD(level)->outflowBC.k,
-        //     para->getParD(level)->outflowBC.kN,
-        //     para->getParD(level)->numberOfOutflowBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runPressureBCKernelPre(int level){
-    if (para->getParD(level)->pressureBC.numberOfBCnodes > 0)
-    {
-        QPressNoRhoDev27(
-            para->getParD(level)->numberofthreads,
-            para->getParD(level)->pressureBC.RhoBC,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->pressureBC.k,
-            para->getParD(level)->pressureBC.kN,
-            para->getParD(level)->pressureBC.numberOfBCnodes,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-
-        // QPressDevEQZ27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->pressureBC.RhoBC,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->pressureBC.k,
-        //     para->getParD(level)->pressureBC.kN,
-        //     para->getParD(level)->kDistTestRE.f[0],
-        //     para->getParD(level)->pressureBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(0)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // QInflowScaleByPressDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->pressureBC.RhoBC,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->pressureBC.k,
-        //     para->getParD(level)->pressureBC.kN,
-        //     para->getParD(level)->pressureBC.numberOfBCnodes,
-        //     para->getParD(0)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(0)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-
-        ////////////////////////////////////////////////////////////////////////////////
-        //press NEQ incompressible
-        // QPressDevIncompNEQ27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->pressureBC.RhoBC,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->pressureBC.k,
-        //     para->getParD(level)->pressureBC.kN,
-        //     para->getParD(level)->pressureBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-
-        //////////////////////////////////////////////////////////////////////////////////
-        //press NEQ compressible
-        // QPressDevNEQ27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->pressureBC.RhoBC,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->pressureBC.k,
-        //     para->getParD(level)->pressureBC.kN,
-        //     para->getParD(level)->pressureBC.numberOfBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->numberOfNodes,
-        //     para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runPressureBCKernelPost(int level){
-    if (para->getParD(level)->numberOfPressureBCnodes > 0)
-    {
-        QPressDev27_IntBB(
-            para->getParD(level)->numberofthreads, 
-            para->getParD(level)->pressureBC.RhoBC,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->pressureBC.k,
-            para->getParD(level)->pressureBC.q27[0],
-            para->getParD(level)->pressureBC.numberOfBCnodes,
-            para->getParD(level)->pressureBC.numberOfBCnodes,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runStressWallModelKernel(int level){
-    if (para->getParD(level)->numberOfStressBCnodes > 0)
-    {
-        // QStressDevComp27(para->getParD(level)->numberofthreads, para->getParD(level)->distributions.f[0],
-        //                 para->getParD(level)->stressBC.k,       para->getParD(level)->stressBC.kN,
-        //                 para->getParD(level)->stressBC.q27[0],  para->getParD(level)->numberOfStressBCnodes,
-        //                 para->getParD(level)->omega,           para->getParD(level)->turbViscosity,
-        //                 para->getParD(level)->velocityX,           para->getParD(level)->velocityY,             para->getParD(level)->velocityY,
-        //                 para->getParD(level)->stressBC.normalX, para->getParD(level)->stressBC.normalY,   para->getParD(level)->stressBC.normalZ,
-        //                 para->getParD(level)->stressBC.Vx,      para->getParD(level)->stressBC.Vy,        para->getParD(level)->stressBC.Vz,
-        //                 para->getParD(level)->stressBC.Vx1,     para->getParD(level)->stressBC.Vy1,       para->getParD(level)->stressBC.Vz1,
-        //                 para->getParD(level)->wallModel.samplingOffset, para->getParD(level)->wallModel.z0,
-        //                 para->getHasWallModelMonitor(),        para->getParD(level)->wallModel.u_star,
-        //                 para->getParD(level)->wallModel.Fx,    para->getParD(level)->wallModel.Fy,      para->getParD(level)->wallModel.Fz,
-        //                 para->getParD(level)->neighborX,    para->getParD(level)->neighborY,      para->getParD(level)->neighborZ,
-        //                 para->getParD(level)->size_Mat_SP,     para->getParD(level)->isEvenTimestep);
-
-        BBStressDev27( para->getParD(level)->numberofthreads, para->getParD(level)->distributions.f[0],
-                        para->getParD(level)->stressBC.k,       para->getParD(level)->stressBC.kN,
-                        para->getParD(level)->stressBC.q27[0],  para->getParD(level)->numberOfStressBCnodes,
-                        para->getParD(level)->velocityX,           para->getParD(level)->velocityY,             para->getParD(level)->velocityY,
-                        para->getParD(level)->stressBC.normalX, para->getParD(level)->stressBC.normalY,   para->getParD(level)->stressBC.normalZ,
-                        para->getParD(level)->stressBC.Vx,      para->getParD(level)->stressBC.Vy,        para->getParD(level)->stressBC.Vz,
-                        para->getParD(level)->stressBC.Vx1,     para->getParD(level)->stressBC.Vy1,       para->getParD(level)->stressBC.Vz1,
-                        para->getParD(level)->wallModel.samplingOffset, para->getParD(level)->wallModel.z0,
-                        para->getHasWallModelMonitor(),        para->getParD(level)->wallModel.u_star,
-                        para->getParD(level)->wallModel.Fx,    para->getParD(level)->wallModel.Fy,      para->getParD(level)->wallModel.Fz,
-                        para->getParD(level)->neighborX,    para->getParD(level)->neighborY,      para->getParD(level)->neighborZ,
-                        para->getParD(level)->numberOfNodes,     para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager)
-{
-    if(para->getParH(level)->numberOfPrecursorBCnodes > 0)
-    {
-        uint lastTime = (para->getParD(level)->precursorBC.nPrecursorReads-2)*para->getParD(level)->precursorBC.nTRead; // timestep currently loaded into last arrays
-        uint currentTime = (para->getParD(level)->precursorBC.nPrecursorReads-1)*para->getParD(level)->precursorBC.nTRead; // timestep currently loaded into current arrays
-        uint nextTime = para->getParD(level)->precursorBC.nPrecursorReads*para->getParD(level)->precursorBC.nTRead; // timestep currently loaded into next arrays
-
-        if(t>=currentTime)
-        {
-            //cycle time
-            lastTime = currentTime;
-            currentTime = nextTime;
-            nextTime += para->getParD(level)->precursorBC.nTRead;
-
-            //TODO switch to streams and synch stream here
-            checkCudaErrors(cudaDeviceSynchronize());
-            //cycle pointers
-            real* tmp = para->getParD(level)->precursorBC.vxLast;
-            para->getParD(level)->precursorBC.vxLast = para->getParD(level)->precursorBC.vxCurrent;
-            para->getParD(level)->precursorBC.vxCurrent = para->getParD(level)->precursorBC.vxNext;
-            para->getParD(level)->precursorBC.vxNext = tmp;
-
-
-            tmp = para->getParD(level)->precursorBC.vyLast;
-            para->getParD(level)->precursorBC.vyLast = para->getParD(level)->precursorBC.vyCurrent;
-            para->getParD(level)->precursorBC.vyCurrent = para->getParD(level)->precursorBC.vyNext;
-            para->getParD(level)->precursorBC.vyNext = tmp;
-            
-            tmp = para->getParD(level)->precursorBC.vzLast;
-            para->getParD(level)->precursorBC.vzLast = para->getParD(level)->precursorBC.vzCurrent;
-            para->getParD(level)->precursorBC.vzCurrent = para->getParD(level)->precursorBC.vzNext;
-            para->getParD(level)->precursorBC.vzNext = tmp;
-
-            real loadTime = nextTime*pow(2,-level)*para->getTimeRatio();
-            for(auto reader : para->getParH(level)->velocityReader)
-            {   
-                reader->getNextVelocities(para->getParH(level)->precursorBC.vxNext, para->getParH(level)->precursorBC.vyNext, para->getParH(level)->precursorBC.vzNext, loadTime);
-            }
-
-            cudaMemoryManager->cudaCopyPrecursorVelocities(level);
-            para->getParD(level)->precursorBC.nPrecursorReads++;
-            para->getParH(level)->precursorBC.nPrecursorReads++;  
-        }
-        
-        real tRatio = real(t-lastTime)/para->getParD(level)->precursorBC.nTRead;
-        QPrecursorDevCompZeroPress( para->getParD(level)->numberofthreads, tRatio, para->getParD(level)->distributions.f[0], para->getParD(level)->precursorBC.q27[0],
-                                    para->getParD(level)->precursorBC.k, para->getParD(level)->precursorBC.sizeQ, para->getParD(level)->precursorBC.numberOfBCnodes, 
-                                    para->getParD(level)->omega, para->getVelocityRatio(),
-                                    para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ,
-                                    para->getParD(level)->precursorBC.planeNeighborNT, para->getParD(level)->precursorBC.planeNeighborNB, para->getParD(level)->precursorBC.planeNeighborST, para->getParD(level)->precursorBC.planeNeighborSB, 
-                                    para->getParD(level)->precursorBC.weightsNT, para->getParD(level)->precursorBC.weightsNB, para->getParD(level)->precursorBC.weightsST, para->getParD(level)->precursorBC.weightsSB, 
-                                    para->getParD(level)->precursorBC.vxLast, para->getParD(level)->precursorBC.vyLast, para->getParD(level)->precursorBC.vzLast, 
-                                    para->getParD(level)->precursorBC.vxCurrent, para->getParD(level)->precursorBC.vyCurrent, para->getParD(level)->precursorBC.vzCurrent, 
-                                    para->getParD(level)->precursorBC.velocityX, para->getParD(level)->precursorBC.velocityY, para->getParD(level)->precursorBC.velocityZ,
-                                    para->getParD(level)->numberOfNodes, para->getParD(level)->isEvenTimestep);
-        getLastCudaError("QPrecursorDevCompZeroPress execution failed");
-    }
-}
-
-void LBKernelManager::runSlipBCKernel(int level){
-    if (para->getParD(level)->numberOfSlipBCnodes > 0)
-    {
-        // QSlipDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->slipBC.k,
-        //     para->getParD(level)->slipBC.q27[0],
-        //     para->getParD(level)->numberOfSlipBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        QSlipDevComp27(
-            para->getParD(level)->numberofthreads,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->slipBC.k,
-            para->getParD(level)->slipBC.q27[0],
-            para->getParD(level)->numberOfSlipBCnodes,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->turbViscosity,
-            para->getUseTurbulentViscosity(),
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-    }
-}
-
-void LBKernelManager::runNoSlipBCKernel(int level){
-    if (para->getParD(level)->numberOfNoSlipBCnodes > 0)
-    {
-        // QDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->noSlipBC.k,
-        //     para->getParD(level)->noSlipBC.q27[0],
-        //     para->getParD(level)->numberOfNoSlipBCnodes,
-        //     para->getParD(level)->numberOfNoSlipBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // BBDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->noSlipBC.k,
-        //     para->getParD(level)->noSlipBC.q27[0],
-        //     para->getParD(level)->numberOfNoSlipBCnodes,
-        //     para->getParD(level)->numberOfNoSlipBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        // QDev27(
-        //     para->getParD(level)->numberofthreads,
-        //     para->getParD(level)->nx,
-        //     para->getParD(level)->ny,
-        //     para->getParD(level)->distributions.f[0],
-        //     para->getParD(level)->noSlipBC.k,
-        //     para->getParD(level)->noSlipBC.q27[0],
-        //     para->getParD(level)->numberOfNoSlipBCnodes,
-        //     para->getParD(level)->numberOfNoSlipBCnodes,
-        //     para->getParD(level)->omega,
-        //     para->getParD(level)->neighborX,
-        //     para->getParD(level)->neighborY,
-        //     para->getParD(level)->neighborZ,
-        //     para->getParD(level)->size_Mat_SP,
-        //     para->getParD(level)->isEvenTimestep);
-
-        QDevComp27(
-            para->getParD(level)->numberofthreads,
-            para->getParD(level)->nx,
-            para->getParD(level)->ny,
-            para->getParD(level)->distributions.f[0],
-            para->getParD(level)->noSlipBC.k,
-            para->getParD(level)->noSlipBC.q27[0],
-            para->getParD(level)->numberOfNoSlipBCnodes,
-            para->getParD(level)->numberOfNoSlipBCnodes,
-            para->getParD(level)->omega,
-            para->getParD(level)->neighborX,
-            para->getParD(level)->neighborY,
-            para->getParD(level)->neighborZ,
-            para->getParD(level)->numberOfNodes,
-            para->getParD(level)->isEvenTimestep);
-    }
-}
-
-// void LBKernelManager::runPressureBCKernelPre(int level){
-//     if (para->getParD()->numberOfPressureBCnodes > 0)
-//     {
-//         // ...
-//     }
-// }
-
-// void LBKernelManager::calculateMacroscopicValues(int level)
-// {
-//     if (para->getIsADcalculationOn()) {
-//           CalcMacADCompSP27(
-//                para->getParD()->velocityX,
-//                para->getParD()->velocityY,
-//                para->getParD()->velocityZ,
-//                para->getParD()->rho,
-//                para->getParD()->pressure,
-//                para->getParD()->typeOfGridNode,
-//                para->getParD()->neighborX,
-//                para->getParD()->neighborY,
-//                para->getParD()->neighborZ,
-//                para->getParD()->numberOfNodes,
-//                para->getParD()->numberofthreads,
-//                para->getParD()->distributions.f[0],
-//                para->getParD()->distributionsAD.f[0],
-//             para->getParD()->forcing,
-//                para->getParD()->isEvenTimestep);
-//     } else {
-//           CalcMacCompSP27(
-//                para->getParD()->velocityX,
-//                para->getParD()->velocityY,
-//                para->getParD()->velocityZ,
-//                para->getParD()->rho,
-//                para->getParD()->pressure,
-//                para->getParD()->typeOfGridNode,
-//                para->getParD()->neighborX,
-//                para->getParD()->neighborY,
-//                para->getParD()->neighborZ,
-//                para->getParD()->numberOfNodes,
-//                para->getParD()->numberofthreads,
-//                para->getParD()->distributions.f[0],
-//                para->getParD()->isEvenTimestep);
-//      }
-// }
-
-
-
-
-
-
-
-
-
-SPtr<LBKernelManager> LBKernelManager::make(SPtr<Parameter> parameter)
-{
-    return SPtr<LBKernelManager>(new LBKernelManager(parameter));
-}
-
-LBKernelManager::LBKernelManager(SPtr<Parameter> parameter)
-{
-    this->para = parameter;
-}
-
-LBKernelManager::LBKernelManager(const LBKernelManager&)
-{
-
-}
diff --git a/src/gpu/VirtualFluids_GPU/LBM/D3Q27.h b/src/gpu/VirtualFluids_GPU/LBM/D3Q27.h
deleted file mode 100644
index 5e769b603e7c6677b7f9e1189f5c4fe27051f795..0000000000000000000000000000000000000000
--- a/src/gpu/VirtualFluids_GPU/LBM/D3Q27.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef _LB_D3Q27_H_
-#define _LB_D3Q27_H_
-#include <math.h>
-
-#define dirE    /*f1 */  0
-#define dirW    /*f2 */  1
-#define dirN    /*f3 */  2
-#define dirS    /*f4 */  3
-#define dirT    /*f5 */  4
-#define dirB    /*f6 */  5
-#define dirNE   /*f7 */  6
-#define dirSW   /*f8 */  7
-#define dirSE   /*f9 */  8
-#define dirNW   /*f10*/  9
-#define dirTE   /*f11*/  10
-#define dirBW   /*f12*/  11
-#define dirBE   /*f13*/  12
-#define dirTW   /*f14*/  13
-#define dirTN   /*f15*/  14
-#define dirBS   /*f16*/  15
-#define dirBN   /*f17*/  16
-#define dirTS   /*f18*/  17
-#define dirZERO /*f0 */  18
-#define dirREST /*f0 */  18
-
-#define dirTNE    /*f */  19
-#define dirBNE    /*f */  20
-#define dirTSE    /*f */  21
-#define dirBSE    /*f */  22
-
-#define dirTNW    /*f */  23
-#define dirBNW    /*f */  24
-#define dirTSW    /*f */  25
-#define dirBSW    /*f */  26
-
-#define dirSTART  0
-#define dirEND   26
-
-#endif
-
-
diff --git a/src/gpu/VirtualFluids_GPU/LBM/LB.h b/src/gpu/VirtualFluids_GPU/LBM/LB.h
index 5bc804e4d4707c72d846f40abf5f1cbded33f4ed..510f057270e76af7d2e9547840e21242dd061e6c 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/LB.h
+++ b/src/gpu/VirtualFluids_GPU/LBM/LB.h
@@ -74,11 +74,13 @@ struct InitCondition
    uint PressOutID {0};
    uint PressInZ {1};
    uint PressOutZ {2};
-   std::vector<uint> devices {1, 0}; // one device with ID = 0
+   std::vector<uint> devices {0, 1}; // one device with ID = 0
    std::vector<int> GridX, GridY, GridZ, DistX, DistY, DistZ;
    std::vector<real> scaleLBMtoSI, translateLBMtoSI;
    std::vector<real> minCoordX, minCoordY, minCoordZ, maxCoordX, maxCoordY, maxCoordZ;
-   std::string fname, oPath;
+   std::string fname;
+   std::string oPath {"output/"};
+   std::string gridPath {"grid/"};
    std::string oPrefix {"MyFile"};
    std::string geometryFileC, geometryFileM, geometryFileF;
    std::string kFull, geoFull, geoVec, coordX, coordY, coordZ, neighborX, neighborY, neighborZ, neighborWSB, scaleCFC, scaleCFF, scaleFCC, scaleFCF, scaleOffsetCF, scaleOffsetFC;
@@ -177,6 +179,11 @@ typedef struct  Distri27{
    real* f[27];
 } Distributions27, DistributionReferences27;
 
+// Subgrid distances q 27
+typedef struct SubgridDist27{
+   real* q[27];
+} SubgridDistances27;
+
 //Q for second order BCs
 //! \struct to manage sub-grid-distances (q) for second order Boundary Conditions (BCs)
 typedef struct QforBC{
@@ -186,7 +193,7 @@ typedef struct QforBC{
    real* qread;
    real* q27[27];
    real* q19[19];
-   int numberOfBCnodes=0;
+   unsigned int numberOfBCnodes=0;
    int kArray;
    real *Vx,      *Vy,      *Vz;
    real *Vx1,     *Vy1,     *Vz1;
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
index 1ab8dcba564a0d742654cf17d893144410e3a125..4cdb9f1db6514d61ff90327a928822df924e7270 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
+++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp
@@ -68,7 +68,7 @@ std::string getFileName(const std::string& fname, int step, int myID)
 }
 
 Simulation::Simulation(std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> memoryManager,
-                       vf::gpu::Communicator &communicator, GridProvider &gridProvider)
+                       vf::gpu::Communicator &communicator, GridProvider &gridProvider, BoundaryConditionFactory* bcFactory)
     : para(para), cudaMemoryManager(memoryManager), communicator(communicator), kernelFactory(std::make_unique<KernelFactoryImp>()),
       preProcessorFactory(std::make_unique<PreProcessorFactoryImp>()), dataWriter(std::make_unique<FileWriter>())
 {
@@ -377,7 +377,7 @@ Simulation::Simulation(std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemo
     //////////////////////////////////////////////////////////////////////////
     // Init UpdateGrid
     //////////////////////////////////////////////////////////////////////////
-    this->updateGrid27 = std::make_unique<UpdateGrid27>(para, communicator, cudaMemoryManager, pm, kernels);
+    this->updateGrid27 = std::make_unique<UpdateGrid27>(para, communicator, cudaMemoryManager, pm, kernels, bcFactory);
 
     //////////////////////////////////////////////////////////////////////////
     // Print Init
@@ -782,46 +782,46 @@ void Simulation::run()
 								   para->getParD(lev)->isEvenTimestep);
                    getLastCudaError("CalcMacSP27 execution failed");
 
-				   //�berschreiben mit Wandknoten
-				   //SetOutputWallVelocitySP27(  para->getParD(lev)->numberofthreads,
-							//				   para->getParD(lev)->vx_SP,
-							//				   para->getParD(lev)->vy_SP,
-							//				   para->getParD(lev)->vz_SP,
-							//				   para->getParD(lev)->geometryBC.Vx,
-							//				   para->getParD(lev)->geometryBC.Vy,
-							//				   para->getParD(lev)->geometryBC.Vz,
-							//				   para->getParD(lev)->geometryBC.kQ,
-							//				   para->getParD(lev)->geometryBC.k,
-							//				   para->getParD(lev)->rho,
-							//				   para->getParD(lev)->pressure,
-							//				   para->getParD(lev)->geoSP,
-							//				   para->getParD(lev)->neighborX_SP,
-							//				   para->getParD(lev)->neighborY_SP,
-							//				   para->getParD(lev)->neighborZ_SP,
-							//				   para->getParD(lev)->size_Mat_SP,
-							//				   para->getParD(lev)->d0SP.f[0],
-							//				   para->getParD(lev)->evenOrOdd);
-       //            getLastCudaError("SetOutputWallVelocitySP27 execution failed");
-
-   				   //SetOutputWallVelocitySP27(  para->getParD(lev)->numberofthreads,
-										//	   para->getParD(lev)->vx_SP,
-										//	   para->getParD(lev)->vy_SP,
-										//	   para->getParD(lev)->vz_SP,
-										//	   para->getParD(lev)->velocityBC.Vx,
-										//	   para->getParD(lev)->velocityBC.Vy,
-										//	   para->getParD(lev)->velocityBC.Vz,
-										//	   para->getParD(lev)->numberOfVeloBCnodes,
-										//	   para->getParD(lev)->velocityBC.k,
-										//	   para->getParD(lev)->rho,
-										//	   para->getParD(lev)->pressure,
-										//	   para->getParD(lev)->geoSP,
-										//	   para->getParD(lev)->neighborX_SP,
-										//	   para->getParD(lev)->neighborY_SP,
-										//	   para->getParD(lev)->neighborZ_SP,
-										//	   para->getParD(lev)->size_Mat_SP,
-										//	   para->getParD(lev)->d0SP.f[0],
-										//	   para->getParD(lev)->evenOrOdd);
-          //         getLastCudaError("SetOutputWallVelocitySP27 execution failed");
+				// // overwrite with wall nodes
+				//    SetOutputWallVelocitySP27(  para->getParD(lev)->numberofthreads,
+				// 							   para->getParD(lev)->velocityX,
+				// 							   para->getParD(lev)->velocityY,
+				// 							   para->getParD(lev)->velocityZ,
+				// 							   para->getParD(lev)->geometryBC.Vx,
+				// 							   para->getParD(lev)->geometryBC.Vy,
+				// 							   para->getParD(lev)->geometryBC.Vz,
+				// 							   para->getParD(lev)->geometryBC.numberOfBCnodes,
+				// 							   para->getParD(lev)->geometryBC.k,
+				// 							   para->getParD(lev)->rho,
+				// 							   para->getParD(lev)->pressure,
+				// 							   para->getParD(lev)->typeOfGridNode,
+				// 							   para->getParD(lev)->neighborX,
+				// 							   para->getParD(lev)->neighborY,
+				// 							   para->getParD(lev)->neighborZ,
+				// 							   para->getParD(lev)->size_Mat,
+				// 							   para->getParD(lev)->distributions.f[0],
+				// 							   para->getParD(lev)->isEvenTimestep);
+                //   getLastCudaError("SetOutputWallVelocitySP27 execution failed");
+
+   				//    SetOutputWallVelocitySP27(  para->getParD(lev)->numberofthreads,
+				// 							   para->getParD(lev)->velocityX,
+				// 							   para->getParD(lev)->velocityY,
+				// 							   para->getParD(lev)->velocityZ,
+				// 							   para->getParD(lev)->velocityBC.Vx,
+				// 							   para->getParD(lev)->velocityBC.Vy,
+				// 							   para->getParD(lev)->velocityBC.Vz,
+				// 							   para->getParD(lev)->velocityBC.numberOfBCnodes,
+				// 							   para->getParD(lev)->velocityBC.k,
+				// 							   para->getParD(lev)->rho,
+				// 							   para->getParD(lev)->pressure,
+				// 							   para->getParD(lev)->typeOfGridNode,
+				// 							   para->getParD(lev)->neighborX,
+				// 							   para->getParD(lev)->neighborY,
+				// 							   para->getParD(lev)->neighborZ,
+				// 							   para->getParD(lev)->size_Mat,
+				// 							   para->getParD(lev)->distributions.f[0],
+				// 							   para->getParD(lev)->isEvenTimestep);
+                //   getLastCudaError("SetOutputWallVelocitySP27 execution failed");
 
 				 //}
 
diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
index 5c765bc992c247ebf9b3b51ac399711ff7db0651..e43e88e482ea56e3d2fecdcd1275b209575e3442 100644
--- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
+++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h
@@ -28,12 +28,13 @@ class TrafficMovementFactory;
 class UpdateGrid27;
 class KineticEnergyAnalyzer;
 class EnstrophyAnalyzer;
+class BoundaryConditionFactory;
 
 class Simulation
 {
 public:
     Simulation(std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> memoryManager,
-               vf::gpu::Communicator &communicator, GridProvider &gridProvider);
+               vf::gpu::Communicator &communicator, GridProvider &gridProvider, BoundaryConditionFactory* bcFactory);
     ~Simulation();
     void run();
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp
index e0390f4dc9ab7be1cc94aad8327a3599300bb28d..6498bbb0a2b787d70a3b11500549b2a8956ce67a 100644
--- a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp
@@ -6,7 +6,7 @@
 #include <stdio.h>
 // #include <math.h>
 #include "Core/StringUtilities/StringUtil.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "LBM/LB.h"
 #include "Parameter/Parameter.h"
 #include "basics/utilities/UbSystem.h"
diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp b/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
index 2e7d49deb689c903295e461e8535d4f0a8ca6acd..8a58da5b53406155222d6db9d39b000317ba8cd7 100644
--- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp
@@ -18,7 +18,7 @@
 #include "GPU/CudaMemoryManager.h"
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 
 #include <basics/writer/WbWriterVtkXmlBinary.h>
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp
index 8b11a94bb264a64e37267be0a15b205044719d31..eb00b43acde44d8e5b3af43843c565b1774e65e6 100644
--- a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp
@@ -6,7 +6,7 @@
 #include <stdio.h>
 // #include <math.h>
 #include "Core/StringUtilities/StringUtil.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "LBM/LB.h"
 #include "Parameter/Parameter.h"
 #include "basics/utilities/UbSystem.h"
@@ -210,7 +210,7 @@ void writeBcPointsDebug(Parameter *para)
     nodesVec2.resize(nodeNumberVec * 8);
     int nodeCount2 = 0;
     for (int level = 0; level <= para->getMaxLevel(); level++) {
-        for (int u = 0; u < para->getParH(level)->noSlipBC.numberOfBCnodes; u++) {
+        for (uint u = 0; u < para->getParH(level)->noSlipBC.numberOfBCnodes; u++) {
             int pos = para->getParH(level)->noSlipBC.k[u];
 
             double x1 = para->getParH(level)->coordinateX[pos];
@@ -238,7 +238,7 @@ void writePressPointsDebug(Parameter *para)
     nodesVec.resize(nodeNumberVec);
     int nodeCount2 = 0;
     for (int level = 0; level <= para->getMaxLevel(); level++) {
-        for (int u = 0; u < para->getParH(level)->pressureBC.numberOfBCnodes; u++) {
+        for (uint u = 0; u < para->getParH(level)->pressureBC.numberOfBCnodes; u++) {
             int pos = para->getParH(level)->pressureBC.k[u];
 
             double x1 = para->getParH(level)->coordinateX[pos];
@@ -265,7 +265,7 @@ void writePressNeighborPointsDebug(Parameter *para)
     nodesVec.resize(nodeNumberVec);
     int nodeCount2 = 0;
     for (int level = 0; level <= para->getMaxLevel(); level++) {
-        for (int u = 0; u < para->getParH(level)->pressureBC.numberOfBCnodes; u++) {
+        for (uint u = 0; u < para->getParH(level)->pressureBC.numberOfBCnodes; u++) {
             int pos = para->getParH(level)->pressureBC.kN[u];
 
             real x1 = para->getParH(level)->coordinateX[pos];
diff --git a/src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp
index f23b05bb039aef76a983ba7349d4bdf905e654cc..c4f5e1413860fd0ad4b548090b6ad72af6384765 100644
--- a/src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp
@@ -10,7 +10,7 @@
 //#include <cmath>
 
 //#include "LBM/LB.h"
-//#include "LBM/D3Q27.h"
+//#include "lbm/constants/D3Q27.h"
 #include <numeric>
 #include "basics/utilities/UbFileOutputASCII.h"
 #include "Parameter/Parameter.h"
diff --git a/src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp
index 6fb4c8e2f20a95b5f83a107a9b24341cceb2c5ca..a9207ed231e8d9667e57636a5a5fdd6b5aeab94f 100644
--- a/src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp
@@ -10,7 +10,7 @@
 //#include <cmath>
 
 //#include "LBM/LB.h"
-//#include "LBM/D3Q27.h"
+//#include "lbm/constants/D3Q27.h"
 #include "basics/utilities/UbFileOutputASCII.h"
 #include "Parameter/Parameter.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp
index 03ddd1efc235c0cadaaabc9722deed2b50cebf48..456f9c148c75c27fb899f976ba4f99b109fc3d4b 100644
--- a/src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp
@@ -10,7 +10,7 @@
 //#include <cmath>
 
 //#include "LBM/LB.h"
-//#include "LBM/D3Q27.h"
+//#include "lbm/constants/D3Q27.h"
 #include "basics/utilities/UbFileOutputASCII.h"
 #include "Parameter/Parameter.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp
index d0c15ec08b7c817538bef86323fe753437e40d30..d006636572377477aeb3599a8ae843ea2b1e31ff 100644
--- a/src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp
@@ -7,7 +7,7 @@
 // #include <math.h>
 #include <cmath>
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "Parameter/Parameter.h"
 #include "basics/utilities/UbSystem.h"
 #include <basics/writer/WbWriterVtkXmlBinary.h>
diff --git a/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
index a5441e15a1b74a18086aa320b3d1256155acc5bf..81f2c028a6bbc7cd9c077571349f4f0465a08a05 100644
--- a/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp
@@ -7,7 +7,7 @@
 // #include <math.h>
 #include <cmath>
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "Parameter/Parameter.h"
 #include "basics/utilities/UbSystem.h"
 #include <basics/writer/WbWriterVtkXmlBinary.h>
@@ -2319,7 +2319,7 @@ namespace UnstructuredGridWriter
 			wallX3 = 0.0;
 			q      = 0.0;
 			//////////////////////////////////////////////////////////////////////////
-			for (unsigned int typeOfQ = dirSTART; typeOfQ <= dirEND; typeOfQ++)
+			for (unsigned int typeOfQ = STARTDIR; typeOfQ <= ENDDIR; typeOfQ++)
 			{
 				QQ = para->getParH(level)->geometryBC.q27[0];
 				Q.q27[typeOfQ] = &QQ[typeOfQ*sizeOfNodes];
@@ -2327,33 +2327,33 @@ namespace UnstructuredGridWriter
 				//////////////////////////////////////////////////////////////////////////
 				switch (typeOfQ)
 				{
-					case dirE:   wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
-					case dirN:   wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirW:   wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
-					case dirS:   wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirNE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirNW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirSW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirSE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirT:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirTW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirB:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirBSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirTSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirBNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirZERO:wallX1 = nodeX1;        wallX2 = nodeX2;		 wallX3 = nodeX3;        break;
+					case E:   wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
+					case N:   wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case W:   wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
+					case S:   wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case NE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case NW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case SW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case SE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case T:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case TW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case B:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case BSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case TSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case BNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case REST:wallX1 = nodeX1;        wallX2 = nodeX2;		 wallX3 = nodeX3;        break;
 					default: throw UbException(UB_EXARGS, "unknown direction");
 				}
 				//////////////////////////////////////////////////////////////////////////
@@ -2423,7 +2423,7 @@ namespace UnstructuredGridWriter
 			wallX3 = 0.0;
 			q      = 0.0;
 			//////////////////////////////////////////////////////////////////////////
-			for (unsigned int typeOfQ = dirSTART; typeOfQ <= dirEND; typeOfQ++)
+			for (unsigned int typeOfQ = STARTDIR; typeOfQ <= ENDDIR; typeOfQ++)
 			{
 				QQ = para->getParH(level)->velocityBC.q27[0];
 				Q.q27[typeOfQ] = &QQ[typeOfQ*sizeOfNodes];
@@ -2432,33 +2432,33 @@ namespace UnstructuredGridWriter
 				//////////////////////////////////////////////////////////////////////////
 				switch (typeOfQ)
 				{
-					case dirE:   wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
-					case dirN:   wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirW:   wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
-					case dirS:   wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirNE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirNW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirSW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirSE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirT:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirTW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirB:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirBSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirTSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirBNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirZERO:wallX1 = nodeX1;        wallX2 = nodeX2;		 wallX3 = nodeX3;        break;
+					case E:   wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
+					case N:   wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case W:   wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
+					case S:   wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case NE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case NW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case SW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case SE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case T:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case TW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case B:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case BSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case TSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case BNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case REST:wallX1 = nodeX1;        wallX2 = nodeX2;		 wallX3 = nodeX3;        break;
 					default: throw UbException(UB_EXARGS, "unknown direction");
 				}
 				//////////////////////////////////////////////////////////////////////////
@@ -2528,7 +2528,7 @@ namespace UnstructuredGridWriter
 			wallX3 = 0.0;
 			q      = 0.0;
 			//////////////////////////////////////////////////////////////////////////
-			for (unsigned int typeOfQ = dirSTART; typeOfQ <= dirEND; typeOfQ++)
+			for (unsigned int typeOfQ = STARTDIR; typeOfQ <= ENDDIR; typeOfQ++)
 			{
 				QQ = para->getParH(level)->pressureBC.q27[0];
 				Q.q27[typeOfQ] = &QQ[typeOfQ*sizeOfNodes];
@@ -2537,33 +2537,33 @@ namespace UnstructuredGridWriter
 				//////////////////////////////////////////////////////////////////////////
 				switch (typeOfQ)
 				{
-					case dirE:   wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
-					case dirN:   wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirW:   wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
-					case dirS:   wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirNE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirNW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
-					case dirSW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirSE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
-					case dirT:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirTW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
-					case dirTS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirB:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
-					case dirBS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirBSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirTSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirBNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirBSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
-					case dirTNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
-					case dirZERO:wallX1 = nodeX1;        wallX2 = nodeX2;		 wallX3 = nodeX3;        break;
+					case E:   wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
+					case N:   wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case W:   wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3;        break;
+					case S:   wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case NE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case NW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3;        break;
+					case SW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case SE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3;        break;
+					case T:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case TW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 + q*dx; break;
+					case TS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case B:   wallX1 = nodeX1;        wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BE:  wallX1 = nodeX1 + q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BN:  wallX1 = nodeX1;        wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BW:  wallX1 = nodeX1 - q*dx; wallX2 = nodeX2;        wallX3 = nodeX3 - q*dx; break;
+					case BS:  wallX1 = nodeX1;        wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case BSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BNE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TSW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case TSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 + q*dx; break;
+					case BNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 - q*dx; break;
+					case BSE: wallX1 = nodeX1 + q*dx; wallX2 = nodeX2 - q*dx; wallX3 = nodeX3 - q*dx; break;
+					case TNW: wallX1 = nodeX1 - q*dx; wallX2 = nodeX2 + q*dx; wallX3 = nodeX3 + q*dx; break;
+					case REST:wallX1 = nodeX1;        wallX2 = nodeX2;		 wallX3 = nodeX3;        break;
 					default: throw UbException(UB_EXARGS, "unknown direction");
 				}
 				//////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp
index 5313d7bfbde22533ed198acaee16cc83844425da..7b2e5021a404ba5d9e969c1b5d144799d06c9ae6 100644
--- a/src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp
@@ -7,7 +7,7 @@
 // #include <math.h>
 #include <cmath>
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "basics/utilities/UbSystem.h"
 
 //using namespace std;
diff --git a/src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp
index 8efdf4b499579bf1a75ed32337ccbab84379acf6..f140b15a6b7595a959139da2a35ed58f01b2a307 100644
--- a/src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp
@@ -10,7 +10,7 @@
 //#include <cmath>
 
 //#include "LBM/LB.h"
-//#include "LBM/D3Q27.h"
+//#include "lbm/constants/D3Q27.h"
 #include "basics/writer/WbWriterVtkXmlBinary.h"
 #include <basics/utilities/UbException.h>
 #include <basics/utilities/UbSystem.h>
diff --git a/src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp b/src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp
index 68be148760b831253100d266c61065792aa460ea..1ef164b353eb9bb2f99b8658dcc1201e397197c4 100644
--- a/src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp
+++ b/src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp
@@ -10,7 +10,7 @@
 //#include <cmath>
 
 //#include "LBM/LB.h"
-//#include "LBM/D3Q27.h"
+//#include "lbm/constants/D3Q27.h"
 #include "basics/utilities/UbFileOutputASCII.h"
 #include "Parameter/Parameter.h"
 
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
index 91fd9a4161c5b6d0786c545f63e6116a66bb5868..89f300b4ce9e14d76ee54fb02ba5f9102893bb98 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp
@@ -6,15 +6,6 @@
 #include "Parameter.h"
 #include "basics/config/ConfigurationFile.h"
 
-static std::shared_ptr<Parameter> initParameterClass()
-{
-    std::filesystem::path filePath = __FILE__; //  assuming that the config file is stored parallel to this file.
-    filePath.replace_filename("parameterTest.cfg");
-    vf::basics::ConfigurationFile config;
-    config.load(filePath.string());
-    return std::make_shared<Parameter>(config, 1, 0);
-}
-
 bool compareEdgeNodesRecv(const std::vector<LBMSimulationParameter::EdgeNodePositions> &actual,
                           const std::vector<std::pair<int, int>> &expected)
 {
@@ -52,7 +43,7 @@ protected:
 private:
     void SetUp() override
     {
-        para = initParameterClass();
+        para = std::make_shared<Parameter>(1, 0);
         para->initLBMSimulationParameter();
     }
 };
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
index 95f2e535e7e157e19e6573db9f2a6788618a01a3..42e53bb681b3977f42ea8ebfebd0fbdebae37444 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp
@@ -44,12 +44,31 @@
 
 #include "Parameter/CudaStreamManager.h"
 
+Parameter::Parameter(int numberOfProcesses, int myId)
+{
+    this->ic.numprocs = numberOfProcesses; 
+    this->ic.myid = myId;
+    
+    initGridPaths();
+    initGridBasePoints();
+    initDefaultLBMkernelAllLevels();
+    this->setFName(this->getOutputPath() + this->getOutputPrefix());
+
+    // initLBMSimulationParameter();
+}
+
 Parameter::Parameter(const vf::basics::ConfigurationFile &configData, int numberOfProcesses, int myId)
 {
-    ic.numprocs = numberOfProcesses;
-    ic.myid = myId;
+    this->ic.numprocs = numberOfProcesses; 
+    this->ic.myid = myId;
 
     readConfigData(configData);
+
+    initGridPaths();
+    initGridBasePoints();
+    initDefaultLBMkernelAllLevels();
+    this->setFName(this->getOutputPath() + this->getOutputPrefix());
+
     // initLBMSimulationParameter();
 }
 
@@ -59,16 +78,12 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 {
     if (configData.contains("NumberOfDevices"))
         this->setMaxDev(configData.getValue<int>("NumberOfDevices"));
-
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("Devices"))
         this->setDevices(configData.getVector<uint>("Devices"));
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("Path"))
         this->setOutputPath(configData.getValue<std::string>("Path"));
-    else
-        throw std::runtime_error("<Path> need to be defined in config file!");
-
     //////////////////////////////////////////////////////////////////////////
     if (configData.contains("Prefix"))
         this->setOutputPrefix(configData.getValue<std::string>("Prefix"));
@@ -246,72 +261,10 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 
     //////////////////////////////////////////////////////////////////////////
 
-    std::string gridPath{ "" };
     if (configData.contains("GridPath"))
-        gridPath = configData.getValue<std::string>("GridPath");
-    else
-        throw std::runtime_error("GridPath has to be defined in config file!");
-
-    if (this->getNumprocs() == 1)
-        gridPath += "/";
-    else
-        gridPath += "/" + StringUtil::toString(this->getMyID()) + "/";
+        this->setGridPath(configData.getValue<std::string>("GridPath"));
 
-    // //////////////////////////////////////////////////////////////////////////
-    this->setFName(this->getOutputPath() + "/" + this->getOutputPrefix());
-    //////////////////////////////////////////////////////////////////////////
-    this->setgeoVec(gridPath + "geoVec.dat");
-    this->setcoordX(gridPath + "coordX.dat");
-    this->setcoordY(gridPath + "coordY.dat");
-    this->setcoordZ(gridPath + "coordZ.dat");
-    this->setneighborX(gridPath + "neighborX.dat");
-    this->setneighborY(gridPath + "neighborY.dat");
-    this->setneighborZ(gridPath + "neighborZ.dat");
-    this->setneighborWSB(gridPath + "neighborWSB.dat");
-    this->setscaleCFC(gridPath + "scaleCFC.dat");
-    this->setscaleCFF(gridPath + "scaleCFF.dat");
-    this->setscaleFCC(gridPath + "scaleFCC.dat");
-    this->setscaleFCF(gridPath + "scaleFCF.dat");
-    this->setscaleOffsetCF(gridPath + "offsetVecCF.dat");
-    this->setscaleOffsetFC(gridPath + "offsetVecFC.dat");
-    this->setgeomBoundaryBcQs(gridPath + "geomBoundaryQs.dat");
-    this->setgeomBoundaryBcValues(gridPath + "geomBoundaryValues.dat");
-    this->setinletBcQs(gridPath + "inletBoundaryQs.dat");
-    this->setinletBcValues(gridPath + "inletBoundaryValues.dat");
-    this->setoutletBcQs(gridPath + "outletBoundaryQs.dat");
-    this->setoutletBcValues(gridPath + "outletBoundaryValues.dat");
-    this->settopBcQs(gridPath + "topBoundaryQs.dat");
-    this->settopBcValues(gridPath + "topBoundaryValues.dat");
-    this->setbottomBcQs(gridPath + "bottomBoundaryQs.dat");
-    this->setbottomBcValues(gridPath + "bottomBoundaryValues.dat");
-    this->setfrontBcQs(gridPath + "frontBoundaryQs.dat");
-    this->setfrontBcValues(gridPath + "frontBoundaryValues.dat");
-    this->setbackBcQs(gridPath + "backBoundaryQs.dat");
-    this->setbackBcValues(gridPath + "backBoundaryValues.dat");
-    this->setnumberNodes(gridPath + "numberNodes.dat");
-    this->setLBMvsSI(gridPath + "LBMvsSI.dat");
-    this->setmeasurePoints(gridPath + "measurePoints.dat");
-    this->setpropellerValues(gridPath + "propellerValues.dat");
-    this->setcpTop(gridPath + "cpTop.dat");
-    this->setcpBottom(gridPath + "cpBottom.dat");
-    this->setcpBottom2(gridPath + "cpBottom2.dat");
-    this->setConcentration(gridPath + "conc.dat");
-    this->setStreetVelocity(gridPath + "streetVector.dat");
-    //////////////////////////////////////////////////////////////////////////
-    // Normals - Geometry
-    this->setgeomBoundaryNormalX(gridPath + "geomBoundaryNormalX.dat");
-    this->setgeomBoundaryNormalY(gridPath + "geomBoundaryNormalY.dat");
-    this->setgeomBoundaryNormalZ(gridPath + "geomBoundaryNormalZ.dat");
-    // Normals - Inlet
-    this->setInflowBoundaryNormalX(gridPath + "inletBoundaryNormalX.dat");
-    this->setInflowBoundaryNormalY(gridPath + "inletBoundaryNormalY.dat");
-    this->setInflowBoundaryNormalZ(gridPath + "inletBoundaryNormalZ.dat");
-    // Normals - Outlet
-    this->setOutflowBoundaryNormalX(gridPath + "outletBoundaryNormalX.dat");
-    this->setOutflowBoundaryNormalY(gridPath + "outletBoundaryNormalY.dat");
-    this->setOutflowBoundaryNormalZ(gridPath + "outletBoundaryNormalZ.dat");
-    //////////////////////////////////////////////////////////////////////////
-    // //Forcing
+    // Forcing
     real forcingX = 0.0;
     real forcingY = 0.0;
     real forcingZ = 0.0;
@@ -357,28 +310,6 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 
     if (configData.contains("endXHotWall"))
         this->setEndXHotWall(configData.getValue<real>("endXHotWall"));
-    //////////////////////////////////////////////////////////////////////////
-    // for Multi GPU
-    if (this->getNumprocs() > 1) {
-        //////////////////////////////////////////////////////////////////////////
-        // 3D domain decomposition
-        std::vector<std::string> sendProcNeighborsX, sendProcNeighborsY, sendProcNeighborsZ;
-        std::vector<std::string> recvProcNeighborsX, recvProcNeighborsY, recvProcNeighborsZ;
-        for (int i = 0; i < this->getNumprocs(); i++) {
-            sendProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xs.dat");
-            sendProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Ys.dat");
-            sendProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zs.dat");
-            recvProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xr.dat");
-            recvProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Yr.dat");
-            recvProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zr.dat");
-        }
-        this->setPossNeighborFilesX(sendProcNeighborsX, "send");
-        this->setPossNeighborFilesY(sendProcNeighborsY, "send");
-        this->setPossNeighborFilesZ(sendProcNeighborsZ, "send");
-        this->setPossNeighborFilesX(recvProcNeighborsX, "recv");
-        this->setPossNeighborFilesY(recvProcNeighborsY, "recv");
-        this->setPossNeighborFilesZ(recvProcNeighborsZ, "recv");
-    }
 
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     // Restart
@@ -397,14 +328,6 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
     if (configData.contains("NOGL"))
         setMaxLevel(configData.getValue<int>("NOGL"));
 
-    this->setGridX(std::vector<int>(this->getMaxLevel() + 1, 32));
-    this->setGridY(std::vector<int>(this->getMaxLevel() + 1, 32));
-    this->setGridZ(std::vector<int>(this->getMaxLevel() + 1, 32));
-
-    this->setDistX(std::vector<int>(this->getMaxLevel() + 1, 32));
-    this->setDistY(std::vector<int>(this->getMaxLevel() + 1, 32));
-    this->setDistZ(std::vector<int>(this->getMaxLevel() + 1, 32));
-
     if (configData.contains("GridX"))
         this->setGridX(configData.getVector<int>("GridX"));
 
@@ -433,17 +356,134 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData)
 
     if (configData.contains("MultiKernelLevel"))
         this->setMultiKernelLevel(configData.getVector<int>("MultiKernelLevel"));
-    else if (this->getMultiKernelOn()) {
+
+    if (configData.contains("MultiKernelName"))
+        this->setMultiKernel(configData.getVector<std::string>("MultiKernelName"));
+}
+
+void Parameter::initGridPaths(){
+    std::string gridPath = this->getGridPath();
+
+    // add missing slash to gridPath
+    if (gridPath.back() != '/') {
+        gridPath += "/";
+        ic.gridPath = gridPath;
+    }
+
+    // for multi-gpu add process id (if not already there)
+    if (this->getNumprocs() > 1) {
+        gridPath += StringUtil::toString(this->getMyID()) + "/";
+        ic.gridPath = gridPath;
+    }
+
+    //////////////////////////////////////////////////////////////////////////
+        
+    this->setgeoVec(gridPath + "geoVec.dat");
+    this->setcoordX(gridPath + "coordX.dat");
+    this->setcoordY(gridPath + "coordY.dat");
+    this->setcoordZ(gridPath + "coordZ.dat");
+    this->setneighborX(gridPath + "neighborX.dat");
+    this->setneighborY(gridPath + "neighborY.dat");
+    this->setneighborZ(gridPath + "neighborZ.dat");
+    this->setneighborWSB(gridPath + "neighborWSB.dat");
+    this->setscaleCFC(gridPath + "scaleCFC.dat");
+    this->setscaleCFF(gridPath + "scaleCFF.dat");
+    this->setscaleFCC(gridPath + "scaleFCC.dat");
+    this->setscaleFCF(gridPath + "scaleFCF.dat");
+    this->setscaleOffsetCF(gridPath + "offsetVecCF.dat");
+    this->setscaleOffsetFC(gridPath + "offsetVecFC.dat");
+    this->setgeomBoundaryBcQs(gridPath + "geomBoundaryQs.dat");
+    this->setgeomBoundaryBcValues(gridPath + "geomBoundaryValues.dat");
+    this->setinletBcQs(gridPath + "inletBoundaryQs.dat");
+    this->setinletBcValues(gridPath + "inletBoundaryValues.dat");
+    this->setoutletBcQs(gridPath + "outletBoundaryQs.dat");
+    this->setoutletBcValues(gridPath + "outletBoundaryValues.dat");
+    this->settopBcQs(gridPath + "topBoundaryQs.dat");
+    this->settopBcValues(gridPath + "topBoundaryValues.dat");
+    this->setbottomBcQs(gridPath + "bottomBoundaryQs.dat");
+    this->setbottomBcValues(gridPath + "bottomBoundaryValues.dat");
+    this->setfrontBcQs(gridPath + "frontBoundaryQs.dat");
+    this->setfrontBcValues(gridPath + "frontBoundaryValues.dat");
+    this->setbackBcQs(gridPath + "backBoundaryQs.dat");
+    this->setbackBcValues(gridPath + "backBoundaryValues.dat");
+    this->setnumberNodes(gridPath + "numberNodes.dat");
+    this->setLBMvsSI(gridPath + "LBMvsSI.dat");
+    this->setmeasurePoints(gridPath + "measurePoints.dat");
+    this->setpropellerValues(gridPath + "propellerValues.dat");
+    this->setcpTop(gridPath + "cpTop.dat");
+    this->setcpBottom(gridPath + "cpBottom.dat");
+    this->setcpBottom2(gridPath + "cpBottom2.dat");
+    this->setConcentration(gridPath + "conc.dat");
+    this->setStreetVelocity(gridPath + "streetVector.dat");
+    
+    //////////////////////////////////////////////////////////////////////////
+    // Normals - Geometry
+    this->setgeomBoundaryNormalX(gridPath + "geomBoundaryNormalX.dat");
+    this->setgeomBoundaryNormalY(gridPath + "geomBoundaryNormalY.dat");
+    this->setgeomBoundaryNormalZ(gridPath + "geomBoundaryNormalZ.dat");
+    // Normals - Inlet
+    this->setInflowBoundaryNormalX(gridPath + "inletBoundaryNormalX.dat");
+    this->setInflowBoundaryNormalY(gridPath + "inletBoundaryNormalY.dat");
+    this->setInflowBoundaryNormalZ(gridPath + "inletBoundaryNormalZ.dat");
+    // Normals - Outlet
+    this->setOutflowBoundaryNormalX(gridPath + "outletBoundaryNormalX.dat");
+    this->setOutflowBoundaryNormalY(gridPath + "outletBoundaryNormalY.dat");
+    this->setOutflowBoundaryNormalZ(gridPath + "outletBoundaryNormalZ.dat");
+    //////////////////////////////////////////////////////////////////////////
+    
+    //////////////////////////////////////////////////////////////////////////
+    // for Multi GPU
+    if (this->getNumprocs() > 1) {
+        
+        // 3D domain decomposition
+        std::vector<std::string> sendProcNeighborsX, sendProcNeighborsY, sendProcNeighborsZ;
+        std::vector<std::string> recvProcNeighborsX, recvProcNeighborsY, recvProcNeighborsZ;
+        for (int i = 0; i < this->getNumprocs(); i++) {
+            sendProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xs.dat");
+            sendProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Ys.dat");
+            sendProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zs.dat");
+            recvProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xr.dat");
+            recvProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Yr.dat");
+            recvProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zr.dat");
+        }
+        this->setPossNeighborFilesX(sendProcNeighborsX, "send");
+        this->setPossNeighborFilesY(sendProcNeighborsY, "send");
+        this->setPossNeighborFilesZ(sendProcNeighborsZ, "send");
+        this->setPossNeighborFilesX(recvProcNeighborsX, "recv");
+        this->setPossNeighborFilesY(recvProcNeighborsY, "recv");
+        this->setPossNeighborFilesZ(recvProcNeighborsZ, "recv");
+    
+    //////////////////////////////////////////////////////////////////////////
+    }
+}
+
+void Parameter::initGridBasePoints()
+{
+    if (this->getGridX().empty())
+        this->setGridX(std::vector<int>(this->getMaxLevel() + 1, 32));
+    if (this->getGridY().empty())
+        this->setGridY(std::vector<int>(this->getMaxLevel() + 1, 32));
+    if (this->getGridZ().empty())
+        this->setGridZ(std::vector<int>(this->getMaxLevel() + 1, 32));
+
+    if (this->getDistX().empty())
+        this->setDistX(std::vector<int>(this->getMaxLevel() + 1, 32));
+    if (this->getDistY().empty())
+        this->setDistY(std::vector<int>(this->getMaxLevel() + 1, 32));
+    if (this->getDistZ().empty())
+        this->setDistZ(std::vector<int>(this->getMaxLevel() + 1, 32));
+}
+
+void Parameter::initDefaultLBMkernelAllLevels(){
+    if (this->getMultiKernelOn() && this->getMultiKernelLevel().empty()) {
         std::vector<int> tmp;
         for (int i = 0; i < this->getMaxLevel() + 1; i++) {
             tmp.push_back(i);
         }
         this->setMultiKernelLevel(tmp);
     }
-
-    if (configData.contains("MultiKernelName"))
-        this->setMultiKernel(configData.getVector<std::string>("MultiKernelName"));
-    else if (this->getMultiKernelOn()) {
+    
+    if (this->getMultiKernelOn() && this->getMultiKernel().empty()) {
         std::vector<std::string> tmp;
         for (int i = 0; i < this->getMaxLevel() + 1; i++) {
             tmp.push_back("CumulantK17Comp");
@@ -709,18 +749,25 @@ void Parameter::setTimeCalcMedEnd(int CalcMedEnd)
 }
 void Parameter::setOutputPath(std::string oPath)
 {
+    // add missing slash to outputPath
+    if (oPath.back() != '/')
+        oPath += "/";
+
     ic.oPath = oPath;
 }
 void Parameter::setOutputPrefix(std::string oPrefix)
 {
-    // std::string test = fname;
     ic.oPrefix = oPrefix;
 }
 void Parameter::setFName(std::string fname)
 {
-    // std::string test = fname;
     ic.fname = fname;
 }
+void Parameter::setGridPath(std::string gridPath)
+{
+    ic.gridPath = gridPath;
+    this->initGridPaths();
+}
 void Parameter::setPrintFiles(bool printfiles)
 {
     ic.printFiles = printfiles;
@@ -996,14 +1043,6 @@ void Parameter::setTempPressD(TempPressforBoundaryConditions *TempPressD)
 {
     this->TempPressD = TempPressD;
 }
-// void Parameter::setNumberOfVeloBCnodes(unsigned int numberOfVeloBCnodes)
-//{
-//   this->numberOfVeloBCnodes = numberOfVeloBCnodes;
-//}
-// void Parameter::setkOutflowQ(unsigned int numberOfOutflowBCnodes)
-//{
-//   this->numberOfOutflowBCnodes = numberOfOutflowBCnodes;
-//}
 // void Parameter::setQinflowH(QforBoundaryConditions* QinflowH)
 //{
 //   this->QinflowH = QinflowH;
@@ -1774,6 +1813,10 @@ std::string Parameter::getFName()
 {
     return ic.fname;
 }
+std::string Parameter::getGridPath()
+{
+    return ic.gridPath;
+}
 bool Parameter::getPrintFiles()
 {
     return ic.printFiles;
@@ -1962,14 +2005,6 @@ TempPressforBoundaryConditions *Parameter::getTempPressD()
 {
     return this->TempPressD;
 }
-// unsigned int Parameter::getNumberOfVeloBCnodes()
-//{
-//   return this->numberOfVeloBCnodes;
-//}
-// unsigned int Parameter::getkOutflowQ()
-//{
-//   return this->numberOfOutflowBCnodes;
-//}
 // QforBoundaryConditions* Parameter::getQinflowH()
 //{
 //   return this->QinflowH;
@@ -2628,4 +2663,4 @@ void Parameter::initProcessNeighborsAfterFtoCZ(int level)
     this->getParD(level)->recvProcessNeighborsAfterFtoCZ.resize(
         this->getParH(level)->recvProcessNeighborsAfterFtoCZ.size());
 }
-////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
\ No newline at end of file
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
index 7888669b0751f051796c6775789ce8ac79cfecca..84ebbaf36595a9af3ec522ec242b763817ad7035 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
+++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h
@@ -38,21 +38,18 @@
 #include <string>
 #include <vector>
 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "LBM/LB.h"
 #include "PreCollisionInteractor/PreCollisionInteractor.h"
 
 #include "VirtualFluids_GPU_export.h"
 
 struct curandStateXORWOW;
-typedef struct curandStateXORWOW curandState;
-namespace vf
-{
-namespace basics
+using curandState = struct curandStateXORWOW;
+namespace vf:: basics
 {
 class ConfigurationFile;
 }
-} // namespace vf
 class CudaStreamManager;
 
 class VelocityReader;
@@ -222,12 +219,9 @@ struct LBMSimulationParameter {
     unsigned int mem_size_kFC_off;
     
     //! \brief stores the boundary condition data
-    QforBoundaryConditions noSlipBC, velocityBC, outflowBC, slipBC, stressBC;
+    QforBoundaryConditions noSlipBC, velocityBC, outflowBC, slipBC, stressBC, pressureBC;
     //! \brief number of lattice nodes for the boundary conditions
-    unsigned int numberOfNoSlipBCnodes = 0, numberOfVeloBCnodes = 0, numberOfOutflowBCnodes = 0, numberOfSlipBCnodes = 0, numberOfStressBCnodes = 0, numberOfPrecursorBCnodes = 0;
-    unsigned int numberOfNoSlipBCnodesRead, numberOfVeloBCnodesRead, numberOfOutflowBCnodesRead, numberOfSlipBCnodesRead, numberOfStressBCnodesRead, numberOfPrecursorBCnodesRead;
-    QforBoundaryConditions pressureBC;
-    unsigned int numberOfPressureBCnodes = 0, numberOfPressureBCnodesRead;
+    unsigned int numberOfNoSlipBCnodesRead, numberOfVeloBCnodesRead, numberOfOutflowBCnodesRead, numberOfSlipBCnodesRead, numberOfStressBCnodesRead, numberOfPressureBCnodesRead, numberOfPrecursorBCnodesRead;
 
     QforBoundaryConditions QpressX0, QpressX1, QpressY0, QpressY1, QpressZ0, QpressZ1; // DEPRECATED
     QforBoundaryConditions propellerBC;
@@ -383,7 +377,8 @@ struct LBMSimulationParameter {
 class VIRTUALFLUIDS_GPU_EXPORT Parameter
 {
 public:
-    Parameter(const vf::basics::ConfigurationFile &configData, int numberOfProcesses, int myId);
+    Parameter(const vf::basics::ConfigurationFile &configData, const int numberOfProcesses = 1, const int myId = 0);
+    Parameter(const int numberOfProcesses = 1, const int myId = 0);
     ~Parameter();
     void initLBMSimulationParameter();
 
@@ -439,6 +434,7 @@ public:
     void setOutputPath(std::string oPath);
     void setOutputPrefix(std::string oPrefix);
     void setFName(std::string fname);
+    void setGridPath(std::string gridPath);
     void setGeometryFileC(std::string GeometryFileC);
     void setGeometryFileM(std::string GeometryFileM);
     void setGeometryFileF(std::string GeometryFileF);
@@ -584,8 +580,6 @@ public:
     void setRecvProcessNeighborsAfterFtoCX(int numberOfNodes, int level, int arrayIndex);
     void setRecvProcessNeighborsAfterFtoCY(int numberOfNodes, int level, int arrayIndex);
     void setRecvProcessNeighborsAfterFtoCZ(int numberOfNodes, int level, int arrayIndex);
-    // void setNumberOfVeloBCnodes(unsigned int numberOfVeloBCnodes);
-    // void setkOutflowQ(unsigned int numberOfOutflowBCnodes);
     // void setQinflowH(QforBoundaryConditions* QinflowH);
     // void setQinflowD(QforBoundaryConditions* QinflowD);
     // void setQoutflowH(QforBoundaryConditions* QoutflowH);
@@ -658,6 +652,7 @@ public:
     std::string getOutputPath();
     std::string getOutputPrefix();
     std::string getFName();
+    std::string getGridPath();
     std::string getGeometryFileC();
     std::string getGeometryFileM();
     std::string getGeometryFileF();
@@ -864,7 +859,11 @@ public:
 
 private:
     void readConfigData(const vf::basics::ConfigurationFile &configData);
+    void initGridPaths();
+    void initGridBasePoints();
+    void initDefaultLBMkernelAllLevels();
 
+private:
     bool compOn{ false };
     bool diffOn{ false };
     bool isF3{ false };
diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
index 876cc3c4f7df639f8f8186e09a6291ecb44f5074..9e05ed1332b34420656e6c0c81f07501da7c7aac 100644
--- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
+++ b/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp
@@ -15,7 +15,7 @@ auto RealEq = [](auto value) {
 #endif
 };
 
-TEST(ParameterTest, passingEmptyFileWithoutPath_ShouldThrow)
+TEST(ParameterTest, passingEmptyFileWithoutPath_ShouldNotThrow)
 {
     // assuming that the config files is stored parallel to this file.
     std::filesystem::path filePath = __FILE__;
@@ -24,7 +24,7 @@ TEST(ParameterTest, passingEmptyFileWithoutPath_ShouldThrow)
     vf::basics::ConfigurationFile config;
     config.load(filePath.string());
 
-    EXPECT_THROW(Parameter para(config, 1, 0), std::runtime_error);
+    EXPECT_NO_THROW(Parameter para(config, 1, 0));
 }
 
 // TODO: test setPossNeighborFilesX
@@ -39,14 +39,12 @@ TEST(ParameterTest, check_all_Parameter_CanBePassedToConstructor)
     vf::basics::ConfigurationFile config;
     config.load(filePath.string());
 
-    Parameter para(config, 1, 0);
-
-    // this two parameters need to be defined in each config file
-    EXPECT_THAT(para.getOutputPath(), testing::Eq("/output/path"));
-    EXPECT_THAT(para.getgeoVec(), testing::Eq("/path/to/grid/geoVec.dat"));
-    // ... all grid files could be tested as well
+    Parameter para(config);
 
     // test optional parameter
+    EXPECT_THAT(para.getOutputPath(), testing::Eq("/output/path/"));
+    EXPECT_THAT(para.getGridPath(), testing::Eq("/path/to/grid/")); // ... all grid files (e.g. multi-gpu/ multi-level) could be tested as well
+    EXPECT_THAT(para.getgeoVec(), testing::Eq("/path/to/grid/geoVec.dat"));
     EXPECT_THAT(para.getMaxDev(), testing::Eq(2));
     EXPECT_THAT(para.getDevices(), testing::ElementsAreArray({ 2, 3 }));
     EXPECT_THAT(para.getOutputPrefix(), testing::Eq("MyPrefix"));
@@ -149,4 +147,62 @@ TEST(ParameterTest, check_all_Parameter_CanBePassedToConstructor)
     EXPECT_THAT(para.getFine(), testing::Eq(1)); // NOGL - 1
     EXPECT_THAT(para.parH.size(), testing::Eq(2));
     EXPECT_THAT(para.parD.size(), testing::Eq(2));
+}
+
+TEST(ParameterTest, defaultGridPath)
+{
+    Parameter para;
+    EXPECT_THAT(para.getGridPath(), testing::Eq("grid/"));
+    EXPECT_THAT(para.getConcentration(), testing::Eq("grid/conc.dat"));
+}
+
+TEST(ParameterTest, defaultGridPathMultiGPU)
+{
+    Parameter para(2, 1);
+
+    EXPECT_THAT(para.getGridPath(), testing::Eq("grid/1/"));
+    EXPECT_THAT(para.getConcentration(), testing::Eq("grid/1/conc.dat"));
+}
+
+TEST(ParameterTest, setGridPathOverridesDefaultGridPath)
+{
+    Parameter para(2, 1);
+    para.setGridPath("gridPathTest");
+
+    EXPECT_THAT( para.getGridPath(), testing::Eq("gridPathTest/1/"));
+    EXPECT_THAT(para.getConcentration(), testing::Eq("gridPathTest/1/conc.dat"));
+}
+
+TEST(ParameterTest, setGridPathOverridesConfigFile)
+{
+    // assuming that the config files is stored parallel to this file.
+    std::filesystem::path filePath = __FILE__;
+    filePath.replace_filename("parameterTest.cfg");
+    vf::basics::ConfigurationFile config;
+    config.load(filePath.string());
+    auto para = Parameter(config, 2, 0);
+    para.setGridPath("gridPathTest");
+
+    EXPECT_THAT( para.getGridPath(), testing::Eq("gridPathTest/0/"));
+    EXPECT_THAT(para.getConcentration(), testing::Eq("gridPathTest/0/conc.dat"));
+
+}
+
+TEST(ParameterTest, userMissedSlash)
+{
+    Parameter para;
+    para.setGridPath("gridPathTest");
+
+    EXPECT_THAT(para.getGridPath(), testing::Eq("gridPathTest/"));
+    EXPECT_THAT(para.getConcentration(), testing::Eq("gridPathTest/conc.dat"));
+
+}
+
+TEST(ParameterTest, userMissedSlashMultiGPU)
+{
+    Parameter para(2, 0);
+    para.setGridPath("gridPathTest");
+
+    EXPECT_THAT(para.getGridPath(), testing::Eq("gridPathTest/0/"));
+    EXPECT_THAT(para.getConcentration(), testing::Eq("gridPathTest/0/conc.dat"));
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/Particles/Particles.cpp b/src/gpu/VirtualFluids_GPU/Particles/Particles.cpp
index 1b52dd8f89e176eadd3ce4103f6f2efacd8355a6..e9b3801e618771b2811d1fa46345349be2e651a9 100644
--- a/src/gpu/VirtualFluids_GPU/Particles/Particles.cpp
+++ b/src/gpu/VirtualFluids_GPU/Particles/Particles.cpp
@@ -74,7 +74,7 @@ void initParticles(Parameter* para)
 		}
 		//////////////////////////////////////////////////////////////////////////
 		//set bool "hot wall"
-		for (int h = 0; h < para->getParH(lev)->geometryBC.numberOfBCnodes; h++)
+		for (uint h = 0; h < para->getParH(lev)->geometryBC.numberOfBCnodes; h++)
 		{
 			if (para->getParH(lev)->coordinateX[para->getParH(lev)->geometryBC.k[h]] < para->getStartXHotWall() || 
 				para->getParH(lev)->coordinateX[para->getParH(lev)->geometryBC.k[h]] > para->getEndXHotWall())
@@ -468,7 +468,7 @@ void rearrangeGeometry(Parameter* para, CudaMemoryManager* cudaMemoryManager)
 		printf("total number of nodes: %d \n", counter2);
 		//////////////////////////////////////////////////////////////////////////
 		//store the index information of the BC nodes in the geometry array 
-		for (int index = 0; index < para->getParH(lev)->geometryBC.numberOfBCnodes; index++)
+		for (uint index = 0; index < para->getParH(lev)->geometryBC.numberOfBCnodes; index++)
 		{
 			para->getParH(lev)->typeOfGridNode[para->getParH(lev)->geometryBC.k[index]] = index + OFFSET_BCsInGeo;
 		}
diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu
index 55c2aef655ea3bad156c16283159434faf9c53c4..4bcfce7363a7ddf1496d68c81b13c761e97b4e5f 100644
--- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu
+++ b/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu
@@ -156,7 +156,7 @@ void WallModelProbe::findPoints(Parameter* para, GridProvider* gridProvider, std
                             std::vector<real>& pointCoordsX_level, std::vector<real>& pointCoordsY_level, std::vector<real>& pointCoordsZ_level,
                             int level)
 {
-    assert( para->getParD(level)->numberOfStressBCnodes > 0 && para->getHasWallModelMonitor() );
+    assert( para->getParD(level)->stressBC.numberOfBCnodes > 0 && para->getHasWallModelMonitor() );
 
     real dt = para->getTimeRatio();
     uint nt = uint((para->getTEnd()-this->tStartAvg)/this->tAvg);
@@ -213,7 +213,7 @@ void WallModelProbe::calculateQuantities(SPtr<ProbeStruct> probeStruct, Paramete
     thrust::permutation_iterator<valIterator, indIterator> dpdz_iter_begin(dpdz_thrust, indices_thrust);
     thrust::permutation_iterator<valIterator, indIterator> dpdz_iter_end  (dpdz_thrust, indices_thrust+probeStruct->nIndices);
 
-    real N = para->getParD(level)->numberOfStressBCnodes;
+    real N = para->getParD(level)->stressBC.numberOfBCnodes;
     real n = (real)probeStruct->vals;
     int nPoints = probeStruct->nPoints;
 
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
index dfe1ccd23d8da075fa627231f1548ba5370f115b..d4d4b97681d6596b4bc3752d74774f035256b9c4 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu
@@ -1,9 +1,10 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
-#include "math.h"
+using namespace vf::lbm::dir;
+
 
 extern "C" __global__ void LB_Init_Comp_AD_27(unsigned int* neighborX,
 	unsigned int* neighborY,
@@ -39,63 +40,63 @@ extern "C" __global__ void LB_Init_Comp_AD_27(unsigned int* neighborX,
 			Distributions27 D27;
 			if (EvenOrOdd == true)
 			{
-				D27.f[dirE] = &DD27[dirE   *size_Mat];
-				D27.f[dirW] = &DD27[dirW   *size_Mat];
-				D27.f[dirN] = &DD27[dirN   *size_Mat];
-				D27.f[dirS] = &DD27[dirS   *size_Mat];
-				D27.f[dirT] = &DD27[dirT   *size_Mat];
-				D27.f[dirB] = &DD27[dirB   *size_Mat];
-				D27.f[dirNE] = &DD27[dirNE  *size_Mat];
-				D27.f[dirSW] = &DD27[dirSW  *size_Mat];
-				D27.f[dirSE] = &DD27[dirSE  *size_Mat];
-				D27.f[dirNW] = &DD27[dirNW  *size_Mat];
-				D27.f[dirTE] = &DD27[dirTE  *size_Mat];
-				D27.f[dirBW] = &DD27[dirBW  *size_Mat];
-				D27.f[dirBE] = &DD27[dirBE  *size_Mat];
-				D27.f[dirTW] = &DD27[dirTW  *size_Mat];
-				D27.f[dirTN] = &DD27[dirTN  *size_Mat];
-				D27.f[dirBS] = &DD27[dirBS  *size_Mat];
-				D27.f[dirBN] = &DD27[dirBN  *size_Mat];
-				D27.f[dirTS] = &DD27[dirTS  *size_Mat];
-				D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-				D27.f[dirTNE] = &DD27[dirTNE *size_Mat];
-				D27.f[dirTSW] = &DD27[dirTSW *size_Mat];
-				D27.f[dirTSE] = &DD27[dirTSE *size_Mat];
-				D27.f[dirTNW] = &DD27[dirTNW *size_Mat];
-				D27.f[dirBNE] = &DD27[dirBNE *size_Mat];
-				D27.f[dirBSW] = &DD27[dirBSW *size_Mat];
-				D27.f[dirBSE] = &DD27[dirBSE *size_Mat];
-				D27.f[dirBNW] = &DD27[dirBNW *size_Mat];
+				D27.f[E] = &DD27[E   *size_Mat];
+				D27.f[W] = &DD27[W   *size_Mat];
+				D27.f[N] = &DD27[N   *size_Mat];
+				D27.f[S] = &DD27[S   *size_Mat];
+				D27.f[T] = &DD27[T   *size_Mat];
+				D27.f[B] = &DD27[B   *size_Mat];
+				D27.f[NE] = &DD27[NE  *size_Mat];
+				D27.f[SW] = &DD27[SW  *size_Mat];
+				D27.f[SE] = &DD27[SE  *size_Mat];
+				D27.f[NW] = &DD27[NW  *size_Mat];
+				D27.f[TE] = &DD27[TE  *size_Mat];
+				D27.f[BW] = &DD27[BW  *size_Mat];
+				D27.f[BE] = &DD27[BE  *size_Mat];
+				D27.f[TW] = &DD27[TW  *size_Mat];
+				D27.f[TN] = &DD27[TN  *size_Mat];
+				D27.f[BS] = &DD27[BS  *size_Mat];
+				D27.f[BN] = &DD27[BN  *size_Mat];
+				D27.f[TS] = &DD27[TS  *size_Mat];
+				D27.f[REST] = &DD27[REST*size_Mat];
+				D27.f[TNE] = &DD27[TNE *size_Mat];
+				D27.f[TSW] = &DD27[TSW *size_Mat];
+				D27.f[TSE] = &DD27[TSE *size_Mat];
+				D27.f[TNW] = &DD27[TNW *size_Mat];
+				D27.f[BNE] = &DD27[BNE *size_Mat];
+				D27.f[BSW] = &DD27[BSW *size_Mat];
+				D27.f[BSE] = &DD27[BSE *size_Mat];
+				D27.f[BNW] = &DD27[BNW *size_Mat];
 			}
 			else
 			{
-				D27.f[dirW] = &DD27[dirE   *size_Mat];
-				D27.f[dirE] = &DD27[dirW   *size_Mat];
-				D27.f[dirS] = &DD27[dirN   *size_Mat];
-				D27.f[dirN] = &DD27[dirS   *size_Mat];
-				D27.f[dirB] = &DD27[dirT   *size_Mat];
-				D27.f[dirT] = &DD27[dirB   *size_Mat];
-				D27.f[dirSW] = &DD27[dirNE  *size_Mat];
-				D27.f[dirNE] = &DD27[dirSW  *size_Mat];
-				D27.f[dirNW] = &DD27[dirSE  *size_Mat];
-				D27.f[dirSE] = &DD27[dirNW  *size_Mat];
-				D27.f[dirBW] = &DD27[dirTE  *size_Mat];
-				D27.f[dirTE] = &DD27[dirBW  *size_Mat];
-				D27.f[dirTW] = &DD27[dirBE  *size_Mat];
-				D27.f[dirBE] = &DD27[dirTW  *size_Mat];
-				D27.f[dirBS] = &DD27[dirTN  *size_Mat];
-				D27.f[dirTN] = &DD27[dirBS  *size_Mat];
-				D27.f[dirTS] = &DD27[dirBN  *size_Mat];
-				D27.f[dirBN] = &DD27[dirTS  *size_Mat];
-				D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-				D27.f[dirBSW] = &DD27[dirTNE *size_Mat];
-				D27.f[dirBNE] = &DD27[dirTSW *size_Mat];
-				D27.f[dirBNW] = &DD27[dirTSE *size_Mat];
-				D27.f[dirBSE] = &DD27[dirTNW *size_Mat];
-				D27.f[dirTSW] = &DD27[dirBNE *size_Mat];
-				D27.f[dirTNE] = &DD27[dirBSW *size_Mat];
-				D27.f[dirTNW] = &DD27[dirBSE *size_Mat];
-				D27.f[dirTSE] = &DD27[dirBNW *size_Mat];
+				D27.f[W] = &DD27[E   *size_Mat];
+				D27.f[E] = &DD27[W   *size_Mat];
+				D27.f[S] = &DD27[N   *size_Mat];
+				D27.f[N] = &DD27[S   *size_Mat];
+				D27.f[B] = &DD27[T   *size_Mat];
+				D27.f[T] = &DD27[B   *size_Mat];
+				D27.f[SW] = &DD27[NE  *size_Mat];
+				D27.f[NE] = &DD27[SW  *size_Mat];
+				D27.f[NW] = &DD27[SE  *size_Mat];
+				D27.f[SE] = &DD27[NW  *size_Mat];
+				D27.f[BW] = &DD27[TE  *size_Mat];
+				D27.f[TE] = &DD27[BW  *size_Mat];
+				D27.f[TW] = &DD27[BE  *size_Mat];
+				D27.f[BE] = &DD27[TW  *size_Mat];
+				D27.f[BS] = &DD27[TN  *size_Mat];
+				D27.f[TN] = &DD27[BS  *size_Mat];
+				D27.f[TS] = &DD27[BN  *size_Mat];
+				D27.f[BN] = &DD27[TS  *size_Mat];
+				D27.f[REST] = &DD27[REST*size_Mat];
+				D27.f[BSW] = &DD27[TNE *size_Mat];
+				D27.f[BNE] = &DD27[TSW *size_Mat];
+				D27.f[BNW] = &DD27[TSE *size_Mat];
+				D27.f[BSE] = &DD27[TNW *size_Mat];
+				D27.f[TSW] = &DD27[BNE *size_Mat];
+				D27.f[TNE] = &DD27[BSW *size_Mat];
+				D27.f[TNW] = &DD27[BSE *size_Mat];
+				D27.f[TSE] = &DD27[BNW *size_Mat];
 			}
 			//////////////////////////////////////////////////////////////////////////
 			real ConcD = Conc[k];
@@ -166,33 +167,33 @@ extern "C" __global__ void LB_Init_Comp_AD_27(unsigned int* neighborX,
 			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 			real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3);
 
-			(D27.f[dirZERO])[kzero] = c8o27* ConcD*(c1o1 - cu_sq);
-			(D27.f[dirE])[ke] = c2o27* ConcD*(c1o1 + c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
-			(D27.f[dirW])[kw] = c2o27* ConcD*(c1o1 + c3o1*(-vx1) + c9o2*(-vx1)*(-vx1) - cu_sq);
-			(D27.f[dirN])[kn] = c2o27* ConcD*(c1o1 + c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
-			(D27.f[dirS])[ks] = c2o27* ConcD*(c1o1 + c3o1*(-vx2) + c9o2*(-vx2)*(-vx2) - cu_sq);
-			(D27.f[dirT])[kt] = c2o27* ConcD*(c1o1 + c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
-			(D27.f[dirB])[kb] = c2o27* ConcD*(c1o1 + c3o1*(-vx3) + c9o2*(-vx3)*(-vx3) - cu_sq);
-			(D27.f[dirNE])[kne] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx2) + c9o2*(vx1 + vx2)*(vx1 + vx2) - cu_sq);
-			(D27.f[dirSW])[ksw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx2) + c9o2*(-vx1 - vx2)*(-vx1 - vx2) - cu_sq);
-			(D27.f[dirSE])[kse] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx2) + c9o2*(vx1 - vx2)*(vx1 - vx2) - cu_sq);
-			(D27.f[dirNW])[knw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx2) + c9o2*(-vx1 + vx2)*(-vx1 + vx2) - cu_sq);
-			(D27.f[dirTE])[kte] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx3) + c9o2*(vx1 + vx3)*(vx1 + vx3) - cu_sq);
-			(D27.f[dirBW])[kbw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx3) + c9o2*(-vx1 - vx3)*(-vx1 - vx3) - cu_sq);
-			(D27.f[dirBE])[kbe] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx3) + c9o2*(vx1 - vx3)*(vx1 - vx3) - cu_sq);
-			(D27.f[dirTW])[ktw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx3) + c9o2*(-vx1 + vx3)*(-vx1 + vx3) - cu_sq);
-			(D27.f[dirTN])[ktn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 + vx3) + c9o2*(vx2 + vx3)*(vx2 + vx3) - cu_sq);
-			(D27.f[dirBS])[kbs] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 - vx3) + c9o2*(-vx2 - vx3)*(-vx2 - vx3) - cu_sq);
-			(D27.f[dirBN])[kbn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 - vx3) + c9o2*(vx2 - vx3)*(vx2 - vx3) - cu_sq);
-			(D27.f[dirTS])[kts] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 + vx3) + c9o2*(-vx2 + vx3)*(-vx2 + vx3) - cu_sq);
-			(D27.f[dirTNE])[ktne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 + vx3) + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) - cu_sq);
-			(D27.f[dirBSW])[kbsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 - vx3) + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) - cu_sq);
-			(D27.f[dirBNE])[kbne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 - vx3) + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) - cu_sq);
-			(D27.f[dirTSW])[ktsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 + vx3) + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) - cu_sq);
-			(D27.f[dirTSE])[ktse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 + vx3) + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) - cu_sq);
-			(D27.f[dirBNW])[kbnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 - vx3) + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) - cu_sq);
-			(D27.f[dirBSE])[kbse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 - vx3) + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) - cu_sq);
-			(D27.f[dirTNW])[ktnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 + vx3) + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) - cu_sq);
+			(D27.f[REST])[kzero] = c8o27* ConcD*(c1o1 - cu_sq);
+			(D27.f[E])[ke] = c2o27* ConcD*(c1o1 + c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq);
+			(D27.f[W])[kw] = c2o27* ConcD*(c1o1 + c3o1*(-vx1) + c9o2*(-vx1)*(-vx1) - cu_sq);
+			(D27.f[N])[kn] = c2o27* ConcD*(c1o1 + c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq);
+			(D27.f[S])[ks] = c2o27* ConcD*(c1o1 + c3o1*(-vx2) + c9o2*(-vx2)*(-vx2) - cu_sq);
+			(D27.f[T])[kt] = c2o27* ConcD*(c1o1 + c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq);
+			(D27.f[B])[kb] = c2o27* ConcD*(c1o1 + c3o1*(-vx3) + c9o2*(-vx3)*(-vx3) - cu_sq);
+			(D27.f[NE])[kne] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx2) + c9o2*(vx1 + vx2)*(vx1 + vx2) - cu_sq);
+			(D27.f[SW])[ksw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx2) + c9o2*(-vx1 - vx2)*(-vx1 - vx2) - cu_sq);
+			(D27.f[SE])[kse] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx2) + c9o2*(vx1 - vx2)*(vx1 - vx2) - cu_sq);
+			(D27.f[NW])[knw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx2) + c9o2*(-vx1 + vx2)*(-vx1 + vx2) - cu_sq);
+			(D27.f[TE])[kte] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx3) + c9o2*(vx1 + vx3)*(vx1 + vx3) - cu_sq);
+			(D27.f[BW])[kbw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx3) + c9o2*(-vx1 - vx3)*(-vx1 - vx3) - cu_sq);
+			(D27.f[BE])[kbe] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx3) + c9o2*(vx1 - vx3)*(vx1 - vx3) - cu_sq);
+			(D27.f[TW])[ktw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx3) + c9o2*(-vx1 + vx3)*(-vx1 + vx3) - cu_sq);
+			(D27.f[TN])[ktn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 + vx3) + c9o2*(vx2 + vx3)*(vx2 + vx3) - cu_sq);
+			(D27.f[BS])[kbs] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 - vx3) + c9o2*(-vx2 - vx3)*(-vx2 - vx3) - cu_sq);
+			(D27.f[BN])[kbn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 - vx3) + c9o2*(vx2 - vx3)*(vx2 - vx3) - cu_sq);
+			(D27.f[TS])[kts] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 + vx3) + c9o2*(-vx2 + vx3)*(-vx2 + vx3) - cu_sq);
+			(D27.f[TNE])[ktne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 + vx3) + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) - cu_sq);
+			(D27.f[BSW])[kbsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 - vx3) + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) - cu_sq);
+			(D27.f[BNE])[kbne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 - vx3) + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) - cu_sq);
+			(D27.f[TSW])[ktsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 + vx3) + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) - cu_sq);
+			(D27.f[TSE])[ktse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 + vx3) + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) - cu_sq);
+			(D27.f[BNW])[kbnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 - vx3) + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) - cu_sq);
+			(D27.f[BSE])[kbse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 - vx3) + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) - cu_sq);
+			(D27.f[TNW])[ktnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 + vx3) + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) - cu_sq);
 			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 		}
 	}
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu
index 6b4058f4bbbeacabb91f3cd5ba55f616565afb23..c3d7e4a22e4b36f4689967486f9b6c3243c766e7 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Init_Comp_AD_7(unsigned int* neighborX,
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
index a411f5be08df855df141f202acd01de2a3e99cae..2a5b8898643ec43c10302e372a1931a165ca1e4e 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 #include <stdio.h>
@@ -41,63 +42,63 @@ extern "C" __global__ void LB_Init_Comp_SP_27(unsigned int* neighborX,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[dirE   ] = &DD[dirE   *size_Mat];
-            D.f[dirW   ] = &DD[dirW   *size_Mat];
-            D.f[dirN   ] = &DD[dirN   *size_Mat];
-            D.f[dirS   ] = &DD[dirS   *size_Mat];
-            D.f[dirT   ] = &DD[dirT   *size_Mat];
-            D.f[dirB   ] = &DD[dirB   *size_Mat];
-            D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-            D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-            D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-            D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-            D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-            D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-            D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-            D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-            D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-            D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-            D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-            D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-            D.f[dirZERO] = &DD[dirZERO*size_Mat];
-            D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-            D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-            D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-            D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-            D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-            D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-            D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-            D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+            D.f[E   ] = &DD[E   *size_Mat];
+            D.f[W   ] = &DD[W   *size_Mat];
+            D.f[N   ] = &DD[N   *size_Mat];
+            D.f[S   ] = &DD[S   *size_Mat];
+            D.f[T   ] = &DD[T   *size_Mat];
+            D.f[B   ] = &DD[B   *size_Mat];
+            D.f[NE  ] = &DD[NE  *size_Mat];
+            D.f[SW  ] = &DD[SW  *size_Mat];
+            D.f[SE  ] = &DD[SE  *size_Mat];
+            D.f[NW  ] = &DD[NW  *size_Mat];
+            D.f[TE  ] = &DD[TE  *size_Mat];
+            D.f[BW  ] = &DD[BW  *size_Mat];
+            D.f[BE  ] = &DD[BE  *size_Mat];
+            D.f[TW  ] = &DD[TW  *size_Mat];
+            D.f[TN  ] = &DD[TN  *size_Mat];
+            D.f[BS  ] = &DD[BS  *size_Mat];
+            D.f[BN  ] = &DD[BN  *size_Mat];
+            D.f[TS  ] = &DD[TS  *size_Mat];
+            D.f[REST] = &DD[REST*size_Mat];
+            D.f[TNE ] = &DD[TNE *size_Mat];
+            D.f[TSW ] = &DD[TSW *size_Mat];
+            D.f[TSE ] = &DD[TSE *size_Mat];
+            D.f[TNW ] = &DD[TNW *size_Mat];
+            D.f[BNE ] = &DD[BNE *size_Mat];
+            D.f[BSW ] = &DD[BSW *size_Mat];
+            D.f[BSE ] = &DD[BSE *size_Mat];
+            D.f[BNW ] = &DD[BNW *size_Mat];
          }
          else
          {
-            D.f[dirW   ] = &DD[dirE   *size_Mat];
-            D.f[dirE   ] = &DD[dirW   *size_Mat];
-            D.f[dirS   ] = &DD[dirN   *size_Mat];
-            D.f[dirN   ] = &DD[dirS   *size_Mat];
-            D.f[dirB   ] = &DD[dirT   *size_Mat];
-            D.f[dirT   ] = &DD[dirB   *size_Mat];
-            D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-            D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-            D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-            D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-            D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-            D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-            D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-            D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-            D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-            D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-            D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-            D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-            D.f[dirZERO] = &DD[dirZERO*size_Mat];
-            D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-            D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-            D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-            D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-            D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-            D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-            D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-            D.f[dirTSE ] = &DD[dirBNW *size_Mat];
+            D.f[W   ] = &DD[E   *size_Mat];
+            D.f[E   ] = &DD[W   *size_Mat];
+            D.f[S   ] = &DD[N   *size_Mat];
+            D.f[N   ] = &DD[S   *size_Mat];
+            D.f[B   ] = &DD[T   *size_Mat];
+            D.f[T   ] = &DD[B   *size_Mat];
+            D.f[SW  ] = &DD[NE  *size_Mat];
+            D.f[NE  ] = &DD[SW  *size_Mat];
+            D.f[NW  ] = &DD[SE  *size_Mat];
+            D.f[SE  ] = &DD[NW  *size_Mat];
+            D.f[BW  ] = &DD[TE  *size_Mat];
+            D.f[TE  ] = &DD[BW  *size_Mat];
+            D.f[TW  ] = &DD[BE  *size_Mat];
+            D.f[BE  ] = &DD[TW  *size_Mat];
+            D.f[BS  ] = &DD[TN  *size_Mat];
+            D.f[TN  ] = &DD[BS  *size_Mat];
+            D.f[TS  ] = &DD[BN  *size_Mat];
+            D.f[BN  ] = &DD[TS  *size_Mat];
+            D.f[REST] = &DD[REST*size_Mat];
+            D.f[BSW ] = &DD[TNE *size_Mat];
+            D.f[BNE ] = &DD[TSW *size_Mat];
+            D.f[BNW ] = &DD[TSE *size_Mat];
+            D.f[BSE ] = &DD[TNW *size_Mat];
+            D.f[TSW ] = &DD[BNE *size_Mat];
+            D.f[TNE ] = &DD[BSW *size_Mat];
+            D.f[TNW ] = &DD[BSE *size_Mat];
+            D.f[TSE ] = &DD[BNW *size_Mat];
          }
          //////////////////////////////////////////////////////////////////////////
          real drho = rho[k];//0.0f;//
@@ -137,33 +138,33 @@ extern "C" __global__ void LB_Init_Comp_SP_27(unsigned int* neighborX,
          //////////////////////////////////////////////////////////////////////////
          real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-         (D.f[dirZERO])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
-         (D.f[dirE   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
-         (D.f[dirW   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-         (D.f[dirN   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-         (D.f[dirS   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-         (D.f[dirT   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
-         (D.f[dirB   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-         (D.f[dirNE  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-         (D.f[dirSW  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-         (D.f[dirSE  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-         (D.f[dirNW  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-         (D.f[dirTE  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-         (D.f[dirBW  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-         (D.f[dirBE  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-         (D.f[dirTW  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-         (D.f[dirTN  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-         (D.f[dirBS  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-         (D.f[dirBN  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-         (D.f[dirTS  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-         (D.f[dirTNE ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-         (D.f[dirBSW ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-         (D.f[dirBNE ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-         (D.f[dirTSW ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-         (D.f[dirTSE ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-         (D.f[dirBNW ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-         (D.f[dirBSE ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-         (D.f[dirTNW ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+         (D.f[REST])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
+         (D.f[E   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
+         (D.f[W   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+         (D.f[N   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+         (D.f[S   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+         (D.f[T   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
+         (D.f[B   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+         (D.f[NE  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+         (D.f[SW  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+         (D.f[SE  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+         (D.f[NW  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+         (D.f[TE  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+         (D.f[BW  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+         (D.f[BE  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+         (D.f[TW  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+         (D.f[TN  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+         (D.f[BS  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+         (D.f[BN  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+         (D.f[TS  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+         (D.f[TNE ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+         (D.f[BSW ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+         (D.f[BNE ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+         (D.f[TSW ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+         (D.f[TSE ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+         (D.f[BNW ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+         (D.f[BSE ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+         (D.f[TNW ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
       }
    }
 }
@@ -214,63 +215,63 @@ extern "C" __global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX,
             Distributions27 D;
             if (EvenOrOdd==true)
             {
-                D.f[dirE   ] = &DD[dirE   *size_Mat];
-                D.f[dirW   ] = &DD[dirW   *size_Mat];
-                D.f[dirN   ] = &DD[dirN   *size_Mat];
-                D.f[dirS   ] = &DD[dirS   *size_Mat];
-                D.f[dirT   ] = &DD[dirT   *size_Mat];
-                D.f[dirB   ] = &DD[dirB   *size_Mat];
-                D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-                D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-                D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-                D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-                D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-                D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-                D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-                D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-                D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-                D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-                D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-                D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-                D.f[dirZERO] = &DD[dirZERO*size_Mat];
-                D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-                D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-                D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-                D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-                D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-                D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-                D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-                D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+                D.f[E   ] = &DD[E   *size_Mat];
+                D.f[W   ] = &DD[W   *size_Mat];
+                D.f[N   ] = &DD[N   *size_Mat];
+                D.f[S   ] = &DD[S   *size_Mat];
+                D.f[T   ] = &DD[T   *size_Mat];
+                D.f[B   ] = &DD[B   *size_Mat];
+                D.f[NE  ] = &DD[NE  *size_Mat];
+                D.f[SW  ] = &DD[SW  *size_Mat];
+                D.f[SE  ] = &DD[SE  *size_Mat];
+                D.f[NW  ] = &DD[NW  *size_Mat];
+                D.f[TE  ] = &DD[TE  *size_Mat];
+                D.f[BW  ] = &DD[BW  *size_Mat];
+                D.f[BE  ] = &DD[BE  *size_Mat];
+                D.f[TW  ] = &DD[TW  *size_Mat];
+                D.f[TN  ] = &DD[TN  *size_Mat];
+                D.f[BS  ] = &DD[BS  *size_Mat];
+                D.f[BN  ] = &DD[BN  *size_Mat];
+                D.f[TS  ] = &DD[TS  *size_Mat];
+                D.f[REST] = &DD[REST*size_Mat];
+                D.f[TNE ] = &DD[TNE *size_Mat];
+                D.f[TSW ] = &DD[TSW *size_Mat];
+                D.f[TSE ] = &DD[TSE *size_Mat];
+                D.f[TNW ] = &DD[TNW *size_Mat];
+                D.f[BNE ] = &DD[BNE *size_Mat];
+                D.f[BSW ] = &DD[BSW *size_Mat];
+                D.f[BSE ] = &DD[BSE *size_Mat];
+                D.f[BNW ] = &DD[BNW *size_Mat];
             }
             else
             {
-                D.f[dirW   ] = &DD[dirE   *size_Mat];
-                D.f[dirE   ] = &DD[dirW   *size_Mat];
-                D.f[dirS   ] = &DD[dirN   *size_Mat];
-                D.f[dirN   ] = &DD[dirS   *size_Mat];
-                D.f[dirB   ] = &DD[dirT   *size_Mat];
-                D.f[dirT   ] = &DD[dirB   *size_Mat];
-                D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-                D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-                D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-                D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-                D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-                D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-                D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-                D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-                D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-                D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-                D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-                D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-                D.f[dirZERO] = &DD[dirZERO*size_Mat];
-                D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-                D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-                D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-                D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-                D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-                D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-                D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-                D.f[dirTSE ] = &DD[dirBNW *size_Mat];
+                D.f[W   ] = &DD[E   *size_Mat];
+                D.f[E   ] = &DD[W   *size_Mat];
+                D.f[S   ] = &DD[N   *size_Mat];
+                D.f[N   ] = &DD[S   *size_Mat];
+                D.f[B   ] = &DD[T   *size_Mat];
+                D.f[T   ] = &DD[B   *size_Mat];
+                D.f[SW  ] = &DD[NE  *size_Mat];
+                D.f[NE  ] = &DD[SW  *size_Mat];
+                D.f[NW  ] = &DD[SE  *size_Mat];
+                D.f[SE  ] = &DD[NW  *size_Mat];
+                D.f[BW  ] = &DD[TE  *size_Mat];
+                D.f[TE  ] = &DD[BW  *size_Mat];
+                D.f[TW  ] = &DD[BE  *size_Mat];
+                D.f[BE  ] = &DD[TW  *size_Mat];
+                D.f[BS  ] = &DD[TN  *size_Mat];
+                D.f[TN  ] = &DD[BS  *size_Mat];
+                D.f[TS  ] = &DD[BN  *size_Mat];
+                D.f[BN  ] = &DD[TS  *size_Mat];
+                D.f[REST] = &DD[REST*size_Mat];
+                D.f[BSW ] = &DD[TNE *size_Mat];
+                D.f[BNE ] = &DD[TSW *size_Mat];
+                D.f[BNW ] = &DD[TSE *size_Mat];
+                D.f[BSE ] = &DD[TNW *size_Mat];
+                D.f[TSW ] = &DD[BNE *size_Mat];
+                D.f[TNE ] = &DD[BSW *size_Mat];
+                D.f[TNW ] = &DD[BSE *size_Mat];
+                D.f[TSE ] = &DD[BNW *size_Mat];
             }
             //////////////////////////////////////////////////////////////////////////
             real drho = rho[k];//0.0f;//
@@ -392,63 +393,63 @@ extern "C" __global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX,
             //////////////////////////////////////////////////////////////////////////
             real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-            (D.f[dirZERO])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
-            (D.f[dirE   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
-            (D.f[dirW   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
-            (D.f[dirN   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
-            (D.f[dirS   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
-            (D.f[dirT   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
-            (D.f[dirB   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
-            (D.f[dirNE  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
-            (D.f[dirSW  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
-            (D.f[dirSE  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
-            (D.f[dirNW  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
-            (D.f[dirTE  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
-            (D.f[dirBW  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
-            (D.f[dirBE  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
-            (D.f[dirTW  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
-            (D.f[dirTN  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
-            (D.f[dirBS  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
-            (D.f[dirBN  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
-            (D.f[dirTS  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
-            (D.f[dirTNE ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
-            (D.f[dirBSW ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
-            (D.f[dirBNE ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
-            (D.f[dirTSW ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
-            (D.f[dirTSE ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
-            (D.f[dirBNW ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
-            (D.f[dirBSE ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
-            (D.f[dirTNW ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
+            (D.f[REST])[kzero] =   c8o27* (drho-cu_sq*(c1o1+drho));
+            (D.f[E   ])[ke   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq));
+            (D.f[W   ])[kw   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq));
+            (D.f[N   ])[kn   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq));
+            (D.f[S   ])[ks   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq));
+            (D.f[T   ])[kt   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq));
+            (D.f[B   ])[kb   ] =   c2o27* (drho+ (c1o1+drho) * (c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq));
+            (D.f[NE  ])[kne  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq));
+            (D.f[SW  ])[ksw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq));
+            (D.f[SE  ])[kse  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq));
+            (D.f[NW  ])[knw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq));
+            (D.f[TE  ])[kte  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq));
+            (D.f[BW  ])[kbw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq));
+            (D.f[BE  ])[kbe  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq));
+            (D.f[TW  ])[ktw  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq));
+            (D.f[TN  ])[ktn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq));
+            (D.f[BS  ])[kbs  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq));
+            (D.f[BN  ])[kbn  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq));
+            (D.f[TS  ])[kts  ] =   c1o54* (drho+ (c1o1+drho) * (c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq));
+            (D.f[TNE ])[ktne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq));
+            (D.f[BSW ])[kbsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq));
+            (D.f[BNE ])[kbne ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq));
+            (D.f[TSW ])[ktsw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq));
+            (D.f[TSE ])[ktse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq));
+            (D.f[BNW ])[kbnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq));
+            (D.f[BSE ])[kbse ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq));
+            (D.f[TNW ])[ktnw ] =   c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq));
 
             //////////////////////////////////////////////////////////////////////////
 
-            (D.f[dirZERO])[kzero] += (c1o1+drho) * f_ZERO;
-            (D.f[dirE   ])[ke   ] += (c1o1+drho) * f_E   ;
-            (D.f[dirW   ])[kw   ] += (c1o1+drho) * f_E   ;
-            (D.f[dirN   ])[kn   ] += (c1o1+drho) * f_N   ;
-            (D.f[dirS   ])[ks   ] += (c1o1+drho) * f_N   ;
-            (D.f[dirT   ])[kt   ] += (c1o1+drho) * f_T   ;
-            (D.f[dirB   ])[kb   ] += (c1o1+drho) * f_T   ;
-            (D.f[dirNE  ])[kne  ] += (c1o1+drho) * f_NE  ;
-            (D.f[dirSW  ])[ksw  ] += (c1o1+drho) * f_NE  ;
-            (D.f[dirSE  ])[kse  ] += (c1o1+drho) * f_SE  ;
-            (D.f[dirNW  ])[knw  ] += (c1o1+drho) * f_SE  ;
-            (D.f[dirTE  ])[kte  ] += (c1o1+drho) * f_TE  ;
-            (D.f[dirBW  ])[kbw  ] += (c1o1+drho) * f_TE  ;
-            (D.f[dirBE  ])[kbe  ] += (c1o1+drho) * f_BE  ;
-            (D.f[dirTW  ])[ktw  ] += (c1o1+drho) * f_BE  ;
-            (D.f[dirTN  ])[ktn  ] += (c1o1+drho) * f_TN  ;
-            (D.f[dirBS  ])[kbs  ] += (c1o1+drho) * f_TN  ;
-            (D.f[dirBN  ])[kbn  ] += (c1o1+drho) * f_BN  ;
-            (D.f[dirTS  ])[kts  ] += (c1o1+drho) * f_BN  ;
-            (D.f[dirTNE ])[ktne ] += (c1o1+drho) * f_TNE ;
-            (D.f[dirBSW ])[kbsw ] += (c1o1+drho) * f_TNE ;
-            (D.f[dirBNE ])[kbne ] += (c1o1+drho) * f_TSW ;
-            (D.f[dirTSW ])[ktsw ] += (c1o1+drho) * f_TSW ;
-            (D.f[dirTSE ])[ktse ] += (c1o1+drho) * f_TSE ;
-            (D.f[dirBNW ])[kbnw ] += (c1o1+drho) * f_TSE ;
-            (D.f[dirBSE ])[kbse ] += (c1o1+drho) * f_TNW ;
-            (D.f[dirTNW ])[ktnw ] += (c1o1+drho) * f_TNW ;
+            (D.f[REST])[kzero] += (c1o1+drho) * f_ZERO;
+            (D.f[E   ])[ke   ] += (c1o1+drho) * f_E   ;
+            (D.f[W   ])[kw   ] += (c1o1+drho) * f_E   ;
+            (D.f[N   ])[kn   ] += (c1o1+drho) * f_N   ;
+            (D.f[S   ])[ks   ] += (c1o1+drho) * f_N   ;
+            (D.f[T   ])[kt   ] += (c1o1+drho) * f_T   ;
+            (D.f[B   ])[kb   ] += (c1o1+drho) * f_T   ;
+            (D.f[NE  ])[kne  ] += (c1o1+drho) * f_NE  ;
+            (D.f[SW  ])[ksw  ] += (c1o1+drho) * f_NE  ;
+            (D.f[SE  ])[kse  ] += (c1o1+drho) * f_SE  ;
+            (D.f[NW  ])[knw  ] += (c1o1+drho) * f_SE  ;
+            (D.f[TE  ])[kte  ] += (c1o1+drho) * f_TE  ;
+            (D.f[BW  ])[kbw  ] += (c1o1+drho) * f_TE  ;
+            (D.f[BE  ])[kbe  ] += (c1o1+drho) * f_BE  ;
+            (D.f[TW  ])[ktw  ] += (c1o1+drho) * f_BE  ;
+            (D.f[TN  ])[ktn  ] += (c1o1+drho) * f_TN  ;
+            (D.f[BS  ])[kbs  ] += (c1o1+drho) * f_TN  ;
+            (D.f[BN  ])[kbn  ] += (c1o1+drho) * f_BN  ;
+            (D.f[TS  ])[kts  ] += (c1o1+drho) * f_BN  ;
+            (D.f[TNE ])[ktne ] += (c1o1+drho) * f_TNE ;
+            (D.f[BSW ])[kbsw ] += (c1o1+drho) * f_TNE ;
+            (D.f[BNE ])[kbne ] += (c1o1+drho) * f_TSW ;
+            (D.f[TSW ])[ktsw ] += (c1o1+drho) * f_TSW ;
+            (D.f[TSE ])[ktse ] += (c1o1+drho) * f_TSE ;
+            (D.f[BNW ])[kbnw ] += (c1o1+drho) * f_TSE ;
+            (D.f[BSE ])[kbse ] += (c1o1+drho) * f_TNW ;
+            (D.f[TNW ])[ktnw ] += (c1o1+drho) * f_TNW ;
 
             //////////////////////////////////////////////////////////////////////////
         }
@@ -456,9 +457,9 @@ extern "C" __global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX,
 	    {
 		    //////////////////////////////////////////////////////////////////////////
 		    Distributions27 D;
-		    D.f[dirZERO] = &DD[dirZERO*size_Mat];
+		    D.f[REST] = &DD[REST*size_Mat];
 		    //////////////////////////////////////////////////////////////////////////
-		    (D.f[dirZERO])[k] = c96o1;
+		    (D.f[REST])[k] = c96o1;
 		    //////////////////////////////////////////////////////////////////////////
 	    }
    }
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
index f69224e726eb9570642a9a1c09c20362c364256c..522c433d4184aaae9dc458bdb70f3e5491cad2d0 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 
@@ -40,21 +41,21 @@ extern "C" __global__ void LB_Init_F3(unsigned int* neighborX,
 			Distributions6 D;
 			if (EvenOrOdd == true)
 			{
-				D.g[dirE] = &G6[dirE   *size_Mat];
-				D.g[dirW] = &G6[dirW   *size_Mat];
-				D.g[dirN] = &G6[dirN   *size_Mat];
-				D.g[dirS] = &G6[dirS   *size_Mat];
-				D.g[dirT] = &G6[dirT   *size_Mat];
-				D.g[dirB] = &G6[dirB   *size_Mat];
+				D.g[E] = &G6[E   *size_Mat];
+				D.g[W] = &G6[W   *size_Mat];
+				D.g[N] = &G6[N   *size_Mat];
+				D.g[S] = &G6[S   *size_Mat];
+				D.g[T] = &G6[T   *size_Mat];
+				D.g[B] = &G6[B   *size_Mat];
 			}
 			else
 			{
-				D.g[dirW] = &G6[dirE   *size_Mat];
-				D.g[dirE] = &G6[dirW   *size_Mat];
-				D.g[dirS] = &G6[dirN   *size_Mat];
-				D.g[dirN] = &G6[dirS   *size_Mat];
-				D.g[dirB] = &G6[dirT   *size_Mat];
-				D.g[dirT] = &G6[dirB   *size_Mat];
+				D.g[W] = &G6[E   *size_Mat];
+				D.g[E] = &G6[W   *size_Mat];
+				D.g[S] = &G6[N   *size_Mat];
+				D.g[N] = &G6[S   *size_Mat];
+				D.g[B] = &G6[T   *size_Mat];
+				D.g[T] = &G6[B   *size_Mat];
 			}
 			//////////////////////////////////////////////////////////////////////////
 			//index
@@ -68,12 +69,12 @@ extern "C" __global__ void LB_Init_F3(unsigned int* neighborX,
 			unsigned int kb = neighborZ[k];
 			//////////////////////////////////////////////////////////////////////////
 
-			(D.g[dirE])[ke] = 0.0f;
-			(D.g[dirW])[kw] = 0.0f;
-			(D.g[dirN])[kn] = 0.0f;
-			(D.g[dirS])[ks] = 0.0f;
-			(D.g[dirT])[kt] = 0.0f;
-			(D.g[dirB])[kb] = 0.0f;
+			(D.g[E])[ke] = 0.0f;
+			(D.g[W])[kw] = 0.0f;
+			(D.g[N])[kn] = 0.0f;
+			(D.g[S])[ks] = 0.0f;
+			(D.g[T])[kt] = 0.0f;
+			(D.g[B])[kb] = 0.0f;
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu
index f304201bf82fe7b84b6e558dfe65ef780c9cd25f..2ab2ec33fcf0131b1fc463327f1d927bb0c5819e 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX,
@@ -39,63 +40,63 @@ extern "C" __global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX,
          Distributions27 D27;
          if (EvenOrOdd==true)
          {
-            D27.f[dirE   ] = &DD27[dirE   *size_Mat];
-            D27.f[dirW   ] = &DD27[dirW   *size_Mat];
-            D27.f[dirN   ] = &DD27[dirN   *size_Mat];
-            D27.f[dirS   ] = &DD27[dirS   *size_Mat];
-            D27.f[dirT   ] = &DD27[dirT   *size_Mat];
-            D27.f[dirB   ] = &DD27[dirB   *size_Mat];
-            D27.f[dirNE  ] = &DD27[dirNE  *size_Mat];
-            D27.f[dirSW  ] = &DD27[dirSW  *size_Mat];
-            D27.f[dirSE  ] = &DD27[dirSE  *size_Mat];
-            D27.f[dirNW  ] = &DD27[dirNW  *size_Mat];
-            D27.f[dirTE  ] = &DD27[dirTE  *size_Mat];
-            D27.f[dirBW  ] = &DD27[dirBW  *size_Mat];
-            D27.f[dirBE  ] = &DD27[dirBE  *size_Mat];
-            D27.f[dirTW  ] = &DD27[dirTW  *size_Mat];
-            D27.f[dirTN  ] = &DD27[dirTN  *size_Mat];
-            D27.f[dirBS  ] = &DD27[dirBS  *size_Mat];
-            D27.f[dirBN  ] = &DD27[dirBN  *size_Mat];
-            D27.f[dirTS  ] = &DD27[dirTS  *size_Mat];
-            D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-            D27.f[dirTNE ] = &DD27[dirTNE *size_Mat];
-            D27.f[dirTSW ] = &DD27[dirTSW *size_Mat];
-            D27.f[dirTSE ] = &DD27[dirTSE *size_Mat];
-            D27.f[dirTNW ] = &DD27[dirTNW *size_Mat];
-            D27.f[dirBNE ] = &DD27[dirBNE *size_Mat];
-            D27.f[dirBSW ] = &DD27[dirBSW *size_Mat];
-            D27.f[dirBSE ] = &DD27[dirBSE *size_Mat];
-            D27.f[dirBNW ] = &DD27[dirBNW *size_Mat];
+            D27.f[E   ] = &DD27[E   *size_Mat];
+            D27.f[W   ] = &DD27[W   *size_Mat];
+            D27.f[N   ] = &DD27[N   *size_Mat];
+            D27.f[S   ] = &DD27[S   *size_Mat];
+            D27.f[T   ] = &DD27[T   *size_Mat];
+            D27.f[B   ] = &DD27[B   *size_Mat];
+            D27.f[NE  ] = &DD27[NE  *size_Mat];
+            D27.f[SW  ] = &DD27[SW  *size_Mat];
+            D27.f[SE  ] = &DD27[SE  *size_Mat];
+            D27.f[NW  ] = &DD27[NW  *size_Mat];
+            D27.f[TE  ] = &DD27[TE  *size_Mat];
+            D27.f[BW  ] = &DD27[BW  *size_Mat];
+            D27.f[BE  ] = &DD27[BE  *size_Mat];
+            D27.f[TW  ] = &DD27[TW  *size_Mat];
+            D27.f[TN  ] = &DD27[TN  *size_Mat];
+            D27.f[BS  ] = &DD27[BS  *size_Mat];
+            D27.f[BN  ] = &DD27[BN  *size_Mat];
+            D27.f[TS  ] = &DD27[TS  *size_Mat];
+            D27.f[REST] = &DD27[REST*size_Mat];
+            D27.f[TNE ] = &DD27[TNE *size_Mat];
+            D27.f[TSW ] = &DD27[TSW *size_Mat];
+            D27.f[TSE ] = &DD27[TSE *size_Mat];
+            D27.f[TNW ] = &DD27[TNW *size_Mat];
+            D27.f[BNE ] = &DD27[BNE *size_Mat];
+            D27.f[BSW ] = &DD27[BSW *size_Mat];
+            D27.f[BSE ] = &DD27[BSE *size_Mat];
+            D27.f[BNW ] = &DD27[BNW *size_Mat];
          }
          else
          {
-            D27.f[dirW   ] = &DD27[dirE   *size_Mat];
-            D27.f[dirE   ] = &DD27[dirW   *size_Mat];
-            D27.f[dirS   ] = &DD27[dirN   *size_Mat];
-            D27.f[dirN   ] = &DD27[dirS   *size_Mat];
-            D27.f[dirB   ] = &DD27[dirT   *size_Mat];
-            D27.f[dirT   ] = &DD27[dirB   *size_Mat];
-            D27.f[dirSW  ] = &DD27[dirNE  *size_Mat];
-            D27.f[dirNE  ] = &DD27[dirSW  *size_Mat];
-            D27.f[dirNW  ] = &DD27[dirSE  *size_Mat];
-            D27.f[dirSE  ] = &DD27[dirNW  *size_Mat];
-            D27.f[dirBW  ] = &DD27[dirTE  *size_Mat];
-            D27.f[dirTE  ] = &DD27[dirBW  *size_Mat];
-            D27.f[dirTW  ] = &DD27[dirBE  *size_Mat];
-            D27.f[dirBE  ] = &DD27[dirTW  *size_Mat];
-            D27.f[dirBS  ] = &DD27[dirTN  *size_Mat];
-            D27.f[dirTN  ] = &DD27[dirBS  *size_Mat];
-            D27.f[dirTS  ] = &DD27[dirBN  *size_Mat];
-            D27.f[dirBN  ] = &DD27[dirTS  *size_Mat];
-            D27.f[dirZERO] = &DD27[dirZERO*size_Mat];
-            D27.f[dirBSW ] = &DD27[dirTNE *size_Mat];
-            D27.f[dirBNE ] = &DD27[dirTSW *size_Mat];
-            D27.f[dirBNW ] = &DD27[dirTSE *size_Mat];
-            D27.f[dirBSE ] = &DD27[dirTNW *size_Mat];
-            D27.f[dirTSW ] = &DD27[dirBNE *size_Mat];
-            D27.f[dirTNE ] = &DD27[dirBSW *size_Mat];
-            D27.f[dirTNW ] = &DD27[dirBSE *size_Mat];
-            D27.f[dirTSE ] = &DD27[dirBNW *size_Mat];
+            D27.f[W   ] = &DD27[E   *size_Mat];
+            D27.f[E   ] = &DD27[W   *size_Mat];
+            D27.f[S   ] = &DD27[N   *size_Mat];
+            D27.f[N   ] = &DD27[S   *size_Mat];
+            D27.f[B   ] = &DD27[T   *size_Mat];
+            D27.f[T   ] = &DD27[B   *size_Mat];
+            D27.f[SW  ] = &DD27[NE  *size_Mat];
+            D27.f[NE  ] = &DD27[SW  *size_Mat];
+            D27.f[NW  ] = &DD27[SE  *size_Mat];
+            D27.f[SE  ] = &DD27[NW  *size_Mat];
+            D27.f[BW  ] = &DD27[TE  *size_Mat];
+            D27.f[TE  ] = &DD27[BW  *size_Mat];
+            D27.f[TW  ] = &DD27[BE  *size_Mat];
+            D27.f[BE  ] = &DD27[TW  *size_Mat];
+            D27.f[BS  ] = &DD27[TN  *size_Mat];
+            D27.f[TN  ] = &DD27[BS  *size_Mat];
+            D27.f[TS  ] = &DD27[BN  *size_Mat];
+            D27.f[BN  ] = &DD27[TS  *size_Mat];
+            D27.f[REST] = &DD27[REST*size_Mat];
+            D27.f[BSW ] = &DD27[TNE *size_Mat];
+            D27.f[BNE ] = &DD27[TSW *size_Mat];
+            D27.f[BNW ] = &DD27[TSE *size_Mat];
+            D27.f[BSE ] = &DD27[TNW *size_Mat];
+            D27.f[TSW ] = &DD27[BNE *size_Mat];
+            D27.f[TNE ] = &DD27[BSW *size_Mat];
+            D27.f[TNW ] = &DD27[BSE *size_Mat];
+            D27.f[TSE ] = &DD27[BNW *size_Mat];
          }
          //////////////////////////////////////////////////////////////////////////
          real ConcD = Conc[k];
@@ -139,33 +140,33 @@ extern "C" __global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX,
          ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
          real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-         (D27.f[dirZERO])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
-         (D27.f[dirE   ])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-         (D27.f[dirW   ])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-         (D27.f[dirN   ])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-         (D27.f[dirS   ])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-         (D27.f[dirT   ])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-         (D27.f[dirB   ])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-         (D27.f[dirNE  ])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-         (D27.f[dirSW  ])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-         (D27.f[dirSE  ])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-         (D27.f[dirNW  ])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-         (D27.f[dirTE  ])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-         (D27.f[dirBW  ])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-         (D27.f[dirBE  ])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-         (D27.f[dirTW  ])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-         (D27.f[dirTN  ])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-         (D27.f[dirBS  ])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-         (D27.f[dirBN  ])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-         (D27.f[dirTS  ])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-         (D27.f[dirTNE ])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-         (D27.f[dirBSW ])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-         (D27.f[dirBNE ])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-         (D27.f[dirTSW ])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-         (D27.f[dirTSE ])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-         (D27.f[dirBNW ])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-         (D27.f[dirBSE ])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-         (D27.f[dirTNW ])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+         (D27.f[REST])[kzero] =   c8o27* ConcD*(c1o1-cu_sq);
+         (D27.f[E   ])[ke   ] =   c2o27* ConcD*(c1o1+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+         (D27.f[W   ])[kw   ] =   c2o27* ConcD*(c1o1+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+         (D27.f[N   ])[kn   ] =   c2o27* ConcD*(c1o1+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+         (D27.f[S   ])[ks   ] =   c2o27* ConcD*(c1o1+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+         (D27.f[T   ])[kt   ] =   c2o27* ConcD*(c1o1+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+         (D27.f[B   ])[kb   ] =   c2o27* ConcD*(c1o1+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+         (D27.f[NE  ])[kne  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+         (D27.f[SW  ])[ksw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+         (D27.f[SE  ])[kse  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+         (D27.f[NW  ])[knw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+         (D27.f[TE  ])[kte  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+         (D27.f[BW  ])[kbw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+         (D27.f[BE  ])[kbe  ] =   c1o54* ConcD*(c1o1+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+         (D27.f[TW  ])[ktw  ] =   c1o54* ConcD*(c1o1+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+         (D27.f[TN  ])[ktn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+         (D27.f[BS  ])[kbs  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+         (D27.f[BN  ])[kbn  ] =   c1o54* ConcD*(c1o1+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+         (D27.f[TS  ])[kts  ] =   c1o54* ConcD*(c1o1+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+         (D27.f[TNE ])[ktne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+         (D27.f[BSW ])[kbsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+         (D27.f[BNE ])[kbne ] =   c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+         (D27.f[TSW ])[ktsw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+         (D27.f[TSE ])[ktse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+         (D27.f[BNW ])[kbnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+         (D27.f[BSE ])[kbse ] =   c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+         (D27.f[TNW ])[ktnw ] =   c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
          ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
       }
    }
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu
index 3a2730c8d116542e06338eb94430c2ee24e75404..2b0e85f38443889fcdbe64bb2cef6a02a7f654a9 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Init_Incomp_AD_7(unsigned int* neighborX,
diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
index ad55c17528b2348536846a8769848f17eeb6244a..27dd33b14086730b157d1ffba495d9ecc5b7b221 100644
--- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
+++ b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu
@@ -1,8 +1,9 @@
 #include "LBM/LB.h" 
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include <lbm/constants/NumericConstants.h>
 
 using namespace vf::lbm::constant;
+using namespace vf::lbm::dir;
 #include "math.h"
 
 extern "C" __global__ void LB_Init_SP_27(unsigned int* neighborX,
@@ -39,63 +40,63 @@ extern "C" __global__ void LB_Init_SP_27(unsigned int* neighborX,
          Distributions27 D;
          if (EvenOrOdd==true)
          {
-            D.f[dirE   ] = &DD[dirE   *size_Mat];
-            D.f[dirW   ] = &DD[dirW   *size_Mat];
-            D.f[dirN   ] = &DD[dirN   *size_Mat];
-            D.f[dirS   ] = &DD[dirS   *size_Mat];
-            D.f[dirT   ] = &DD[dirT   *size_Mat];
-            D.f[dirB   ] = &DD[dirB   *size_Mat];
-            D.f[dirNE  ] = &DD[dirNE  *size_Mat];
-            D.f[dirSW  ] = &DD[dirSW  *size_Mat];
-            D.f[dirSE  ] = &DD[dirSE  *size_Mat];
-            D.f[dirNW  ] = &DD[dirNW  *size_Mat];
-            D.f[dirTE  ] = &DD[dirTE  *size_Mat];
-            D.f[dirBW  ] = &DD[dirBW  *size_Mat];
-            D.f[dirBE  ] = &DD[dirBE  *size_Mat];
-            D.f[dirTW  ] = &DD[dirTW  *size_Mat];
-            D.f[dirTN  ] = &DD[dirTN  *size_Mat];
-            D.f[dirBS  ] = &DD[dirBS  *size_Mat];
-            D.f[dirBN  ] = &DD[dirBN  *size_Mat];
-            D.f[dirTS  ] = &DD[dirTS  *size_Mat];
-            D.f[dirZERO] = &DD[dirZERO*size_Mat];
-            D.f[dirTNE ] = &DD[dirTNE *size_Mat];
-            D.f[dirTSW ] = &DD[dirTSW *size_Mat];
-            D.f[dirTSE ] = &DD[dirTSE *size_Mat];
-            D.f[dirTNW ] = &DD[dirTNW *size_Mat];
-            D.f[dirBNE ] = &DD[dirBNE *size_Mat];
-            D.f[dirBSW ] = &DD[dirBSW *size_Mat];
-            D.f[dirBSE ] = &DD[dirBSE *size_Mat];
-            D.f[dirBNW ] = &DD[dirBNW *size_Mat];
+            D.f[E   ] = &DD[E   *size_Mat];
+            D.f[W   ] = &DD[W   *size_Mat];
+            D.f[N   ] = &DD[N   *size_Mat];
+            D.f[S   ] = &DD[S   *size_Mat];
+            D.f[T   ] = &DD[T   *size_Mat];
+            D.f[B   ] = &DD[B   *size_Mat];
+            D.f[NE  ] = &DD[NE  *size_Mat];
+            D.f[SW  ] = &DD[SW  *size_Mat];
+            D.f[SE  ] = &DD[SE  *size_Mat];
+            D.f[NW  ] = &DD[NW  *size_Mat];
+            D.f[TE  ] = &DD[TE  *size_Mat];
+            D.f[BW  ] = &DD[BW  *size_Mat];
+            D.f[BE  ] = &DD[BE  *size_Mat];
+            D.f[TW  ] = &DD[TW  *size_Mat];
+            D.f[TN  ] = &DD[TN  *size_Mat];
+            D.f[BS  ] = &DD[BS  *size_Mat];
+            D.f[BN  ] = &DD[BN  *size_Mat];
+            D.f[TS  ] = &DD[TS  *size_Mat];
+            D.f[REST] = &DD[REST*size_Mat];
+            D.f[TNE ] = &DD[TNE *size_Mat];
+            D.f[TSW ] = &DD[TSW *size_Mat];
+            D.f[TSE ] = &DD[TSE *size_Mat];
+            D.f[TNW ] = &DD[TNW *size_Mat];
+            D.f[BNE ] = &DD[BNE *size_Mat];
+            D.f[BSW ] = &DD[BSW *size_Mat];
+            D.f[BSE ] = &DD[BSE *size_Mat];
+            D.f[BNW ] = &DD[BNW *size_Mat];
          }
          else
          {
-            D.f[dirW   ] = &DD[dirE   *size_Mat];
-            D.f[dirE   ] = &DD[dirW   *size_Mat];
-            D.f[dirS   ] = &DD[dirN   *size_Mat];
-            D.f[dirN   ] = &DD[dirS   *size_Mat];
-            D.f[dirB   ] = &DD[dirT   *size_Mat];
-            D.f[dirT   ] = &DD[dirB   *size_Mat];
-            D.f[dirSW  ] = &DD[dirNE  *size_Mat];
-            D.f[dirNE  ] = &DD[dirSW  *size_Mat];
-            D.f[dirNW  ] = &DD[dirSE  *size_Mat];
-            D.f[dirSE  ] = &DD[dirNW  *size_Mat];
-            D.f[dirBW  ] = &DD[dirTE  *size_Mat];
-            D.f[dirTE  ] = &DD[dirBW  *size_Mat];
-            D.f[dirTW  ] = &DD[dirBE  *size_Mat];
-            D.f[dirBE  ] = &DD[dirTW  *size_Mat];
-            D.f[dirBS  ] = &DD[dirTN  *size_Mat];
-            D.f[dirTN  ] = &DD[dirBS  *size_Mat];
-            D.f[dirTS  ] = &DD[dirBN  *size_Mat];
-            D.f[dirBN  ] = &DD[dirTS  *size_Mat];
-            D.f[dirZERO] = &DD[dirZERO*size_Mat];
-            D.f[dirBSW ] = &DD[dirTNE *size_Mat];
-            D.f[dirBNE ] = &DD[dirTSW *size_Mat];
-            D.f[dirBNW ] = &DD[dirTSE *size_Mat];
-            D.f[dirBSE ] = &DD[dirTNW *size_Mat];
-            D.f[dirTSW ] = &DD[dirBNE *size_Mat];
-            D.f[dirTNE ] = &DD[dirBSW *size_Mat];
-            D.f[dirTNW ] = &DD[dirBSE *size_Mat];
-            D.f[dirTSE ] = &DD[dirBNW *size_Mat];
+            D.f[W   ] = &DD[E   *size_Mat];
+            D.f[E   ] = &DD[W   *size_Mat];
+            D.f[S   ] = &DD[N   *size_Mat];
+            D.f[N   ] = &DD[S   *size_Mat];
+            D.f[B   ] = &DD[T   *size_Mat];
+            D.f[T   ] = &DD[B   *size_Mat];
+            D.f[SW  ] = &DD[NE  *size_Mat];
+            D.f[NE  ] = &DD[SW  *size_Mat];
+            D.f[NW  ] = &DD[SE  *size_Mat];
+            D.f[SE  ] = &DD[NW  *size_Mat];
+            D.f[BW  ] = &DD[TE  *size_Mat];
+            D.f[TE  ] = &DD[BW  *size_Mat];
+            D.f[TW  ] = &DD[BE  *size_Mat];
+            D.f[BE  ] = &DD[TW  *size_Mat];
+            D.f[BS  ] = &DD[TN  *size_Mat];
+            D.f[TN  ] = &DD[BS  *size_Mat];
+            D.f[TS  ] = &DD[BN  *size_Mat];
+            D.f[BN  ] = &DD[TS  *size_Mat];
+            D.f[REST] = &DD[REST*size_Mat];
+            D.f[BSW ] = &DD[TNE *size_Mat];
+            D.f[BNE ] = &DD[TSW *size_Mat];
+            D.f[BNW ] = &DD[TSE *size_Mat];
+            D.f[BSE ] = &DD[TNW *size_Mat];
+            D.f[TSW ] = &DD[BNE *size_Mat];
+            D.f[TNE ] = &DD[BSW *size_Mat];
+            D.f[TNW ] = &DD[BSE *size_Mat];
+            D.f[TSE ] = &DD[BNW *size_Mat];
          }
          //////////////////////////////////////////////////////////////////////////
          real drho = rho[k];//0.0f;//
@@ -135,41 +136,41 @@ extern "C" __global__ void LB_Init_SP_27(unsigned int* neighborX,
          //////////////////////////////////////////////////////////////////////////
          real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);
 
-         (D.f[dirZERO])[kzero] =   c8o27* (drho-cu_sq);
-         (D.f[dirE   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
-         (D.f[dirW   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
-         (D.f[dirN   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
-         (D.f[dirS   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
-         (D.f[dirT   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
-         (D.f[dirB   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
-         (D.f[dirNE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
-         (D.f[dirSW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
-         (D.f[dirSE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
-         (D.f[dirNW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
-         (D.f[dirTE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
-         (D.f[dirBW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
-         (D.f[dirBE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
-         (D.f[dirTW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
-         (D.f[dirTN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
-         (D.f[dirBS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
-         (D.f[dirBN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
-         (D.f[dirTS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
-         (D.f[dirTNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
-         (D.f[dirBSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
-         (D.f[dirBNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
-         (D.f[dirTSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
-         (D.f[dirTSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
-         (D.f[dirBNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
-         (D.f[dirBSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
-         (D.f[dirTNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
+         (D.f[REST])[kzero] =   c8o27* (drho-cu_sq);
+         (D.f[E   ])[ke   ] =   c2o27* (drho+c3o1*( vx1        )+c9o2*( vx1        )*( vx1        )-cu_sq);
+         (D.f[W   ])[kw   ] =   c2o27* (drho+c3o1*(-vx1        )+c9o2*(-vx1        )*(-vx1        )-cu_sq);
+         (D.f[N   ])[kn   ] =   c2o27* (drho+c3o1*(    vx2     )+c9o2*(     vx2    )*(     vx2    )-cu_sq);
+         (D.f[S   ])[ks   ] =   c2o27* (drho+c3o1*(   -vx2     )+c9o2*(    -vx2    )*(    -vx2    )-cu_sq);
+         (D.f[T   ])[kt   ] =   c2o27* (drho+c3o1*(         vx3)+c9o2*(         vx3)*(         vx3)-cu_sq);
+         (D.f[B   ])[kb   ] =   c2o27* (drho+c3o1*(        -vx3)+c9o2*(        -vx3)*(        -vx3)-cu_sq);
+         (D.f[NE  ])[kne  ] =   c1o54* (drho+c3o1*( vx1+vx2    )+c9o2*( vx1+vx2    )*( vx1+vx2    )-cu_sq);
+         (D.f[SW  ])[ksw  ] =   c1o54* (drho+c3o1*(-vx1-vx2    )+c9o2*(-vx1-vx2    )*(-vx1-vx2    )-cu_sq);
+         (D.f[SE  ])[kse  ] =   c1o54* (drho+c3o1*( vx1-vx2    )+c9o2*( vx1-vx2    )*( vx1-vx2    )-cu_sq);
+         (D.f[NW  ])[knw  ] =   c1o54* (drho+c3o1*(-vx1+vx2    )+c9o2*(-vx1+vx2    )*(-vx1+vx2    )-cu_sq);
+         (D.f[TE  ])[kte  ] =   c1o54* (drho+c3o1*( vx1    +vx3)+c9o2*( vx1    +vx3)*( vx1    +vx3)-cu_sq);
+         (D.f[BW  ])[kbw  ] =   c1o54* (drho+c3o1*(-vx1    -vx3)+c9o2*(-vx1    -vx3)*(-vx1    -vx3)-cu_sq);
+         (D.f[BE  ])[kbe  ] =   c1o54* (drho+c3o1*( vx1    -vx3)+c9o2*( vx1    -vx3)*( vx1    -vx3)-cu_sq);
+         (D.f[TW  ])[ktw  ] =   c1o54* (drho+c3o1*(-vx1    +vx3)+c9o2*(-vx1    +vx3)*(-vx1    +vx3)-cu_sq);
+         (D.f[TN  ])[ktn  ] =   c1o54* (drho+c3o1*(     vx2+vx3)+c9o2*(     vx2+vx3)*(     vx2+vx3)-cu_sq);
+         (D.f[BS  ])[kbs  ] =   c1o54* (drho+c3o1*(    -vx2-vx3)+c9o2*(    -vx2-vx3)*(    -vx2-vx3)-cu_sq);
+         (D.f[BN  ])[kbn  ] =   c1o54* (drho+c3o1*(     vx2-vx3)+c9o2*(     vx2-vx3)*(     vx2-vx3)-cu_sq);
+         (D.f[TS  ])[kts  ] =   c1o54* (drho+c3o1*(    -vx2+vx3)+c9o2*(    -vx2+vx3)*(    -vx2+vx3)-cu_sq);
+         (D.f[TNE ])[ktne ] =   c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq);
+         (D.f[BSW ])[kbsw ] =   c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq);
+         (D.f[BNE ])[kbne ] =   c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq);
+         (D.f[TSW ])[ktsw ] =   c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq);
+         (D.f[TSE ])[ktse ] =   c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq);
+         (D.f[BNW ])[kbnw ] =   c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq);
+         (D.f[BSE ])[kbse ] =   c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq);
+         (D.f[TNW ])[ktnw ] =   c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq);
       }
 	  else
 	  {
 		  //////////////////////////////////////////////////////////////////////////
 		  Distributions27 D;
-		  D.f[dirZERO] = &DD[dirZERO*size_Mat];
+		  D.f[REST] = &DD[REST*size_Mat];
 		  //////////////////////////////////////////////////////////////////////////
-		  (D.f[dirZERO])[k] = c96o1;
+		  (D.f[REST])[k] = c96o1;
 		  //////////////////////////////////////////////////////////////////////////
 	  }
    }
diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h b/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h
index fb399e6b154aeeae766e39564c3c492fb35442d7..9c1b2d86da5823c552e14c686430cdf30e21f85d 100644
--- a/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h
+++ b/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h
@@ -2,7 +2,7 @@
 #define FIND_Q_TEMP_H
 
 #include "LBM/LB.h"
-#include "LBM/D3Q27.h"
+#include "lbm/constants/D3Q27.h"
 #include "Parameter/Parameter.h"
 
 
diff --git a/src/lbm/CumulantChimera.cpp b/src/lbm/CumulantChimera.cpp
index 65dc9b1f82f409447fda54fc0bc5f460533aad1b..e1c27f90b6611640d8e5db47c9432268f5f58f15 100644
--- a/src/lbm/CumulantChimera.cpp
+++ b/src/lbm/CumulantChimera.cpp
@@ -181,7 +181,7 @@ __host__ __device__ void cumulantChimera(KernelParameter parameter, RelaxationRa
     setRelaxationRates(omega, OxxPyyPzz, OxyyPxzz, OxyyMxzz, Oxyz, O4, O5, O6);
 
     ////////////////////////////////////////////////////////////////////////////////////
-    //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) and (115) 
+    //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116) 
     //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05  040 ]</b></a>
     //! with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for different bulk viscosity).
     //!
diff --git a/src/lbm/constants/D3Q27.h b/src/lbm/constants/D3Q27.h
index 0b2cbfdd44e84af590fa2c2be4bf319cbfd4c815..d13da3d610ec69cb5eb5e553491ba047d0b09890 100644
--- a/src/lbm/constants/D3Q27.h
+++ b/src/lbm/constants/D3Q27.h
@@ -1,13 +1,12 @@
 #ifndef LBM_D3Q27_H
 #define LBM_D3Q27_H
 
-namespace vf
-{
-namespace lbm
-{
-namespace dir
+namespace vf::lbm::dir
 {
 
+static constexpr int STARTDIR = 0;
+static constexpr int ENDDIR   = 26;
+
 static constexpr int E    = 0;
 static constexpr int W    = 1;
 static constexpr int N    = 2;
@@ -65,7 +64,4 @@ static constexpr int MMM = 25;
 static constexpr int ZZZ = 26;
 
 }
-}
-}
-
 #endif
diff --git a/src/lbm/constants/NumericConstants.h b/src/lbm/constants/NumericConstants.h
index 56b136be056ba531b23284735365fac93bd47d83..d83b3165852e7d60f56262930df6e36edb429f57 100644
--- a/src/lbm/constants/NumericConstants.h
+++ b/src/lbm/constants/NumericConstants.h
@@ -2,11 +2,7 @@
 #define REAL_CONSTANT_H
 
 
-namespace vf
-{
-namespace lbm 
-{
-namespace constant
+namespace vf::lbm::constant
 {
 
 #ifdef VF_DOUBLE_ACCURACY
@@ -240,8 +236,6 @@ static constexpr float c180oPi = 57.2957795131f;
 
 #endif
 
-}
-}
 }
 
 #endif